fabrikantencore 2.1.0 → 2.1.1

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.
@@ -139,11 +139,11 @@ export class BeheerProductsEigenschapComponent {
139
139
  }
140
140
  }
141
141
  BeheerProductsEigenschapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: BeheerProductsEigenschapComponent, deps: [{ token: i1.ImportSetsService }, { token: i2.ProductsService }, { token: i3.MatDialog }, { token: i4.ProductsApiClient }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
142
- BeheerProductsEigenschapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: BeheerProductsEigenschapComponent, selector: "app-beheer-products-eigenschap", inputs: { eigenschap: "eigenschap" }, ngImport: i0, template: "<div class=\"container\" [ngClass]=\"{'warning': !eigenschap.connected, 'normal': eigenschap.connected}\">\r\n <div class=\"row\" (click)=\"Toggle()\">\r\n <div class=\"icon-td\">\r\n <mat-icon *ngIf=\"!eigenschap.open && Show()\">expand_more</mat-icon>\r\n <mat-icon *ngIf=\"eigenschap.open && Show()\">expand_less</mat-icon>\r\n </div>\r\n <div class=\"eigenschapcel\" colspan=\"2\">\r\n {{eigenschap?.name}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"eigenschap.open\">\r\n <div *ngFor=\"let bereik of eigenschap.bereiken\" class=\"bereik\">\r\n <app-beheer-products-eigenschap-bereik [bereik]=\"bereik\"></app-beheer-products-eigenschap-bereik>\r\n </div>\r\n <div *ngIf=\"eigenschap.bereiken.length > 0 && eigenschap.rangeInputs != null\">\r\n <div *ngIf=\"eigenschap.rangeInputs.length == 0\">\r\n <button mat-raised-button (click)=\"ConnectRange()\">\r\n Range\r\n </button>\r\n </div>\r\n <div *ngFor=\"let range of eigenschap.rangeInputs\">\r\n {{ range.rangeInputModel.name }}\r\n\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngFor=\"let optie of eigenschap.opties\" [ngClass]=\"{'warning': !optie.connected}\">\r\n <div class=\"text-div\">{{ optie.name }}</div>\r\n <div>\r\n <div *ngIf=\"!optie.connected\" class=\"button-row\">\r\n <!--<button mat-raised-button (click)=\"Connect(optie.id, eigenschap.name, optie.name)\">\r\n FilterOption\r\n </button>-->\r\n <button mat-raised-button (click)=\"ConnectMany(optie.id)\">\r\n FilterOptionMany\r\n </button>\r\n <!--<button mat-raised-button (click)=\"ConnectCategory()\">\r\n Category\r\n </button>-->\r\n <button mat-raised-button (click)=\"Ignore(optie.id)\">\r\n Ignore\r\n </button>\r\n </div>\r\n <div *ngFor=\"let connect of optie.bcbEigenschapOptieFilterOptionViewModels\">\r\n <b>{{ connect.filterOptionViewModel.filterName }}: {{ connect.filterOptionViewModel.name }}</b>&nbsp;\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n <div *ngFor=\"let connect of optie.bcbEigenschapOptieCategoryViewModels\">\r\n <b>{{ connect.categoryViewModel.name }}</b>&nbsp;\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n <div *ngIf=\"optie.ignore\">\r\n <b>Ignore</b>&nbsp;\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".row{cursor:pointer;display:flex}.displayflex{display:flex}.eigenschapcel{flex:auto}.button-row{display:flex;gap:4px}.container{margin:5px;padding:5px;border:1px solid #000}.icon-td{width:24px;height:24px}.text-div{flex:auto}.warning{background-color:#f08080}.normal{background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.BeheerProductsEigenschapBereikComponent, selector: "app-beheer-products-eigenschap-bereik", inputs: ["bereik"] }] });
142
+ BeheerProductsEigenschapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: BeheerProductsEigenschapComponent, selector: "app-beheer-products-eigenschap", inputs: { eigenschap: "eigenschap" }, ngImport: i0, template: "<div class=\"container\" [ngClass]=\"{'warning': !eigenschap.connected, 'normal': eigenschap.connected}\">\r\n <div class=\"row\" (click)=\"Toggle()\">\r\n <div class=\"icon-td\">\r\n <mat-icon *ngIf=\"!eigenschap.open && Show()\">expand_more</mat-icon>\r\n <mat-icon *ngIf=\"eigenschap.open && Show()\">expand_less</mat-icon>\r\n </div>\r\n <div class=\"eigenschapcel\" colspan=\"2\">\r\n {{eigenschap?.name}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"eigenschap.open\">\r\n <div *ngFor=\"let bereik of eigenschap.bereiken\" class=\"bereik\">\r\n <app-beheer-products-eigenschap-bereik [bereik]=\"bereik\"></app-beheer-products-eigenschap-bereik>\r\n </div>\r\n <div *ngIf=\"eigenschap.bereiken.length > 0 && eigenschap.rangeInputs != null\">\r\n <div *ngIf=\"eigenschap.rangeInputs.length == 0\">\r\n <button mat-raised-button (click)=\"ConnectRange()\">\r\n Range\r\n </button>\r\n </div>\r\n <div *ngFor=\"let range of eigenschap.rangeInputs\">\r\n {{ range.rangeInputModel.name }}\r\n\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngFor=\"let optie of eigenschap.opties\" [ngClass]=\"{'warning': !optie.connected}\">\r\n <div class=\"displayflex\">\r\n <ng-container *ngIf=\"optie.colour != null && optie.colour != ''\">\r\n <span [ngStyle]=\"{'background-color': optie.colour}\" class=\"colour-preview\">\r\n &nbsp;\r\n &nbsp;\r\n </span>\r\n </ng-container>\r\n <div class=\"text-div line-height\">{{ optie.name }}</div>\r\n </div>\r\n <div>\r\n <div *ngIf=\"!optie.connected\" class=\"button-row\">\r\n <!--<button mat-raised-button (click)=\"Connect(optie.id, eigenschap.name, optie.name)\">\r\n FilterOption\r\n </button>-->\r\n <button mat-raised-button (click)=\"ConnectMany(optie.id)\">\r\n FilterOptionMany\r\n </button>\r\n <!--<button mat-raised-button (click)=\"ConnectCategory()\">\r\n Category\r\n </button>-->\r\n <button mat-raised-button (click)=\"Ignore(optie.id)\">\r\n Ignore\r\n </button>\r\n </div>\r\n <div *ngFor=\"let connect of optie.bcbEigenschapOptieFilterOptionViewModels\">\r\n <b>{{ connect.filterOptionViewModel.filterName }}: {{ connect.filterOptionViewModel.name }}</b>&nbsp;\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n <div *ngFor=\"let connect of optie.bcbEigenschapOptieCategoryViewModels\">\r\n <b>{{ connect.categoryViewModel.name }}</b>&nbsp;\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n <div *ngIf=\"optie.ignore\">\r\n <b>Ignore</b>&nbsp;\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".row{cursor:pointer;display:flex}.displayflex{display:flex}.line-height{line-height:36px}.colour-preview{padding:5px;margin:2px;border:1px solid #000}.eigenschapcel{flex:auto}.button-row{display:flex;gap:4px}.container{margin:5px;padding:5px;border:1px solid #000}.icon-td{width:24px;height:24px}.text-div{flex:auto}.warning{background-color:#f08080}.normal{background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.BeheerProductsEigenschapBereikComponent, selector: "app-beheer-products-eigenschap-bereik", inputs: ["bereik"] }] });
143
143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: BeheerProductsEigenschapComponent, decorators: [{
144
144
  type: Component,
145
- args: [{ selector: 'app-beheer-products-eigenschap', template: "<div class=\"container\" [ngClass]=\"{'warning': !eigenschap.connected, 'normal': eigenschap.connected}\">\r\n <div class=\"row\" (click)=\"Toggle()\">\r\n <div class=\"icon-td\">\r\n <mat-icon *ngIf=\"!eigenschap.open && Show()\">expand_more</mat-icon>\r\n <mat-icon *ngIf=\"eigenschap.open && Show()\">expand_less</mat-icon>\r\n </div>\r\n <div class=\"eigenschapcel\" colspan=\"2\">\r\n {{eigenschap?.name}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"eigenschap.open\">\r\n <div *ngFor=\"let bereik of eigenschap.bereiken\" class=\"bereik\">\r\n <app-beheer-products-eigenschap-bereik [bereik]=\"bereik\"></app-beheer-products-eigenschap-bereik>\r\n </div>\r\n <div *ngIf=\"eigenschap.bereiken.length > 0 && eigenschap.rangeInputs != null\">\r\n <div *ngIf=\"eigenschap.rangeInputs.length == 0\">\r\n <button mat-raised-button (click)=\"ConnectRange()\">\r\n Range\r\n </button>\r\n </div>\r\n <div *ngFor=\"let range of eigenschap.rangeInputs\">\r\n {{ range.rangeInputModel.name }}\r\n\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngFor=\"let optie of eigenschap.opties\" [ngClass]=\"{'warning': !optie.connected}\">\r\n <div class=\"text-div\">{{ optie.name }}</div>\r\n <div>\r\n <div *ngIf=\"!optie.connected\" class=\"button-row\">\r\n <!--<button mat-raised-button (click)=\"Connect(optie.id, eigenschap.name, optie.name)\">\r\n FilterOption\r\n </button>-->\r\n <button mat-raised-button (click)=\"ConnectMany(optie.id)\">\r\n FilterOptionMany\r\n </button>\r\n <!--<button mat-raised-button (click)=\"ConnectCategory()\">\r\n Category\r\n </button>-->\r\n <button mat-raised-button (click)=\"Ignore(optie.id)\">\r\n Ignore\r\n </button>\r\n </div>\r\n <div *ngFor=\"let connect of optie.bcbEigenschapOptieFilterOptionViewModels\">\r\n <b>{{ connect.filterOptionViewModel.filterName }}: {{ connect.filterOptionViewModel.name }}</b>&nbsp;\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n <div *ngFor=\"let connect of optie.bcbEigenschapOptieCategoryViewModels\">\r\n <b>{{ connect.categoryViewModel.name }}</b>&nbsp;\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n <div *ngIf=\"optie.ignore\">\r\n <b>Ignore</b>&nbsp;\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".row{cursor:pointer;display:flex}.displayflex{display:flex}.eigenschapcel{flex:auto}.button-row{display:flex;gap:4px}.container{margin:5px;padding:5px;border:1px solid #000}.icon-td{width:24px;height:24px}.text-div{flex:auto}.warning{background-color:#f08080}.normal{background-color:#fff}\n"] }]
145
+ args: [{ selector: 'app-beheer-products-eigenschap', template: "<div class=\"container\" [ngClass]=\"{'warning': !eigenschap.connected, 'normal': eigenschap.connected}\">\r\n <div class=\"row\" (click)=\"Toggle()\">\r\n <div class=\"icon-td\">\r\n <mat-icon *ngIf=\"!eigenschap.open && Show()\">expand_more</mat-icon>\r\n <mat-icon *ngIf=\"eigenschap.open && Show()\">expand_less</mat-icon>\r\n </div>\r\n <div class=\"eigenschapcel\" colspan=\"2\">\r\n {{eigenschap?.name}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"eigenschap.open\">\r\n <div *ngFor=\"let bereik of eigenschap.bereiken\" class=\"bereik\">\r\n <app-beheer-products-eigenschap-bereik [bereik]=\"bereik\"></app-beheer-products-eigenschap-bereik>\r\n </div>\r\n <div *ngIf=\"eigenschap.bereiken.length > 0 && eigenschap.rangeInputs != null\">\r\n <div *ngIf=\"eigenschap.rangeInputs.length == 0\">\r\n <button mat-raised-button (click)=\"ConnectRange()\">\r\n Range\r\n </button>\r\n </div>\r\n <div *ngFor=\"let range of eigenschap.rangeInputs\">\r\n {{ range.rangeInputModel.name }}\r\n\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngFor=\"let optie of eigenschap.opties\" [ngClass]=\"{'warning': !optie.connected}\">\r\n <div class=\"displayflex\">\r\n <ng-container *ngIf=\"optie.colour != null && optie.colour != ''\">\r\n <span [ngStyle]=\"{'background-color': optie.colour}\" class=\"colour-preview\">\r\n &nbsp;\r\n &nbsp;\r\n </span>\r\n </ng-container>\r\n <div class=\"text-div line-height\">{{ optie.name }}</div>\r\n </div>\r\n <div>\r\n <div *ngIf=\"!optie.connected\" class=\"button-row\">\r\n <!--<button mat-raised-button (click)=\"Connect(optie.id, eigenschap.name, optie.name)\">\r\n FilterOption\r\n </button>-->\r\n <button mat-raised-button (click)=\"ConnectMany(optie.id)\">\r\n FilterOptionMany\r\n </button>\r\n <!--<button mat-raised-button (click)=\"ConnectCategory()\">\r\n Category\r\n </button>-->\r\n <button mat-raised-button (click)=\"Ignore(optie.id)\">\r\n Ignore\r\n </button>\r\n </div>\r\n <div *ngFor=\"let connect of optie.bcbEigenschapOptieFilterOptionViewModels\">\r\n <b>{{ connect.filterOptionViewModel.filterName }}: {{ connect.filterOptionViewModel.name }}</b>&nbsp;\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n <div *ngFor=\"let connect of optie.bcbEigenschapOptieCategoryViewModels\">\r\n <b>{{ connect.categoryViewModel.name }}</b>&nbsp;\r\n <button mat-raised-button>\r\n Remove\r\n </button>\r\n </div>\r\n <div *ngIf=\"optie.ignore\">\r\n <b>Ignore</b>&nbsp;\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".row{cursor:pointer;display:flex}.displayflex{display:flex}.line-height{line-height:36px}.colour-preview{padding:5px;margin:2px;border:1px solid #000}.eigenschapcel{flex:auto}.button-row{display:flex;gap:4px}.container{margin:5px;padding:5px;border:1px solid #000}.icon-td{width:24px;height:24px}.text-div{flex:auto}.warning{background-color:#f08080}.normal{background-color:#fff}\n"] }]
146
146
  }], ctorParameters: function () { return [{ type: i1.ImportSetsService }, { type: i2.ProductsService }, { type: i3.MatDialog }, { type: i4.ProductsApiClient }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { eigenschap: [{
147
147
  type: Input
148
148
  }] } });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9iZWhlZXIvY29tcG9uZW50cy9iZWhlZXItcHJvZHVjdHMvYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAvYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9iZWhlZXIvY29tcG9uZW50cy9iZWhlZXItcHJvZHVjdHMvYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAvYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSTVFLE9BQU8sRUFBcUIsMkJBQTJCLEVBQTBCLDZCQUE2QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUosT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDNUgsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7Ozs7Ozs7Ozs7QUFPOUksTUFBTSxPQUFPLGlDQUFpQztJQUk1QyxZQUNTLGlCQUFvQyxFQUNwQyxlQUFnQyxFQUNoQyxNQUFpQixFQUNoQixpQkFBb0MsRUFDcEMsaUJBQW9DO1FBSnJDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUks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TyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDMUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDM0QsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7Z0JBQ3JCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLElBQUk7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksSUFBSTtZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzhIQXRKVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQyw0R0NkOUMsOG1GQWdFQTsyRkRsRGEsaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGdDQUFnQzs4TkFNakMsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgSW1wb3J0U2V0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9pbXBvcnRzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZHVjdHNBcGlDbGllbnQsIENvbm5lY3RCQ0JFaWdlbnNjaGFwUmVxdWVzdCwgQkNCRWlnZW5zY2hhcFZpZXdNb2RlbCwgQ29ubmVjdEVpZ2Vuc2NoYXBPcHRpZVJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi9zd2FnZ2VyL1N3YWdnZXJDbGllbnQnO1xyXG5pbXBvcnQgeyBCZWhlZXJDb25uZWN0Q2F0ZWdvcnlEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iZWhlZXItY29ubmVjdC1jYXRlZ29yeS1kaWFsb2cvYmVoZWVyLWNvbm5lY3QtY2F0ZWdvcnktZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJlaGVlclNlbGVjdEZpbHRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2JlaGVlci1zZWxlY3QtZmlsdGVyLWRpYWxvZy9iZWhlZXItc2VsZWN0LWZpbHRlci1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmVoZWVyUHJvZHVjdHNDb25uZWN0UmFuZ2VpbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2JlaGVlci1wcm9kdWN0cy1jb25uZWN0LXJhbmdlaW5wdXQvYmVoZWVyLXByb2R1Y3RzLWNvbm5lY3QtcmFuZ2VpbnB1dC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9iZWhlZXItcHJvZHVjdHMtZWlnZW5zY2hhcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmVoZWVyUHJvZHVjdHNFaWdlbnNjaGFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgZWlnZW5zY2hhcDogQkNCRWlnZW5zY2hhcFZpZXdNb2RlbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgSW1wb3J0U2V0c1NlcnZpY2U6IEltcG9ydFNldHNTZXJ2aWNlLFxyXG4gICAgcHVibGljIFByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBQcm9kdWN0c0FwaUNsaWVudDogUHJvZHVjdHNBcGlDbGllbnQsXHJcbiAgICBwcml2YXRlIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFRvZ2dsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWlnZW5zY2hhcC5vcGVuID0gIXRoaXMuZWlnZW5zY2hhcC5vcGVuO1xyXG4gIH1cclxuXHJcbiAgLy9wdWJsaWMgQ29ubmVjdChpZDogbnVtYmVyLCBmaWx0ZXI6IHN0cmluZywgb3B0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAvLyAgdmFyIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQmVoZWVyUHJvZHVjdHNLb3BwZWxGaWx0ZXJvcHRpb25EYWlsb2dDb21wb25lbnQsIHtcclxuICAvLyAgICBkYXRhOiB7XHJcbiAgLy8gICAgICBsb2NhdGlvbjogdGhpcy5laWdlbnNjaGFwLmxvY2F0aW9uLFxyXG4gIC8vICAgICAgYmNiZWlnZW5zY2hhcG9wdGllaWQ6IGlkLFxyXG4gIC8vICAgICAgc3VnZ2VzdGVkZmlsdGVyOiBmaWx0ZXIsXHJcbiAgLy8gICAgICBzdWdnZXN0ZWRvcHRpb246IG9wdGlvblxyXG4gIC8vICAgIH1cclxuICAvLyAgfSk7XHJcblxyXG4gIC8vICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgLy8gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XHJcbiAgLy8gICAgICBpZiAocmVzdWx0LmZpbHRlcm9wdGlvbiAhPSBudWxsICYmIHJlc3VsdC5maWx0ZXJvcHRpb24gPiAwKSB7XHJcbiAgLy8gICAgICAgIGlmICh0aGlzLlByb2R1Y3RzU2VydmljZS5CQ0JQcm9kdWN0Vmlld01vZGVsICE9IG51bGwpIHtcclxuICAvLyAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBDb25uZWN0RWlnZW5zY2hhcE9wdGllUmVxdWVzdCgpO1xyXG5cclxuICAvLyAgICAgICAgICByZXF1ZXN0LmJjYkVpZ2Vuc2NoYXBPcHRpZUlkID0gaWQ7XHJcbiAgLy8gICAgICAgICAgcmVxdWVzdC5maWx0ZXJPcHRpb25JZCA9IHJlc3VsdC5maWx0ZXJvcHRpb247XHJcbiAgLy8gICAgICAgICAgcmVxdWVzdC5iY2JQcm9kdWN0SWQgPSB0aGlzLlByb2R1Y3RzU2VydmljZS5CQ0JQcm9kdWN0Vmlld01vZGVsLmlkO1xyXG4gIC8vICAgICAgICAgIHJlcXVlc3QubG9jYXRpb24gPSB0aGlzLmVpZ2Vuc2NoYXAubG9jYXRpb247XHJcblxyXG4gIC8vICAgICAgICAgIHRoaXMuUHJvZHVjdHNBcGlDbGllbnQuY29ubmVjdEJDQkVpZ2Vuc2NoYXBPcHRpZUZpbHRlck9wdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgdGhpcy5Qcm9kdWN0c1NlcnZpY2UuTG9hZFByb2R1Y3QodGhpcy5DaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgLy8gICAgICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgYWxlcnQoZXJyb3IpO1xyXG4gIC8vICAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgICB9XHJcbiAgLy8gICAgICB9XHJcbiAgLy8gICAgICBlbHNlIGlmIChyZXN1bHQuZmlsdGVyICE9IG51bGwpIHtcclxuICAvLyAgICAgICAgdmFyIHJlcXVlc3QyID0gbmV3IENvbm5lY3RNYW55TmFtZVJlcXVlc3QoKTtcclxuXHJcbiAgLy8gICAgICAgIHJlcXVlc3QyLmJjYlByb2R1Y3RFaWdlbnNjaGFwT3B0aWVJZCA9IGlkO1xyXG4gIC8vICAgICAgICByZXF1ZXN0Mi5maWx0ZXJJZCA9IHJlc3VsdC5maWx0ZXI7XHJcblxyXG4gIC8vICAgICAgICB0aGlzLlByb2R1Y3RzQXBpQ2xpZW50LmNvbm5lY3RNYW55TmFtZShyZXF1ZXN0Mikuc3Vic2NyaWJlKChtb2RlbDogQ29ubmVjdE1hbnlOYW1lUmVzcG9uc2UpID0+IHtcclxuICAvLyAgICAgICAgICB0aGlzLlByb2R1Y3RzU2VydmljZS5Mb2FkUHJvZHVjdCh0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICAvLyAgICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gIC8vICAgICAgICAgIGFsZXJ0KGVycm9yKTtcclxuICAvLyAgICAgICAgfSk7XHJcbiAgLy8gICAgICB9XHJcbiAgLy8gICAgfVxyXG4gIC8vICB9KTtcclxuICAvL31cclxuXHJcbiAgcHVibGljIENvbm5lY3RNYW55KGlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHZhciBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEJlaGVlclNlbGVjdEZpbHRlckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbmFtZTogdGhpcy5laWdlbnNjaGFwLm5hbWVcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5Qcm9kdWN0c1NlcnZpY2UuQkNCUHJvZHVjdFZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdD8uZmlsdGVyICE9IG51bGwpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuZmlsdGVyID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlybShcIldlZXQgamUgaGV0IHpla2VyP1wiKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuUHJvZHVjdHNTZXJ2aWNlLkxvYWRpbmdQcm9kdWN0cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgQ29ubmVjdEJDQkVpZ2Vuc2NoYXBSZXF1ZXN0KCk7XHJcblxyXG4gICAgICAgICAgICAgIHJlcXVlc3QuZmlsdGVySWQgPSByZXN1bHQuZmlsdGVyO1xyXG4gICAgICAgICAgICAgIHJlcXVlc3QubG9jYXRpb24gPSB0aGlzLmVpZ2Vuc2NoYXAubG9jYXRpb247XHJcbiAgICAgICAgICAgICAgcmVxdWVzdC5iY2JFaWdlbnNjaGFwSWQgPSB0aGlzLmVpZ2Vuc2NoYXAuaWQ7XHJcbiAgICAgICAgICAgICAgcmVxdWVzdC5iY2JJbXBvcnRTZXRJZCA9IHRoaXMuSW1wb3J0U2V0c1NlcnZpY2UuQkNCSW1wb3J0U2V0U2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgICAgcmVxdWVzdC5iY2JQcm9kdWN0SWQgPSB0aGlzLlByb2R1Y3RzU2VydmljZS5CQ0JQcm9kdWN0Vmlld01vZGVsLmlkO1xyXG4gICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICB0aGlzLlByb2R1Y3RzQXBpQ2xpZW50LmNvbm5lY3RCQ0JFaWdlbnNjaGFwRmlsdGVyKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlByb2R1Y3RzU2VydmljZS5Mb2FkUHJvZHVjdCh0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICAgICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbGVydChlcnJvcik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIElnbm9yZShpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5Qcm9kdWN0c1NlcnZpY2UuQkNCUHJvZHVjdFZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IENvbm5lY3RFaWdlbnNjaGFwT3B0aWVSZXF1ZXN0KCk7XHJcblxyXG4gICAgICByZXF1ZXN0LmJjYkVpZ2Vuc2NoYXBPcHRpZUlkID0gaWQ7XHJcbiAgICAgIHJlcXVlc3QuZmlsdGVyT3B0aW9uSWQgPSAtMTtcclxuICAgICAgcmVxdWVzdC5iY2JQcm9kdWN0SWQgPSB0aGlzLlByb2R1Y3RzU2VydmljZS5CQ0JQcm9kdWN0Vmlld01vZGVsLmlkO1xyXG4gICAgICByZXF1ZXN0LmxvY2F0aW9uID0gdGhpcy5laWdlbnNjaGFwLmxvY2F0aW9uO1xyXG5cclxuICAgICAgdGhpcy5Qcm9kdWN0c0FwaUNsaWVudC5pZ25vcmVCQ0JFaWdlbnNjaGFwT3B0aWVGaWx0ZXJPcHRpb24ocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLlByb2R1Y3RzU2VydmljZS5Mb2FkUHJvZHVjdCh0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGFsZXJ0KGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQ29ubmVjdFJhbmdlKCk6IHZvaWQge1xyXG4gICAgdmFyIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQmVoZWVyUHJvZHVjdHNDb25uZWN0UmFuZ2VpbnB1dENvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgYmNiZWlnZW5zY2hhcGlkOiB0aGlzLmVpZ2Vuc2NoYXAuaWQsXHJcbiAgICAgICAgbG9jYXRpb246IHRoaXMuZWlnZW5zY2hhcC5sb2NhdGlvblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDb25uZWN0Q2F0ZWdvcnkoKTogdm9pZCB7XHJcbiAgICBpZiAoY29uZmlybShcIldlZXQgamUgaGV0IHpla2VyP1wiKSkge1xyXG4gICAgICB0aGlzLlByb2R1Y3RzU2VydmljZS5Mb2FkaW5nUHJvZHVjdHMgPSB0cnVlO1xyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBDb25uZWN0QkNCRWlnZW5zY2hhcFJlcXVlc3QoKTtcclxuXHJcbiAgICAgIHJlcXVlc3QuYmNiRWlnZW5zY2hhcElkID0gdGhpcy5laWdlbnNjaGFwLmlkO1xyXG4gICAgICByZXF1ZXN0LmJjYkltcG9ydFNldElkID0gdGhpcy5JbXBvcnRTZXRzU2VydmljZS5CQ0JJbXBvcnRTZXRTZWxlY3RlZDtcclxuXHJcbiAgICAgIHRoaXMuUHJvZHVjdHNBcGlDbGllbnQuY29ubmVjdEJDQkVpZ2Vuc2NoYXBDYXRlZ29yeShyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuUHJvZHVjdHNTZXJ2aWNlLkxvYWRQcm9kdWN0KHRoaXMuQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgYWxlcnQoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZWlnZW5zY2hhcD8ub3B0aWVzPy5sZW5ndGggIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVpZ2Vuc2NoYXAub3B0aWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZWlnZW5zY2hhcD8uYmVyZWlrZW4/Lmxlbmd0aCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZWlnZW5zY2hhcC5iZXJlaWtlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnd2FybmluZyc6ICFlaWdlbnNjaGFwLmNvbm5lY3RlZCwgJ25vcm1hbCc6IGVpZ2Vuc2NoYXAuY29ubmVjdGVkfVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIiAoY2xpY2spPVwiVG9nZ2xlKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpY29uLXRkXCI+XHJcbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFlaWdlbnNjaGFwLm9wZW4gJiYgU2hvdygpXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxyXG4gICAgICA8bWF0LWljb24gKm5nSWY9XCJlaWdlbnNjaGFwLm9wZW4gJiYgU2hvdygpXCI+ZXhwYW5kX2xlc3M8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZWlnZW5zY2hhcGNlbFwiIGNvbHNwYW49XCIyXCI+XHJcbiAgICAgIHt7ZWlnZW5zY2hhcD8ubmFtZX19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwiZWlnZW5zY2hhcC5vcGVuXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBiZXJlaWsgb2YgZWlnZW5zY2hhcC5iZXJlaWtlblwiIGNsYXNzPVwiYmVyZWlrXCI+XHJcbiAgICAgIDxhcHAtYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAtYmVyZWlrIFtiZXJlaWtdPVwiYmVyZWlrXCI+PC9hcHAtYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAtYmVyZWlrPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZWlnZW5zY2hhcC5iZXJlaWtlbi5sZW5ndGggPiAwICYmIGVpZ2Vuc2NoYXAucmFuZ2VJbnB1dHMgIT0gbnVsbFwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZWlnZW5zY2hhcC5yYW5nZUlucHV0cy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIkNvbm5lY3RSYW5nZSgpXCI+XHJcbiAgICAgICAgICBSYW5nZVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcmFuZ2Ugb2YgZWlnZW5zY2hhcC5yYW5nZUlucHV0c1wiPlxyXG4gICAgICAgIHt7IHJhbmdlLnJhbmdlSW5wdXRNb2RlbC5uYW1lIH19XHJcblxyXG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24+XHJcbiAgICAgICAgICBSZW1vdmVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGllIG9mIGVpZ2Vuc2NoYXAub3B0aWVzXCIgW25nQ2xhc3NdPVwieyd3YXJuaW5nJzogIW9wdGllLmNvbm5lY3RlZH1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtZGl2XCI+e3sgb3B0aWUubmFtZSB9fTwvZGl2PlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhb3B0aWUuY29ubmVjdGVkXCIgY2xhc3M9XCJidXR0b24tcm93XCI+XHJcbiAgICAgICAgICA8IS0tPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiQ29ubmVjdChvcHRpZS5pZCwgZWlnZW5zY2hhcC5uYW1lLCBvcHRpZS5uYW1lKVwiPlxyXG4gICAgICAgICAgICBGaWx0ZXJPcHRpb25cclxuICAgICAgICAgIDwvYnV0dG9uPi0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiQ29ubmVjdE1hbnkob3B0aWUuaWQpXCI+XHJcbiAgICAgICAgICAgIEZpbHRlck9wdGlvbk1hbnlcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPCEtLTxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIkNvbm5lY3RDYXRlZ29yeSgpXCI+XHJcbiAgICAgICAgICAgIENhdGVnb3J5XHJcbiAgICAgICAgICA8L2J1dHRvbj4tLT5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIklnbm9yZShvcHRpZS5pZClcIj5cclxuICAgICAgICAgICAgSWdub3JlXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb25uZWN0IG9mIG9wdGllLmJjYkVpZ2Vuc2NoYXBPcHRpZUZpbHRlck9wdGlvblZpZXdNb2RlbHNcIj5cclxuICAgICAgICAgIDxiPnt7IGNvbm5lY3QuZmlsdGVyT3B0aW9uVmlld01vZGVsLmZpbHRlck5hbWUgfX06IHt7IGNvbm5lY3QuZmlsdGVyT3B0aW9uVmlld01vZGVsLm5hbWUgfX08L2I+Jm5ic3A7XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICAgICAgICBSZW1vdmVcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbm5lY3Qgb2Ygb3B0aWUuYmNiRWlnZW5zY2hhcE9wdGllQ2F0ZWdvcnlWaWV3TW9kZWxzXCI+XHJcbiAgICAgICAgICA8Yj57eyBjb25uZWN0LmNhdGVnb3J5Vmlld01vZGVsLm5hbWUgfX08L2I+Jm5ic3A7XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICAgICAgICBSZW1vdmVcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpZS5pZ25vcmVcIj5cclxuICAgICAgICAgIDxiPklnbm9yZTwvYj4mbmJzcDtcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9iZWhlZXIvY29tcG9uZW50cy9iZWhlZXItcHJvZHVjdHMvYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAvYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9iZWhlZXIvY29tcG9uZW50cy9iZWhlZXItcHJvZHVjdHMvYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAvYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSTVFLE9BQU8sRUFBcUIsMkJBQTJCLEVBQTBCLDZCQUE2QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUosT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDNUgsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7Ozs7Ozs7Ozs7QUFPOUksTUFBTSxPQUFPLGlDQUFpQztJQUk1QyxZQUNTLGlCQUFvQyxFQUNwQyxlQUFnQyxFQUNoQyxNQUFpQixFQUNoQixpQkFBb0MsRUFDcEMsaUJBQW9DO1FBSnJDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUks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TyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDMUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDM0QsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7Z0JBQ3JCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLElBQUk7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksSUFBSTtZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzhIQXRKVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQyw0R0NkOUMsMDZGQXdFQTsyRkQxRGEsaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGdDQUFnQzs4TkFNakMsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgSW1wb3J0U2V0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9pbXBvcnRzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZHVjdHNBcGlDbGllbnQsIENvbm5lY3RCQ0JFaWdlbnNjaGFwUmVxdWVzdCwgQkNCRWlnZW5zY2hhcFZpZXdNb2RlbCwgQ29ubmVjdEVpZ2Vuc2NoYXBPcHRpZVJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi9zd2FnZ2VyL1N3YWdnZXJDbGllbnQnO1xyXG5pbXBvcnQgeyBCZWhlZXJDb25uZWN0Q2F0ZWdvcnlEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iZWhlZXItY29ubmVjdC1jYXRlZ29yeS1kaWFsb2cvYmVoZWVyLWNvbm5lY3QtY2F0ZWdvcnktZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJlaGVlclNlbGVjdEZpbHRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2JlaGVlci1zZWxlY3QtZmlsdGVyLWRpYWxvZy9iZWhlZXItc2VsZWN0LWZpbHRlci1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmVoZWVyUHJvZHVjdHNDb25uZWN0UmFuZ2VpbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2JlaGVlci1wcm9kdWN0cy1jb25uZWN0LXJhbmdlaW5wdXQvYmVoZWVyLXByb2R1Y3RzLWNvbm5lY3QtcmFuZ2VpbnB1dC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9iZWhlZXItcHJvZHVjdHMtZWlnZW5zY2hhcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmVoZWVyUHJvZHVjdHNFaWdlbnNjaGFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgZWlnZW5zY2hhcDogQkNCRWlnZW5zY2hhcFZpZXdNb2RlbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgSW1wb3J0U2V0c1NlcnZpY2U6IEltcG9ydFNldHNTZXJ2aWNlLFxyXG4gICAgcHVibGljIFByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBQcm9kdWN0c0FwaUNsaWVudDogUHJvZHVjdHNBcGlDbGllbnQsXHJcbiAgICBwcml2YXRlIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFRvZ2dsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWlnZW5zY2hhcC5vcGVuID0gIXRoaXMuZWlnZW5zY2hhcC5vcGVuO1xyXG4gIH1cclxuXHJcbiAgLy9wdWJsaWMgQ29ubmVjdChpZDogbnVtYmVyLCBmaWx0ZXI6IHN0cmluZywgb3B0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAvLyAgdmFyIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQmVoZWVyUHJvZHVjdHNLb3BwZWxGaWx0ZXJvcHRpb25EYWlsb2dDb21wb25lbnQsIHtcclxuICAvLyAgICBkYXRhOiB7XHJcbiAgLy8gICAgICBsb2NhdGlvbjogdGhpcy5laWdlbnNjaGFwLmxvY2F0aW9uLFxyXG4gIC8vICAgICAgYmNiZWlnZW5zY2hhcG9wdGllaWQ6IGlkLFxyXG4gIC8vICAgICAgc3VnZ2VzdGVkZmlsdGVyOiBmaWx0ZXIsXHJcbiAgLy8gICAgICBzdWdnZXN0ZWRvcHRpb246IG9wdGlvblxyXG4gIC8vICAgIH1cclxuICAvLyAgfSk7XHJcblxyXG4gIC8vICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgLy8gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XHJcbiAgLy8gICAgICBpZiAocmVzdWx0LmZpbHRlcm9wdGlvbiAhPSBudWxsICYmIHJlc3VsdC5maWx0ZXJvcHRpb24gPiAwKSB7XHJcbiAgLy8gICAgICAgIGlmICh0aGlzLlByb2R1Y3RzU2VydmljZS5CQ0JQcm9kdWN0Vmlld01vZGVsICE9IG51bGwpIHtcclxuICAvLyAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBDb25uZWN0RWlnZW5zY2hhcE9wdGllUmVxdWVzdCgpO1xyXG5cclxuICAvLyAgICAgICAgICByZXF1ZXN0LmJjYkVpZ2Vuc2NoYXBPcHRpZUlkID0gaWQ7XHJcbiAgLy8gICAgICAgICAgcmVxdWVzdC5maWx0ZXJPcHRpb25JZCA9IHJlc3VsdC5maWx0ZXJvcHRpb247XHJcbiAgLy8gICAgICAgICAgcmVxdWVzdC5iY2JQcm9kdWN0SWQgPSB0aGlzLlByb2R1Y3RzU2VydmljZS5CQ0JQcm9kdWN0Vmlld01vZGVsLmlkO1xyXG4gIC8vICAgICAgICAgIHJlcXVlc3QubG9jYXRpb24gPSB0aGlzLmVpZ2Vuc2NoYXAubG9jYXRpb247XHJcblxyXG4gIC8vICAgICAgICAgIHRoaXMuUHJvZHVjdHNBcGlDbGllbnQuY29ubmVjdEJDQkVpZ2Vuc2NoYXBPcHRpZUZpbHRlck9wdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgdGhpcy5Qcm9kdWN0c1NlcnZpY2UuTG9hZFByb2R1Y3QodGhpcy5DaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgLy8gICAgICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgYWxlcnQoZXJyb3IpO1xyXG4gIC8vICAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgICB9XHJcbiAgLy8gICAgICB9XHJcbiAgLy8gICAgICBlbHNlIGlmIChyZXN1bHQuZmlsdGVyICE9IG51bGwpIHtcclxuICAvLyAgICAgICAgdmFyIHJlcXVlc3QyID0gbmV3IENvbm5lY3RNYW55TmFtZVJlcXVlc3QoKTtcclxuXHJcbiAgLy8gICAgICAgIHJlcXVlc3QyLmJjYlByb2R1Y3RFaWdlbnNjaGFwT3B0aWVJZCA9IGlkO1xyXG4gIC8vICAgICAgICByZXF1ZXN0Mi5maWx0ZXJJZCA9IHJlc3VsdC5maWx0ZXI7XHJcblxyXG4gIC8vICAgICAgICB0aGlzLlByb2R1Y3RzQXBpQ2xpZW50LmNvbm5lY3RNYW55TmFtZShyZXF1ZXN0Mikuc3Vic2NyaWJlKChtb2RlbDogQ29ubmVjdE1hbnlOYW1lUmVzcG9uc2UpID0+IHtcclxuICAvLyAgICAgICAgICB0aGlzLlByb2R1Y3RzU2VydmljZS5Mb2FkUHJvZHVjdCh0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICAvLyAgICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gIC8vICAgICAgICAgIGFsZXJ0KGVycm9yKTtcclxuICAvLyAgICAgICAgfSk7XHJcbiAgLy8gICAgICB9XHJcbiAgLy8gICAgfVxyXG4gIC8vICB9KTtcclxuICAvL31cclxuXHJcbiAgcHVibGljIENvbm5lY3RNYW55KGlkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHZhciBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEJlaGVlclNlbGVjdEZpbHRlckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbmFtZTogdGhpcy5laWdlbnNjaGFwLm5hbWVcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5Qcm9kdWN0c1NlcnZpY2UuQkNCUHJvZHVjdFZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdD8uZmlsdGVyICE9IG51bGwpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuZmlsdGVyID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlybShcIldlZXQgamUgaGV0IHpla2VyP1wiKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuUHJvZHVjdHNTZXJ2aWNlLkxvYWRpbmdQcm9kdWN0cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgQ29ubmVjdEJDQkVpZ2Vuc2NoYXBSZXF1ZXN0KCk7XHJcblxyXG4gICAgICAgICAgICAgIHJlcXVlc3QuZmlsdGVySWQgPSByZXN1bHQuZmlsdGVyO1xyXG4gICAgICAgICAgICAgIHJlcXVlc3QubG9jYXRpb24gPSB0aGlzLmVpZ2Vuc2NoYXAubG9jYXRpb247XHJcbiAgICAgICAgICAgICAgcmVxdWVzdC5iY2JFaWdlbnNjaGFwSWQgPSB0aGlzLmVpZ2Vuc2NoYXAuaWQ7XHJcbiAgICAgICAgICAgICAgcmVxdWVzdC5iY2JJbXBvcnRTZXRJZCA9IHRoaXMuSW1wb3J0U2V0c1NlcnZpY2UuQkNCSW1wb3J0U2V0U2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgICAgcmVxdWVzdC5iY2JQcm9kdWN0SWQgPSB0aGlzLlByb2R1Y3RzU2VydmljZS5CQ0JQcm9kdWN0Vmlld01vZGVsLmlkO1xyXG4gICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICB0aGlzLlByb2R1Y3RzQXBpQ2xpZW50LmNvbm5lY3RCQ0JFaWdlbnNjaGFwRmlsdGVyKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlByb2R1Y3RzU2VydmljZS5Mb2FkUHJvZHVjdCh0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICAgICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbGVydChlcnJvcik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIElnbm9yZShpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5Qcm9kdWN0c1NlcnZpY2UuQkNCUHJvZHVjdFZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IENvbm5lY3RFaWdlbnNjaGFwT3B0aWVSZXF1ZXN0KCk7XHJcblxyXG4gICAgICByZXF1ZXN0LmJjYkVpZ2Vuc2NoYXBPcHRpZUlkID0gaWQ7XHJcbiAgICAgIHJlcXVlc3QuZmlsdGVyT3B0aW9uSWQgPSAtMTtcclxuICAgICAgcmVxdWVzdC5iY2JQcm9kdWN0SWQgPSB0aGlzLlByb2R1Y3RzU2VydmljZS5CQ0JQcm9kdWN0Vmlld01vZGVsLmlkO1xyXG4gICAgICByZXF1ZXN0LmxvY2F0aW9uID0gdGhpcy5laWdlbnNjaGFwLmxvY2F0aW9uO1xyXG5cclxuICAgICAgdGhpcy5Qcm9kdWN0c0FwaUNsaWVudC5pZ25vcmVCQ0JFaWdlbnNjaGFwT3B0aWVGaWx0ZXJPcHRpb24ocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLlByb2R1Y3RzU2VydmljZS5Mb2FkUHJvZHVjdCh0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGFsZXJ0KGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQ29ubmVjdFJhbmdlKCk6IHZvaWQge1xyXG4gICAgdmFyIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQmVoZWVyUHJvZHVjdHNDb25uZWN0UmFuZ2VpbnB1dENvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgYmNiZWlnZW5zY2hhcGlkOiB0aGlzLmVpZ2Vuc2NoYXAuaWQsXHJcbiAgICAgICAgbG9jYXRpb246IHRoaXMuZWlnZW5zY2hhcC5sb2NhdGlvblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDb25uZWN0Q2F0ZWdvcnkoKTogdm9pZCB7XHJcbiAgICBpZiAoY29uZmlybShcIldlZXQgamUgaGV0IHpla2VyP1wiKSkge1xyXG4gICAgICB0aGlzLlByb2R1Y3RzU2VydmljZS5Mb2FkaW5nUHJvZHVjdHMgPSB0cnVlO1xyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBDb25uZWN0QkNCRWlnZW5zY2hhcFJlcXVlc3QoKTtcclxuXHJcbiAgICAgIHJlcXVlc3QuYmNiRWlnZW5zY2hhcElkID0gdGhpcy5laWdlbnNjaGFwLmlkO1xyXG4gICAgICByZXF1ZXN0LmJjYkltcG9ydFNldElkID0gdGhpcy5JbXBvcnRTZXRzU2VydmljZS5CQ0JJbXBvcnRTZXRTZWxlY3RlZDtcclxuXHJcbiAgICAgIHRoaXMuUHJvZHVjdHNBcGlDbGllbnQuY29ubmVjdEJDQkVpZ2Vuc2NoYXBDYXRlZ29yeShyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuUHJvZHVjdHNTZXJ2aWNlLkxvYWRQcm9kdWN0KHRoaXMuQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgYWxlcnQoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZWlnZW5zY2hhcD8ub3B0aWVzPy5sZW5ndGggIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVpZ2Vuc2NoYXAub3B0aWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZWlnZW5zY2hhcD8uYmVyZWlrZW4/Lmxlbmd0aCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZWlnZW5zY2hhcC5iZXJlaWtlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnd2FybmluZyc6ICFlaWdlbnNjaGFwLmNvbm5lY3RlZCwgJ25vcm1hbCc6IGVpZ2Vuc2NoYXAuY29ubmVjdGVkfVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIiAoY2xpY2spPVwiVG9nZ2xlKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpY29uLXRkXCI+XHJcbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFlaWdlbnNjaGFwLm9wZW4gJiYgU2hvdygpXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxyXG4gICAgICA8bWF0LWljb24gKm5nSWY9XCJlaWdlbnNjaGFwLm9wZW4gJiYgU2hvdygpXCI+ZXhwYW5kX2xlc3M8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZWlnZW5zY2hhcGNlbFwiIGNvbHNwYW49XCIyXCI+XHJcbiAgICAgIHt7ZWlnZW5zY2hhcD8ubmFtZX19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwiZWlnZW5zY2hhcC5vcGVuXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBiZXJlaWsgb2YgZWlnZW5zY2hhcC5iZXJlaWtlblwiIGNsYXNzPVwiYmVyZWlrXCI+XHJcbiAgICAgIDxhcHAtYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAtYmVyZWlrIFtiZXJlaWtdPVwiYmVyZWlrXCI+PC9hcHAtYmVoZWVyLXByb2R1Y3RzLWVpZ2Vuc2NoYXAtYmVyZWlrPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZWlnZW5zY2hhcC5iZXJlaWtlbi5sZW5ndGggPiAwICYmIGVpZ2Vuc2NoYXAucmFuZ2VJbnB1dHMgIT0gbnVsbFwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZWlnZW5zY2hhcC5yYW5nZUlucHV0cy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIkNvbm5lY3RSYW5nZSgpXCI+XHJcbiAgICAgICAgICBSYW5nZVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcmFuZ2Ugb2YgZWlnZW5zY2hhcC5yYW5nZUlucHV0c1wiPlxyXG4gICAgICAgIHt7IHJhbmdlLnJhbmdlSW5wdXRNb2RlbC5uYW1lIH19XHJcblxyXG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24+XHJcbiAgICAgICAgICBSZW1vdmVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGllIG9mIGVpZ2Vuc2NoYXAub3B0aWVzXCIgW25nQ2xhc3NdPVwieyd3YXJuaW5nJzogIW9wdGllLmNvbm5lY3RlZH1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpc3BsYXlmbGV4XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGllLmNvbG91ciAhPSBudWxsICYmIG9wdGllLmNvbG91ciAhPSAnJ1wiPlxyXG4gICAgICAgICAgPHNwYW4gW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWNvbG9yJzogb3B0aWUuY29sb3VyfVwiIGNsYXNzPVwiY29sb3VyLXByZXZpZXdcIj5cclxuICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWRpdiBsaW5lLWhlaWdodFwiPnt7IG9wdGllLm5hbWUgfX08L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFvcHRpZS5jb25uZWN0ZWRcIiBjbGFzcz1cImJ1dHRvbi1yb3dcIj5cclxuICAgICAgICAgIDwhLS08YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJDb25uZWN0KG9wdGllLmlkLCBlaWdlbnNjaGFwLm5hbWUsIG9wdGllLm5hbWUpXCI+XHJcbiAgICAgICAgRmlsdGVyT3B0aW9uXHJcbiAgICAgIDwvYnV0dG9uPi0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiQ29ubmVjdE1hbnkob3B0aWUuaWQpXCI+XHJcbiAgICAgICAgICAgIEZpbHRlck9wdGlvbk1hbnlcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPCEtLTxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIkNvbm5lY3RDYXRlZ29yeSgpXCI+XHJcbiAgICAgICAgQ2F0ZWdvcnlcclxuICAgICAgPC9idXR0b24+LS0+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJJZ25vcmUob3B0aWUuaWQpXCI+XHJcbiAgICAgICAgICAgIElnbm9yZVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29ubmVjdCBvZiBvcHRpZS5iY2JFaWdlbnNjaGFwT3B0aWVGaWx0ZXJPcHRpb25WaWV3TW9kZWxzXCI+XHJcbiAgICAgICAgICA8Yj57eyBjb25uZWN0LmZpbHRlck9wdGlvblZpZXdNb2RlbC5maWx0ZXJOYW1lIH19OiB7eyBjb25uZWN0LmZpbHRlck9wdGlvblZpZXdNb2RlbC5uYW1lIH19PC9iPiZuYnNwO1xyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbj5cclxuICAgICAgICAgICAgUmVtb3ZlXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb25uZWN0IG9mIG9wdGllLmJjYkVpZ2Vuc2NoYXBPcHRpZUNhdGVnb3J5Vmlld01vZGVsc1wiPlxyXG4gICAgICAgICAgPGI+e3sgY29ubmVjdC5jYXRlZ29yeVZpZXdNb2RlbC5uYW1lIH19PC9iPiZuYnNwO1xyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbj5cclxuICAgICAgICAgICAgUmVtb3ZlXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwib3B0aWUuaWdub3JlXCI+XHJcbiAgICAgICAgICA8Yj5JZ25vcmU8L2I+Jm5ic3A7XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -45,15 +45,30 @@ export class FabFilterComponent {
45
45
  }
46
46
  return false;
47
47
  }
48
+ GetSelectedOption() {
49
+ if (this._filter.options != null) {
50
+ if (this._filter.options.length == 1) {
51
+ return this._filter.options[0];
52
+ }
53
+ else {
54
+ for (var i = 0; i < this._filter.options.length; i++) {
55
+ if (this._filter.selectedOption == this._filter.options[i].id) {
56
+ return this._filter.options[i];
57
+ }
58
+ }
59
+ }
60
+ }
61
+ return null;
62
+ }
48
63
  }
49
64
  FabFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: FabFilterComponent, deps: [{ token: i1.FabrikantenService }, { token: i2.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
50
- FabFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: FabFilterComponent, selector: "app-fab-filter", inputs: { filter: "filter" }, outputs: { filterchanged: "filterchanged" }, ngImport: i0, template: "<div class=\"row\" *ngIf=\"!filter.hidden\">\r\n <div class=\"select\">\r\n <mat-form-field appearance=\"fill\" class=\"full-width\">\r\n <mat-label class=\"select-mat-label\">\r\n {{ TranslateService.GetActiveValueFilter(filter.id) }}<span *ngIf=\"filter.blocksProductSelect\">*</span>\r\n </mat-label>\r\n <mat-select [(ngModel)]=\"SelectedOptionId\" (selectionChange)=\"SelectOption()\" [disabled]=\"IsDisabled()\">\r\n <mat-option *ngFor=\"let option of filter.options\" [value]=\"option.id\" class=\"select-mat-option\">\r\n <ng-container *ngIf=\"option.colour != null && option.colour != ''\">\r\n <span [ngStyle]=\"{'background-color': option.colour}\" class=\"colour-preview\">\r\n &nbsp;\r\n &nbsp;\r\n </span>\r\n </ng-container>\r\n \r\n {{ TranslateService.GetActiveValueFilterOption(option.id) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"reset\" *ngIf=\"filter.selectedOption != 0\" (click)=\"ResetSelection()\">\r\n <mat-icon class=\"icon-position clear\" [inline]=\"true\">clear</mat-icon>\r\n </div>\r\n</div>\r\n", styles: ["app-fab-filter .select-mat-label:first-letter{text-transform:capitalize}app-fab-filter .mat-select-min-line:first-letter{text-transform:capitalize}app-fab-filter .row{display:flex}app-fab-filter .full-width{width:100%}app-fab-filter .icon-position{margin-top:14px}app-fab-filter .select{flex:auto}app-fab-filter .reset{cursor:pointer;font-size:26px}.colour-preview{padding:5px;margin:2px;border:1px solid #000}.select-mat-option .mat-option-text:first-letter{text-transform:capitalize}.mat-select-disabled .mat-select-arrow{display:none}.mat-select-panel-wrap{top:15px;position:relative}.mat-select-panel{max-width:100%!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }], encapsulation: i0.ViewEncapsulation.None });
65
+ FabFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: FabFilterComponent, selector: "app-fab-filter", inputs: { filter: "filter" }, outputs: { filterchanged: "filterchanged" }, ngImport: i0, template: "<div class=\"row\" *ngIf=\"!filter.hidden\">\r\n <div class=\"select\">\r\n <mat-form-field appearance=\"fill\" class=\"full-width\">\r\n <mat-label class=\"select-mat-label\">\r\n {{ TranslateService.GetActiveValueFilter(filter.id) }}<span *ngIf=\"filter.blocksProductSelect\">*</span>\r\n </mat-label>\r\n <mat-select [(ngModel)]=\"SelectedOptionId\" (selectionChange)=\"SelectOption()\" [disabled]=\"IsDisabled()\">\r\n <mat-option *ngFor=\"let option of filter.options\" [value]=\"option.id\" class=\"select-mat-option\">\r\n <ng-container *ngIf=\"option.colour != null && option.colour != ''\">\r\n <span [ngStyle]=\"{'background-color': option.colour}\" class=\"colour-preview\">\r\n &nbsp;\r\n &nbsp;\r\n </span>\r\n </ng-container>\r\n\r\n {{ TranslateService.GetActiveValueFilterOption(option.id) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"GetSelectedOption() != null && GetSelectedOption().colour != null && GetSelectedOption().colour != ''\">\r\n <div [ngStyle]=\"{'background-color': GetSelectedOption().colour}\" class=\"colour-preview-selected\">\r\n &nbsp;\r\n &nbsp;\r\n </div>\r\n </div>\r\n <div class=\"reset\" *ngIf=\"filter.selectedOption != 0\" (click)=\"ResetSelection()\">\r\n <mat-icon class=\"icon-position clear\" [inline]=\"true\">clear</mat-icon>\r\n </div>\r\n</div>\r\n", styles: ["app-fab-filter .select-mat-label:first-letter{text-transform:capitalize}app-fab-filter .mat-select-min-line:first-letter{text-transform:capitalize}app-fab-filter .row{display:flex}app-fab-filter .full-width{width:100%}app-fab-filter .icon-position{margin-top:14px}app-fab-filter .select{flex:auto}app-fab-filter .reset{cursor:pointer;font-size:26px}app-fab-filter .colour-preview-selected{padding:5px;margin-left:5px;margin-top:8px;border:1px solid #000}.colour-preview{padding:5px;margin:2px;border:1px solid #000}.select-mat-option .mat-option-text:first-letter{text-transform:capitalize}.mat-select-disabled .mat-select-arrow{display:none}.mat-select-panel-wrap{top:15px;position:relative}.mat-select-panel{max-width:100%!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }], encapsulation: i0.ViewEncapsulation.None });
51
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: FabFilterComponent, decorators: [{
52
67
  type: Component,
53
- args: [{ selector: 'app-fab-filter', encapsulation: ViewEncapsulation.None, template: "<div class=\"row\" *ngIf=\"!filter.hidden\">\r\n <div class=\"select\">\r\n <mat-form-field appearance=\"fill\" class=\"full-width\">\r\n <mat-label class=\"select-mat-label\">\r\n {{ TranslateService.GetActiveValueFilter(filter.id) }}<span *ngIf=\"filter.blocksProductSelect\">*</span>\r\n </mat-label>\r\n <mat-select [(ngModel)]=\"SelectedOptionId\" (selectionChange)=\"SelectOption()\" [disabled]=\"IsDisabled()\">\r\n <mat-option *ngFor=\"let option of filter.options\" [value]=\"option.id\" class=\"select-mat-option\">\r\n <ng-container *ngIf=\"option.colour != null && option.colour != ''\">\r\n <span [ngStyle]=\"{'background-color': option.colour}\" class=\"colour-preview\">\r\n &nbsp;\r\n &nbsp;\r\n </span>\r\n </ng-container>\r\n \r\n {{ TranslateService.GetActiveValueFilterOption(option.id) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"reset\" *ngIf=\"filter.selectedOption != 0\" (click)=\"ResetSelection()\">\r\n <mat-icon class=\"icon-position clear\" [inline]=\"true\">clear</mat-icon>\r\n </div>\r\n</div>\r\n", styles: ["app-fab-filter .select-mat-label:first-letter{text-transform:capitalize}app-fab-filter .mat-select-min-line:first-letter{text-transform:capitalize}app-fab-filter .row{display:flex}app-fab-filter .full-width{width:100%}app-fab-filter .icon-position{margin-top:14px}app-fab-filter .select{flex:auto}app-fab-filter .reset{cursor:pointer;font-size:26px}.colour-preview{padding:5px;margin:2px;border:1px solid #000}.select-mat-option .mat-option-text:first-letter{text-transform:capitalize}.mat-select-disabled .mat-select-arrow{display:none}.mat-select-panel-wrap{top:15px;position:relative}.mat-select-panel{max-width:100%!important}\n"] }]
68
+ args: [{ selector: 'app-fab-filter', encapsulation: ViewEncapsulation.None, template: "<div class=\"row\" *ngIf=\"!filter.hidden\">\r\n <div class=\"select\">\r\n <mat-form-field appearance=\"fill\" class=\"full-width\">\r\n <mat-label class=\"select-mat-label\">\r\n {{ TranslateService.GetActiveValueFilter(filter.id) }}<span *ngIf=\"filter.blocksProductSelect\">*</span>\r\n </mat-label>\r\n <mat-select [(ngModel)]=\"SelectedOptionId\" (selectionChange)=\"SelectOption()\" [disabled]=\"IsDisabled()\">\r\n <mat-option *ngFor=\"let option of filter.options\" [value]=\"option.id\" class=\"select-mat-option\">\r\n <ng-container *ngIf=\"option.colour != null && option.colour != ''\">\r\n <span [ngStyle]=\"{'background-color': option.colour}\" class=\"colour-preview\">\r\n &nbsp;\r\n &nbsp;\r\n </span>\r\n </ng-container>\r\n\r\n {{ TranslateService.GetActiveValueFilterOption(option.id) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"GetSelectedOption() != null && GetSelectedOption().colour != null && GetSelectedOption().colour != ''\">\r\n <div [ngStyle]=\"{'background-color': GetSelectedOption().colour}\" class=\"colour-preview-selected\">\r\n &nbsp;\r\n &nbsp;\r\n </div>\r\n </div>\r\n <div class=\"reset\" *ngIf=\"filter.selectedOption != 0\" (click)=\"ResetSelection()\">\r\n <mat-icon class=\"icon-position clear\" [inline]=\"true\">clear</mat-icon>\r\n </div>\r\n</div>\r\n", styles: ["app-fab-filter .select-mat-label:first-letter{text-transform:capitalize}app-fab-filter .mat-select-min-line:first-letter{text-transform:capitalize}app-fab-filter .row{display:flex}app-fab-filter .full-width{width:100%}app-fab-filter .icon-position{margin-top:14px}app-fab-filter .select{flex:auto}app-fab-filter .reset{cursor:pointer;font-size:26px}app-fab-filter .colour-preview-selected{padding:5px;margin-left:5px;margin-top:8px;border:1px solid #000}.colour-preview{padding:5px;margin:2px;border:1px solid #000}.select-mat-option .mat-option-text:first-letter{text-transform:capitalize}.mat-select-disabled .mat-select-arrow{display:none}.mat-select-panel-wrap{top:15px;position:relative}.mat-select-panel{max-width:100%!important}\n"] }]
54
69
  }], ctorParameters: function () { return [{ type: i1.FabrikantenService }, { type: i2.TranslateService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filter: [{
55
70
  type: Input
56
71
  }], filterchanged: [{
57
72
  type: Output
58
73
  }] } });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFiLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2NvbXBvbmVudHMvZmFiLWZpbHRlci9mYWItZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItZmlsdGVyL2ZhYi1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUFXckgsTUFBTSxPQUFPLGtCQUFrQjtJQXNCN0IsWUFDVSxrQkFBc0MsRUFDdkMsZ0JBQWtDLEVBQ2pDLGlCQUFvQztRQUZwQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3ZDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUxwQyxrQkFBYSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO0lBS3JCLENBQUM7SUFyQm5ELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsS0FBaUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBRXBELElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsRUFBRTtZQUM5QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNuQyxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3ZDO1NBQ0Y7SUFDSCxDQUFDO0lBU0QsUUFBUTtJQUNSLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTSxVQUFVO1FBRWYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzsrR0FqRFUsa0JBQWtCO21HQUFsQixrQkFBa0IsaUlDWC9CLDRyQ0F3QkE7MkZEYmEsa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGdCQUFnQixpQkFHWCxpQkFBaUIsQ0FBQyxJQUFJO3dLQVV4QixNQUFNO3NCQUFsQixLQUFLO2dCQVlJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmFicmlrYW50ZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFicmlrYW50ZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuRmlsdGVyVmlld01vZGVsIH0gZnJvbSAnLi4vLi4vc3dhZ2dlci9Td2FnZ2VyQ2xpZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWZhYi1maWx0ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mYWItZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mYWItZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmFiRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgU2VsZWN0ZWRPcHRpb25JZDogbnVtYmVyO1xyXG5cclxuICBfZmlsdGVyOiBGYWJyaWthbnRlbkZpbHRlclZpZXdNb2RlbDtcclxuICBnZXQgZmlsdGVyKCk6IEZhYnJpa2FudGVuRmlsdGVyVmlld01vZGVsIHtcclxuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBGYWJyaWthbnRlbkZpbHRlclZpZXdNb2RlbCkge1xyXG4gICAgdGhpcy5fZmlsdGVyID0gdmFsdWU7XHJcbiAgICB0aGlzLlNlbGVjdGVkT3B0aW9uSWQgPSB0aGlzLl9maWx0ZXIuc2VsZWN0ZWRPcHRpb247XHJcblxyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRPcHRpb25JZCA9PSAwKSB7XHJcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5fZmlsdGVyLm9wdGlvbnM7XHJcbiAgICAgIGlmIChvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRPcHRpb25JZCA9IG9wdGlvbnNbMF0uaWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBmaWx0ZXJjaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBGYWJyaWthbnRlblNlcnZpY2U6IEZhYnJpa2FudGVuU2VydmljZSxcclxuICAgIHB1YmxpYyBUcmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RPcHRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5TZWxlY3RPcHRpb24odGhpcy5maWx0ZXIuaWQsIHRoaXMuU2VsZWN0ZWRPcHRpb25JZCwgdGhpcy5DaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVzZXRTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5SZXNldFNlbGVjdGlvbkZpbHRlcih0aGlzLmZpbHRlciwgdGhpcy5DaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgSXNEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuXHJcbiAgICBpZiAodGhpcy5maWx0ZXIuc2VsZWN0ZWRPcHRpb24gIT0gMCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWx0ZXIub3B0aW9ucz8ubGVuZ3RoID09IDEpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIWZpbHRlci5oaWRkZW5cIj5cclxuICA8ZGl2IGNsYXNzPVwic2VsZWN0XCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImZ1bGwtd2lkdGhcIj5cclxuICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cInNlbGVjdC1tYXQtbGFiZWxcIj5cclxuICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZUZpbHRlcihmaWx0ZXIuaWQpIH19PHNwYW4gKm5nSWY9XCJmaWx0ZXIuYmxvY2tzUHJvZHVjdFNlbGVjdFwiPio8L3NwYW4+XHJcbiAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cIlNlbGVjdGVkT3B0aW9uSWRcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIlNlbGVjdE9wdGlvbigpXCIgW2Rpc2FibGVkXT1cIklzRGlzYWJsZWQoKVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLmlkXCIgY2xhc3M9XCJzZWxlY3QtbWF0LW9wdGlvblwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbi5jb2xvdXIgIT0gbnVsbCAmJiBvcHRpb24uY29sb3VyICE9ICcnXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IG9wdGlvbi5jb2xvdXJ9XCIgY2xhc3M9XCJjb2xvdXItcHJldmlld1wiPlxyXG4gICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZUZpbHRlck9wdGlvbihvcHRpb24uaWQpIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJyZXNldFwiICpuZ0lmPVwiZmlsdGVyLnNlbGVjdGVkT3B0aW9uICE9IDBcIiAoY2xpY2spPVwiUmVzZXRTZWxlY3Rpb24oKVwiPlxyXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1wb3NpdGlvbiBjbGVhclwiIFtpbmxpbmVdPVwidHJ1ZVwiPmNsZWFyPC9tYXQtaWNvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFiLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2NvbXBvbmVudHMvZmFiLWZpbHRlci9mYWItZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItZmlsdGVyL2ZhYi1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUFXckgsTUFBTSxPQUFPLGtCQUFrQjtJQXNCN0IsWUFDVSxrQkFBc0MsRUFDdkMsZ0JBQWtDLEVBQ2pDLGlCQUFvQztRQUZwQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3ZDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUxwQyxrQkFBYSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO0lBS3JCLENBQUM7SUFyQm5ELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsS0FBaUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBRXBELElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsRUFBRTtZQUM5QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNuQyxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3ZDO1NBQ0Y7SUFDSCxDQUFDO0lBU0QsUUFBUTtJQUNSLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTSxVQUFVO1FBRWYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQztpQkFDSTtnQkFDSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNwRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDN0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDaEM7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzsrR0FsRVUsa0JBQWtCO21HQUFsQixrQkFBa0IsaUlDWC9CLHU5Q0E4QkE7MkZEbkJhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxnQkFBZ0IsaUJBR1gsaUJBQWlCLENBQUMsSUFBSTt3S0FVeEIsTUFBTTtzQkFBbEIsS0FBSztnQkFZSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhYnJpa2FudGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGYWJyaWthbnRlbkZpbHRlck9wdGlvblZpZXdNb2RlbCwgRmFicmlrYW50ZW5GaWx0ZXJWaWV3TW9kZWwgfSBmcm9tICcuLi8uLi9zd2FnZ2VyL1N3YWdnZXJDbGllbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZmFiLWZpbHRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZhYi1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZhYi1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGYWJGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHB1YmxpYyBTZWxlY3RlZE9wdGlvbklkOiBudW1iZXI7XHJcblxyXG4gIF9maWx0ZXI6IEZhYnJpa2FudGVuRmlsdGVyVmlld01vZGVsO1xyXG4gIGdldCBmaWx0ZXIoKTogRmFicmlrYW50ZW5GaWx0ZXJWaWV3TW9kZWwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IEZhYnJpa2FudGVuRmlsdGVyVmlld01vZGVsKSB7XHJcbiAgICB0aGlzLl9maWx0ZXIgPSB2YWx1ZTtcclxuICAgIHRoaXMuU2VsZWN0ZWRPcHRpb25JZCA9IHRoaXMuX2ZpbHRlci5zZWxlY3RlZE9wdGlvbjtcclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZE9wdGlvbklkID09IDApIHtcclxuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLl9maWx0ZXIub3B0aW9ucztcclxuICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZE9wdGlvbklkID0gb3B0aW9uc1swXS5pZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIGZpbHRlcmNoYW5nZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIEZhYnJpa2FudGVuU2VydmljZTogRmFicmlrYW50ZW5TZXJ2aWNlLFxyXG4gICAgcHVibGljIFRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdE9wdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLlNlbGVjdE9wdGlvbih0aGlzLmZpbHRlci5pZCwgdGhpcy5TZWxlY3RlZE9wdGlvbklkLCB0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZXNldFNlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLlJlc2V0U2VsZWN0aW9uRmlsdGVyKHRoaXMuZmlsdGVyLCB0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBJc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGlmICh0aGlzLmZpbHRlci5zZWxlY3RlZE9wdGlvbiAhPSAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpbHRlci5vcHRpb25zPy5sZW5ndGggPT0gMSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0U2VsZWN0ZWRPcHRpb24oKTogRmFicmlrYW50ZW5GaWx0ZXJPcHRpb25WaWV3TW9kZWwgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLl9maWx0ZXIub3B0aW9ucyAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLl9maWx0ZXIub3B0aW9ucy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXIub3B0aW9uc1swXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlci5vcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZmlsdGVyLnNlbGVjdGVkT3B0aW9uID09IHRoaXMuX2ZpbHRlci5vcHRpb25zW2ldLmlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXIub3B0aW9uc1tpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFmaWx0ZXIuaGlkZGVuXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNlbGVjdFwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCIgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XHJcbiAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJzZWxlY3QtbWF0LWxhYmVsXCI+XHJcbiAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZUZpbHRlcihmaWx0ZXIuaWQpIH19PHNwYW4gKm5nSWY9XCJmaWx0ZXIuYmxvY2tzUHJvZHVjdFNlbGVjdFwiPio8L3NwYW4+XHJcbiAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cIlNlbGVjdGVkT3B0aW9uSWRcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIlNlbGVjdE9wdGlvbigpXCIgW2Rpc2FibGVkXT1cIklzRGlzYWJsZWQoKVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLmlkXCIgY2xhc3M9XCJzZWxlY3QtbWF0LW9wdGlvblwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbi5jb2xvdXIgIT0gbnVsbCAmJiBvcHRpb24uY29sb3VyICE9ICcnXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IG9wdGlvbi5jb2xvdXJ9XCIgY2xhc3M9XCJjb2xvdXItcHJldmlld1wiPlxyXG4gICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlRmlsdGVyT3B0aW9uKG9wdGlvbi5pZCkgfX1cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cIkdldFNlbGVjdGVkT3B0aW9uKCkgIT0gbnVsbCAmJiBHZXRTZWxlY3RlZE9wdGlvbigpLmNvbG91ciAhPSBudWxsICYmIEdldFNlbGVjdGVkT3B0aW9uKCkuY29sb3VyICE9ICcnXCI+XHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IEdldFNlbGVjdGVkT3B0aW9uKCkuY29sb3VyfVwiIGNsYXNzPVwiY29sb3VyLXByZXZpZXctc2VsZWN0ZWRcIj5cclxuICAgICAgJm5ic3A7XHJcbiAgICAgICZuYnNwO1xyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJlc2V0XCIgKm5nSWY9XCJmaWx0ZXIuc2VsZWN0ZWRPcHRpb24gIT0gMFwiIChjbGljayk9XCJSZXNldFNlbGVjdGlvbigpXCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLXBvc2l0aW9uIGNsZWFyXCIgW2lubGluZV09XCJ0cnVlXCI+Y2xlYXI8L21hdC1pY29uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19