@c8y/ngx-components 1017.0.7 → 1017.0.8

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.
@@ -100,10 +100,10 @@ export class TabsOutletComponent {
100
100
  }
101
101
  }
102
102
  TabsOutletComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: TabsOutletComponent, deps: [{ token: i1.Router }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.HeaderService }], target: i0.ɵɵFactoryTarget.Component });
103
- TabsOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: { tabs: "tabs", orientation: "orientation", navigatorOpen: "navigatorOpen" }, host: { properties: { "class.navigator-open": "this.isNavigatorOpen", "class.page-tabs": "this.hasTabs", "class.page-tabs-horizontal": "this.isHorizontal", "class.page-tabs-vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "leftBtn", first: true, predicate: ["left"], descendants: true, read: ElementRef }, { propertyName: "rightBtn", first: true, predicate: ["right"], descendants: true, read: ElementRef }, { propertyName: "tabsContainer", first: true, predicate: ["tabsContainer"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div #container class=\"tabContainer hidden-xs\">\n <button\n type=\"button\"\n class=\"tabs-slider tabs-slider-left\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n title=\"{{'Scroll to the left' | translate}}\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n type=\"button\"\n class=\"tabs-slider tabs-slider-right\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n title=\"{{'Scroll to the right' | translate}}\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <ul class=\"nav nav-tabs nav-tabsc8y\" #tabsContainer>\n <ng-container *ngFor=\"let tab of tabs\">\n <li [ngClass]=\"{ active: rla?.isActive }\" *ngIf=\"!tab.component\">\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n title=\"{{ tab?.label | translate }}\"\n >\n <i [c8yIcon]=\"tab?.icon\" *ngIf=\"!tab.template && tab?.icon\"></i>\n <span *ngIf=\"!tab.template && !tab.component\">\n {{ tab?.label | translate }}\n </span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </li>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </ul>\n</div>\n\n<div class=\"visible-xs mobile-tabs\">\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select (change)=\"navigateTo($event.target)\" #select>\n <ng-container *ngFor=\"let tab of tabs\">\n <option *ngIf=\"!tab.component\" [value]=\"tab.path\" [selected]=\"isActive(tab)\">\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
103
+ TabsOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: { tabs: "tabs", orientation: "orientation", navigatorOpen: "navigatorOpen" }, host: { properties: { "class.navigator-open": "this.isNavigatorOpen", "class.page-tabs": "this.hasTabs", "class.page-tabs-horizontal": "this.isHorizontal", "class.page-tabs-vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "leftBtn", first: true, predicate: ["left"], descendants: true, read: ElementRef }, { propertyName: "rightBtn", first: true, predicate: ["right"], descendants: true, read: ElementRef }, { propertyName: "tabsContainer", first: true, predicate: ["tabsContainer"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div #container class=\"tabContainer hidden-xs\">\n <button\n type=\"button\"\n class=\"tabs-slider tabs-slider-left\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n type=\"button\"\n class=\"tabs-slider tabs-slider-right\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <div\n role=\"navigation\"\n [attr.aria-label]=\"'Secondary navigation' | translate\"\n class=\"nav nav-tabs nav-tabsc8y\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div role=\"listitem\" [ngClass]=\"{ active: rla?.isActive }\" *ngIf=\"!tab.component\">\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n title=\"{{ tab?.label | translate }}\"\n >\n <i [c8yIcon]=\"tab?.icon\" *ngIf=\"!tab.template && tab?.icon\"></i>\n <span *ngIf=\"!tab.template && !tab.component\">\n {{ tab?.label | translate }}\n </span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<div class=\"visible-xs mobile-tabs\">\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select (change)=\"navigateTo($event.target)\" #select>\n <ng-container *ngFor=\"let tab of tabs\">\n <option *ngIf=\"!tab.component\" [value]=\"tab.path\" [selected]=\"isActive(tab)\">\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
104
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: TabsOutletComponent, decorators: [{
105
105
  type: Component,
106
- args: [{ selector: 'c8y-tabs-outlet,c8y-ui-tabs', template: "<div #container class=\"tabContainer hidden-xs\">\n <button\n type=\"button\"\n class=\"tabs-slider tabs-slider-left\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n title=\"{{'Scroll to the left' | translate}}\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n type=\"button\"\n class=\"tabs-slider tabs-slider-right\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n title=\"{{'Scroll to the right' | translate}}\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <ul class=\"nav nav-tabs nav-tabsc8y\" #tabsContainer>\n <ng-container *ngFor=\"let tab of tabs\">\n <li [ngClass]=\"{ active: rla?.isActive }\" *ngIf=\"!tab.component\">\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n title=\"{{ tab?.label | translate }}\"\n >\n <i [c8yIcon]=\"tab?.icon\" *ngIf=\"!tab.template && tab?.icon\"></i>\n <span *ngIf=\"!tab.template && !tab.component\">\n {{ tab?.label | translate }}\n </span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </li>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </ul>\n</div>\n\n<div class=\"visible-xs mobile-tabs\">\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select (change)=\"navigateTo($event.target)\" #select>\n <ng-container *ngFor=\"let tab of tabs\">\n <option *ngIf=\"!tab.component\" [value]=\"tab.path\" [selected]=\"isActive(tab)\">\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n" }]
106
+ args: [{ selector: 'c8y-tabs-outlet,c8y-ui-tabs', template: "<div #container class=\"tabContainer hidden-xs\">\n <button\n type=\"button\"\n class=\"tabs-slider tabs-slider-left\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n type=\"button\"\n class=\"tabs-slider tabs-slider-right\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <div\n role=\"navigation\"\n [attr.aria-label]=\"'Secondary navigation' | translate\"\n class=\"nav nav-tabs nav-tabsc8y\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div role=\"listitem\" [ngClass]=\"{ active: rla?.isActive }\" *ngIf=\"!tab.component\">\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n title=\"{{ tab?.label | translate }}\"\n >\n <i [c8yIcon]=\"tab?.icon\" *ngIf=\"!tab.template && tab?.icon\"></i>\n <span *ngIf=\"!tab.template && !tab.component\">\n {{ tab?.label | translate }}\n </span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<div class=\"visible-xs mobile-tabs\">\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select (change)=\"navigateTo($event.target)\" #select>\n <ng-container *ngFor=\"let tab of tabs\">\n <option *ngIf=\"!tab.component\" [value]=\"tab.path\" [selected]=\"isActive(tab)\">\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n" }]
107
107
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i2.HeaderService }]; }, propDecorators: { tabs: [{
108
108
  type: Input
109
109
  }], orientation: [{
@@ -135,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
135
135
  type: ViewChild,
136
136
  args: ['tabsContainer', { read: ElementRef, static: false }]
137
137
  }] } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS90YWJzL3RhYnMtb3V0bGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2NvcmUvdGFicy90YWJzLW91dGxldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBS1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFnQixlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQU16RCxNQUFNLE9BQU8sbUJBQW1CO0lBOEI5QixZQUNVLE1BQWMsRUFDZCxRQUFtQixFQUNuQixFQUFjLEVBQ2QsTUFBcUI7UUFIckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFdBQU0sR0FBTixNQUFNLENBQWU7UUFqQ3RCLFNBQUksR0FBVSxFQUFFLENBQUM7UUFDakIsZ0JBQVcsR0FBOEIsVUFBVSxDQUFDO1FBQ3BELGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQy9CLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQXVCbkIsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUSxFQUFFLENBQUMsQ0FBQztJQU9uRCxDQUFDO0lBN0JKLElBQXlDLGVBQWU7UUFDdEQsT0FBTyxJQUFJLENB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QVc7dUJBQUMsNEJBQTRCO2dCQUdJLFVBQVU7c0JBQXRELFdBQVc7dUJBQUMsMEJBQTBCO2dCQUc2QixTQUFTO3NCQUE1RSxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDTSxPQUFPO3NCQUF0RSxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDVyxRQUFRO3NCQUF4RSxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFL0MsYUFBYTtzQkFEcEIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBIb3N0QmluZGluZyxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIE9uRGVzdHJveSxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50UGF0dGVybiwgZnJvbUV2ZW50LCBtZXJnZSwgU3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUYWIgfSBmcm9tICcuL3RhYi5tb2RlbCc7XG5pbXBvcnQgeyBIZWFkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaGVhZGVyL2hlYWRlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXRhYnMtb3V0bGV0LGM4eS11aS10YWJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYnMtb3V0bGV0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJzT3V0bGV0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB0YWJzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyA9ICd2ZXJ0aWNhbCc7XG4gIEBJbnB1dCgpIG5hdmlnYXRvck9wZW4gPSBmYWxzZTtcbiAgc2hvd0xlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1JpZ2h0OiBib29sZWFuID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3MubmF2aWdhdG9yLW9wZW4nKSBnZXQgaXNOYXZpZ2F0b3JPcGVuKCkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRvck9wZW47XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdlLXRhYnMnKSBnZXQgaGFzVGFicygpIHtcbiAgICBsZXQgdmlzaWJsZVRhYnMgPSBbXTtcbiAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICB2aXNpYmxlVGFicyA9IHRoaXMudGFicy5maWx0ZXIodGFiID0+IHRhYi5oaWRlICE9PSB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2libGVUYWJzLmxlbmd0aCA+IDE7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdlLXRhYnMtaG9yaXpvbnRhbCcpIGdldCBpc0hvcml6b250YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhZ2UtdGFicy12ZXJ0aWNhbCcpIGdldCBpc1ZlcnRpY2FsKCkge1xuICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCc7XG4gIH1cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBjb250YWluZXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xlZnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgcHJpdmF0ZSBsZWZ0QnRuOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyaWdodCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIHJpZ2h0QnRuOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0YWJzQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgdGFic0NvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBzY3JvbGxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB0YWJzQ2hhbmdlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYltdPihbXSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGhlYWRlcjogSGVhZGVyU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRhYnMpIHtcbiAgICAgIHRoaXMudGFic0NoYW5nZXMkLm5leHQodGhpcy50YWJzKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgaXNBY3RpdmUodGFiOiBUYWIpIHtcbiAgICBpZiAodGFiICYmIHRhYi5wYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUodGFiLnBhdGgsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlVG8ocGF0aCkge1xuICAgIHRoaXMuaGVhZGVyLnRvZ2dsZSgpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSk7XG4gIH1cblxuICBzY3JvbGwoZGlyZWN0aW9uOiAncmlnaHQnIHwgJ2xlZnQnID0gJ3JpZ2h0Jykge1xuICAgIGNvbnN0IHsgd2lkdGhTY3JvbGwsIHdpZHRoLCBzY3JvbGxMZWZ0IH0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gZGlyZWN0aW9uID09PSAnbGVmdCcgPyAtMSA6IDE7XG5cbiAgICBsZXQgdGFyZ2V0U2Nyb2xsID0gc2Nyb2xsTGVmdCArIHdpZHRoICogbXVsdGlwbGllcjtcbiAgICBpZiAodGFyZ2V0U2Nyb2xsIDwgMCkge1xuICAgICAgdGFyZ2V0U2Nyb2xsID0gMDtcbiAgICB9XG4gICAgaWYgKHRhcmdldFNjcm9sbCA+IHdpZHRoU2Nyb2xsIC0gd2lkdGgpIHtcbiAgICAgIHRhcmdldFNjcm9sbCA9IHdpZHRoU2Nyb2xsIC0gd2lkdGg7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldFNjcm9sbDtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsU3Vic2NyaWJlKCkge1xuICAgIGxldCB1bmxpc3RlbjtcbiAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbiA9IG1lcmdlKFxuICAgICAgdGhpcy50YWJzQ2hhbmdlcyQsXG4gICAgICBmcm9tRXZlbnQodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpLFxuICAgICAgZnJvbUV2ZW50UGF0dGVybihcbiAgICAgICAgKGhhbmRsZXI6IGFueSkgPT4ge1xuICAgICAgICAgIHVubGlzdGVuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCBoYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gdW5saXN0ZW4oKVxuICAgICAgKVxuICAgIClcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyNTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVNjcm9sbCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsKCkge1xuICAgIGNvbnN0IHsgd2lkdGhTY3JvbGwsIHdpZHRoLCBzY3JvbGxMZWZ0IH0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcbiAgICB0aGlzLnNob3dMZWZ0ID0gISFzY3JvbGxMZWZ0O1xuICAgIHRoaXMuc2hvd1JpZ2h0ID0gd2lkdGhTY3JvbGwgPiB3aWR0aCArIHNjcm9sbExlZnQ7XG4gIH1cblxuICBwcml2YXRlIGdldERpbWVuc2lvbnMoKSB7XG4gICAgY29uc3QgZWxUYWJzID0gdGhpcy50YWJzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHdpZHRoU2Nyb2xsID0gZWxUYWJzLnNjcm9sbFdpZHRoO1xuICAgIGNvbnN0IHdpZHRoID0gZWwuY2xpZW50V2lkdGg7XG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IGVsLnNjcm9sbExlZnQ7XG4gICAgcmV0dXJuIHsgd2lkdGhTY3JvbGwsIHdpZHRoLCBzY3JvbGxMZWZ0IH07XG4gIH1cbn1cbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cInRhYkNvbnRhaW5lciBoaWRkZW4teHNcIj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwidGFicy1zbGlkZXIgdGFicy1zbGlkZXItbGVmdFwiXG4gICAgI2xlZnRcbiAgICAqbmdJZj1cInNob3dMZWZ0IHx8IHNob3dSaWdodFwiXG4gICAgW2Rpc2FibGVkXT1cIiFzaG93TGVmdFwiXG4gICAgKGNsaWNrKT1cInNjcm9sbCgnbGVmdCcpXCJcbiAgICB0aXRsZT1cInt7J1Njcm9sbCB0byB0aGUgbGVmdCcgfCB0cmFuc2xhdGV9fVwiXG4gID5cbiAgICA8aSBbYzh5SWNvbl09XCInY2hldnJvbi1sZWZ0J1wiPjwvaT5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cInRhYnMtc2xpZGVyIHRhYnMtc2xpZGVyLXJpZ2h0XCJcbiAgICAjcmlnaHRcbiAgICAqbmdJZj1cInNob3dSaWdodCB8fCBzaG93TGVmdFwiXG4gICAgW2Rpc2FibGVkXT1cIiFzaG93UmlnaHRcIlxuICAgIChjbGljayk9XCJzY3JvbGwoJ3JpZ2h0JylcIlxuICAgIHRpdGxlPVwie3snU2Nyb2xsIHRvIHRoZSByaWdodCcgfCB0cmFuc2xhdGV9fVwiXG4gID5cbiAgICA8aSBbYzh5SWNvbl09XCInY2hldnJvbi1yaWdodCdcIj48L2k+XG4gIDwvYnV0dG9uPlxuICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgbmF2LXRhYnNjOHlcIiAjdGFic0NvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiPlxuICAgICAgPGxpIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBybGE/LmlzQWN0aXZlIH1cIiAqbmdJZj1cIiF0YWIuY29tcG9uZW50XCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwidGFiLnBhdGhcIlxuICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmVcbiAgICAgICAgICAjcmxhPVwicm91dGVyTGlua0FjdGl2ZVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyB0YWI/LmxhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIFtjOHlJY29uXT1cInRhYj8uaWNvblwiICpuZ0lmPVwiIXRhYi50ZW1wbGF0ZSAmJiB0YWI/Lmljb25cIj48L2k+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFiLnRlbXBsYXRlICYmICF0YWIuY29tcG9uZW50XCI+XG4gICAgICAgICAgICB7eyB0YWI/LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWIudGVtcGxhdGU7IGluamVjdG9yOiB0YWIuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGk+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cInRhYi5jb21wb25lbnQ7IGluamVjdG9yOiB0YWIuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC91bD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidmlzaWJsZS14cyBtb2JpbGUtdGFic1wiPlxuICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIGQtZmxleCBtLWItMFwiPlxuICAgIDxsaSBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlciBmbGV4LWdyb3dcIj5cbiAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJuYXZpZ2F0ZVRvKCRldmVudC50YXJnZXQpXCIgI3NlbGVjdD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0lmPVwiIXRhYi5jb21wb25lbnRcIiBbdmFsdWVdPVwidGFiLnBhdGhcIiBbc2VsZWN0ZWRdPVwiaXNBY3RpdmUodGFiKVwiPlxuICAgICAgICAgICAge3sgdGFiPy5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvbGk+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWIuY29tcG9uZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwidGFiLmNvbXBvbmVudDsgaW5qZWN0b3I6IHRhYi5pbmplY3RvclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG48L2Rpdj5cbiJdfQ==
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS90YWJzL3RhYnMtb3V0bGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2NvcmUvdGFicy90YWJzLW91dGxldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBS1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFnQixlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQU16RCxNQUFNLE9BQU8sbUJBQW1CO0lBOEI5QixZQUNVLE1BQWMsRUFDZCxRQUFtQixFQUNuQixFQUFjLEVBQ2QsTUFBcUI7UUFIckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFdBQU0sR0FBTixNQUFNLENBQWU7UUFqQ3RCLFNBQUksR0FBVSxFQUFFLENBQUM7UUFDakIsZ0JBQVcsR0FBOEIsVUFBVSxDQUFDO1FBQ3BELGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQy9CLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQXVCbkIsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUSxFQUFFLENBQUMsQ0FBQztJQU9uRCxDQUFDO0lBN0JKLElBQXlDLGVBQWU7UUFDdEQsT0FBTyxJQUFJLENB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QVc7dUJBQUMsNEJBQTRCO2dCQUdJLFVBQVU7c0JBQXRELFdBQVc7dUJBQUMsMEJBQTBCO2dCQUc2QixTQUFTO3NCQUE1RSxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDTSxPQUFPO3NCQUF0RSxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDVyxRQUFRO3NCQUF4RSxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFL0MsYUFBYTtzQkFEcEIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBIb3N0QmluZGluZyxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIE9uRGVzdHJveSxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50UGF0dGVybiwgZnJvbUV2ZW50LCBtZXJnZSwgU3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUYWIgfSBmcm9tICcuL3RhYi5tb2RlbCc7XG5pbXBvcnQgeyBIZWFkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaGVhZGVyL2hlYWRlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXRhYnMtb3V0bGV0LGM4eS11aS10YWJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYnMtb3V0bGV0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJzT3V0bGV0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB0YWJzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyA9ICd2ZXJ0aWNhbCc7XG4gIEBJbnB1dCgpIG5hdmlnYXRvck9wZW4gPSBmYWxzZTtcbiAgc2hvd0xlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1JpZ2h0OiBib29sZWFuID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3MubmF2aWdhdG9yLW9wZW4nKSBnZXQgaXNOYXZpZ2F0b3JPcGVuKCkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRvck9wZW47XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdlLXRhYnMnKSBnZXQgaGFzVGFicygpIHtcbiAgICBsZXQgdmlzaWJsZVRhYnMgPSBbXTtcbiAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICB2aXNpYmxlVGFicyA9IHRoaXMudGFicy5maWx0ZXIodGFiID0+IHRhYi5oaWRlICE9PSB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2libGVUYWJzLmxlbmd0aCA+IDE7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdlLXRhYnMtaG9yaXpvbnRhbCcpIGdldCBpc0hvcml6b250YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhZ2UtdGFicy12ZXJ0aWNhbCcpIGdldCBpc1ZlcnRpY2FsKCkge1xuICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCc7XG4gIH1cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBjb250YWluZXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xlZnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgcHJpdmF0ZSBsZWZ0QnRuOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyaWdodCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIHJpZ2h0QnRuOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0YWJzQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgdGFic0NvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBzY3JvbGxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB0YWJzQ2hhbmdlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYltdPihbXSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGhlYWRlcjogSGVhZGVyU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRhYnMpIHtcbiAgICAgIHRoaXMudGFic0NoYW5nZXMkLm5leHQodGhpcy50YWJzKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgaXNBY3RpdmUodGFiOiBUYWIpIHtcbiAgICBpZiAodGFiICYmIHRhYi5wYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUodGFiLnBhdGgsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlVG8ocGF0aCkge1xuICAgIHRoaXMuaGVhZGVyLnRvZ2dsZSgpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSk7XG4gIH1cblxuICBzY3JvbGwoZGlyZWN0aW9uOiAncmlnaHQnIHwgJ2xlZnQnID0gJ3JpZ2h0Jykge1xuICAgIGNvbnN0IHsgd2lkdGhTY3JvbGwsIHdpZHRoLCBzY3JvbGxMZWZ0IH0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gZGlyZWN0aW9uID09PSAnbGVmdCcgPyAtMSA6IDE7XG5cbiAgICBsZXQgdGFyZ2V0U2Nyb2xsID0gc2Nyb2xsTGVmdCArIHdpZHRoICogbXVsdGlwbGllcjtcbiAgICBpZiAodGFyZ2V0U2Nyb2xsIDwgMCkge1xuICAgICAgdGFyZ2V0U2Nyb2xsID0gMDtcbiAgICB9XG4gICAgaWYgKHRhcmdldFNjcm9sbCA+IHdpZHRoU2Nyb2xsIC0gd2lkdGgpIHtcbiAgICAgIHRhcmdldFNjcm9sbCA9IHdpZHRoU2Nyb2xsIC0gd2lkdGg7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldFNjcm9sbDtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsU3Vic2NyaWJlKCkge1xuICAgIGxldCB1bmxpc3RlbjtcbiAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbiA9IG1lcmdlKFxuICAgICAgdGhpcy50YWJzQ2hhbmdlcyQsXG4gICAgICBmcm9tRXZlbnQodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpLFxuICAgICAgZnJvbUV2ZW50UGF0dGVybihcbiAgICAgICAgKGhhbmRsZXI6IGFueSkgPT4ge1xuICAgICAgICAgIHVubGlzdGVuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCBoYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gdW5saXN0ZW4oKVxuICAgICAgKVxuICAgIClcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyNTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVNjcm9sbCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsKCkge1xuICAgIGNvbnN0IHsgd2lkdGhTY3JvbGwsIHdpZHRoLCBzY3JvbGxMZWZ0IH0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcbiAgICB0aGlzLnNob3dMZWZ0ID0gISFzY3JvbGxMZWZ0O1xuICAgIHRoaXMuc2hvd1JpZ2h0ID0gd2lkdGhTY3JvbGwgPiB3aWR0aCArIHNjcm9sbExlZnQ7XG4gIH1cblxuICBwcml2YXRlIGdldERpbWVuc2lvbnMoKSB7XG4gICAgY29uc3QgZWxUYWJzID0gdGhpcy50YWJzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHdpZHRoU2Nyb2xsID0gZWxUYWJzLnNjcm9sbFdpZHRoO1xuICAgIGNvbnN0IHdpZHRoID0gZWwuY2xpZW50V2lkdGg7XG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IGVsLnNjcm9sbExlZnQ7XG4gICAgcmV0dXJuIHsgd2lkdGhTY3JvbGwsIHdpZHRoLCBzY3JvbGxMZWZ0IH07XG4gIH1cbn1cbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cInRhYkNvbnRhaW5lciBoaWRkZW4teHNcIj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwidGFicy1zbGlkZXIgdGFicy1zbGlkZXItbGVmdFwiXG4gICAgI2xlZnRcbiAgICAqbmdJZj1cInNob3dMZWZ0IHx8IHNob3dSaWdodFwiXG4gICAgW2Rpc2FibGVkXT1cIiFzaG93TGVmdFwiXG4gICAgKGNsaWNrKT1cInNjcm9sbCgnbGVmdCcpXCJcbiAgICB0aXRsZT1cInt7ICdTY3JvbGwgdG8gdGhlIGxlZnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgPlxuICAgIDxpIFtjOHlJY29uXT1cIidjaGV2cm9uLWxlZnQnXCI+PC9pPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwidGFicy1zbGlkZXIgdGFicy1zbGlkZXItcmlnaHRcIlxuICAgICNyaWdodFxuICAgICpuZ0lmPVwic2hvd1JpZ2h0IHx8IHNob3dMZWZ0XCJcbiAgICBbZGlzYWJsZWRdPVwiIXNob3dSaWdodFwiXG4gICAgKGNsaWNrKT1cInNjcm9sbCgncmlnaHQnKVwiXG4gICAgdGl0bGU9XCJ7eyAnU2Nyb2xsIHRvIHRoZSByaWdodCcgfCB0cmFuc2xhdGUgfX1cIlxuICA+XG4gICAgPGkgW2M4eUljb25dPVwiJ2NoZXZyb24tcmlnaHQnXCI+PC9pPlxuICA8L2J1dHRvbj5cbiAgPGRpdlxuICAgIHJvbGU9XCJuYXZpZ2F0aW9uXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWNvbmRhcnkgbmF2aWdhdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgIGNsYXNzPVwibmF2IG5hdi10YWJzIG5hdi10YWJzYzh5XCJcbiAgICAjdGFic0NvbnRhaW5lclxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICAgIDxkaXYgcm9sZT1cImxpc3RpdGVtXCIgW25nQ2xhc3NdPVwieyBhY3RpdmU6IHJsYT8uaXNBY3RpdmUgfVwiICpuZ0lmPVwiIXRhYi5jb21wb25lbnRcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICBbcm91dGVyTGlua109XCJ0YWIucGF0aFwiXG4gICAgICAgICAgcm91dGVyTGlua0FjdGl2ZVxuICAgICAgICAgICNybGE9XCJyb3V0ZXJMaW5rQWN0aXZlXCJcbiAgICAgICAgICB0aXRsZT1cInt7IHRhYj8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgW2M4eUljb25dPVwidGFiPy5pY29uXCIgKm5nSWY9XCIhdGFiLnRlbXBsYXRlICYmIHRhYj8uaWNvblwiPjwvaT5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWIudGVtcGxhdGUgJiYgIXRhYi5jb21wb25lbnRcIj5cbiAgICAgICAgICAgIHt7IHRhYj8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYi50ZW1wbGF0ZTsgaW5qZWN0b3I6IHRhYi5pbmplY3RvclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cInRhYi5jb21wb25lbnQ7IGluamVjdG9yOiB0YWIuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInZpc2libGUteHMgbW9iaWxlLXRhYnNcIj5cbiAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBkLWZsZXggbS1iLTBcIj5cbiAgICA8bGkgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXIgZmxleC1ncm93XCI+XG4gICAgICA8c2VsZWN0IChjaGFuZ2UpPVwibmF2aWdhdGVUbygkZXZlbnQudGFyZ2V0KVwiICNzZWxlY3Q+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCI+XG4gICAgICAgICAgPG9wdGlvbiAqbmdJZj1cIiF0YWIuY29tcG9uZW50XCIgW3ZhbHVlXT1cInRhYi5wYXRoXCIgW3NlbGVjdGVkXT1cImlzQWN0aXZlKHRhYilcIj5cbiAgICAgICAgICAgIHt7IHRhYj8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3NlbGVjdD5cbiAgICA8L2xpPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiLmNvbXBvbmVudFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cInRhYi5jb21wb25lbnQ7IGluamVjdG9yOiB0YWIuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3VsPlxuPC9kaXY+XG4iXX0=
@@ -176,12 +176,12 @@ export class InstallFromPackageComponent {
176
176
  }
177
177
  }
178
178
  InstallFromPackageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: InstallFromPackageComponent, deps: [{ token: i1.EcosystemService }, { token: i2.ApplicationService }, { token: i3.WizardComponent }, { token: i3.PluginsService }, { token: i2.InventoryService }], target: i0.ɵɵFactoryTarget.Component });
