ngx-obelisco-example
Version:
Componentes funcionales y reutilizables para Angular.
49 lines • 26.5 kB
JavaScript
import { Component, Input } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/router";
export class ODropdownNavigationComponent {
constructor() {
this.dataTarget = 'dropdown';
this.isAnimatedIconLeft = false;
this.isAnimatedIconRight = false;
this.isPositionRight = false;
this.isBordered = true;
this.customClasses = '';
this.hasChildren = false;
}
ngOnChanges(changes) {
if ('dropNavItems' in changes) {
this.hasChildren = this.dropNavItems.some((item) => item.children && item.children.length > 0);
}
}
}
ODropdownNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ODropdownNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
ODropdownNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ODropdownNavigationComponent, selector: "o-dropdown-navigation", inputs: { dataTarget: "dataTarget", title: "title", iconLeft: "iconLeft", iconRight: "iconRight", isAnimatedIconLeft: "isAnimatedIconLeft", isAnimatedIconRight: "isAnimatedIconRight", dropNavItems: "dropNavItems", isPositionRight: "isPositionRight", isBordered: "isBordered", customClasses: "customClasses", ariaLabel: "ariaLabel" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"dropdown\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-dropdown btn-dropdown-lg\"\r\n [class.btn-dropdown-border]=\"isBordered\"\r\n [class.dropdown-toggle]=\"!hasChildren\"\r\n [attr.data-toggle]=\"hasChildren ? 'collapse' : 'dropdown'\"\r\n [attr.data-target]=\"hasChildren ? '#' + dataTarget : null\"\r\n [attr.aria-controls]=\"hasChildren ? dataTarget : null\"\r\n aria-haspopup=\"true\"\r\n aria-expanded=\"false\"\r\n [ngClass]=\"customClasses\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n >\r\n <ng-container *ngIf=\"iconLeft\">\r\n <i *ngIf=\"iconLeft.includes('bx')\" class=\"{{ iconLeft }}\" [class.btn-dropdown-icon]=\"isAnimatedIconLeft\"></i>\r\n <span\r\n *ngIf=\"!iconLeft.includes('bx')\"\r\n class=\"material-icons-round\"\r\n aria-hidden=\"true\"\r\n [class.btn-dropdown-icon]=\"isAnimatedIconLeft\"\r\n >{{ iconLeft }}</span\r\n >\r\n </ng-container>\r\n <span class=\"btn-dropdown-text\" *ngIf=\"title\">{{ title }}</span>\r\n <ng-container *ngIf=\"iconRight\">\r\n <i *ngIf=\"iconRight.includes('bx')\" class=\"{{ iconRight }}\" [class.btn-dropdown-icon]=\"isAnimatedIconRight\"></i>\r\n <span\r\n *ngIf=\"!iconRight.includes('bx')\"\r\n class=\"material-icons-round\"\r\n aria-hidden=\"true\"\r\n [class.btn-dropdown-icon]=\"isAnimatedIconRight\"\r\n >{{ iconRight }}</span\r\n >\r\n </ng-container>\r\n </button>\r\n <div\r\n class=\"dropdown-menu\"\r\n [class.dropdown-menu-right]=\"isPositionRight\"\r\n [class.collapse]=\"hasChildren\"\r\n [id]=\"hasChildren ? dataTarget : null\"\r\n >\r\n <ng-container *ngFor=\"let item of dropNavItems\">\r\n <a\r\n *ngIf=\"item.route && !item.children\"\r\n class=\"dropdown-item\"\r\n [class.disabled]=\"item.isDisabled\"\r\n [class.item-danger]=\"item.isItemDanger\"\r\n [routerLink]=\"item.route\"\r\n [ngClass]=\"item.customClasses\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconLeft }\"></ng-container>\r\n <span class=\"item-text\" [class.text-right]=\"item.textPosition == 'right'\">{{ item.text }}</span>\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconRight }\"></ng-container>\r\n </a>\r\n <a\r\n *ngIf=\"item.link && !item.children\"\r\n class=\"dropdown-item\"\r\n [class.disabled]=\"item.isDisabled\"\r\n [class.item-danger]=\"item.isItemDanger\"\r\n [href]=\"item.link\"\r\n target=\"_blank\"\r\n [ngClass]=\"item.customClasses\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconLeft }\"></ng-container>\r\n <span class=\"item-text\" [class.text-right]=\"item.textPosition == 'right'\">{{ item.text }}</span>\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconRight }\"></ng-container>\r\n </a>\r\n\r\n <div *ngIf=\"item.children\" class=\"dropdown sub-dropdown\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-dropdown btn-dropdown-lg dropdown-toggle sub-btn-dropdown\"\r\n data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\"\r\n aria-expanded=\"false\"\r\n [ngClass]=\"item.customClasses\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconLeft, animated: item.isAnimatedIconLeft }\"\r\n ></ng-container>\r\n <span class=\"item-text\" [class.text-right]=\"item.textPosition == 'right'\">{{ item.text }}</span>\r\n <ng-container\r\n *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconRight, animated: item.isAnimatedIconRight }\"\r\n ></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu sub-dropdown-menu\">\r\n <ng-container *ngFor=\"let subitem of item.children\">\r\n <a\r\n *ngIf=\"subitem.route\"\r\n class=\"dropdown-item sub-item\"\r\n [class.item-danger]=\"subitem.isItemDanger\"\r\n [routerLink]=\"subitem.route\"\r\n [ngClass]=\"subitem.customClasses\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: subitem.iconLeft }\"></ng-container>\r\n <span class=\"item-text\" [class.text-right]=\"subitem.textPosition == 'right'\">{{ subitem.text }}</span>\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: subitem.iconRight }\"></ng-container>\r\n </a>\r\n <a\r\n *ngIf=\"subitem.link\"\r\n class=\"dropdown-item sub-item\"\r\n [class.item-danger]=\"subitem.isItemDanger\"\r\n [href]=\"subitem.link\"\r\n target=\"_blank\"\r\n [ngClass]=\"subitem.customClasses\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: subitem.iconLeft }\"></ng-container>\r\n <span class=\"item-text\" [class.text-right]=\"subitem.textPosition == 'right'\">{{ subitem.text }}</span>\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: subitem.iconRight }\"></ng-container>\r\n </a>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<ng-template #iconTemplate let-icon=\"icon\" let-animated=\"animated\">\r\n <ng-container *ngIf=\"icon\">\r\n <i *ngIf=\"icon.includes('bx')\" class=\"{{ icon }}\" [class.btn-dropdown-icon]=\"animated\"></i>\r\n <span\r\n *ngIf=\"!icon.includes('bx')\"\r\n class=\"material-icons-round\"\r\n aria-hidden=\"true\"\r\n [class.btn-dropdown-icon]=\"animated\"\r\n >{{ icon }}</span\r\n >\r\n </ng-container>\r\n</ng-template>\r\n", styles: [""], 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: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ODropdownNavigationComponent, decorators: [{
type: Component,
args: [{ selector: 'o-dropdown-navigation', template: "<div class=\"dropdown\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-dropdown btn-dropdown-lg\"\r\n [class.btn-dropdown-border]=\"isBordered\"\r\n [class.dropdown-toggle]=\"!hasChildren\"\r\n [attr.data-toggle]=\"hasChildren ? 'collapse' : 'dropdown'\"\r\n [attr.data-target]=\"hasChildren ? '#' + dataTarget : null\"\r\n [attr.aria-controls]=\"hasChildren ? dataTarget : null\"\r\n aria-haspopup=\"true\"\r\n aria-expanded=\"false\"\r\n [ngClass]=\"customClasses\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n >\r\n <ng-container *ngIf=\"iconLeft\">\r\n <i *ngIf=\"iconLeft.includes('bx')\" class=\"{{ iconLeft }}\" [class.btn-dropdown-icon]=\"isAnimatedIconLeft\"></i>\r\n <span\r\n *ngIf=\"!iconLeft.includes('bx')\"\r\n class=\"material-icons-round\"\r\n aria-hidden=\"true\"\r\n [class.btn-dropdown-icon]=\"isAnimatedIconLeft\"\r\n >{{ iconLeft }}</span\r\n >\r\n </ng-container>\r\n <span class=\"btn-dropdown-text\" *ngIf=\"title\">{{ title }}</span>\r\n <ng-container *ngIf=\"iconRight\">\r\n <i *ngIf=\"iconRight.includes('bx')\" class=\"{{ iconRight }}\" [class.btn-dropdown-icon]=\"isAnimatedIconRight\"></i>\r\n <span\r\n *ngIf=\"!iconRight.includes('bx')\"\r\n class=\"material-icons-round\"\r\n aria-hidden=\"true\"\r\n [class.btn-dropdown-icon]=\"isAnimatedIconRight\"\r\n >{{ iconRight }}</span\r\n >\r\n </ng-container>\r\n </button>\r\n <div\r\n class=\"dropdown-menu\"\r\n [class.dropdown-menu-right]=\"isPositionRight\"\r\n [class.collapse]=\"hasChildren\"\r\n [id]=\"hasChildren ? dataTarget : null\"\r\n >\r\n <ng-container *ngFor=\"let item of dropNavItems\">\r\n <a\r\n *ngIf=\"item.route && !item.children\"\r\n class=\"dropdown-item\"\r\n [class.disabled]=\"item.isDisabled\"\r\n [class.item-danger]=\"item.isItemDanger\"\r\n [routerLink]=\"item.route\"\r\n [ngClass]=\"item.customClasses\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconLeft }\"></ng-container>\r\n <span class=\"item-text\" [class.text-right]=\"item.textPosition == 'right'\">{{ item.text }}</span>\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconRight }\"></ng-container>\r\n </a>\r\n <a\r\n *ngIf=\"item.link && !item.children\"\r\n class=\"dropdown-item\"\r\n [class.disabled]=\"item.isDisabled\"\r\n [class.item-danger]=\"item.isItemDanger\"\r\n [href]=\"item.link\"\r\n target=\"_blank\"\r\n [ngClass]=\"item.customClasses\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconLeft }\"></ng-container>\r\n <span class=\"item-text\" [class.text-right]=\"item.textPosition == 'right'\">{{ item.text }}</span>\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconRight }\"></ng-container>\r\n </a>\r\n\r\n <div *ngIf=\"item.children\" class=\"dropdown sub-dropdown\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-dropdown btn-dropdown-lg dropdown-toggle sub-btn-dropdown\"\r\n data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\"\r\n aria-expanded=\"false\"\r\n [ngClass]=\"item.customClasses\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconLeft, animated: item.isAnimatedIconLeft }\"\r\n ></ng-container>\r\n <span class=\"item-text\" [class.text-right]=\"item.textPosition == 'right'\">{{ item.text }}</span>\r\n <ng-container\r\n *ngTemplateOutlet=\"iconTemplate; context: { icon: item.iconRight, animated: item.isAnimatedIconRight }\"\r\n ></ng-container>\r\n </button>\r\n <div class=\"dropdown-menu sub-dropdown-menu\">\r\n <ng-container *ngFor=\"let subitem of item.children\">\r\n <a\r\n *ngIf=\"subitem.route\"\r\n class=\"dropdown-item sub-item\"\r\n [class.item-danger]=\"subitem.isItemDanger\"\r\n [routerLink]=\"subitem.route\"\r\n [ngClass]=\"subitem.customClasses\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: subitem.iconLeft }\"></ng-container>\r\n <span class=\"item-text\" [class.text-right]=\"subitem.textPosition == 'right'\">{{ subitem.text }}</span>\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: subitem.iconRight }\"></ng-container>\r\n </a>\r\n <a\r\n *ngIf=\"subitem.link\"\r\n class=\"dropdown-item sub-item\"\r\n [class.item-danger]=\"subitem.isItemDanger\"\r\n [href]=\"subitem.link\"\r\n target=\"_blank\"\r\n [ngClass]=\"subitem.customClasses\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: subitem.iconLeft }\"></ng-container>\r\n <span class=\"item-text\" [class.text-right]=\"subitem.textPosition == 'right'\">{{ subitem.text }}</span>\r\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { icon: subitem.iconRight }\"></ng-container>\r\n </a>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<ng-template #iconTemplate let-icon=\"icon\" let-animated=\"animated\">\r\n <ng-container *ngIf=\"icon\">\r\n <i *ngIf=\"icon.includes('bx')\" class=\"{{ icon }}\" [class.btn-dropdown-icon]=\"animated\"></i>\r\n <span\r\n *ngIf=\"!icon.includes('bx')\"\r\n class=\"material-icons-round\"\r\n aria-hidden=\"true\"\r\n [class.btn-dropdown-icon]=\"animated\"\r\n >{{ icon }}</span\r\n >\r\n </ng-container>\r\n</ng-template>\r\n" }]
}], propDecorators: { dataTarget: [{
type: Input
}], title: [{
type: Input
}], iconLeft: [{
type: Input
}], iconRight: [{
type: Input
}], isAnimatedIconLeft: [{
type: Input
}], isAnimatedIconRight: [{
type: Input
}], dropNavItems: [{
type: Input
}], isPositionRight: [{
type: Input
}], isBordered: [{
type: Input
}], customClasses: [{
type: Input
}], ariaLabel: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1kcm9wZG93bi1uYXZpZ2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vYmVsaXNjby9kcm9wZG93bi9vLWRyb3Bkb3duLW5hdmlnYXRpb24vby1kcm9wZG93bi1uYXZpZ2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vYmVsaXNjby9kcm9wZG93bi9vLWRyb3Bkb3duLW5hdmlnYXRpb24vby1kcm9wZG93bi1uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQzs7OztBQVEzRSxNQUFNLE9BQU8sNEJBQTRCO0lBTHpDO1FBTWtCLGVBQVUsR0FBVyxVQUFVLENBQUM7UUFJaEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUVyQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxlQUFVLEdBQVksSUFBSSxDQUFDO1FBQzNCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRzNDLGdCQUFXLEdBQVksS0FBSyxDQUFDO0tBTzlCO0lBTEMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksY0FBYyxJQUFJLE9BQU8sRUFBRTtZQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hHO0lBQ0gsQ0FBQzs7eUhBbkJVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLGdhQ1J6QyxnM0xBa0lBOzJGRDFIYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsdUJBQXVCOzhCQUtqQixVQUFVO3NCQUF6QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLGtCQUFrQjtzQkFBakMsS0FBSztnQkFDVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERyb3Bkb3duTmF2aWdhdGlvbkl0ZW0gfSBmcm9tICduZ3gtb2JlbGlzY28tZXhhbXBsZS9jb3JlL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ28tZHJvcGRvd24tbmF2aWdhdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL28tZHJvcGRvd24tbmF2aWdhdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vby1kcm9wZG93bi1uYXZpZ2F0aW9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE9Ecm9wZG93bk5hdmlnYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhVGFyZ2V0OiBzdHJpbmcgPSAnZHJvcGRvd24nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0aXRsZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBwdWJsaWMgaWNvbkxlZnQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcHVibGljIGljb25SaWdodCE6IHN0cmluZztcclxuICBASW5wdXQoKSBwdWJsaWMgaXNBbmltYXRlZEljb25MZWZ0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGlzQW5pbWF0ZWRJY29uUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgZHJvcE5hdkl0ZW1zITogRHJvcGRvd25OYXZpZ2F0aW9uSXRlbVtdO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpc1Bvc2l0aW9uUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgaXNCb3JkZXJlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUNsYXNzZXM6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBhcmlhTGFiZWwhOiBzdHJpbmc7XHJcblxyXG4gIGhhc0NoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICgnZHJvcE5hdkl0ZW1zJyBpbiBjaGFuZ2VzKSB7XHJcbiAgICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSB0aGlzLmRyb3BOYXZJdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gIDxidXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgY2xhc3M9XCJidG4gYnRuLWRyb3Bkb3duIGJ0bi1kcm9wZG93bi1sZ1wiXHJcbiAgICBbY2xhc3MuYnRuLWRyb3Bkb3duLWJvcmRlcl09XCJpc0JvcmRlcmVkXCJcclxuICAgIFtjbGFzcy5kcm9wZG93bi10b2dnbGVdPVwiIWhhc0NoaWxkcmVuXCJcclxuICAgIFthdHRyLmRhdGEtdG9nZ2xlXT1cImhhc0NoaWxkcmVuID8gJ2NvbGxhcHNlJyA6ICdkcm9wZG93bidcIlxyXG4gICAgW2F0dHIuZGF0YS10YXJnZXRdPVwiaGFzQ2hpbGRyZW4gPyAnIycgKyBkYXRhVGFyZ2V0IDogbnVsbFwiXHJcbiAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImhhc0NoaWxkcmVuID8gZGF0YVRhcmdldCA6IG51bGxcIlxyXG4gICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxyXG4gICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcclxuICAgIFtuZ0NsYXNzXT1cImN1c3RvbUNsYXNzZXNcIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uTGVmdFwiPlxyXG4gICAgICA8aSAqbmdJZj1cImljb25MZWZ0LmluY2x1ZGVzKCdieCcpXCIgY2xhc3M9XCJ7eyBpY29uTGVmdCB9fVwiIFtjbGFzcy5idG4tZHJvcGRvd24taWNvbl09XCJpc0FuaW1hdGVkSWNvbkxlZnRcIj48L2k+XHJcbiAgICAgIDxzcGFuXHJcbiAgICAgICAgKm5nSWY9XCIhaWNvbkxlZnQuaW5jbHVkZXMoJ2J4JylcIlxyXG4gICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIlxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgW2NsYXNzLmJ0bi1kcm9wZG93bi1pY29uXT1cImlzQW5pbWF0ZWRJY29uTGVmdFwiXHJcbiAgICAgICAgPnt7IGljb25MZWZ0IH19PC9zcGFuXHJcbiAgICAgID5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJidG4tZHJvcGRvd24tdGV4dFwiICpuZ0lmPVwidGl0bGVcIj57eyB0aXRsZSB9fTwvc3Bhbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uUmlnaHRcIj5cclxuICAgICAgPGkgKm5nSWY9XCJpY29uUmlnaHQuaW5jbHVkZXMoJ2J4JylcIiBjbGFzcz1cInt7IGljb25SaWdodCB9fVwiIFtjbGFzcy5idG4tZHJvcGRvd24taWNvbl09XCJpc0FuaW1hdGVkSWNvblJpZ2h0XCI+PC9pPlxyXG4gICAgICA8c3BhblxyXG4gICAgICAgICpuZ0lmPVwiIWljb25SaWdodC5pbmNsdWRlcygnYngnKVwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1yb3VuZFwiXHJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICBbY2xhc3MuYnRuLWRyb3Bkb3duLWljb25dPVwiaXNBbmltYXRlZEljb25SaWdodFwiXHJcbiAgICAgICAgPnt7IGljb25SaWdodCB9fTwvc3BhblxyXG4gICAgICA+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2J1dHRvbj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIlxyXG4gICAgW2NsYXNzLmRyb3Bkb3duLW1lbnUtcmlnaHRdPVwiaXNQb3NpdGlvblJpZ2h0XCJcclxuICAgIFtjbGFzcy5jb2xsYXBzZV09XCJoYXNDaGlsZHJlblwiXHJcbiAgICBbaWRdPVwiaGFzQ2hpbGRyZW4gPyBkYXRhVGFyZ2V0IDogbnVsbFwiXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkcm9wTmF2SXRlbXNcIj5cclxuICAgICAgPGFcclxuICAgICAgICAqbmdJZj1cIml0ZW0ucm91dGUgJiYgIWl0ZW0uY2hpbGRyZW5cIlxyXG4gICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXHJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIml0ZW0uaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgW2NsYXNzLml0ZW0tZGFuZ2VyXT1cIml0ZW0uaXNJdGVtRGFuZ2VyXCJcclxuICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlXCJcclxuICAgICAgICBbbmdDbGFzc109XCJpdGVtLmN1c3RvbUNsYXNzZXNcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZTsgY29udGV4dDogeyBpY29uOiBpdGVtLmljb25MZWZ0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tdGV4dFwiIFtjbGFzcy50ZXh0LXJpZ2h0XT1cIml0ZW0udGV4dFBvc2l0aW9uID09ICdyaWdodCdcIj57eyBpdGVtLnRleHQgfX08L3NwYW4+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZTsgY29udGV4dDogeyBpY29uOiBpdGVtLmljb25SaWdodCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvYT5cclxuICAgICAgPGFcclxuICAgICAgICAqbmdJZj1cIml0ZW0ubGluayAmJiAhaXRlbS5jaGlsZHJlblwiXHJcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcclxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXRlbS5pc0Rpc2FibGVkXCJcclxuICAgICAgICBbY2xhc3MuaXRlbS1kYW5nZXJdPVwiaXRlbS5pc0l0ZW1EYW5nZXJcIlxyXG4gICAgICAgIFtocmVmXT1cIml0ZW0ubGlua1wiXHJcbiAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICBbbmdDbGFzc109XCJpdGVtLmN1c3RvbUNsYXNzZXNcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZTsgY29udGV4dDogeyBpY29uOiBpdGVtLmljb25MZWZ0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tdGV4dFwiIFtjbGFzcy50ZXh0LXJpZ2h0XT1cIml0ZW0udGV4dFBvc2l0aW9uID09ICdyaWdodCdcIj57eyBpdGVtLnRleHQgfX08L3NwYW4+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZTsgY29udGV4dDogeyBpY29uOiBpdGVtLmljb25SaWdodCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvYT5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmNoaWxkcmVuXCIgY2xhc3M9XCJkcm9wZG93biBzdWItZHJvcGRvd25cIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kcm9wZG93biBidG4tZHJvcGRvd24tbGcgZHJvcGRvd24tdG9nZ2xlIHN1Yi1idG4tZHJvcGRvd25cIlxyXG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXHJcbiAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXHJcbiAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jdXN0b21DbGFzc2VzXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblRlbXBsYXRlOyBjb250ZXh0OiB7IGljb246IGl0ZW0uaWNvbkxlZnQsIGFuaW1hdGVkOiBpdGVtLmlzQW5pbWF0ZWRJY29uTGVmdCB9XCJcclxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10ZXh0XCIgW2NsYXNzLnRleHQtcmlnaHRdPVwiaXRlbS50ZXh0UG9zaXRpb24gPT0gJ3JpZ2h0J1wiPnt7IGl0ZW0udGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGU7IGNvbnRleHQ6IHsgaWNvbjogaXRlbS5pY29uUmlnaHQsIGFuaW1hdGVkOiBpdGVtLmlzQW5pbWF0ZWRJY29uUmlnaHQgfVwiXHJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgc3ViLWRyb3Bkb3duLW1lbnVcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1Yml0ZW0gb2YgaXRlbS5jaGlsZHJlblwiPlxyXG4gICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwic3ViaXRlbS5yb3V0ZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHN1Yi1pdGVtXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuaXRlbS1kYW5nZXJdPVwic3ViaXRlbS5pc0l0ZW1EYW5nZXJcIlxyXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInN1Yml0ZW0ucm91dGVcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInN1Yml0ZW0uY3VzdG9tQ2xhc3Nlc1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblRlbXBsYXRlOyBjb250ZXh0OiB7IGljb246IHN1Yml0ZW0uaWNvbkxlZnQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10ZXh0XCIgW2NsYXNzLnRleHQtcmlnaHRdPVwic3ViaXRlbS50ZXh0UG9zaXRpb24gPT0gJ3JpZ2h0J1wiPnt7IHN1Yml0ZW0udGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblRlbXBsYXRlOyBjb250ZXh0OiB7IGljb246IHN1Yml0ZW0uaWNvblJpZ2h0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwic3ViaXRlbS5saW5rXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gc3ViLWl0ZW1cIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5pdGVtLWRhbmdlcl09XCJzdWJpdGVtLmlzSXRlbURhbmdlclwiXHJcbiAgICAgICAgICAgICAgW2hyZWZdPVwic3ViaXRlbS5saW5rXCJcclxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInN1Yml0ZW0uY3VzdG9tQ2xhc3Nlc1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblRlbXBsYXRlOyBjb250ZXh0OiB7IGljb246IHN1Yml0ZW0uaWNvbkxlZnQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10ZXh0XCIgW2NsYXNzLnRleHQtcmlnaHRdPVwic3ViaXRlbS50ZXh0UG9zaXRpb24gPT0gJ3JpZ2h0J1wiPnt7IHN1Yml0ZW0udGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblRlbXBsYXRlOyBjb250ZXh0OiB7IGljb246IHN1Yml0ZW0uaWNvblJpZ2h0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNpY29uVGVtcGxhdGUgbGV0LWljb249XCJpY29uXCIgbGV0LWFuaW1hdGVkPVwiYW5pbWF0ZWRcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaWNvblwiPlxyXG4gICAgPGkgKm5nSWY9XCJpY29uLmluY2x1ZGVzKCdieCcpXCIgY2xhc3M9XCJ7eyBpY29uIH19XCIgW2NsYXNzLmJ0bi1kcm9wZG93bi1pY29uXT1cImFuaW1hdGVkXCI+PC9pPlxyXG4gICAgPHNwYW5cclxuICAgICAgKm5nSWY9XCIhaWNvbi5pbmNsdWRlcygnYngnKVwiXHJcbiAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIlxyXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICBbY2xhc3MuYnRuLWRyb3Bkb3duLWljb25dPVwiYW5pbWF0ZWRcIlxyXG4gICAgICA+e3sgaWNvbiB9fTwvc3BhblxyXG4gICAgPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=