@angular-material-extensions/fab-menu
Version:
Angular Material component that allow users to select a county or nationality
86 lines • 17.5 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { speedDialFabAnimations } from './mat-fab-menu.animations';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/material/button";
import * as i3 from "@angular/material/icon";
import * as i4 from "@angular/material/tooltip";
import * as i5 from "@angular/flex-layout/flex";
import * as i6 from "@angular/flex-layout/extended";
export class MatFabMenuComponent {
constructor() {
this.icon = 'add';
this.direction = 'top';
this.color = 'accent';
this.closeAfterSelection = true;
// tslint:disable-next-line:no-output-on-prefix
this.onFabMenuItemSelected = new EventEmitter();
}
ngOnInit() {
this.adjustLayout();
}
ngOnChanges(changes) {
if (changes.direction && !changes.direction.firstChange) {
this.direction = changes.direction.currentValue;
this.adjustLayout();
}
if (changes.color && !changes.color.firstChange) {
this.color = changes.color.currentValue;
}
if (changes.fabButtons && !changes.fabButtons.firstChange) {
this.fabButtons = changes.fabButtons.currentValue;
}
}
adjustLayout() {
switch (this.direction) {
case 'top':
this.layout = 'column-reverse';
this.layout2 = 'column-reverse';
break;
case 'bottom':
this.layout = 'column';
this.layout2 = 'column';
break;
case 'left':
this.layout = 'row-reverse';
this.layout2 = 'row-reverse';
break;
case 'right':
this.layout = 'row';
this.layout2 = 'row';
break;
}
}
toggle() {
this.isActive = !this.isActive;
}
selectFabMenu(fab) {
this.onFabMenuItemSelected.emit(fab.id);
if (this.closeAfterSelection) {
this.isActive = false;
}
}
}
MatFabMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MatFabMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
MatFabMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MatFabMenuComponent, selector: "mat-fab-menu", inputs: { fabButtons: "fabButtons", icon: "icon", direction: "direction", color: "color", isActive: "isActive", disabled: "disabled", closeAfterSelection: "closeAfterSelection" }, outputs: { onFabMenuItemSelected: "onFabMenuItemSelected" }, usesOnChanges: true, ngImport: i0, template: "<div [fxLayout]=\"layout\" class=\"container\" fxLayoutAlign=\"center center\" fxLayoutGap=\"16px\">\n <div fxLayoutAlign=\"center\">\n <button (click)=\"isActive = !isActive\"\n [color]=\"color\" [disabled]=\"disabled\"\n type=\"button\"\n [ngClass]=\"{\n 'mat-fab' : !isActive,\n 'mat-mini-fab' : isActive\n }\"\n mat-fab>\n <mat-icon [@fabToggler]=\"{value: isActive}\">{{icon}}</mat-icon> <!-- Animation here -->\n </button>\n </div>\n <div *ngIf=\"isActive\" [@fabsStagger]=\"fabButtons.length\"\n [fxLayout]=\"layout2\" fxLayoutAlign=\"center center\" fxLayoutGap=\"16px\">\n <button (click)=\"selectFabMenu(fab)\"\n *ngFor=\"let fab of fabButtons\"\n [color]=\"fab?.color\"\n [matTooltip]=\"fab?.tooltip\"\n [matTooltipPosition]=\"fab?.tooltipPosition\"\n [ngClass]=\"{'fullSVG' : fab?.imgUrl}\"\n type=\"button\"\n mat-fab>\n <mat-icon *ngIf=\"fab?.icon\" [color]=\"fab?.iconColor\">{{fab?.icon}}</mat-icon>\n <img *ngIf=\"fab?.imgUrl\" [src]=\"fab?.imgUrl\" alt=\"icon\">\n </button>\n </div>\n</div>\n", styles: [":host{display:block}.fullSVG img{width:100%}.fullSVG ::ng-deep span.mat-button-wrapper{padding:0}.container>div{margin-bottom:5px}.container>div button{margin-bottom:16px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.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: i5.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: i5.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: i6.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }], animations: speedDialFabAnimations });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MatFabMenuComponent, decorators: [{
type: Component,
args: [{ selector: 'mat-fab-menu', animations: speedDialFabAnimations, template: "<div [fxLayout]=\"layout\" class=\"container\" fxLayoutAlign=\"center center\" fxLayoutGap=\"16px\">\n <div fxLayoutAlign=\"center\">\n <button (click)=\"isActive = !isActive\"\n [color]=\"color\" [disabled]=\"disabled\"\n type=\"button\"\n [ngClass]=\"{\n 'mat-fab' : !isActive,\n 'mat-mini-fab' : isActive\n }\"\n mat-fab>\n <mat-icon [@fabToggler]=\"{value: isActive}\">{{icon}}</mat-icon> <!-- Animation here -->\n </button>\n </div>\n <div *ngIf=\"isActive\" [@fabsStagger]=\"fabButtons.length\"\n [fxLayout]=\"layout2\" fxLayoutAlign=\"center center\" fxLayoutGap=\"16px\">\n <button (click)=\"selectFabMenu(fab)\"\n *ngFor=\"let fab of fabButtons\"\n [color]=\"fab?.color\"\n [matTooltip]=\"fab?.tooltip\"\n [matTooltipPosition]=\"fab?.tooltipPosition\"\n [ngClass]=\"{'fullSVG' : fab?.imgUrl}\"\n type=\"button\"\n mat-fab>\n <mat-icon *ngIf=\"fab?.icon\" [color]=\"fab?.iconColor\">{{fab?.icon}}</mat-icon>\n <img *ngIf=\"fab?.imgUrl\" [src]=\"fab?.imgUrl\" alt=\"icon\">\n </button>\n </div>\n</div>\n", styles: [":host{display:block}.fullSVG img{width:100%}.fullSVG ::ng-deep span.mat-button-wrapper{padding:0}.container>div{margin-bottom:5px}.container>div button{margin-bottom:16px}\n"] }]
}], ctorParameters: function () { return []; }, propDecorators: { fabButtons: [{
type: Input
}], icon: [{
type: Input
}], direction: [{
type: Input
}], color: [{
type: Input
}], isActive: [{
type: Input
}], disabled: [{
type: Input
}], closeAfterSelection: [{
type: Input
}], onFabMenuItemSelected: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWZhYi1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItbWF0ZXJpYWwtZXh0ZW5zaW9ucy9mYWItbWVudS9zcmMvbGliL21hdC1mYWItbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW1hdGVyaWFsLWV4dGVuc2lvbnMvZmFiLW1lbnUvc3JjL2xpYi9tYXQtZmFiLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7OztBQXFCakUsTUFBTSxPQUFPLG1CQUFtQjtJQThCOUI7UUF4QkEsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUdiLGNBQVMsR0FBd0IsS0FBSyxDQUFDO1FBR3ZDLFVBQUssR0FBaUIsUUFBUSxDQUFDO1FBUy9CLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUUzQiwrQ0FBK0M7UUFFL0MsMEJBQXFCLEdBQWtDLElBQUksWUFBWSxFQUFtQixDQUFDO0lBTTNGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztTQUNuRDtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3RCLEtBQUssS0FBSztnQkFDUixJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDO2dCQUNoQyxNQUFNO1lBRVIsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO2dCQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFDeEIsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7Z0JBQzdCLE1BQU07WUFFUixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBZTtRQUMzQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN2QjtJQUNILENBQUM7O2dIQXJGVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwwVEN0QmhDLDBwQ0E0QkEsdXdHRFJjLHNCQUFzQjsyRkFFdkIsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGNBQWMsY0FHWixzQkFBc0I7MEVBS2xDLFVBQVU7c0JBRFQsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTixxQkFBcUI7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3NwZWVkRGlhbEZhYkFuaW1hdGlvbnN9IGZyb20gJy4vbWF0LWZhYi1tZW51LmFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmV4cG9ydCBpbnRlcmZhY2UgTWF0RmFiTWVudSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gIGljb24/OiBzdHJpbmc7IC8vIHBsZWFzZSB1c2UgZWl0aGVyIGljb24gb3IgaW1nVXJsXG4gIGljb25Db2xvcj86IFRoZW1lUGFsZXR0ZTtcbiAgaW1nVXJsPzogc3RyaW5nOyAvLyBwbGVhc2UgdXNlIGVpdGhlciBpY29uIG9yIGltZ1VybFxuICB0b29sdGlwPzogc3RyaW5nO1xuICB0b29sdGlwUG9zaXRpb24/OiBUb29sdGlwUG9zaXRpb247XG4gIGNvbG9yPzogVGhlbWVQYWxldHRlO1xufVxuXG5leHBvcnQgdHlwZSBNYXRGYWJNZW51RGlyZWN0aW9uID0gJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1mYWItbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnbWF0LWZhYi1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ21hdC1mYWItbWVudS5jb21wb25lbnQuc2NzcyddLFxuICBhbmltYXRpb25zOiBzcGVlZERpYWxGYWJBbmltYXRpb25zXG59KVxuZXhwb3J0IGNsYXNzIE1hdEZhYk1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KClcbiAgZmFiQnV0dG9uczogTWF0RmFiTWVudVtdO1xuXG4gIEBJbnB1dCgpXG4gIGljb24gPSAnYWRkJztcblxuICBASW5wdXQoKVxuICBkaXJlY3Rpb246IE1hdEZhYk1lbnVEaXJlY3Rpb24gPSAndG9wJztcblxuICBASW5wdXQoKVxuICBjb2xvcjogVGhlbWVQYWxldHRlID0gJ2FjY2VudCc7XG5cbiAgQElucHV0KClcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgY2xvc2VBZnRlclNlbGVjdGlvbiA9IHRydWU7XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW91dHB1dC1vbi1wcmVmaXhcbiAgQE91dHB1dCgpXG4gIG9uRmFiTWVudUl0ZW1TZWxlY3RlZDogRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bWJlcj4oKTtcblxuICBsYXlvdXQ6IGFueTtcbiAgbGF5b3V0MjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGp1c3RMYXlvdXQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5kaXJlY3Rpb24gJiYgIWNoYW5nZXMuZGlyZWN0aW9uLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9IGNoYW5nZXMuZGlyZWN0aW9uLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMuYWRqdXN0TGF5b3V0KCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuY29sb3IgJiYgIWNoYW5nZXMuY29sb3IuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuY29sb3IgPSBjaGFuZ2VzLmNvbG9yLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5mYWJCdXR0b25zICYmICFjaGFuZ2VzLmZhYkJ1dHRvbnMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuZmFiQnV0dG9ucyA9IGNoYW5nZXMuZmFiQnV0dG9ucy5jdXJyZW50VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgYWRqdXN0TGF5b3V0KCkge1xuICAgIHN3aXRjaCAodGhpcy5kaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRoaXMubGF5b3V0ID0gJ2NvbHVtbi1yZXZlcnNlJztcbiAgICAgICAgdGhpcy5sYXlvdXQyID0gJ2NvbHVtbi1yZXZlcnNlJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHRoaXMubGF5b3V0ID0gJ2NvbHVtbic7XG4gICAgICAgIHRoaXMubGF5b3V0MiA9ICdjb2x1bW4nO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHRoaXMubGF5b3V0ID0gJ3Jvdy1yZXZlcnNlJztcbiAgICAgICAgdGhpcy5sYXlvdXQyID0gJ3Jvdy1yZXZlcnNlJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgdGhpcy5sYXlvdXQgPSAncm93JztcbiAgICAgICAgdGhpcy5sYXlvdXQyID0gJ3Jvdyc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLmlzQWN0aXZlID0gIXRoaXMuaXNBY3RpdmU7XG4gIH1cblxuICBzZWxlY3RGYWJNZW51KGZhYjogTWF0RmFiTWVudSkge1xuICAgIHRoaXMub25GYWJNZW51SXRlbVNlbGVjdGVkLmVtaXQoZmFiLmlkKTtcbiAgICBpZiAodGhpcy5jbG9zZUFmdGVyU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IFtmeExheW91dF09XCJsYXlvdXRcIiBjbGFzcz1cImNvbnRhaW5lclwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgZnhMYXlvdXRHYXA9XCIxNnB4XCI+XG4gIDxkaXYgZnhMYXlvdXRBbGlnbj1cImNlbnRlclwiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImlzQWN0aXZlID0gIWlzQWN0aXZlXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAnbWF0LWZhYicgOiAhaXNBY3RpdmUsXG4gICAgJ21hdC1taW5pLWZhYicgOiBpc0FjdGl2ZVxuICB9XCJcbiAgICAgICAgICAgIG1hdC1mYWI+XG4gICAgICA8bWF0LWljb24gW0BmYWJUb2dnbGVyXT1cInt2YWx1ZTogaXNBY3RpdmV9XCI+e3tpY29ufX08L21hdC1pY29uPiA8IS0tIEFuaW1hdGlvbiBoZXJlIC0tPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImlzQWN0aXZlXCIgW0BmYWJzU3RhZ2dlcl09XCJmYWJCdXR0b25zLmxlbmd0aFwiXG4gICAgICAgW2Z4TGF5b3V0XT1cImxheW91dDJcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTZweFwiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cInNlbGVjdEZhYk1lbnUoZmFiKVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmFiIG9mIGZhYkJ1dHRvbnNcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImZhYj8uY29sb3JcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZmFiPy50b29sdGlwXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiZmFiPy50b29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydmdWxsU1ZHJyA6IGZhYj8uaW1nVXJsfVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG1hdC1mYWI+XG4gICAgICA8bWF0LWljb24gKm5nSWY9XCJmYWI/Lmljb25cIiBbY29sb3JdPVwiZmFiPy5pY29uQ29sb3JcIj57e2ZhYj8uaWNvbn19PC9tYXQtaWNvbj5cbiAgICAgIDxpbWcgKm5nSWY9XCJmYWI/LmltZ1VybFwiIFtzcmNdPVwiZmFiPy5pbWdVcmxcIiBhbHQ9XCJpY29uXCI+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=