ngx-edu-sharing-ui 9.0.2 → 9.1.2

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 (88) hide show
  1. package/esm2022/lib/actionbar/actionbar.component.mjs +33 -18
  2. package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +73 -62
  3. package/esm2022/lib/directives/check-text-overflow.directive.mjs +8 -2
  4. package/esm2022/lib/directives/icon.directive.mjs +38 -14
  5. package/esm2022/lib/directives/infinite-scroll.directive.mjs +85 -0
  6. package/esm2022/lib/dropdown/dropdown.component.mjs +17 -10
  7. package/esm2022/lib/edu-sharing-ui-configuration.mjs +8 -1
  8. package/esm2022/lib/edu-sharing-ui.module.mjs +5 -1
  9. package/esm2022/lib/list-items/list-base/list-base.component.mjs +6 -6
  10. package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +3 -1
  11. package/esm2022/lib/list-items/list-text/list-text.component.mjs +17 -17
  12. package/esm2022/lib/mds/mds-helper.service.mjs +167 -0
  13. package/esm2022/lib/mds/mds.module.mjs +16 -0
  14. package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +3 -3
  15. package/esm2022/lib/node-entries/entries-model.mjs +2 -1
  16. package/esm2022/lib/node-entries/node-cache.mjs +9 -1
  17. package/esm2022/lib/node-entries/node-data-source.mjs +4 -2
  18. package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +16 -12
  19. package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +37 -22
  20. package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +5 -5
  21. package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +7 -3
  22. package/esm2022/lib/node-entries/node-entries-global.service.mjs +14 -1
  23. package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +3 -3
  24. package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +45 -34
  25. package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +17 -5
  26. package/esm2022/lib/node-entries/node-entries.component.mjs +2 -2
  27. package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +35 -12
  28. package/esm2022/lib/node-entries/option-button/option-button.component.mjs +24 -11
  29. package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +3 -3
  30. package/esm2022/lib/node-url/node-url.component.mjs +7 -3
  31. package/esm2022/lib/pipes/file-size.pipe.mjs +6 -5
  32. package/esm2022/lib/pipes/node-title.pipe.mjs +7 -1
  33. package/esm2022/lib/pipes/option-tooltip.pipe.mjs +3 -3
  34. package/esm2022/lib/pipes/property-slug.pipe.mjs +16 -0
  35. package/esm2022/lib/services/abstract/options-helper.service.mjs +1 -1
  36. package/esm2022/lib/services/app-container.service.mjs +66 -0
  37. package/esm2022/lib/services/node-entries.service.mjs +47 -3
  38. package/esm2022/lib/services/node-helper.service.mjs +38 -12
  39. package/esm2022/lib/services/options-helper-data.service.mjs +5 -5
  40. package/esm2022/lib/services/repo-url.service.mjs +2 -1
  41. package/esm2022/lib/services/ui.service.mjs +22 -1
  42. package/esm2022/lib/spinner/spinner.component.mjs +4 -3
  43. package/esm2022/lib/translations/translation-loader.mjs +48 -14
  44. package/esm2022/lib/translations/translations.module.mjs +15 -4
  45. package/esm2022/lib/translations/translations.service.mjs +25 -7
  46. package/esm2022/lib/types/injection-tokens.mjs +9 -0
  47. package/esm2022/lib/types/option-item.mjs +9 -3
  48. package/esm2022/module.mjs +51 -43
  49. package/fesm2022/ngx-edu-sharing-ui.mjs +4595 -3931
  50. package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
  51. package/lib/actionbar/actionbar.component.d.ts +13 -3
  52. package/lib/common/edu-sharing-ui-common.module.d.ts +27 -25
  53. package/lib/directives/icon.directive.d.ts +6 -4
  54. package/lib/directives/infinite-scroll.directive.d.ts +22 -0
  55. package/lib/dropdown/dropdown.component.d.ts +6 -3
  56. package/lib/edu-sharing-ui-configuration.d.ts +5 -0
  57. package/lib/edu-sharing-ui.module.d.ts +7 -6
  58. package/lib/list-items/list-widget.d.ts +1 -1
  59. package/lib/mds/mds-helper.service.d.ts +37 -0
  60. package/lib/mds/mds.module.d.ts +6 -0
  61. package/lib/node-entries/entries-model.d.ts +3 -2
  62. package/lib/node-entries/node-data-source.d.ts +1 -1
  63. package/lib/node-entries/node-entries-card/node-entries-card.component.d.ts +2 -2
  64. package/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.d.ts +6 -1
  65. package/lib/node-entries/node-entries-global-options/node-entries-global-options.component.d.ts +1 -0
  66. package/lib/node-entries/node-entries-global.service.d.ts +7 -0
  67. package/lib/node-entries/node-entries-table/node-entries-table.component.d.ts +4 -1
  68. package/lib/node-entries/node-entries-wrapper.component.d.ts +8 -3
  69. package/lib/node-entries/node-rating/node-rating.component.d.ts +3 -3
  70. package/lib/node-entries/option-button/option-button.component.d.ts +8 -3
  71. package/lib/pipes/node-title.pipe.d.ts +2 -1
  72. package/lib/pipes/option-tooltip.pipe.d.ts +1 -1
  73. package/lib/pipes/property-slug.pipe.d.ts +7 -0
  74. package/lib/services/abstract/options-helper.service.d.ts +4 -4
  75. package/lib/services/app-container.service.d.ts +43 -0
  76. package/lib/services/node-entries.service.d.ts +31 -6
  77. package/lib/services/node-helper.service.d.ts +7 -5
  78. package/lib/services/options-helper-data.service.d.ts +6 -6
  79. package/lib/services/ui.service.d.ts +15 -2
  80. package/lib/spinner/spinner.component.d.ts +1 -1
  81. package/lib/translations/translation-loader.d.ts +2 -1
  82. package/lib/translations/translations.service.d.ts +5 -2
  83. package/lib/types/injection-tokens.d.ts +8 -0
  84. package/lib/types/option-item.d.ts +10 -6
  85. package/module.d.ts +50 -42
  86. package/package.json +1 -1
  87. package/esm2022/lib/translations/languages.mjs +0 -5
  88. package/lib/translations/languages.d.ts +0 -4
@@ -5,19 +5,22 @@ import { switchMap } from 'rxjs/operators';
5
5
  import { ListItem } from '../../types/list-item';
6
6
  import { ListWidget } from '../list-widget';
7
7
  import * as Constants from 'ngx-edu-sharing-api';
8
+ import { MdsHelperService } from '../../mds/mds-helper.service';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "../../services/node-helper.service";
10
11
  import * as i2 from "ngx-edu-sharing-api";
11
12
  import * as i3 from "@angular/common";