179
- InstallFromPackageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: InstallFromPackageComponent, selector: "c8y-install-from-package", viewQueries: [{ propertyName: "applicationPropertiesForm", first: true, predicate: ApplicationPropertiesFormComponent, descendants: true }], ngImport: i0, template: "<c8y-wizard-header>\n <i [c8yIcon]=\"'big-parcel'\"></i>\n <h4 id=\"modal-title\" translate>Install from package</h4>\n</c8y-wizard-header>\n<c8y-wizard-body>\n <ng-container *ngIf=\"!selectedPackage\">\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <p class=\"p-16 text-medium text-center separator-bottom sticky-top bg-level-0\">\n {{ 'Select from available packages' | translate }}\n </p>\n <div *ngIf=\"!packages?.length\" class=\"c8y-empty-state text-center\">\n <p class=\"text-center\">{{ 'No packages to display.' | translate }}</p>\n </div>\n <div *ngIf=\"packages?.length\" class=\"c8y-wizard-list-nav\" style=\"min-height: 257px\">\n <button\n class=\"list-group-item text-truncate\"\n *ngFor=\"let package of packages\"\n (click)=\"selectPackage(package)\"\n title=\"{{ package.name }}\"\n type=\"button\"\n >\n <i c8yIcon=\"big-parcel\" class=\"list-group-icon\"></i>\n <span [innerText]=\"package.name\"></span>\n </button>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isDeployed && selectedPackage\">\n <p class=\"p-16 text-center text-medium separator-bottom sticky-top bg-level-0\">\n {{ 'Provide application details' | translate }}\n </p>\n <div class=\"d-flex d-col a-i-center j-c-center\" style=\"min-height: 257px\">\n <c8y-application-properties-form\n *ngIf=\"!inProgress\"\n [application]=\"newAppConfig\"\n class=\"d-block fit-w\"\n ></c8y-application-properties-form>\n\n <ng-container *ngIf=\"!inProgress\">\n <div [ngStyle]=\"{ padding: '0 16px' }\" class=\"d-block fit-w bg-gray-white\">\n <label for=\"packageVersion\" translate>Use package version</label>\n <c8y-form-group>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"packageVersion\"\n (onSearch)=\"onInput.next($event)\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n [displayProperty]=\"'version'\"\n [required]=\"true\"\n [hideNew]=\"true\"\n [container]=\"'body'\"\n >\n <c8y-li\n *c8yFor=\"let version of versions$; loadMore: 'auto'; notFound: notFoundTemplate\"\n (click)=\"onAppVersionSelect(version)\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n [active]=\"model.selected === version\"\n >\n <c8y-li-icon icon=\"big-parcel\"></c8y-li-icon>\n <span\n [ngStyle]=\"{\n display: 'flex',\n 'flex-direction': 'row',\n 'align-content': 'center',\n 'justify-content': 'space-between',\n 'align-items': 'center'\n }\"\n >\n <c8y-highlight\n [text]=\"version.version || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n\n <span>\n <span *ngFor=\"let tag of version.tags\" class=\"label label-info m-l-4\">\n {{ tag }}\n </span>\n </span>\n </span>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li\n class=\"bg-gray-lighter p-8\"\n *ngIf=\"(onInput | async)?.length > 0 && (versions$ | async)?.data?.length === 0\"\n >\n <span translate>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n </div>\n </ng-container>\n\n <c8y-progress-bar\n [message]=\"'Installing\u2026' | translate\"\n class=\"text-center d-block\"\n *ngIf=\"inProgress\"\n ></c8y-progress-bar>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isDeployed\">\n <div\n *ngIf=\"deployedWithSuccess; else failedDeploy\"\n class=\"d-flex a-i-center j-c-center\"\n style=\"min-height: 257px\"\n >\n <c8y-operation-result\n text=\"{{ 'Application created' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n <ng-template #failedDeploy>\n <div class=\"d-flex a-i-center j-c-center\" style=\"min-height: 257px\">\n <c8y-operation-result\n text=\"{{ 'Application creation failed' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n </ng-container>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n *ngIf=\"!isDeployed\"\n (click)=\"selectedPackage ? clean() : back()\"\n class=\"btn btn-default\"\n title=\"{{ 'Back' | translate }}\"\n translate\n [disabled]=\"inProgress\"\n type=\"button\"\n >\n Back\n </button>\n <button\n title=\"{{ isDeployed && deployedWithSuccess ? ('Close' | translate) : ('Cancel' | translate) }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ isDeployed && deployedWithSuccess ? ('Close' | translate) : ('Cancel' | translate) }}\n </button>\n\n <button\n title=\"{{ 'Install' | translate }}\"\n class=\"btn btn-primary\"\n type=\"button\"\n (click)=\"deployApp()\"\n [disabled]=\"inProgress || !packages?.length\"\n *ngIf=\"!isDeployed\"\n >\n {{ 'Install' | translate }}\n </button>\n</c8y-wizard-footer>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i3.ProgressBarComponent, selector: "c8y-progress-bar", inputs: ["message", "progress"] }, { kind: "component", type: i3.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i3.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i3.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.WizardHeaderComponent, selector: "c8y-wizard-header" }, { kind: "component", type: i3.WizardBodyComponent, selector: "c8y-wizard-body" }, { kind: "component", type: i3.WizardFooterComponent, selector: "c8y-wizard-footer" }, { kind: "component", type: i1.ApplicationPropertiesFormComponent, selector: "c8y-application-properties-form", inputs: ["application", "disabled"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
179
+ InstallFromPackageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: InstallFromPackageComponent, selector: "c8y-install-from-package", viewQueries: [{ propertyName: "applicationPropertiesForm", first: true, predicate: ApplicationPropertiesFormComponent, descendants: true }], ngImport: i0, template: "<c8y-wizard-header>\n <i [c8yIcon]=\"'big-parcel'\"></i>\n <h4 id=\"modal-title\" translate>Install from package</h4>\n</c8y-wizard-header>\n<c8y-wizard-body>\n <ng-container *ngIf=\"!selectedPackage\">\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <p class=\"p-16 text-medium text-center separator-bottom sticky-top bg-level-0\">\n {{ 'Select from available packages' | translate }}\n </p>\n\n <c8y-ui-empty-state\n *ngIf=\"!packages?.length\"\n [icon]=\"'big-parcel'\"\n [title]=\"'No packages to display.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div *ngIf=\"packages?.length\" class=\"c8y-wizard-list-nav\" style=\"min-height: 257px\">\n <button\n class=\"list-group-item text-truncate\"\n *ngFor=\"let package of packages\"\n (click)=\"selectPackage(package)\"\n title=\"{{ package.name }}\"\n type=\"button\"\n >\n <i c8yIcon=\"big-parcel\" class=\"list-group-icon\"></i>\n <span [innerText]=\"package.name\"></span>\n </button>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isDeployed && selectedPackage\">\n <p class=\"p-16 text-center text-medium separator-bottom sticky-top bg-level-0\">\n {{ 'Provide application details' | translate }}\n </p>\n <div class=\"d-flex d-col a-i-center j-c-center\" style=\"min-height: 257px\">\n <c8y-application-properties-form\n *ngIf=\"!inProgress\"\n [application]=\"newAppConfig\"\n class=\"d-block fit-w\"\n ></c8y-application-properties-form>\n\n <ng-container *ngIf=\"!inProgress\">\n <div [ngStyle]=\"{ padding: '0 16px' }\" class=\"d-block fit-w bg-gray-white\">\n <label for=\"packageVersion\" translate>Use package version</label>\n <c8y-form-group>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"packageVersion\"\n (onSearch)=\"onInput.next($event)\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n [displayProperty]=\"'version'\"\n [required]=\"true\"\n [hideNew]=\"true\"\n [container]=\"'body'\"\n >\n <c8y-li\n *c8yFor=\"let version of versions$; loadMore: 'auto'; notFound: notFoundTemplate\"\n (click)=\"onAppVersionSelect(version)\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n [active]=\"model.selected === version\"\n >\n <c8y-li-icon icon=\"big-parcel\"></c8y-li-icon>\n <span\n [ngStyle]=\"{\n display: 'flex',\n 'flex-direction': 'row',\n 'align-content': 'center',\n 'justify-content': 'space-between',\n 'align-items': 'center'\n }\"\n >\n <c8y-highlight\n [text]=\"version.version || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n\n <span>\n <span *ngFor=\"let tag of version.tags\" class=\"label label-info m-l-4\">\n {{ tag }}\n </span>\n </span>\n </span>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li\n class=\"bg-gray-lighter p-8\"\n *ngIf=\"(onInput | async)?.length > 0 && (versions$ | async)?.data?.length === 0\"\n >\n <span translate>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n </div>\n </ng-container>\n\n <c8y-progress-bar\n [message]=\"'Installing\u2026' | translate\"\n class=\"text-center d-block\"\n *ngIf=\"inProgress\"\n ></c8y-progress-bar>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isDeployed\">\n <div\n *ngIf=\"deployedWithSuccess; else failedDeploy\"\n class=\"d-flex a-i-center j-c-center\"\n style=\"min-height: 257px\"\n >\n <c8y-operation-result\n text=\"{{ 'Application created' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n <ng-template #failedDeploy>\n <div class=\"d-flex a-i-center j-c-center\" style=\"min-height: 257px\">\n <c8y-operation-result\n text=\"{{ 'Application creation failed' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n </ng-container>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n *ngIf=\"!isDeployed\"\n (click)=\"selectedPackage ? clean() : back()\"\n class=\"btn btn-default\"\n title=\"{{ 'Back' | translate }}\"\n [disabled]=\"inProgress\"\n type=\"button\"\n >\n {{ 'Back' | translate }}\n </button>\n <button\n title=\"{{ isDeployed && deployedWithSuccess ? ('Close' | translate) : ('Cancel' | translate) }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ isDeployed && deployedWithSuccess ? ('Close' | translate) : ('Cancel' | translate) }}\n </button>\n\n <button\n title=\"{{ 'Install' | translate }}\"\n class=\"btn btn-primary\"\n type=\"button\"\n (click)=\"deployApp()\"\n [disabled]=\"inProgress || !packages?.length\"\n *ngIf=\"!isDeployed\"\n >\n {{ 'Install' | translate }}\n </button>\n</c8y-wizard-footer>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i3.ProgressBarComponent, selector: "c8y-progress-bar", inputs: ["message", "progress"] }, { kind: "component", type: i3.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i3.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i3.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.WizardHeaderComponent, selector: "c8y-wizard-header" }, { kind: "component", type: i3.WizardBodyComponent, selector: "c8y-wizard-body" }, { kind: "component", type: i3.WizardFooterComponent, selector: "c8y-wizard-footer" }, { kind: "component", type: i1.ApplicationPropertiesFormComponent, selector: "c8y-application-properties-form", inputs: ["application", "disabled"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
180
180
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: InstallFromPackageComponent, decorators: [{
181
181
  type: Component,
182
- args: [{ selector: 'c8y-install-from-package', template: "<c8y-wizard-header>\n <i [c8yIcon]=\"'big-parcel'\"></i>\n <h4 id=\"modal-title\" translate>Install from package</h4>\n</c8y-wizard-header>\n<c8y-wizard-body>\n <ng-container *ngIf=\"!selectedPackage\">\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <p class=\"p-16 text-medium text-center separator-bottom sticky-top bg-level-0\">\n {{ 'Select from available packages' | translate }}\n </p>\n <div *ngIf=\"!packages?.length\" class=\"c8y-empty-state text-center\">\n <p class=\"text-center\">{{ 'No packages to display.' | translate }}</p>\n </div>\n <div *ngIf=\"packages?.length\" class=\"c8y-wizard-list-nav\" style=\"min-height: 257px\">\n <button\n class=\"list-group-item text-truncate\"\n *ngFor=\"let package of packages\"\n (click)=\"selectPackage(package)\"\n title=\"{{ package.name }}\"\n type=\"button\"\n >\n <i c8yIcon=\"big-parcel\" class=\"list-group-icon\"></i>\n <span [innerText]=\"package.name\"></span>\n </button>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isDeployed && selectedPackage\">\n <p class=\"p-16 text-center text-medium separator-bottom sticky-top bg-level-0\">\n {{ 'Provide application details' | translate }}\n </p>\n <div class=\"d-flex d-col a-i-center j-c-center\" style=\"min-height: 257px\">\n <c8y-application-properties-form\n *ngIf=\"!inProgress\"\n [application]=\"newAppConfig\"\n class=\"d-block fit-w\"\n ></c8y-application-properties-form>\n\n <ng-container *ngIf=\"!inProgress\">\n <div [ngStyle]=\"{ padding: '0 16px' }\" class=\"d-block fit-w bg-gray-white\">\n <label for=\"packageVersion\" translate>Use package version</label>\n <c8y-form-group>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"packageVersion\"\n (onSearch)=\"onInput.next($event)\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n [displayProperty]=\"'version'\"\n [required]=\"true\"\n [hideNew]=\"true\"\n [container]=\"'body'\"\n >\n <c8y-li\n *c8yFor=\"let version of versions$; loadMore: 'auto'; notFound: notFoundTemplate\"\n (click)=\"onAppVersionSelect(version)\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n [active]=\"model.selected === version\"\n >\n <c8y-li-icon icon=\"big-parcel\"></c8y-li-icon>\n <span\n [ngStyle]=\"{\n display: 'flex',\n 'flex-direction': 'row',\n 'align-content': 'center',\n 'justify-content': 'space-between',\n 'align-items': 'center'\n }\"\n >\n <c8y-highlight\n [text]=\"version.version || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n\n <span>\n <span *ngFor=\"let tag of version.tags\" class=\"label label-info m-l-4\">\n {{ tag }}\n </span>\n </span>\n </span>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li\n class=\"bg-gray-lighter p-8\"\n *ngIf=\"(onInput | async)?.length > 0 && (versions$ | async)?.data?.length === 0\"\n >\n <span translate>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n </div>\n </ng-container>\n\n <c8y-progress-bar\n [message]=\"'Installing\u2026' | translate\"\n class=\"text-center d-block\"\n *ngIf=\"inProgress\"\n ></c8y-progress-bar>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isDeployed\">\n <div\n *ngIf=\"deployedWithSuccess; else failedDeploy\"\n class=\"d-flex a-i-center j-c-center\"\n style=\"min-height: 257px\"\n >\n <c8y-operation-result\n text=\"{{ 'Application created' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n <ng-template #failedDeploy>\n <div class=\"d-flex a-i-center j-c-center\" style=\"min-height: 257px\">\n <c8y-operation-result\n text=\"{{ 'Application creation failed' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n </ng-container>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n *ngIf=\"!isDeployed\"\n (click)=\"selectedPackage ? clean() : back()\"\n class=\"btn btn-default\"\n title=\"{{ 'Back' | translate }}\"\n translate\n [disabled]=\"inProgress\"\n type=\"button\"\n >\n Back\n </button>\n <button\n title=\"{{ isDeployed && deployedWithSuccess ? ('Close' | translate) : ('Cancel' | translate) }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ isDeployed && deployedWithSuccess ? ('Close' | translate) : ('Cancel' | translate) }}\n </button>\n\n <button\n title=\"{{ 'Install' | translate }}\"\n class=\"btn btn-primary\"\n type=\"button\"\n (click)=\"deployApp()\"\n [disabled]=\"inProgress || !packages?.length\"\n *ngIf=\"!isDeployed\"\n >\n {{ 'Install' | translate }}\n </button>\n</c8y-wizard-footer>\n" }]
182
+ args: [{ selector: 'c8y-install-from-package', template: "<c8y-wizard-header>\n <i [c8yIcon]=\"'big-parcel'\"></i>\n <h4 id=\"modal-title\" translate>Install from package</h4>\n</c8y-wizard-header>\n<c8y-wizard-body>\n <ng-container *ngIf=\"!selectedPackage\">\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <p class=\"p-16 text-medium text-center separator-bottom sticky-top bg-level-0\">\n {{ 'Select from available packages' | translate }}\n </p>\n\n <c8y-ui-empty-state\n *ngIf=\"!packages?.length\"\n [icon]=\"'big-parcel'\"\n [title]=\"'No packages to display.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div *ngIf=\"packages?.length\" class=\"c8y-wizard-list-nav\" style=\"min-height: 257px\">\n <button\n class=\"list-group-item text-truncate\"\n *ngFor=\"let package of packages\"\n (click)=\"selectPackage(package)\"\n title=\"{{ package.name }}\"\n type=\"button\"\n >\n <i c8yIcon=\"big-parcel\" class=\"list-group-icon\"></i>\n <span [innerText]=\"package.name\"></span>\n </button>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isDeployed && selectedPackage\">\n <p class=\"p-16 text-center text-medium separator-bottom sticky-top bg-level-0\">\n {{ 'Provide application details' | translate }}\n </p>\n <div class=\"d-flex d-col a-i-center j-c-center\" style=\"min-height: 257px\">\n <c8y-application-properties-form\n *ngIf=\"!inProgress\"\n [application]=\"newAppConfig\"\n class=\"d-block fit-w\"\n ></c8y-application-properties-form>\n\n <ng-container *ngIf=\"!inProgress\">\n <div [ngStyle]=\"{ padding: '0 16px' }\" class=\"d-block fit-w bg-gray-white\">\n <label for=\"packageVersion\" translate>Use package version</label>\n <c8y-form-group>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"packageVersion\"\n (onSearch)=\"onInput.next($event)\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n [displayProperty]=\"'version'\"\n [required]=\"true\"\n [hideNew]=\"true\"\n [container]=\"'body'\"\n >\n <c8y-li\n *c8yFor=\"let version of versions$; loadMore: 'auto'; notFound: notFoundTemplate\"\n (click)=\"onAppVersionSelect(version)\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n [active]=\"model.selected === version\"\n >\n <c8y-li-icon icon=\"big-parcel\"></c8y-li-icon>\n <span\n [ngStyle]=\"{\n display: 'flex',\n 'flex-direction': 'row',\n 'align-content': 'center',\n 'justify-content': 'space-between',\n 'align-items': 'center'\n }\"\n >\n <c8y-highlight\n [text]=\"version.version || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n\n <span>\n <span *ngFor=\"let tag of version.tags\" class=\"label label-info m-l-4\">\n {{ tag }}\n </span>\n </span>\n </span>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li\n class=\"bg-gray-lighter p-8\"\n *ngIf=\"(onInput | async)?.length > 0 && (versions$ | async)?.data?.length === 0\"\n >\n <span translate>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n </div>\n </ng-container>\n\n <c8y-progress-bar\n [message]=\"'Installing\u2026' | translate\"\n class=\"text-center d-block\"\n *ngIf=\"inProgress\"\n ></c8y-progress-bar>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isDeployed\">\n <div\n *ngIf=\"deployedWithSuccess; else failedDeploy\"\n class=\"d-flex a-i-center j-c-center\"\n style=\"min-height: 257px\"\n >\n <c8y-operation-result\n text=\"{{ 'Application created' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n <ng-template #failedDeploy>\n <div class=\"d-flex a-i-center j-c-center\" style=\"min-height: 257px\">\n <c8y-operation-result\n text=\"{{ 'Application creation failed' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n </ng-container>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n *ngIf=\"!isDeployed\"\n (click)=\"selectedPackage ? clean() : back()\"\n class=\"btn btn-default\"\n title=\"{{ 'Back' | translate }}\"\n [disabled]=\"inProgress\"\n type=\"button\"\n >\n {{ 'Back' | translate }}\n </button>\n <button\n title=\"{{ isDeployed && deployedWithSuccess ? ('Close' | translate) : ('Cancel' | translate) }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ isDeployed && deployedWithSuccess ? ('Close' | translate) : ('Cancel' | translate) }}\n </button>\n\n <button\n title=\"{{ 'Install' | translate }}\"\n class=\"btn btn-primary\"\n type=\"button\"\n (click)=\"deployApp()\"\n [disabled]=\"inProgress || !packages?.length\"\n *ngIf=\"!isDeployed\"\n >\n {{ 'Install' | translate }}\n </button>\n</c8y-wizard-footer>\n" }]
183
183
  }], ctorParameters: function () { return [{ type: i1.EcosystemService }, { type: i2.ApplicationService }, { type: i3.WizardComponent }, { type: i3.PluginsService }, { type: i2.InventoryService }]; }, propDecorators: { applicationPropertiesForm: [{
184
184
  type: ViewChild,
185
185
  args: [ApplicationPropertiesFormComponent]
186
186
  }] } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC1mcm9tLXBhY2thZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9ucy9pbnN0YWxsLWZyb20tcGFja2FnZS9pbnN0YWxsLWZyb20tcGFja2FnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb25zL2luc3RhbGwtZnJvbS1wYWNrYWdlL2luc3RhbGwtZnJvbS1wYWNrYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsZ0JBQWdCLEVBRWpCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7QUFNMUYsTUFBTSxPQUFPLDJCQUEyQjtJQW9CdEMsWUFDVSxnQkFBa0MsRUFDbEMsa0JBQXNDLEVBQ3RDLGVBQWdDLEVBQ2hDLGNBQThCLEVBQzlCLGdCQUFrQztRQUpsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIs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QUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDOzt3SEEzTVUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsMkhBaUIzQixrQ0FBa0MsZ0RDbkMvQyxpcUxBaUtBOzJGRC9JYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsMEJBQTBCO2tPQXFCcEMseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJUmVzdWx0TGlzdFxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBQbHVnaW5zU2VydmljZSwgV2l6YXJkQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm1Db21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktaW5zdGFsbC1mcm9tLXBhY2thZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5zdGFsbC1mcm9tLXBhY2thZ2UuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEluc3RhbGxGcm9tUGFja2FnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG5ld0FwcENvbmZpZzogSUFwcGxpY2F0aW9uO1xuICBzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbjtcbiAgcGFja2FnZXM6IElBcHBsaWNhdGlvbltdO1xuICBpblByb2dyZXNzOiBib29sZWFuO1xuICBkZXBsb3llZFdpdGhTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRGVwbG95ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBtb2RlbCA9IHtcbiAgICBzZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIGJpbmFyeToge1xuICAgICAgaWQ6IHVuZGVmaW5lZFxuICAgIH1cbiAgfTtcbiAgY2FuRGVwbG95OiBib29sZWFuID0gZmFsc2U7XG4gIG9uSW5wdXQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgdmVyc2lvbnMkOiBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElBcHBsaWNhdGlvblZlcnNpb24+PjtcbiAgQFZpZXdDaGlsZChBcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtQ29tcG9uZW50KVxuICBhcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtOiBBcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgd2l6YXJkQ29tcG9uZW50OiBXaXphcmRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZTogUGx1Z2luc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRQYWNrYWdlcygpO1xuICB9XG5cbiAgYmFjaygpIHtcbiAgICB0aGlzLndpemFyZENvbXBvbmVudC5yZXNldCgpO1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFBhY2thZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy52ZXJzaW9ucyQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tb2RlbCA9IHtcbiAgICAgIHNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgICBiaW5hcnk6IHtcbiAgICAgICAgaWQ6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy53aXphcmRDb21wb25lbnQuY2xvc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRlcGxveUFwcCgpIHtcbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIGNvbnN0IGZvcm1Hcm91cFZhbHVlID0gdGhpcy5hcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHAgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmNyZWF0ZUNvbmZpZyh0aGlzLnNlbGVjdGVkUGFja2FnZSwgZm9ybUdyb3VwVmFsdWUpO1xuICAgIGNvbmZpZy52ZXJzaW9uID0gdGhpcy5tb2RlbC5zZWxlY3RlZC52ZXJzaW9uO1xuICAgIGNvbmZpZy5pc1NldHVwID0gdHJ1ZTtcbiAgICBpZiAoIWNvbmZpZy5tYW5pZmVzdCkge1xuICAgICAgY29uZmlnLm1hbmlmZXN0ID0ge307XG4gICAgfVxuICAgIGNvbmZpZy5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjb25maWcubWFuaWZlc3Quc291cmNlID0gdGhpcy5zZWxlY3RlZFBhY2thZ2UuaWQ7XG4gICAgY29uZmlnLm1hbmlmZXN0LnBhY2thZ2UgPSAnYmx1ZXByaW50JztcbiAgICBjb25maWcucmVzb3VyY2VzVXJsID0gJy8nO1xuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHBcbiAgICBjb25zdCBuZXdBcHAgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKGNvbmZpZykpLmRhdGE7XG4gICAgLy8gQmluYXJ5XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBiaW5hcnkgZGV0YWlsc1xuICAgICAgY29uc3QgeyBkYXRhOiBiaW5hcnlEZXRhaWxzIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKFxuICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkLmJpbmFyeUlkXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgYmluYXJ5IGZyb20gc3BlY2lmaWMgcGFja2FnZSB2ZXJzaW9uXG4gICAgICBjb25zdCBiaW5hcnkgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QmluYXJ5KHRoaXMuc2VsZWN0ZWRQYWNrYWdlLCB7XG4gICAgICAgIGlkOiB0aGlzLm1vZGVsLnNlbGVjdGVkLmJpbmFyeUlkXG4gICAgICB9KTtcbiAgICAgIC8vIENyZWF0ZSB6aXBcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiBiaW5hcnlEZXRhaWxzLmNvbnRlbnRUeXBlIH0pO1xuICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtmaWxlQmluYXJ5XSwgYmluYXJ5RGV0YWlscy5uYW1lLCB7XG4gICAgICAgIHR5cGU6IGJpbmFyeURldGFpbHMuY29udGVudFR5cGVcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGxvYWQgYmluYXJ5IHRvIG5ldyBhcHBcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGxvYWRBcmNoaXZlVG9BcHAoZmlsZSwgbmV3QXBwKTtcbiAgICAgIC8vIFVwZGF0ZSBtYW5pZmVzdFxuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcE1hbmlmZXN0KG5ld0FwcCwgdGhpcy5zZWxlY3RlZFBhY2thZ2UpO1xuXG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3I/LnJlcz8uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKG5ld0FwcC5pZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZmFsbGJhY2tUb0Nsb25lTGF0ZXN0KGNvbmZpZyk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzRGVwbG95ZWQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmYWxsYmFja1RvQ2xvbmVMYXRlc3QoY29uZmlnKSB7XG4gICAgbGV0IGNsb25lZFBrZztcbiAgICB0cnkge1xuICAgICAgY2xvbmVkUGtnID0gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNsb25lKHRoaXMuc2VsZWN0ZWRQYWNrYWdlKSkuZGF0YTtcblxuICAgICAgLy8gY2xlYW4gb3V0IGFsbCBmYWxzZWx5IGNsb25lZCBhcHBsaWNhdGlvblZlcnNpb25zLCB3ZSBkb24ndCBuZWVkIHRoZW1cbiAgICAgIGZvciAoY29uc3QgYXBwVmVyc2lvbiBvZiBjbG9uZWRQa2cuYXBwbGljYXRpb25WZXJzaW9ucyBhcyBJQXBwbGljYXRpb25WZXJzaW9uW10pIHtcbiAgICAgICAgaWYgKGFwcFZlcnNpb24udGFncy5pbmNsdWRlcygnbGF0ZXN0JykpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoY2xvbmVkUGtnLCBhcHBWZXJzaW9uLnZlcnNpb24sIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZGVsZXRlUGFja2FnZVZlcnNpb24oY2xvbmVkUGtnLCB7XG4gICAgICAgICAgdmVyc2lvbjogYXBwVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNvbmZpZy50eXBlO1xuICAgICAgY29uZmlnLmlzUGFja2FnZSA9IGZhbHNlO1xuICAgICAgY29uc3QgeyBkYXRhOiBuZXdBcHAgfSA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGRhdGVBcHAoXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogY2xvbmVkUGtnLmlkLFxuICAgICAgICAgIGFjdGl2ZVZlcnNpb25JZDogY2xvbmVkUGtnLmFjdGl2ZVZlcnNpb25JZCxcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBkYXRlQXBwTWFuaWZlc3QobmV3QXBwLCB0aGlzLnNlbGVjdGVkUGFja2FnZSk7XG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZGVsZXRlQXBwKGNsb25lZFBrZy5pZCwgdHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubWFya0FzRGVwbG95ZWQoKTtcbiAgfVxuXG4gIG9uQXBwVmVyc2lvblNlbGVjdChhcHBWZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLCB7XG4gICAgICBzZWxlY3RlZDogYXBwVmVyc2lvblxuICAgIH0pO1xuICAgIHRoaXMuY2FuRGVwbG95ID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdFBhY2thZ2Uoc2VsZWN0ZWRQYWNrYWdlOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRBcHBsaWNhdGlvbnMoKSkuZGF0YTtcbiAgICB0aGlzLm5ld0FwcENvbmZpZyA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRVbmlxdWVBcHBDb25maWcoc2VsZWN0ZWRQYWNrYWdlLCBhcHBzKTtcbiAgICB0aGlzLnNlbGVjdGVkUGFja2FnZSA9IHNlbGVjdGVkUGFja2FnZTtcblxuICAgIHRoaXMubG9hZFNlbGVjdGVkUGFja2FnZVZlcnNpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRTZWxlY3RlZFBhY2thZ2VWZXJzaW9ucygpIHtcbiAgICB0aGlzLnZlcnNpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5nZXRBcHBWZXJzaW9ucyh0aGlzLnNlbGVjdFBhY2thZ2UpLFxuICAgICAgdGhpcy5vbklucHV0LmFzT2JzZXJ2YWJsZSgpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdExpc3QsIGZpbHRlclN0cl0pID0+IHtcbiAgICAgICAgdGhpcy5jYW5EZXBsb3kgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdmVyc2lvbnNGaWx0ZXJlZEJ5U3RyID0gdGhpcy5maWx0ZXJBcHBWZXJzaW9ucyhyZXN1bHRMaXN0LmRhdGEsIGZpbHRlclN0cik7XG4gICAgICAgIGNvbnN0IHNvcnRlZEFwcFZlcnNpb25zID0gdGhpcy5wbHVnaW5zU2VydmljZS5zb3J0VmVyc2lvbnMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGlzdDogdmVyc2lvbnNGaWx0ZXJlZEJ5U3RyLFxuICAgICAgICAgICAgcGF0aDogWyd2ZXJzaW9uJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgICdkZXNjJ1xuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlRm9ySW5wdXQoc29ydGVkQXBwVmVyc2lvbnMpO1xuICAgICAgICByZXR1cm4geyBkYXRhOiBzb3J0ZWRBcHBWZXJzaW9ucywgcmVzOiByZXN1bHRMaXN0LnJlcyB9O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBWZXJzaW9ucyhtbzogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgdmVyc2lvbnMgPSBtbz8uYXBwbGljYXRpb25WZXJzaW9ucztcbiAgICByZXR1cm4gdmVyc2lvbnMgJiYgdmVyc2lvbnMubGVuZ3RoID4gMFxuICAgICAgPyBvZih7IGRhdGE6IHZlcnNpb25zLCByZXM6IHVuZGVmaW5lZCB9KVxuICAgICAgOiBmcm9tKHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RWZXJzaW9ucyh0aGlzLnNlbGVjdGVkUGFja2FnZS5pZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWVGb3JJbnB1dCh2ZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLnNlbGVjdGVkICYmIHZlcnNpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhdGVzdCA9IHZlcnNpb25zLmZpbmQodiA9PiB2LnRhZ3MuaW5jbHVkZXMoJ2xhdGVzdCcpKTtcbiAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWQgPSBsYXRlc3QgfHwgdmVyc2lvbnNbMF07XG4gICAgICB0aGlzLmNhbkRlcGxveSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJBcHBWZXJzaW9ucyhcbiAgICBhcHBWZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdLFxuICAgIGZpbHRlclN0cjogc3RyaW5nXG4gICk6IElBcHBsaWNhdGlvblZlcnNpb25bXSB7XG4gICAgcmV0dXJuIGZpbHRlclN0ciA9PT0gJydcbiAgICAgID8gYXBwVmVyc2lvbnNcbiAgICAgIDogYXBwVmVyc2lvbnMuZmlsdGVyKGFwcFZlcnNpb24gPT4gYXBwVmVyc2lvbi52ZXJzaW9uLmluY2x1ZGVzKGZpbHRlclN0cikpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNEZXBsb3llZCgpIHtcbiAgICB0aGlzLmlzRGVwbG95ZWQgPSB0cnVlO1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUGFja2FnZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXBwbGljYXRpb25zID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldFBhY2thZ2VBcHBsaWNhdGlvbnMoKTtcbiAgICB0aGlzLnBhY2thZ2VzID0gYXBwbGljYXRpb25zLmZpbHRlcihhcHAgPT4gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzUGFja2FnZUJsdWVwcmludChhcHApKTtcbiAgfVxufVxuIiwiPGM4eS13aXphcmQtaGVhZGVyPlxuICA8aSBbYzh5SWNvbl09XCInYmlnLXBhcmNlbCdcIj48L2k+XG4gIDxoNCBpZD1cIm1vZGFsLXRpdGxlXCIgdHJhbnNsYXRlPkluc3RhbGwgZnJvbSBwYWNrYWdlPC9oND5cbjwvYzh5LXdpemFyZC1oZWFkZXI+XG48Yzh5LXdpemFyZC1ib2R5PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkUGFja2FnZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1pbm5lci1zY3JvbGxcIiBpZD1cIm1vZGFsLWJvZHlcIj5cbiAgICAgIDxwIGNsYXNzPVwicC0xNiB0ZXh0LW1lZGl1bSB0ZXh0LWNlbnRlciBzZXBhcmF0b3ItYm90dG9tIHN0aWNreS10b3AgYmctbGV2ZWwtMFwiPlxuICAgICAgICB7eyAnU2VsZWN0IGZyb20gYXZhaWxhYmxlIHBhY2thZ2VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9wPlxuICAgICAgPGRpdiAqbmdJZj1cIiFwYWNrYWdlcz8ubGVuZ3RoXCIgY2xhc3M9XCJjOHktZW1wdHktc3RhdGUgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPnt7ICdObyBwYWNrYWdlcyB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJwYWNrYWdlcz8ubGVuZ3RoXCIgY2xhc3M9XCJjOHktd2l6YXJkLWxpc3QtbmF2XCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAyNTdweFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHBhY2thZ2Ugb2YgcGFja2FnZXNcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQYWNrYWdlKHBhY2thZ2UpXCJcbiAgICAgICAgICB0aXRsZT1cInt7IHBhY2thZ2UubmFtZSB9fVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwiYmlnLXBhcmNlbFwiIGNsYXNzPVwibGlzdC1ncm91cC1pY29uXCI+PC9pPlxuICAgICAgICAgIDxzcGFuIFtpbm5lclRleHRdPVwicGFja2FnZS5uYW1lXCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0RlcGxveWVkICYmIHNlbGVjdGVkUGFja2FnZVwiPlxuICAgIDxwIGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlciB0ZXh0LW1lZGl1bSBzZXBhcmF0b3ItYm90dG9tIHN0aWNreS10b3AgYmctbGV2ZWwtMFwiPlxuICAgICAge3sgJ1Byb3ZpZGUgYXBwbGljYXRpb24gZGV0YWlscycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3A+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBkLWNvbCBhLWktY2VudGVyIGotYy1jZW50ZXJcIiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDI1N3B4XCI+XG4gICAgICA8Yzh5LWFwcGxpY2F0aW9uLXByb3BlcnRpZXMtZm9ybVxuICAgICAgICAqbmdJZj1cIiFpblByb2dyZXNzXCJcbiAgICAgICAgW2FwcGxpY2F0aW9uXT1cIm5ld0FwcENvbmZpZ1wiXG4gICAgICAgIGNsYXNzPVwiZC1ibG9jayBmaXQtd1wiXG4gICAgICA+PC9jOHktYXBwbGljYXRpb24tcHJvcGVydGllcy1mb3JtPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWluUHJvZ3Jlc3NcIj5cbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IHBhZGRpbmc6ICcwIDE2cHgnIH1cIiBjbGFzcz1cImQtYmxvY2sgZml0LXcgYmctZ3JheS13aGl0ZVwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJwYWNrYWdlVmVyc2lvblwiIHRyYW5zbGF0ZT5Vc2UgcGFja2FnZSB2ZXJzaW9uPC9sYWJlbD5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8Yzh5LXR5cGVhaGVhZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgbmFtZT1cInBhY2thZ2VWZXJzaW9uXCJcbiAgICAgICAgICAgICAgKG9uU2VhcmNoKT1cIm9uSW5wdXQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnU2VsZWN0IG9yIGVudGVyJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIFtkaXNwbGF5UHJvcGVydHldPVwiJ3ZlcnNpb24nXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaGlkZU5ld109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NvbnRhaW5lcl09XCInYm9keSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICAgICAgKmM4eUZvcj1cImxldCB2ZXJzaW9uIG9mIHZlcnNpb25zJDsgbG9hZE1vcmU6ICdhdXRvJzsgbm90Rm91bmQ6IG5vdEZvdW5kVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFwcFZlcnNpb25TZWxlY3QodmVyc2lvbilcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1sLTggcC1yLTggYzh5LWxpc3RfX2l0ZW0tLWxpbmtcIlxuICAgICAgICAgICAgICAgIFthY3RpdmVdPVwibW9kZWwuc2VsZWN0ZWQgPT09IHZlcnNpb25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGM4eS1saS1pY29uIGljb249XCJiaWctcGFyY2VsXCI+PC9jOHktbGktaWNvbj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICdmbGV4LWRpcmVjdGlvbic6ICdyb3cnLFxuICAgICAgICAgICAgICAgICAgICAnYWxpZ24tY29udGVudCc6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50JzogJ3NwYWNlLWJldHdlZW4nLFxuICAgICAgICAgICAgICAgICAgICAnYWxpZ24taXRlbXMnOiAnY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGM4eS1oaWdobGlnaHRcbiAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidmVyc2lvbi52ZXJzaW9uIHx8ICctLSdcIlxuICAgICAgICAgICAgICAgICAgICBbcGF0dGVybl09XCJvbklucHV0IHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgPjwvYzh5LWhpZ2hsaWdodD5cblxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCB0YWcgb2YgdmVyc2lvbi50YWdzXCIgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvIG0tbC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgdGFnIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEZvdW5kVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGM4eS1saVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiZy1ncmF5LWxpZ2h0ZXIgcC04XCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKG9uSW5wdXQgfCBhc3luYyk/Lmxlbmd0aCA+IDAgJiYgKHZlcnNpb25zJCB8IGFzeW5jKT8uZGF0YT8ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+Tm8gbWF0Y2ggZm91bmQuPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9jOHktdHlwZWFoZWFkPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxjOHktcHJvZ3Jlc3MtYmFyXG4gICAgICAgIFttZXNzYWdlXT1cIidJbnN0YWxsaW5n4oCmJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgZC1ibG9ja1wiXG4gICAgICAgICpuZ0lmPVwiaW5Qcm9ncmVzc1wiXG4gICAgICA+PC9jOHktcHJvZ3Jlc3MtYmFyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEZXBsb3llZFwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiZGVwbG95ZWRXaXRoU3VjY2VzczsgZWxzZSBmYWlsZWREZXBsb3lcIlxuICAgICAgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBqLWMtY2VudGVyXCJcbiAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMjU3cHhcIlxuICAgID5cbiAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICB0ZXh0PVwie3sgJ0FwcGxpY2F0aW9uIGNyZWF0ZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgID48L2M4eS1vcGVyYXRpb24tcmVzdWx0PlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjZmFpbGVkRGVwbG95PlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXJcIiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDI1N3B4XCI+XG4gICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgIHRleHQ9XCJ7eyAnQXBwbGljYXRpb24gY3JlYXRpb24gZmFpbGVkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgID48L2M4eS1vcGVyYXRpb24tcmVzdWx0PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG48L2M4eS13aXphcmQtYm9keT5cblxuPGM4eS13aXphcmQtZm9vdGVyPlxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCIhaXNEZXBsb3llZFwiXG4gICAgKGNsaWNrKT1cInNlbGVjdGVkUGFja2FnZSA/IGNsZWFuKCkgOiBiYWNrKClcIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICB0aXRsZT1cInt7ICdCYWNrJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHJhbnNsYXRlXG4gICAgW2Rpc2FibGVkXT1cImluUHJvZ3Jlc3NcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICA+XG4gICAgQmFja1xuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIHRpdGxlPVwie3sgaXNEZXBsb3llZCAmJiBkZXBsb3llZFdpdGhTdWNjZXNzID8gKCdDbG9zZScgfCB0cmFuc2xhdGUpIDogKCdDYW5jZWwnIHwgdHJhbnNsYXRlKSB9fVwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gID5cbiAgICB7eyBpc0RlcGxveWVkICYmIGRlcGxveWVkV2l0aFN1Y2Nlc3MgPyAoJ0Nsb3NlJyB8IHRyYW5zbGF0ZSkgOiAoJ0NhbmNlbCcgfCB0cmFuc2xhdGUpIH19XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdJbnN0YWxsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJkZXBsb3lBcHAoKVwiXG4gICAgW2Rpc2FibGVkXT1cImluUHJvZ3Jlc3MgfHwgIXBhY2thZ2VzPy5sZW5ndGhcIlxuICAgICpuZ0lmPVwiIWlzRGVwbG95ZWRcIlxuICA+XG4gICAge3sgJ0luc3RhbGwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktd2l6YXJkLWZvb3Rlcj5cbiJdfQ==
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC1mcm9tLXBhY2thZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9ucy9pbnN0YWxsLWZyb20tcGFja2FnZS9pbnN0YWxsLWZyb20tcGFja2FnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb25zL2luc3RhbGwtZnJvbS1wYWNrYWdlL2luc3RhbGwtZnJvbS1wYWNrYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsZ0JBQWdCLEVBRWpCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7QUFNMUYsTUFBTSxPQUFPLDJCQUEyQjtJQW9CdEMsWUFDVSxnQkFBa0MsRUFDbEMsa0JBQXNDLEVBQ3RDLGVBQWdDLEVBQ2hDLGNBQThCLEVBQzlCLGdCQUFrQztRQUpsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIs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QUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDOzt3SEEzTVUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsMkhBaUIzQixrQ0FBa0MsZ0RDbkMvQyxvdExBcUtBOzJGRG5KYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsMEJBQTBCO2tPQXFCcEMseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJUmVzdWx0TGlzdFxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBQbHVnaW5zU2VydmljZSwgV2l6YXJkQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm1Db21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktaW5zdGFsbC1mcm9tLXBhY2thZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5zdGFsbC1mcm9tLXBhY2thZ2UuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEluc3RhbGxGcm9tUGFja2FnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG5ld0FwcENvbmZpZzogSUFwcGxpY2F0aW9uO1xuICBzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbjtcbiAgcGFja2FnZXM6IElBcHBsaWNhdGlvbltdO1xuICBpblByb2dyZXNzOiBib29sZWFuO1xuICBkZXBsb3llZFdpdGhTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRGVwbG95ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBtb2RlbCA9IHtcbiAgICBzZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIGJpbmFyeToge1xuICAgICAgaWQ6IHVuZGVmaW5lZFxuICAgIH1cbiAgfTtcbiAgY2FuRGVwbG95OiBib29sZWFuID0gZmFsc2U7XG4gIG9uSW5wdXQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgdmVyc2lvbnMkOiBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElBcHBsaWNhdGlvblZlcnNpb24+PjtcbiAgQFZpZXdDaGlsZChBcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtQ29tcG9uZW50KVxuICBhcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtOiBBcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgd2l6YXJkQ29tcG9uZW50OiBXaXphcmRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZTogUGx1Z2luc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRQYWNrYWdlcygpO1xuICB9XG5cbiAgYmFjaygpIHtcbiAgICB0aGlzLndpemFyZENvbXBvbmVudC5yZXNldCgpO1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFBhY2thZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy52ZXJzaW9ucyQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tb2RlbCA9IHtcbiAgICAgIHNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgICBiaW5hcnk6IHtcbiAgICAgICAgaWQ6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy53aXphcmRDb21wb25lbnQuY2xvc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRlcGxveUFwcCgpIHtcbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIGNvbnN0IGZvcm1Hcm91cFZhbHVlID0gdGhpcy5hcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHAgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmNyZWF0ZUNvbmZpZyh0aGlzLnNlbGVjdGVkUGFja2FnZSwgZm9ybUdyb3VwVmFsdWUpO1xuICAgIGNvbmZpZy52ZXJzaW9uID0gdGhpcy5tb2RlbC5zZWxlY3RlZC52ZXJzaW9uO1xuICAgIGNvbmZpZy5pc1NldHVwID0gdHJ1ZTtcbiAgICBpZiAoIWNvbmZpZy5tYW5pZmVzdCkge1xuICAgICAgY29uZmlnLm1hbmlmZXN0ID0ge307XG4gICAgfVxuICAgIGNvbmZpZy5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjb25maWcubWFuaWZlc3Quc291cmNlID0gdGhpcy5zZWxlY3RlZFBhY2thZ2UuaWQ7XG4gICAgY29uZmlnLm1hbmlmZXN0LnBhY2thZ2UgPSAnYmx1ZXByaW50JztcbiAgICBjb25maWcucmVzb3VyY2VzVXJsID0gJy8nO1xuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHBcbiAgICBjb25zdCBuZXdBcHAgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKGNvbmZpZykpLmRhdGE7XG4gICAgLy8gQmluYXJ5XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBiaW5hcnkgZGV0YWlsc1xuICAgICAgY29uc3QgeyBkYXRhOiBiaW5hcnlEZXRhaWxzIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKFxuICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkLmJpbmFyeUlkXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgYmluYXJ5IGZyb20gc3BlY2lmaWMgcGFja2FnZSB2ZXJzaW9uXG4gICAgICBjb25zdCBiaW5hcnkgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QmluYXJ5KHRoaXMuc2VsZWN0ZWRQYWNrYWdlLCB7XG4gICAgICAgIGlkOiB0aGlzLm1vZGVsLnNlbGVjdGVkLmJpbmFyeUlkXG4gICAgICB9KTtcbiAgICAgIC8vIENyZWF0ZSB6aXBcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiBiaW5hcnlEZXRhaWxzLmNvbnRlbnRUeXBlIH0pO1xuICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtmaWxlQmluYXJ5XSwgYmluYXJ5RGV0YWlscy5uYW1lLCB7XG4gICAgICAgIHR5cGU6IGJpbmFyeURldGFpbHMuY29udGVudFR5cGVcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGxvYWQgYmluYXJ5IHRvIG5ldyBhcHBcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGxvYWRBcmNoaXZlVG9BcHAoZmlsZSwgbmV3QXBwKTtcbiAgICAgIC8vIFVwZGF0ZSBtYW5pZmVzdFxuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcE1hbmlmZXN0KG5ld0FwcCwgdGhpcy5zZWxlY3RlZFBhY2thZ2UpO1xuXG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3I/LnJlcz8uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKG5ld0FwcC5pZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZmFsbGJhY2tUb0Nsb25lTGF0ZXN0KGNvbmZpZyk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzRGVwbG95ZWQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmYWxsYmFja1RvQ2xvbmVMYXRlc3QoY29uZmlnKSB7XG4gICAgbGV0IGNsb25lZFBrZztcbiAgICB0cnkge1xuICAgICAgY2xvbmVkUGtnID0gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNsb25lKHRoaXMuc2VsZWN0ZWRQYWNrYWdlKSkuZGF0YTtcblxuICAgICAgLy8gY2xlYW4gb3V0IGFsbCBmYWxzZWx5IGNsb25lZCBhcHBsaWNhdGlvblZlcnNpb25zLCB3ZSBkb24ndCBuZWVkIHRoZW1cbiAgICAgIGZvciAoY29uc3QgYXBwVmVyc2lvbiBvZiBjbG9uZWRQa2cuYXBwbGljYXRpb25WZXJzaW9ucyBhcyBJQXBwbGljYXRpb25WZXJzaW9uW10pIHtcbiAgICAgICAgaWYgKGFwcFZlcnNpb24udGFncy5pbmNsdWRlcygnbGF0ZXN0JykpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoY2xvbmVkUGtnLCBhcHBWZXJzaW9uLnZlcnNpb24sIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZGVsZXRlUGFja2FnZVZlcnNpb24oY2xvbmVkUGtnLCB7XG4gICAgICAgICAgdmVyc2lvbjogYXBwVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNvbmZpZy50eXBlO1xuICAgICAgY29uZmlnLmlzUGFja2FnZSA9IGZhbHNlO1xuICAgICAgY29uc3QgeyBkYXRhOiBuZXdBcHAgfSA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGRhdGVBcHAoXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogY2xvbmVkUGtnLmlkLFxuICAgICAgICAgIGFjdGl2ZVZlcnNpb25JZDogY2xvbmVkUGtnLmFjdGl2ZVZlcnNpb25JZCxcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBkYXRlQXBwTWFuaWZlc3QobmV3QXBwLCB0aGlzLnNlbGVjdGVkUGFja2FnZSk7XG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZGVsZXRlQXBwKGNsb25lZFBrZy5pZCwgdHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubWFya0FzRGVwbG95ZWQoKTtcbiAgfVxuXG4gIG9uQXBwVmVyc2lvblNlbGVjdChhcHBWZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLCB7XG4gICAgICBzZWxlY3RlZDogYXBwVmVyc2lvblxuICAgIH0pO1xuICAgIHRoaXMuY2FuRGVwbG95ID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdFBhY2thZ2Uoc2VsZWN0ZWRQYWNrYWdlOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRBcHBsaWNhdGlvbnMoKSkuZGF0YTtcbiAgICB0aGlzLm5ld0FwcENvbmZpZyA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRVbmlxdWVBcHBDb25maWcoc2VsZWN0ZWRQYWNrYWdlLCBhcHBzKTtcbiAgICB0aGlzLnNlbGVjdGVkUGFja2FnZSA9IHNlbGVjdGVkUGFja2FnZTtcblxuICAgIHRoaXMubG9hZFNlbGVjdGVkUGFja2FnZVZlcnNpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRTZWxlY3RlZFBhY2thZ2VWZXJzaW9ucygpIHtcbiAgICB0aGlzLnZlcnNpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5nZXRBcHBWZXJzaW9ucyh0aGlzLnNlbGVjdFBhY2thZ2UpLFxuICAgICAgdGhpcy5vbklucHV0LmFzT2JzZXJ2YWJsZSgpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdExpc3QsIGZpbHRlclN0cl0pID0+IHtcbiAgICAgICAgdGhpcy5jYW5EZXBsb3kgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdmVyc2lvbnNGaWx0ZXJlZEJ5U3RyID0gdGhpcy5maWx0ZXJBcHBWZXJzaW9ucyhyZXN1bHRMaXN0LmRhdGEsIGZpbHRlclN0cik7XG4gICAgICAgIGNvbnN0IHNvcnRlZEFwcFZlcnNpb25zID0gdGhpcy5wbHVnaW5zU2VydmljZS5zb3J0VmVyc2lvbnMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGlzdDogdmVyc2lvbnNGaWx0ZXJlZEJ5U3RyLFxuICAgICAgICAgICAgcGF0aDogWyd2ZXJzaW9uJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgICdkZXNjJ1xuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlRm9ySW5wdXQoc29ydGVkQXBwVmVyc2lvbnMpO1xuICAgICAgICByZXR1cm4geyBkYXRhOiBzb3J0ZWRBcHBWZXJzaW9ucywgcmVzOiByZXN1bHRMaXN0LnJlcyB9O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBWZXJzaW9ucyhtbzogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgdmVyc2lvbnMgPSBtbz8uYXBwbGljYXRpb25WZXJzaW9ucztcbiAgICByZXR1cm4gdmVyc2lvbnMgJiYgdmVyc2lvbnMubGVuZ3RoID4gMFxuICAgICAgPyBvZih7IGRhdGE6IHZlcnNpb25zLCByZXM6IHVuZGVmaW5lZCB9KVxuICAgICAgOiBmcm9tKHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RWZXJzaW9ucyh0aGlzLnNlbGVjdGVkUGFja2FnZS5pZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWVGb3JJbnB1dCh2ZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLnNlbGVjdGVkICYmIHZlcnNpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhdGVzdCA9IHZlcnNpb25zLmZpbmQodiA9PiB2LnRhZ3MuaW5jbHVkZXMoJ2xhdGVzdCcpKTtcbiAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWQgPSBsYXRlc3QgfHwgdmVyc2lvbnNbMF07XG4gICAgICB0aGlzLmNhbkRlcGxveSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJBcHBWZXJzaW9ucyhcbiAgICBhcHBWZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdLFxuICAgIGZpbHRlclN0cjogc3RyaW5nXG4gICk6IElBcHBsaWNhdGlvblZlcnNpb25bXSB7XG4gICAgcmV0dXJuIGZpbHRlclN0ciA9PT0gJydcbiAgICAgID8gYXBwVmVyc2lvbnNcbiAgICAgIDogYXBwVmVyc2lvbnMuZmlsdGVyKGFwcFZlcnNpb24gPT4gYXBwVmVyc2lvbi52ZXJzaW9uLmluY2x1ZGVzKGZpbHRlclN0cikpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNEZXBsb3llZCgpIHtcbiAgICB0aGlzLmlzRGVwbG95ZWQgPSB0cnVlO1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUGFja2FnZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXBwbGljYXRpb25zID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldFBhY2thZ2VBcHBsaWNhdGlvbnMoKTtcbiAgICB0aGlzLnBhY2thZ2VzID0gYXBwbGljYXRpb25zLmZpbHRlcihhcHAgPT4gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzUGFja2FnZUJsdWVwcmludChhcHApKTtcbiAgfVxufVxuIiwiPGM4eS13aXphcmQtaGVhZGVyPlxuICA8aSBbYzh5SWNvbl09XCInYmlnLXBhcmNlbCdcIj48L2k+XG4gIDxoNCBpZD1cIm1vZGFsLXRpdGxlXCIgdHJhbnNsYXRlPkluc3RhbGwgZnJvbSBwYWNrYWdlPC9oND5cbjwvYzh5LXdpemFyZC1oZWFkZXI+XG48Yzh5LXdpemFyZC1ib2R5PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkUGFja2FnZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1pbm5lci1zY3JvbGxcIiBpZD1cIm1vZGFsLWJvZHlcIj5cbiAgICAgIDxwIGNsYXNzPVwicC0xNiB0ZXh0LW1lZGl1bSB0ZXh0LWNlbnRlciBzZXBhcmF0b3ItYm90dG9tIHN0aWNreS10b3AgYmctbGV2ZWwtMFwiPlxuICAgICAgICB7eyAnU2VsZWN0IGZyb20gYXZhaWxhYmxlIHBhY2thZ2VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9wPlxuXG4gICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICpuZ0lmPVwiIXBhY2thZ2VzPy5sZW5ndGhcIlxuICAgICAgICBbaWNvbl09XCInYmlnLXBhcmNlbCdcIlxuICAgICAgICBbdGl0bGVdPVwiJ05vIHBhY2thZ2VzIHRvIGRpc3BsYXkuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwicGFja2FnZXM/Lmxlbmd0aFwiIGNsYXNzPVwiYzh5LXdpemFyZC1saXN0LW5hdlwiIHN0eWxlPVwibWluLWhlaWdodDogMjU3cHhcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwYWNrYWdlIG9mIHBhY2thZ2VzXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGFja2FnZShwYWNrYWdlKVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBwYWNrYWdlLm5hbWUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cImJpZy1wYXJjZWxcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaWNvblwiPjwvaT5cbiAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT1cInBhY2thZ2UubmFtZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNEZXBsb3llZCAmJiBzZWxlY3RlZFBhY2thZ2VcIj5cbiAgICA8cCBjbGFzcz1cInAtMTYgdGV4dC1jZW50ZXIgdGV4dC1tZWRpdW0gc2VwYXJhdG9yLWJvdHRvbSBzdGlja3ktdG9wIGJnLWxldmVsLTBcIj5cbiAgICAgIHt7ICdQcm92aWRlIGFwcGxpY2F0aW9uIGRldGFpbHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1jb2wgYS1pLWNlbnRlciBqLWMtY2VudGVyXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAyNTdweFwiPlxuICAgICAgPGM4eS1hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzLWZvcm1cbiAgICAgICAgKm5nSWY9XCIhaW5Qcm9ncmVzc1wiXG4gICAgICAgIFthcHBsaWNhdGlvbl09XCJuZXdBcHBDb25maWdcIlxuICAgICAgICBjbGFzcz1cImQtYmxvY2sgZml0LXdcIlxuICAgICAgPjwvYzh5LWFwcGxpY2F0aW9uLXByb3BlcnRpZXMtZm9ybT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpblByb2dyZXNzXCI+XG4gICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBwYWRkaW5nOiAnMCAxNnB4JyB9XCIgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWdyYXktd2hpdGVcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwicGFja2FnZVZlcnNpb25cIiB0cmFuc2xhdGU+VXNlIHBhY2thZ2UgdmVyc2lvbjwvbGFiZWw+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGM4eS10eXBlYWhlYWRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgIG5hbWU9XCJwYWNrYWdlVmVyc2lvblwiXG4gICAgICAgICAgICAgIChvblNlYXJjaCk9XCJvbklucHV0Lm5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1NlbGVjdCBvciBlbnRlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBbZGlzcGxheVByb3BlcnR5XT1cIid2ZXJzaW9uJ1wiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2hpZGVOZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGM4eS1saVxuICAgICAgICAgICAgICAgICpjOHlGb3I9XCJsZXQgdmVyc2lvbiBvZiB2ZXJzaW9ucyQ7IGxvYWRNb3JlOiAnYXV0byc7IG5vdEZvdW5kOiBub3RGb3VuZFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BcHBWZXJzaW9uU2VsZWN0KHZlcnNpb24pXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtbC04IHAtci04IGM4eS1saXN0X19pdGVtLS1saW5rXCJcbiAgICAgICAgICAgICAgICBbYWN0aXZlXT1cIm1vZGVsLnNlbGVjdGVkID09PSB2ZXJzaW9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxjOHktbGktaWNvbiBpY29uPVwiYmlnLXBhcmNlbFwiPjwvYzh5LWxpLWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAnZmxleC1kaXJlY3Rpb24nOiAncm93JyxcbiAgICAgICAgICAgICAgICAgICAgJ2FsaWduLWNvbnRlbnQnOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudCc6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICAgICAgICAgICAgICAgICAgJ2FsaWduLWl0ZW1zJzogJ2NlbnRlcidcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxjOHktaGlnaGxpZ2h0XG4gICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInZlcnNpb24udmVyc2lvbiB8fCAnLS0nXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhdHRlcm5dPVwib25JbnB1dCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdGFnIG9mIHZlcnNpb24udGFnc1wiIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mbyBtLWwtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHRhZyB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RGb3VuZFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxjOHktbGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmctZ3JheS1saWdodGVyIHAtOFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIihvbklucHV0IHwgYXN5bmMpPy5sZW5ndGggPiAwICYmICh2ZXJzaW9ucyQgfCBhc3luYyk/LmRhdGE/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPk5vIG1hdGNoIGZvdW5kLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYzh5LXR5cGVhaGVhZD5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8Yzh5LXByb2dyZXNzLWJhclxuICAgICAgICBbbWVzc2FnZV09XCInSW5zdGFsbGluZ+KApicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIGQtYmxvY2tcIlxuICAgICAgICAqbmdJZj1cImluUHJvZ3Jlc3NcIlxuICAgICAgPjwvYzh5LXByb2dyZXNzLWJhcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVwbG95ZWRcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImRlcGxveWVkV2l0aFN1Y2Nlc3M7IGVsc2UgZmFpbGVkRGVwbG95XCJcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgai1jLWNlbnRlclwiXG4gICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDI1N3B4XCJcbiAgICA+XG4gICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgdGV4dD1cInt7ICdBcHBsaWNhdGlvbiBjcmVhdGVkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICB0eXBlPVwic3VjY2Vzc1wiXG4gICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI2ZhaWxlZERlcGxveT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBqLWMtY2VudGVyXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAyNTdweFwiPlxuICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICB0ZXh0PVwie3sgJ0FwcGxpY2F0aW9uIGNyZWF0aW9uIGZhaWxlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgdHlwZT1cImVycm9yXCJcbiAgICAgICAgICBjbGFzcz1cImxlYWRcIlxuICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9jOHktd2l6YXJkLWJvZHk+XG5cbjxjOHktd2l6YXJkLWZvb3Rlcj5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwiIWlzRGVwbG95ZWRcIlxuICAgIChjbGljayk9XCJzZWxlY3RlZFBhY2thZ2UgPyBjbGVhbigpIDogYmFjaygpXCJcbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgdGl0bGU9XCJ7eyAnQmFjaycgfCB0cmFuc2xhdGUgfX1cIlxuICAgIFtkaXNhYmxlZF09XCJpblByb2dyZXNzXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgPlxuICAgIHt7ICdCYWNrJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIHRpdGxlPVwie3sgaXNEZXBsb3llZCAmJiBkZXBsb3llZFdpdGhTdWNjZXNzID8gKCdDbG9zZScgfCB0cmFuc2xhdGUpIDogKCdDYW5jZWwnIHwgdHJhbnNsYXRlKSB9fVwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gID5cbiAgICB7eyBpc0RlcGxveWVkICYmIGRlcGxveWVkV2l0aFN1Y2Nlc3MgPyAoJ0Nsb3NlJyB8IHRyYW5zbGF0ZSkgOiAoJ0NhbmNlbCcgfCB0cmFuc2xhdGUpIH19XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdJbnN0YWxsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJkZXBsb3lBcHAoKVwiXG4gICAgW2Rpc2FibGVkXT1cImluUHJvZ3Jlc3MgfHwgIXBhY2thZ2VzPy5sZW5ndGhcIlxuICAgICpuZ0lmPVwiIWlzRGVwbG95ZWRcIlxuICA+XG4gICAge3sgJ0luc3RhbGwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktd2l6YXJkLWZvb3Rlcj5cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { Component } from '@angular/core';
2
- import { Permissions, WizardModalService } from '@c8y/ngx-components';
2
+ import { Permissions, WizardModalService, gettext } from '@c8y/ngx-components';
3
3
  import { BehaviorSubject, Subject } from 'rxjs';
