@valtimo/components 10.5.1 → 10.6.0

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.
Files changed (50) hide show
  1. package/assets/css/carbon.scss +43 -65
  2. package/esm2020/lib/components/confirmation-modal/confirmation-modal.component.mjs +5 -4
  3. package/esm2020/lib/components/confirmation-modal/confirmation-modal.module.mjs +19 -4
  4. package/esm2020/lib/components/left-sidebar/left-sidebar.component.mjs +24 -12
  5. package/esm2020/lib/components/list/list.component.mjs +5 -8
  6. package/esm2020/lib/components/multi-input/carbon-multi-input.component.mjs +9 -3
  7. package/esm2020/lib/components/page-title/page-title.component.mjs +8 -2
  8. package/esm2020/lib/components/right-sidebar/right-sidebar.component.mjs +49 -8
  9. package/esm2020/lib/components/search-fields/search-fields.component.mjs +14 -2
  10. package/esm2020/lib/components/topbar/topbar.component.mjs +4 -3
  11. package/esm2020/lib/components/view-content/type-converters/booleanTypeConverter.mjs +4 -6
  12. package/esm2020/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +2 -2
  13. package/esm2020/lib/directives/index.mjs +18 -0
  14. package/esm2020/lib/directives/valtimo-ibm-modal-directive.module.mjs +33 -0
  15. package/esm2020/lib/directives/valtimo-ibm-modal.directive.mjs +68 -0
  16. package/esm2020/lib/models/list.model.mjs +1 -1
  17. package/esm2020/lib/services/shell.service.mjs +20 -3
  18. package/esm2020/public_api.mjs +2 -1
  19. package/fesm2015/valtimo-components.mjs +264 -48
  20. package/fesm2015/valtimo-components.mjs.map +1 -1
  21. package/fesm2020/valtimo-components.mjs +261 -47
  22. package/fesm2020/valtimo-components.mjs.map +1 -1
  23. package/lib/components/confirmation-modal/confirmation-modal.module.d.ts +2 -1
  24. package/lib/components/confirmation-modal/confirmation-modal.module.d.ts.map +1 -1
  25. package/lib/components/left-sidebar/left-sidebar.component.d.ts.map +1 -1
  26. package/lib/components/list/list.component.d.ts.map +1 -1
  27. package/lib/components/multi-input/carbon-multi-input.component.d.ts +3 -1
  28. package/lib/components/multi-input/carbon-multi-input.component.d.ts.map +1 -1
  29. package/lib/components/page-title/page-title.component.d.ts +1 -0
  30. package/lib/components/page-title/page-title.component.d.ts.map +1 -1
  31. package/lib/components/right-sidebar/right-sidebar.component.d.ts +10 -3
  32. package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
  33. package/lib/components/search-fields/search-fields.component.d.ts +3 -1
  34. package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
  35. package/lib/components/topbar/topbar.component.d.ts +1 -0
  36. package/lib/components/topbar/topbar.component.d.ts.map +1 -1
  37. package/lib/components/view-content/type-converters/booleanTypeConverter.d.ts.map +1 -1
  38. package/lib/directives/index.d.ts +3 -0
  39. package/lib/directives/index.d.ts.map +1 -0
  40. package/lib/directives/valtimo-ibm-modal-directive.module.d.ts +9 -0
  41. package/lib/directives/valtimo-ibm-modal-directive.module.d.ts.map +1 -0
  42. package/lib/directives/valtimo-ibm-modal.directive.d.ts +17 -0
  43. package/lib/directives/valtimo-ibm-modal.directive.d.ts.map +1 -0
  44. package/lib/models/list.model.d.ts +1 -0
  45. package/lib/models/list.model.d.ts.map +1 -1
  46. package/lib/services/shell.service.d.ts +4 -0
  47. package/lib/services/shell.service.d.ts.map +1 -1
  48. package/package.json +4 -3
  49. package/public_api.d.ts +1 -0
  50. package/public_api.d.ts.map +1 -1
@@ -16,6 +16,7 @@
16
16
  import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
17
17
  import { BehaviorSubject, fromEvent } from 'rxjs';
18
18
  import { debounceTime, take } from 'rxjs/operators';
19
+ import { get as _get } from 'lodash';
19
20
  import * as i0 from "@angular/core";
20
21
  import * as i1 from "../view-content/view-content.service";
21
22
  import * as i2 from "ngx-logger";
@@ -113,11 +114,7 @@ export class ListComponent {
113
114
  const key = definitionKey.includes(customPropString)
114
115
  ? definitionKey.split(customPropString)[1]
115
116
  : definitionKey;
116
- const resolvedObjValue = obj[key] != null
117
- ? obj[key]
118
- : key.split('.').reduce(function (prev, curr) {
119
- return prev ? prev[curr] : null;
120
- }, obj || self);
117
+ const resolvedObjValue = _get(obj, key, null);
121
118
  return this.viewContentService.get(resolvedObjValue, definition);
122
119
  }
123
120
  switchView(type) {
@@ -161,10 +158,10 @@ export class ListComponent {
161
158
  }
162
159
  ListComponent.PAGINATION_SIZE = 'PaginationSize';
163
160
  ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ListComponent, deps: [{ token: i1.ViewContentService }, { token: i2.NGXLogger }], target: i0.ɵɵFactoryTarget.Component });
164
- ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ListComponent, selector: "valtimo-list", inputs: { items: "items", fields: "fields", pagination: "pagination", viewMode: "viewMode", isSearchable: "isSearchable", header: "header", actions: "actions", paginationIdentifier: "paginationIdentifier", initialSortState: "initialSortState", lastColumnTemplate: "lastColumnTemplate" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"{{ 'list.search' | translate }}\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter : searchModel; let i = index\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item, $event)\"\n ></i>\n </td>\n <td *ngIf=\"lastColumnTemplate\">\n <ng-container\n *ngTemplateOutlet=\"lastColumnTemplate; context: {index: i, length: items.length}\"\n ></ng-container>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter : searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter : searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter : searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate : {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate : {number: (items | listFilter : searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter : searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item, $event)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem;display:flex;flex-direction:column}.page-count strong:first-child{margin-bottom:6px}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"], dependencies: [{ 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: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.NgbPagination, selector: "ngb-pagination", inputs: ["disabled", "boundaryLinks", "directionLinks", "ellipses", "rotate", "collectionSize", "maxSize", "page", "pageSize", "size"], outputs: ["pageChange"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.ListFilterPipe, name: "listFilter" }] });
161
+ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ListComponent, selector: "valtimo-list", inputs: { items: "items", fields: "fields", pagination: "pagination", viewMode: "viewMode", isSearchable: "isSearchable", header: "header", actions: "actions", paginationIdentifier: "paginationIdentifier", initialSortState: "initialSortState", lastColumnTemplate: "lastColumnTemplate" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"{{ 'list.search' | translate }}\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter : searchModel; let i = index\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container\n *ngIf=\"\n listItemField.type === '' && {\n valueTranslationKey: 'viewTypeConverter.' + listItemField.value,\n valueTranslation: 'viewTypeConverter.' + listItemField.value | translate\n } as vars\n \"\n >\n {{\n listItemField.value\n ? vars.valueTranslation !== vars.valueTranslationKey\n ? vars.valueTranslation\n : listItemField.value\n : '-'\n }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item, $event)\"\n ></i>\n </td>\n <td *ngIf=\"lastColumnTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n lastColumnTemplate;\n context: {index: i, length: items.length, item: item}\n \"\n ></ng-container>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter : searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter : searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter : searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage'\n | translate\n : {current: pagination.page > 0 ? pagination.page : 1, total: getTotalPageCount()}\n }}</strong>\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate : {number: (items | listFilter : searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter : searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item, $event)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem;display:flex;flex-direction:column}.page-count strong:first-child{margin-bottom:6px}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"], dependencies: [{ 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: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.NgbPagination, selector: "ngb-pagination", inputs: ["disabled", "boundaryLinks", "directionLinks", "ellipses", "rotate", "collectionSize", "maxSize", "page", "pageSize", "size"], outputs: ["pageChange"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.ListFilterPipe, name: "listFilter" }] });
165
162
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ListComponent, decorators: [{
166
163
  type: Component,
167
- args: [{ selector: 'valtimo-list', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"{{ 'list.search' | translate }}\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter : searchModel; let i = index\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item, $event)\"\n ></i>\n </td>\n <td *ngIf=\"lastColumnTemplate\">\n <ng-container\n *ngTemplateOutlet=\"lastColumnTemplate; context: {index: i, length: items.length}\"\n ></ng-container>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter : searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter : searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter : searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate : {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate : {number: (items | listFilter : searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter : searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item, $event)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem;display:flex;flex-direction:column}.page-count strong:first-child{margin-bottom:6px}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"] }]
164
+ args: [{ selector: 'valtimo-list', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"{{ 'list.search' | translate }}\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter : searchModel; let i = index\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container\n *ngIf=\"\n listItemField.type === '' && {\n valueTranslationKey: 'viewTypeConverter.' + listItemField.value,\n valueTranslation: 'viewTypeConverter.' + listItemField.value | translate\n } as vars\n \"\n >\n {{\n listItemField.value\n ? vars.valueTranslation !== vars.valueTranslationKey\n ? vars.valueTranslation\n : listItemField.value\n : '-'\n }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item, $event)\"\n ></i>\n </td>\n <td *ngIf=\"lastColumnTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n lastColumnTemplate;\n context: {index: i, length: items.length, item: item}\n \"\n ></ng-container>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter : searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter : searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter : searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage'\n | translate\n : {current: pagination.page > 0 ? pagination.page : 1, total: getTotalPageCount()}\n }}</strong>\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate : {number: (items | listFilter : searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter : searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item, $event)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem;display:flex;flex-direction:column}.page-count strong:first-child{margin-bottom:6px}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"] }]
168
165
  }], ctorParameters: function () { return [{ type: i1.ViewContentService }, { type: i2.NGXLogger }]; }, propDecorators: { items: [{
169
166
  type: Input
170
167
  }], fields: [{
@@ -199,4 +196,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
199
196
  type: ViewChild,
200
197
  args: ['searchBox']
201
198
  }] } });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQVFsRCxNQUFNLE9BQU8sYUFBYTtJQStCeEIsWUFBb0Isa0JBQXNDLEVBQVUsTUFBaUI7UUFBakUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUF0QjVFLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFLbkIsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLGdCQUFXLEdBQTRCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0QsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFHdkIsaUNBQTRCLEdBQUcsSUFBSSxDQUFDO1FBR2xDLFVBQUssR0FBRyxJQUFJLGVBQWUs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QUFmLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFNaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGlyZWN0aW9uLCBTb3J0U3RhdGV9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnR9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpc3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSBzdGF0aWMgUEFHSU5BVElPTl9TSVpFID0gJ1BhZ2luYXRpb25TaXplJztcblxuICBASW5wdXQoKSBpdGVtczogQXJyYXk8YW55PjtcbiAgQElucHV0KCkgZmllbGRzOiBBcnJheTxhbnk+O1xuICBASW5wdXQoKSBwYWdpbmF0aW9uPzogYW55O1xuICBASW5wdXQoKSB2aWV3TW9kZT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhlYWRlcj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFjdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHBhZ2luYXRpb25JZGVudGlmaWVyPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsU29ydFN0YXRlOiBTb3J0U3RhdGU7XG4gIEBJbnB1dCgpIGxhc3RDb2x1bW5UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvblNldDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWFyY2g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc29ydENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxTb3J0U3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyBoZWFkZXJQcm92aWRlZCA9IGZhbHNlO1xuICBwdWJsaWMgdmlld0xpc3RBczogc3RyaW5nO1xuICBwdWJsaWMgc2VhcmNoTW9kZWw6IHN0cmluZztcbiAgcHVibGljIHJlZ0V4cFN0cmluZ1JlbW92ZVVuZGVyc2NvcmUgPSAvXy9nO1xuICBAVmlld0NoaWxkKCdzZWFyY2hCb3gnKSBzZWFyY2hCb3g6IEVsZW1lbnRSZWY7XG5cbiAgcmVhZG9ubHkgc29ydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNvcnRTdGF0ZT4oe1xuICAgIHN0YXRlOiB7bmFtZTogJycsIGRpcmVjdGlvbjogJ0RFU0MnfSxcbiAgICBpc1NvcnRpbmc6IGZhbHNlLFxuICB9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZpZXdDb250ZW50U2VydmljZTogVmlld0NvbnRlbnRTZXJ2aWNlLCBwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyKSB7XG4gICAgdGhpcy52aWV3TGlzdEFzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3ZpZXdMaXN0QXMnKSB8fCAndGFibGUnO1xuICB9XG5cbiAgbG9hZFBhZ2luYXRpb25TaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtMaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gXG4gICAgKTtcbiAgICBpZiAoZW50cmllcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uLnNpemUgPSArZW50cmllcztcbiAgICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KCtlbnRyaWVzKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdQYWdpbmF0aW9uIGxvYWRlZCBmcm9tIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gQ3VycmVudDogJywgZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAnUGFnaW5hdGlvbiBkb2VzIE5PVCBleGlzdCBpbiBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIGxpc3QuIFdpbGwgdXNlIGRlZmF1bHQuIENoYW5nZSBpdCB0byBjcmVhdGUgYW4gZW50cnkuJ1xuICAgICAgKTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KDEwKTtcbiAgICB9XG4gIH1cblxuICBzZXRQYWdpbmF0aW9uU2l6ZShudW1iZXJPZkVudHJpZXM6IHN0cmluZykge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgYCR7dGhpcy5wYWdpbmF0aW9uSWRlbnRpZmllcn0ke0xpc3RDb21wb25lbnQuUEFHSU5BVElPTl9TSVpFfWAsXG4gICAgICBudW1iZXJPZkVudHJpZXNcbiAgICApO1xuICAgIHRoaXMucGFnaW5hdGlvbi5zaXplID0gbnVtYmVyT2ZFbnRyaWVzO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdQYWdpbmF0aW9uIHNldCBpbiBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIGxpc3Q6ICcsIG51bWJlck9mRW50cmllcyk7XG4gICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQobnVtYmVyT2ZFbnRyaWVzKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMubG9hZFBhZ2luYXRpb25TaXplKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5pdGlhbFNvcnRTdGF0ZSkge1xuICAgICAgdGhpcy5zb3J0JC5uZXh0KHRoaXMuaW5pdGlhbFNvcnRTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLml0ZW1zICYmIGNoYW5nZXMuaXRlbXMuY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybUxpc3RJdGVtc01hdGNoRmllbGRzKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXM/LmluaXRpYWxTb3J0U3RhdGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5zb3J0JC5uZXh0KGNoYW5nZXM/LmluaXRpYWxTb3J0U3RhdGU/LmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmlzU2VhcmNoYWJsZSkge1xuICAgICAgZnJvbUV2ZW50KHRoaXMuc2VhcmNoQm94Lm5hdGl2ZUVsZW1lbnQsICdrZXl1cCcpXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VhcmNoQm94Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBjdXN0b20gc2VhcmNoIGNhbGxiYWsgaXMgc3BlY2lmaWVkLCBwZXJoYXBzIHRvIHF1ZXJ5IG9uIHRoZSBzZXJ2ZXIgc2lkZVxuICAgICAgICAgICAgdGhpcy5zZWFyY2guZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoTW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2Zvcm1MaXN0SXRlbXNNYXRjaEZpZWxkcygpIHtcbiAgICBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLmZpZWxkcykge1xuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLmxpc3RJdGVtRmllbGRzID0gdGhpcy5maWVsZHMubWFwKGZpZWxkID0+ICh7XG4gICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUgfHwgJycsXG4gICAgICAgICAgdmFsdWU6IHRoaXMucmVzb2x2ZU9iamVjdChmaWVsZCwgaXRlbSksXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNsaWNrUm93KGl0ZW0pIHtcbiAgICB0aGlzLnJvd0NsaWNrZWQuZW1pdChpdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlT2JqZWN0KGRlZmluaXRpb246IGFueSwgb2JqOiBhbnkpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uS2V5ID0gZGVmaW5pdGlvbi5rZXk7XG4gICAgY29uc3QgY3VzdG9tUHJvcFN0cmluZyA9ICckLic7XG4gICAgY29uc3Qga2V5ID0gZGVmaW5pdGlvbktleS5pbmNsdWRlcyhjdXN0b21Qcm9wU3RyaW5nKVxuICAgICAgPyBkZWZpbml0aW9uS2V5LnNwbGl0KGN1c3RvbVByb3BTdHJpbmcpWzFdXG4gICAgICA6IGRlZmluaXRpb25LZXk7XG4gICAgY29uc3QgcmVzb2x2ZWRPYmpWYWx1ZSA9XG4gICAgICBvYmpba2V5XSAhPSBudWxsXG4gICAgICAgID8gb2JqW2tleV1cbiAgICAgICAgOiBrZXkuc3BsaXQoJy4nKS5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cnIpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2ID8gcHJldltjdXJyXSA6IG51bGw7XG4gICAgICAgICAgfSwgb2JqIHx8IHNlbGYpO1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZW50U2VydmljZS5nZXQocmVzb2x2ZWRPYmpWYWx1ZSwgZGVmaW5pdGlvbik7XG4gIH1cblxuICBwdWJsaWMgc3dpdGNoVmlldyh0eXBlKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ZpZXdMaXN0QXMnLCB0eXBlKTtcbiAgICB0aGlzLnZpZXdMaXN0QXMgPSB0eXBlO1xuICB9XG5cbiAgcHVibGljIGdldFRvdGFsUGFnZUNvdW50KCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplIC8gdGhpcy5wYWdpbmF0aW9uLnNpemUpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpY2tQYWdpbmF0aW9uKHBhZ2UpIHtcbiAgICB0aGlzLnBhZ2luYXRpb25DbGlja2VkLmVtaXQocGFnZSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRmllbGRDbGljayhrZXk6IHN0cmluZywgc29ydGFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBkZXNjOiBEaXJlY3Rpb24gPSAnREVTQyc7XG4gICAgY29uc3QgYXNjOiBEaXJlY3Rpb24gPSAnQVNDJztcblxuICAgIGlmICghc29ydGFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHNvcnQgPT4ge1xuICAgICAgbGV0IG5ld1N0YXRlOiBTb3J0U3RhdGU7XG5cbiAgICAgIGlmIChzb3J0LnN0YXRlLm5hbWUgPT09IGtleSkge1xuICAgICAgICBpZiAoIXNvcnQuaXNTb3J0aW5nKSB7XG4gICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246IGRlc2N9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gZGVzYykge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7Li4uc29ydCwgc3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246IGFzY319O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHtzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogZGVzY30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogZGVzY30sIGlzU29ydGluZzogdHJ1ZX07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ydCQubmV4dChuZXdTdGF0ZSk7XG4gICAgICB0aGlzLnNvcnRDaGFuZ2VkLmVtaXQobmV3U3RhdGUpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXY+XG4gIDxkaXYgKm5nSWY9XCIoaXRlbXM/Lmxlbmd0aCA+IDAgJiYgZmllbGRzPy5sZW5ndGggPiAwKSB8fCBoZWFkZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgc2VhcmNoLWhvbGRlciBiZy1saWdodFwiXG4gICAgICBbbmdDbGFzc109XCJ7J3BiLTQgcHQtNCc6ICFoZWFkZXJ9XCJcbiAgICAgICpuZ0lmPVwiaXNTZWFyY2hhYmxlIHx8IHZpZXdNb2RlIHx8IGhlYWRlclwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImFsaWduLXNlbGYtc3RhcnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG8gcm93XCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICpuZ0lmPVwiaXNTZWFyY2hhYmxlXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBjb2wtc20tOFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2xpc3Quc2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgI3NlYXJjaEJveFxuICAgICAgICAvPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInN3aXRjaC12aWV3LWhvbGRlciBidG4tZ3JvdXAgY29sLXNtLTQgbXQtMSBtdC1zbS0wXCJcbiAgICAgICAgICByb2xlPVwiZ3JvdXBcIlxuICAgICAgICAgICpuZ0lmPVwidmlld01vZGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidmlld0xpc3RBcyA9PT0gJ3RhYmxlJyA/ICdidG4tcHJpbWFyeScgOiAnYnRuLWRlZmF1bHQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hWaWV3KCd0YWJsZScpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS12aWV3LWhlYWRsaW5lIHZpZXctaWNvblwiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ2aWV3TGlzdEFzID09PSAndGlsZScgPyAnYnRuLXByaW1hcnknIDogJ2J0bi1kZWZhdWx0J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVmlldygndGlsZScpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS12aWV3LW1vZHVsZSB2aWV3LWljb25cIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJzXVwiPjwvbmctY29udGVudD5cblxuICA8ZGl2ICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA+IDAgJiYgZmllbGRzPy5sZW5ndGggPiAwXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgbm9Td2lwZVwiICpuZ0lmPVwiIXZpZXdNb2RlIHx8IHZpZXdMaXN0QXMgPT09ICd0YWJsZSdcIj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtaG92ZXIgbS0wXCIgKm5nSWY9XCJzb3J0JCB8IGFzeW5jIGFzIHNvcnRcIj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUZpZWxkQ2xpY2soZmllbGQua2V5LCBmaWVsZC5zb3J0YWJsZSlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgc29ydGFibGU6IGZpZWxkLnNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICdpcy1iZWluZy1zb3J0ZWQnOiBmaWVsZC5rZXkgPT09IHNvcnQuc3RhdGUubmFtZSAmJiBzb3J0LmlzU29ydGluZyxcbiAgICAgICAgICAgICAgICBhc2NlbmRpbmc6IHNvcnQuc3RhdGUuZGlyZWN0aW9uID09PSAnQVNDJ1xuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCI+XG4gICAgICAgICAgICAgIHt7IGFjdGlvbi5jb2x1bW5OYW1lIH19XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY2xpY2stYWJsZSc6IHRoaXMucm93Q2xpY2tlZC5vYnNlcnZlcnMubGVuZ3RoID4gMH1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXMgfCBsaXN0RmlsdGVyIDogc2VhcmNoTW9kZWw7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tSb3coaXRlbSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLXRvcFwiICpuZ0Zvcj1cImxldCBsaXN0SXRlbUZpZWxkIG9mIGl0ZW0ubGlzdEl0ZW1GaWVsZHNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpc3RJdGVtRmllbGQudHlwZSA9PT0gJydcIj5cbiAgICAgICAgICAgICAgICB7eyBsaXN0SXRlbUZpZWxkLnZhbHVlIHx8ICctJyB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsaXN0SXRlbUZpZWxkLnR5cGUgPT09ICdkcm9wZG93bkFjdGlvbnMnXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJkcm9wZG93bkFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bGlzdEl0ZW1GaWVsZDogbGlzdEl0ZW1GaWVsZCwgaXRlbTogaXRlbX1cIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tdG9wXCIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb24uY2FsbGJhY2soaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwibGFzdENvbHVtblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxhc3RDb2x1bW5UZW1wbGF0ZTsgY29udGV4dDoge2luZGV4OiBpLCBsZW5ndGg6IGl0ZW1zLmxlbmd0aH1cIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiKGl0ZW1zIHwgbGlzdEZpbHRlciA6IHNlYXJjaE1vZGVsKS5sZW5ndGggPT09IDBcIiBbY29sU3Bhbl09XCJmaWVsZHMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIHt7ICdsaXN0Lm5vTWF0Y2hpbmdJdGVtcycgfCB0cmFuc2xhdGUgfX08aT5cInt7IHNlYXJjaE1vZGVsIH19XCI8L2k+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiICpuZ0lmPVwidmlld01vZGUgJiYgdmlld0xpc3RBcyA9PT0gJ3RpbGUnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IHAtMlwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTYgY29sLXhsLTQgcC0yXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtcyB8IGxpc3RGaWx0ZXIgOiBzZWFyY2hNb2RlbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tSb3coaXRlbSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWNrLWFibGUgdGlsZS1ob2xkZXIgcC00XCI+XG4gICAgICAgICAgICA8ZGwgY2xhc3M9XCJyb3cgbWItMFwiICpuZ0Zvcj1cImxldCBsaXN0SXRlbUZpZWxkIG9mIGl0ZW0ubGlzdEl0ZW1GaWVsZHNcIj5cbiAgICAgICAgICAgICAgPGR0IGNsYXNzPVwiY29sLTEyIGNvbC1tZC01IHRleHQteGwtcmlnaHRcIj57eyBsaXN0SXRlbUZpZWxkLmxhYmVsIH19PC9kdD5cbiAgICAgICAgICAgICAgPGRkIGNsYXNzPVwiY29sLTEyIGNvbC1tZC03XCI+e3sgbGlzdEl0ZW1GaWVsZC52YWx1ZSB8fCAnLScgfX08L2RkPlxuICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cIihpdGVtcyB8IGxpc3RGaWx0ZXIgOiBzZWFyY2hNb2RlbCkubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAge3sgJ2xpc3Qubm9NYXRjaGluZ0l0ZW1zJyB8IHRyYW5zbGF0ZSB9fTxpPlwie3sgc2VhcmNoTW9kZWwgfX1cIjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwicGFnaW5hdGlvbi1ob2xkZXIgYmctbGlnaHQgcHgtNCBwdC00IHBiLTIgb3ZlcmZsb3ctYXV0byByb3cgbXItMCBtbC0wXCJcbiAgICAqbmdJZj1cInBhZ2luYXRpb24gJiYgaXRlbXM/Lmxlbmd0aCA+IDAgJiYgZmllbGRzPy5sZW5ndGggPiAwXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1sZWZ0IHBhZ2UtY291bnQgY29sLTRcIj5cbiAgICAgIDxzdHJvbmc+e3tcbiAgICAgICAgJ2xpc3QuY3VycmVudFBhZ2UnIHwgdHJhbnNsYXRlIDoge2N1cnJlbnQ6IHBhZ2luYXRpb24ucGFnZSwgdG90YWw6IGdldFRvdGFsUGFnZUNvdW50KCl9XG4gICAgICB9fTwvc3Ryb25nPlxuICAgICAge3tcbiAgICAgICAgcGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSA9PT0gMVxuICAgICAgICAgID8gKCdsaXN0LnNob3dpbmdSZXN1bHQnIHwgdHJhbnNsYXRlIDoge251bWJlcjogKGl0ZW1zIHwgbGlzdEZpbHRlciA6IHNlYXJjaE1vZGVsKS5sZW5ndGh9KVxuICAgICAgICAgIDogKCdsaXN0LnNob3dpbmdSZXN1bHRzJ1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBudW1iZXI6IChpdGVtcyB8IGxpc3RGaWx0ZXIgOiBzZWFyY2hNb2RlbCkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgdG90YWw6IHBhZ2luYXRpb24uY29sbGVjdGlvblNpemVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgIHt7ICdsaXN0LnNob3cnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwicGFnaW5hdGlvbi5zaXplXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0UGFnaW5hdGlvblNpemUoJGV2ZW50KVwiPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjEwXCI+MTA8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiNTBcIj41MDwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjEwMFwiPjEwMDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgICB7eyAnbGlzdC5lbnRyaWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgPG5nYi1wYWdpbmF0aW9uXG4gICAgICAgICpuZ0lmPVwicGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSA+IHBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICAgIGNsYXNzPVwiZmxvYXQtcmlnaHRcIlxuICAgICAgICBbY29sbGVjdGlvblNpemVdPVwicGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZVwiXG4gICAgICAgIFsocGFnZSldPVwicGFnaW5hdGlvbi5wYWdlXCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICAgIFttYXhTaXplXT1cInBhZ2luYXRpb24ubWF4UGFnaW5hdGlvbkl0ZW1TaXplXCJcbiAgICAgICAgW3JvdGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25DbGlja1BhZ2luYXRpb24ocGFnaW5hdGlvbi5wYWdlKVwiXG4gICAgICA+PC9uZ2ItcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm5vLXJlc3VsdHNcIiBjbGFzcz1cInAtNVwiICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIHt7ICdsaXN0Lm5vUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm5vLWZpZWxkLWRlZmluaXRpb25zXCIgY2xhc3M9XCJwLTVcIiAqbmdJZj1cIml0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID09PSAwXCI+XG4gICAge3sgJ2xpc3Qubm9GaWVsZERlZmluaXRpb25zJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duQWN0aW9ucyBsZXQtbGlzdEl0ZW1GaWVsZD1cImxpc3RJdGVtRmllbGRcIiBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgKm5nSWY9XCJsaXN0SXRlbUZpZWxkPy52YWx1ZS5sZW5ndGggPiAwXCI+XG4gICAgPGFcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGQtYmxvY2tcIlxuICAgICAgaWQ9XCJkcm9wZG93bk1lbnVcIlxuICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiYWN0aW9uLWljb24gaWNvbiBtZGkgbWRpLWRvdHMtdmVydGljYWxcIj48L2k+XG4gICAgPC9hPlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25NZW51XCI+XG4gICAgICA8YVxuICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGl0ZW0sICRldmVudClcIlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcC0yXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBsaXN0SXRlbUZpZWxkLnZhbHVlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi5pY29uQ2xhc3MgIT09IG51bGxcIj5cbiAgICAgICAgICA8aSBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCI+PC9pPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAge3sgYWN0aW9uPy5sYWJlbCB8fCAnLScgfX1cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUU7Ozs7Ozs7OztBQU9wQyxNQUFNLE9BQU8sYUFBYTtJQStCeEIsWUFBb0Isa0JBQXNDLEVBQVUsTUFBaUI7UUFBakUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUF0QjVFLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFLbkIsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLGdCQUFXLEdBQTRCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0QsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFH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QUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFNaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGlyZWN0aW9uLCBTb3J0U3RhdGV9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnR9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtnZXQgYXMgX2dldH0gZnJvbSAnbG9kYXNoJyA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHN0YXRpYyBQQUdJTkFUSU9OX1NJWkUgPSAnUGFnaW5hdGlvblNpemUnO1xuXG4gIEBJbnB1dCgpIGl0ZW1zOiBBcnJheTxhbnk+O1xuICBASW5wdXQoKSBmaWVsZHM6IEFycmF5PGFueT47XG4gIEBJbnB1dCgpIHBhZ2luYXRpb24/OiBhbnk7XG4gIEBJbnB1dCgpIHZpZXdNb2RlPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNTZWFyY2hhYmxlPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaGVhZGVyPzogYm9vbGVhbjtcbiAgQElucHV0KCkgYWN0aW9uczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgcGFnaW5hdGlvbklkZW50aWZpZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxTb3J0U3RhdGU6IFNvcnRTdGF0ZTtcbiAgQElucHV0KCkgbGFzdENvbHVtblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAT3V0cHV0KCkgcm93Q2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uU2V0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlYXJjaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPFNvcnRTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGhlYWRlclByb3ZpZGVkID0gZmFsc2U7XG4gIHB1YmxpYyB2aWV3TGlzdEFzOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWFyY2hNb2RlbDogc3RyaW5nO1xuICBwdWJsaWMgcmVnRXhwU3RyaW5nUmVtb3ZlVW5kZXJzY29yZSA9IC9fL2c7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEJveCcpIHNlYXJjaEJveDogRWxlbWVudFJlZjtcblxuICByZWFkb25seSBzb3J0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U29ydFN0YXRlPih7XG4gICAgc3RhdGU6IHtuYW1lOiAnJywgZGlyZWN0aW9uOiAnREVTQyd9LFxuICAgIGlzU29ydGluZzogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2UsIHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXIpIHtcbiAgICB0aGlzLnZpZXdMaXN0QXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndmlld0xpc3RBcycpIHx8ICd0YWJsZSc7XG4gIH1cblxuICBsb2FkUGFnaW5hdGlvblNpemUoKTogdm9pZCB7XG4gICAgY29uc3QgZW50cmllcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgYCR7dGhpcy5wYWdpbmF0aW9uSWRlbnRpZmllcn0ke0xpc3RDb21wb25lbnQuUEFHSU5BVElPTl9TSVpFfWBcbiAgICApO1xuICAgIGlmIChlbnRyaWVzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZSA9ICtlbnRyaWVzO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoK2VudHJpZXMpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gbG9hZGVkIGZyb20gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBDdXJyZW50OiAnLCBlbnRyaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdQYWdpbmF0aW9uIGRvZXMgTk9UIGV4aXN0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gV2lsbCB1c2UgZGVmYXVsdC4gQ2hhbmdlIGl0IHRvIGNyZWF0ZSBhbiBlbnRyeS4nXG4gICAgICApO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0LmVtaXQoMTApO1xuICAgIH1cbiAgfVxuXG4gIHNldFBhZ2luYXRpb25TaXplKG51bWJlck9mRW50cmllczogc3RyaW5nKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBgJHt0aGlzLnBhZ2luYXRpb25JZGVudGlmaWVyfSR7TGlzdENvbXBvbmVudC5QQUdJTkFUSU9OX1NJWkV9YCxcbiAgICAgIG51bWJlck9mRW50cmllc1xuICAgICk7XG4gICAgdGhpcy5wYWdpbmF0aW9uLnNpemUgPSBudW1iZXJPZkVudHJpZXM7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gc2V0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdDogJywgbnVtYmVyT2ZFbnRyaWVzKTtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdChudW1iZXJPZkVudHJpZXMpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5sb2FkUGFnaW5hdGlvblNpemUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbml0aWFsU29ydFN0YXRlKSB7XG4gICAgICB0aGlzLnNvcnQkLm5leHQodGhpcy5pbml0aWFsU29ydFN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuaXRlbXMgJiYgY2hhbmdlcy5pdGVtcy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtTGlzdEl0ZW1zTWF0Y2hGaWVsZHMoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcz8uaW5pdGlhbFNvcnRTdGF0ZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnNvcnQkLm5leHQoY2hhbmdlcz8uaW5pdGlhbFNvcnRTdGF0ZT8uY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaXNTZWFyY2hhYmxlKSB7XG4gICAgICBmcm9tRXZlbnQodGhpcy5zZWFyY2hCb3gubmF0aXZlRWxlbWVudCwgJ2tleXVwJylcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWFyY2hCb3gubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2gub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIGN1c3RvbSBzZWFyY2ggY2FsbGJhayBpcyBzcGVjaWZpZWQsIHBlcmhhcHMgdG8gcXVlcnkgb24gdGhlIHNlcnZlciBzaWRlXG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5lbWl0KHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hNb2RlbCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRyYW5zZm9ybUxpc3RJdGVtc01hdGNoRmllbGRzKCkge1xuICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuZmllbGRzKSB7XG4gICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0ubGlzdEl0ZW1GaWVsZHMgPSB0aGlzLmZpZWxkcy5tYXAoZmllbGQgPT4gKHtcbiAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICBsYWJlbDogZmllbGQubGFiZWwsXG4gICAgICAgICAgdHlwZTogZmllbGQudHlwZSB8fCAnJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKSxcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ2xpY2tSb3coaXRlbSkge1xuICAgIHRoaXMucm93Q2xpY2tlZC5lbWl0KGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmVPYmplY3QoZGVmaW5pdGlvbjogYW55LCBvYmo6IGFueSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25LZXkgPSBkZWZpbml0aW9uLmtleTtcbiAgICBjb25zdCBjdXN0b21Qcm9wU3RyaW5nID0gJyQuJztcbiAgICBjb25zdCBrZXkgPSBkZWZpbml0aW9uS2V5LmluY2x1ZGVzKGN1c3RvbVByb3BTdHJpbmcpXG4gICAgICA/IGRlZmluaXRpb25LZXkuc3BsaXQoY3VzdG9tUHJvcFN0cmluZylbMV1cbiAgICAgIDogZGVmaW5pdGlvbktleTtcbiAgICBjb25zdCByZXNvbHZlZE9ialZhbHVlID0gX2dldChvYmosIGtleSwgbnVsbCk7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRlbnRTZXJ2aWNlLmdldChyZXNvbHZlZE9ialZhbHVlLCBkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBzd2l0Y2hWaWV3KHR5cGUpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndmlld0xpc3RBcycsIHR5cGUpO1xuICAgIHRoaXMudmlld0xpc3RBcyA9IHR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG90YWxQYWdlQ291bnQoKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnBhZ2luYXRpb24uY29sbGVjdGlvblNpemUgLyB0aGlzLnBhZ2luYXRpb24uc2l6ZSk7XG4gIH1cblxuICBwdWJsaWMgb25DbGlja1BhZ2luYXRpb24ocGFnZSkge1xuICAgIHRoaXMucGFnaW5hdGlvbkNsaWNrZWQuZW1pdChwYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVGaWVsZENsaWNrKGtleTogc3RyaW5nLCBzb3J0YWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGRlc2M6IERpcmVjdGlvbiA9ICdERVNDJztcbiAgICBjb25zdCBhc2M6IERpcmVjdGlvbiA9ICdBU0MnO1xuXG4gICAgaWYgKCFzb3J0YWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc29ydCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoc29ydCA9PiB7XG4gICAgICBsZXQgbmV3U3RhdGU6IFNvcnRTdGF0ZTtcblxuICAgICAgaWYgKHNvcnQuc3RhdGUubmFtZSA9PT0ga2V5KSB7XG4gICAgICAgIGlmICghc29ydC5pc1NvcnRpbmcpIHtcbiAgICAgICAgICBuZXdTdGF0ZSA9IHtzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogZGVzY30sIGlzU29ydGluZzogdHJ1ZX07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHNvcnQuc3RhdGUuZGlyZWN0aW9uID09PSBkZXNjKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHsuLi5zb3J0LCBzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogYXNjfX07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiBkZXNjfSwgaXNTb3J0aW5nOiBmYWxzZX07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTdGF0ZSA9IHtzdGF0ZToge25hbWU6IGtleSwgZGlyZWN0aW9uOiBkZXNjfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0JC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChuZXdTdGF0ZSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPGRpdj5cbiAgPGRpdiAqbmdJZj1cIihpdGVtcz8ubGVuZ3RoID4gMCAmJiBmaWVsZHM/Lmxlbmd0aCA+IDApIHx8IGhlYWRlclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBzZWFyY2gtaG9sZGVyIGJnLWxpZ2h0XCJcbiAgICAgIFtuZ0NsYXNzXT1cInsncGItNCBwdC00JzogIWhlYWRlcn1cIlxuICAgICAgKm5nSWY9XCJpc1NlYXJjaGFibGUgfHwgdmlld01vZGUgfHwgaGVhZGVyXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24tc2VsZi1zdGFydFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibWwtYXV0byByb3dcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgKm5nSWY9XCJpc1NlYXJjaGFibGVcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGNvbC1zbS04XCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnbGlzdC5zZWFyY2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAjc2VhcmNoQm94XG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3dpdGNoLXZpZXctaG9sZGVyIGJ0bi1ncm91cCBjb2wtc20tNCBtdC0xIG10LXNtLTBcIlxuICAgICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgICAgKm5nSWY9XCJ2aWV3TW9kZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ2aWV3TGlzdEFzID09PSAndGFibGUnID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tZGVmYXVsdCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFZpZXcoJ3RhYmxlJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXZpZXctaGVhZGxpbmUgdmlldy1pY29uXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInZpZXdMaXN0QXMgPT09ICd0aWxlJyA/ICdidG4tcHJpbWFyeScgOiAnYnRuLWRlZmF1bHQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hWaWV3KCd0aWxlJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXZpZXctbW9kdWxlIHZpZXctaWNvblwiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3RhYnNdXCI+PC9uZy1jb250ZW50PlxuXG4gIDxkaXYgKm5nSWY9XCJpdGVtcz8ubGVuZ3RoID4gMCAmJiBmaWVsZHM/Lmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZSBub1N3aXBlXCIgKm5nSWY9XCIhdmlld01vZGUgfHwgdmlld0xpc3RBcyA9PT0gJ3RhYmxlJ1wiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciBtLTBcIiAqbmdJZj1cInNvcnQkIHwgYXN5bmMgYXMgc29ydFwiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRmllbGRDbGljayhmaWVsZC5rZXksIGZpZWxkLnNvcnRhYmxlKVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmllbGQuc29ydGFibGUsXG4gICAgICAgICAgICAgICAgJ2lzLWJlaW5nLXNvcnRlZCc6IGZpZWxkLmtleSA9PT0gc29ydC5zdGF0ZS5uYW1lICYmIHNvcnQuaXNTb3J0aW5nLFxuICAgICAgICAgICAgICAgIGFzY2VuZGluZzogc29ydC5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmNvbHVtbk5hbWUgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjbGljay1hYmxlJzogdGhpcy5yb3dDbGlja2VkLm9ic2VydmVycy5sZW5ndGggPiAwfVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtcyB8IGxpc3RGaWx0ZXIgOiBzZWFyY2hNb2RlbDsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGlja1JvdyhpdGVtKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tdG9wXCIgKm5nRm9yPVwibGV0IGxpc3RJdGVtRmllbGQgb2YgaXRlbS5saXN0SXRlbUZpZWxkc1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGxpc3RJdGVtRmllbGQudHlwZSA9PT0gJycgJiYge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRyYW5zbGF0aW9uS2V5OiAndmlld1R5cGVDb252ZXJ0ZXIuJyArIGxpc3RJdGVtRmllbGQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVHJhbnNsYXRpb246ICd2aWV3VHlwZUNvbnZlcnRlci4nICsgbGlzdEl0ZW1GaWVsZC52YWx1ZSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgfSBhcyB2YXJzXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBsaXN0SXRlbUZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgID8gdmFycy52YWx1ZVRyYW5zbGF0aW9uICE9PSB2YXJzLnZhbHVlVHJhbnNsYXRpb25LZXlcbiAgICAgICAgICAgICAgICAgICAgICA/IHZhcnMudmFsdWVUcmFuc2xhdGlvblxuICAgICAgICAgICAgICAgICAgICAgIDogbGlzdEl0ZW1GaWVsZC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6ICctJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImxpc3RJdGVtRmllbGQudHlwZSA9PT0gJ2Ryb3Bkb3duQWN0aW9ucydcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRyb3Bkb3duQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntsaXN0SXRlbUZpZWxkOiBsaXN0SXRlbUZpZWxkLCBpdGVtOiBpdGVtfVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi10b3BcIiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5jYWxsYmFjayhpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJsYXN0Q29sdW1uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBsYXN0Q29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiB7aW5kZXg6IGksIGxlbmd0aDogaXRlbXMubGVuZ3RoLCBpdGVtOiBpdGVtfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCIoaXRlbXMgfCBsaXN0RmlsdGVyIDogc2VhcmNoTW9kZWwpLmxlbmd0aCA9PT0gMFwiIFtjb2xTcGFuXT1cImZpZWxkcy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAge3sgJ2xpc3Qubm9NYXRjaGluZ0l0ZW1zJyB8IHRyYW5zbGF0ZSB9fTxpPlwie3sgc2VhcmNoTW9kZWwgfX1cIjwvaT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgKm5nSWY9XCJ2aWV3TW9kZSAmJiB2aWV3TGlzdEFzID09PSAndGlsZSdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcC0yXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC0xMiBjb2wtc20tNiBjb2wteGwtNCBwLTJcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zIHwgbGlzdEZpbHRlciA6IHNlYXJjaE1vZGVsXCJcbiAgICAgICAgICAoY2xpY2spPVwib25DbGlja1JvdyhpdGVtKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xpY2stYWJsZSB0aWxlLWhvbGRlciBwLTRcIj5cbiAgICAgICAgICAgIDxkbCBjbGFzcz1cInJvdyBtYi0wXCIgKm5nRm9yPVwibGV0IGxpc3RJdGVtRmllbGQgb2YgaXRlbS5saXN0SXRlbUZpZWxkc1wiPlxuICAgICAgICAgICAgICA8ZHQgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTUgdGV4dC14bC1yaWdodFwiPnt7IGxpc3RJdGVtRmllbGQubGFiZWwgfX08L2R0PlxuICAgICAgICAgICAgICA8ZGQgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTdcIj57eyBsaXN0SXRlbUZpZWxkLnZhbHVlIHx8ICctJyB9fTwvZGQ+XG4gICAgICAgICAgICA8L2RsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiKGl0ZW1zIHwgbGlzdEZpbHRlciA6IHNlYXJjaE1vZGVsKS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICB7eyAnbGlzdC5ub01hdGNoaW5nSXRlbXMnIHwgdHJhbnNsYXRlIH19PGk+XCJ7eyBzZWFyY2hNb2RlbCB9fVwiPC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJwYWdpbmF0aW9uLWhvbGRlciBiZy1saWdodCBweC00IHB0LTQgcGItMiBvdmVyZmxvdy1hdXRvIHJvdyBtci0wIG1sLTBcIlxuICAgICpuZ0lmPVwicGFnaW5hdGlvbiAmJiBpdGVtcz8ubGVuZ3RoID4gMCAmJiBmaWVsZHM/Lmxlbmd0aCA+IDBcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZsb2F0LWxlZnQgcGFnZS1jb3VudCBjb2wtNFwiPlxuICAgICAgPHN0cm9uZz57e1xuICAgICAgICAnbGlzdC5jdXJyZW50UGFnZSdcbiAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgOiB7Y3VycmVudDogcGFnaW5hdGlvbi5wYWdlID4gMCA/IHBhZ2luYXRpb24ucGFnZSA6IDEsIHRvdGFsOiBnZXRUb3RhbFBhZ2VDb3VudCgpfVxuICAgICAgfX08L3N0cm9uZz5cbiAgICAgIHt7XG4gICAgICAgIHBhZ2luYXRpb24uY29sbGVjdGlvblNpemUgPT09IDFcbiAgICAgICAgICA/ICgnbGlzdC5zaG93aW5nUmVzdWx0JyB8IHRyYW5zbGF0ZSA6IHtudW1iZXI6IChpdGVtcyB8IGxpc3RGaWx0ZXIgOiBzZWFyY2hNb2RlbCkubGVuZ3RofSlcbiAgICAgICAgICA6ICgnbGlzdC5zaG93aW5nUmVzdWx0cydcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgbnVtYmVyOiAoaXRlbXMgfCBsaXN0RmlsdGVyIDogc2VhcmNoTW9kZWwpLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIHRvdGFsOiBwYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC00IHRleHQtY2VudGVyXCI+XG4gICAgICB7eyAnbGlzdC5zaG93JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInBhZ2luYXRpb24uc2l6ZVwiIChuZ01vZGVsQ2hhbmdlKT1cInNldFBhZ2luYXRpb25TaXplKCRldmVudClcIj5cbiAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIxMFwiPjEwPC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiMjVcIj4yNTwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjUwXCI+NTA8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIxMDBcIj4xMDA8L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgICAge3sgJ2xpc3QuZW50cmllcycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cbiAgICAgIDxuZ2ItcGFnaW5hdGlvblxuICAgICAgICAqbmdJZj1cInBhZ2luYXRpb24uY29sbGVjdGlvblNpemUgPiBwYWdpbmF0aW9uLnNpemVcIlxuICAgICAgICBjbGFzcz1cImZsb2F0LXJpZ2h0XCJcbiAgICAgICAgW2NvbGxlY3Rpb25TaXplXT1cInBhZ2luYXRpb24uY29sbGVjdGlvblNpemVcIlxuICAgICAgICBbKHBhZ2UpXT1cInBhZ2luYXRpb24ucGFnZVwiXG4gICAgICAgIFtwYWdlU2l6ZV09XCJwYWdpbmF0aW9uLnNpemVcIlxuICAgICAgICBbbWF4U2l6ZV09XCJwYWdpbmF0aW9uLm1heFBhZ2luYXRpb25JdGVtU2l6ZVwiXG4gICAgICAgIFtyb3RhdGVdPVwidHJ1ZVwiXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uQ2xpY2tQYWdpbmF0aW9uKHBhZ2luYXRpb24ucGFnZSlcIlxuICAgICAgPjwvbmdiLXBhZ2luYXRpb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgaWQ9XCJuby1yZXN1bHRzXCIgY2xhc3M9XCJwLTVcIiAqbmdJZj1cIml0ZW1zPy5sZW5ndGggPT09IDBcIj5cbiAgICB7eyAnbGlzdC5ub1Jlc3VsdHMnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuXG4gIDxkaXYgaWQ9XCJuby1maWVsZC1kZWZpbml0aW9uc1wiIGNsYXNzPVwicC01XCIgKm5nSWY9XCJpdGVtcz8ubGVuZ3RoID4gMCAmJiBmaWVsZHM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIHt7ICdsaXN0Lm5vRmllbGREZWZpbml0aW9ucycgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNkcm9wZG93bkFjdGlvbnMgbGV0LWxpc3RJdGVtRmllbGQ9XCJsaXN0SXRlbUZpZWxkXCIgbGV0LWl0ZW09XCJpdGVtXCI+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiICpuZ0lmPVwibGlzdEl0ZW1GaWVsZD8udmFsdWUubGVuZ3RoID4gMFwiPlxuICAgIDxhXG4gICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZSBkLWJsb2NrXCJcbiAgICAgIGlkPVwiZHJvcGRvd25NZW51XCJcbiAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxuICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImFjdGlvbi1pY29uIGljb24gbWRpIG1kaS1kb3RzLXZlcnRpY2FsXCI+PC9pPlxuICAgIDwvYT5cbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duTWVudVwiPlxuICAgICAgPGFcbiAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5jYWxsYmFjayhpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHAtMlwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgbGlzdEl0ZW1GaWVsZC52YWx1ZVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24uaWNvbkNsYXNzICE9PSBudWxsXCI+XG4gICAgICAgICAgPGkgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiPjwvaT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIHt7IGFjdGlvbj8ubGFiZWwgfHwgJy0nIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -41,6 +41,8 @@ export class CarbonMultiInputComponent {
41
41
  this.required = false;
42
42
  this.keyColumnTitle = '';
43
43
  this.valueColumnTitle = '';
44
+ this.hideDeleteButton = false;
45
+ this.hideAddButton = false;
44
46
  this.valueChange = new EventEmitter();
45
47
  this.values$ = new BehaviorSubject([]);
46
48
  this.mappedValues$ = this.values$.pipe(map(values => values
@@ -124,10 +126,10 @@ export class CarbonMultiInputComponent {
124
126
  }
125
127
  }
126
128
  CarbonMultiInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CarbonMultiInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
127
- CarbonMultiInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: { name: "name", title: "title", titleTranslationKey: "titleTranslationKey", type: "type", initialAmountOfRows: "initialAmountOfRows", minimumAmountOfRows: "minimumAmountOfRows", maxRows: "maxRows", addRowText: "addRowText", addRowTranslationKey: "addRowTranslationKey", deleteRowText: "deleteRowText", deleteRowTranslationKey: "deleteRowTranslationKey", disabled: "disabled", defaultValues: "defaultValues", margin: "margin", tooltip: "tooltip", required: "required", keyColumnTitle: "keyColumnTitle", valueColumnTitle: "valueColumnTitle" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"v-multi-input\"\n [ngClass]=\"{'v-multi-input--margin': margin}\"\n *ngIf=\"{\n addRowText:\n addRowText || addRowTranslationKey\n ? addRowTranslationKey\n ? (addRowTranslationKey | translate)\n : addRowText\n : ('interface.addRow' | translate),\n deleteRowText:\n deleteRowText || deleteRowTranslationKey\n ? deleteRowTranslationKey\n ? (deleteRowTranslationKey | translate)\n : deleteRowText\n : ('interface.deleteRow' | translate)\n } as vars\"\n>\n <v-input-label\n *ngIf=\"title || titleTranslationKey\"\n [title]=\"title\"\n [titleTranslationKey]=\"titleTranslationKey\"\n [name]=\"name\"\n [tooltip]=\"tooltip\"\n [required]=\"required\"\n >\n </v-input-label>\n <div class=\"v-multi-input__rows\">\n <div\n class=\"v-multi-input__row\"\n *ngFor=\"let value of values$ | async as values; trackBy: trackByFn; index as i\"\n >\n <ng-container *ngIf=\"type === 'value'\">\n <ng-container *ngTemplateOutlet=\"singleValue; context: {value: value}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'keyValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n <button\n [disabled]=\"values?.length <= this.minimumAmountOfRows || disabled\"\n ibmButton=\"danger\"\n size=\"md\"\n [iconOnly]=\"true\"\n (click)=\"deleteRow(value.uuid)\"\n [title]=\"vars.deleteRowText\"\n >\n <svg class=\"cds--btn__icon\" ibmIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n <div class=\"v-multi-input__add-button\">\n <button\n (click)=\"addRow()\"\n ibmButton=\"primary\"\n size=\"md\"\n [disabled]=\"(addRowEnabled$ | async) === false || disabled\"\n >\n {{ vars.addRowText }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #singleValue let-value=\"value\">\n <div class=\"v-multi-input__input\">\n <input\n ibmText\n (change)=\"onValueChange(value, $event, 'value')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.value\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyValue let-value=\"value\" let-index=\"index\">\n <div class=\"v-multi-input__input\">\n <ibm-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n keyColumnTitle\n }}</ibm-label>\n <input\n ibmText\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.key\"\n />\n </div>\n <div class=\"v-multi-input__input\">\n <ibm-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n valueColumnTitle\n }}</ibm-label>\n <input\n ibmText\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.value\"\n />\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.v-multi-input--margin{margin-block-end:var(--v-input-margin)}.v-multi-input__row{display:flex;flex-direction:row;align-items:flex-end;margin-block-end:var(--v-multi-input-row-spacing-block)}.v-multi-input__input{margin-inline-end:var(--v-multi-input-input-spacing-inline)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { kind: "directive", type: i3.Button, selector: "[ibmButton]", inputs: ["ibmButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i3.IconDirective, selector: "[ibmIcon]", inputs: ["ibmIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.Label, selector: "ibm-label", inputs: ["labelInputID", "disabled", "labelState", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
129
+ CarbonMultiInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: { name: "name", title: "title", titleTranslationKey: "titleTranslationKey", type: "type", initialAmountOfRows: "initialAmountOfRows", minimumAmountOfRows: "minimumAmountOfRows", maxRows: "maxRows", addRowText: "addRowText", addRowTranslationKey: "addRowTranslationKey", deleteRowText: "deleteRowText", deleteRowTranslationKey: "deleteRowTranslationKey", disabled: "disabled", defaultValues: "defaultValues", margin: "margin", tooltip: "tooltip", required: "required", keyColumnTitle: "keyColumnTitle", valueColumnTitle: "valueColumnTitle", hideDeleteButton: "hideDeleteButton", hideAddButton: "hideAddButton" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"v-multi-input\"\n [ngClass]=\"{'v-multi-input--margin': margin}\"\n *ngIf=\"{\n addRowText:\n addRowText || addRowTranslationKey\n ? addRowTranslationKey\n ? (addRowTranslationKey | translate)\n : addRowText\n : ('interface.addRow' | translate),\n deleteRowText:\n deleteRowText || deleteRowTranslationKey\n ? deleteRowTranslationKey\n ? (deleteRowTranslationKey | translate)\n : deleteRowText\n : ('interface.deleteRow' | translate)\n } as vars\"\n>\n <v-input-label\n *ngIf=\"title || titleTranslationKey\"\n [title]=\"title\"\n [titleTranslationKey]=\"titleTranslationKey\"\n [name]=\"name\"\n [tooltip]=\"tooltip\"\n [required]=\"required\"\n >\n </v-input-label>\n <div class=\"v-multi-input__rows\">\n <div\n class=\"v-multi-input__row\"\n *ngFor=\"let value of values$ | async as values; trackBy: trackByFn; index as i\"\n >\n <ng-container *ngIf=\"type === 'value'\">\n <ng-container *ngTemplateOutlet=\"singleValue; context: {value: value}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'keyValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n <button\n *ngIf=\"!hideDeleteButton\"\n [disabled]=\"values?.length <= this.minimumAmountOfRows || disabled\"\n ibmButton=\"danger\"\n size=\"md\"\n [iconOnly]=\"true\"\n (click)=\"deleteRow(value.uuid)\"\n [title]=\"vars.deleteRowText\"\n >\n <svg class=\"cds--btn__icon\" ibmIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n <div class=\"v-multi-input__add-button\">\n <button\n *ngIf=\"!hideAddButton\"\n (click)=\"addRow()\"\n ibmButton=\"primary\"\n size=\"md\"\n [disabled]=\"(addRowEnabled$ | async) === false || disabled\"\n >\n {{ vars.addRowText }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #singleValue let-value=\"value\">\n <div class=\"v-multi-input__input\">\n <input\n ibmText\n (change)=\"onValueChange(value, $event, 'value')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.value\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyValue let-value=\"value\" let-index=\"index\">\n <div class=\"v-multi-input__input\">\n <ibm-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n keyColumnTitle\n }}</ibm-label>\n <input\n ibmText\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.key\"\n />\n </div>\n <div class=\"v-multi-input__input\">\n <ibm-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n valueColumnTitle\n }}</ibm-label>\n <input\n ibmText\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.value\"\n />\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.v-multi-input--margin{margin-block-end:var(--v-input-margin)}.v-multi-input__row{display:flex;flex-direction:row;align-items:flex-end;margin-block-end:var(--v-multi-input-row-spacing-block)}.v-multi-input__input{margin-inline-end:var(--v-multi-input-input-spacing-inline)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { kind: "directive", type: i3.Button, selector: "[ibmButton]", inputs: ["ibmButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i3.IconDirective, selector: "[ibmIcon]", inputs: ["ibmIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.Label, selector: "ibm-label", inputs: ["labelInputID", "disabled", "labelState", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
128
130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CarbonMultiInputComponent, decorators: [{
129
131
  type: Component,
130
- args: [{ selector: 'valtimo-carbon-multi-input', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"v-multi-input\"\n [ngClass]=\"{'v-multi-input--margin': margin}\"\n *ngIf=\"{\n addRowText:\n addRowText || addRowTranslationKey\n ? addRowTranslationKey\n ? (addRowTranslationKey | translate)\n : addRowText\n : ('interface.addRow' | translate),\n deleteRowText:\n deleteRowText || deleteRowTranslationKey\n ? deleteRowTranslationKey\n ? (deleteRowTranslationKey | translate)\n : deleteRowText\n : ('interface.deleteRow' | translate)\n } as vars\"\n>\n <v-input-label\n *ngIf=\"title || titleTranslationKey\"\n [title]=\"title\"\n [titleTranslationKey]=\"titleTranslationKey\"\n [name]=\"name\"\n [tooltip]=\"tooltip\"\n [required]=\"required\"\n >\n </v-input-label>\n <div class=\"v-multi-input__rows\">\n <div\n class=\"v-multi-input__row\"\n *ngFor=\"let value of values$ | async as values; trackBy: trackByFn; index as i\"\n >\n <ng-container *ngIf=\"type === 'value'\">\n <ng-container *ngTemplateOutlet=\"singleValue; context: {value: value}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'keyValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n <button\n [disabled]=\"values?.length <= this.minimumAmountOfRows || disabled\"\n ibmButton=\"danger\"\n size=\"md\"\n [iconOnly]=\"true\"\n (click)=\"deleteRow(value.uuid)\"\n [title]=\"vars.deleteRowText\"\n >\n <svg class=\"cds--btn__icon\" ibmIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n <div class=\"v-multi-input__add-button\">\n <button\n (click)=\"addRow()\"\n ibmButton=\"primary\"\n size=\"md\"\n [disabled]=\"(addRowEnabled$ | async) === false || disabled\"\n >\n {{ vars.addRowText }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #singleValue let-value=\"value\">\n <div class=\"v-multi-input__input\">\n <input\n ibmText\n (change)=\"onValueChange(value, $event, 'value')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.value\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyValue let-value=\"value\" let-index=\"index\">\n <div class=\"v-multi-input__input\">\n <ibm-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n keyColumnTitle\n }}</ibm-label>\n <input\n ibmText\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.key\"\n />\n </div>\n <div class=\"v-multi-input__input\">\n <ibm-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n valueColumnTitle\n }}</ibm-label>\n <input\n ibmText\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.value\"\n />\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.v-multi-input--margin{margin-block-end:var(--v-input-margin)}.v-multi-input__row{display:flex;flex-direction:row;align-items:flex-end;margin-block-end:var(--v-multi-input-row-spacing-block)}.v-multi-input__input{margin-inline-end:var(--v-multi-input-input-spacing-inline)}\n"] }]
132
+ args: [{ selector: 'valtimo-carbon-multi-input', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"v-multi-input\"\n [ngClass]=\"{'v-multi-input--margin': margin}\"\n *ngIf=\"{\n addRowText:\n addRowText || addRowTranslationKey\n ? addRowTranslationKey\n ? (addRowTranslationKey | translate)\n : addRowText\n : ('interface.addRow' | translate),\n deleteRowText:\n deleteRowText || deleteRowTranslationKey\n ? deleteRowTranslationKey\n ? (deleteRowTranslationKey | translate)\n : deleteRowText\n : ('interface.deleteRow' | translate)\n } as vars\"\n>\n <v-input-label\n *ngIf=\"title || titleTranslationKey\"\n [title]=\"title\"\n [titleTranslationKey]=\"titleTranslationKey\"\n [name]=\"name\"\n [tooltip]=\"tooltip\"\n [required]=\"required\"\n >\n </v-input-label>\n <div class=\"v-multi-input__rows\">\n <div\n class=\"v-multi-input__row\"\n *ngFor=\"let value of values$ | async as values; trackBy: trackByFn; index as i\"\n >\n <ng-container *ngIf=\"type === 'value'\">\n <ng-container *ngTemplateOutlet=\"singleValue; context: {value: value}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"type === 'keyValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n <button\n *ngIf=\"!hideDeleteButton\"\n [disabled]=\"values?.length <= this.minimumAmountOfRows || disabled\"\n ibmButton=\"danger\"\n size=\"md\"\n [iconOnly]=\"true\"\n (click)=\"deleteRow(value.uuid)\"\n [title]=\"vars.deleteRowText\"\n >\n <svg class=\"cds--btn__icon\" ibmIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n <div class=\"v-multi-input__add-button\">\n <button\n *ngIf=\"!hideAddButton\"\n (click)=\"addRow()\"\n ibmButton=\"primary\"\n size=\"md\"\n [disabled]=\"(addRowEnabled$ | async) === false || disabled\"\n >\n {{ vars.addRowText }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #singleValue let-value=\"value\">\n <div class=\"v-multi-input__input\">\n <input\n ibmText\n (change)=\"onValueChange(value, $event, 'value')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.value\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyValue let-value=\"value\" let-index=\"index\">\n <div class=\"v-multi-input__input\">\n <ibm-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n keyColumnTitle\n }}</ibm-label>\n <input\n ibmText\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.key\"\n />\n </div>\n <div class=\"v-multi-input__input\">\n <ibm-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n valueColumnTitle\n }}</ibm-label>\n <input\n ibmText\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n [disabled]=\"disabled\"\n [defaultValue]=\"value.value\"\n />\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.v-multi-input--margin{margin-block-end:var(--v-input-margin)}.v-multi-input__row{display:flex;flex-direction:row;align-items:flex-end;margin-block-end:var(--v-multi-input-row-spacing-block)}.v-multi-input__input{margin-inline-end:var(--v-multi-input-input-spacing-inline)}\n"] }]
131
133
  }], propDecorators: { name: [{
132
134
  type: Input
133
135
  }], title: [{
@@ -164,7 +166,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
164
166
  type: Input
165
167
  }], valueColumnTitle: [{
166
168
  type: Input
169
+ }], hideDeleteButton: [{
170
+ type: Input
171
+ }], hideAddButton: [{
172
+ type: Input
167
173
  }], valueChange: [{
168
174
  type: Output
169
175
  }] } });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktaW5wdXQvY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktaW5wdXQvY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFPeEYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQTJCLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7OztBQU9sQyxNQUFNLE9BQU8seUJBQXlCO0lBTHRDO1FBTVcsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsU0FBSSxHQUFtQixPQUFPLENBQUM7UUFDL0Isd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLHdCQUFtQixHQUFHLENBQUMsQ0FBQztRQUN4QixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQix5QkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsNEJBQXVCLEdB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aEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTXVsdGlJbnB1dEtleVZhbHVlLFxuICBNdWx0aUlucHV0T3V0cHV0LFxuICBNdWx0aUlucHV0VHlwZSxcbiAgTXVsdGlJbnB1dFZhbHVlcyxcbn0gZnJvbSAnQHZhbHRpbW8vdXNlci1pbnRlcmZhY2UnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHt2NCBhcyB1dWlkdjR9IGZyb20gJ3V1aWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWNhcmJvbi1tdWx0aS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJib24tbXVsdGktaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJib24tbXVsdGktaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FyYm9uTXVsdGlJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgbmFtZSA9ICcnO1xuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xuICBASW5wdXQoKSB0aXRsZVRyYW5zbGF0aW9uS2V5ID0gJyc7XG4gIEBJbnB1dCgpIHR5cGU6IE11bHRpSW5wdXRUeXBlID0gJ3ZhbHVlJztcbiAgQElucHV0KCkgaW5pdGlhbEFtb3VudE9mUm93cyA9IDE7XG4gIEBJbnB1dCgpIG1pbmltdW1BbW91bnRPZlJvd3MgPSAxO1xuICBASW5wdXQoKSBtYXhSb3dzID0gbnVsbDtcbiAgQElucHV0KCkgYWRkUm93VGV4dCA9ICcnO1xuICBASW5wdXQoKSBhZGRSb3dUcmFuc2xhdGlvbktleSA9ICcnO1xuICBASW5wdXQoKSBkZWxldGVSb3dUZXh0ID0gJyc7XG4gIEBJbnB1dCgpIGRlbGV0ZVJvd1RyYW5zbGF0aW9uS2V5ID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZXMhOiBNdWx0aUlucHV0VmFsdWVzO1xuICBASW5wdXQoKSBtYXJnaW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdG9vbHRpcCA9ICcnO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBrZXlDb2x1bW5UaXRsZSA9ICcnO1xuICBASW5wdXQoKSB2YWx1ZUNvbHVtblRpdGxlID0gJyc7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TXVsdGlJbnB1dE91dHB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVhZG9ubHkgdmFsdWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TXVsdGlJbnB1dFZhbHVlcz4oW10pO1xuICByZWFkb25seSBtYXBwZWRWYWx1ZXMkOiBPYnNlcnZhYmxlPE11bHRpSW5wdXRPdXRwdXQ+ID0gdGhpcy52YWx1ZXMkLnBpcGUoXG4gICAgbWFwKFxuICAgICAgdmFsdWVzID0+XG4gICAgICAgIHZhbHVlc1xuICAgICAgICAgIC5tYXAodmFsdWUgPT4gdGhpcy5nZXRNYXBwZWRWYWx1ZSh2YWx1ZSkpXG4gICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PlxuICAgICAgICAgICAgdGhpcy50eXBlID09PSAndmFsdWUnXG4gICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgOiAodmFsdWUgYXMgTXVsdGlJbnB1dEtleVZhbHVlKS52YWx1ZSAmJiAodmFsdWUgYXMgTXVsdGlJbnB1dEtleVZhbHVlKS5rZXlcbiAgICAgICAgICApIGFzIE11bHRpSW5wdXRPdXRwdXRcbiAgICApXG4gICk7XG4gIHJlYWRvbmx5IGFkZFJvd0VuYWJsZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy52YWx1ZXMkLnBpcGUoXG4gICAgbWFwKHZhbHVlcyA9PiAhISh0aGlzLm1heFJvd3MgPT09IG51bGwgfHwgdmFsdWVzLmxlbmd0aCA8IHRoaXMubWF4Um93cykpXG4gICk7XG5cbiAgcHJpdmF0ZSB2YWx1ZXNTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLm5leHQodGhpcy5nZXRJbml0aWFsUm93cygpKTtcbiAgICB0aGlzLm9wZW5WYWx1ZXNTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYWRkUm93KCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudmFsdWVzJCwgdGhpcy5hZGRSb3dFbmFibGVkJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoW3ZhbHVlcywgYWRkUm93RW5hYmxlZF0pID0+IHtcbiAgICAgICAgaWYgKGFkZFJvd0VuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlcyQubmV4dChbLi4udmFsdWVzLCB0aGlzLmdldEVtcHR5VmFsdWUoKV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZVJvdyh1dWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gdGhpcy5taW5pbXVtQW1vdW50T2ZSb3dzKSB7XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlcy5maWx0ZXIodmFsdWUgPT4gdmFsdWUudXVpZCAhPT0gdXVpZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIHZhbHVlOiBNdWx0aUlucHV0S2V5VmFsdWUpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZS51dWlkIGFzIHN0cmluZztcbiAgfVxuXG4gIG9uVmFsdWVDaGFuZ2UoXG4gICAgdGVtcGxhdGVWYWx1ZTogTXVsdGlJbnB1dEtleVZhbHVlLFxuICAgIGlucHV0VmFsdWU6IHN0cmluZyxcbiAgICBjaGFuZ2U6ICdrZXknIHwgJ3ZhbHVlJ1xuICApOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgIHRoaXMudmFsdWVzJC5uZXh0KFxuICAgICAgICB2YWx1ZXMubWFwKHN0YXRlVmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZVZhbHVlLnV1aWQgPT09IHRlbXBsYXRlVmFsdWUudXVpZCkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICByZXR1cm4gey4uLnN0YXRlVmFsdWUsIHZhbHVlOiBpbnB1dFZhbHVlfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICByZXR1cm4gey4uLnN0YXRlVmFsdWUsIGtleTogaW5wdXRWYWx1ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzdGF0ZVZhbHVlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFJvd3MoKTogTXVsdGlJbnB1dFZhbHVlcyB7XG4gICAgY29uc3QgbWluaW11bVJvd3MgPSB0aGlzLm1pbmltdW1BbW91bnRPZlJvd3M7XG4gICAgY29uc3QgaW5pdGlhbFJvd3MgPSB0aGlzLmluaXRpYWxBbW91bnRPZlJvd3M7XG4gICAgY29uc3QgYW1vdW50T2ZJbml0YWxSb3dzID1cbiAgICAgIG1pbmltdW1Sb3dzID4gaW5pdGlhbFJvd3MgPyBtaW5pbXVtUm93cyA6IGluaXRpYWxSb3dzID4gMSA/IGluaXRpYWxSb3dzIDogMTtcblxuICAgIGlmICghdGhpcy5kZWZhdWx0VmFsdWVzKSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5KGFtb3VudE9mSW5pdGFsUm93cykuZmlsbCh0aGlzLmdldEVtcHR5VmFsdWUoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZXMubWFwKGRlZmF1bHRWYWx1ZSA9PiAoey4uLmRlZmF1bHRWYWx1ZSwgdXVpZDogdXVpZHY0KCl9KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbXB0eVZhbHVlKCk6IE11bHRpSW5wdXRLZXlWYWx1ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJycsXG4gICAgICB2YWx1ZTogJycsXG4gICAgICB1dWlkOiB1dWlkdjQoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXBwZWRWYWx1ZSh2YWx1ZVRvTWFwOiBNdWx0aUlucHV0S2V5VmFsdWUpOiBNdWx0aUlucHV0S2V5VmFsdWUgfCBzdHJpbmcge1xuICAgIGlmICh0aGlzLnR5cGUgPT09ICdrZXlWYWx1ZScpIHtcbiAgICAgIHJldHVybiB7a2V5OiB2YWx1ZVRvTWFwLmtleSwgdmFsdWU6IHZhbHVlVG9NYXAudmFsdWV9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWVUb01hcC52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5WYWx1ZXNTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXNTdWJzY3JpcHRpb24gPSB0aGlzLm1hcHBlZFZhbHVlcyQuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVzKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2XG4gIGNsYXNzPVwidi1tdWx0aS1pbnB1dFwiXG4gIFtuZ0NsYXNzXT1cInsndi1tdWx0aS1pbnB1dC0tbWFyZ2luJzogbWFyZ2lufVwiXG4gICpuZ0lmPVwie1xuICAgIGFkZFJvd1RleHQ6XG4gICAgICBhZGRSb3dUZXh0IHx8IGFkZFJvd1RyYW5zbGF0aW9uS2V5XG4gICAgICAgID8gYWRkUm93VHJhbnNsYXRpb25LZXlcbiAgICAgICAgICA/IChhZGRSb3dUcmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6IGFkZFJvd1RleHRcbiAgICAgICAgOiAoJ2ludGVyZmFjZS5hZGRSb3cnIHwgdHJhbnNsYXRlKSxcbiAgICBkZWxldGVSb3dUZXh0OlxuICAgICAgZGVsZXRlUm93VGV4dCB8fCBkZWxldGVSb3dUcmFuc2xhdGlvbktleVxuICAgICAgICA/IGRlbGV0ZVJvd1RyYW5zbGF0aW9uS2V5XG4gICAgICAgICAgPyAoZGVsZXRlUm93VHJhbnNsYXRpb25LZXkgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiBkZWxldGVSb3dUZXh0XG4gICAgICAgIDogKCdpbnRlcmZhY2UuZGVsZXRlUm93JyB8IHRyYW5zbGF0ZSlcbiAgfSBhcyB2YXJzXCJcbj5cbiAgPHYtaW5wdXQtbGFiZWxcbiAgICAqbmdJZj1cInRpdGxlIHx8IHRpdGxlVHJhbnNsYXRpb25LZXlcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW3RpdGxlVHJhbnNsYXRpb25LZXldPVwidGl0bGVUcmFuc2xhdGlvbktleVwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcFwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgPlxuICA8L3YtaW5wdXQtbGFiZWw+XG4gIDxkaXYgY2xhc3M9XCJ2LW11bHRpLWlucHV0X19yb3dzXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ2LW11bHRpLWlucHV0X19yb3dcIlxuICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIHZhbHVlcyQgfCBhc3luYyBhcyB2YWx1ZXM7IHRyYWNrQnk6IHRyYWNrQnlGbjsgaW5kZXggYXMgaVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT09ICd2YWx1ZSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpbmdsZVZhbHVlOyBjb250ZXh0OiB7dmFsdWU6IHZhbHVlfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ2tleVZhbHVlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJrZXlWYWx1ZTsgY29udGV4dDoge3ZhbHVlOiB2YWx1ZSwgaW5kZXg6IGl9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtkaXNhYmxlZF09XCJ2YWx1ZXM/Lmxlbmd0aCA8PSB0aGlzLm1pbmltdW1BbW91bnRPZlJvd3MgfHwgZGlzYWJsZWRcIlxuICAgICAgICBpYm1CdXR0b249XCJkYW5nZXJcIlxuICAgICAgICBzaXplPVwibWRcIlxuICAgICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICAgIChjbGljayk9XCJkZWxldGVSb3codmFsdWUudXVpZClcIlxuICAgICAgICBbdGl0bGVdPVwidmFycy5kZWxldGVSb3dUZXh0XCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgaWJtSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInYtbXVsdGktaW5wdXRfX2FkZC1idXR0b25cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cImFkZFJvdygpXCJcbiAgICAgICAgaWJtQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgIHNpemU9XCJtZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIoYWRkUm93RW5hYmxlZCQgfCBhc3luYykgPT09IGZhbHNlIHx8IGRpc2FibGVkXCJcbiAgICAgID5cbiAgICAgICAge3sgdmFycy5hZGRSb3dUZXh0IH19XG4gICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGlibUljb249XCJhZGRcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3NpbmdsZVZhbHVlIGxldC12YWx1ZT1cInZhbHVlXCI+XG4gIDxkaXYgY2xhc3M9XCJ2LW11bHRpLWlucHV0X19pbnB1dFwiPlxuICAgIDxpbnB1dFxuICAgICAgaWJtVGV4dFxuICAgICAgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKHZhbHVlLCAkZXZlbnQsICd2YWx1ZScpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAja2V5VmFsdWUgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICA8ZGl2IGNsYXNzPVwidi1tdWx0aS1pbnB1dF9faW5wdXRcIj5cbiAgICA8aWJtLWxhYmVsICpuZ0lmPVwiaW5kZXggPT09IDAgJiYga2V5Q29sdW1uVGl0bGUgJiYgdmFsdWVDb2x1bW5UaXRsZVwiPnt7XG4gICAgICBrZXlDb2x1bW5UaXRsZVxuICAgIH19PC9pYm0tbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICBpYm1UZXh0XG4gICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZSh2YWx1ZSwgJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2tleScpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlLmtleVwiXG4gICAgLz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ2LW11bHRpLWlucHV0X19pbnB1dFwiPlxuICAgIDxpYm0tbGFiZWwgKm5nSWY9XCJpbmRleCA9PT0gMCAmJiBrZXlDb2x1bW5UaXRsZSAmJiB2YWx1ZUNvbHVtblRpdGxlXCI+e3tcbiAgICAgIHZhbHVlQ29sdW1uVGl0bGVcbiAgICB9fTwvaWJtLWxhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgaWJtVGV4dFxuICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UodmFsdWUsICRldmVudC50YXJnZXQudmFsdWUsICd2YWx1ZScpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktaW5wdXQvY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktaW5wdXQvY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFPeEYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQTJCLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7OztBQU9sQyxNQUFNLE9BQU8seUJBQXlCO0lBTHRDO1FBTVcsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsU0FBSSxHQUFtQixPQUFPLENBQUM7UUFDL0Isd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLHdCQUFtQixHQUFHLENBQUMsQ0FBQztRQUN4QixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQix5QkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsNEJBQXVCLEdB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RyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE11bHRpSW5wdXRLZXlWYWx1ZSxcbiAgTXVsdGlJbnB1dE91dHB1dCxcbiAgTXVsdGlJbnB1dFR5cGUsXG4gIE11bHRpSW5wdXRWYWx1ZXMsXG59IGZyb20gJ0B2YWx0aW1vL3VzZXItaW50ZXJmYWNlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7djQgYXMgdXVpZHY0fSBmcm9tICd1dWlkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1jYXJib24tbXVsdGktaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENhcmJvbk11bHRpSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIG5hbWUgPSAnJztcbiAgQElucHV0KCkgdGl0bGUgPSAnJztcbiAgQElucHV0KCkgdGl0bGVUcmFuc2xhdGlvbktleSA9ICcnO1xuICBASW5wdXQoKSB0eXBlOiBNdWx0aUlucHV0VHlwZSA9ICd2YWx1ZSc7XG4gIEBJbnB1dCgpIGluaXRpYWxBbW91bnRPZlJvd3MgPSAxO1xuICBASW5wdXQoKSBtaW5pbXVtQW1vdW50T2ZSb3dzID0gMTtcbiAgQElucHV0KCkgbWF4Um93cyA9IG51bGw7XG4gIEBJbnB1dCgpIGFkZFJvd1RleHQgPSAnJztcbiAgQElucHV0KCkgYWRkUm93VHJhbnNsYXRpb25LZXkgPSAnJztcbiAgQElucHV0KCkgZGVsZXRlUm93VGV4dCA9ICcnO1xuICBASW5wdXQoKSBkZWxldGVSb3dUcmFuc2xhdGlvbktleSA9ICcnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWZhdWx0VmFsdWVzITogTXVsdGlJbnB1dFZhbHVlcztcbiAgQElucHV0KCkgbWFyZ2luID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRvb2x0aXAgPSAnJztcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkga2V5Q29sdW1uVGl0bGUgPSAnJztcbiAgQElucHV0KCkgdmFsdWVDb2x1bW5UaXRsZSA9ICcnO1xuICBASW5wdXQoKSBoaWRlRGVsZXRlQnV0dG9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVBZGRCdXR0b24gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxNdWx0aUlucHV0T3V0cHV0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICByZWFkb25seSB2YWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNdWx0aUlucHV0VmFsdWVzPihbXSk7XG4gIHJlYWRvbmx5IG1hcHBlZFZhbHVlcyQ6IE9ic2VydmFibGU8TXVsdGlJbnB1dE91dHB1dD4gPSB0aGlzLnZhbHVlcyQucGlwZShcbiAgICBtYXAoXG4gICAgICB2YWx1ZXMgPT5cbiAgICAgICAgdmFsdWVzXG4gICAgICAgICAgLm1hcCh2YWx1ZSA9PiB0aGlzLmdldE1hcHBlZFZhbHVlKHZhbHVlKSlcbiAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+XG4gICAgICAgICAgICB0aGlzLnR5cGUgPT09ICd2YWx1ZSdcbiAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICA6ICh2YWx1ZSBhcyBNdWx0aUlucHV0S2V5VmFsdWUpLnZhbHVlICYmICh2YWx1ZSBhcyBNdWx0aUlucHV0S2V5VmFsdWUpLmtleVxuICAgICAgICAgICkgYXMgTXVsdGlJbnB1dE91dHB1dFxuICAgIClcbiAgKTtcbiAgcmVhZG9ubHkgYWRkUm93RW5hYmxlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnZhbHVlcyQucGlwZShcbiAgICBtYXAodmFsdWVzID0+ICEhKHRoaXMubWF4Um93cyA9PT0gbnVsbCB8fCB2YWx1ZXMubGVuZ3RoIDwgdGhpcy5tYXhSb3dzKSlcbiAgKTtcblxuICBwcml2YXRlIHZhbHVlc1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyQubmV4dCh0aGlzLmdldEluaXRpYWxSb3dzKCkpO1xuICAgIHRoaXMub3BlblZhbHVlc1N1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhZGRSb3coKTogdm9pZCB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy52YWx1ZXMkLCB0aGlzLmFkZFJvd0VuYWJsZWQkXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChbdmFsdWVzLCBhZGRSb3dFbmFibGVkXSkgPT4ge1xuICAgICAgICBpZiAoYWRkUm93RW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KFsuLi52YWx1ZXMsIHRoaXMuZ2V0RW1wdHlWYWx1ZSgpXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlUm93KHV1aWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiB0aGlzLm1pbmltdW1BbW91bnRPZlJvd3MpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQodmFsdWVzLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS51dWlkICE9PSB1dWlkKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgdmFsdWU6IE11bHRpSW5wdXRLZXlWYWx1ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLnV1aWQgYXMgc3RyaW5nO1xuICB9XG5cbiAgb25WYWx1ZUNoYW5nZShcbiAgICB0ZW1wbGF0ZVZhbHVlOiBNdWx0aUlucHV0S2V5VmFsdWUsXG4gICAgaW5wdXRWYWx1ZTogc3RyaW5nLFxuICAgIGNoYW5nZTogJ2tleScgfCAndmFsdWUnXG4gICk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgdGhpcy52YWx1ZXMkLm5leHQoXG4gICAgICAgIHZhbHVlcy5tYXAoc3RhdGVWYWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlVmFsdWUudXVpZCA9PT0gdGVtcGxhdGVWYWx1ZS51dWlkKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlID09PSAndmFsdWUnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGVWYWx1ZSwgdmFsdWU6IGlucHV0VmFsdWV9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UgPT09ICdrZXknKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGVWYWx1ZSwga2V5OiBpbnB1dFZhbHVlfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN0YXRlVmFsdWU7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbml0aWFsUm93cygpOiBNdWx0aUlucHV0VmFsdWVzIHtcbiAgICBjb25zdCBtaW5pbXVtUm93cyA9IHRoaXMubWluaW11bUFtb3VudE9mUm93cztcbiAgICBjb25zdCBpbml0aWFsUm93cyA9IHRoaXMuaW5pdGlhbEFtb3VudE9mUm93cztcbiAgICBjb25zdCBhbW91bnRPZkluaXRhbFJvd3MgPVxuICAgICAgbWluaW11bVJvd3MgPiBpbml0aWFsUm93cyA/IG1pbmltdW1Sb3dzIDogaW5pdGlhbFJvd3MgPiAxID8gaW5pdGlhbFJvd3MgOiAxO1xuXG4gICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZXMpIHtcbiAgICAgIHJldHVybiBuZXcgQXJyYXkoYW1vdW50T2ZJbml0YWxSb3dzKS5maWxsKHRoaXMuZ2V0RW1wdHlWYWx1ZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlcy5tYXAoZGVmYXVsdFZhbHVlID0+ICh7Li4uZGVmYXVsdFZhbHVlLCB1dWlkOiB1dWlkdjQoKX0pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEVtcHR5VmFsdWUoKTogTXVsdGlJbnB1dEtleVZhbHVlIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnJyxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHV1aWQ6IHV1aWR2NCgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldE1hcHBlZFZhbHVlKHZhbHVlVG9NYXA6IE11bHRpSW5wdXRLZXlWYWx1ZSk6IE11bHRpSW5wdXRLZXlWYWx1ZSB8IHN0cmluZyB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2tleVZhbHVlJykge1xuICAgICAgcmV0dXJuIHtrZXk6IHZhbHVlVG9NYXAua2V5LCB2YWx1ZTogdmFsdWVUb01hcC52YWx1ZX07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZVRvTWFwLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlblZhbHVlc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlc1N1YnNjcmlwdGlvbiA9IHRoaXMubWFwcGVkVmFsdWVzJC5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZXMpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXZcbiAgY2xhc3M9XCJ2LW11bHRpLWlucHV0XCJcbiAgW25nQ2xhc3NdPVwieyd2LW11bHRpLWlucHV0LS1tYXJnaW4nOiBtYXJnaW59XCJcbiAgKm5nSWY9XCJ7XG4gICAgYWRkUm93VGV4dDpcbiAgICAgIGFkZFJvd1RleHQgfHwgYWRkUm93VHJhbnNsYXRpb25LZXlcbiAgICAgICAgPyBhZGRSb3dUcmFuc2xhdGlvbktleVxuICAgICAgICAgID8gKGFkZFJvd1RyYW5zbGF0aW9uS2V5IHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogYWRkUm93VGV4dFxuICAgICAgICA6ICgnaW50ZXJmYWNlLmFkZFJvdycgfCB0cmFuc2xhdGUpLFxuICAgIGRlbGV0ZVJvd1RleHQ6XG4gICAgICBkZWxldGVSb3dUZXh0IHx8IGRlbGV0ZVJvd1RyYW5zbGF0aW9uS2V5XG4gICAgICAgID8gZGVsZXRlUm93VHJhbnNsYXRpb25LZXlcbiAgICAgICAgICA/IChkZWxldGVSb3dUcmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6IGRlbGV0ZVJvd1RleHRcbiAgICAgICAgOiAoJ2ludGVyZmFjZS5kZWxldGVSb3cnIHwgdHJhbnNsYXRlKVxuICB9IGFzIHZhcnNcIlxuPlxuICA8di1pbnB1dC1sYWJlbFxuICAgICpuZ0lmPVwidGl0bGUgfHwgdGl0bGVUcmFuc2xhdGlvbktleVwiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbdGl0bGVUcmFuc2xhdGlvbktleV09XCJ0aXRsZVRyYW5zbGF0aW9uS2V5XCJcbiAgICBbbmFtZV09XCJuYW1lXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICA+XG4gIDwvdi1pbnB1dC1sYWJlbD5cbiAgPGRpdiBjbGFzcz1cInYtbXVsdGktaW5wdXRfX3Jvd3NcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInYtbXVsdGktaW5wdXRfX3Jvd1wiXG4gICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgdmFsdWVzJCB8IGFzeW5jIGFzIHZhbHVlczsgdHJhY2tCeTogdHJhY2tCeUZuOyBpbmRleCBhcyBpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ3ZhbHVlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2luZ2xlVmFsdWU7IGNvbnRleHQ6IHt2YWx1ZTogdmFsdWV9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAna2V5VmFsdWUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImtleVZhbHVlOyBjb250ZXh0OiB7dmFsdWU6IHZhbHVlLCBpbmRleDogaX1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhaGlkZURlbGV0ZUJ1dHRvblwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ2YWx1ZXM/Lmxlbmd0aCA8PSB0aGlzLm1pbmltdW1BbW91bnRPZlJvd3MgfHwgZGlzYWJsZWRcIlxuICAgICAgICBpYm1CdXR0b249XCJkYW5nZXJcIlxuICAgICAgICBzaXplPVwibWRcIlxuICAgICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICAgIChjbGljayk9XCJkZWxldGVSb3codmFsdWUudXVpZClcIlxuICAgICAgICBbdGl0bGVdPVwidmFycy5kZWxldGVSb3dUZXh0XCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgaWJtSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInYtbXVsdGktaW5wdXRfX2FkZC1idXR0b25cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhaGlkZUFkZEJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJhZGRSb3coKVwiXG4gICAgICAgIGlibUJ1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICBzaXplPVwibWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiKGFkZFJvd0VuYWJsZWQkIHwgYXN5bmMpID09PSBmYWxzZSB8fCBkaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICAgIHt7IHZhcnMuYWRkUm93VGV4dCB9fVxuICAgICAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBpYm1JY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzaW5nbGVWYWx1ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxuICA8ZGl2IGNsYXNzPVwidi1tdWx0aS1pbnB1dF9faW5wdXRcIj5cbiAgICA8aW5wdXRcbiAgICAgIGlibVRleHRcbiAgICAgIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSh2YWx1ZSwgJGV2ZW50LCAndmFsdWUnKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZS52YWx1ZVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2tleVZhbHVlIGxldC12YWx1ZT1cInZhbHVlXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgPGRpdiBjbGFzcz1cInYtbXVsdGktaW5wdXRfX2lucHV0XCI+XG4gICAgPGlibS1sYWJlbCAqbmdJZj1cImluZGV4ID09PSAwICYmIGtleUNvbHVtblRpdGxlICYmIHZhbHVlQ29sdW1uVGl0bGVcIj57e1xuICAgICAga2V5Q29sdW1uVGl0bGVcbiAgICB9fTwvaWJtLWxhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgaWJtVGV4dFxuICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UodmFsdWUsICRldmVudC50YXJnZXQudmFsdWUsICdrZXknKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZS5rZXlcIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidi1tdWx0aS1pbnB1dF9faW5wdXRcIj5cbiAgICA8aWJtLWxhYmVsICpuZ0lmPVwiaW5kZXggPT09IDAgJiYga2V5Q29sdW1uVGl0bGUgJiYgdmFsdWVDb2x1bW5UaXRsZVwiPnt7XG4gICAgICB2YWx1ZUNvbHVtblRpdGxlXG4gICAgfX08L2libS1sYWJlbD5cbiAgICA8aW5wdXRcbiAgICAgIGlibVRleHRcbiAgICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKHZhbHVlLCAkZXZlbnQudGFyZ2V0LnZhbHVlLCAndmFsdWUnKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZS52YWx1ZVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -32,6 +32,7 @@ export class PageTitleComponent {
32
32
  this.configService = configService;
33
33
  this.appTitle = this.configService?.config?.applicationTitle || 'Valtimo';
34
34
  this.translatedTitle$ = new BehaviorSubject('');
35
+ this.appTitleAsSuffix = this.configService?.config?.featureToggles?.applicationTitleAsSuffix || false;
35
36
  }
36
37
  ngOnInit() {
37
38
  this.openRouterTranslateSubscription();
@@ -58,7 +59,12 @@ export class PageTitleComponent {
58
59
  if (translatedRouteTitle) {
59
60
  this.logger.debug('PageTitle: setTitle translated async', translatedRouteTitle);
60
61
  this.translatedTitle$.next(translatedRouteTitle);
61
- this.titleService.setTitle(this.appTitle + ' - ' + translatedRouteTitle);
62
+ if (this.appTitleAsSuffix) {
63
+ this.titleService.setTitle(translatedRouteTitle + ' - ' + this.appTitle);
64
+ }
65
+ else {
66
+ this.titleService.setTitle(this.appTitle + ' - ' + translatedRouteTitle);
67
+ }
62
68
  }
63
69
  else {
64
70
  this.logger.debug('PageTitle: setTitle default', this.appTitle);
@@ -74,4 +80,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
74
80
  type: Component,
75
81
  args: [{ selector: 'valtimo-page-title', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"{title: translatedTitle$ | async} as obs\">\n <h2 class=\"page-head-title\" *ngIf=\"obs.title !== ''\"><span [innerHTML]=\"obs.title\"></span></h2>\n</ng-container>\n" }]
76
82
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.Title }, { type: i3.TranslateService }, { type: i4.NGXLogger }, { type: i5.ConfigService }]; } });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS10aXRsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2UtdGl0bGUvcGFnZS10aXRsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2UtdGl0bGUvcGFnZS10aXRsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRzNELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFlLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQVVsRSxNQUFNLE9BQU8sa0JBQWtCO0lBSzdCLFlBQ21CLE1BQWMsRUFDZCxjQUE4QixFQUM5QixZQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsTUFBaUIsRUFDakIsYUFBNEI7UUFMNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBTztRQUNuQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFWeEMsYUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixJQUFJLFNBQVMsQ0FBQztRQUNuRSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztJQVV6RCxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLDJCQUEyQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTywrQkFBK0I7UUFDckMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLGFBQWEsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDaEIsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLO2dCQUN0RCxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7WUFDdEUsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sK0JBQStCLEdBQUcsU0FBUyxVQUFVLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztZQUNsRixNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQzdELCtCQUErQixDQUNoQyxDQUFDO1lBQ0YsTUFBTSxvQkFBb0IsR0FDeEIsVUFBVTtnQkFDVixDQUFDLENBQUMseUJBQXlCLEtBQUssK0JBQStCO29CQUM3RCxDQUFDLENBQUMseUJBQXlCO29CQUMzQixDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNMLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNuRSxVQUFVLENBQUMsQ0FBQztZQUVoQixJQUFJLG9CQUFvQixFQUFFO2dCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLG9CQUFvQixDQUFDLENBQUM7YUFDMUU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDM0M7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2dIQXJEVSxrQkFBa0I7b0dBQWxCLGtCQUFrQiwwREM3Qi9CLCswQkFtQkE7NEZEVWEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RpdGxlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7Q29uZmlnU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1wYWdlLXRpdGxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UtdGl0bGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdlLXRpdGxlLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZVRpdGxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgYXBwVGl0bGUgPSB0aGlzLmNvbmZpZ1NlcnZpY2U/LmNvbmZpZz8uYXBwbGljYXRpb25UaXRsZSB8fCAnVmFsdGltbyc7XG4gIHJlYWRvbmx5IHRyYW5zbGF0ZWRUaXRsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJvdXRlclRyYW5zbGF0ZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVTZXJ2aWNlOiBUaXRsZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IE5HWExvZ2dlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3BlblJvdXRlclRyYW5zbGF0ZVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yb3V0ZXJUcmFuc2xhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Sb3V0ZXJUcmFuc2xhdGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZXJUcmFuc2xhdGVTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMucm91dGVyLmV2ZW50cyxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICAgIF0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZVRpdGxlID1cbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZT8uc25hcHNob3Q/LmZpcnN0Q2hpbGQ/LmRhdGE/LnRpdGxlIHx8XG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGU/LnNuYXBzaG90Py5maXJzdENoaWxkPy5jaGlsZHJlblswXT8uZGF0YT8udGl0bGU7XG4gICAgICBjb25zdCByb3V0ZVRpdGxlVHJhbnNsYXRpb24gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZVRpdGxlKTtcbiAgICAgIGNvbnN0IHJvdXRlVGl0bGVQYWdlVHJhbnNsYXRpb25TdHJpbmcgPSBgcGFnZXMuJHtyb3V0ZVRpdGxlLnRvTG93ZXJDYXNlKCl9LnRpdGxlYDtcbiAgICAgIGNvbnN0IHJvdXRlVGl0bGVQYWdlVHJhbnNsYXRpb24gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgcm91dGVUaXRsZVBhZ2VUcmFuc2xhdGlvblN0cmluZ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRSb3V0ZVRpdGxlID1cbiAgICAgICAgcm91dGVUaXRsZSAmJlxuICAgICAgICAoKHJvdXRlVGl0bGVQYWdlVHJhbnNsYXRpb24gIT09IHJvdXRlVGl0bGVQYWdlVHJhbnNsYXRpb25TdHJpbmdcbiAgICAgICAgICA/IHJvdXRlVGl0bGVQYWdlVHJhbnNsYXRpb25cbiAgICAgICAgICA6ICcnKSB8fFxuICAgICAgICAgIChyb3V0ZVRpdGxlICE9PSByb3V0ZVRpdGxlVHJhbnNsYXRpb24gPyByb3V0ZVRpdGxlVHJhbnNsYXRpb24gOiAnJykgfHxcbiAgICAgICAgICByb3V0ZVRpdGxlKTtcblxuICAgICAgaWYgKHRyYW5zbGF0ZWRSb3V0ZVRpdGxlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdQYWdlVGl0bGU6IHNldFRpdGxlIHRyYW5zbGF0ZWQgYXN5bmMnLCB0cmFuc2xhdGVkUm91dGVUaXRsZSk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlZFRpdGxlJC5uZXh0KHRyYW5zbGF0ZWRSb3V0ZVRpdGxlKTtcbiAgICAgICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGhpcy5hcHBUaXRsZSArICcgLSAnICsgdHJhbnNsYXRlZFJvdXRlVGl0bGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2VUaXRsZTogc2V0VGl0bGUgZGVmYXVsdCcsIHRoaXMuYXBwVGl0bGUpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZWRUaXRsZSQubmV4dCgnJyk7XG4gICAgICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMuYXBwVGl0bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ7dGl0bGU6IHRyYW5zbGF0ZWRUaXRsZSQgfCBhc3luY30gYXMgb2JzXCI+XG4gIDxoMiBjbGFzcz1cInBhZ2UtaGVhZC10aXRsZVwiICpuZ0lmPVwib2JzLnRpdGxlICE9PSAnJ1wiPjxzcGFuIFtpbm5lckhUTUxdPVwib2JzLnRpdGxlXCI+PC9zcGFuPjwvaDI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS10aXRsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2UtdGl0bGUvcGFnZS10aXRsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3BhZ2UtdGl0bGUvcGFnZS10aXRsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRzNELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFlLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQVVsRSxNQUFNLE9BQU8sa0JBQWtCO0lBTzdCLFlBQ21CLE1BQWMsRUFDZCxjQUE4QixFQUM5QixZQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsTUFBaUIsRUFDakIsYUFBNEI7UUFMNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBTztRQUNuQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFaeEMsYUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixJQUFJLFNBQVMsQ0FBQztRQUNuRSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRCxxQkFBZ0IsR0FDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixJQUFJLEtBQUssQ0FBQztJQVU3RSxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLDJCQUEyQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTywrQkFBK0I7UUFDckMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLGFBQWEsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDaEIsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLO2dCQUN0RCxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7WUFDdEUsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sK0JBQStCLEdBQUcsU0FBUyxVQUFVLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztZQUNsRixNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQzdELCtCQUErQixDQUNoQyxDQUFDO1lBQ0YsTUFBTSxvQkFBb0IsR0FDeEIsVUFBVTtnQkFDVixDQUFDLENBQUMseUJBQXlCLEtBQUssK0JBQStCO29CQUM3RCxDQUFDLENBQUMseUJBQXlCO29CQUMzQixDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNMLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNuRSxVQUFVLENBQUMsQ0FBQztZQUVoQixJQUFJLG9CQUFvQixFQUFFO2dCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ2pELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO29CQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUMxRTtxQkFBTTtvQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO2lCQUMxRTthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzNDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztnSEEzRFUsa0JBQWtCO29HQUFsQixrQkFBa0IsMERDN0IvQiwrMEJBbUJBOzRGRFVhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMyBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUaXRsZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tcGFnZS10aXRsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdlLXRpdGxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGFnZS10aXRsZS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VUaXRsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIGFwcFRpdGxlID0gdGhpcy5jb25maWdTZXJ2aWNlPy5jb25maWc/LmFwcGxpY2F0aW9uVGl0bGUgfHwgJ1ZhbHRpbW8nO1xuICByZWFkb25seSB0cmFuc2xhdGVkVGl0bGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBhcHBUaXRsZUFzU3VmZml4ID1cbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2U/LmNvbmZpZz8uZmVhdHVyZVRvZ2dsZXM/LmFwcGxpY2F0aW9uVGl0bGVBc1N1ZmZpeCB8fCBmYWxzZTtcbiAgcHJpdmF0ZSByb3V0ZXJUcmFuc2xhdGVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlU2VydmljZTogVGl0bGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9wZW5Sb3V0ZXJUcmFuc2xhdGVTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucm91dGVyVHJhbnNsYXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUm91dGVyVHJhbnNsYXRlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyVHJhbnNsYXRlU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnJvdXRlci5ldmVudHMsXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgICBdKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3Qgcm91dGVUaXRsZSA9XG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGU/LnNuYXBzaG90Py5maXJzdENoaWxkPy5kYXRhPy50aXRsZSB8fFxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlPy5zbmFwc2hvdD8uZmlyc3RDaGlsZD8uY2hpbGRyZW5bMF0/LmRhdGE/LnRpdGxlO1xuICAgICAgY29uc3Qgcm91dGVUaXRsZVRyYW5zbGF0aW9uID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocm91dGVUaXRsZSk7XG4gICAgICBjb25zdCByb3V0ZVRpdGxlUGFnZVRyYW5zbGF0aW9uU3RyaW5nID0gYHBhZ2VzLiR7cm91dGVUaXRsZS50b0xvd2VyQ2FzZSgpfS50aXRsZWA7XG4gICAgICBjb25zdCByb3V0ZVRpdGxlUGFnZVRyYW5zbGF0aW9uID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgIHJvdXRlVGl0bGVQYWdlVHJhbnNsYXRpb25TdHJpbmdcbiAgICAgICk7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkUm91dGVUaXRsZSA9XG4gICAgICAgIHJvdXRlVGl0bGUgJiZcbiAgICAgICAgKChyb3V0ZVRpdGxlUGFnZVRyYW5zbGF0aW9uICE9PSByb3V0ZVRpdGxlUGFnZVRyYW5zbGF0aW9uU3RyaW5nXG4gICAgICAgICAgPyByb3V0ZVRpdGxlUGFnZVRyYW5zbGF0aW9uXG4gICAgICAgICAgOiAnJykgfHxcbiAgICAgICAgICAocm91dGVUaXRsZSAhPT0gcm91dGVUaXRsZVRyYW5zbGF0aW9uID8gcm91dGVUaXRsZVRyYW5zbGF0aW9uIDogJycpIHx8XG4gICAgICAgICAgcm91dGVUaXRsZSk7XG5cbiAgICAgIGlmICh0cmFuc2xhdGVkUm91dGVUaXRsZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnZVRpdGxlOiBzZXRUaXRsZSB0cmFuc2xhdGVkIGFzeW5jJywgdHJhbnNsYXRlZFJvdXRlVGl0bGUpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZWRUaXRsZSQubmV4dCh0cmFuc2xhdGVkUm91dGVUaXRsZSk7XG4gICAgICAgIGlmICh0aGlzLmFwcFRpdGxlQXNTdWZmaXgpIHtcbiAgICAgICAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRUaXRsZSh0cmFuc2xhdGVkUm91dGVUaXRsZSArICcgLSAnICsgdGhpcy5hcHBUaXRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGhpcy5hcHBUaXRsZSArICcgLSAnICsgdHJhbnNsYXRlZFJvdXRlVGl0bGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnZVRpdGxlOiBzZXRUaXRsZSBkZWZhdWx0JywgdGhpcy5hcHBUaXRsZSk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlZFRpdGxlJC5uZXh0KCcnKTtcbiAgICAgICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGhpcy5hcHBUaXRsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInt0aXRsZTogdHJhbnNsYXRlZFRpdGxlJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgPGgyIGNsYXNzPVwicGFnZS1oZWFkLXRpdGxlXCIgKm5nSWY9XCJvYnMudGl0bGUgIT09ICcnXCI+PHNwYW4gW2lubmVySFRNTF09XCJvYnMudGl0bGVcIj48L3NwYW4+PC9oMj5cbjwvbmctY29udGFpbmVyPlxuIl19