12
- import * as i4 from "@angular/material/tooltip";
13
- import * as i5 from "../../pipes/vcard-name.pipe";
14
- import * as i6 from "../../pipes/file-size.pipe";
15
- import * as i7 from "../../pipes/node-image-size.pipe";
16
- import * as i8 from "../../pipes/node-person-name.pipe";
17
- import * as i9 from "../../pipes/format-date.pipe";
18
- import * as i10 from "@ngx-translate/core";
19
- import * as i11 from "../node-source.pipe";
20
- import * as i12 from "../format-duration.pipe";
13
+ import * as i4 from "../../directives/check-text-overflow.directive";
14
+ import * as i5 from "@angular/material/tooltip";
15
+ import * as i6 from "../list-node-workflow/list-node-workflow.component";
16
+ import * as i7 from "../../pipes/format-date.pipe";
17
+ import * as i8 from "../../pipes/file-size.pipe";
18
+ import * as i9 from "../../pipes/node-image-size.pipe";
19
+ import * as i10 from "../../pipes/node-person-name.pipe";
20
+ import * as i11 from "../../pipes/vcard-name.pipe";
21
+ import * as i12 from "@ngx-translate/core";
22
+ import * as i13 from "../node-source.pipe";
23
+ import * as i14 from "../format-duration.pipe";
21
24
  export class ListTextComponent extends ListWidget {
22
25
  static { this.supportedItems = [
23
26
  new ListItem('NODE', '*'),
@@ -79,13 +82,11 @@ export class ListTextComponent extends ListWidget {
79
82
  : node.properties[this.item.name]?.join(', '));
80
83
  const mds = await this.mds
81
84
  .getMetadataSet({
82
- repository: node.ref?.repo,
85
+ repository: node.ref?.repo || Constants.HOME_REPOSITORY,
83
86
  metadataSet: node.metadataset || Constants.DEFAULT,
84
87
  })
85
88
  .toPromise();
86
- // @TODO
87
- /*
88
- const widget = MdsHelper.getWidget(this.item.name, null, mds.widgets);
89
+ const widget = MdsHelperService.getWidget(this.item.name, null, mds.widgets);
89
90
  if (widget?.values) {
90
91
  const i18n = node.properties[this.item.name]
91
92
  ?.map((prop) => widget.values.filter((v) => v.id === prop)?.[0]?.caption)
@@ -94,13 +95,12 @@ export class ListTextComponent extends ListWidget {
94
95
  this.displayName$.next(i18n.join(', '));
95
96
  }
96
97
  }
97
- */
98
98
  }
99
99
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: ListTextComponent, deps: [{ token: i1.NodeHelperService }, { token: i2.MdsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
100
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: ListTextComponent, selector: "es-list-text", usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"item.config?.showLabel\">\n {{ getI18n(item) | translate }}\n</label>\n<ng-container *ngIf=\"item.type === 'ORG' || item.type === 'GROUP'\">\n <ng-container [ngSwitch]=\"item.name\">\n <span *ngSwitchCase=\"'displayName'\" [class.type-danger]=\"isDangerousGroup()\">\n {{ $any(getNode()).profile.displayName }}\n </span>\n <span *ngSwitchCase=\"'groupType'\">\n {{ 'PERMISSIONS.GROUP_TYPE.' + $any(getNode()).profile.groupType | translate }}\n </span>\n <span *ngSwitchDefault>\n {{ $any(getNode())[item.name] }}\n </span>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"item.type === 'USER'\">\n <span *ngIf=\"isUserProfileAttribute(item.name)\">\n {{ $any(getNode()).profile[item.name] }}\n </span>\n <span *ngIf=\"item.name === 'status'\">\n {{ 'PERMISSIONS.USER_STATUS.' + $any(getNode()).status.status | translate }}\n </span>\n <span *ngIf=\"!isUserProfileAttribute(item.name) && item.name !== 'status'\">\n {{ $any(getNode())[item.name] }}\n </span>\n</ng-container>\n<ng-container\n [ngSwitch]=\"item.name\"\n *ngIf=\"item.type === 'NODE' || item.type === 'NODE_PROPOSAL' || item.type === 'COLLECTION'\"\n>\n <span *ngSwitchCase=\"'name'\">\n {{ $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'title'\"\n [matTooltip]=\"provideLabel ? $any(getNode()).title || $any(getNode()).name : null\"\n >\n {{ $any(getNode()).title || $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'cm:title'\"\n [matTooltip]=\"provideLabel ? $any(getNode()).title || $any(getNode()).name : null\"\n >\n {{ $any(getNode()).title || $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'cclom:title'\"\n [matTooltip]=\"provideLabel ? $any(getNode()).title || $any(getNode()).name : null\"\n >\n {{ $any(getNode()).title || $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'mediatype'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'MEDIATYPE.' + $any(getNode()).mediatype | translate }}\n </span>\n <span *ngSwitchCase=\"'size'\" [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'dimensions'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()) | NodeImageSize }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:wf_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'WORKFLOW.' + getWorkflowStatus().id | translate }}\n </span>\n <span\n *ngSwitchCase=\"'cm:creator'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).createdBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'cm:modifier'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cm:modifier' | translate }}:</span\n >\n {{ $any(getNode()).modifiedBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:replicationsource'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:replicationsource' | translate }}:</span\n >\n {{ $any(getNode()).properties['ccm:replicationsource'] | appNodeSource : { mode: 'text' } }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:commonlicense_key'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:commonlicense_key' | translate }}:</span\n >\n <ng-container *ngIf=\"$any(getNode()).properties['ccm:commonlicense_key'] as license\">\n {{\n license[0] === 'CUSTOM'\n ? $any(getNode()).properties['cclom:rights_description']\n : ('LICENSE.NAMES.' + $any(getNode()).properties['ccm:commonlicense_key']\n | translate : { fallback: $any(getNode()).properties['ccm:commonlicense_key'] })\n }}\n </ng-container>\n <ng-container *ngIf=\"!$any(getNode()).properties['ccm:commonlicense_key']\">\n {{ 'LICENSE.NAMES.NONE' | translate }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'ccm:educationaltypicalagerange'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:educationaltypicalagerange' | translate }}:</span\n >\n <ng-container\n *ngIf=\"\n $any(getNode()).properties['ccm:educationaltypicalagerange_from'] ||\n $any(getNode()).properties['ccm:educationaltypicalagerange_to']\n \"\n >\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_from'] }} -\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_to'] }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'cclom:duration'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cclom:duration' | translate }}:</span\n >\n {{ $any(getNode()).properties['cclom:duration']?.[0] | formatDuration }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:collection_proposal_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:collection_proposal_status' | translate }}:</span\n >\n <!-- use node instead of getNode() to access the raw proposal data! -->\n {{ ('PROPOSAL_STATUS.' + $any(node).properties['ccm:collection_proposal_status']?.[0]) | translate:{fallback: ''} }}\n </span>\n <span *ngSwitchDefault [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n <ng-container\n *ngIf=\"DATE_FIELDS.indexOf(item.name) === -1 && VCARD_FIELDS.indexOf(item.name) === -1\"\n >\n {{ displayName$ | async }}\n </ng-container>\n <ng-container *ngIf=\"DATE_FIELDS.includes(item.name)\">\n {{ $any(getNode()).properties[item.name]?.[0] | formatDate: { async: true } | async }}\n </ng-container>\n <ng-container *ngIf=\"VCARD_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]\n ? ($any(getNode()).properties[item.name][0] | vcardName)\n : ''\n }}\n </ng-container>\n </span>\n</ng-container>\n", styles: [".type-danger{color:var(--warning)}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.VCardNamePipe, name: "vcardName" }, { kind: "pipe", type: i6.FormatSizePipe, name: "formatSize" }, { kind: "pipe", type: i7.NodeImageSizePipe, name: "NodeImageSize" }, { kind: "pipe", type: i8.NodePersonNamePipe, name: "nodePersonName" }, { kind: "pipe", type: i9.FormatDatePipe, name: "formatDate" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }, { kind: "pipe", type: i11.NodeSourcePipe, name: "appNodeSource" }, { kind: "pipe", type: i12.FormatDurationPipe, name: "formatDuration" }] }); }
100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: ListTextComponent, selector: "es-list-text", usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"item.config?.showLabel\">\n {{ getI18n(item) | translate }}\n</label>\n<ng-container *ngIf=\"item.type === 'ORG' || item.type === 'GROUP'\">\n <ng-container [ngSwitch]=\"item.name\">\n <span *ngSwitchCase=\"'displayName'\" [class.type-danger]=\"isDangerousGroup()\">\n {{ $any(getNode()).profile?.displayName || $any(getNode()).authorityName }}\n </span>\n <span *ngSwitchCase=\"'groupType'\">\n {{ 'PERMISSIONS.GROUP_TYPE.' + $any(getNode()).profile?.groupType | translate }}\n </span>\n <span *ngSwitchDefault>\n {{ $any(getNode())[item.name] }}\n </span>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"item.type === 'USER'\">\n <span *ngIf=\"isUserProfileAttribute(item.name)\">\n {{ $any(getNode()).profile?.[item.name] }}\n </span>\n <span *ngIf=\"item.name === 'status'\">\n {{ 'PERMISSIONS.USER_STATUS.' + $any(getNode()).status.status | translate }}\n </span>\n <span *ngIf=\"!isUserProfileAttribute(item.name) && item.name !== 'status'\">\n {{ $any(getNode())[item.name] }}\n </span>\n</ng-container>\n<ng-container\n [ngSwitch]=\"item.name\"\n *ngIf=\"item.type === 'NODE' || item.type === 'NODE_PROPOSAL' || item.type === 'COLLECTION'\"\n>\n <span *ngSwitchCase=\"'name'\">\n {{ $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'mediatype'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'MEDIATYPE.' + $any(getNode()).mediatype | translate }}\n </span>\n <span *ngSwitchCase=\"'size'\" [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'dimensions'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()) | NodeImageSize }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:wf_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <es-list-node-workflow\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"false\"\n ></es-list-node-workflow>\n <!--<span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'WORKFLOW.' + getWorkflowStatus().id | translate }}-->\n </span>\n <span\n *ngSwitchCase=\"'cm:creator'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).createdBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'cm:modifier'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cm:modifier' | translate }}:</span\n >\n {{ $any(getNode()).modifiedBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:replicationsource'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:replicationsource' | translate }}:</span\n >\n {{ $any(getNode()).properties['ccm:replicationsource'] | appNodeSource : { mode: 'text' } }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:commonlicense_key'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:commonlicense_key' | translate }}:</span\n >\n <ng-container *ngIf=\"$any(getNode()).properties['ccm:commonlicense_key'] as license\">\n {{\n license[0] === 'CUSTOM'\n ? $any(getNode()).properties['cclom:rights_description']\n : ('LICENSE.NAMES.' + $any(getNode()).properties['ccm:commonlicense_key']\n | translate : { fallback: $any(getNode()).properties['ccm:commonlicense_key'] })\n }}\n </ng-container>\n <ng-container *ngIf=\"!$any(getNode()).properties['ccm:commonlicense_key']\">\n {{ 'LICENSE.NAMES.NONE' | translate }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'ccm:educationaltypicalagerange'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:educationaltypicalagerange' | translate }}:</span\n >\n <ng-container\n *ngIf=\"\n $any(getNode()).properties['ccm:educationaltypicalagerange_from'] ||\n $any(getNode()).properties['ccm:educationaltypicalagerange_to']\n \"\n >\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_from'] }} -\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_to'] }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'cclom:duration'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cclom:duration' | translate }}:</span\n >\n {{ $any(getNode()).properties['cclom:duration']?.[0] | formatDuration }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:collection_proposal_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:collection_proposal_status' | translate }}:</span\n >\n <!-- use node instead of getNode() to access the raw proposal data! -->\n {{ ('PROPOSAL_STATUS.' + $any(node).properties['ccm:collection_proposal_status']?.[0]) | translate:{fallback: ''} }}\n </span>\n <span\n *ngSwitchDefault\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"\n provideLabel ? (getI18n(item) | translate) : text.hasTextOverflow() ? content.innerText : null\n \"\n #content\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n <ng-container *ngIf=\"['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n {{ $any(getNode()).title || $any(getNode()).name }}\n </ng-container>\n <ng-container *ngIf=\"!['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n <ng-container\n *ngIf=\"DATE_FIELDS.indexOf(item.name) === -1 && VCARD_FIELDS.indexOf(item.name) === -1\"\n >\n {{ displayName$ | async }}\n </ng-container>\n <ng-container *ngIf=\"DATE_FIELDS.includes(item.name)\">\n {{ $any(getNode()).properties[item.name]?.[0] | formatDate: { async: true, time: true, relative: true } | async }}\n </ng-container>\n <ng-container *ngIf=\"VCARD_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]\n ? ($any(getNode()).properties[item.name][0] | vcardName)\n : ''\n }}\n </ng-container>\n </ng-container>\n </span>\n</ng-container>\n", styles: [".type-danger{color:var(--warning)}span{display:block}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.CheckTextOverflowDirective, selector: "[esCheckTextOverflow]", inputs: ["esCheckTextOverflow"], exportAs: ["esCheckTextOverflow"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i6.ListNodeWorkflowComponent, selector: "es-list-node-workflow" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.FormatDatePipe, name: "formatDate" }, { kind: "pipe", type: i8.FormatSizePipe, name: "formatSize" }, { kind: "pipe", type: i9.NodeImageSizePipe, name: "NodeImageSize" }, { kind: "pipe", type: i10.NodePersonNamePipe, name: "nodePersonName" }, { kind: "pipe", type: i11.VCardNamePipe, name: "vcardName" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }, { kind: "pipe", type: i13.NodeSourcePipe, name: "appNodeSource" }, { kind: "pipe", type: i14.FormatDurationPipe, name: "formatDuration" }] }); }
101
101
  }
102
102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: ListTextComponent, decorators: [{
103
103
  type: Component,
104
- args: [{ selector: 'es-list-text', template: "<label *ngIf=\"item.config?.showLabel\">\n {{ getI18n(item) | translate }}\n</label>\n<ng-container *ngIf=\"item.type === 'ORG' || item.type === 'GROUP'\">\n <ng-container [ngSwitch]=\"item.name\">\n <span *ngSwitchCase=\"'displayName'\" [class.type-danger]=\"isDangerousGroup()\">\n {{ $any(getNode()).profile.displayName }}\n </span>\n <span *ngSwitchCase=\"'groupType'\">\n {{ 'PERMISSIONS.GROUP_TYPE.' + $any(getNode()).profile.groupType | translate }}\n </span>\n <span *ngSwitchDefault>\n {{ $any(getNode())[item.name] }}\n </span>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"item.type === 'USER'\">\n <span *ngIf=\"isUserProfileAttribute(item.name)\">\n {{ $any(getNode()).profile[item.name] }}\n </span>\n <span *ngIf=\"item.name === 'status'\">\n {{ 'PERMISSIONS.USER_STATUS.' + $any(getNode()).status.status | translate }}\n </span>\n <span *ngIf=\"!isUserProfileAttribute(item.name) && item.name !== 'status'\">\n {{ $any(getNode())[item.name] }}\n </span>\n</ng-container>\n<ng-container\n [ngSwitch]=\"item.name\"\n *ngIf=\"item.type === 'NODE' || item.type === 'NODE_PROPOSAL' || item.type === 'COLLECTION'\"\n>\n <span *ngSwitchCase=\"'name'\">\n {{ $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'title'\"\n [matTooltip]=\"provideLabel ? $any(getNode()).title || $any(getNode()).name : null\"\n >\n {{ $any(getNode()).title || $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'cm:title'\"\n [matTooltip]=\"provideLabel ? $any(getNode()).title || $any(getNode()).name : null\"\n >\n {{ $any(getNode()).title || $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'cclom:title'\"\n [matTooltip]=\"provideLabel ? $any(getNode()).title || $any(getNode()).name : null\"\n >\n {{ $any(getNode()).title || $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'mediatype'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'MEDIATYPE.' + $any(getNode()).mediatype | translate }}\n </span>\n <span *ngSwitchCase=\"'size'\" [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'dimensions'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()) | NodeImageSize }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:wf_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'WORKFLOW.' + getWorkflowStatus().id | translate }}\n </span>\n <span\n *ngSwitchCase=\"'cm:creator'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).createdBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'cm:modifier'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cm:modifier' | translate }}:</span\n >\n {{ $any(getNode()).modifiedBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:replicationsource'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:replicationsource' | translate }}:</span\n >\n {{ $any(getNode()).properties['ccm:replicationsource'] | appNodeSource : { mode: 'text' } }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:commonlicense_key'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:commonlicense_key' | translate }}:</span\n >\n <ng-container *ngIf=\"$any(getNode()).properties['ccm:commonlicense_key'] as license\">\n {{\n license[0] === 'CUSTOM'\n ? $any(getNode()).properties['cclom:rights_description']\n : ('LICENSE.NAMES.' + $any(getNode()).properties['ccm:commonlicense_key']\n | translate : { fallback: $any(getNode()).properties['ccm:commonlicense_key'] })\n }}\n </ng-container>\n <ng-container *ngIf=\"!$any(getNode()).properties['ccm:commonlicense_key']\">\n {{ 'LICENSE.NAMES.NONE' | translate }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'ccm:educationaltypicalagerange'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:educationaltypicalagerange' | translate }}:</span\n >\n <ng-container\n *ngIf=\"\n $any(getNode()).properties['ccm:educationaltypicalagerange_from'] ||\n $any(getNode()).properties['ccm:educationaltypicalagerange_to']\n \"\n >\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_from'] }} -\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_to'] }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'cclom:duration'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cclom:duration' | translate }}:</span\n >\n {{ $any(getNode()).properties['cclom:duration']?.[0] | formatDuration }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:collection_proposal_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:collection_proposal_status' | translate }}:</span\n >\n <!-- use node instead of getNode() to access the raw proposal data! -->\n {{ ('PROPOSAL_STATUS.' + $any(node).properties['ccm:collection_proposal_status']?.[0]) | translate:{fallback: ''} }}\n </span>\n <span *ngSwitchDefault [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n <ng-container\n *ngIf=\"DATE_FIELDS.indexOf(item.name) === -1 && VCARD_FIELDS.indexOf(item.name) === -1\"\n >\n {{ displayName$ | async }}\n </ng-container>\n <ng-container *ngIf=\"DATE_FIELDS.includes(item.name)\">\n {{ $any(getNode()).properties[item.name]?.[0] | formatDate: { async: true } | async }}\n </ng-container>\n <ng-container *ngIf=\"VCARD_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]\n ? ($any(getNode()).properties[item.name][0] | vcardName)\n : ''\n }}\n </ng-container>\n </span>\n</ng-container>\n", styles: [".type-danger{color:var(--warning)}\n"] }]
104
+ args: [{ selector: 'es-list-text', template: "<label *ngIf=\"item.config?.showLabel\">\n {{ getI18n(item) | translate }}\n</label>\n<ng-container *ngIf=\"item.type === 'ORG' || item.type === 'GROUP'\">\n <ng-container [ngSwitch]=\"item.name\">\n <span *ngSwitchCase=\"'displayName'\" [class.type-danger]=\"isDangerousGroup()\">\n {{ $any(getNode()).profile?.displayName || $any(getNode()).authorityName }}\n </span>\n <span *ngSwitchCase=\"'groupType'\">\n {{ 'PERMISSIONS.GROUP_TYPE.' + $any(getNode()).profile?.groupType | translate }}\n </span>\n <span *ngSwitchDefault>\n {{ $any(getNode())[item.name] }}\n </span>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"item.type === 'USER'\">\n <span *ngIf=\"isUserProfileAttribute(item.name)\">\n {{ $any(getNode()).profile?.[item.name] }}\n </span>\n <span *ngIf=\"item.name === 'status'\">\n {{ 'PERMISSIONS.USER_STATUS.' + $any(getNode()).status.status | translate }}\n </span>\n <span *ngIf=\"!isUserProfileAttribute(item.name) && item.name !== 'status'\">\n {{ $any(getNode())[item.name] }}\n </span>\n</ng-container>\n<ng-container\n [ngSwitch]=\"item.name\"\n *ngIf=\"item.type === 'NODE' || item.type === 'NODE_PROPOSAL' || item.type === 'COLLECTION'\"\n>\n <span *ngSwitchCase=\"'name'\">\n {{ $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'mediatype'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'MEDIATYPE.' + $any(getNode()).mediatype | translate }}\n </span>\n <span *ngSwitchCase=\"'size'\" [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'dimensions'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()) | NodeImageSize }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:wf_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <es-list-node-workflow\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"false\"\n ></es-list-node-workflow>\n <!--<span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'WORKFLOW.' + getWorkflowStatus().id | translate }}-->\n </span>\n <span\n *ngSwitchCase=\"'cm:creator'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).createdBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'cm:modifier'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cm:modifier' | translate }}:</span\n >\n {{ $any(getNode()).modifiedBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:replicationsource'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:replicationsource' | translate }}:</span\n >\n {{ $any(getNode()).properties['ccm:replicationsource'] | appNodeSource : { mode: 'text' } }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:commonlicense_key'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:commonlicense_key' | translate }}:</span\n >\n <ng-container *ngIf=\"$any(getNode()).properties['ccm:commonlicense_key'] as license\">\n {{\n license[0] === 'CUSTOM'\n ? $any(getNode()).properties['cclom:rights_description']\n : ('LICENSE.NAMES.' + $any(getNode()).properties['ccm:commonlicense_key']\n | translate : { fallback: $any(getNode()).properties['ccm:commonlicense_key'] })\n }}\n </ng-container>\n <ng-container *ngIf=\"!$any(getNode()).properties['ccm:commonlicense_key']\">\n {{ 'LICENSE.NAMES.NONE' | translate }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'ccm:educationaltypicalagerange'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:educationaltypicalagerange' | translate }}:</span\n >\n <ng-container\n *ngIf=\"\n $any(getNode()).properties['ccm:educationaltypicalagerange_from'] ||\n $any(getNode()).properties['ccm:educationaltypicalagerange_to']\n \"\n >\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_from'] }} -\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_to'] }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'cclom:duration'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cclom:duration' | translate }}:</span\n >\n {{ $any(getNode()).properties['cclom:duration']?.[0] | formatDuration }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:collection_proposal_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:collection_proposal_status' | translate }}:</span\n >\n <!-- use node instead of getNode() to access the raw proposal data! -->\n {{ ('PROPOSAL_STATUS.' + $any(node).properties['ccm:collection_proposal_status']?.[0]) | translate:{fallback: ''} }}\n </span>\n <span\n *ngSwitchDefault\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"\n provideLabel ? (getI18n(item) | translate) : text.hasTextOverflow() ? content.innerText : null\n \"\n #content\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n <ng-container *ngIf=\"['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n {{ $any(getNode()).title || $any(getNode()).name }}\n </ng-container>\n <ng-container *ngIf=\"!['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n <ng-container\n *ngIf=\"DATE_FIELDS.indexOf(item.name) === -1 && VCARD_FIELDS.indexOf(item.name) === -1\"\n >\n {{ displayName$ | async }}\n </ng-container>\n <ng-container *ngIf=\"DATE_FIELDS.includes(item.name)\">\n {{ $any(getNode()).properties[item.name]?.[0] | formatDate: { async: true, time: true, relative: true } | async }}\n </ng-container>\n <ng-container *ngIf=\"VCARD_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]\n ? ($any(getNode()).properties[item.name][0] | vcardName)\n : ''\n }}\n </ng-container>\n </ng-container>\n </span>\n</ng-container>\n", styles: [".type-danger{color:var(--warning)}span{display:block}\n"] }]
105
105
  }], ctorParameters: function () { return [{ type: i1.NodeHelperService }, { type: i2.MdsService }, { type: i0.ChangeDetectorRef }]; } });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbGlzdC1pdGVtcy9saXN0LXRleHQvbGlzdC10ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbGlzdC1pdGVtcy9saXN0LXRleHQvbGlzdC10ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUF5QixNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQWtDLGFBQWEsRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQU9qRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsVUFBVTthQUN0QyxtQkFBYyxHQUFHO1FBQ3BCLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7UUFDekIsSUFBSSxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQztRQUNsQyxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDO1FBQy9CLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7UUFDeEIsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztRQUMxQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxD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SSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDcEQsQ0FBQztRQUVGLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUc7YUFDckIsY0FBYyxDQUFDO1lBQ1osVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSTtZQUMxQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsT0FBTztTQUNyRCxDQUFDO2FBQ0QsU0FBUyxFQUFFLENBQUM7UUFDakIsUUFBUTtRQUNSOzs7Ozs7Ozs7O1dBVUc7SUFDUCxDQUFDOzhHQTNGUSxpQkFBaUI7a0dBQWpCLGlCQUFpQixnR0NkOUIsNmdPQWdMQTs7MkZEbEthLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDSSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZHNTZXJ2aWNlLCBOb2RlLCBPcmdhbml6YXRpb24sIFJlc3RDb25zdGFudHMsIFByb3Bvc2FsTm9kZSB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICcuLi8uLi90eXBlcy9saXN0LWl0ZW0nO1xuaW1wb3J0IHsgTGlzdFdpZGdldCB9IGZyb20gJy4uL2xpc3Qtd2lkZ2V0JztcbmltcG9ydCB7IE5vZGVIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBDb25zdGFudHMgZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXMtbGlzdC10ZXh0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGlzdC10ZXh0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9saXN0LXRleHQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlzdFRleHRDb21wb25lbnQgZXh0ZW5kcyBMaXN0V2lkZ2V0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBzdGF0aWMgc3VwcG9ydGVkSXRlbXMgPSBbXG4gICAgICAgIG5ldyBMaXN0SXRlbSgnTk9ERScsICcqJyksXG4gICAgICAgIG5ldyBMaXN0SXRlbSgnTk9ERV9QUk9QT1NBTCcsICcqJyksXG4gICAgICAgIG5ldyBMaXN0SXRlbSgnQ09MTEVDVElPTicsICcqJyksXG4gICAgICAgIG5ldyBMaXN0SXRlbSgnT1JHJywgJyonKSxcbiAgICAgICAgbmV3IExpc3RJdGVtKCdHUk9VUCcsICcqJyksXG4gICAgICAgIG5ldyBMaXN0SXRlbSgnVVNFUicsICcqJyksXG4gICAgXTtcbiAgICByZWFkb25seSBEQVRFX0ZJRUxEUyA9IFJlc3RDb25zdGFudHMuREFURV9GSUVMRFM7XG4gICAgcmVhZG9ubHkgVkNBUkRfRklFTERTID0gUmVzdENvbnN0YW50cy5nZXRBbGxWQ2FyZEZpZWxkcygpO1xuICAgIGRpc3BsYXlOYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG5vZGVIZWxwZXI6IE5vZGVIZWxwZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1kczogTWRzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge31cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICBtZXJnZShbdGhpcy5ub2RlU3ViamVjdCwgdGhpcy5pdGVtU3ViamVjdF0pXG4gICAgICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy51cGRhdGVEaXNwbGF5bmFtZSgpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRpc3BsYXlOYW1lKSA9PiB7fSk7XG4gICAgfVxuICAgIGdldE5vZGUoKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW0udHlwZSA9PT0gJ05PREVfUFJPUE9TQUwnKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMubm9kZSBhcyBQcm9wb3NhbE5vZGUpLnByb3Bvc2FsIHx8IHRoaXMubm9kZTtcbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5ub2RlIGFzIE5vZGUpLnR5cGUgPT09IFJlc3RDb25zdGFudHMuQ0NNX1RZUEVfQ09MTEVDVElPTl9QUk9QT1NBTCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLm5vZGUgYXMgTm9kZSkucmVsYXRpb25zPy5PcmlnaW5hbCA/PyB0aGlzLm5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgICB9XG5cbiAgICBpc1VzZXJQcm9maWxlQXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgUmVzdENvbnN0YW50cy5BVVRIT1JJVFlfRklSU1ROQU1FLFxuICAgICAgICAgICAgICAgIFJlc3RDb25zdGFudHMuQVVUSE9SSVRZX0xBU1ROQU1FLFxuICAgICAgICAgICAgICAgIFJlc3RDb25zdGFudHMuQVVUSE9SSVRZX0VNQUlMLFxuICAgICAgICAgICAgXS5pbmRleE9mKGF0dHJpYnV0ZSkgIT09IC0xXG4gICAgICAgICk7XG4gICAgfVxuICAgIGdldFdvcmtmbG93U3RhdHVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlSGVscGVyLmdldFdvcmtmbG93U3RhdHVzKHRoaXMubm9kZSBhcyBOb2RlKS5jdXJyZW50O1xuICAgIH1cblxuICAgIGdldEkxOG4oaXRlbTogTGlzdEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIChpdGVtLnR5cGUgPT09ICdOT0RFX1BST1BPU0FMJyA/ICdOT0RFX1BST1BPU0FMJyA6ICdOT0RFJykgKyAnLicgKyBpdGVtLm5hbWU7XG4gICAgfVxuXG4gICAgaXNEYW5nZXJvdXNHcm91cCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLm5vZGUgYXMgT3JnYW5pemF0aW9uKS5hdXRob3JpdHlOYW1lID09PVxuICAgICAgICAgICAgUmVzdENvbnN0YW50cy5HUk9VUF9BTEZSRVNDT19BRE1JTklTVFJBVE9SU1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdXBkYXRlRGlzcGxheW5hbWUoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSBhcyBOb2RlO1xuICAgICAgICBpZiAoIW5vZGUucHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSQubmV4dCgnJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSQubmV4dChcbiAgICAgICAgICAgIG5vZGUucHJvcGVydGllc1t0aGlzLml0ZW0ubmFtZSArICdfRElTUExBWU5BTUUnXT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gbm9kZS5wcm9wZXJ0aWVzW3RoaXMuaXRlbS5uYW1lICsgJ19ESVNQTEFZTkFNRSddLmpvaW4oJywgJylcbiAgICAgICAgICAgICAgICA6IG5vZGUucHJvcGVydGllc1t0aGlzLml0ZW0ubmFtZV0/LmpvaW4oJywgJyksXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgbWRzID0gYXdhaXQgdGhpcy5tZHNcbiAgICAgICAgICAgIC5nZXRNZXRhZGF0YVNldCh7XG4gICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogbm9kZS5yZWY/LnJlcG8sXG4gICAgICAgICAgICAgICAgbWV0YWRhdGFTZXQ6IG5vZGUubWV0YWRhdGFzZXQgfHwgQ29uc3RhbnRzLkRFRkFVTFQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgICAgICAvLyBAVE9ET1xuICAgICAgICAvKlxuICAgICAgICBjb25zdCB3aWRnZXQgPSBNZHNIZWxwZXIuZ2V0V2lkZ2V0KHRoaXMuaXRlbS5uYW1lLCBudWxsLCBtZHMud2lkZ2V0cyk7XG4gICAgICAgIGlmICh3aWRnZXQ/LnZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgaTE4biA9IG5vZGUucHJvcGVydGllc1t0aGlzLml0ZW0ubmFtZV1cbiAgICAgICAgICAgICAgICA/Lm1hcCgocHJvcCkgPT4gd2lkZ2V0LnZhbHVlcy5maWx0ZXIoKHYpID0+IHYuaWQgPT09IHByb3ApPy5bMF0/LmNhcHRpb24pXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY2FwKSA9PiAhIWNhcCk7XG4gICAgICAgICAgICBpZiAoaTE4bikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUkLm5leHQoaTE4bi5qb2luKCcsICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAgKi9cbiAgICB9XG59XG4iLCI8bGFiZWwgKm5nSWY9XCJpdGVtLmNvbmZpZz8uc2hvd0xhYmVsXCI+XG4gIHt7IGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUgfX1cbjwvbGFiZWw+XG48bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlID09PSAnT1JHJyB8fCBpdGVtLnR5cGUgPT09ICdHUk9VUCdcIj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaXRlbS5uYW1lXCI+XG4gICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkaXNwbGF5TmFtZSdcIiBbY2xhc3MudHlwZS1kYW5nZXJdPVwiaXNEYW5nZXJvdXNHcm91cCgpXCI+XG4gICAgICB7eyAkYW55KGdldE5vZGUoKSkucHJvZmlsZS5kaXNwbGF5TmFtZSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2dyb3VwVHlwZSdcIj5cbiAgICAgIHt7ICdQRVJNSVNTSU9OUy5HUk9VUF9UWVBFLicgKyAkYW55KGdldE5vZGUoKSkucHJvZmlsZS5ncm91cFR5cGUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgIHt7ICRhbnkoZ2V0Tm9kZSgpKVtpdGVtLm5hbWVdIH19XG4gICAgPC9zcGFuPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ1VTRVInXCI+XG4gIDxzcGFuICpuZ0lmPVwiaXNVc2VyUHJvZmlsZUF0dHJpYnV0ZShpdGVtLm5hbWUpXCI+XG4gICAge3sgJGFueShnZXROb2RlKCkpLnByb2ZpbGVbaXRlbS5uYW1lXSB9fVxuICA8L3NwYW4+XG4gIDxzcGFuICpuZ0lmPVwiaXRlbS5uYW1lID09PSAnc3RhdHVzJ1wiPlxuICAgIHt7ICdQRVJNSVNTSU9OUy5VU0VSX1NUQVRVUy4nICsgJGFueShnZXROb2RlKCkpLnN0YXR1cy5zdGF0dXMgfCB0cmFuc2xhdGUgfX1cbiAgPC9zcGFuPlxuICA8c3BhbiAqbmdJZj1cIiFpc1VzZXJQcm9maWxlQXR0cmlidXRlKGl0ZW0ubmFtZSkgJiYgaXRlbS5uYW1lICE9PSAnc3RhdHVzJ1wiPlxuICAgIHt7ICRhbnkoZ2V0Tm9kZSgpKVtpdGVtLm5hbWVdIH19XG4gIDwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lclxuICBbbmdTd2l0Y2hdPVwiaXRlbS5uYW1lXCJcbiAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdOT0RFJyB8fCBpdGVtLnR5cGUgPT09ICdOT0RFX1BST1BPU0FMJyB8fCBpdGVtLnR5cGUgPT09ICdDT0xMRUNUSU9OJ1wiXG4+XG4gIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbmFtZSdcIj5cbiAgICB7eyAkYW55KGdldE5vZGUoKSkubmFtZSB9fVxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgKm5nU3dpdGNoQ2FzZT1cIid0aXRsZSdcIlxuICAgIFttYXRUb29sdGlwXT1cInByb3ZpZGVMYWJlbCA/ICRhbnkoZ2V0Tm9kZSgpKS50aXRsZSB8fCAkYW55KGdldE5vZGUoKSkubmFtZSA6IG51bGxcIlxuICA+XG4gICAge3sgJGFueShnZXROb2RlKCkpLnRpdGxlIHx8ICRhbnkoZ2V0Tm9kZSgpKS5uYW1lIH19XG4gIDwvc3Bhbj5cbiAgPHNwYW5cbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NtOnRpdGxlJ1wiXG4gICAgW21hdFRvb2x0aXBdPVwicHJvdmlkZUxhYmVsID8gJGFueShnZXROb2RlKCkpLnRpdGxlIHx8ICRhbnkoZ2V0Tm9kZSgpKS5uYW1lIDogbnVsbFwiXG4gID5cbiAgICB7eyAkYW55KGdldE5vZGUoKSkudGl0bGUgfHwgJGFueShnZXROb2RlKCkpLm5hbWUgfX1cbiAgPC9zcGFuPlxuICA8c3BhblxuICAgICpuZ1N3aXRjaENhc2U9XCInY2Nsb206dGl0bGUnXCJcbiAgICBbbWF0VG9vbHRpcF09XCJwcm92aWRlTGFiZWwgPyAkYW55KGdldE5vZGUoKSkudGl0bGUgfHwgJGFueShnZXROb2RlKCkpLm5hbWUgOiBudWxsXCJcbiAgPlxuICAgIHt7ICRhbnkoZ2V0Tm9kZSgpKS50aXRsZSB8fCAkYW55KGdldE5vZGUoKSkubmFtZSB9fVxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidtZWRpYXR5cGUnXCJcbiAgICBbbWF0VG9vbHRpcF09XCJwcm92aWRlTGFiZWwgPyAoZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgPlxuICAgIDxzcGFuICpuZ0lmPVwicHJvdmlkZUxhYmVsXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+e3sgZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSB9fTo8L3NwYW4+XG4gICAge3sgJ01FRElBVFlQRS4nICsgJGFueShnZXROb2RlKCkpLm1lZGlhdHlwZSB8IHRyYW5zbGF0ZSB9fVxuICA8L3NwYW4+XG4gIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInc2l6ZSdcIiBbbWF0VG9vbHRpcF09XCJwcm92aWRlTGFiZWwgPyAoZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSkgOiBudWxsXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJwcm92aWRlTGFiZWxcIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIj57eyBnZXRJMThuKGl0ZW0pIHwgdHJhbnNsYXRlIH19Ojwvc3Bhbj5cbiAgICB7eyAkYW55KGdldE5vZGUoKSkuc2l6ZSB8IGZvcm1hdFNpemUgfX1cbiAgPC9zcGFuPlxuICA8c3BhblxuICAgICpuZ1N3aXRjaENhc2U9XCInZGltZW5zaW9ucydcIlxuICAgIFttYXRUb29sdGlwXT1cInByb3ZpZGVMYWJlbCA/IChnZXRJMThuKGl0ZW0pIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICA+XG4gICAgPHNwYW4gKm5nSWY9XCJwcm92aWRlTGFiZWxcIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIj57eyBnZXRJMThuKGl0ZW0pIHwgdHJhbnNsYXRlIH19Ojwvc3Bhbj5cbiAgICB7eyAkYW55KGdldE5vZGUoKSkgfCBOb2RlSW1hZ2VTaXplIH19XG4gIDwvc3Bhbj5cbiAgPHNwYW5cbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NjbTp3Zl9zdGF0dXMnXCJcbiAgICBbbWF0VG9vbHRpcF09XCJwcm92aWRlTGFiZWwgPyAoZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgPlxuICAgIDxzcGFuICpuZ0lmPVwicHJvdmlkZUxhYmVsXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+e3sgZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSB9fTo8L3NwYW4+XG4gICAge3sgJ1dPUktGTE9XLicgKyBnZXRXb3JrZmxvd1N0YXR1cygpLmlkIHwgdHJhbnNsYXRlIH19XG4gIDwvc3Bhbj5cbiAgPHNwYW5cbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NtOmNyZWF0b3InXCJcbiAgICBbbWF0VG9vbHRpcF09XCJwcm92aWRlTGFiZWwgPyAoZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgPlxuICAgIDxzcGFuICpuZ0lmPVwicHJvdmlkZUxhYmVsXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+e3sgZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSB9fTo8L3NwYW4+XG4gICAge3sgJGFueShnZXROb2RlKCkpLmNyZWF0ZWRCeSB8IG5vZGVQZXJzb25OYW1lIH19XG4gIDwvc3Bhbj5cbiAgPHNwYW5cbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NtOm1vZGlmaWVyJ1wiXG4gICAgW21hdFRvb2x0aXBdPVwicHJvdmlkZUxhYmVsID8gKGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUpIDogbnVsbFwiXG4gID5cbiAgICA8c3BhbiAqbmdJZj1cInByb3ZpZGVMYWJlbFwiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgICA+e3sgJ05PREUuY206bW9kaWZpZXInIHwgdHJhbnNsYXRlIH19Ojwvc3BhblxuICAgID5cbiAgICB7eyAkYW55KGdldE5vZGUoKSkubW9kaWZpZWRCeSB8IG5vZGVQZXJzb25OYW1lIH19XG4gIDwvc3Bhbj5cbiAgPHNwYW5cbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NjbTpyZXBsaWNhdGlvbnNvdXJjZSdcIlxuICAgIFttYXRUb29sdGlwXT1cInByb3ZpZGVMYWJlbCA/IChnZXRJMThuKGl0ZW0pIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICA+XG4gICAgPHNwYW4gKm5nSWY9XCJwcm92aWRlTGFiZWxcIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIlxuICAgICAgPnt7ICdOT0RFLmNjbTpyZXBsaWNhdGlvbnNvdXJjZScgfCB0cmFuc2xhdGUgfX06PC9zcGFuXG4gICAgPlxuICAgIHt7ICRhbnkoZ2V0Tm9kZSgpKS5wcm9wZXJ0aWVzWydjY206cmVwbGljYXRpb25zb3VyY2UnXSB8IGFwcE5vZGVTb3VyY2UgOiB7IG1vZGU6ICd0ZXh0JyB9IH19XG4gIDwvc3Bhbj5cbiAgPHNwYW5cbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NjbTpjb21tb25saWNlbnNlX2tleSdcIlxuICAgIFttYXRUb29sdGlwXT1cInByb3ZpZGVMYWJlbCA/IChnZXRJMThuKGl0ZW0pIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICA+XG4gICAgPHNwYW4gKm5nSWY9XCJwcm92aWRlTGFiZWxcIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIlxuICAgICAgPnt7ICdOT0RFLmNjbTpjb21tb25saWNlbnNlX2tleScgfCB0cmFuc2xhdGUgfX06PC9zcGFuXG4gICAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIkYW55KGdldE5vZGUoKSkucHJvcGVydGllc1snY2NtOmNvbW1vbmxpY2Vuc2Vfa2V5J10gYXMgbGljZW5zZVwiPlxuICAgICAge3tcbiAgICAgICAgbGljZW5zZVswXSA9PT0gJ0NVU1RPTSdcbiAgICAgICAgICA/ICRhbnkoZ2V0Tm9kZSgpKS5wcm9wZXJ0aWVzWydjY2xvbTpyaWdodHNfZGVzY3JpcHRpb24nXVxuICAgICAgICAgIDogKCdMSUNFTlNFLk5BTUVTLicgKyAkYW55KGdldE5vZGUoKSkucHJvcGVydGllc1snY2NtOmNvbW1vbmxpY2Vuc2Vfa2V5J11cbiAgICAgICAgICAgIHwgdHJhbnNsYXRlIDogeyBmYWxsYmFjazogJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbJ2NjbTpjb21tb25saWNlbnNlX2tleSddIH0pXG4gICAgICB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbJ2NjbTpjb21tb25saWNlbnNlX2tleSddXCI+XG4gICAgICB7eyAnTElDRU5TRS5OQU1FUy5OT05FJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidjY206ZWR1Y2F0aW9uYWx0eXBpY2FsYWdlcmFuZ2UnXCJcbiAgICBbbWF0VG9vbHRpcF09XCJwcm92aWRlTGFiZWwgPyAoZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgPlxuICAgIDxzcGFuICpuZ0lmPVwicHJvdmlkZUxhYmVsXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCJcbiAgICAgID57eyAnTk9ERS5jY206ZWR1Y2F0aW9uYWx0eXBpY2FsYWdlcmFuZ2UnIHwgdHJhbnNsYXRlIH19Ojwvc3BhblxuICAgID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAkYW55KGdldE5vZGUoKSkucHJvcGVydGllc1snY2NtOmVkdWNhdGlvbmFsdHlwaWNhbGFnZXJhbmdlX2Zyb20nXSB8fFxuICAgICAgICAkYW55KGdldE5vZGUoKSkucHJvcGVydGllc1snY2NtOmVkdWNhdGlvbmFsdHlwaWNhbGFnZXJhbmdlX3RvJ11cbiAgICAgIFwiXG4gICAgPlxuICAgICAge3sgJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbJ2NjbTplZHVjYXRpb25hbHR5cGljYWxhZ2VyYW5nZV9mcm9tJ10gfX0gLVxuICAgICAge3sgJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbJ2NjbTplZHVjYXRpb25hbHR5cGljYWxhZ2VyYW5nZV90byddIH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvc3Bhbj5cbiAgPHNwYW5cbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NjbG9tOmR1cmF0aW9uJ1wiXG4gICAgW21hdFRvb2x0aXBdPVwicHJvdmlkZUxhYmVsID8gKGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUpIDogbnVsbFwiXG4gID5cbiAgICA8c3BhbiAqbmdJZj1cInByb3ZpZGVMYWJlbFwiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgICA+e3sgJ05PREUuY2Nsb206ZHVyYXRpb24nIHwgdHJhbnNsYXRlIH19Ojwvc3BhblxuICAgID5cbiAgICB7eyAkYW55KGdldE5vZGUoKSkucHJvcGVydGllc1snY2Nsb206ZHVyYXRpb24nXT8uWzBdIHwgZm9ybWF0RHVyYXRpb24gfX1cbiAgPC9zcGFuPlxuICA8c3BhblxuICAgICpuZ1N3aXRjaENhc2U9XCInY2NtOmNvbGxlY3Rpb25fcHJvcG9zYWxfc3RhdHVzJ1wiXG4gICAgW21hdFRvb2x0aXBdPVwicHJvdmlkZUxhYmVsID8gKGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUpIDogbnVsbFwiXG4gID5cbiAgICA8c3BhbiAqbmdJZj1cInByb3ZpZGVMYWJlbFwiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgICA+e3sgJ05PREUuY2NtOmNvbGxlY3Rpb25fcHJvcG9zYWxfc3RhdHVzJyB8IHRyYW5zbGF0ZSB9fTo8L3NwYW5cbiAgICA+XG4gICAgPCEtLSB1c2Ugbm9kZSBpbnN0ZWFkIG9mIGdldE5vZGUoKSB0byBhY2Nlc3MgdGhlIHJhdyBwcm9wb3NhbCBkYXRhISAtLT5cbiAgICB7eyAoJ1BST1BPU0FMX1NUQVRVUy4nICsgJGFueShub2RlKS5wcm9wZXJ0aWVzWydjY206Y29sbGVjdGlvbl9wcm9wb3NhbF9zdGF0dXMnXT8uWzBdKSB8IHRyYW5zbGF0ZTp7ZmFsbGJhY2s6ICcnfSB9fVxuICA8L3NwYW4+XG4gIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgW21hdFRvb2x0aXBdPVwicHJvdmlkZUxhYmVsID8gKGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUpIDogbnVsbFwiPlxuICAgIDxzcGFuICpuZ0lmPVwicHJvdmlkZUxhYmVsXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+e3sgZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSB9fTo8L3NwYW4+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJEQVRFX0ZJRUxEUy5pbmRleE9mKGl0ZW0ubmFtZSkgPT09IC0xICYmIFZDQVJEX0ZJRUxEUy5pbmRleE9mKGl0ZW0ubmFtZSkgPT09IC0xXCJcbiAgICA+XG4gICAgICB7eyBkaXNwbGF5TmFtZSQgfCBhc3luYyB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEQVRFX0ZJRUxEUy5pbmNsdWRlcyhpdGVtLm5hbWUpXCI+XG4gICAgICB7eyAkYW55KGdldE5vZGUoKSkucHJvcGVydGllc1tpdGVtLm5hbWVdPy5bMF0gfCBmb3JtYXREYXRlOiB7IGFzeW5jOiB0cnVlIH0gfCBhc3luYyB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJWQ0FSRF9GSUVMRFMuaW5jbHVkZXMoaXRlbS5uYW1lKVwiPlxuICAgICAge3tcbiAgICAgICAgJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbaXRlbS5uYW1lXVxuICAgICAgICAgID8gKCRhbnkoZ2V0Tm9kZSgpKS5wcm9wZXJ0aWVzW2l0ZW0ubmFtZV1bMF0gfCB2Y2FyZE5hbWUpXG4gICAgICAgICAgOiAnJ1xuICAgICAgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zcGFuPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbGlzdC1pdGVtcy9saXN0LXRleHQvbGlzdC10ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbGlzdC1pdGVtcy9saXN0LXRleHQvbGlzdC10ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUF5QixNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQWtDLGFBQWEsRUFBZ0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBT2hFLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxVQUFVO2FBQ3RDLG1CQUFjLEdBQUc7UUFDcEIsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztRQUN6QixJQUFJLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDO1FBQ2xDLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUM7UUFDL0IsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztRQUN4QixJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUs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QWlCO2tHQUFqQixpQkFBaUIsZ0dDZjlCLHlqT0FnTEE7OzJGRGpLYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0ksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWRzU2VydmljZSwgTm9kZSwgT3JnYW5pemF0aW9uLCBSZXN0Q29uc3RhbnRzLCBQcm9wb3NhbE5vZGUgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi4vLi4vdHlwZXMvbGlzdC1pdGVtJztcbmltcG9ydCB7IExpc3RXaWRnZXQgfSBmcm9tICcuLi9saXN0LXdpZGdldCc7XG5pbXBvcnQgeyBOb2RlSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgQ29uc3RhbnRzIGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgTWRzSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL21kcy9tZHMtaGVscGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLWxpc3QtdGV4dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbGlzdC10ZXh0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIExpc3RUZXh0Q29tcG9uZW50IGV4dGVuZHMgTGlzdFdpZGdldCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgc3RhdGljIHN1cHBvcnRlZEl0ZW1zID0gW1xuICAgICAgICBuZXcgTGlzdEl0ZW0oJ05PREUnLCAnKicpLFxuICAgICAgICBuZXcgTGlzdEl0ZW0oJ05PREVfUFJPUE9TQUwnLCAnKicpLFxuICAgICAgICBuZXcgTGlzdEl0ZW0oJ0NPTExFQ1RJT04nLCAnKicpLFxuICAgICAgICBuZXcgTGlzdEl0ZW0oJ09SRycsICcqJyksXG4gICAgICAgIG5ldyBMaXN0SXRlbSgnR1JPVVAnLCAnKicpLFxuICAgICAgICBuZXcgTGlzdEl0ZW0oJ1VTRVInLCAnKicpLFxuICAgIF07XG4gICAgcmVhZG9ubHkgREFURV9GSUVMRFMgPSBSZXN0Q29uc3RhbnRzLkRBVEVfRklFTERTO1xuICAgIHJlYWRvbmx5IFZDQVJEX0ZJRUxEUyA9IFJlc3RDb25zdGFudHMuZ2V0QWxsVkNhcmRGaWVsZHMoKTtcbiAgICBkaXNwbGF5TmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4obnVsbCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBub2RlSGVscGVyOiBOb2RlSGVscGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtZHM6IE1kc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHt9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgbWVyZ2UoW3RoaXMubm9kZVN1YmplY3QsIHRoaXMuaXRlbVN1YmplY3RdKVxuICAgICAgICAgICAgLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMudXBkYXRlRGlzcGxheW5hbWUoKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkaXNwbGF5TmFtZSkgPT4ge30pO1xuICAgIH1cbiAgICBnZXROb2RlKCkge1xuICAgICAgICBpZiAodGhpcy5pdGVtLnR5cGUgPT09ICdOT0RFX1BST1BPU0FMJykge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLm5vZGUgYXMgUHJvcG9zYWxOb2RlKS5wcm9wb3NhbCB8fCB0aGlzLm5vZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMubm9kZSBhcyBOb2RlKS50eXBlID09PSBSZXN0Q29uc3RhbnRzLkNDTV9UWVBFX0NPTExFQ1RJT05fUFJPUE9TQUwpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5ub2RlIGFzIE5vZGUpLnJlbGF0aW9ucz8uT3JpZ2luYWwgPz8gdGhpcy5ub2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGU7XG4gICAgfVxuXG4gICAgaXNVc2VyUHJvZmlsZUF0dHJpYnV0ZShhdHRyaWJ1dGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFJlc3RDb25zdGFudHMuQVVUSE9SSVRZX0ZJUlNUTkFNRSxcbiAgICAgICAgICAgICAgICBSZXN0Q29uc3RhbnRzLkFVVEhPUklUWV9MQVNUTkFNRSxcbiAgICAgICAgICAgICAgICBSZXN0Q29uc3RhbnRzLkFVVEhPUklUWV9FTUFJTCxcbiAgICAgICAgICAgIF0uaW5kZXhPZihhdHRyaWJ1dGUpICE9PSAtMVxuICAgICAgICApO1xuICAgIH1cbiAgICBnZXRXb3JrZmxvd1N0YXR1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZUhlbHBlci5nZXRXb3JrZmxvd1N0YXR1cyh0aGlzLm5vZGUgYXMgTm9kZSkuY3VycmVudDtcbiAgICB9XG5cbiAgICBnZXRJMThuKGl0ZW06IExpc3RJdGVtKSB7XG4gICAgICAgIHJldHVybiAoaXRlbS50eXBlID09PSAnTk9ERV9QUk9QT1NBTCcgPyAnTk9ERV9QUk9QT1NBTCcgOiAnTk9ERScpICsgJy4nICsgaXRlbS5uYW1lO1xuICAgIH1cblxuICAgIGlzRGFuZ2Vyb3VzR3JvdXAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodGhpcy5ub2RlIGFzIE9yZ2FuaXphdGlvbikuYXV0aG9yaXR5TmFtZSA9PT1cbiAgICAgICAgICAgIFJlc3RDb25zdGFudHMuR1JPVVBfQUxGUkVTQ09fQURNSU5JU1RSQVRPUlNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHVwZGF0ZURpc3BsYXluYW1lKCkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCkgYXMgTm9kZTtcbiAgICAgICAgaWYgKCFub2RlLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUkLm5leHQoJycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcGxheU5hbWUkLm5leHQoXG4gICAgICAgICAgICBub2RlLnByb3BlcnRpZXNbdGhpcy5pdGVtLm5hbWUgKyAnX0RJU1BMQVlOQU1FJ10/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IG5vZGUucHJvcGVydGllc1t0aGlzLml0ZW0ubmFtZSArICdfRElTUExBWU5BTUUnXS5qb2luKCcsICcpXG4gICAgICAgICAgICAgICAgOiBub2RlLnByb3BlcnRpZXNbdGhpcy5pdGVtLm5hbWVdPy5qb2luKCcsICcpLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG1kcyA9IGF3YWl0IHRoaXMubWRzXG4gICAgICAgICAgICAuZ2V0TWV0YWRhdGFTZXQoe1xuICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IG5vZGUucmVmPy5yZXBvIHx8IENvbnN0YW50cy5IT01FX1JFUE9TSVRPUlksXG4gICAgICAgICAgICAgICAgbWV0YWRhdGFTZXQ6IG5vZGUubWV0YWRhdGFzZXQgfHwgQ29uc3RhbnRzLkRFRkFVTFQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgICAgICBjb25zdCB3aWRnZXQgPSBNZHNIZWxwZXJTZXJ2aWNlLmdldFdpZGdldCh0aGlzLml0ZW0ubmFtZSwgbnVsbCwgbWRzLndpZGdldHMpO1xuICAgICAgICBpZiAod2lkZ2V0Py52YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG4gPSBub2RlLnByb3BlcnRpZXNbdGhpcy5pdGVtLm5hbWVdXG4gICAgICAgICAgICAgICAgPy5tYXAoKHByb3ApID0+IHdpZGdldC52YWx1ZXMuZmlsdGVyKCh2KSA9PiB2LmlkID09PSBwcm9wKT8uWzBdPy5jYXB0aW9uKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNhcCkgPT4gISFjYXApO1xuICAgICAgICAgICAgaWYgKGkxOG4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlOYW1lJC5uZXh0KGkxOG4uam9pbignLCAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bGFiZWwgKm5nSWY9XCJpdGVtLmNvbmZpZz8uc2hvd0xhYmVsXCI+XG4gIHt7IGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUgfX1cbjwvbGFiZWw+XG48bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlID09PSAnT1JHJyB8fCBpdGVtLnR5cGUgPT09ICdHUk9VUCdcIj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaXRlbS5uYW1lXCI+XG4gICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkaXNwbGF5TmFtZSdcIiBbY2xhc3MudHlwZS1kYW5nZXJdPVwiaXNEYW5nZXJvdXNHcm91cCgpXCI+XG4gICAgICB7eyAkYW55KGdldE5vZGUoKSkucHJvZmlsZT8uZGlzcGxheU5hbWUgfHwgJGFueShnZXROb2RlKCkpLmF1dGhvcml0eU5hbWUgfX1cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidncm91cFR5cGUnXCI+XG4gICAgICB7eyAnUEVSTUlTU0lPTlMuR1JPVVBfVFlQRS4nICsgJGFueShnZXROb2RlKCkpLnByb2ZpbGU/Lmdyb3VwVHlwZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAge3sgJGFueShnZXROb2RlKCkpW2l0ZW0ubmFtZV0gfX1cbiAgICA8L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlID09PSAnVVNFUidcIj5cbiAgPHNwYW4gKm5nSWY9XCJpc1VzZXJQcm9maWxlQXR0cmlidXRlKGl0ZW0ubmFtZSlcIj5cbiAgICB7eyAkYW55KGdldE5vZGUoKSkucHJvZmlsZT8uW2l0ZW0ubmFtZV0gfX1cbiAgPC9zcGFuPlxuICA8c3BhbiAqbmdJZj1cIml0ZW0ubmFtZSA9PT0gJ3N0YXR1cydcIj5cbiAgICB7eyAnUEVSTUlTU0lPTlMuVVNFUl9TVEFUVVMuJyArICRhbnkoZ2V0Tm9kZSgpKS5zdGF0dXMuc3RhdHVzIHwgdHJhbnNsYXRlIH19XG4gIDwvc3Bhbj5cbiAgPHNwYW4gKm5nSWY9XCIhaXNVc2VyUHJvZmlsZUF0dHJpYnV0ZShpdGVtLm5hbWUpICYmIGl0ZW0ubmFtZSAhPT0gJ3N0YXR1cydcIj5cbiAgICB7eyAkYW55KGdldE5vZGUoKSlbaXRlbS5uYW1lXSB9fVxuICA8L3NwYW4+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXJcbiAgW25nU3dpdGNoXT1cIml0ZW0ubmFtZVwiXG4gICpuZ0lmPVwiaXRlbS50eXBlID09PSAnTk9ERScgfHwgaXRlbS50eXBlID09PSAnTk9ERV9QUk9QT1NBTCcgfHwgaXRlbS50eXBlID09PSAnQ09MTEVDVElPTidcIlxuPlxuICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ25hbWUnXCI+XG4gICAge3sgJGFueShnZXROb2RlKCkpLm5hbWUgfX1cbiAgPC9zcGFuPlxuICA8c3BhblxuICAgICpuZ1N3aXRjaENhc2U9XCInbWVkaWF0eXBlJ1wiXG4gICAgW21hdFRvb2x0aXBdPVwicHJvdmlkZUxhYmVsID8gKGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUpIDogbnVsbFwiXG4gID5cbiAgICA8c3BhbiAqbmdJZj1cInByb3ZpZGVMYWJlbFwiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiPnt7IGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUgfX06PC9zcGFuPlxuICAgIHt7ICdNRURJQVRZUEUuJyArICRhbnkoZ2V0Tm9kZSgpKS5tZWRpYXR5cGUgfCB0cmFuc2xhdGUgfX1cbiAgPC9zcGFuPlxuICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3NpemUnXCIgW21hdFRvb2x0aXBdPVwicHJvdmlkZUxhYmVsID8gKGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUpIDogbnVsbFwiPlxuICAgIDxzcGFuICpuZ0lmPVwicHJvdmlkZUxhYmVsXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+e3sgZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSB9fTo8L3NwYW4+XG4gICAge3sgJGFueShnZXROb2RlKCkpLnNpemUgfCBmb3JtYXRTaXplIH19XG4gIDwvc3Bhbj5cbiAgPHNwYW5cbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ2RpbWVuc2lvbnMnXCJcbiAgICBbbWF0VG9vbHRpcF09XCJwcm92aWRlTGFiZWwgPyAoZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgPlxuICAgIDxzcGFuICpuZ0lmPVwicHJvdmlkZUxhYmVsXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+e3sgZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSB9fTo8L3NwYW4+XG4gICAge3sgJGFueShnZXROb2RlKCkpIHwgTm9kZUltYWdlU2l6ZSB9fVxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidjY206d2Zfc3RhdHVzJ1wiXG4gICAgW21hdFRvb2x0aXBdPVwicHJvdmlkZUxhYmVsID8gKGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUpIDogbnVsbFwiXG4gID5cbiAgICA8ZXMtbGlzdC1ub2RlLXdvcmtmbG93XG4gICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgW3Byb3ZpZGVMYWJlbF09XCJmYWxzZVwiXG4gICAgPjwvZXMtbGlzdC1ub2RlLXdvcmtmbG93PlxuICAgIDwhLS08c3BhbiAqbmdJZj1cInByb3ZpZGVMYWJlbFwiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiPnt7IGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUgfX06PC9zcGFuPlxuICAgIHt7ICdXT1JLRkxPVy4nICsgZ2V0V29ya2Zsb3dTdGF0dXMoKS5pZCB8IHRyYW5zbGF0ZSB9fS0tPlxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidjbTpjcmVhdG9yJ1wiXG4gICAgW21hdFRvb2x0aXBdPVwicHJvdmlkZUxhYmVsID8gKGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUpIDogbnVsbFwiXG4gID5cbiAgICA8c3BhbiAqbmdJZj1cInByb3ZpZGVMYWJlbFwiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiPnt7IGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUgfX06PC9zcGFuPlxuICAgIHt7ICRhbnkoZ2V0Tm9kZSgpKS5jcmVhdGVkQnkgfCBub2RlUGVyc29uTmFtZSB9fVxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidjbTptb2RpZmllcidcIlxuICAgIFttYXRUb29sdGlwXT1cInByb3ZpZGVMYWJlbCA/IChnZXRJMThuKGl0ZW0pIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICA+XG4gICAgPHNwYW4gKm5nSWY9XCJwcm92aWRlTGFiZWxcIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIlxuICAgICAgPnt7ICdOT0RFLmNtOm1vZGlmaWVyJyB8IHRyYW5zbGF0ZSB9fTo8L3NwYW5cbiAgICA+XG4gICAge3sgJGFueShnZXROb2RlKCkpLm1vZGlmaWVkQnkgfCBub2RlUGVyc29uTmFtZSB9fVxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidjY206cmVwbGljYXRpb25zb3VyY2UnXCJcbiAgICBbbWF0VG9vbHRpcF09XCJwcm92aWRlTGFiZWwgPyAoZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgPlxuICAgIDxzcGFuICpuZ0lmPVwicHJvdmlkZUxhYmVsXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCJcbiAgICAgID57eyAnTk9ERS5jY206cmVwbGljYXRpb25zb3VyY2UnIHwgdHJhbnNsYXRlIH19Ojwvc3BhblxuICAgID5cbiAgICB7eyAkYW55KGdldE5vZGUoKSkucHJvcGVydGllc1snY2NtOnJlcGxpY2F0aW9uc291cmNlJ10gfCBhcHBOb2RlU291cmNlIDogeyBtb2RlOiAndGV4dCcgfSB9fVxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidjY206Y29tbW9ubGljZW5zZV9rZXknXCJcbiAgICBbbWF0VG9vbHRpcF09XCJwcm92aWRlTGFiZWwgPyAoZ2V0STE4bihpdGVtKSB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgPlxuICAgIDxzcGFuICpuZ0lmPVwicHJvdmlkZUxhYmVsXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCJcbiAgICAgID57eyAnTk9ERS5jY206Y29tbW9ubGljZW5zZV9rZXknIHwgdHJhbnNsYXRlIH19Ojwvc3BhblxuICAgID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbJ2NjbTpjb21tb25saWNlbnNlX2tleSddIGFzIGxpY2Vuc2VcIj5cbiAgICAgIHt7XG4gICAgICAgIGxpY2Vuc2VbMF0gPT09ICdDVVNUT00nXG4gICAgICAgICAgPyAkYW55KGdldE5vZGUoKSkucHJvcGVydGllc1snY2Nsb206cmlnaHRzX2Rlc2NyaXB0aW9uJ11cbiAgICAgICAgICA6ICgnTElDRU5TRS5OQU1FUy4nICsgJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbJ2NjbTpjb21tb25saWNlbnNlX2tleSddXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZSA6IHsgZmFsbGJhY2s6ICRhbnkoZ2V0Tm9kZSgpKS5wcm9wZXJ0aWVzWydjY206Y29tbW9ubGljZW5zZV9rZXknXSB9KVxuICAgICAgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISRhbnkoZ2V0Tm9kZSgpKS5wcm9wZXJ0aWVzWydjY206Y29tbW9ubGljZW5zZV9rZXknXVwiPlxuICAgICAge3sgJ0xJQ0VOU0UuTkFNRVMuTk9ORScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zcGFuPlxuICA8c3BhblxuICAgICpuZ1N3aXRjaENhc2U9XCInY2NtOmVkdWNhdGlvbmFsdHlwaWNhbGFnZXJhbmdlJ1wiXG4gICAgW21hdFRvb2x0aXBdPVwicHJvdmlkZUxhYmVsID8gKGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUpIDogbnVsbFwiXG4gID5cbiAgICA8c3BhbiAqbmdJZj1cInByb3ZpZGVMYWJlbFwiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgICA+e3sgJ05PREUuY2NtOmVkdWNhdGlvbmFsdHlwaWNhbGFnZXJhbmdlJyB8IHRyYW5zbGF0ZSB9fTo8L3NwYW5cbiAgICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbJ2NjbTplZHVjYXRpb25hbHR5cGljYWxhZ2VyYW5nZV9mcm9tJ10gfHxcbiAgICAgICAgJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbJ2NjbTplZHVjYXRpb25hbHR5cGljYWxhZ2VyYW5nZV90byddXG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7ICRhbnkoZ2V0Tm9kZSgpKS5wcm9wZXJ0aWVzWydjY206ZWR1Y2F0aW9uYWx0eXBpY2FsYWdlcmFuZ2VfZnJvbSddIH19IC1cbiAgICAgIHt7ICRhbnkoZ2V0Tm9kZSgpKS5wcm9wZXJ0aWVzWydjY206ZWR1Y2F0aW9uYWx0eXBpY2FsYWdlcmFuZ2VfdG8nXSB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidjY2xvbTpkdXJhdGlvbidcIlxuICAgIFttYXRUb29sdGlwXT1cInByb3ZpZGVMYWJlbCA/IChnZXRJMThuKGl0ZW0pIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICA+XG4gICAgPHNwYW4gKm5nSWY9XCJwcm92aWRlTGFiZWxcIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIlxuICAgICAgPnt7ICdOT0RFLmNjbG9tOmR1cmF0aW9uJyB8IHRyYW5zbGF0ZSB9fTo8L3NwYW5cbiAgICA+XG4gICAge3sgJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbJ2NjbG9tOmR1cmF0aW9uJ10/LlswXSB8IGZvcm1hdER1cmF0aW9uIH19XG4gIDwvc3Bhbj5cbiAgPHNwYW5cbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NjbTpjb2xsZWN0aW9uX3Byb3Bvc2FsX3N0YXR1cydcIlxuICAgIFttYXRUb29sdGlwXT1cInByb3ZpZGVMYWJlbCA/IChnZXRJMThuKGl0ZW0pIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICA+XG4gICAgPHNwYW4gKm5nSWY9XCJwcm92aWRlTGFiZWxcIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIlxuICAgICAgPnt7ICdOT0RFLmNjbTpjb2xsZWN0aW9uX3Byb3Bvc2FsX3N0YXR1cycgfCB0cmFuc2xhdGUgfX06PC9zcGFuXG4gICAgPlxuICAgIDwhLS0gdXNlIG5vZGUgaW5zdGVhZCBvZiBnZXROb2RlKCkgdG8gYWNjZXNzIHRoZSByYXcgcHJvcG9zYWwgZGF0YSEgLS0+XG4gICAge3sgKCdQUk9QT1NBTF9TVEFUVVMuJyArICRhbnkobm9kZSkucHJvcGVydGllc1snY2NtOmNvbGxlY3Rpb25fcHJvcG9zYWxfc3RhdHVzJ10/LlswXSkgfCB0cmFuc2xhdGU6e2ZhbGxiYWNrOiAnJ30gfX1cbiAgPC9zcGFuPlxuICA8c3BhblxuICAgICpuZ1N3aXRjaERlZmF1bHRcbiAgICBlc0NoZWNrVGV4dE92ZXJmbG93XG4gICAgI3RleHQ9XCJlc0NoZWNrVGV4dE92ZXJmbG93XCJcbiAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgIHByb3ZpZGVMYWJlbCA/IChnZXRJMThuKGl0ZW0pIHwgdHJhbnNsYXRlKSA6IHRleHQuaGFzVGV4dE92ZXJmbG93KCkgPyBjb250ZW50LmlubmVyVGV4dCA6IG51bGxcbiAgICBcIlxuICAgICNjb250ZW50XG4gID5cbiAgICA8c3BhbiAqbmdJZj1cInByb3ZpZGVMYWJlbFwiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiPnt7IGdldEkxOG4oaXRlbSkgfCB0cmFuc2xhdGUgfX06PC9zcGFuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJbJ3RpdGxlJywgJ2NtOnRpdGxlJywgJ2NjbG9tOnRpdGxlJ10uaW5jbHVkZXMoaXRlbS5uYW1lKVwiPlxuICAgICAge3sgJGFueShnZXROb2RlKCkpLnRpdGxlIHx8ICRhbnkoZ2V0Tm9kZSgpKS5uYW1lIH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFbJ3RpdGxlJywgJ2NtOnRpdGxlJywgJ2NjbG9tOnRpdGxlJ10uaW5jbHVkZXMoaXRlbS5uYW1lKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIkRBVEVfRklFTERTLmluZGV4T2YoaXRlbS5uYW1lKSA9PT0gLTEgJiYgVkNBUkRfRklFTERTLmluZGV4T2YoaXRlbS5uYW1lKSA9PT0gLTFcIlxuICAgICAgPlxuICAgICAgICB7eyBkaXNwbGF5TmFtZSQgfCBhc3luYyB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiREFURV9GSUVMRFMuaW5jbHVkZXMoaXRlbS5uYW1lKVwiPlxuICAgICAgICB7eyAkYW55KGdldE5vZGUoKSkucHJvcGVydGllc1tpdGVtLm5hbWVdPy5bMF0gfCBmb3JtYXREYXRlOiB7IGFzeW5jOiB0cnVlLCB0aW1lOiB0cnVlLCByZWxhdGl2ZTogdHJ1ZSB9IHwgYXN5bmMgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlZDQVJEX0ZJRUxEUy5pbmNsdWRlcyhpdGVtLm5hbWUpXCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbaXRlbS5uYW1lXVxuICAgICAgICAgICAgPyAoJGFueShnZXROb2RlKCkpLnByb3BlcnRpZXNbaXRlbS5uYW1lXVswXSB8IHZjYXJkTmFtZSlcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3NwYW4+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -0,0 +1,167 @@
1
+ import { RestConstants, } from 'ngx-edu-sharing-api';
2
+ import { Injectable } from '@angular/core';
3
+ import { ListItem } from '../types/list-item';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "ngx-edu-sharing-api";
6
+ export class MdsHelperService {
7
+ static getSortInfo(mdsSet, name) {
8
+ if (mdsSet) {
9
+ if (mdsSet.sorts) {
10
+ for (const list of mdsSet.sorts) {
11
+ if (list.id == name) {
12
+ return list;
13
+ }
14
+ }
15
+ }
16
+ console.error('mds does not define sort info for ' + name + ', invalid configuration!');
17
+ }
18
+ return null;
19
+ }
20
+ static getColumns(translate, mdsSet, name) {
21
+ let columns = [];
22
+ if (mdsSet) {
23
+ for (const list of mdsSet.lists) {
24
+ if (list.id === name) {
25
+ for (const column of list.columns) {
26
+ let type = 'NODE';
27
+ if (name === 'mediacenterGroups') {
28
+ type = 'GROUP';
29
+ }
30
+ else if (name === 'searchCollections') {
31
+ type = 'COLLECTION';
32
+ }
33
+ // in this case, the type is included
34
+ if (column.id.includes('.')) {
35
+ const split = column.id.split('.');
36
+ type = split[0];
37
+ column.id = split[1];
38
+ }
39
+ const item = new ListItem(type, column.id);
40
+ item.format = column.format;
41
+ columns.push(item);
42
+ }
43
+ break;
44
+ }
45
+ }
46
+ }
47
+ if (!columns.length) {
48
+ if (mdsSet !== null) {
49
+ console.warn('mds does not define columns for ' + name + ', invalid configuration!');
50
+ }
51
+ if (name === 'search' || name === 'collectionReferences') {
52
+ columns.push(new ListItem('NODE', RestConstants.LOM_PROP_TITLE));
53
+ columns.push(new ListItem('NODE', RestConstants.CM_MODIFIED_DATE));
54
+ columns.push(new ListItem('NODE', RestConstants.CCM_PROP_LICENSE));
55
+ columns.push(new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCE));
56
+ }
57
+ else if (name === 'mediacenterManaged') {
58
+ columns.push(new ListItem('NODE', RestConstants.LOM_PROP_TITLE));
59
+ columns.push(new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCEID));
60
+ columns.push(new ListItem('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCE));
61
+ }
62
+ else if (name === 'mediacenterGroups') {
63
+ columns.push(new ListItem('GROUP', RestConstants.AUTHORITY_DISPLAYNAME));
64
+ columns.push(new ListItem('GROUP', RestConstants.AUTHORITY_GROUPTYPE));
65
+ }
66
+ else if (name === 'searchCollections') {
67
+ columns.push(new ListItem('COLLECTION', 'title'));
68
+ columns.push(new ListItem('COLLECTION', 'info'));
69
+ columns.push(new ListItem('COLLECTION', 'scope'));
70
+ }
71
+ }
72
+ columns.map((c) => {
73
+ const key = c.type + '.' + c.name;
74
+ if (c.type === 'NODE' && translate.instant(key) === key) {
75
+ c.label = mdsSet.widgets.filter((w) => w.id === c.name)?.[0]?.caption;
76
+ }
77
+ return c;
78
+ });
79
+ return columns;
80
+ }
81
+ /**
82
+ * Finds the appropriate widget with the id, but will not check any widget conditions
83
+ * @param cid
84
+ * @param template
85
+ * @param widgets
86
+ */
87
+ static getWidget(cid, template, widgets) {
88
+ if (widgets == null) {
89
+ console.warn('Could not iterate widget ' + cid + ': no widgets data provided');
90
+ return null;
91
+ }
92
+ for (let w of widgets) {
93
+ if (w.id == cid) {
94
+ if (template === undefined || w.template === template) {
95
+ return w;
96
+ }
97
+ }
98
+ }
99
+ return null;
100
+ }
101
+ constructor(authentication) {
102
+ this.authentication = authentication;
103
+ }
104
+ /**
105
+ * Same as getWidget, but will also check the widget conditions
106
+ * @param connector
107
+ * @param properties
108
+ * @param id
109
+ * @param template
110
+ * @param widgets
111
+ */
112
+ async getWidgetWithCondition(properties, id, template = null, widgets) {
113
+ for (let w of widgets) {
114
+ if (w.id == id) {
115
+ if ((template == null || w.template == template) &&
116
+ (await this.isWidgetConditionTrue(w, properties))) {
117
+ return w;
118
+ }
119
+ }
120
+ }
121
+ return null;
122
+ }
123
+ async isWidgetConditionTrue(widget, properties) {
124
+ if (!widget.condition)
125
+ return true;
126
+ let condition = widget.condition;
127
+ if (condition.type == 'PROPERTY' && properties) {
128
+ if ((!properties[condition.value] && !condition.negate) ||
129
+ (properties[condition.value] && condition.negate)) {
130
+ return false;
131
+ }
132
+ }
133
+ if (condition.type == 'TOOLPERMISSION') {
134
+ let tp = await this.authentication.hasToolpermission(condition.value);
135
+ if (tp == condition.negate) {
136
+ return false;
137
+ }
138
+ }
139
+ return true;
140
+ }
141
+ /**
142
+ * Find a template by id in the given mds
143
+ */
144
+ static findTemplate(mds, id) {
145
+ return mds.views.find((v) => v.id === id);
146
+ }
147
+ /**
148
+ * Returns all widgets used by the given template
149
+ */
150
+ static getUsedWidgets(mds, template = null) {
151
+ const used = [];
152
+ const templateData = MdsHelperService.findTemplate(mds, template);
153
+ for (const w of mds.widgets) {
154
+ if (templateData.html.indexOf('<' + w.id) !== -1 &&
155
+ !used.find((w2) => w2.id === w.id)) {
156
+ used.push(w);
157
+ }
158
+ }
159
+ return used;
160
+ }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MdsHelperService, deps: [{ token: i1.AuthenticationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
162
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MdsHelperService }); }
163
+ }
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MdsHelperService, decorators: [{
165
+ type: Injectable
166
+ }], ctorParameters: function () { return [{ type: i1.AuthenticationService }]; } });
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRzLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9tZHMvbWRzLWhlbHBlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFLSCxhQUFhLEdBRWhCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFnQixNQUFNLG9CQUFvQixDQUFDOzs7QUFHNUQsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQXFCLEVBQUUsSUFBWTtRQUNsRCxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDZCxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7b0JBQzdCLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUU7d0JBQ2pCLE9BQU8sSUFBSSxDQUFDO3FCQUNmO2lCQUNKO2FBQ0o7WUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxHQUFHLElBQUksR0FBRywwQkFBMEIsQ0FBQyxDQUFDO1NBQzNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBMkIsRUFBRSxNQUFXLEVBQUUsSUFBWTtRQUNwRSxJQUFJLE9BQU8sR0FBZSxFQUFFLENBQUM7UUFDN0IsSUFBSSxNQUFNLEVBQUU7WUFDUixLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7Z0JBQzdCLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQ2xCLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTt3QkFDL0IsSUFBSSxJQUFJLEdB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QUFLLENBQUMsQ0FBQztZQUN0RSxJQUFJLEVBQUUsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUN4QixPQUFPLEtBQUssQ0FBQzthQUNoQjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFrQixFQUFFLEVBQVU7UUFDOUMsT0FDSSxHQUFHLENBQUMsS0FHUCxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0Q7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQWtCLEVBQUUsV0FBbUIsSUFBSTtRQUM3RCxNQUFNLElBQUksR0FBUSxFQUFFLENBQUM7UUFDckIsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRSxLQUFLLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7WUFDekIsSUFDSSxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDekM7Z0JBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs4R0F4S1EsZ0JBQWdCO2tIQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICAgIEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBNZHNEZWZpbml0aW9uLFxuICAgIE1kc1NvcnQsXG4gICAgTWRzV2lkZ2V0LFxuICAgIFJlc3RDb25zdGFudHMsXG4gICAgU29ydCxcbn0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaXN0SXRlbSwgTGlzdEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMvbGlzdC1pdGVtJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1kc0hlbHBlclNlcnZpY2Uge1xuICAgIHN0YXRpYyBnZXRTb3J0SW5mbyhtZHNTZXQ6IE1kc0RlZmluaXRpb24sIG5hbWU6IHN0cmluZyk6IE1kc1NvcnQge1xuICAgICAgICBpZiAobWRzU2V0KSB7XG4gICAgICAgICAgICBpZiAobWRzU2V0LnNvcnRzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsaXN0IG9mIG1kc1NldC5zb3J0cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5pZCA9PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ21kcyBkb2VzIG5vdCBkZWZpbmUgc29ydCBpbmZvIGZvciAnICsgbmFtZSArICcsIGludmFsaWQgY29uZmlndXJhdGlvbiEnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGdldENvbHVtbnModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBtZHNTZXQ6IGFueSwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBjb2x1bW5zOiBMaXN0SXRlbVtdID0gW107XG4gICAgICAgIGlmIChtZHNTZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGlzdCBvZiBtZHNTZXQubGlzdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdC5pZCA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBsaXN0LmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0eXBlOiBMaXN0SXRlbVR5cGUgPSAnTk9ERSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ21lZGlhY2VudGVyR3JvdXBzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnR1JPVVAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnc2VhcmNoQ29sbGVjdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdDT0xMRUNUSU9OJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSwgdGhlIHR5cGUgaXMgaW5jbHVkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uaWQuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gY29sdW1uLmlkLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHNwbGl0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pZCA9IHNwbGl0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBMaXN0SXRlbSh0eXBlLCBjb2x1bW4uaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5mb3JtYXQgPSBjb2x1bW4uZm9ybWF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAobWRzU2V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAnbWRzIGRvZXMgbm90IGRlZmluZSBjb2x1bW5zIGZvciAnICsgbmFtZSArICcsIGludmFsaWQgY29uZmlndXJhdGlvbiEnLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3NlYXJjaCcgfHwgbmFtZSA9PT0gJ2NvbGxlY3Rpb25SZWZlcmVuY2VzJykge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChuZXcgTGlzdEl0ZW0oJ05PREUnLCBSZXN0Q29uc3RhbnRzLkxPTV9QUk9QX1RJVExFKSk7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKG5ldyBMaXN0SXRlbSgnTk9ERScsIFJlc3RDb25zdGFudHMuQ01fTU9ESUZJRURfREFURSkpO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChuZXcgTGlzdEl0ZW0oJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNDTV9QUk9QX0xJQ0VOU0UpKTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2gobmV3IExpc3RJdGVtKCdOT0RFJywgUmVzdENvbnN0YW50cy5DQ01fUFJPUF9SRVBMSUNBVElPTlNPVVJDRSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnbWVkaWFjZW50ZXJNYW5hZ2VkJykge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChuZXcgTGlzdEl0ZW0oJ05PREUnLCBSZXN0Q29uc3RhbnRzLkxPTV9QUk9QX1RJVExFKSk7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKG5ldyBMaXN0SXRlbSgnTk9ERScsIFJlc3RDb25zdGFudHMuQ0NNX1BST1BfUkVQTElDQVRJT05TT1VSQ0VJRCkpO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChuZXcgTGlzdEl0ZW0oJ05PREUnLCBSZXN0Q29uc3RhbnRzLkNDTV9QUk9QX1JFUExJQ0FUSU9OU09VUkNFKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdtZWRpYWNlbnRlckdyb3VwcycpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2gobmV3IExpc3RJdGVtKCdHUk9VUCcsIFJlc3RDb25zdGFudHMuQVVUSE9SSVRZX0RJU1BMQVlOQU1FKSk7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKG5ldyBMaXN0SXRlbSgnR1JPVVAnLCBSZXN0Q29uc3RhbnRzLkFVVEhPUklUWV9HUk9VUFRZUEUpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3NlYXJjaENvbGxlY3Rpb25zJykge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChuZXcgTGlzdEl0ZW0oJ0NPTExFQ1RJT04nLCAndGl0bGUnKSk7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKG5ldyBMaXN0SXRlbSgnQ09MTEVDVElPTicsICdpbmZvJykpO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChuZXcgTGlzdEl0ZW0oJ0NPTExFQ1RJT04nLCAnc2NvcGUnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29sdW1ucy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGMudHlwZSArICcuJyArIGMubmFtZTtcbiAgICAgICAgICAgIGlmIChjLnR5cGUgPT09ICdOT0RFJyAmJiB0cmFuc2xhdGUuaW5zdGFudChrZXkpID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICBjLmxhYmVsID0gbWRzU2V0LndpZGdldHMuZmlsdGVyKCh3OiBhbnkpID0+IHcuaWQgPT09IGMubmFtZSk/LlswXT8uY2FwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgdGhlIGFwcHJvcHJpYXRlIHdpZGdldCB3aXRoIHRoZSBpZCwgYnV0IHdpbGwgbm90IGNoZWNrIGFueSB3aWRnZXQgY29uZGl0aW9uc1xuICAgICAqIEBwYXJhbSBjaWRcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGVcbiAgICAgKiBAcGFyYW0gd2lkZ2V0c1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRXaWRnZXQoY2lkOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCB3aWRnZXRzOiBNZHNXaWRnZXRbXSkge1xuICAgICAgICBpZiAod2lkZ2V0cyA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBpdGVyYXRlIHdpZGdldCAnICsgY2lkICsgJzogbm8gd2lkZ2V0cyBkYXRhIHByb3ZpZGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCB3IG9mIHdpZGdldHMpIHtcbiAgICAgICAgICAgIGlmICh3LmlkID09IGNpZCkge1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHcudGVtcGxhdGUgPT09IHRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhlbnRpY2F0aW9uOiBBdXRoZW50aWNhdGlvblNlcnZpY2UpIHt9XG5cbiAgICAvKipcbiAgICAgKiBTYW1lIGFzIGdldFdpZGdldCwgYnV0IHdpbGwgYWxzbyBjaGVjayB0aGUgd2lkZ2V0IGNvbmRpdGlvbnNcbiAgICAgKiBAcGFyYW0gY29ubmVjdG9yXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXNcbiAgICAgKiBAcGFyYW0gaWRcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGVcbiAgICAgKiBAcGFyYW0gd2lkZ2V0c1xuICAgICAqL1xuICAgIGFzeW5jIGdldFdpZGdldFdpdGhDb25kaXRpb24oXG4gICAgICAgIHByb3BlcnRpZXM6IGFueSxcbiAgICAgICAgaWQ6IHN0cmluZyxcbiAgICAgICAgdGVtcGxhdGU6IHN0cmluZyA9IG51bGwsXG4gICAgICAgIHdpZGdldHM6IGFueSxcbiAgICApIHtcbiAgICAgICAgZm9yIChsZXQgdyBvZiB3aWRnZXRzKSB7XG4gICAgICAgICAgICBpZiAody5pZCA9PSBpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKHRlbXBsYXRlID09IG51bGwgfHwgdy50ZW1wbGF0ZSA9PSB0ZW1wbGF0ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKGF3YWl0IHRoaXMuaXNXaWRnZXRDb25kaXRpb25UcnVlKHcsIHByb3BlcnRpZXMpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgaXNXaWRnZXRDb25kaXRpb25UcnVlKHdpZGdldDogYW55LCBwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICAgICAgaWYgKCF3aWRnZXQuY29uZGl0aW9uKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgbGV0IGNvbmRpdGlvbiA9IHdpZGdldC5jb25kaXRpb247XG4gICAgICAgIGlmIChjb25kaXRpb24udHlwZSA9PSAnUFJPUEVSVFknICYmIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoIXByb3BlcnRpZXNbY29uZGl0aW9uLnZhbHVlXSAmJiAhY29uZGl0aW9uLm5lZ2F0ZSkgfHxcbiAgICAgICAgICAgICAgICAocHJvcGVydGllc1tjb25kaXRpb24udmFsdWVdICYmIGNvbmRpdGlvbi5uZWdhdGUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmRpdGlvbi50eXBlID09ICdUT09MUEVSTUlTU0lPTicpIHtcbiAgICAgICAgICAgIGxldCB0cCA9IGF3YWl0IHRoaXMuYXV0aGVudGljYXRpb24uaGFzVG9vbHBlcm1pc3Npb24oY29uZGl0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0cCA9PSBjb25kaXRpb24ubmVnYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgdGVtcGxhdGUgYnkgaWQgaW4gdGhlIGdpdmVuIG1kc1xuICAgICAqL1xuICAgIHN0YXRpYyBmaW5kVGVtcGxhdGUobWRzOiBNZHNEZWZpbml0aW9uLCBpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBtZHMudmlld3MgYXMgQXJyYXk8XG4gICAgICAgICAgICAgICAgQXJyYXlFbGVtZW50PE1kc0RlZmluaXRpb25bJ3ZpZXdzJ10+IHwgQXJyYXlFbGVtZW50PE1kc0RlZmluaXRpb25bJ3ZpZXdzJ10+XG4gICAgICAgICAgICA+XG4gICAgICAgICkuZmluZCgodikgPT4gdi5pZCA9PT0gaWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCB3aWRnZXRzIHVzZWQgYnkgdGhlIGdpdmVuIHRlbXBsYXRlXG4gICAgICovXG4gICAgc3RhdGljIGdldFVzZWRXaWRnZXRzKG1kczogTWRzRGVmaW5pdGlvbiwgdGVtcGxhdGU6IHN0cmluZyA9IG51bGwpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IHVzZWQ6IGFueSA9IFtdO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZURhdGEgPSBNZHNIZWxwZXJTZXJ2aWNlLmZpbmRUZW1wbGF0ZShtZHMsIHRlbXBsYXRlKTtcbiAgICAgICAgZm9yIChjb25zdCB3IG9mIG1kcy53aWRnZXRzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVEYXRhLmh0bWwuaW5kZXhPZignPCcgKyB3LmlkKSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAhdXNlZC5maW5kKCh3MjogYW55KSA9PiB3Mi5pZCA9PT0gdy5pZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHVzZWQucHVzaCh3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXNlZDtcbiAgICB9XG59XG5cbnR5cGUgQXJyYXlFbGVtZW50PEFycmF5VHlwZSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4gPVxuICAgIEFycmF5VHlwZSBleHRlbmRzIHJlYWRvbmx5IChpbmZlciBFbGVtZW50VHlwZSlbXSA/IEVsZW1lbnRUeXBlIDogbmV2ZXI7XG4iXX0=
@@ -0,0 +1,16 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { MdsHelperService } from './mds-helper.service';
3
+ import * as i0 from "@angular/core";
4
+ export class MdsModule {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MdsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.6", ngImport: i0, type: MdsModule }); }
7
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MdsModule, providers: [MdsHelperService] }); }
8
+ }
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MdsModule, decorators: [{
10
+ type: NgModule,
11
+ args: [{
12
+ declarations: [],
13
+ providers: [MdsHelperService],
14
+ }]
15
+ }] });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbWRzL21kcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFNeEQsTUFBTSxPQUFPLFNBQVM7OEdBQVQsU0FBUzsrR0FBVCxTQUFTOytHQUFULFNBQVMsYUFGUCxDQUFDLGdCQUFnQixDQUFDOzsyRkFFcEIsU0FBUztrQkFKckIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsU0FBUyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1kc0hlbHBlclNlcnZpY2UgfSBmcm9tICcuL21kcy1oZWxwZXIuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXSxcbiAgICBwcm92aWRlcnM6IFtNZHNIZWxwZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTWRzTW9kdWxlIHt9XG4iXX0=
@@ -6,11 +6,11 @@ import * as i3 from "@angular/material/badge";
6
6
  import * as i4 from "../../pipes/node-icon.pipe";
7
7
  export class DragPreviewComponent {
8
8
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: DragPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: DragPreviewComponent, selector: "es-drag-preview", inputs: { node: "node", selected: "selected", item: "item" }, ngImport: i0, template: "<div class=\"drag-preview\" [matBadge]=\"selected.length > 1 ? selected.length : null\">\n <div class=\"drag-preview-icon\">\n <img *ngIf=\"node.iconURL\" [src]=\"node | esNodeIcon\" />\n </div>\n <es-list-text class=\"drag-preview-text\" [node]=\"node\" [item]=\"item\"></es-list-text>\n</div>\n", styles: [".drag-preview{display:flex;align-items:center;gap:16px;height:48px;padding:0 12px;background-color:var(--palette-primary-50)}.drag-preview-icon{width:30px;height:30px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.drag-preview-icon>img{width:18px;height:auto}.drag-preview-text{max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ListTextComponent, selector: "es-list-text" }, { kind: "directive", type: i3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: i4.NodeIconPipe, name: "esNodeIcon" }] }); }
9
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: DragPreviewComponent, selector: "es-drag-preview", inputs: { node: "node", selected: "selected", item: "item" }, ngImport: i0, template: "<div class=\"drag-preview\" [matBadge]=\"selected.length > 1 ? selected.length : null\">\n <div class=\"drag-preview-icon\">\n <img *ngIf=\"node.iconURL\" [src]=\"node | esNodeIcon | async\" />\n </div>\n <es-list-text class=\"drag-preview-text\" [node]=\"node\" [item]=\"item\"></es-list-text>\n</div>\n", styles: [".drag-preview{display:flex;align-items:center;gap:16px;height:48px;padding:0 12px;background-color:var(--palette-primary-50)}.drag-preview-icon{width:30px;height:30px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.drag-preview-icon>img{width:18px;height:auto}.drag-preview-text{max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ListTextComponent, selector: "es-list-text" }, { kind: "directive", type: i3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.NodeIconPipe, name: "esNodeIcon" }] }); }
10
10
  }
11
11
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: DragPreviewComponent, decorators: [{
12
12
  type: Component,
13
- args: [{ selector: 'es-drag-preview', template: "<div class=\"drag-preview\" [matBadge]=\"selected.length > 1 ? selected.length : null\">\n <div class=\"drag-preview-icon\">\n <img *ngIf=\"node.iconURL\" [src]=\"node | esNodeIcon\" />\n </div>\n <es-list-text class=\"drag-preview-text\" [node]=\"node\" [item]=\"item\"></es-list-text>\n</div>\n", styles: [".drag-preview{display:flex;align-items:center;gap:16px;height:48px;padding:0 12px;background-color:var(--palette-primary-50)}.drag-preview-icon{width:30px;height:30px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.drag-preview-icon>img{width:18px;height:auto}.drag-preview-text{max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
13
+ args: [{ selector: 'es-drag-preview', template: "<div class=\"drag-preview\" [matBadge]=\"selected.length > 1 ? selected.length : null\">\n <div class=\"drag-preview-icon\">\n <img *ngIf=\"node.iconURL\" [src]=\"node | esNodeIcon | async\" />\n </div>\n <es-list-text class=\"drag-preview-text\" [node]=\"node\" [item]=\"item\"></es-list-text>\n</div>\n", styles: [".drag-preview{display:flex;align-items:center;gap:16px;height:48px;padding:0 12px;background-color:var(--palette-primary-50)}.drag-preview-icon{width:30px;height:30px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.drag-preview-icon>img{width:18px;height:auto}.drag-preview-text{max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
14
14
  }], propDecorators: { node: [{
15
15
  type: Input
16
16
  }], selected: [{
@@ -18,4 +18,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
18
18
  }], item: [{
19
19
  type: Input
20
20
  }] } });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL2RyYWctcHJldmlldy9kcmFnLXByZXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvZHJhZy1wcmV2aWV3L2RyYWctcHJldmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBVWpELE1BQU0sT0FBTyxvQkFBb0I7OEdBQXBCLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHFIQ1ZqQyxnVEFNQTs7MkZESWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNJLGlCQUFpQjs4QkFLbEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICcuLi8uLi90eXBlcy9saXN0LWl0ZW0nO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNEYXRhVHlwZSB9IGZyb20gJy4uL2VudHJpZXMtbW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLWRyYWctcHJldmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RyYWctcHJldmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJhZy1wcmV2aWV3LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERyYWdQcmV2aWV3Q29tcG9uZW50PFQgZXh0ZW5kcyBOb2RlRW50cmllc0RhdGFUeXBlPiB7XG4gICAgQElucHV0KCkgbm9kZTogTm9kZTtcbiAgICBASW5wdXQoKSBzZWxlY3RlZDogVFtdO1xuICAgIEBJbnB1dCgpIGl0ZW06IExpc3RJdGVtO1xufVxuIiwiPGRpdiBjbGFzcz1cImRyYWctcHJldmlld1wiIFttYXRCYWRnZV09XCJzZWxlY3RlZC5sZW5ndGggPiAxID8gc2VsZWN0ZWQubGVuZ3RoIDogbnVsbFwiPlxuICA8ZGl2IGNsYXNzPVwiZHJhZy1wcmV2aWV3LWljb25cIj5cbiAgICA8aW1nICpuZ0lmPVwibm9kZS5pY29uVVJMXCIgW3NyY109XCJub2RlIHwgZXNOb2RlSWNvblwiIC8+XG4gIDwvZGl2PlxuICA8ZXMtbGlzdC10ZXh0IGNsYXNzPVwiZHJhZy1wcmV2aWV3LXRleHRcIiBbbm9kZV09XCJub2RlXCIgW2l0ZW1dPVwiaXRlbVwiPjwvZXMtbGlzdC10ZXh0PlxuPC9kaXY+XG4iXX0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL2RyYWctcHJldmlldy9kcmFnLXByZXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvZHJhZy1wcmV2aWV3L2RyYWctcHJldmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBVWpELE1BQU0sT0FBTyxvQkFBb0I7OEdBQXBCLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHFIQ1ZqQyx3VEFNQTs7MkZESWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNJLGlCQUFpQjs4QkFLbEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICcuLi8uLi90eXBlcy9saXN0LWl0ZW0nO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNEYXRhVHlwZSB9IGZyb20gJy4uL2VudHJpZXMtbW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLWRyYWctcHJldmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RyYWctcHJldmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJhZy1wcmV2aWV3LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERyYWdQcmV2aWV3Q29tcG9uZW50PFQgZXh0ZW5kcyBOb2RlRW50cmllc0RhdGFUeXBlPiB7XG4gICAgQElucHV0KCkgbm9kZTogTm9kZTtcbiAgICBASW5wdXQoKSBzZWxlY3RlZDogVFtdO1xuICAgIEBJbnB1dCgpIGl0ZW06IExpc3RJdGVtO1xufVxuIiwiPGRpdiBjbGFzcz1cImRyYWctcHJldmlld1wiIFttYXRCYWRnZV09XCJzZWxlY3RlZC5sZW5ndGggPiAxID8gc2VsZWN0ZWQubGVuZ3RoIDogbnVsbFwiPlxuICA8ZGl2IGNsYXNzPVwiZHJhZy1wcmV2aWV3LWljb25cIj5cbiAgICA8aW1nICpuZ0lmPVwibm9kZS5pY29uVVJMXCIgW3NyY109XCJub2RlIHwgZXNOb2RlSWNvbiB8IGFzeW5jXCIgLz5cbiAgPC9kaXY+XG4gIDxlcy1saXN0LXRleHQgY2xhc3M9XCJkcmFnLXByZXZpZXctdGV4dFwiIFtub2RlXT1cIm5vZGVcIiBbaXRlbV09XCJpdGVtXCI+PC9lcy1saXN0LXRleHQ+XG48L2Rpdj5cbiJdfQ==
@@ -19,5 +19,6 @@ export var ClickSource;
19
19
  ClickSource[ClickSource["Metadata"] = 2] = "Metadata";
20
20
  ClickSource[ClickSource["Comments"] = 3] = "Comments";
21
21
  ClickSource[ClickSource["Overlay"] = 4] = "Overlay";
22
+ ClickSource[ClickSource["Dropdown"] = 5] = "Dropdown";
22
23
  })(ClickSource || (ClickSource = {}));
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cmllcy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL2VudHJpZXMtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE1BQU0sQ0FBTixJQUFZLHNCQUlYO0FBSkQsV0FBWSxzQkFBc0I7SUFDOUIscUVBQUssQ0FBQTtJQUNMLG1FQUFJLENBQUE7SUFDSiw2RUFBUyxDQUFBO0FBQ2IsQ0FBQyxFQUpXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFJakM7QUFFRCxNQUFNLENBQU4sSUFBWSxlQU1YO0FBTkQsV0FBWSxlQUFlO0lBQ3ZCLHFCQUFxQjtJQUNyQiwrRUFBaUIsQ0FBQTtJQUNqQixnQkFBZ0I7SUFDaEIsMkRBQU8sQ0FBQTtJQUNQLHFEQUFJLENBQUE7QUFDUixDQUFDLEVBTlcsZUFBZSxLQUFmLGVBQWUsUUFNMUI7QUE2QkQsTUFBTSxDQUFOLElBQVksV0FNWDtBQU5ELFdBQVksV0FBVztJQUNuQixtREFBTyxDQUFBO0lBQ1AsNkNBQUksQ0FBQTtJQUNKLHFEQUFRLENBQUE7SUFDUixxREFBUSxDQUFBO0lBQ1IsbURBQU8sQ0FBQTtBQUNYLENBQUMsRUFOVyxXQUFXLEtBQVgsV0FBVyxRQU10QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcblxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQ3VzdG9tT3B0aW9ucywgT3B0aW9uSXRlbSwgVGFyZ2V0IH0gZnJvbSAnLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTGlzdEl0ZW0sIExpc3RJdGVtU29ydCB9IGZyb20gJy4uL3R5cGVzL2xpc3QtaXRlbSc7XG5pbXBvcnQgeyBDYW5Ecm9wLCBEcmFnRGF0YSwgRHJvcEFjdGlvbiB9IGZyb20gJy4uL3R5cGVzL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBOb2RlLCBHZW5lcmljQXV0aG9yaXR5IH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBBY3Rpb25iYXJDb21wb25lbnQgfSBmcm9tICcuLi9hY3Rpb25iYXIvYWN0aW9uYmFyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIE5vZGVSb290ID1cbiAgICB8ICdNWV9GSUxFUydcbiAgICB8ICdTSEFSRURfRklMRVMnXG4gICAgfCAnTVlfU0hBUkVEX0ZJTEVTJ1xuICAgIHwgJ1RPX01FX1NIQVJFRF9GSUxFUydcbiAgICB8ICdXT1JLRkxPV19SRUNFSVZFJ1xuICAgIHwgJ1JFQ1lDTEUnXG4gICAgfCAnQUxMX0ZJTEVTJztcblxuZXhwb3J0IGVudW0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZSB7XG4gICAgVGFibGUsXG4gICAgR3JpZCxcbiAgICBTbWFsbEdyaWQsXG59XG5cbmV4cG9ydCBlbnVtIEludGVyYWN0aW9uVHlwZSB7XG4gICAgLy8gY3JlYXRlIHJvdXRlciBsaW5rXG4gICAgRGVmYXVsdEFjdGlvbkxpbmssXG4gICAgLy8gZW1pdCBhbiBldmVudFxuICAgIEVtaXR0ZXIsXG4gICAgTm9uZSxcbn1cblxuZXhwb3J0IHR5cGUgTGlzdE9wdGlvbnMgPSB7IFtrZXkgaW4gVGFyZ2V0XT86IE9wdGlvbkl0ZW1bXSB9O1xuZXhwb3J0IHR5cGUgTGlzdE9wdGlvbnNDb25maWcgPSB7XG4gICAgYWN0aW9uYmFyPzogQWN0aW9uYmFyQ29tcG9uZW50O1xuICAgIHBhcmVudD86IE5vZGU7XG4gICAgY3VzdG9tT3B0aW9ucz86IEN1c3RvbU9wdGlvbnM7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RTb3J0Q29uZmlnIGV4dGVuZHMgU29ydCB7XG4gICAgY29sdW1uczogTGlzdEl0ZW1Tb3J0W107XG4gICAgYWxsb3dlZD86IGJvb2xlYW47XG4gICAgY3VzdG9tU29ydGluZ0luUHJvZ3Jlc3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBEcm9wVGFyZ2V0ID0gTm9kZSB8IE5vZGVSb290O1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BTb3VyY2U8VCBleHRlbmRzIE5vZGVFbnRyaWVzRGF0YVR5cGU+IHtcbiAgICBlbGVtZW50OiBUW107XG4gICAgLy8gc291cmNlTGlzdDogTGlzdEV2ZW50SW50ZXJmYWNlPFQ+O1xuICAgIG1vZGU6IERyb3BBY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdERyYWdHcm9wQ29uZmlnPFQgZXh0ZW5kcyBOb2RlRW50cmllc0RhdGFUeXBlPiB7XG4gICAgZHJhZ0FsbG93ZWQ6IGJvb2xlYW47XG4gICAgZHJvcEFsbG93ZWQ/OiAoZHJhZ0RhdGE6IERyYWdEYXRhPFQ+KSA9PiBDYW5Ecm9wO1xuICAgIGRyb3BwZWQ/OiAodGFyZ2V0OiBOb2RlLCBzb3VyY2U6IERyb3BTb3VyY2U8Tm9kZUVudHJpZXNEYXRhVHlwZT4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBlbnVtIENsaWNrU291cmNlIHtcbiAgICBQcmV2aWV3LFxuICAgIEljb24sXG4gICAgTWV0YWRhdGEsXG4gICAgQ29tbWVudHMsXG4gICAgT3ZlcmxheSxcbn1cblxuZXhwb3J0IHR5cGUgTm9kZUNsaWNrRXZlbnQ8VCBleHRlbmRzIE5vZGVFbnRyaWVzRGF0YVR5cGU+ID0ge1xuICAgIGVsZW1lbnQ6IFQ7XG4gICAgc291cmNlOiBDbGlja1NvdXJjZTtcbiAgICBhdHRyaWJ1dGU/OiBMaXN0SXRlbTsgLy8gb25seSB3aGVuIHNvdXJjZSA9PT0gTWV0YWRhdGFcbn07XG5leHBvcnQgdHlwZSBGZXRjaEV2ZW50ID0ge1xuICAgIG9mZnNldDogbnVtYmVyO1xuICAgIGFtb3VudD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBpcyBhIHJlc2V0IG9mIHRoZSBjdXJyZW50IGRhdGEgcmVxdWlyZWQ/XG4gICAgICogdGhpcyBzaG91bGQgYmUgdHJ1ZSBpZiB0aGlzIHdhcyBhIHBhZ2luYXRpb24gcmVxdWVzdFxuICAgICAqL1xuICAgIHJlc2V0PzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBOb2RlRW50cmllc0RhdGFUeXBlID0gTm9kZSB8IEdlbmVyaWNBdXRob3JpdHk7XG5leHBvcnQgdHlwZSBHcmlkTGF5b3V0ID0gJ2dyaWQnIHwgJ3Njcm9sbCc7XG5leHBvcnQgdHlwZSBHcmlkQ29uZmlnID0ge1xuICAgIC8qKlxuICAgICAqIG1heCBhbW91bnQgb2Ygcm93cyB0aGF0IHNob3VsZCBiZSB2aXNpYmxlLCB1bnNldCBmb3Igbm8gbGltaXRcbiAgICAgKi9cbiAgICBtYXhSb3dzPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIGxheW91dCwgZGVmYXVsdHMgdG8gJ2dyaWQnXG4gICAgICogJ3Njcm9sbCcgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIG1heFJvd3MgaXMgbm90IHNldFxuICAgICAqL1xuICAgIGxheW91dD86IEdyaWRMYXlvdXQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RFdmVudEludGVyZmFjZTxUIGV4dGVuZHMgTm9kZUVudHJpZXNEYXRhVHlwZT4ge1xuICAgIHVwZGF0ZU5vZGVzKG5vZGVzOiB2b2lkIHwgVFtdKTogdm9pZDtcblxuICAgIGdldERpc3BsYXlUeXBlKCk6IE5vZGVFbnRyaWVzRGlzcGxheVR5cGU7XG5cbiAgICBzZXREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogTm9kZUVudHJpZXNEaXNwbGF5VHlwZSk6IHZvaWQ7XG5cbiAgICBzaG93UmVvcmRlckNvbHVtbnNEaWFsb2coKTogdm9pZDtcblxuICAgIGFkZFZpcnR1YWxOb2Rlcyh2aXJ0dWFsOiBUW10pOiB2b2lkO1xuXG4gICAgc2V0T3B0aW9ucyhvcHRpb25zOiBMaXN0T3B0aW9ucyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBhY3RpdmF0ZSBvcHRpb24gKGRyb3Bkb3duKSBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgaW5pdE9wdGlvbnNHZW5lcmF0b3IoY29uZmlnOiBMaXN0T3B0aW9uc0NvbmZpZyk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG4gICAgZ2V0U2VsZWN0aW9uKCk6IFNlbGVjdGlvbk1vZGVsPFQ+O1xuXG4gICAgLyoqXG4gICAgICogdHJpZ2dlcmVkIHdoZW4gbm9kZXMvb2JqZWN0cyBhcmUgZGVsZXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBzaG93biBpbiB0aGUgbGlzdCBhbnltb3JlXG4gICAgICovXG4gICAgZGVsZXRlTm9kZXMob2JqZWN0czogVFtdKTogdm9pZDtcbn1cbiJdfQ==
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cmllcy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL2VudHJpZXMtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJBLE1BQU0sQ0FBTixJQUFZLHNCQUlYO0FBSkQsV0FBWSxzQkFBc0I7SUFDOUIscUVBQUssQ0FBQTtJQUNMLG1FQUFJLENBQUE7SUFDSiw2RUFBUyxDQUFBO0FBQ2IsQ0FBQyxFQUpXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFJakM7QUFFRCxNQUFNLENBQU4sSUFBWSxlQU1YO0FBTkQsV0FBWSxlQUFlO0lBQ3ZCLHFCQUFxQjtJQUNyQiwrRUFBaUIsQ0FBQTtJQUNqQixnQkFBZ0I7SUFDaEIsMkRBQU8sQ0FBQTtJQUNQLHFEQUFJLENBQUE7QUFDUixDQUFDLEVBTlcsZUFBZSxLQUFmLGVBQWUsUUFNMUI7QUE2QkQsTUFBTSxDQUFOLElBQVksV0FPWDtBQVBELFdBQVksV0FBVztJQUNuQixtREFBTyxDQUFBO0lBQ1AsNkNBQUksQ0FBQTtJQUNKLHFEQUFRLENBQUE7SUFDUixxREFBUSxDQUFBO0lBQ1IsbURBQU8sQ0FBQTtJQUNQLHFEQUFRLENBQUE7QUFDWixDQUFDLEVBUFcsV0FBVyxLQUFYLFdBQVcsUUFPdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5cbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEN1c3RvbU9wdGlvbnMsIE9wdGlvbkl0ZW0sIFRhcmdldCB9IGZyb20gJy4uL3R5cGVzL29wdGlvbi1pdGVtJztcbmltcG9ydCB7IExpc3RJdGVtLCBMaXN0SXRlbVNvcnQgfSBmcm9tICcuLi90eXBlcy9saXN0LWl0ZW0nO1xuaW1wb3J0IHsgQ2FuRHJvcCwgRHJhZ0RhdGEsIERyb3BBY3Rpb24gfSBmcm9tICcuLi90eXBlcy9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgTm9kZSwgR2VuZXJpY0F1dGhvcml0eSB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgQWN0aW9uYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vYWN0aW9uYmFyL2FjdGlvbmJhci5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBOb2RlUm9vdCA9XG4gICAgfCAnTVlfRklMRVMnXG4gICAgfCAnQ09MTEVDVElPTl9IT01FJ1xuICAgIHwgJ1NIQVJFRF9GSUxFUydcbiAgICB8ICdNWV9TSEFSRURfRklMRVMnXG4gICAgfCAnVE9fTUVfU0hBUkVEX0ZJTEVTJ1xuICAgIHwgJ1dPUktGTE9XX1JFQ0VJVkUnXG4gICAgfCAnUkVDWUNMRSdcbiAgICB8ICdBTExfRklMRVMnO1xuXG5leHBvcnQgZW51bSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlIHtcbiAgICBUYWJsZSxcbiAgICBHcmlkLFxuICAgIFNtYWxsR3JpZCxcbn1cblxuZXhwb3J0IGVudW0gSW50ZXJhY3Rpb25UeXBlIHtcbiAgICAvLyBjcmVhdGUgcm91dGVyIGxpbmtcbiAgICBEZWZhdWx0QWN0aW9uTGluayxcbiAgICAvLyBlbWl0IGFuIGV2ZW50XG4gICAgRW1pdHRlcixcbiAgICBOb25lLFxufVxuXG5leHBvcnQgdHlwZSBMaXN0T3B0aW9ucyA9IHsgW2tleSBpbiBUYXJnZXRdPzogT3B0aW9uSXRlbVtdIH07XG5leHBvcnQgdHlwZSBMaXN0T3B0aW9uc0NvbmZpZyA9IHtcbiAgICBhY3Rpb25iYXI/OiBBY3Rpb25iYXJDb21wb25lbnQ7XG4gICAgcGFyZW50PzogTm9kZTtcbiAgICBjdXN0b21PcHRpb25zPzogQ3VzdG9tT3B0aW9ucztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFNvcnRDb25maWcgZXh0ZW5kcyBTb3J0IHtcbiAgICBjb2x1bW5zOiBMaXN0SXRlbVNvcnRbXTtcbiAgICBhbGxvd2VkPzogYm9vbGVhbjtcbiAgICBjdXN0b21Tb3J0aW5nSW5Qcm9ncmVzcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIERyb3BUYXJnZXQgPSBOb2RlIHwgTm9kZVJvb3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcFNvdXJjZTxUIGV4dGVuZHMgTm9kZUVudHJpZXNEYXRhVHlwZT4ge1xuICAgIGVsZW1lbnQ6IFRbXTtcbiAgICAvLyBzb3VyY2VMaXN0OiBMaXN0RXZlbnRJbnRlcmZhY2U8VD47XG4gICAgbW9kZTogRHJvcEFjdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0RHJhZ0dyb3BDb25maWc8VCBleHRlbmRzIE5vZGVFbnRyaWVzRGF0YVR5cGU+IHtcbiAgICBkcmFnQWxsb3dlZDogYm9vbGVhbjtcbiAgICBkcm9wQWxsb3dlZD86IChkcmFnRGF0YTogRHJhZ0RhdGE8VD4pID0+IENhbkRyb3A7XG4gICAgZHJvcHBlZD86ICh0YXJnZXQ6IE5vZGUsIHNvdXJjZTogRHJvcFNvdXJjZTxOb2RlRW50cmllc0RhdGFUeXBlPikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGVudW0gQ2xpY2tTb3VyY2Uge1xuICAgIFByZXZpZXcsXG4gICAgSWNvbixcbiAgICBNZXRhZGF0YSxcbiAgICBDb21tZW50cyxcbiAgICBPdmVybGF5LFxuICAgIERyb3Bkb3duLCAvLyBrZWVwOiB1c2VkIGluIGV4dGVuc2lvbnNcbn1cblxuZXhwb3J0IHR5cGUgTm9kZUNsaWNrRXZlbnQ8VCBleHRlbmRzIE5vZGVFbnRyaWVzRGF0YVR5cGU+ID0ge1xuICAgIGVsZW1lbnQ6IFQ7XG4gICAgc291cmNlOiBDbGlja1NvdXJjZTtcbiAgICBhdHRyaWJ1dGU/OiBMaXN0SXRlbTsgLy8gb25seSB3aGVuIHNvdXJjZSA9PT0gTWV0YWRhdGFcbn07XG5leHBvcnQgdHlwZSBGZXRjaEV2ZW50ID0ge1xuICAgIG9mZnNldDogbnVtYmVyO1xuICAgIGFtb3VudD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBpcyBhIHJlc2V0IG9mIHRoZSBjdXJyZW50IGRhdGEgcmVxdWlyZWQ/XG4gICAgICogdGhpcyBzaG91bGQgYmUgdHJ1ZSBpZiB0aGlzIHdhcyBhIHBhZ2luYXRpb24gcmVxdWVzdFxuICAgICAqL1xuICAgIHJlc2V0PzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBOb2RlRW50cmllc0RhdGFUeXBlID0gTm9kZSB8IEdlbmVyaWNBdXRob3JpdHk7XG5leHBvcnQgdHlwZSBHcmlkTGF5b3V0ID0gJ2dyaWQnIHwgJ3Njcm9sbCc7XG5leHBvcnQgdHlwZSBHcmlkQ29uZmlnID0ge1xuICAgIC8qKlxuICAgICAqIG1heCBhbW91bnQgb2Ygcm93cyB0aGF0IHNob3VsZCBiZSB2aXNpYmxlLCB1bnNldCBmb3Igbm8gbGltaXRcbiAgICAgKi9cbiAgICBtYXhSb3dzPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIGxheW91dCwgZGVmYXVsdHMgdG8gJ2dyaWQnXG4gICAgICogJ3Njcm9sbCcgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIG1heFJvd3MgaXMgbm90IHNldFxuICAgICAqL1xuICAgIGxheW91dD86IEdyaWRMYXlvdXQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RFdmVudEludGVyZmFjZTxUIGV4dGVuZHMgTm9kZUVudHJpZXNEYXRhVHlwZT4ge1xuICAgIHVwZGF0ZU5vZGVzKG5vZGVzOiB2b2lkIHwgVFtdKTogdm9pZDtcblxuICAgIGdldERpc3BsYXlUeXBlKCk6IE5vZGVFbnRyaWVzRGlzcGxheVR5cGU7XG5cbiAgICBzZXREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogTm9kZUVudHJpZXNEaXNwbGF5VHlwZSk6IHZvaWQ7XG5cbiAgICBzaG93UmVvcmRlckNvbHVtbnNEaWFsb2coKTogdm9pZDtcblxuICAgIGFkZFZpcnR1YWxOb2Rlcyh2aXJ0dWFsOiBUW10pOiB2b2lkO1xuXG4gICAgc2V0T3B0aW9ucyhvcHRpb25zOiBMaXN0T3B0aW9ucyk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBhY3RpdmF0ZSBvcHRpb24gKGRyb3Bkb3duKSBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgaW5pdE9wdGlvbnNHZW5lcmF0b3IoY29uZmlnOiBMaXN0T3B0aW9uc0NvbmZpZyk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG4gICAgZ2V0U2VsZWN0aW9uKCk6IFNlbGVjdGlvbk1vZGVsPFQ+O1xuXG4gICAgLyoqXG4gICAgICogdHJpZ2dlcmVkIHdoZW4gbm9kZXMvb2JqZWN0cyBhcmUgZGVsZXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBzaG93biBpbiB0aGUgbGlzdCBhbnltb3JlXG4gICAgICovXG4gICAgZGVsZXRlTm9kZXMob2JqZWN0czogVFtdKTogdm9pZDtcbn1cbiJdfQ==
@@ -18,6 +18,14 @@ export class NodeCache {
18
18
  return slice.data.slice(range.startIndex - slice.startIndex, range.endIndex - slice.startIndex);
19
19
  }
20
20
  }
21
+ // for the first request
22
+ console.warn('Requested range was not found in the slices cache, falling back to a smaller slice (the backend resolved too less data)', range, this._slices);
23
+ for (const slice of this._slices) {
24
+ if (slice.startIndex <= range.startIndex && slice.endIndex >= range.startIndex) {
25
+ return slice.data.slice(range.startIndex - slice.startIndex, range.endIndex - slice.startIndex);
26
+ }
27
+ }
28
+ console.error('Could not find any slice for the range', range, this._slices);
21
29
  return null;
22
30
  }
23
31
  getMissingRange(requestedRange) {
@@ -62,4 +70,4 @@ export class NodeCache {
62
70
  };
63
71
  }
64
72
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL25vZGUtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBVzVDLE1BQU0sT0FBTyxTQUFTO0lBQXRCO1FBQ1ksWUFBTyxHQUFpQyxFQUFFLENBQUM7SUFvRXZELENBQUM7SUFsRUcsR0FBRyxDQUFDLEtBQXdCO1FBQ3hCLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3BGO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxHQUFHLENBQUMsS0FBcUI7UUFDckIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzlCLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDMUUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDbkIsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUNuQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQ3BDLENBQUM7YUFDTDtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxjQUE4QjtRQUMxQyxJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDO1FBQzFDLElBQUksT0FBTyxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7UUFDdEMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzlCLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEVBQUU7Z0JBQzdELFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQzlCO2lCQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQUU7Z0JBQ2hFLE9BQU8sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO2FBQzlCO1lBQ0QsSUFBSSxTQUFTLElBQUksT0FBTyxFQUFFO2dCQUN0QixPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQTJCO1FBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxvQkFBb0I7aUJBQ3pDO2FBQ0o7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sU0FBUyxDQUFDLEdBQXNCLEVBQUUsR0FBc0I7UUFDNUQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxHQUFHLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDMUMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxHQUFzQixFQUFFLEdBQXNCO1FBQ3pELE9BQU87WUFDSCxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7WUFDMUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ3RCLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hFLENBQUM7SUFDTixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3ROdWxsIH0gZnJvbSAnLi4vdXRpbC9mdW5jdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVDYWNoZVJhbmdlIHtcbiAgICBzdGFydEluZGV4OiBudW1iZXI7XG4gICAgZW5kSW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb2RlQ2FjaGVTbGljZTxUPiBleHRlbmRzIE5vZGVDYWNoZVJhbmdlIHtcbiAgICBkYXRhOiByZWFkb25seSBUW107XG59XG5cbmV4cG9ydCBjbGFzcyBOb2RlQ2FjaGU8VD4ge1xuICAgIHByaXZhdGUgX3NsaWNlczogcmVhZG9ubHkgTm9kZUNhY2hlU2xpY2U8VD5bXSA9IFtdO1xuXG4gICAgYWRkKHNsaWNlOiBOb2RlQ2FjaGVTbGljZTxUPik6IHZvaWQge1xuICAgICAgICBpZiAoc2xpY2UuZW5kSW5kZXggLSBzbGljZS5zdGFydEluZGV4ICE9PSBzbGljZS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmllZCB0byBhZGQgaW52YWxpZCBzbGljZSB0byBjYWNoZTogJyArIEpTT04uc3RyaW5naWZ5KHNsaWNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2xpY2VzID0gdGhpcy5fbm9ybWFsaXplU2xpY2VzKFsuLi50aGlzLl9zbGljZXMsIHNsaWNlXSk7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX3NsaWNlcyA9IFtdO1xuICAgIH1cblxuICAgIGdldChyYW5nZTogTm9kZUNhY2hlUmFuZ2UpOiBUW10gfCBudWxsIHtcbiAgICAgICAgZm9yIChjb25zdCBzbGljZSBvZiB0aGlzLl9zbGljZXMpIHtcbiAgICAgICAgICAgIGlmIChzbGljZS5zdGFydEluZGV4IDw9IHJhbmdlLnN0YXJ0SW5kZXggJiYgc2xpY2UuZW5kSW5kZXggPj0gcmFuZ2UuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2xpY2UuZGF0YS5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnRJbmRleCAtIHNsaWNlLnN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZEluZGV4IC0gc2xpY2Uuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldE1pc3NpbmdSYW5nZShyZXF1ZXN0ZWRSYW5nZTogTm9kZUNhY2hlUmFuZ2UpOiBOb2RlQ2FjaGVSYW5nZSB8IG51bGwge1xuICAgICAgICBsZXQgZnJvbUluZGV4ID0gcmVxdWVzdGVkUmFuZ2Uuc3RhcnRJbmRleDtcbiAgICAgICAgbGV0IHRvSW5kZXggPSByZXF1ZXN0ZWRSYW5nZS5lbmRJbmRleDtcbiAgICAgICAgZm9yIChjb25zdCBzbGljZSBvZiB0aGlzLl9zbGljZXMpIHtcbiAgICAgICAgICAgIGlmIChzbGljZS5zdGFydEluZGV4IDw9IGZyb21JbmRleCAmJiBzbGljZS5lbmRJbmRleCA+IGZyb21JbmRleCkge1xuICAgICAgICAgICAgICAgIGZyb21JbmRleCA9IHNsaWNlLmVuZEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzbGljZS5zdGFydEluZGV4IDwgdG9JbmRleCAmJiBzbGljZS5lbmRJbmRleCA+PSB0b0luZGV4KSB7XG4gICAgICAgICAgICAgICAgdG9JbmRleCA9IHNsaWNlLnN0YXJ0SW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZnJvbUluZGV4ID49IHRvSW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGFydEluZGV4OiBmcm9tSW5kZXgsIGVuZEluZGV4OiB0b0luZGV4IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbm9ybWFsaXplU2xpY2VzKHNsaWNlczogTm9kZUNhY2hlU2xpY2U8VD5bXSk6IE5vZGVDYWNoZVNsaWNlPFQ+W10ge1xuICAgICAgICBzbGljZXMuc29ydCgobGhzLCByaHMpID0+IGxocy5zdGFydEluZGV4IC0gcmhzLnN0YXJ0SW5kZXgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHNsaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYW5NZXJnZShzbGljZXNbaV0sIHNsaWNlc1tqXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2xpY2VzW2ldID0gdGhpcy5fbWVyZ2Uoc2xpY2VzW2ldLCBzbGljZXNbal0pO1xuICAgICAgICAgICAgICAgICAgICBzbGljZXNbal0gPSBudWxsOyAvLyBNYXJrIGZvciBkZWxldGlvblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2xpY2VzLmZpbHRlcihub3ROdWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYW5NZXJnZShsaHM6IE5vZGVDYWNoZVNsaWNlPFQ+LCByaHM6IE5vZGVDYWNoZVNsaWNlPFQ+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghbGhzIHx8ICFyaHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGhzLmVuZEluZGV4ID49IHJocy5zdGFydEluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgX21lcmdlKGxoczogTm9kZUNhY2hlU2xpY2U8VD4sIHJoczogTm9kZUNhY2hlU2xpY2U8VD4pOiBOb2RlQ2FjaGVTbGljZTxUPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydEluZGV4OiBsaHMuc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGVuZEluZGV4OiByaHMuZW5kSW5kZXgsXG4gICAgICAgICAgICBkYXRhOiBbLi4ubGhzLmRhdGEsIC4uLnJocy5kYXRhLnNsaWNlKGxocy5lbmRJbmRleCAtIHJocy5zdGFydEluZGV4KV0sXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL25vZGUtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBVzVDLE1BQU0sT0FBTyxTQUFTO0lBQXRCO1FBQ1ksWUFBTyxHQUFpQyxFQUFFLENBQUM7SUFtRnZELENBQUM7SUFqRkcsR0FBRyxDQUFDLEtBQXdCO1FBQ3hCLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3BGO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxHQUFHLENBQUMsS0FBcUI7UUFDckIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzlCLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDMUUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDbkIsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUNuQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQ3BDLENBQUM7YUFDTDtTQUNKO1FBQ0Qsd0JBQXdCO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ1IseUhBQXlILEVBQ3pILEtBQUssRUFDTCxJQUFJLENBQUMsT0FBTyxDQUNmLENBQUM7UUFDRixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDOUIsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO2dCQUM1RSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNuQixLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQ25DLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FDcEMsQ0FBQzthQUNMO1NBQ0o7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0UsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxjQUE4QjtRQUMxQyxJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDO1FBQzFDLElBQUksT0FBTyxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7UUFDdEMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzlCLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEVBQUU7Z0JBQzdELFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQzlCO2lCQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQUU7Z0JBQ2hFLE9BQU8sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO2FBQzlCO1lBQ0QsSUFBSSxTQUFTLElBQUksT0FBTyxFQUFFO2dCQUN0QixPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQTJCO1FBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxvQkFBb0I7aUJBQ3pDO2FBQ0o7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sU0FBUyxDQUFDLEdBQXNCLEVBQUUsR0FBc0I7UUFDNUQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxHQUFHLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDMUMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxHQUFzQixFQUFFLEdBQXNCO1FBQ3pELE9BQU87WUFDSCxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7WUFDMUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ3RCLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hFLENBQUM7SUFDTixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3ROdWxsIH0gZnJvbSAnLi4vdXRpbC9mdW5jdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVDYWNoZVJhbmdlIHtcbiAgICBzdGFydEluZGV4OiBudW1iZXI7XG4gICAgZW5kSW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb2RlQ2FjaGVTbGljZTxUPiBleHRlbmRzIE5vZGVDYWNoZVJhbmdlIHtcbiAgICBkYXRhOiByZWFkb25seSBUW107XG59XG5cbmV4cG9ydCBjbGFzcyBOb2RlQ2FjaGU8VD4ge1xuICAgIHByaXZhdGUgX3NsaWNlczogcmVhZG9ubHkgTm9kZUNhY2hlU2xpY2U8VD5bXSA9IFtdO1xuXG4gICAgYWRkKHNsaWNlOiBOb2RlQ2FjaGVTbGljZTxUPik6IHZvaWQge1xuICAgICAgICBpZiAoc2xpY2UuZW5kSW5kZXggLSBzbGljZS5zdGFydEluZGV4ICE9PSBzbGljZS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmllZCB0byBhZGQgaW52YWxpZCBzbGljZSB0byBjYWNoZTogJyArIEpTT04uc3RyaW5naWZ5KHNsaWNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2xpY2VzID0gdGhpcy5fbm9ybWFsaXplU2xpY2VzKFsuLi50aGlzLl9zbGljZXMsIHNsaWNlXSk7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX3NsaWNlcyA9IFtdO1xuICAgIH1cblxuICAgIGdldChyYW5nZTogTm9kZUNhY2hlUmFuZ2UpOiBUW10gfCBudWxsIHtcbiAgICAgICAgZm9yIChjb25zdCBzbGljZSBvZiB0aGlzLl9zbGljZXMpIHtcbiAgICAgICAgICAgIGlmIChzbGljZS5zdGFydEluZGV4IDw9IHJhbmdlLnN0YXJ0SW5kZXggJiYgc2xpY2UuZW5kSW5kZXggPj0gcmFuZ2UuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2xpY2UuZGF0YS5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnRJbmRleCAtIHNsaWNlLnN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZEluZGV4IC0gc2xpY2Uuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZvciB0aGUgZmlyc3QgcmVxdWVzdFxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnUmVxdWVzdGVkIHJhbmdlIHdhcyBub3QgZm91bmQgaW4gdGhlIHNsaWNlcyBjYWNoZSwgZmFsbGluZyBiYWNrIHRvIGEgc21hbGxlciBzbGljZSAodGhlIGJhY2tlbmQgcmVzb2x2ZWQgdG9vIGxlc3MgZGF0YSknLFxuICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICB0aGlzLl9zbGljZXMsXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3Qgc2xpY2Ugb2YgdGhpcy5fc2xpY2VzKSB7XG4gICAgICAgICAgICBpZiAoc2xpY2Uuc3RhcnRJbmRleCA8PSByYW5nZS5zdGFydEluZGV4ICYmIHNsaWNlLmVuZEluZGV4ID49IHJhbmdlLnN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2xpY2UuZGF0YS5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnRJbmRleCAtIHNsaWNlLnN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZEluZGV4IC0gc2xpY2Uuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGFueSBzbGljZSBmb3IgdGhlIHJhbmdlJywgcmFuZ2UsIHRoaXMuX3NsaWNlcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldE1pc3NpbmdSYW5nZShyZXF1ZXN0ZWRSYW5nZTogTm9kZUNhY2hlUmFuZ2UpOiBOb2RlQ2FjaGVSYW5nZSB8IG51bGwge1xuICAgICAgICBsZXQgZnJvbUluZGV4ID0gcmVxdWVzdGVkUmFuZ2Uuc3RhcnRJbmRleDtcbiAgICAgICAgbGV0IHRvSW5kZXggPSByZXF1ZXN0ZWRSYW5nZS5lbmRJbmRleDtcbiAgICAgICAgZm9yIChjb25zdCBzbGljZSBvZiB0aGlzLl9zbGljZXMpIHtcbiAgICAgICAgICAgIGlmIChzbGljZS5zdGFydEluZGV4IDw9IGZyb21JbmRleCAmJiBzbGljZS5lbmRJbmRleCA+IGZyb21JbmRleCkge1xuICAgICAgICAgICAgICAgIGZyb21JbmRleCA9IHNsaWNlLmVuZEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzbGljZS5zdGFydEluZGV4IDwgdG9JbmRleCAmJiBzbGljZS5lbmRJbmRleCA+PSB0b0luZGV4KSB7XG4gICAgICAgICAgICAgICAgdG9JbmRleCA9IHNsaWNlLnN0YXJ0SW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZnJvbUluZGV4ID49IHRvSW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGFydEluZGV4OiBmcm9tSW5kZXgsIGVuZEluZGV4OiB0b0luZGV4IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbm9ybWFsaXplU2xpY2VzKHNsaWNlczogTm9kZUNhY2hlU2xpY2U8VD5bXSk6IE5vZGVDYWNoZVNsaWNlPFQ+W10ge1xuICAgICAgICBzbGljZXMuc29ydCgobGhzLCByaHMpID0+IGxocy5zdGFydEluZGV4IC0gcmhzLnN0YXJ0SW5kZXgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHNsaWNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYW5NZXJnZShzbGljZXNbaV0sIHNsaWNlc1tqXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2xpY2VzW2ldID0gdGhpcy5fbWVyZ2Uoc2xpY2VzW2ldLCBzbGljZXNbal0pO1xuICAgICAgICAgICAgICAgICAgICBzbGljZXNbal0gPSBudWxsOyAvLyBNYXJrIGZvciBkZWxldGlvblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2xpY2VzLmZpbHRlcihub3ROdWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYW5NZXJnZShsaHM6IE5vZGVDYWNoZVNsaWNlPFQ+LCByaHM6IE5vZGVDYWNoZVNsaWNlPFQ+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghbGhzIHx8ICFyaHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGhzLmVuZEluZGV4ID49IHJocy5zdGFydEluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgX21lcmdlKGxoczogTm9kZUNhY2hlU2xpY2U8VD4sIHJoczogTm9kZUNhY2hlU2xpY2U8VD4pOiBOb2RlQ2FjaGVTbGljZTxUPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydEluZGV4OiBsaHMuc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGVuZEluZGV4OiByaHMuZW5kSW5kZXgsXG4gICAgICAgICAgICBkYXRhOiBbLi4ubGhzLmRhdGEsIC4uLnJocy5kYXRhLnNsaWNlKGxocy5lbmRJbmRleCAtIHJocy5zdGFydEluZGV4KV0sXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19