@arsedizioni/ars-utils 18.2.507 → 18.2.508

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.
@@ -299,7 +299,7 @@ export class ClipperSearchDialogComponent {
299
299
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: ClipperSearchDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
300
300
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: ClipperSearchDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [
301
301
  MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER
302
- ], viewQueries: [{ propertyName: "okButton", first: true, predicate: ["okButton"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\">&nbsp; Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors(); track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">Trova</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>", styles: [".accordion-panel{background-color:transparent}.accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel-body{padding-bottom:20px!important}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i5.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i5.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i13.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i13.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i13.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i13.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i13.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: DateIntervalChangeDirective, selector: "[dateIntervalChange]", inputs: ["dateIntervalChange", "end"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i14.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i15.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: ChipsSelectorComponent, selector: "chips-selector", inputs: ["options", "collapsedWidth", "collapsedDisplayMode", "collapseAt", "collapseAtContainer", "label", "multiple", "badgeColor", "mode", "required", "disabled", "placeholder"], outputs: ["changed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
302
+ ], viewQueries: [{ propertyName: "okButton", first: true, predicate: ["okButton"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" [collapseAt]=\"599\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [collapseAt]=\"599\" [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\">&nbsp; Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors(); track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">Trova</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>", styles: [".accordion-panel{background-color:transparent}.accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel-body{padding-bottom:20px!important}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i5.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i5.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i13.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i13.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i13.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i13.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i13.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: DateIntervalChangeDirective, selector: "[dateIntervalChange]", inputs: ["dateIntervalChange", "end"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i14.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i15.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: ChipsSelectorComponent, selector: "chips-selector", inputs: ["options", "collapsedWidth", "collapsedDisplayMode", "collapseAt", "collapseAtContainer", "label", "multiple", "badgeColor", "mode", "required", "disabled", "placeholder"], outputs: ["changed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
303
303
  }
304
304
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: ClipperSearchDialogComponent, decorators: [{
305
305
  type: Component,
@@ -329,11 +329,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
329
329
  MatSlideToggleModule,
330
330
  ChipsSelectorComponent,
331
331
  SafeHtmlPipe,
332
- ], template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\">&nbsp; Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors(); track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">Trova</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>", styles: [".accordion-panel{background-color:transparent}.accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel-body{padding-bottom:20px!important}\n"] }]
332
+ ], template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" [collapseAt]=\"599\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [collapseAt]=\"599\" [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\">&nbsp; Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors(); track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">Trova</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>", styles: [".accordion-panel{background-color:transparent}.accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel-body{padding-bottom:20px!important}\n"] }]
333
333
  }], propDecorators: { okButton: [{
334
334
  type: ViewChild,
335
335
  args: ['okButton']
336
336
  }], done: [{
337
337
  type: Output
338
338
  }] } });
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9zZWFyY2gtZGlhbG9nL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLCtDQUErQyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8s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QUFDLElBQUksQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7d0JBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7d0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO3dCQUM5QyxNQUFNO29CQUNSLEtBQUssYUFBYSxDQUFDLDJCQUEyQjt3QkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7d0JBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO3dCQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQzt3QkFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7d0JBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO3dC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a0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsMkJBQTJCO3dCQUMzQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QixZQUFZO3FCQUNiOzhCQUdzQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ1gsSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSLCBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1RpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyQXV0aG9ycyxcclxuICBDbGlwcGVyQ2hhbm5lbCxcclxuICBDbGlwcGVyQ2hhbm5lbHMsIENsaXBwZXJNb2R1bGUsXHJcbiAgQ2xpcHBlclJlZ2lvbnMsXHJcbiAgQ2xpcHBlclNlYXJjaFBhcmFtcyxcclxuICBDbGlwcGVyU2VhcmNoVXRpbHMsIENsaXBwZXJTZWN0b3JUeXBlcywgQ2xpcHBlclNlY3RvcnMsIENsaXBwZXJTZXJ2aWNlLCBDbGlwcGVyU291cmNlcywgU2VjdG9ySW5mb1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwsIERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSwgTmFtZVZhbHVlSXRlbSwgU2FmZUh0bWxQaXBlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgQ2hpcHNTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGcmVlVGV4dEhlbHBDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZnJlZS10ZXh0LWhlbHAvc2VhcmNoLWZyZWUtdGV4dC1oZWxwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwgU2VhcmNoRnJlZVRleHRRdWVyeVBhcmFtcyB9IGZyb20gJy4uL3NlYXJjaC1mcmVlLXRleHQtcXVlcnktYnVpbGRlci9zZWFyY2gtZnJlZS10ZXh0LXF1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGlwcGVyU2VhcmNoRGlhbG9nRGF0YSBleHRlbmRzIENsaXBwZXJTZWFyY2hQYXJhbXMge1xyXG4gIGRpc3BsYXlNb2RlPzogJ2xhd3MnIHwgJ25ld3MnIHwgJ21vZHVsZScgfCAnc2ltcGxlJztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgaG9zdDogeyAnQmluZCc6IFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpIH0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEZsZXhMYXlvdXRNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdERpYWxvZ1RpdGxlLFxyXG4gICAgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0T3B0aW9uTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgRGF0ZUludGVydmFsQ2hhbmdlRGlyZWN0aXZlLFxyXG4gICAgTWF0RGlhbG9nQWN0aW9ucyxcclxuICAgIE1hdERpYWxvZ0Nsb3NlLFxyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxyXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXHJcbiAgICBDaGlwc1NlbGVjdG9yQ29tcG9uZW50LFxyXG4gICAgU2FmZUh0bWxQaXBlLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyU2VhcmNoRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ29rQnV0dG9uJykgb2tCdXR0b24hOiBIVE1MQnV0dG9uRWxlbWVudDtcclxuICBAT3V0cHV0KCkgZG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2xpcHBlclNlYXJjaFBhcmFtcz4oKTtcclxuXHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBDbGlwcGVyU2VhcmNoRGlhbG9nRGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpID8/IHsgZGlzcGxheU1vZGU6ICdzaW1wbGUnIH07XHJcbiAgcHJvdGVjdGVkIHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyA9IG5ldyBDbGlwcGVyU2VhcmNoUGFyYW1zKCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1vZHVsZXNFbnVtOiB0eXBlb2YgQ2xpcHBlck1vZHVsZSA9IENsaXBwZXJNb2R1bGU7XHJcbiAgcHJvdGVjdGVkIHNlY3RvcnM6IFNlY3RvckluZm9bXSA9IENsaXBwZXJTZWN0b3JzLmZpbHRlcigobikgPT4gbi5ncm91cCA9PT0gJ1MnKS5tYXAoKG4pID0+IHtcclxuICAgIHJldHVybiB7IG5hbWU6IG4uc2hvcnROYW1lID8/IG4ubmFtZSwgdmFsdWU6IG4udmFsdWUgfTtcclxuICB9KTtcclxuICBwcm90ZWN0ZWQgaXNMYXdzID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibGF3c1wiIHx8XHJcbiAgICAgICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibW9kdWxlXCIgJiYgdGhpcy5kaWFsb2dEYXRhLm1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5Ob3JtYXRpdmFWaWdlbnRlKSB8fFxyXG4gICAgICAodGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm1vZHVsZVwiICYmIHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuR2F6emV0dGVCb2xsZXR0aW5pRUZvbnRpRGl2ZXJzZSkpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGlzTmV3cyA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIHJldHVybiAodGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm5ld3NcIiB8fFxyXG4gICAgICAodGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm1vZHVsZVwiICYmIHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuTmV3cykgfHxcclxuICAgICAgKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gXCJtb2R1bGVcIiAmJiB0aGlzLmRpYWxvZ0RhdGEubW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLkFwcHJvZm9uZGltZW50aSkpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGlzTW9kdWxlID0gKG1vZHVsZTogQ2xpcHBlck1vZHVsZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gXCJtb2R1bGVcIiAmJiB0aGlzLmRpYWxvZ0RhdGEubW9kdWxlID09PSBtb2R1bGU7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBoYXNSZWdpb25zID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuICh0aGlzLnBhcmFtcy5zZWN0b3JzPy5maWx0ZXIobiA9PiBuLnZhbHVlID09PSAnTFInKS5sZW5ndGggPz8gMCkgPiAwO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGhhc0F1dGhvck9yVHlwZSA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIHJldHVybiB0aGlzLnBhcmFtcy5zZWN0b3JzPy5sZW5ndGggPT09IDEgJiYgdGhpcy5pc0xhd3MoKTtcclxuICB9O1xyXG4gIHByb3RlY3RlZCByZWdpb25zOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSA9IFsuLi5DbGlwcGVyUmVnaW9uc107XHJcbiAgcHJvdGVjdGVkIGNoYW5uZWxzOiBOYW1lVmFsdWVJdGVtPENsaXBwZXJDaGFubmVsPltdID0gWy4uLkNsaXBwZXJDaGFubmVsc107XHJcbiAgcHJvdGVjdGVkIHNvdXJjZXM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFsuLi5DbGlwcGVyU291cmNlc107XHJcbiAgcHJvdGVjdGVkIGF1dGhvcnMgPSBzaWduYWw8TmFtZVZhbHVlSXRlbTxzdHJpbmc+W10+KFtdKTtcclxuICBwcm90ZWN0ZWQgdHlwZXMgPSBzaWduYWw8TmFtZVZhbHVlSXRlbTxzdHJpbmc+W10+KFtdKTtcclxuICBwcm90ZWN0ZWQgdG9waWNzID0gc2lnbmFsPE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdPihbXSk7XHJcbiAgaW50ZXJ2YWw6IERhdGVJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwoKTtcclxuICBzb3VyY2VJbnRlcnZhbDogRGF0ZUludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCgpO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEpIHtcclxuICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gJ3NpbXBsZScpIHtcclxuICAgICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gdGhpcy5kaWFsb2dEYXRhLnRleHQ7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGl0bGVPbmx5ID0gdGhpcy5kaWFsb2dEYXRhLnRpdGxlT25seTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5udW1iZXIgPSB0aGlzLmRpYWxvZ0RhdGEubnVtYmVyO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnllYXIgPSB0aGlzLmRpYWxvZ0RhdGEueWVhcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5mcm9tRGF0ZTtcclxuICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKHRoaXMucGFyYW1zLmZyb21EYXRlLCB0aGlzLnBhcmFtcy50b0RhdGUpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNMYXdzKCkpIHtcclxuICAgICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gdGhpcy5kaWFsb2dEYXRhLnRleHQ7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGl0bGVPbmx5ID0gdGhpcy5kaWFsb2dEYXRhLnRpdGxlT25seTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5udW1iZXIgPSB0aGlzLmRpYWxvZ0RhdGEubnVtYmVyO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnllYXIgPSB0aGlzLmRpYWxvZ0RhdGEueWVhcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5mcm9tRGF0ZTtcclxuICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKHRoaXMucGFyYW1zLmZyb21EYXRlLCB0aGlzLnBhcmFtcy50b0RhdGUpO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZSA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2U7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlTnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLnNvdXJjZU51bWJlcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3VyY2VZZWFyID0gdGhpcy5kaWFsb2dEYXRhLnNvdXJjZVllYXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlRnJvbURhdGUgPSB0aGlzLmRpYWxvZ0RhdGEuc291cmNlRnJvbURhdGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlVG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnNvdXJjZVRvRGF0ZTtcclxuICAgICAgICB0aGlzLnNvdXJjZUludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5zb3VyY2VGcm9tRGF0ZSwgdGhpcy5wYXJhbXMuc291cmNlVG9EYXRlKTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5zZWN0b3JzID0gdGhpcy5kaWFsb2dEYXRhLnNlY3RvcnM7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuYXV0aG9ycyA9IHRoaXMuZGlhbG9nRGF0YS5hdXRob3JzO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnR5cGUgPSB0aGlzLmRpYWxvZ0RhdGEudHlwZTtcclxuICAgICAgICB0aGlzLnBhcmFtcy50b3BpYyA9IHRoaXMuZGlhbG9nRGF0YS50b3BpYztcclxuICAgICAgICB0aGlzLnBhcmFtcy5zaG93Q29tbWVudGVkRG9jdW1lbnRzT25seSA9IHRoaXMuZGlhbG9nRGF0YS5zaG93Q29tbWVudGVkRG9jdW1lbnRzT25seTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTmV3cygpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRpdGxlT25seSA9IHRoaXMuZGlhbG9nRGF0YS50aXRsZU9ubHk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMueWVhciA9IHRoaXMuZGlhbG9nRGF0YS55ZWFyO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLmZyb21EYXRlID0gdGhpcy5kaWFsb2dEYXRhLmZyb21EYXRlO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRvRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS50b0RhdGU7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwodGhpcy5wYXJhbXMuZnJvbURhdGUsIHRoaXMucGFyYW1zLnRvRGF0ZSk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc2VjdG9ycyA9IHRoaXMuZGlhbG9nRGF0YS5zZWN0b3JzO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gJ21vZHVsZScpIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUpIHtcclxuICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZHVsZS5HaXVyaXNwcnVkZW56YTpcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSB0aGlzLmRpYWxvZ0RhdGEudGl0bGVPbmx5O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5udW1iZXIgPSB0aGlzLmRpYWxvZ0RhdGEubnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZyb21EYXRlID0gdGhpcy5kaWFsb2dEYXRhLmZyb21EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuc2VjdG9ycyA9IHRoaXMuZGlhbG9nRGF0YS5zZWN0b3JzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZHVsZS5Nb2RpZmljaGVBYnJvZ2F6aW9uaUVSaW52aWk6XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmNoYW5nZVJlYXNvbiA9IHRoaXMuZGlhbG9nRGF0YS5jaGFuZ2VSZWFzb247XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmNoYW5nZWROdW1iZXIgPSB0aGlzLmRpYWxvZ0RhdGEuY2hhbmdlZE51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuY2hhbmdlZFllYXIgPSB0aGlzLmRpYWxvZ0RhdGEuY2hhbmdlZFllYXI7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmNoYW5nZWRUaXRsZSA9IHRoaXMuZGlhbG9nRGF0YS5jaGFuZ2VkVGl0bGU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLm1vZGlmaWVyTnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm1vZGlmaWVyTnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5tb2RpZmllclllYXIgPSB0aGlzLmRpYWxvZ0RhdGEubW9kaWZpZXJZZWFyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5tb2RpZmllclRpdGxlID0gdGhpcy5kaWFsb2dEYXRhLm1vZGlmaWVyVGl0bGU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnNlY3RvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuc2VjdG9ycztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gdGhpcy5kaWFsb2dEYXRhLnRleHQ7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnRpdGxlT25seSA9IHRoaXMuZGlhbG9nRGF0YS50aXRsZU9ubHk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnllYXIgPSB0aGlzLmRpYWxvZ0RhdGEueWVhcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmRpYWxvZ0RhdGEuZnJvbURhdGU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnRvRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS50b0RhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKHRoaXMucGFyYW1zLmZyb21EYXRlLCB0aGlzLnBhcmFtcy50b0RhdGUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNMYXdzKCkpIHtcclxuICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5nZXRUb3BpY3MoKVxyXG4gICAgICAgIC5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgKG4udmFsdWUubWF0Y2goLy4vZykgfHwgW10pLmZvckVhY2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZSArPSAnJm5ic3A7JztcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBuYW1lICs9IG4udmFsdWUgKyAnIC0gJyArIG4ubmFtZTtcclxuICAgICAgICAgICAgICBuLmhlYWRlciA9IG5hbWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRvcGljcy5zZXQoci52YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5oYXNBdXRob3JPclR5cGUoKSkge1xyXG4gICAgICAgIHRoaXMuc2VjdG9yc0NoYW5nZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgb3RoZXIgbGlzdHMgd2hlbiBzZWN0b3JzIGNoYW5nZXNcclxuICAgKi9cclxuICBzZWN0b3JzQ2hhbmdlZCgpIHtcclxuICAgIC8vIFJlc2V0IGF1dGhvcnMgYW5kIHR5cGVzXHJcbiAgICB0aGlzLnBhcmFtcy5hdXRob3JzID0gW107XHJcbiAgICB0aGlzLnBhcmFtcy50eXBlID0gbnVsbDtcclxuICAgIGlmICh0aGlzLmhhc0F1dGhvck9yVHlwZSgpKSB7XHJcbiAgICAgIGxldCBhdXRob3JzOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSA9IFtdO1xyXG4gICAgICBDbGlwcGVyQXV0aG9ycy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3JzWzBdLnZhbHVlKSB7XHJcbiAgICAgICAgICBhdXRob3JzLnB1c2gobik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTsgICAgICBcclxuICAgICAgbGV0IHR5cGVzOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSA9IFtdO1xyXG4gICAgICBDbGlwcGVyU2VjdG9yVHlwZXMuZm9yRWFjaChuID0+IHtcclxuICAgICAgICBpZiAobi5wYXJlbnRWYWx1ZSA9PT0gdGhpcy5wYXJhbXMuc2VjdG9yc1swXS52YWx1ZSkge1xyXG4gICAgICAgICAgdHlwZXMucHVzaChuKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodHlwZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICB0eXBlcyA9IFsuLi5DbGlwcGVyU2VjdG9yVHlwZXNdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXV0aG9ycy5zZXQoYXV0aG9ycyk7XHJcbiAgICAgIHRoaXMudHlwZXMuc2V0KHR5cGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHNlYXJjaFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjbGVhcigpIHtcclxuICAgIENsaXBwZXJTZWFyY2hVdGlscy5jbGVhcih0aGlzLnBhcmFtcyk7XHJcbiAgICB0aGlzLmludGVydmFsLmNsZWFyKCk7XHJcbiAgICB0aGlzLnNvdXJjZUludGVydmFsLmNsZWFyKCk7XHJcbiAgICB0aGlzLnNlY3RvcnNDaGFuZ2VkKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAqIFNob3cgZnJlZSB0ZXh0IGhlbHBcclxuICovXHJcbiAgcHJvdGVjdGVkIGhlbHAoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2luZm9ybWF6aW9uaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29tcG9zZSBhIGZyZWUgdGV4dCBzZWFyY2ggcXVlcnlcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgY29tcG9zZSgpIHtcclxuICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnY29zdHJ1aXNjaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJ1xyXG4gICAgfSk7XHJcbiAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgLnN1YnNjcmliZSgocjogU2VhcmNoRnJlZVRleHRRdWVyeVBhcmFtcykgPT4ge1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRleHQgPSByLnF1ZXJ5O1xyXG4gICAgICAgIC8vIEZpbmlzaGVkXHJcbiAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Ym1pdCBzZWFyY2hcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb2soKSB7XHJcbiAgICB0aGlzLm9rQnV0dG9uLmZvY3VzKCk7XHJcbiAgICBpZiAodGhpcy5wYXJhbXMudGV4dCkge1xyXG4gICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gQ2xpcHBlclNlYXJjaFV0aWxzLm5vcm1hbGl6ZVRleHRRdWVyeSh0aGlzLnBhcmFtcy50ZXh0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmludGVydmFsKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLmZyb21EYXRlID0gdGhpcy5pbnRlcnZhbC5mcm9tO1xyXG4gICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmludGVydmFsLnRvO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc291cmNlSW50ZXJ2YWwpIHtcclxuICAgICAgdGhpcy5wYXJhbXMuc291cmNlRnJvbURhdGUgPSB0aGlzLnNvdXJjZUludGVydmFsLmZyb207XHJcbiAgICAgIHRoaXMucGFyYW1zLnNvdXJjZVRvRGF0ZSA9IHRoaXMuc291cmNlSW50ZXJ2YWwudG87XHJcbiAgICB9XHJcbiAgICB0aGlzLmRvbmUuZW1pdCh0aGlzLnBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQ2hlY2sgaWYgYSBibG9jayBvZiBleHBhbmRhYmxlIG9wdGlvbnMgaGFzIGEgZmlsdGVyIG9uXHJcbiAqIEBwYXJhbSBibG9jayA6IHRoZSBibG9jayBpZFxyXG4gKiBAcmV0dXJucyB0cnVlIGlmIGF0IGxlYXN0IGEgdmFsdWUgaXMgc2V0XHJcbiAqL1xyXG4gIGhhc0ZpbHRlcihibG9jazogJ3NvdXJjZScgfCAnb3RoZXInIHwgJ21vZGlmaWVyJyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGJsb2NrID09PSAnc291cmNlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbXMuc291cmNlTnVtYmVyICE9IG51bGwgfHxcclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3VyY2VZZWFyICE9IG51bGwgfHxcclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3VyY2UgIT0gbnVsbCB8fFxyXG4gICAgICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuZnJvbSAhPSBudWxsO1xyXG4gICAgfSBlbHNlIGlmIChibG9jayA9PT0gJ290aGVyJykge1xyXG4gICAgICBpZiAoIXRoaXMuaXNNb2R1bGUoQ2xpcHBlck1vZHVsZS5Nb2RpZmljaGVBYnJvZ2F6aW9uaUVSaW52aWkpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnNvdXJjZU51bWJlciAhPSBudWxsIHx8XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy5hdXRob3IgIT0gbnVsbCB8fFxyXG4gICAgICAgICAgdGhpcy5wYXJhbXMudHlwZSAhPSBudWxsIHx8XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy50b3BpYyAhPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtcy5jaGFuZ2VSZWFzb24gIT0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChibG9jayA9PT0gJ21vZGlmaWVyJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbXMubW9kaWZpZXJOdW1iZXIgIT0gbnVsbCB8fFxyXG4gICAgICAgIHRoaXMucGFyYW1zLm1vZGlmaWVyWWVhciAhPSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJUaXRsZSAhPSBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGgyIG1hdC1kaWFsb2ctdGl0bGU+UmljZXJjYTwvaDI+XHJcbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgPGZvcm0gbmFtZT1cImZvcm1cIiAjZj1cIm5nRm9ybVwiIChrZXl1cC5FbnRlcik9XCIhZi5mb3JtLmludmFsaWQgPyBvaygpIDogbnVsbFwiIG5vdmFsaWRhdGU+XHJcbiAgICA8bWF0LWFjY29yZGlvbiBtdWx0aSBkaXNwbGF5TW9kZT1cImZsYXRcIj5cclxuICAgICAgQGlmKGlzTGF3cygpIHx8IGlzTW9kdWxlKG1vZHVsZXNFbnVtLk1vZGlmaWNoZUFicm9nYXppb25pRVJpbnZpaSkpIHtcclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgZXhwYW5kZWQ9XCJ0cnVlXCIgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MCBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBTZXR0b3JpXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxjaGlwcy1zZWxlY3RvciBbKG5nTW9kZWwpXT1cInBhcmFtcy5zZWN0b3JzXCIgW211bHRpcGxlXT1cInRydWVcIiBuYW1lPVwic2VjdG9yc1wiIGxhYmVsPVwiU2V0dG9yaVwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJzZWN0b3JzXCIgKGNoYW5nZWQpPVwic2VjdG9yc0NoYW5nZWQoKVwiIC8+XHJcbiAgICAgICAgQGlmKGhhc1JlZ2lvbnMoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyIHN0eWxlPVwicGFkZGluZy10b3A6IDhweDsgbWFyZ2luLXRvcDo4cHhcIj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxjaGlwcy1zZWxlY3RvciBtb2RlPVwiY29sbGFwc2VkXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuYXV0aG9yc1wiIFttdWx0aXBsZV09XCJ0cnVlXCIgbmFtZT1cImF1dGhvcnNcIlxyXG4gICAgICAgICAgbGFiZWw9XCJUdXR0ZSBsZSByZWdpb25pXCIgW29wdGlvbnNdPVwicmVnaW9uc1wiIC8+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIH0gQGVsc2UgaWYoaXNOZXdzKCkpIHtcclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgZXhwYW5kZWQ9XCJ0cnVlXCIgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MCBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBUaXBvbG9naWFcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGNoaXBzLXNlbGVjdG9yIFsobmdNb2RlbCldPVwicGFyYW1zLnNlY3RvcnNcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIG5hbWU9XCJzZWN0b3JzXCIgbGFiZWw9XCJUaXBvbG9naWFcIlxyXG4gICAgICAgICAgW29wdGlvbnNdPVwic2VjdG9yc1wiIC8+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgfVxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBleHBhbmRlZD1cInRydWVcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIERvY3VtZW50b1xyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICBAaWYgKGlzTGF3cygpIHx8IGlzTW9kdWxlKG1vZHVsZXNFbnVtLkdpdXJpc3BydWRlbnphKSkge1xyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bWVybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCAjZmlsdGVyQnlOdW1iZXI9XCJtYXRJbnB1dFwiIG1hdElucHV0IG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMubnVtYmVyXCIgbmFtZT1cIm51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5udW1iZXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4SGlkZS54cyBmeEZsZXg9XCIzOVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+QW5ubzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMTc1MFwiIG1hdElucHV0IG1heGxlbmd0aD1cIjRcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy55ZWFyXCIgbmFtZT1cInllYXJcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLnllYXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLnllYXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQGlmIChpc0xhd3MoKSB8fCAhaXNNb2R1bGUobW9kdWxlc0VudW0uU2NhZGVuemVFU2VnbmFsYXppb25pKSkge1xyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPkludGVydmFsbG8gZGkgcHViYmxpY2F6aW9uZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cInBpY2tlcjFcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlIFsobmdNb2RlbCldPVwiaW50ZXJ2YWwuZnJvbVwiIFtkYXRlSW50ZXJ2YWxDaGFuZ2VdPVwiaW50ZXJ2YWxcIiAjcmFuZ2VGcm9tMT1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cInJhbmdlRnJvbTFcIiBwbGFjZWhvbGRlcj1cIkRhIGRhdGFcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZSBbKG5nTW9kZWwpXT1cImludGVydmFsLnRvXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiIFtlbmRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAjcmFuZ2VUbzE9XCJuZ01vZGVsXCIgbmFtZT1cInJhbmdlVG8xXCIgcGxhY2Vob2xkZXI9XCJBIGRhdGFcIj5cclxuICAgICAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cclxuICAgICAgICAgICAgQGlmIChpbnRlcnZhbC5mcm9tIHx8IGludGVydmFsLnRvKSB7XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW50ZXJ2YWwuY2xlYXIoKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyMVwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNwaWNrZXIxPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxyXG4gICAgICAgICAgICBAaWYgKHJhbmdlRnJvbTEuaW52YWxpZCB8fCByYW5nZVRvMS5pbnZhbGlkKSB7XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+SW50ZXJ2YWxsbyBub24gdmFsaWRvLjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPlRlc3RvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBtYXhsZW5ndGg9XCIyMDBcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy50ZXh0XCIgbmFtZT1cInRleHRcIiAvPlxyXG4gICAgICAgICAgICBAaWYgKHBhcmFtcy50ZXh0KSB7XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLnRleHQgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggbWF0VG9vbHRpcD1cIk9wemlvbmlcIiBhcmlhLWxhYmVsPVwiT3B6aW9uaVwiXHJcbiAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRleHRPcHRpb25zTWVudVwiPjxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJwYXJhbXMudGl0bGVPbmx5XCIgbmFtZT1cInRpdGxlT25seVwiPkNlcmNhIHNvbG8gbmVsXHJcbiAgICAgICAgICAgICAgICB0aXRvbG88L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBAaWYoaXNMYXdzKCkpIHtcclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctdG9wOjEwcHhcIj5cclxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cInBhcmFtcy5zaG93Q29tbWVudGVkRG9jdW1lbnRzT25seVwiIG5hbWU9XCJzaG93Q29tbWVudGVkRG9jdW1lbnRzT25seVwiPiZuYnNwOyBNb3N0cmFcclxuICAgICAgICAgICAgICAgIHNvbG8gbm9ybWUgY29uIGNvbW1lbnRpPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgQGlmKGlzTGF3cygpKSB7XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJoYXNGaWx0ZXIoJ3NvdXJjZScpXCIgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MCBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBGb250ZVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtZXJvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuc291cmNlTnVtYmVyXCIgbmFtZT1cInNvdXJjZU51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuc291cmNlTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5zb3VyY2VOdW1iZXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4SGlkZS54cyBmeEZsZXg9XCIzOVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+QW5ubzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMTc1MFwiIG1hdElucHV0IG1heGxlbmd0aD1cIjRcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5zb3VyY2VZZWFyXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJzb3VyY2VZZWFyXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5zb3VyY2VZZWFyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5zb3VyY2VZZWFyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5JbnRlcnZhbGxvIGRpIHB1YmJsaWNhemlvbmU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtyYW5nZVBpY2tlcl09XCJwaWNrZXIyXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBbKG5nTW9kZWwpXT1cInNvdXJjZUludGVydmFsLmZyb21cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCJcclxuICAgICAgICAgICAgICAgICNyYW5nZUZyb20yPVwibmdNb2RlbFwiIG5hbWU9XCJyYW5nZUZyb20yXCIgcGxhY2Vob2xkZXI9XCJEYSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgWyhuZ01vZGVsKV09XCJzb3VyY2VJbnRlcnZhbC50b1wiIFtkYXRlSW50ZXJ2YWxDaGFuZ2VdPVwic291cmNlSW50ZXJ2YWxcIiBbZW5kXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgI3JhbmdlVG8yPVwibmdNb2RlbFwiIG5hbWU9XCJyYW5nZVRvMlwiIHBsYWNlaG9sZGVyPVwiQSBkYXRhXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XHJcbiAgICAgICAgICAgIEBpZiAoc291cmNlSW50ZXJ2YWwuZnJvbSB8fCBzb3VyY2VJbnRlcnZhbC50bykge1xyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNvdXJjZUludGVydmFsLmNsZWFyKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlcjJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyMj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuICAgICAgICAgICAgQGlmIChyYW5nZUZyb20yLmludmFsaWQgfHwgcmFuZ2VUbzIuaW52YWxpZCkge1xyXG4gICAgICAgICAgICA8bWF0LWVycm9yPkludGVydmFsbG8gbm9uIHZhbGlkby48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXBvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnNvdXJjZVwiIG5hbWU9XCJzb3VyY2VcIj5cclxuICAgICAgICAgICAgICBAZm9yIChzIG9mIHNvdXJjZXM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJzLnZhbHVlXCIgW21hdFRvb2x0aXBdPVwicy5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICB7e3MubmFtZX19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgW2V4cGFuZGVkXT1cImhhc0ZpbHRlcignb3RoZXInKVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBBbHRyZSBvcHppb25pXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgICAgIEBpZihpc0xhd3MoKSkge1xyXG4gICAgICAgICAgQGlmKCFoYXNSZWdpb25zKCkpIHtcclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5BdXRvcmU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMuYXV0aG9yXCIgbmFtZT1cImF1dGhvclwiPlxyXG4gICAgICAgICAgICAgIEBmb3IgKGEgb2YgYXV0aG9ycygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiYS52YWx1ZVwiIFttYXRUb29sdGlwXT1cImEubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3thLm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkb2N1bWVudG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMudHlwZVwiIG5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAodCBvZiB0eXBlcygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC52YWx1ZVwiIFttYXRUb29sdGlwXT1cInQubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3t0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+QXJnb21lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnRvcGljXCIgbmFtZT1cInRvcGljXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAodCBvZiB0b3BpY3MoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInQudmFsdWVcIiBbbWF0VG9vbHRpcF09XCJ0Lm5hbWVcIj5cclxuICAgICAgICAgICAgICAgIHt7dC5uYW1lfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcblxyXG4gICAgICB9IEBlbHNlIGlmKGlzTW9kdWxlKG1vZHVsZXNFbnVtLk1vZGlmaWNoZUFicm9nYXppb25pRVJpbnZpaSkpIHtcclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgZXhwYW5kZWQgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MCBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBEb2N1bWVudG8gbW9kaWZpY2F0b1xyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtZXJvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuY2hhbmdlZE51bWJlclwiIG5hbWU9XCJjaGFuZ2VkTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICNmaWx0ZXJCeUNoYW5nZU51bWJlcj1cIm1hdElucHV0XCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5jaGFuZ2VkTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5jaGFuZ2VkTnVtYmVyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEhpZGUueHMgZnhGbGV4PVwiMzlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjE3NTBcIiBtYXRJbnB1dCBtYXhsZW5ndGg9XCI0XCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuY2hhbmdlZFllYXJcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cImNoYW5nZWRZZWFyXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5jaGFuZ2VkWWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuY2hhbmdlZFllYXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPlRpdG9sbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiMjAwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuY2hhbmdlZFRpdGxlXCIgbmFtZT1cImNoYW5nZWRUaXRsZVwiIC8+XHJcbiAgICAgICAgICAgIEBpZiAocGFyYW1zLmNoYW5nZWRUaXRsZSkge1xyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5jaGFuZ2VkVGl0bGUgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgW2V4cGFuZGVkXT1cImhhc0ZpbHRlcignbW9kaWZpZXInKVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgRG9jdW1lbnRvIG1vZGlmaWNhbnRlXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjU5XCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5OdW1lcm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiMTBcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5tb2RpZmllck51bWJlclwiIG5hbWU9XCJtb2RpZmllck51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuY2hhbmdlZE51bWJlcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMubW9kaWZpZXJOdW1iZXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4SGlkZS54cyBmeEZsZXg9XCIzOVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+QW5ubzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMTc1MFwiIG1hdElucHV0IG1heGxlbmd0aD1cIjRcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5tb2RpZmllclllYXJcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cIm1vZGlmaWVyWWVhclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJZZWFyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5tb2RpZmllclllYXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPlRpdG9sbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiMjAwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMubW9kaWZpZXJUaXRsZVwiIG5hbWU9XCJtb2RpZmllclRpdGxlXCIgLz5cclxuICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJUaXRsZSkge1xyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5tb2RpZmllclRpdGxlID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJoYXNGaWx0ZXIoJ290aGVyJylcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgQWx0cmUgb3B6aW9uaVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+TW90aXZvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLmNoYW5nZVJlYXNvblwiIG5hbWU9XCJjaGFuZ2VSZWFzb25cIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5UdXR0aTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgPC9mb3JtPlxyXG48L21hdC1kaWFsb2ctY29udGVudD5cclxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsPlxyXG4gICAgPGRpdiBmeEZsZXg9XCIzMFwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIChjbGljayk9XCJjbGVhcigpXCIgY29sb3I9XCJwcmltYXJ5XCI+UHVsaXNjaTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjcwXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAjb2tCdXR0b24gW2Rpc2FibGVkXT1cImYuZm9ybS5pbnZhbGlkXCIgKGNsaWNrKT1cIm9rKClcIj5Ucm92YTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCI+Q2hpdWRpPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XHJcbjxtYXQtbWVudSAjdGV4dE9wdGlvbnNNZW51PVwibWF0TWVudVwiPlxyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY29tcG9zZSgpXCI+XHJcbiAgICA8bWF0LWljb24+YnVpbGQ8L21hdC1pY29uPkNvbXBvbmlcclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImhlbHAoKVwiPlxyXG4gICAgPG1hdC1pY29uPmhlbHA8L21hdC1pY29uPkNvbWUgdXNhcmUgbGEgcmljZXJjYSBpbiB0ZXN0byBsaWJlcm9cclxuICA8L2J1dHRvbj5cclxuPC9tYXQtbWVudT4iXX0=
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9zZWFyY2gtZGlhbG9nL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLCtDQUErQyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFDTCxjQUFjLEVBRWQsZUFBZSxFQUFFLGFBQWEsRUFDOUIsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFDdkYsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLDJCQUEyQixFQUFpQixZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDOUcsT0FBTyxFQUFFLDBDQUEwQyxFQUE2QixNQUFNLDRFQUE0RSxDQUFDO0FBQ25LLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQTBDekQsTUFBTSxPQUFPLDRCQUE0QjtJQW5DekM7UUFxQ1ksU0FBSSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBRWpELGdCQUFXLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFDakQsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEMsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsZUFBVSxHQUE0QixNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDM0YsV0FBTSxHQUF3QixJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDL0MsZ0JBQVcsR0FBeUIsYUFBYSxDQUFDO1FBQzNELFlBQU8sR0FBaUIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4RixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ08sV0FBTSxHQUFHLEdBQVksRUFBRTtZQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEtBQUssTUFBTTtnQkFDNUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDLGdCQUFnQixDQUFDO2dCQUN2RyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxhQUFhLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDO1FBQzVILENBQUMsQ0FBQztRQUNRLFdBQU0sR0FBRyxHQUFZLEVBQUU7WUFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLE1BQU07Z0JBQzVDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQzNGLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQzVHLENBQUMsQ0FBQztRQUNRLGFBQVEsR0FBRyxDQUFDLE1BQXFCLEVBQVcsRUFBRTtZQUN0RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUM7UUFDdkYsQ0FBQyxDQUFBO1FBQ1MsZUFBVSxHQUFHLEdBQVksRUFBRTtZQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQztRQUNRLG9CQUFlLEdBQUcsR0FBWSxFQUFFO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUQsQ0FBQyxDQUFDO1FBQ1EsWUFBTyxHQUE0QixDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDdkQsYUFBUSxHQUFvQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDakUsWUFBTyxHQUFtQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDOUQsWUFBTyxHQUFHLE1BQU0sQ0FBMEIsRUFBRSxDQUFDLENBQUM7UUFDOUMsVUFBSyxHQUFHLE1BQU0sQ0FBMEIsRUFBRSxDQUFDLENBQUM7UUFDNUMsV0FBTSxHQUFHLE1BQU0sQ0FBMEIsRUFBRSxDQUFDLENBQUM7UUFDdkQsYUFBUSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLG1CQUFjLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7S0FpT25EO0lBL05DLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0UsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztnQkFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM3RixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDO1lBQ3RGLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ2hELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDcEQsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUMvQixLQUFLLGFBQWEsQ0FBQyxjQUFjO3dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7d0JBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7d0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO3dCQUM5QyxNQUFNO29CQUNSLEtBQUssYUFBYSxDQUFDLDJCQUEyQjt3QkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7d0JBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO3dCQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQzt3QkFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7d0JBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO3dC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a0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsMkJBQTJCO3dCQUMzQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QixZQUFZO3FCQUNiOzhCQUdzQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ1gsSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSLCBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1RpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyQXV0aG9ycyxcclxuICBDbGlwcGVyQ2hhbm5lbCxcclxuICBDbGlwcGVyQ2hhbm5lbHMsIENsaXBwZXJNb2R1bGUsXHJcbiAgQ2xpcHBlclJlZ2lvbnMsXHJcbiAgQ2xpcHBlclNlYXJjaFBhcmFtcyxcclxuICBDbGlwcGVyU2VhcmNoVXRpbHMsIENsaXBwZXJTZWN0b3JUeXBlcywgQ2xpcHBlclNlY3RvcnMsIENsaXBwZXJTZXJ2aWNlLCBDbGlwcGVyU291cmNlcywgU2VjdG9ySW5mb1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwsIERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSwgTmFtZVZhbHVlSXRlbSwgU2FmZUh0bWxQaXBlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgQ2hpcHNTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGcmVlVGV4dEhlbHBDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZnJlZS10ZXh0LWhlbHAvc2VhcmNoLWZyZWUtdGV4dC1oZWxwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwgU2VhcmNoRnJlZVRleHRRdWVyeVBhcmFtcyB9IGZyb20gJy4uL3NlYXJjaC1mcmVlLXRleHQtcXVlcnktYnVpbGRlci9zZWFyY2gtZnJlZS10ZXh0LXF1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGlwcGVyU2VhcmNoRGlhbG9nRGF0YSBleHRlbmRzIENsaXBwZXJTZWFyY2hQYXJhbXMge1xyXG4gIGRpc3BsYXlNb2RlPzogJ2xhd3MnIHwgJ25ld3MnIHwgJ21vZHVsZScgfCAnc2ltcGxlJztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgaG9zdDogeyAnQmluZCc6IFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpIH0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEZsZXhMYXlvdXRNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdERpYWxvZ1RpdGxlLFxyXG4gICAgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0T3B0aW9uTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgRGF0ZUludGVydmFsQ2hhbmdlRGlyZWN0aXZlLFxyXG4gICAgTWF0RGlhbG9nQWN0aW9ucyxcclxuICAgIE1hdERpYWxvZ0Nsb3NlLFxyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxyXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXHJcbiAgICBDaGlwc1NlbGVjdG9yQ29tcG9uZW50LFxyXG4gICAgU2FmZUh0bWxQaXBlLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyU2VhcmNoRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ29rQnV0dG9uJykgb2tCdXR0b24hOiBIVE1MQnV0dG9uRWxlbWVudDtcclxuICBAT3V0cHV0KCkgZG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2xpcHBlclNlYXJjaFBhcmFtcz4oKTtcclxuXHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBDbGlwcGVyU2VhcmNoRGlhbG9nRGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpID8/IHsgZGlzcGxheU1vZGU6ICdzaW1wbGUnIH07XHJcbiAgcHJvdGVjdGVkIHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyA9IG5ldyBDbGlwcGVyU2VhcmNoUGFyYW1zKCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1vZHVsZXNFbnVtOiB0eXBlb2YgQ2xpcHBlck1vZHVsZSA9IENsaXBwZXJNb2R1bGU7XHJcbiAgcHJvdGVjdGVkIHNlY3RvcnM6IFNlY3RvckluZm9bXSA9IENsaXBwZXJTZWN0b3JzLmZpbHRlcigobikgPT4gbi5ncm91cCA9PT0gJ1MnKS5tYXAoKG4pID0+IHtcclxuICAgIHJldHVybiB7IG5hbWU6IG4uc2hvcnROYW1lID8/IG4ubmFtZSwgdmFsdWU6IG4udmFsdWUgfTtcclxuICB9KTtcclxuICBwcm90ZWN0ZWQgaXNMYXdzID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibGF3c1wiIHx8XHJcbiAgICAgICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibW9kdWxlXCIgJiYgdGhpcy5kaWFsb2dEYXRhLm1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5Ob3JtYXRpdmFWaWdlbnRlKSB8fFxyXG4gICAgICAodGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm1vZHVsZVwiICYmIHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuR2F6emV0dGVCb2xsZXR0aW5pRUZvbnRpRGl2ZXJzZSkpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGlzTmV3cyA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIHJldHVybiAodGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm5ld3NcIiB8fFxyXG4gICAgICAodGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm1vZHVsZVwiICYmIHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuTmV3cykgfHxcclxuICAgICAgKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gXCJtb2R1bGVcIiAmJiB0aGlzLmRpYWxvZ0RhdGEubW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLkFwcHJvZm9uZGltZW50aSkpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGlzTW9kdWxlID0gKG1vZHVsZTogQ2xpcHBlck1vZHVsZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gXCJtb2R1bGVcIiAmJiB0aGlzLmRpYWxvZ0RhdGEubW9kdWxlID09PSBtb2R1bGU7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBoYXNSZWdpb25zID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuICh0aGlzLnBhcmFtcy5zZWN0b3JzPy5maWx0ZXIobiA9PiBuLnZhbHVlID09PSAnTFInKS5sZW5ndGggPz8gMCkgPiAwO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGhhc0F1dGhvck9yVHlwZSA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIHJldHVybiB0aGlzLnBhcmFtcy5zZWN0b3JzPy5sZW5ndGggPT09IDEgJiYgdGhpcy5pc0xhd3MoKTtcclxuICB9O1xyXG4gIHByb3RlY3RlZCByZWdpb25zOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSA9IFsuLi5DbGlwcGVyUmVnaW9uc107XHJcbiAgcHJvdGVjdGVkIGNoYW5uZWxzOiBOYW1lVmFsdWVJdGVtPENsaXBwZXJDaGFubmVsPltdID0gWy4uLkNsaXBwZXJDaGFubmVsc107XHJcbiAgcHJvdGVjdGVkIHNvdXJjZXM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFsuLi5DbGlwcGVyU291cmNlc107XHJcbiAgcHJvdGVjdGVkIGF1dGhvcnMgPSBzaWduYWw8TmFtZVZhbHVlSXRlbTxzdHJpbmc+W10+KFtdKTtcclxuICBwcm90ZWN0ZWQgdHlwZXMgPSBzaWduYWw8TmFtZVZhbHVlSXRlbTxzdHJpbmc+W10+KFtdKTtcclxuICBwcm90ZWN0ZWQgdG9waWNzID0gc2lnbmFsPE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdPihbXSk7XHJcbiAgaW50ZXJ2YWw6IERhdGVJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwoKTtcclxuICBzb3VyY2VJbnRlcnZhbDogRGF0ZUludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCgpO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEpIHtcclxuICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gJ3NpbXBsZScpIHtcclxuICAgICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gdGhpcy5kaWFsb2dEYXRhLnRleHQ7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGl0bGVPbmx5ID0gdGhpcy5kaWFsb2dEYXRhLnRpdGxlT25seTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5udW1iZXIgPSB0aGlzLmRpYWxvZ0RhdGEubnVtYmVyO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnllYXIgPSB0aGlzLmRpYWxvZ0RhdGEueWVhcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5mcm9tRGF0ZTtcclxuICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKHRoaXMucGFyYW1zLmZyb21EYXRlLCB0aGlzLnBhcmFtcy50b0RhdGUpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNMYXdzKCkpIHtcclxuICAgICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gdGhpcy5kaWFsb2dEYXRhLnRleHQ7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGl0bGVPbmx5ID0gdGhpcy5kaWFsb2dEYXRhLnRpdGxlT25seTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5udW1iZXIgPSB0aGlzLmRpYWxvZ0RhdGEubnVtYmVyO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnllYXIgPSB0aGlzLmRpYWxvZ0RhdGEueWVhcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5mcm9tRGF0ZTtcclxuICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKHRoaXMucGFyYW1zLmZyb21EYXRlLCB0aGlzLnBhcmFtcy50b0RhdGUpO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZSA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2U7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlTnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLnNvdXJjZU51bWJlcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3VyY2VZZWFyID0gdGhpcy5kaWFsb2dEYXRhLnNvdXJjZVllYXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlRnJvbURhdGUgPSB0aGlzLmRpYWxvZ0RhdGEuc291cmNlRnJvbURhdGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlVG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnNvdXJjZVRvRGF0ZTtcclxuICAgICAgICB0aGlzLnNvdXJjZUludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5zb3VyY2VGcm9tRGF0ZSwgdGhpcy5wYXJhbXMuc291cmNlVG9EYXRlKTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5zZWN0b3JzID0gdGhpcy5kaWFsb2dEYXRhLnNlY3RvcnM7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuYXV0aG9ycyA9IHRoaXMuZGlhbG9nRGF0YS5hdXRob3JzO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnR5cGUgPSB0aGlzLmRpYWxvZ0RhdGEudHlwZTtcclxuICAgICAgICB0aGlzLnBhcmFtcy50b3BpYyA9IHRoaXMuZGlhbG9nRGF0YS50b3BpYztcclxuICAgICAgICB0aGlzLnBhcmFtcy5zaG93Q29tbWVudGVkRG9jdW1lbnRzT25seSA9IHRoaXMuZGlhbG9nRGF0YS5zaG93Q29tbWVudGVkRG9jdW1lbnRzT25seTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTmV3cygpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRpdGxlT25seSA9IHRoaXMuZGlhbG9nRGF0YS50aXRsZU9ubHk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMueWVhciA9IHRoaXMuZGlhbG9nRGF0YS55ZWFyO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLmZyb21EYXRlID0gdGhpcy5kaWFsb2dEYXRhLmZyb21EYXRlO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRvRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS50b0RhdGU7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwodGhpcy5wYXJhbXMuZnJvbURhdGUsIHRoaXMucGFyYW1zLnRvRGF0ZSk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc2VjdG9ycyA9IHRoaXMuZGlhbG9nRGF0YS5zZWN0b3JzO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gJ21vZHVsZScpIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUpIHtcclxuICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZHVsZS5HaXVyaXNwcnVkZW56YTpcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSB0aGlzLmRpYWxvZ0RhdGEudGl0bGVPbmx5O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5udW1iZXIgPSB0aGlzLmRpYWxvZ0RhdGEubnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZyb21EYXRlID0gdGhpcy5kaWFsb2dEYXRhLmZyb21EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuc2VjdG9ycyA9IHRoaXMuZGlhbG9nRGF0YS5zZWN0b3JzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZHVsZS5Nb2RpZmljaGVBYnJvZ2F6aW9uaUVSaW52aWk6XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmNoYW5nZVJlYXNvbiA9IHRoaXMuZGlhbG9nRGF0YS5jaGFuZ2VSZWFzb247XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmNoYW5nZWROdW1iZXIgPSB0aGlzLmRpYWxvZ0RhdGEuY2hhbmdlZE51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuY2hhbmdlZFllYXIgPSB0aGlzLmRpYWxvZ0RhdGEuY2hhbmdlZFllYXI7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmNoYW5nZWRUaXRsZSA9IHRoaXMuZGlhbG9nRGF0YS5jaGFuZ2VkVGl0bGU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLm1vZGlmaWVyTnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm1vZGlmaWVyTnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5tb2RpZmllclllYXIgPSB0aGlzLmRpYWxvZ0RhdGEubW9kaWZpZXJZZWFyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5tb2RpZmllclRpdGxlID0gdGhpcy5kaWFsb2dEYXRhLm1vZGlmaWVyVGl0bGU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnNlY3RvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuc2VjdG9ycztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gdGhpcy5kaWFsb2dEYXRhLnRleHQ7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnRpdGxlT25seSA9IHRoaXMuZGlhbG9nRGF0YS50aXRsZU9ubHk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnllYXIgPSB0aGlzLmRpYWxvZ0RhdGEueWVhcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmRpYWxvZ0RhdGEuZnJvbURhdGU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnRvRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS50b0RhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKHRoaXMucGFyYW1zLmZyb21EYXRlLCB0aGlzLnBhcmFtcy50b0RhdGUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNMYXdzKCkpIHtcclxuICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5nZXRUb3BpY3MoKVxyXG4gICAgICAgIC5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgKG4udmFsdWUubWF0Y2goLy4vZykgfHwgW10pLmZvckVhY2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZSArPSAnJm5ic3A7JztcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBuYW1lICs9IG4udmFsdWUgKyAnIC0gJyArIG4ubmFtZTtcclxuICAgICAgICAgICAgICBuLmhlYWRlciA9IG5hbWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRvcGljcy5zZXQoci52YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5oYXNBdXRob3JPclR5cGUoKSkge1xyXG4gICAgICAgIHRoaXMuc2VjdG9yc0NoYW5nZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgb3RoZXIgbGlzdHMgd2hlbiBzZWN0b3JzIGNoYW5nZXNcclxuICAgKi9cclxuICBzZWN0b3JzQ2hhbmdlZCgpIHtcclxuICAgIC8vIFJlc2V0IGF1dGhvcnMgYW5kIHR5cGVzXHJcbiAgICB0aGlzLnBhcmFtcy5hdXRob3JzID0gW107XHJcbiAgICB0aGlzLnBhcmFtcy50eXBlID0gbnVsbDtcclxuICAgIGlmICh0aGlzLmhhc0F1dGhvck9yVHlwZSgpKSB7XHJcbiAgICAgIGxldCBhdXRob3JzOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSA9IFtdO1xyXG4gICAgICBDbGlwcGVyQXV0aG9ycy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3JzWzBdLnZhbHVlKSB7XHJcbiAgICAgICAgICBhdXRob3JzLnB1c2gobik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTsgICAgICBcclxuICAgICAgbGV0IHR5cGVzOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSA9IFtdO1xyXG4gICAgICBDbGlwcGVyU2VjdG9yVHlwZXMuZm9yRWFjaChuID0+IHtcclxuICAgICAgICBpZiAobi5wYXJlbnRWYWx1ZSA9PT0gdGhpcy5wYXJhbXMuc2VjdG9yc1swXS52YWx1ZSkge1xyXG4gICAgICAgICAgdHlwZXMucHVzaChuKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodHlwZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICB0eXBlcyA9IFsuLi5DbGlwcGVyU2VjdG9yVHlwZXNdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXV0aG9ycy5zZXQoYXV0aG9ycyk7XHJcbiAgICAgIHRoaXMudHlwZXMuc2V0KHR5cGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHNlYXJjaFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjbGVhcigpIHtcclxuICAgIENsaXBwZXJTZWFyY2hVdGlscy5jbGVhcih0aGlzLnBhcmFtcyk7XHJcbiAgICB0aGlzLmludGVydmFsLmNsZWFyKCk7XHJcbiAgICB0aGlzLnNvdXJjZUludGVydmFsLmNsZWFyKCk7XHJcbiAgICB0aGlzLnNlY3RvcnNDaGFuZ2VkKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAqIFNob3cgZnJlZSB0ZXh0IGhlbHBcclxuICovXHJcbiAgcHJvdGVjdGVkIGhlbHAoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2luZm9ybWF6aW9uaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29tcG9zZSBhIGZyZWUgdGV4dCBzZWFyY2ggcXVlcnlcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgY29tcG9zZSgpIHtcclxuICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnY29zdHJ1aXNjaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJ1xyXG4gICAgfSk7XHJcbiAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgLnN1YnNjcmliZSgocjogU2VhcmNoRnJlZVRleHRRdWVyeVBhcmFtcykgPT4ge1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRleHQgPSByLnF1ZXJ5O1xyXG4gICAgICAgIC8vIEZpbmlzaGVkXHJcbiAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Ym1pdCBzZWFyY2hcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb2soKSB7XHJcbiAgICB0aGlzLm9rQnV0dG9uLmZvY3VzKCk7XHJcbiAgICBpZiAodGhpcy5wYXJhbXMudGV4dCkge1xyXG4gICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gQ2xpcHBlclNlYXJjaFV0aWxzLm5vcm1hbGl6ZVRleHRRdWVyeSh0aGlzLnBhcmFtcy50ZXh0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmludGVydmFsKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLmZyb21EYXRlID0gdGhpcy5pbnRlcnZhbC5mcm9tO1xyXG4gICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmludGVydmFsLnRvO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc291cmNlSW50ZXJ2YWwpIHtcclxuICAgICAgdGhpcy5wYXJhbXMuc291cmNlRnJvbURhdGUgPSB0aGlzLnNvdXJjZUludGVydmFsLmZyb207XHJcbiAgICAgIHRoaXMucGFyYW1zLnNvdXJjZVRvRGF0ZSA9IHRoaXMuc291cmNlSW50ZXJ2YWwudG87XHJcbiAgICB9XHJcbiAgICB0aGlzLmRvbmUuZW1pdCh0aGlzLnBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQ2hlY2sgaWYgYSBibG9jayBvZiBleHBhbmRhYmxlIG9wdGlvbnMgaGFzIGEgZmlsdGVyIG9uXHJcbiAqIEBwYXJhbSBibG9jayA6IHRoZSBibG9jayBpZFxyXG4gKiBAcmV0dXJucyB0cnVlIGlmIGF0IGxlYXN0IGEgdmFsdWUgaXMgc2V0XHJcbiAqL1xyXG4gIGhhc0ZpbHRlcihibG9jazogJ3NvdXJjZScgfCAnb3RoZXInIHwgJ21vZGlmaWVyJyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGJsb2NrID09PSAnc291cmNlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbXMuc291cmNlTnVtYmVyICE9IG51bGwgfHxcclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3VyY2VZZWFyICE9IG51bGwgfHxcclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3VyY2UgIT0gbnVsbCB8fFxyXG4gICAgICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuZnJvbSAhPSBudWxsO1xyXG4gICAgfSBlbHNlIGlmIChibG9jayA9PT0gJ290aGVyJykge1xyXG4gICAgICBpZiAoIXRoaXMuaXNNb2R1bGUoQ2xpcHBlck1vZHVsZS5Nb2RpZmljaGVBYnJvZ2F6aW9uaUVSaW52aWkpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnNvdXJjZU51bWJlciAhPSBudWxsIHx8XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy5hdXRob3IgIT0gbnVsbCB8fFxyXG4gICAgICAgICAgdGhpcy5wYXJhbXMudHlwZSAhPSBudWxsIHx8XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy50b3BpYyAhPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtcy5jaGFuZ2VSZWFzb24gIT0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChibG9jayA9PT0gJ21vZGlmaWVyJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbXMubW9kaWZpZXJOdW1iZXIgIT0gbnVsbCB8fFxyXG4gICAgICAgIHRoaXMucGFyYW1zLm1vZGlmaWVyWWVhciAhPSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJUaXRsZSAhPSBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGgyIG1hdC1kaWFsb2ctdGl0bGU+UmljZXJjYTwvaDI+XHJcbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgPGZvcm0gbmFtZT1cImZvcm1cIiAjZj1cIm5nRm9ybVwiIChrZXl1cC5FbnRlcik9XCIhZi5mb3JtLmludmFsaWQgPyBvaygpIDogbnVsbFwiIG5vdmFsaWRhdGU+XHJcbiAgICA8bWF0LWFjY29yZGlvbiBtdWx0aSBkaXNwbGF5TW9kZT1cImZsYXRcIj5cclxuICAgICAgQGlmKGlzTGF3cygpIHx8IGlzTW9kdWxlKG1vZHVsZXNFbnVtLk1vZGlmaWNoZUFicm9nYXppb25pRVJpbnZpaSkpIHtcclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgZXhwYW5kZWQ9XCJ0cnVlXCIgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MCBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBTZXR0b3JpXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxjaGlwcy1zZWxlY3RvciBbKG5nTW9kZWwpXT1cInBhcmFtcy5zZWN0b3JzXCIgW211bHRpcGxlXT1cInRydWVcIiBuYW1lPVwic2VjdG9yc1wiIGxhYmVsPVwiU2V0dG9yaVwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJzZWN0b3JzXCIgW2NvbGxhcHNlQXRdPVwiNTk5XCIgKGNoYW5nZWQpPVwic2VjdG9yc0NoYW5nZWQoKVwiIC8+XHJcbiAgICAgICAgQGlmKGhhc1JlZ2lvbnMoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgPG1hdC1kaXZpZGVyIHN0eWxlPVwicGFkZGluZy10b3A6IDhweDsgbWFyZ2luLXRvcDo4cHhcIj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxjaGlwcy1zZWxlY3RvciBtb2RlPVwiY29sbGFwc2VkXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuYXV0aG9yc1wiIFttdWx0aXBsZV09XCJ0cnVlXCIgbmFtZT1cImF1dGhvcnNcIlxyXG4gICAgICAgICAgbGFiZWw9XCJUdXR0ZSBsZSByZWdpb25pXCIgW29wdGlvbnNdPVwicmVnaW9uc1wiIC8+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIH0gQGVsc2UgaWYoaXNOZXdzKCkpIHtcclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgZXhwYW5kZWQ9XCJ0cnVlXCIgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MCBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBUaXBvbG9naWFcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGNoaXBzLXNlbGVjdG9yIFtjb2xsYXBzZUF0XT1cIjU5OVwiIFsobmdNb2RlbCldPVwicGFyYW1zLnNlY3RvcnNcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIG5hbWU9XCJzZWN0b3JzXCIgbGFiZWw9XCJUaXBvbG9naWFcIlxyXG4gICAgICAgICAgW29wdGlvbnNdPVwic2VjdG9yc1wiIC8+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgfVxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBleHBhbmRlZD1cInRydWVcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIERvY3VtZW50b1xyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICBAaWYgKGlzTGF3cygpIHx8IGlzTW9kdWxlKG1vZHVsZXNFbnVtLkdpdXJpc3BydWRlbnphKSkge1xyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bWVybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCAjZmlsdGVyQnlOdW1iZXI9XCJtYXRJbnB1dFwiIG1hdElucHV0IG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMubnVtYmVyXCIgbmFtZT1cIm51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5udW1iZXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4SGlkZS54cyBmeEZsZXg9XCIzOVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+QW5ubzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMTc1MFwiIG1hdElucHV0IG1heGxlbmd0aD1cIjRcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy55ZWFyXCIgbmFtZT1cInllYXJcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLnllYXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLnllYXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQGlmIChpc0xhd3MoKSB8fCAhaXNNb2R1bGUobW9kdWxlc0VudW0uU2NhZGVuemVFU2VnbmFsYXppb25pKSkge1xyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPkludGVydmFsbG8gZGkgcHViYmxpY2F6aW9uZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cInBpY2tlcjFcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlIFsobmdNb2RlbCldPVwiaW50ZXJ2YWwuZnJvbVwiIFtkYXRlSW50ZXJ2YWxDaGFuZ2VdPVwiaW50ZXJ2YWxcIiAjcmFuZ2VGcm9tMT1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cInJhbmdlRnJvbTFcIiBwbGFjZWhvbGRlcj1cIkRhIGRhdGFcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZSBbKG5nTW9kZWwpXT1cImludGVydmFsLnRvXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiIFtlbmRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAjcmFuZ2VUbzE9XCJuZ01vZGVsXCIgbmFtZT1cInJhbmdlVG8xXCIgcGxhY2Vob2xkZXI9XCJBIGRhdGFcIj5cclxuICAgICAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cclxuICAgICAgICAgICAgQGlmIChpbnRlcnZhbC5mcm9tIHx8IGludGVydmFsLnRvKSB7XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW50ZXJ2YWwuY2xlYXIoKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyMVwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNwaWNrZXIxPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxyXG4gICAgICAgICAgICBAaWYgKHJhbmdlRnJvbTEuaW52YWxpZCB8fCByYW5nZVRvMS5pbnZhbGlkKSB7XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3I+SW50ZXJ2YWxsbyBub24gdmFsaWRvLjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPlRlc3RvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBtYXhsZW5ndGg9XCIyMDBcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy50ZXh0XCIgbmFtZT1cInRleHRcIiAvPlxyXG4gICAgICAgICAgICBAaWYgKHBhcmFtcy50ZXh0KSB7XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLnRleHQgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggbWF0VG9vbHRpcD1cIk9wemlvbmlcIiBhcmlhLWxhYmVsPVwiT3B6aW9uaVwiXHJcbiAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRleHRPcHRpb25zTWVudVwiPjxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgWyhuZ01vZGVsKV09XCJwYXJhbXMudGl0bGVPbmx5XCIgbmFtZT1cInRpdGxlT25seVwiPkNlcmNhIHNvbG8gbmVsXHJcbiAgICAgICAgICAgICAgICB0aXRvbG88L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBAaWYoaXNMYXdzKCkpIHtcclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctdG9wOjEwcHhcIj5cclxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cInBhcmFtcy5zaG93Q29tbWVudGVkRG9jdW1lbnRzT25seVwiIG5hbWU9XCJzaG93Q29tbWVudGVkRG9jdW1lbnRzT25seVwiPiZuYnNwOyBNb3N0cmFcclxuICAgICAgICAgICAgICAgIHNvbG8gbm9ybWUgY29uIGNvbW1lbnRpPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgQGlmKGlzTGF3cygpKSB7XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJoYXNGaWx0ZXIoJ3NvdXJjZScpXCIgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MCBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBGb250ZVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtZXJvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuc291cmNlTnVtYmVyXCIgbmFtZT1cInNvdXJjZU51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuc291cmNlTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5zb3VyY2VOdW1iZXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4SGlkZS54cyBmeEZsZXg9XCIzOVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+QW5ubzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMTc1MFwiIG1hdElucHV0IG1heGxlbmd0aD1cIjRcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5zb3VyY2VZZWFyXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJzb3VyY2VZZWFyXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5zb3VyY2VZZWFyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5zb3VyY2VZZWFyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5JbnRlcnZhbGxvIGRpIHB1YmJsaWNhemlvbmU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtyYW5nZVBpY2tlcl09XCJwaWNrZXIyXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBbKG5nTW9kZWwpXT1cInNvdXJjZUludGVydmFsLmZyb21cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCJcclxuICAgICAgICAgICAgICAgICNyYW5nZUZyb20yPVwibmdNb2RlbFwiIG5hbWU9XCJyYW5nZUZyb20yXCIgcGxhY2Vob2xkZXI9XCJEYSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgWyhuZ01vZGVsKV09XCJzb3VyY2VJbnRlcnZhbC50b1wiIFtkYXRlSW50ZXJ2YWxDaGFuZ2VdPVwic291cmNlSW50ZXJ2YWxcIiBbZW5kXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgI3JhbmdlVG8yPVwibmdNb2RlbFwiIG5hbWU9XCJyYW5nZVRvMlwiIHBsYWNlaG9sZGVyPVwiQSBkYXRhXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XHJcbiAgICAgICAgICAgIEBpZiAoc291cmNlSW50ZXJ2YWwuZnJvbSB8fCBzb3VyY2VJbnRlcnZhbC50bykge1xyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNvdXJjZUludGVydmFsLmNsZWFyKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlcjJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyMj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuICAgICAgICAgICAgQGlmIChyYW5nZUZyb20yLmludmFsaWQgfHwgcmFuZ2VUbzIuaW52YWxpZCkge1xyXG4gICAgICAgICAgICA8bWF0LWVycm9yPkludGVydmFsbG8gbm9uIHZhbGlkby48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXBvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnNvdXJjZVwiIG5hbWU9XCJzb3VyY2VcIj5cclxuICAgICAgICAgICAgICBAZm9yIChzIG9mIHNvdXJjZXM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJzLnZhbHVlXCIgW21hdFRvb2x0aXBdPVwicy5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICB7e3MubmFtZX19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgW2V4cGFuZGVkXT1cImhhc0ZpbHRlcignb3RoZXInKVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBBbHRyZSBvcHppb25pXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgICAgIEBpZihpc0xhd3MoKSkge1xyXG4gICAgICAgICAgQGlmKCFoYXNSZWdpb25zKCkpIHtcclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5BdXRvcmU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMuYXV0aG9yXCIgbmFtZT1cImF1dGhvclwiPlxyXG4gICAgICAgICAgICAgIEBmb3IgKGEgb2YgYXV0aG9ycygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiYS52YWx1ZVwiIFttYXRUb29sdGlwXT1cImEubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3thLm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkb2N1bWVudG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMudHlwZVwiIG5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAodCBvZiB0eXBlcygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC52YWx1ZVwiIFttYXRUb29sdGlwXT1cInQubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3t0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+QXJnb21lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnRvcGljXCIgbmFtZT1cInRvcGljXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAodCBvZiB0b3BpY3MoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInQudmFsdWVcIiBbbWF0VG9vbHRpcF09XCJ0Lm5hbWVcIj5cclxuICAgICAgICAgICAgICAgIHt7dC5uYW1lfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcblxyXG4gICAgICB9IEBlbHNlIGlmKGlzTW9kdWxlKG1vZHVsZXNFbnVtLk1vZGlmaWNoZUFicm9nYXppb25pRVJpbnZpaSkpIHtcclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgZXhwYW5kZWQgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MCBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBEb2N1bWVudG8gbW9kaWZpY2F0b1xyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtZXJvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuY2hhbmdlZE51bWJlclwiIG5hbWU9XCJjaGFuZ2VkTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICNmaWx0ZXJCeUNoYW5nZU51bWJlcj1cIm1hdElucHV0XCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5jaGFuZ2VkTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5jaGFuZ2VkTnVtYmVyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEhpZGUueHMgZnhGbGV4PVwiMzlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjE3NTBcIiBtYXRJbnB1dCBtYXhsZW5ndGg9XCI0XCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuY2hhbmdlZFllYXJcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cImNoYW5nZWRZZWFyXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5jaGFuZ2VkWWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuY2hhbmdlZFllYXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPlRpdG9sbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiMjAwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuY2hhbmdlZFRpdGxlXCIgbmFtZT1cImNoYW5nZWRUaXRsZVwiIC8+XHJcbiAgICAgICAgICAgIEBpZiAocGFyYW1zLmNoYW5nZWRUaXRsZSkge1xyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5jaGFuZ2VkVGl0bGUgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgW2V4cGFuZGVkXT1cImhhc0ZpbHRlcignbW9kaWZpZXInKVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgRG9jdW1lbnRvIG1vZGlmaWNhbnRlXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjU5XCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5OdW1lcm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiMTBcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5tb2RpZmllck51bWJlclwiIG5hbWU9XCJtb2RpZmllck51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuY2hhbmdlZE51bWJlcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMubW9kaWZpZXJOdW1iZXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4SGlkZS54cyBmeEZsZXg9XCIzOVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+QW5ubzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMTc1MFwiIG1hdElucHV0IG1heGxlbmd0aD1cIjRcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5tb2RpZmllclllYXJcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cIm1vZGlmaWVyWWVhclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJZZWFyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5tb2RpZmllclllYXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPlRpdG9sbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiMjAwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMubW9kaWZpZXJUaXRsZVwiIG5hbWU9XCJtb2RpZmllclRpdGxlXCIgLz5cclxuICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJUaXRsZSkge1xyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5tb2RpZmllclRpdGxlID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJoYXNGaWx0ZXIoJ290aGVyJylcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgQWx0cmUgb3B6aW9uaVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+TW90aXZvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLmNoYW5nZVJlYXNvblwiIG5hbWU9XCJjaGFuZ2VSZWFzb25cIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5UdXR0aTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgPC9mb3JtPlxyXG48L21hdC1kaWFsb2ctY29udGVudD5cclxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsPlxyXG4gICAgPGRpdiBmeEZsZXg9XCIzMFwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIChjbGljayk9XCJjbGVhcigpXCIgY29sb3I9XCJwcmltYXJ5XCI+UHVsaXNjaTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjcwXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAjb2tCdXR0b24gW2Rpc2FibGVkXT1cImYuZm9ybS5pbnZhbGlkXCIgKGNsaWNrKT1cIm9rKClcIj5Ucm92YTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCI+Q2hpdWRpPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XHJcbjxtYXQtbWVudSAjdGV4dE9wdGlvbnNNZW51PVwibWF0TWVudVwiPlxyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY29tcG9zZSgpXCI+XHJcbiAgICA8bWF0LWljb24+YnVpbGQ8L21hdC1pY29uPkNvbXBvbmlcclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImhlbHAoKVwiPlxyXG4gICAgPG1hdC1pY29uPmhlbHA8L21hdC1pY29uPkNvbWUgdXNhcmUgbGEgcmljZXJjYSBpbiB0ZXN0byBsaWJlcm9cclxuICA8L2J1dHRvbj5cclxuPC9tYXQtbWVudT4iXX0=