4
4
  import { shareReplay, switchMap, takeUntil, tap } from 'rxjs/operators';
5
5
  import { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
@@ -15,6 +15,7 @@ export class PackagesListComponent {
15
15
  this.reloading = false;
16
16
  this.reload$ = new BehaviorSubject(null);
17
17
  this.hasAdminPermissions = false;
18
+ this.emptyStateSubtitle = gettext('Add your first package by clicking below.');
18
19
  this.destroy$ = new Subject();
19
20
  this.packages$ = this.reload$.pipe(takeUntil(this.destroy$), tap(() => (this.reloading = true)), switchMap(() => this.ecosystemService.getPackageApplications()), tap(() => (this.reloading = false)), shareReplay(1));
20
21
  }
@@ -41,9 +42,9 @@ export class PackagesListComponent {
41
42
  }
42
43
  }
43
44
  PackagesListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PackagesListComponent, deps: [{ token: i1.EcosystemService }, { token: i2.WizardModalService }, { token: i2.Permissions }], target: i0.ɵɵFactoryTarget.Component });
44
- PackagesListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: PackagesListComponent, selector: "c8y-packages-list", ngImport: i0, template: "<c8y-title>{{ 'Packages' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/applications'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'big-parcel'\" [label]=\"'Packages' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"hasAdminPermissions\">\n <button (click)=\"addPackage()\" class=\"btn btn-link\" title=\"{{ 'Add package' | translate }}\">\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add package' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button (click)=\"loadPackages()\" class=\"btn btn-link\" title=\"{{ 'Reload' | translate }}\">\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'left'\" itemClass=\"navbar-form hidden-xs\">\n <c8y-list-display-switch\n (onListClassChange)=\"listClass = $event\"\n [listLength]=\"(packages$ | async)?.length\"\n ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<div [ngClass]=\"listClass\" class=\"card-group\">\n <div class=\"page-sticky-header hidden-xs d-flex\" *ngIf=\"(packages$ | async)?.length > 0\">\n <div class=\"card-block card-column-40\">\n <div class=\"card-appicon p-l-32 p-r-16 m-r-0 m-l-4\"></div>\n {{ 'Package' | translate }}\n </div>\n <div class=\"card-block p-0 card-column-80\">\n <div class=\"card-block card-column-80\">{{ 'Description' | translate }}</div>\n <div class=\"card-block card-column-20\">{{ 'Type' | translate }}</div>\n <div class=\"card-block card-column-20\"></div>\n </div>\n </div>\n <div *ngFor=\"let app of packages$ | async\" class=\"col-xs-12 col-sm-4 col-md-3\">\n <c8y-application-card\n (onAppDeleted)=\"loadPackages()\"\n (onAppCloned)=\"loadPackages()\"\n [app]=\"app\"\n class=\"d-contents\"\n ></c8y-application-card>\n </div>\n <div *ngIf=\"(packages$ | async)?.length === 0\" class=\"c8y-empty-state text-center\">\n <h1 c8yIcon=\"big-parcel\" class=\"c8y-icon-duocolor\"></h1>\n <h3 translate>No packages to display.</h3>\n <p *ngIf=\"hasAdminPermissions\" translate>Add your first package by clicking below.</p>\n <p *ngIf=\"hasAdminPermissions\">\n <button\n (click)=\"addPackage()\"\n class=\"btn btn-primary\"\n title=\"{{ 'Add package' | translate }}\"\n >\n {{ 'Add package' | translate }}\n </button>\n </p>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i2.ListDisplaySwitchComponent, selector: "c8y-list-display-switch", inputs: ["listKey", "listLength", "filterPipe"], outputs: ["onListClassChange"] }, { kind: "component", type: i1.ApplicationCardComponent, selector: "c8y-application-card", inputs: ["app", "canEdit"], outputs: ["onAppDeleted", "onAppCloned"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
45
+ PackagesListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: PackagesListComponent, selector: "c8y-packages-list", ngImport: i0, template: "<c8y-title>{{ 'Packages' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/applications'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'big-parcel'\" [label]=\"'Packages' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"hasAdminPermissions\">\n <button\n type=\"button\"\n (click)=\"addPackage()\"\n class=\"btn btn-link\"\n title=\"{{ 'Add package' | translate }}\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add package' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n type=\"button\"\n (click)=\"loadPackages()\"\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n >\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'left'\" itemClass=\"navbar-form hidden-xs\">\n <c8y-list-display-switch\n (onListClassChange)=\"listClass = $event\"\n [listLength]=\"(packages$ | async)?.length\"\n ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<div [ngClass]=\"listClass\" class=\"card-group\">\n <div class=\"page-sticky-header hidden-xs d-flex\" *ngIf=\"(packages$ | async)?.length > 0\">\n <div class=\"card-block card-column-40\">\n <div class=\"card-appicon p-l-32 p-r-16 m-r-0 m-l-4\"></div>\n {{ 'Package' | translate }}\n </div>\n <div class=\"card-block p-0 card-column-80 m-r-40\">\n <div class=\"card-block card-column-80\">{{ 'Description' | translate }}</div>\n <div class=\"card-block card-column-20\">{{ 'Type' | translate }}</div>\n <div class=\"card-block card-column-20\"></div>\n </div>\n </div>\n <div *ngFor=\"let app of packages$ | async\" class=\"col-xs-12 col-sm-4 col-md-3\">\n <c8y-application-card\n (onAppDeleted)=\"loadPackages()\"\n (onAppCloned)=\"loadPackages()\"\n [app]=\"app\"\n class=\"d-contents\"\n ></c8y-application-card>\n </div>\n</div>\n\n<c8y-ui-empty-state\n *ngIf=\"(packages$ | async)?.length === 0\"\n [icon]=\"'big-parcel'\"\n [title]=\"'No packages to display.' | translate\"\n [subtitle]=\"hasAdminPermissions ? (emptyStateSubtitle | translate) : ''\"\n>\n <div *ngIf=\"hasAdminPermissions\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n title=\"{{ 'Add package' | translate }}\"\n (click)=\"addPackage()\"\n >\n {{ 'Add package' | translate }}\n </button>\n </div>\n</c8y-ui-empty-state>\n", dependencies: [{ kind: "component", type: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i2.ListDisplaySwitchComponent, selector: "c8y-list-display-switch", inputs: ["listKey", "listLength", "filterPipe"], outputs: ["onListClassChange"] }, { kind: "component", type: i1.ApplicationCardComponent, selector: "c8y-application-card", inputs: ["app", "canEdit"], outputs: ["onAppDeleted", "onAppCloned"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
45
46
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PackagesListComponent, decorators: [{
46
47
  type: Component,
47
- args: [{ selector: 'c8y-packages-list', template: "<c8y-title>{{ 'Packages' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/applications'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'big-parcel'\" [label]=\"'Packages' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"hasAdminPermissions\">\n <button (click)=\"addPackage()\" class=\"btn btn-link\" title=\"{{ 'Add package' | translate }}\">\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add package' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button (click)=\"loadPackages()\" class=\"btn btn-link\" title=\"{{ 'Reload' | translate }}\">\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'left'\" itemClass=\"navbar-form hidden-xs\">\n <c8y-list-display-switch\n (onListClassChange)=\"listClass = $event\"\n [listLength]=\"(packages$ | async)?.length\"\n ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<div [ngClass]=\"listClass\" class=\"card-group\">\n <div class=\"page-sticky-header hidden-xs d-flex\" *ngIf=\"(packages$ | async)?.length > 0\">\n <div class=\"card-block card-column-40\">\n <div class=\"card-appicon p-l-32 p-r-16 m-r-0 m-l-4\"></div>\n {{ 'Package' | translate }}\n </div>\n <div class=\"card-block p-0 card-column-80\">\n <div class=\"card-block card-column-80\">{{ 'Description' | translate }}</div>\n <div class=\"card-block card-column-20\">{{ 'Type' | translate }}</div>\n <div class=\"card-block card-column-20\"></div>\n </div>\n </div>\n <div *ngFor=\"let app of packages$ | async\" class=\"col-xs-12 col-sm-4 col-md-3\">\n <c8y-application-card\n (onAppDeleted)=\"loadPackages()\"\n (onAppCloned)=\"loadPackages()\"\n [app]=\"app\"\n class=\"d-contents\"\n ></c8y-application-card>\n </div>\n <div *ngIf=\"(packages$ | async)?.length === 0\" class=\"c8y-empty-state text-center\">\n <h1 c8yIcon=\"big-parcel\" class=\"c8y-icon-duocolor\"></h1>\n <h3 translate>No packages to display.</h3>\n <p *ngIf=\"hasAdminPermissions\" translate>Add your first package by clicking below.</p>\n <p *ngIf=\"hasAdminPermissions\">\n <button\n (click)=\"addPackage()\"\n class=\"btn btn-primary\"\n title=\"{{ 'Add package' | translate }}\"\n >\n {{ 'Add package' | translate }}\n </button>\n </p>\n </div>\n</div>\n" }]
48
+ args: [{ selector: 'c8y-packages-list', template: "<c8y-title>{{ 'Packages' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/applications'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [icon]=\"'big-parcel'\" [label]=\"'Packages' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\" *ngIf=\"hasAdminPermissions\">\n <button\n type=\"button\"\n (click)=\"addPackage()\"\n class=\"btn btn-link\"\n title=\"{{ 'Add package' | translate }}\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add package' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n type=\"button\"\n (click)=\"loadPackages()\"\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n >\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'left'\" itemClass=\"navbar-form hidden-xs\">\n <c8y-list-display-switch\n (onListClassChange)=\"listClass = $event\"\n [listLength]=\"(packages$ | async)?.length\"\n ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<div [ngClass]=\"listClass\" class=\"card-group\">\n <div class=\"page-sticky-header hidden-xs d-flex\" *ngIf=\"(packages$ | async)?.length > 0\">\n <div class=\"card-block card-column-40\">\n <div class=\"card-appicon p-l-32 p-r-16 m-r-0 m-l-4\"></div>\n {{ 'Package' | translate }}\n </div>\n <div class=\"card-block p-0 card-column-80 m-r-40\">\n <div class=\"card-block card-column-80\">{{ 'Description' | translate }}</div>\n <div class=\"card-block card-column-20\">{{ 'Type' | translate }}</div>\n <div class=\"card-block card-column-20\"></div>\n </div>\n </div>\n <div *ngFor=\"let app of packages$ | async\" class=\"col-xs-12 col-sm-4 col-md-3\">\n <c8y-application-card\n (onAppDeleted)=\"loadPackages()\"\n (onAppCloned)=\"loadPackages()\"\n [app]=\"app\"\n class=\"d-contents\"\n ></c8y-application-card>\n </div>\n</div>\n\n<c8y-ui-empty-state\n *ngIf=\"(packages$ | async)?.length === 0\"\n [icon]=\"'big-parcel'\"\n [title]=\"'No packages to display.' | translate\"\n [subtitle]=\"hasAdminPermissions ? (emptyStateSubtitle | translate) : ''\"\n>\n <div *ngIf=\"hasAdminPermissions\">\n <button\n type=\"button\"\n class=\"btn btn-primary\"\n title=\"{{ 'Add package' | translate }}\"\n (click)=\"addPackage()\"\n >\n {{ 'Add package' | translate }}\n </button>\n </div>\n</c8y-ui-empty-state>\n" }]
48
49
  }], ctorParameters: function () { return [{ type: i1.EcosystemService }, { type: i2.WizardModalService }, { type: i2.Permissions }]; } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vcGFja2FnZXMvcGFja2FnZS1saXN0L3BhY2thZ2VzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3BhY2thZ2VzL3BhY2thZ2UtbGlzdC9wYWNrYWdlcy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7QUFNeEUsTUFBTSxPQUFPLHFCQUFxQjtJQVNoQyxZQUNVLGdCQUFrQyxFQUNsQyxrQkFBc0MsRUFDdEMsV0FBd0I7UUFGeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBWGxDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsWUFBTyxHQUEwQixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUkzRCx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDcEIsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBTzFELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFDbEMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEVBQy9ELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFDbkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVU7UUFDUixNQUFNLFlBQVksR0FBUTtZQUN4QixFQUFFLEVBQUUsZUFBZTtTQUNwQixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQWlCLEVBQUUsWUFBWSxFQUFFLENBQUM7UUFFcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOztrSEEvQ1UscUJBQXFCO3NHQUFyQixxQkFBcUIseURDWmxDLHl0RkFvRUE7MkZEeERhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUFwcGxpY2F0aW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnMsIFdpemFyZE1vZGFsU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWNvc3lzdGVtU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1wYWNrYWdlcy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhY2thZ2VzLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBhY2thZ2VzTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHJlbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICByZWxvYWQkOiBCZWhhdmlvclN1YmplY3Q8dm9pZD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXG4gIHBhY2thZ2VzJDogT2JzZXJ2YWJsZTxJQXBwbGljYXRpb24+O1xuICBsaXN0Q2xhc3M6IHN0cmluZztcbiAgaGFzQWRtaW5QZXJtaXNzaW9ucyA9IGZhbHNlO1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aXphcmRNb2RhbFNlcnZpY2U6IFdpemFyZE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uc1xuICApIHtcbiAgICB0aGlzLnBhY2thZ2VzJCA9IHRoaXMucmVsb2FkJC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgdGFwKCgpID0+ICh0aGlzLnJlbG9hZGluZyA9IHRydWUpKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0UGFja2FnZUFwcGxpY2F0aW9ucygpKSxcbiAgICAgIHRhcCgoKSA9PiAodGhpcy5yZWxvYWRpbmcgPSBmYWxzZSkpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5oYXNBZG1pblBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5oYXNSb2xlKCdST0xFX0FQUExJQ0FUSU9OX01BTkFHRU1FTlRfQURNSU4nKTtcbiAgICB0aGlzLmxvYWRQYWNrYWdlcygpO1xuICB9XG5cbiAgbG9hZFBhY2thZ2VzKCkge1xuICAgIHRoaXMucmVsb2FkJC5uZXh0KCk7XG4gIH1cblxuICBhZGRQYWNrYWdlKCkge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogYW55ID0ge1xuICAgICAgaWQ6ICd1cGxvYWRQYWNrYWdlJ1xuICAgIH07XG4gICAgY29uc3QgbW9kYWxPcHRpb25zOiBNb2RhbE9wdGlvbnMgPSB7IGluaXRpYWxTdGF0ZSB9O1xuXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLndpemFyZE1vZGFsU2VydmljZS5zaG93KG1vZGFsT3B0aW9ucyk7XG4gICAgbW9kYWxSZWYuY29udGVudC5vbkNsb3NlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRQYWNrYWdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyAnUGFja2FnZXMnIHwgdHJhbnNsYXRlIH19PC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2ljb25dPVwiJ2M4eS1hdG9tJ1wiIFtsYWJlbF09XCInRWNvc3lzdGVtJyB8IHRyYW5zbGF0ZVwiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LW1vZHVsZXMnXCJcbiAgICBbbGFiZWxdPVwiJ0FwcGxpY2F0aW9ucycgfCB0cmFuc2xhdGVcIlxuICAgIFtwYXRoXT1cIidlY29zeXN0ZW0vYXBwbGljYXRpb25zJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtpY29uXT1cIidiaWctcGFyY2VsJ1wiIFtsYWJlbF09XCInUGFja2FnZXMnIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCIgKm5nSWY9XCJoYXNBZG1pblBlcm1pc3Npb25zXCI+XG4gIDxidXR0b24gKGNsaWNrKT1cImFkZFBhY2thZ2UoKVwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgdGl0bGU9XCJ7eyAnQWRkIHBhY2thZ2UnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgIHt7ICdBZGQgcGFja2FnZScgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uIChjbGljayk9XCJsb2FkUGFja2FnZXMoKVwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCIgdGl0bGU9XCJ7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgIDxpIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IHJlbG9hZGluZyB9XCIgYzh5SWNvbj1cInJlZnJlc2hcIj48L2k+XG4gICAge3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCIgaXRlbUNsYXNzPVwibmF2YmFyLWZvcm0gaGlkZGVuLXhzXCI+XG4gIDxjOHktbGlzdC1kaXNwbGF5LXN3aXRjaFxuICAgIChvbkxpc3RDbGFzc0NoYW5nZSk9XCJsaXN0Q2xhc3MgPSAkZXZlbnRcIlxuICAgIFtsaXN0TGVuZ3RoXT1cIihwYWNrYWdlcyQgfCBhc3luYyk/Lmxlbmd0aFwiXG4gID48L2M4eS1saXN0LWRpc3BsYXktc3dpdGNoPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IFtuZ0NsYXNzXT1cImxpc3RDbGFzc1wiIGNsYXNzPVwiY2FyZC1ncm91cFwiPlxuICA8ZGl2IGNsYXNzPVwicGFnZS1zdGlja3ktaGVhZGVyIGhpZGRlbi14cyBkLWZsZXhcIiAqbmdJZj1cIihwYWNrYWdlcyQgfCBhc3luYyk/Lmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBjYXJkLWNvbHVtbi00MFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYXBwaWNvbiBwLWwtMzIgcC1yLTE2IG0tci0wIG0tbC00XCI+PC9kaXY+XG4gICAgICB7eyAnUGFja2FnZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBwLTAgY2FyZC1jb2x1bW4tODBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGNhcmQtY29sdW1uLTgwXCI+e3sgJ0Rlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgY2FyZC1jb2x1bW4tMjBcIj57eyAnVHlwZScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGNhcmQtY29sdW1uLTIwXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBhcHAgb2YgcGFja2FnZXMkIHwgYXN5bmNcIiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNCBjb2wtbWQtM1wiPlxuICAgIDxjOHktYXBwbGljYXRpb24tY2FyZFxuICAgICAgKG9uQXBwRGVsZXRlZCk9XCJsb2FkUGFja2FnZXMoKVwiXG4gICAgICAob25BcHBDbG9uZWQpPVwibG9hZFBhY2thZ2VzKClcIlxuICAgICAgW2FwcF09XCJhcHBcIlxuICAgICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICA+PC9jOHktYXBwbGljYXRpb24tY2FyZD5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIocGFja2FnZXMkIHwgYXN5bmMpPy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSB0ZXh0LWNlbnRlclwiPlxuICAgIDxoMSBjOHlJY29uPVwiYmlnLXBhcmNlbFwiIGNsYXNzPVwiYzh5LWljb24tZHVvY29sb3JcIj48L2gxPlxuICAgIDxoMyB0cmFuc2xhdGU+Tm8gcGFja2FnZXMgdG8gZGlzcGxheS48L2gzPlxuICAgIDxwICpuZ0lmPVwiaGFzQWRtaW5QZXJtaXNzaW9uc1wiIHRyYW5zbGF0ZT5BZGQgeW91ciBmaXJzdCBwYWNrYWdlIGJ5IGNsaWNraW5nIGJlbG93LjwvcD5cbiAgICA8cCAqbmdJZj1cImhhc0FkbWluUGVybWlzc2lvbnNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cImFkZFBhY2thZ2UoKVwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQWRkIHBhY2thZ2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgID5cbiAgICAgICAge3sgJ0FkZCBwYWNrYWdlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9wPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vcGFja2FnZXMvcGFja2FnZS1saXN0L3BhY2thZ2VzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3BhY2thZ2VzL3BhY2thZ2UtbGlzdC9wYWNrYWdlcy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7O0FBTXhFLE1BQU0sT0FBTyxxQkFBcUI7SUFVaEMsWUFDVSxnQkFBa0MsRUFDbEMsa0JBQXNDLEVBQ3RDLFdBQXdCO1FBRnhCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVpsQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLFlBQU8sR0FBMEIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFJM0Qsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQ2xFLGFBQVEsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQU8xRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNoQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQ2xDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxFQUMvRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQ25DLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxZQUFZLEdBQVE7WUFDeEIsRUFBRSxFQUFFLGVBQWU7U0FDcEIsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFpQixFQUFFLFlBQVksRUFBRSxDQUFDO1FBRXBELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN0QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7a0hBaERVLHFCQUFxQjtzR0FBckIscUJBQXFCLHlEQ1psQyxrd0ZBa0ZBOzJGRHRFYSxxQkFBcUI7a0JBSmpDLFNBQVM7K0JBQ0UsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElBcHBsaWNhdGlvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IFBlcm1pc3Npb25zLCBXaXphcmRNb2RhbFNlcnZpY2UsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVjb3N5c3RlbVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcGFja2FnZXMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWNrYWdlcy1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQYWNrYWdlc0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICByZWxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVsb2FkJDogQmVoYXZpb3JTdWJqZWN0PHZvaWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblxuICBwYWNrYWdlcyQ6IE9ic2VydmFibGU8SUFwcGxpY2F0aW9uPjtcbiAgbGlzdENsYXNzOiBzdHJpbmc7XG4gIGhhc0FkbWluUGVybWlzc2lvbnMgPSBmYWxzZTtcbiAgZW1wdHlTdGF0ZVN1YnRpdGxlID0gZ2V0dGV4dCgnQWRkIHlvdXIgZmlyc3QgcGFja2FnZSBieSBjbGlja2luZyBiZWxvdy4nKTtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgd2l6YXJkTW9kYWxTZXJ2aWNlOiBXaXphcmRNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnNcbiAgKSB7XG4gICAgdGhpcy5wYWNrYWdlcyQgPSB0aGlzLnJlbG9hZCQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIHRhcCgoKSA9PiAodGhpcy5yZWxvYWRpbmcgPSB0cnVlKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldFBhY2thZ2VBcHBsaWNhdGlvbnMoKSksXG4gICAgICB0YXAoKCkgPT4gKHRoaXMucmVsb2FkaW5nID0gZmFsc2UpKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaGFzQWRtaW5QZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuaGFzUm9sZSgnUk9MRV9BUFBMSUNBVElPTl9NQU5BR0VNRU5UX0FETUlOJyk7XG4gICAgdGhpcy5sb2FkUGFja2FnZXMoKTtcbiAgfVxuXG4gIGxvYWRQYWNrYWdlcygpIHtcbiAgICB0aGlzLnJlbG9hZCQubmV4dCgpO1xuICB9XG5cbiAgYWRkUGFja2FnZSgpIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IGFueSA9IHtcbiAgICAgIGlkOiAndXBsb2FkUGFja2FnZSdcbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsT3B0aW9uczogTW9kYWxPcHRpb25zID0geyBpbml0aWFsU3RhdGUgfTtcblxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy53aXphcmRNb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbE9wdGlvbnMpO1xuICAgIG1vZGFsUmVmLmNvbnRlbnQub25DbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkUGFja2FnZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGU+e3sgJ1BhY2thZ2VzJyB8IHRyYW5zbGF0ZSB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtpY29uXT1cIidjOHktYXRvbSdcIiBbbGFiZWxdPVwiJ0Vjb3N5c3RlbScgfCB0cmFuc2xhdGVcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2M4eS1tb2R1bGVzJ1wiXG4gICAgW2xhYmVsXT1cIidBcHBsaWNhdGlvbnMnIHwgdHJhbnNsYXRlXCJcbiAgICBbcGF0aF09XCInZWNvc3lzdGVtL2FwcGxpY2F0aW9ucydcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbaWNvbl09XCInYmlnLXBhcmNlbCdcIiBbbGFiZWxdPVwiJ1BhY2thZ2VzJyB8IHRyYW5zbGF0ZVwiPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiICpuZ0lmPVwiaGFzQWRtaW5QZXJtaXNzaW9uc1wiPlxuICA8YnV0dG9uXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImFkZFBhY2thZ2UoKVwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ0FkZCBwYWNrYWdlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0FkZCBwYWNrYWdlJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwibG9hZFBhY2thZ2VzKClcIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgPlxuICAgIDxpIFtuZ0NsYXNzXT1cInsgJ2ljb24tc3Bpbic6IHJlbG9hZGluZyB9XCIgYzh5SWNvbj1cInJlZnJlc2hcIj48L2k+XG4gICAge3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCIgaXRlbUNsYXNzPVwibmF2YmFyLWZvcm0gaGlkZGVuLXhzXCI+XG4gIDxjOHktbGlzdC1kaXNwbGF5LXN3aXRjaFxuICAgIChvbkxpc3RDbGFzc0NoYW5nZSk9XCJsaXN0Q2xhc3MgPSAkZXZlbnRcIlxuICAgIFtsaXN0TGVuZ3RoXT1cIihwYWNrYWdlcyQgfCBhc3luYyk/Lmxlbmd0aFwiXG4gID48L2M4eS1saXN0LWRpc3BsYXktc3dpdGNoPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IFtuZ0NsYXNzXT1cImxpc3RDbGFzc1wiIGNsYXNzPVwiY2FyZC1ncm91cFwiPlxuICA8ZGl2IGNsYXNzPVwicGFnZS1zdGlja3ktaGVhZGVyIGhpZGRlbi14cyBkLWZsZXhcIiAqbmdJZj1cIihwYWNrYWdlcyQgfCBhc3luYyk/Lmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBjYXJkLWNvbHVtbi00MFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYXBwaWNvbiBwLWwtMzIgcC1yLTE2IG0tci0wIG0tbC00XCI+PC9kaXY+XG4gICAgICB7eyAnUGFja2FnZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBwLTAgY2FyZC1jb2x1bW4tODAgbS1yLTQwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBjYXJkLWNvbHVtbi04MFwiPnt7ICdEZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGNhcmQtY29sdW1uLTIwXCI+e3sgJ1R5cGUnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBjYXJkLWNvbHVtbi0yMFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgYXBwIG9mIHBhY2thZ2VzJCB8IGFzeW5jXCIgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTQgY29sLW1kLTNcIj5cbiAgICA8Yzh5LWFwcGxpY2F0aW9uLWNhcmRcbiAgICAgIChvbkFwcERlbGV0ZWQpPVwibG9hZFBhY2thZ2VzKClcIlxuICAgICAgKG9uQXBwQ2xvbmVkKT1cImxvYWRQYWNrYWdlcygpXCJcbiAgICAgIFthcHBdPVwiYXBwXCJcbiAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgPjwvYzh5LWFwcGxpY2F0aW9uLWNhcmQ+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxjOHktdWktZW1wdHktc3RhdGVcbiAgKm5nSWY9XCIocGFja2FnZXMkIHwgYXN5bmMpPy5sZW5ndGggPT09IDBcIlxuICBbaWNvbl09XCInYmlnLXBhcmNlbCdcIlxuICBbdGl0bGVdPVwiJ05vIHBhY2thZ2VzIHRvIGRpc3BsYXkuJyB8IHRyYW5zbGF0ZVwiXG4gIFtzdWJ0aXRsZV09XCJoYXNBZG1pblBlcm1pc3Npb25zID8gKGVtcHR5U3RhdGVTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4+XG4gIDxkaXYgKm5nSWY9XCJoYXNBZG1pblBlcm1pc3Npb25zXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICB0aXRsZT1cInt7ICdBZGQgcGFja2FnZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKGNsaWNrKT1cImFkZFBhY2thZ2UoKVwiXG4gICAgPlxuICAgICAge3sgJ0FkZCBwYWNrYWdlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuIl19