@yuuvis/app-drive 0.7.4 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/esm2022/lib/actions/updateContent/update.content.action.mjs +5 -2
  2. package/esm2022/lib/components/add-button/add-button-overlay/add-button-overlay.component.mjs +2 -2
  3. package/esm2022/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.mjs +343 -0
  4. package/esm2022/lib/components/drive-search/drive-search.component.mjs +83 -0
  5. package/esm2022/lib/components/index.mjs +2 -2
  6. package/esm2022/lib/components/search-filter/search-filter.component.mjs +14 -330
  7. package/esm2022/lib/components/sort/sort.component.mjs +7 -6
  8. package/esm2022/lib/drive.icons.mjs +5 -2
  9. package/esm2022/lib/pages/files/files.component.mjs +31 -26
  10. package/esm2022/lib/pages/object/object.component.mjs +14 -6
  11. package/esm2022/lib/services/drive/drive.interface.mjs +1 -1
  12. package/esm2022/lib/services/drive/drive.service.mjs +9 -4
  13. package/fesm2022/yuuvis-app-drive.mjs +507 -440
  14. package/fesm2022/yuuvis-app-drive.mjs.map +1 -1
  15. package/lib/assets/i18n/de.json +100 -0
  16. package/lib/assets/i18n/en.json +100 -0
  17. package/lib/assets/yuvManifest.json +15 -0
  18. package/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.d.ts +52 -0
  19. package/lib/components/drive-search/drive-search.component.d.ts +21 -0
  20. package/lib/components/index.d.ts +1 -0
  21. package/lib/components/search-filter/search-filter.component.d.ts +0 -2
  22. package/lib/container/drive/drive.component.d.ts +3 -0
  23. package/lib/drive.icons.d.ts +3 -0
  24. package/lib/pages/files/files.component.d.ts +10 -7
  25. package/lib/pages/object/object.component.d.ts +2 -1
  26. package/lib/services/drive/drive.interface.d.ts +1 -0
  27. package/lib/services/drive/drive.service.d.ts +1 -1
  28. package/package.json +2 -2
  29. package/esm2022/lib/components/search-filter/date-range-picker/date-range-picker.component.mjs +0 -38
  30. package/lib/components/search-filter/date-range-picker/date-range-picker.component.d.ts +0 -13
@@ -1,8 +1,8 @@
1
1
  import { AsyncPipe, NgClass } from '@angular/common';
2
- import { Component, computed, effect, HostBinding, inject, input, signal, untracked, viewChild } from '@angular/core';
2
+ import { Component, computed, effect, inject, input, signal, untracked, viewChild } from '@angular/core';
3
3
  import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
4
4
  import { ActivatedRoute, Router, RouterModule } from '@angular/router';
5
- import { AppCacheService, BaseObjectTypeField, ClipboardService, DeviceService, DmsService, EventService, ObjectConfigService, Operator, SystemType, TranslateModule, TranslateService, YuvEventType } from '@yuuvis/client-core';
5
+ import { AppCacheService, BaseObjectTypeField, ClipboardService, DeviceService, DmsService, EventService, ObjectConfigService, Operator, RetentionService, SystemType, TranslateModule, TranslateService, YuvEventType } from '@yuuvis/client-core';
6
6
  import { ActionsService, BASE_ACTION } from '@yuuvis/client-framework/actions';
7
7
  import { FileDropZoneDirective } from '@yuuvis/client-framework/common';
8
8
  import { YUV_ICONS } from '@yuuvis/client-framework/icons';
@@ -13,17 +13,17 @@ import { ShellService } from '@yuuvis/client-shell-core';
13
13
  import { ICONS, YvcIconModule } from '@yuuvis/components/icon';
14
14
  import { SplitViewComponent, YvcSplitViewModule } from '@yuuvis/components/split-view';
15
15
  import { finalize, map, tap } from 'rxjs';
16
- import { BreadcrumbComponent, SortComponent } from '../../components';
16
+ import { BreadcrumbComponent, DriveSearchComponent, SortComponent } from '../../components';
17
17
  import { AddButtonComponent } from '../../components/add-button/add-button.component';
18
18
  import { FolderTreeComponent } from '../../components/folder-tree/folder-tree.component';
19
19
  import { RibbonComponent } from '../../components/ribbon/ribbon.component';
20
+ import { SearchFilterComponent } from '../../components/search-filter/search-filter.component';
20
21
  import { APP_DRIVE_ICONS } from '../../drive.icons';
21
22
  import { ACTION_CONTEXT, APP_ID, APP_SCHEMA } from '../../drive.schema';
22
23
  import { DRIVE_EVENT, DRIVE_QUERY_FOLDER_ID, DRIVE_ROOT_FOLDER_ID } from '../../services/drive/drive.interface';
23
24
  import { DriveService } from '../../services/drive/drive.service';
24
25
  import { STORED_QUERY_ID_PREFIX } from '../../services/stored-query/stored-query.data';
25
26
  import { StoredQueryService } from '../../services/stored-query/stored-query.service';
26
- import { SearchFilterComponent } from '../../components/search-filter/search-filter.component';
27
27
  import * as i0 from "@angular/core";
28
28
  import * as i1 from "@yuuvis/components/icon";
29
29
  import * as i2 from "@yuuvis/client-core";
@@ -39,13 +39,15 @@ const components = [
39
39
  SimpleSearchComponent,
40
40
  MultiObjectSummaryComponent,
41
41
  SortComponent,
42
- SearchFilterComponent
42
+ SearchFilterComponent,
43
+ DriveSearchComponent
43
44
  ];
44
45
  const module = [YvcIconModule, TranslateModule, RouterModule, YvcSplitViewModule];
45
46
  export class FilesPageComponent {
46
47
  #LAYOUT_SETTINGS_STORAGE_KEY;
47
48
  #objectConfigService;
48
49
  #device;
50
+ #retention;
49
51
  #eventService;
50
52
  #appCache;
51
53
  #highlightStyles;
@@ -64,6 +66,7 @@ export class FilesPageComponent {
64
66
  this.actionsService = inject(ActionsService);
65
67
  this.#objectConfigService = inject(ObjectConfigService);
66
68
  this.#device = inject(DeviceService);
69
+ this.#retention = inject(RetentionService);
67
70
  this.#eventService = inject(EventService);
68
71
  this.ERROR_CODE = {
69
72
  NOT_FOUND: '404',
@@ -74,10 +77,14 @@ export class FilesPageComponent {
74
77
  this.objectConfigBucket = APP_SCHEMA.id;
75
78
  this.splitViewCmp = viewChild.required(SplitViewComponent);
76
79
  this.selected = signal(undefined);
77
- this.fileDropSummaryDisabled = computed(() => !this.selected()?.permissions?.writeContent);
80
+ this.fileDropSummaryDisabled = computed(() => {
81
+ const e = this.selected();
82
+ return !e || !e.permissions?.writeContent || this.#retention.getRetentionState(e).underRetention;
83
+ });
78
84
  this.disableCreate = false;
79
85
  this.actions = this.drive.state$.actions;
80
86
  this.selection = this.drive.state$.selection;
87
+ this.extendedQuery = this.drive.state$.extendedQuery;
81
88
  this.busy = this.drive.state$.busy;
82
89
  this.flavorChips = this.shellService.getObjectFlavors();
83
90
  this.selectionActions = computed(() => ({ selection: this.selection(), actions: this.actions() }));
@@ -89,12 +96,12 @@ export class FilesPageComponent {
89
96
  folder: { bucket: APP_ID, type: APP_SCHEMA.types['folder'] },
90
97
  file: { bucket: APP_ID, type: APP_SCHEMA.types['file'] }
91
98
  };
92
- this.searchFocused = false;
93
99
  this.enableDetails = signal(true);
94
100
  this.enableTree = signal(true);
95
101
  this.tileConfigBucketLabel = this.translate.instant('yuv.app.drive.tile-config.bucket');
96
102
  this.smallScreenLayout = signal(false);
97
103
  this.sortOptionsAvailable = signal(true);
104
+ this.extendedSearch = signal(false);
98
105
  this.id = input(null);
99
106
  this.highlightStyles$ = this.clipboard.clipboard$(APP_ID).pipe(takeUntilDestroyed(), map((c) => {
100
107
  return c && c.mode && c.objects?.length
@@ -185,8 +192,8 @@ export class FilesPageComponent {
185
192
  if (this.route.snapshot.params['id'] === DRIVE_QUERY_FOLDER_ID) {
186
193
  const q = p.get('q');
187
194
  this.disableCreate = true;
188
- // check if the query is a stored query
189
195
  if (q?.startsWith(STORED_QUERY_ID_PREFIX)) {
196
+ // stored query
190
197
  const sq = this.storedQueryService.getStoredQuery(q);
191
198
  if (sq) {
192
199
  this.drive.updateQuery(sq.query, sq.label);
@@ -195,11 +202,12 @@ export class FilesPageComponent {
195
202
  }
196
203
  }
197
204
  else if (q) {
205
+ // search query
198
206
  this.sortOptionsAvailable.set(true);
199
207
  try {
200
208
  const sq = JSON.parse(decodeURIComponent(q));
201
209
  sq.filters = (sq.filters || []).filter((f) => f.f !== BaseObjectTypeField.PARENT_ID);
202
- this.drive.updateQuery(sq, this.translate.instant('yuv.app.drive.files.search.result.title'));
210
+ this.drive.updateQuery(sq, this.translate.instant('yuv.app.drive.files.search.result.title'), p.get('ext') === 'true');
203
211
  return;
204
212
  }
205
213
  catch (e) {
@@ -274,16 +282,16 @@ export class FilesPageComponent {
274
282
  onCut(tiles) {
275
283
  this.clipboard.addObjects(tiles.map((t) => t.dmsObject), 'cut', APP_ID);
276
284
  }
277
- onQuerySubmit(q) {
278
- // in order to keep the query in the url as short as
279
- // possible we'll get rid of the fields because they could be
280
- // re-applied later on
281
- q.fields = undefined;
282
- this.router.navigate(['..', 'query'], {
283
- queryParams: { q: encodeURIComponent(JSON.stringify(q)) },
284
- relativeTo: this.route
285
- });
286
- }
285
+ // onQuerySubmit(q: SearchQuery) {
286
+ // // in order to keep the query in the url as short as
287
+ // // possible we'll get rid of the fields because they could be
288
+ // // re-applied later on
289
+ // q.fields = undefined;
290
+ // this.router.navigate(['..', 'query'], {
291
+ // queryParams: { q: encodeURIComponent(JSON.stringify(q)) },
292
+ // relativeTo: this.route
293
+ // });
294
+ // }
287
295
  selectionChanged(tiles) {
288
296
  if (tiles.length === 1)
289
297
  this.loadDetails(tiles[0].id);
@@ -363,15 +371,12 @@ export class FilesPageComponent {
363
371
  this.clipboard.clear(APP_ID);
364
372
  }
365
373
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilesPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
366
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilesPageComponent, isStandalone: true, selector: "ymd-files", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.smallScreen": "smallScreenLayout()", "class.searchFocused": "this.searchFocused" } }, viewQueries: [{ propertyName: "tileList", first: true, predicate: ["tileList"], descendants: true, isSignal: true }, { propertyName: "splitViewCmp", first: true, predicate: SplitViewComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<header>\n <!-- navigation bar -->\n <nav [attr.aria-label]=\"'yuv.app.drive.files.naviagtion.aria.label' | translate\">\n <div class=\"nav\">\n <button class=\"back\" [disabled]=\"!currentFolder\" title=\"{{ 'yuv.app.drive.files.nav.back.tooltip' | translate }}\" (click)=\"openParent()\">\n <yvc-icon [svg]=\"icons.back\"></yvc-icon>\n </button>\n <button class=\"refresh\" title=\"{{ 'yuv.app.drive.files.nav.refresh.tooltip' | translate }}\" (click)=\"refresh()\">\n <yvc-icon [svg]=\"icons.refresh\"></yvc-icon>\n </button>\n </div>\n\n @if (!query()?.term) {\n <ymd-breadcrumb></ymd-breadcrumb>\n } @else {\n <div class=\"breadcrumb\"></div>\n }\n <div class=\"search\">\n <yuv-simple-search [query]=\"query()\" (querySubmit)=\"onQuerySubmit($event)\"></yuv-simple-search>\n <!-- TODO: enable again once drive search needs to be a little bit more sophisticated -->\n <!-- <ymd-drive-search (focused)=\"searchFocused = $event\"></ymd-drive-search> -->\n </div>\n </nav>\n\n <!-- ribbon with actions and options -->\n <ymd-ribbon [objects]=\"selection()\" [busy]=\"busy()\" [enableClipboard]=\"true\">\n <ng-template #primaryActions>\n <ymd-add-button [disabled]=\"disableCreate\"></ymd-add-button>\n </ng-template>\n\n <ng-template #secondaryActions>\n <div class=\"options\">\n @if (!smallScreenLayout()) {\n <button\n class=\"toggle-tree toggle\"\n [ngClass]=\"{ enabled: enableTree() }\"\n title=\"{{ 'yuv.app.drive.files.toggletree.tooltip' | translate }}\"\n (click)=\"enableTree.set(!enableTree())\"\n >\n <yvc-icon [svg]=\"icons.toggleLeft\"></yvc-icon>\n </button>\n <button\n class=\"toggle-details toggle\"\n [ngClass]=\"{ enabled: enableDetails() }\"\n title=\"{{ 'yuv.app.drive.files.toggledetails.tooltip' | translate }}\"\n (click)=\"enableDetails.set(!enableDetails())\"\n >\n <yvc-icon [svg]=\"icons.toggleRight\"></yvc-icon>\n </button>\n }\n <yuv-tile-config-trigger\n [icon]=\"icons.settings\"\n [bucket]=\"objectConfigBucket\"\n [bucketLabel]=\"tileConfigBucketLabel\"\n [options]=\"tileListOptions\"\n ></yuv-tile-config-trigger>\n </div>\n </ng-template>\n </ymd-ribbon>\n</header>\n\n<yvc-split-view [gutterSize]=\"1\" (layoutSettingsChange)=\"onLayoutSettingsChange($event)\">\n <!-- folder tree -->\n <ng-template yvcSplitArea [size]=\"20\" [visible]=\"enableTree() && !smallScreenLayout()\">\n <ymd-folder-tree yuvFocusable=\"Tree\"></ymd-folder-tree>\n </ng-template>\n\n <!-- files -->\n <ng-template yvcSplitArea [size]=\"60\">\n @let err = error();\n @if (err) {\n <div class=\"error\">\n <p>\n <yvc-icon [svg]=\"icons.attention\"></yvc-icon>\n @switch (err) {\n @case (ERROR_CODE.NOT_FOUND) {\n {{ 'yuv.app.drive.files.error.load.not-found' | translate }}\n }\n @case (ERROR_CODE.INVALID_ID) {\n {{ 'yuv.app.drive.files.error.load.invalid-id' | translate }}\n }\n @default {\n {{ 'yuv.app.drive.files.error.load' | translate }}\n }\n }\n </p>\n </div>\n } @else {\n <div class=\"files\" [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.label' | translate }\" (fileDrop)=\"onFileDrop($event)\">\n <header class=\"files-header\">\n <h1>{{ queryTitle() }}</h1>\n @if (query()?.term) {\n <ymd-search-filter [query]=\"query()\" (queryChange)=\"onFilterQueryChange($event)\"></ymd-search-filter>\n }\n @if (sortOptionsAvailable()) {\n <ymd-sort />\n }\n <div class=\"flavors\">\n <!-- TODO: enable again once flavors/aspects are supported -->\n <!-- @for (f of flavorChips; track f.id) {\n <yuv-flavor-chip [ngClass]=\"{ active: f.id === appliedFlavor?.id }\" [flavor]=\"f\" (click)=\"appliedFlavor = f\"></yuv-flavor-chip>\n }-->\n </div>\n </header>\n\n <yuv-tile-list\n #tileList\n class=\"staggered\"\n [attr.aria-label]=\"'yuv.app.drive.files.content.aria.label' | translate\"\n [attr.aria-busy]=\"busy()\"\n [attr.role]=\"'listbox'\"\n (keydown.delete)=\"onDelete()\"\n [bucket]=\"objectConfigBucket\"\n [multiselect]=\"true\"\n [query]=\"query()\"\n [flavor]=\"appliedFlavor\"\n [options]=\"tileListOptions\"\n (itemDblClick)=\"itemDoubleClicked($event)\"\n (itemSelect)=\"itemClicked($event)\"\n (selectionChange)=\"selectionChanged($event)\"\n (copy)=\"onCopy($event)\"\n (cut)=\"onCut($event)\"\n (busy)=\"setBusy($event)\"\n (ctxMenu)=\"onContextmenu($event)\"\n [highlights]=\"highlightStyles$ | async\"\n >\n <div #empty>\n @if (emptyMode() === 'root') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.root.list' | translate }}</p>\n } @else if (emptyMode() === 'query') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.query.list' | translate }}</p>\n } @else {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.list' | translate }}</p>\n }\n </div>\n </yuv-tile-list>\n </div>\n }\n </ng-template>\n\n <!-- details -->\n <ng-template yvcSplitArea [size]=\"20\" [visible]=\"enableDetails()\">\n @let selectedItem = selected();\n @if (enableDetails() && selectedItem) {\n @if (selectedItem?.isFolder) {\n <yuv-object-summary [configType]=\"configTypeOptions['folder']\" [dmsObject]=\"selectedItem\"></yuv-object-summary>\n } @else {\n <yuv-object-summary\n [configType]=\"configTypeOptions['file']\"\n [dmsObject]=\"selectedItem\"\n [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.content.replace.label' | translate }\"\n [fileDropDisabled]=\"fileDropSummaryDisabled()\"\n (fileDrop)=\"onFileUpdateDrop($event)\"\n ></yuv-object-summary>\n }\n } @else {\n @let sel = selection();\n @if (sel && sel.length > 0) {\n <yuv-multi-object-summary [headline]=\"'yuv.app.drive.multiselected.details' | translate: { count: selection().length }\"></yuv-multi-object-summary>\n } @else if (tileList()?.items?.length === 0) {\n <!-- TODO: CHOULD HAVE A DIFFERENT MESSAGE FOR EMPTY RESULTS EMPTY FOR NOW -->\n <div class=\"message\">{{ 'yuv.app.drive.empty.results.details.message' | translate }}</div>\n } @else {\n <div class=\"message\">{{ 'yuv.app.drive.unselected.details' | translate }}</div>\n }\n }\n </ng-template>\n</yvc-split-view>\n", styles: [":host{--files-button-padding: calc(var(--app-pane-padding) / 4);--files-button-border-radius: 2px;--files-button-gap: calc(var(--app-pane-padding) / 4);--files-icon-size: 20px;height:100%;overflow:hidden;display:flex;flex-flow:column}:host.searchFocused header>nav .search{grid-column:-1/-3}:host header{flex:0 0 auto}:host header>nav{background-color:var(--app-drive-header-background);border-block-end:1px solid var(--panel-divider-color);display:grid;grid-template-columns:auto 1fr 1fr auto;align-items:center;gap:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2)}:host header>nav .nav{grid-column:1/2;grid-row:1;display:flex;align-items:center;gap:var(--files-button-gap)}:host header>nav .nav button{padding:var(--files-button-padding);border-radius:var(--files-button-border-radius)}:host header>nav .nav button yvc-icon{--icon-size: var(--files-icon-size)}:host header>nav .breadcrumb{grid-column:2/4;grid-row:1;align-self:stretch;display:flex;align-items:center;border-radius:var(--files-button-border-radius);padding:0 .5em;border:1px solid var(--panel-divider-color)}:host header>nav .search{grid-column:-1/-2;grid-row:1;z-index:1}:host yvc-split-view{flex:1;animation:fade-in .3s ease-in-out}:host ymd-ribbon{--ribbon-button-padding: var(--files-button-padding);--ribbon-button-border-radius: var(--files-button-border-radius);--ribbon-button-gap: var(--files-button-gap);--ribbon-icon-size: var(--files-icon-size)}:host ymd-ribbon .options{grid-area:options;display:flex;gap:var(--files-button-gap);align-items:center}:host ymd-ribbon .options yuv-tile-config-trigger{--icon-size: var(--files-icon-size);--button-padding: var(--files-button-padding)}:host ymd-ribbon .options button{padding:var(--files-button-padding);border-radius:var(--files-button-border-radius)}:host ymd-ribbon .options button yvc-icon{--icon-size: var(--files-icon-size)}:host ymd-ribbon .options button.toggle.enabled{background-color:var(--item-focus-background-color)}:host main{height:100%;overflow:hidden;display:flex;flex-flow:column}:host main yvc-master-details{flex:1;overflow:hidden;box-sizing:border-box}:host .error{display:grid;justify-items:center;align-items:center;height:100%;padding:0 2rem;text-align:center;color:var(--text-color-caption)}:host .error p{max-width:31ch;line-height:1.5em;display:grid;justify-items:center}:host .error p yvc-icon{--icon-size: 48px;display:block;margin-block-end:1rem}:host .files{display:flex;flex-flow:column;overflow:hidden;height:100%}:host .files header{flex:0 0 auto;padding:var(--app-pane-padding);display:grid;grid-template-columns:2fr max-content;grid-template-rows:auto auto 1fr;gap:0;grid-auto-flow:row;grid-template-areas:\"title sort\" \"searchfilter searchfilter\" \"flavours flavours\"}:host .files header h1{grid-area:title;margin:0;padding:0;font-size:var(--font-title);font-weight:400;text-overflow:ellipsis;overflow:hidden}:host .files header .flavors{grid-area:flavors;display:flex;gap:2px;justify-content:flex-end;padding:calc(var(--app-pane-padding) / 4)}:host .files header .flavors yuv-flavor-chip{font-size:var(--font-hint);cursor:pointer;--flavor-background: var(--panel-background);--flavor-icon-size: 16px}:host .files header .flavors yuv-flavor-chip:hover{--flavor-border-color: var(--color-accent)}:host .files header ymd-sort{grid-area:sort}:host .files header ymd-search-filter{grid-area:searchfilter}:host .files yuv-tile-list{flex:1;overflow:hidden}:host .message{display:grid;justify-items:center;align-items:center;height:100%;padding:0 2rem;text-align:center;color:var(--text-color-caption)}:host .message p{max-width:31ch;line-height:1.5em}:host yvc-split-view{height:100%;box-sizing:border-box}:host ymd-folder-tree,:host yuv-object-summary{height:100%;overflow-y:auto;box-sizing:border-box}:host yuv-tile-list{--tile-border: 1px solid var(--panel-divider-color);--tile-border-width: 0 0 1px 0;--tile-padding: calc(var(--app-pane-padding) / 2);--tile-icon-size: 18px;--tile-action-icon-size: 18px;--paging-background: var(--panel-background-lightgrey)}:host p.empty{color:var(--text-color-caption)}:host .details{height:100%}:host .details yuv-object-details{height:100%}:host.smallScreen yuv-tile-list{--tile-padding: var(--app-pane-padding) !important}@keyframes fade-in{0%{opacity:0}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i1.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: YvcSplitViewModule }, { kind: "component", type: i3.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i3.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "component", type: TileListComponent, selector: "yuv-tile-list", inputs: ["bucket", "multiselect", "options", "flavor", "query", "preselect", "highlights"], outputs: ["itemSelect", "copy", "cut", "busy", "queryResult", "selectionChange", "itemDblClick", "ctxMenu"] }, { kind: "component", type: BreadcrumbComponent, selector: "ymd-breadcrumb" }, { kind: "component", type: FolderTreeComponent, selector: "ymd-folder-tree" }, { kind: "component", type: ObjectSummaryComponent, selector: "yuv-object-summary", inputs: ["actions", "dmsObject", "objectId", "configType"] }, { kind: "component", type: TileConfigTriggerComponent, selector: "yuv-tile-config-trigger", inputs: ["icon", "bucket", "bucketLabel", "options"] }, { kind: "component", type: RibbonComponent, selector: "ymd-ribbon", inputs: ["busy", "enableClipboard", "objects", "excludeActions"] }, { kind: "component", type: AddButtonComponent, selector: "ymd-add-button", inputs: ["disabled"] }, { kind: "component", type: SimpleSearchComponent, selector: "yuv-simple-search", inputs: ["targets", "query"], outputs: ["querySubmit", "targetSelectionChanged", "queryChange", "typeAggregation"] }, { kind: "component", type: MultiObjectSummaryComponent, selector: "yuv-multi-object-summary", inputs: ["headline"] }, { kind: "component", type: SortComponent, selector: "ymd-sort", outputs: ["sortChanged"] }, { kind: "component", type: SearchFilterComponent, selector: "ymd-search-filter", inputs: ["query"], outputs: ["queryChange"] }, { kind: "directive", type: FileDropZoneDirective, selector: "[yuvFileDropZone]", inputs: ["yuvFileDropZone", "fileDropDisabled"], outputs: ["fileDrop", "fileDropOver"] }] }); }
374
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilesPageComponent, isStandalone: true, selector: "ymd-files", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.smallScreen": "smallScreenLayout()" } }, viewQueries: [{ propertyName: "tileList", first: true, predicate: ["tileList"], descendants: true, isSignal: true }, { propertyName: "splitViewCmp", first: true, predicate: SplitViewComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<header>\n <!-- navigation bar -->\n <nav [attr.aria-label]=\"'yuv.app.drive.files.naviagtion.aria.label' | translate\">\n <div class=\"nav\">\n <button class=\"back\" [disabled]=\"!currentFolder\" title=\"{{ 'yuv.app.drive.files.nav.back.tooltip' | translate }}\" (click)=\"openParent()\">\n <yvc-icon [svg]=\"icons.back\"></yvc-icon>\n </button>\n <button class=\"refresh\" title=\"{{ 'yuv.app.drive.files.nav.refresh.tooltip' | translate }}\" (click)=\"refresh()\">\n <yvc-icon [svg]=\"icons.refresh\"></yvc-icon>\n </button>\n </div>\n\n @if (!query()?.term) {\n <ymd-breadcrumb></ymd-breadcrumb>\n } @else {\n <div class=\"breadcrumb\"></div>\n }\n <div class=\"search\">\n <ymd-drive-search></ymd-drive-search>\n </div>\n </nav>\n\n <!-- ribbon with actions and options -->\n <ymd-ribbon [objects]=\"selection()\" [busy]=\"busy()\" [enableClipboard]=\"true\">\n <ng-template #primaryActions>\n <ymd-add-button [disabled]=\"disableCreate\"></ymd-add-button>\n </ng-template>\n\n <ng-template #secondaryActions>\n <div class=\"options\">\n @if (!smallScreenLayout()) {\n <button\n class=\"toggle-tree toggle\"\n [ngClass]=\"{ enabled: enableTree() }\"\n title=\"{{ 'yuv.app.drive.files.toggletree.tooltip' | translate }}\"\n (click)=\"enableTree.set(!enableTree())\"\n >\n <yvc-icon [svg]=\"icons.toggleLeft\"></yvc-icon>\n </button>\n <button\n class=\"toggle-details toggle\"\n [ngClass]=\"{ enabled: enableDetails() }\"\n title=\"{{ 'yuv.app.drive.files.toggledetails.tooltip' | translate }}\"\n (click)=\"enableDetails.set(!enableDetails())\"\n >\n <yvc-icon [svg]=\"icons.toggleRight\"></yvc-icon>\n </button>\n }\n <yuv-tile-config-trigger\n [icon]=\"icons.settings\"\n [bucket]=\"objectConfigBucket\"\n [bucketLabel]=\"tileConfigBucketLabel\"\n [options]=\"tileListOptions\"\n ></yuv-tile-config-trigger>\n </div>\n </ng-template>\n </ymd-ribbon>\n</header>\n\n<yvc-split-view [gutterSize]=\"1\" (layoutSettingsChange)=\"onLayoutSettingsChange($event)\">\n <!-- folder tree -->\n <ng-template yvcSplitArea [size]=\"20\" [visible]=\"enableTree() && !smallScreenLayout()\">\n <ymd-folder-tree yuvFocusable=\"Tree\"></ymd-folder-tree>\n </ng-template>\n\n <!-- files -->\n <ng-template yvcSplitArea [size]=\"60\">\n @let err = error();\n @if (err) {\n <div class=\"error\">\n <p>\n <yvc-icon [svg]=\"icons.attention\"></yvc-icon>\n @switch (err) {\n @case (ERROR_CODE.NOT_FOUND) {\n {{ 'yuv.app.drive.files.error.load.not-found' | translate }}\n }\n @case (ERROR_CODE.INVALID_ID) {\n {{ 'yuv.app.drive.files.error.load.invalid-id' | translate }}\n }\n @default {\n {{ 'yuv.app.drive.files.error.load' | translate }}\n }\n }\n </p>\n </div>\n } @else {\n <div class=\"files\" [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.label' | translate }\" (fileDrop)=\"onFileDrop($event)\">\n <header class=\"files-header\">\n <h1>{{ queryTitle() }}</h1>\n @if (query()?.term && !extendedQuery()) {\n <ymd-search-filter [query]=\"query()\" (queryChange)=\"onFilterQueryChange($event)\"></ymd-search-filter>\n }\n @if (sortOptionsAvailable()) {\n <ymd-sort />\n }\n <div class=\"flavors\">\n <!-- TODO: enable again once flavors/aspects are supported -->\n <!-- @for (f of flavorChips; track f.id) {\n <yuv-flavor-chip [ngClass]=\"{ active: f.id === appliedFlavor?.id }\" [flavor]=\"f\" (click)=\"appliedFlavor = f\"></yuv-flavor-chip>\n }-->\n </div>\n </header>\n\n <yuv-tile-list\n #tileList\n class=\"staggered\"\n [attr.aria-label]=\"'yuv.app.drive.files.content.aria.label' | translate\"\n [attr.aria-busy]=\"busy()\"\n [attr.role]=\"'listbox'\"\n (keydown.delete)=\"onDelete()\"\n [bucket]=\"objectConfigBucket\"\n [multiselect]=\"true\"\n [query]=\"query()\"\n [flavor]=\"appliedFlavor\"\n [options]=\"tileListOptions\"\n (itemDblClick)=\"itemDoubleClicked($event)\"\n (itemSelect)=\"itemClicked($event)\"\n (selectionChange)=\"selectionChanged($event)\"\n (copy)=\"onCopy($event)\"\n (cut)=\"onCut($event)\"\n (busy)=\"setBusy($event)\"\n (ctxMenu)=\"onContextmenu($event)\"\n [highlights]=\"highlightStyles$ | async\"\n >\n <div #empty>\n @if (emptyMode() === 'root') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.root.list' | translate }}</p>\n } @else if (emptyMode() === 'query') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.query.list' | translate }}</p>\n } @else {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.list' | translate }}</p>\n }\n </div>\n </yuv-tile-list>\n </div>\n }\n </ng-template>\n\n <!-- details -->\n <ng-template yvcSplitArea [size]=\"20\" [visible]=\"enableDetails()\">\n @let selectedItem = selected();\n @if (enableDetails() && selectedItem) {\n @if (selectedItem?.isFolder) {\n <yuv-object-summary [configType]=\"configTypeOptions['folder']\" [dmsObject]=\"selectedItem\"></yuv-object-summary>\n } @else {\n <yuv-object-summary\n [configType]=\"configTypeOptions['file']\"\n [dmsObject]=\"selectedItem\"\n [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.content.replace.label' | translate }\"\n [fileDropDisabled]=\"fileDropSummaryDisabled()\"\n (fileDrop)=\"onFileUpdateDrop($event)\"\n ></yuv-object-summary>\n }\n } @else {\n @let sel = selection();\n @if (sel && sel.length > 0) {\n <yuv-multi-object-summary [headline]=\"'yuv.app.drive.multiselected.details' | translate: { count: selection().length }\"></yuv-multi-object-summary>\n } @else if (tileList()?.items?.length === 0) {\n <!-- TODO: CHOULD HAVE A DIFFERENT MESSAGE FOR EMPTY RESULTS EMPTY FOR NOW -->\n <div class=\"message\">{{ 'yuv.app.drive.empty.results.details.message' | translate }}</div>\n } @else {\n <div class=\"message\">{{ 'yuv.app.drive.unselected.details' | translate }}</div>\n }\n }\n </ng-template>\n</yvc-split-view>\n", styles: [":host{--files-button-padding: calc(var(--app-pane-padding) / 4);--files-button-border-radius: 2px;--files-button-gap: calc(var(--app-pane-padding) / 4);--files-icon-size: 20px;height:100%;overflow:hidden;display:flex;flex-flow:column}:host header{flex:0 0 auto}:host header>nav{background-color:var(--app-drive-header-background);border-block-end:1px solid var(--panel-divider-color);display:grid;grid-template-columns:auto 1fr 1fr auto;align-items:center;gap:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2)}:host header>nav .nav{grid-column:1/2;grid-row:1;display:flex;align-items:center;gap:var(--files-button-gap)}:host header>nav .nav button{padding:var(--files-button-padding);border-radius:var(--files-button-border-radius)}:host header>nav .nav button yvc-icon{--icon-size: var(--files-icon-size)}:host header>nav .breadcrumb{grid-column:2/4;grid-row:1;align-self:stretch;display:flex;align-items:center;border-radius:var(--files-button-border-radius);padding:0 .5em;border:1px solid var(--panel-divider-color)}:host header>nav .search{grid-column:-1/-2;grid-row:1;z-index:1}:host yvc-split-view{flex:1;animation:fade-in .3s ease-in-out}:host ymd-ribbon{--ribbon-button-padding: var(--files-button-padding);--ribbon-button-border-radius: var(--files-button-border-radius);--ribbon-button-gap: var(--files-button-gap);--ribbon-icon-size: var(--files-icon-size)}:host ymd-ribbon .options{grid-area:options;display:flex;gap:var(--files-button-gap);align-items:center}:host ymd-ribbon .options yuv-tile-config-trigger{--icon-size: var(--files-icon-size);--button-padding: var(--files-button-padding)}:host ymd-ribbon .options button{padding:var(--files-button-padding);border-radius:var(--files-button-border-radius)}:host ymd-ribbon .options button yvc-icon{--icon-size: var(--files-icon-size)}:host ymd-ribbon .options button.toggle.enabled{background-color:var(--item-focus-background-color)}:host main{height:100%;overflow:hidden;display:flex;flex-flow:column}:host main yvc-master-details{flex:1;overflow:hidden;box-sizing:border-box}:host .error{display:grid;justify-items:center;align-items:center;height:100%;padding:0 2rem;text-align:center;color:var(--text-color-caption)}:host .error p{max-width:31ch;line-height:1.5em;display:grid;justify-items:center}:host .error p yvc-icon{--icon-size: 48px;display:block;margin-block-end:1rem}:host .files{display:flex;flex-flow:column;overflow:hidden;height:100%}:host .files header{flex:0 0 auto;padding:var(--app-pane-padding);display:grid;grid-template-columns:2fr max-content;grid-template-rows:auto auto 1fr;gap:0;grid-auto-flow:row;grid-template-areas:\"title sort\" \"searchfilter searchfilter\" \"flavours flavours\"}:host .files header h1{grid-area:title;margin:0;padding:0;font-size:var(--font-title);font-weight:400;text-overflow:ellipsis;overflow:hidden}:host .files header .flavors{grid-area:flavors;display:flex;gap:2px;justify-content:flex-end;padding:calc(var(--app-pane-padding) / 4)}:host .files header .flavors yuv-flavor-chip{font-size:var(--font-hint);cursor:pointer;--flavor-background: var(--panel-background);--flavor-icon-size: 16px}:host .files header .flavors yuv-flavor-chip:hover{--flavor-border-color: var(--color-accent)}:host .files header ymd-sort{grid-area:sort}:host .files header ymd-search-filter{grid-area:searchfilter}:host .files yuv-tile-list{flex:1;overflow:hidden}:host .message{display:grid;justify-items:center;align-items:center;height:100%;padding:0 2rem;text-align:center;color:var(--text-color-caption)}:host .message p{max-width:31ch;line-height:1.5em}:host yvc-split-view{height:100%;box-sizing:border-box}:host ymd-folder-tree,:host yuv-object-summary{height:100%;overflow-y:auto;box-sizing:border-box}:host yuv-tile-list{--tile-border: 1px solid var(--panel-divider-color);--tile-border-width: 0 0 1px 0;--tile-padding: calc(var(--app-pane-padding) / 2);--tile-icon-size: 18px;--tile-action-icon-size: 18px;--paging-background: var(--panel-background-lightgrey)}:host p.empty{color:var(--text-color-caption)}:host .details{height:100%}:host .details yuv-object-details{height:100%}:host.smallScreen yuv-tile-list{--tile-padding: var(--app-pane-padding) !important}@keyframes fade-in{0%{opacity:0}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i1.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: YvcSplitViewModule }, { kind: "component", type: i3.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i3.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "component", type: TileListComponent, selector: "yuv-tile-list", inputs: ["bucket", "multiselect", "options", "flavor", "query", "preselect", "highlights"], outputs: ["itemSelect", "copy", "cut", "busy", "queryResult", "selectionChange", "itemDblClick", "ctxMenu"] }, { kind: "component", type: BreadcrumbComponent, selector: "ymd-breadcrumb" }, { kind: "component", type: FolderTreeComponent, selector: "ymd-folder-tree" }, { kind: "component", type: ObjectSummaryComponent, selector: "yuv-object-summary", inputs: ["actions", "dmsObject", "objectId", "configType"] }, { kind: "component", type: TileConfigTriggerComponent, selector: "yuv-tile-config-trigger", inputs: ["icon", "bucket", "bucketLabel", "options"] }, { kind: "component", type: RibbonComponent, selector: "ymd-ribbon", inputs: ["busy", "enableClipboard", "objects", "excludeActions"] }, { kind: "component", type: AddButtonComponent, selector: "ymd-add-button", inputs: ["disabled"] }, { kind: "component", type: MultiObjectSummaryComponent, selector: "yuv-multi-object-summary", inputs: ["headline"] }, { kind: "component", type: SortComponent, selector: "ymd-sort", outputs: ["sortChanged"] }, { kind: "component", type: SearchFilterComponent, selector: "ymd-search-filter", inputs: ["query"], outputs: ["queryChange"] }, { kind: "component", type: DriveSearchComponent, selector: "ymd-drive-search" }, { kind: "directive", type: FileDropZoneDirective, selector: "[yuvFileDropZone]", inputs: ["yuvFileDropZone", "fileDropDisabled"], outputs: ["fileDrop", "fileDropOver"] }] }); }
367
375
  }
368
376
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilesPageComponent, decorators: [{
369
377
  type: Component,
370
378
  args: [{ selector: 'ymd-files', standalone: true, imports: [NgClass, AsyncPipe, ...module, ...components, FileDropZoneDirective], host: {
371
379
  '[class.smallScreen]': 'smallScreenLayout()'
372
- }, template: "<header>\n <!-- navigation bar -->\n <nav [attr.aria-label]=\"'yuv.app.drive.files.naviagtion.aria.label' | translate\">\n <div class=\"nav\">\n <button class=\"back\" [disabled]=\"!currentFolder\" title=\"{{ 'yuv.app.drive.files.nav.back.tooltip' | translate }}\" (click)=\"openParent()\">\n <yvc-icon [svg]=\"icons.back\"></yvc-icon>\n </button>\n <button class=\"refresh\" title=\"{{ 'yuv.app.drive.files.nav.refresh.tooltip' | translate }}\" (click)=\"refresh()\">\n <yvc-icon [svg]=\"icons.refresh\"></yvc-icon>\n </button>\n </div>\n\n @if (!query()?.term) {\n <ymd-breadcrumb></ymd-breadcrumb>\n } @else {\n <div class=\"breadcrumb\"></div>\n }\n <div class=\"search\">\n <yuv-simple-search [query]=\"query()\" (querySubmit)=\"onQuerySubmit($event)\"></yuv-simple-search>\n <!-- TODO: enable again once drive search needs to be a little bit more sophisticated -->\n <!-- <ymd-drive-search (focused)=\"searchFocused = $event\"></ymd-drive-search> -->\n </div>\n </nav>\n\n <!-- ribbon with actions and options -->\n <ymd-ribbon [objects]=\"selection()\" [busy]=\"busy()\" [enableClipboard]=\"true\">\n <ng-template #primaryActions>\n <ymd-add-button [disabled]=\"disableCreate\"></ymd-add-button>\n </ng-template>\n\n <ng-template #secondaryActions>\n <div class=\"options\">\n @if (!smallScreenLayout()) {\n <button\n class=\"toggle-tree toggle\"\n [ngClass]=\"{ enabled: enableTree() }\"\n title=\"{{ 'yuv.app.drive.files.toggletree.tooltip' | translate }}\"\n (click)=\"enableTree.set(!enableTree())\"\n >\n <yvc-icon [svg]=\"icons.toggleLeft\"></yvc-icon>\n </button>\n <button\n class=\"toggle-details toggle\"\n [ngClass]=\"{ enabled: enableDetails() }\"\n title=\"{{ 'yuv.app.drive.files.toggledetails.tooltip' | translate }}\"\n (click)=\"enableDetails.set(!enableDetails())\"\n >\n <yvc-icon [svg]=\"icons.toggleRight\"></yvc-icon>\n </button>\n }\n <yuv-tile-config-trigger\n [icon]=\"icons.settings\"\n [bucket]=\"objectConfigBucket\"\n [bucketLabel]=\"tileConfigBucketLabel\"\n [options]=\"tileListOptions\"\n ></yuv-tile-config-trigger>\n </div>\n </ng-template>\n </ymd-ribbon>\n</header>\n\n<yvc-split-view [gutterSize]=\"1\" (layoutSettingsChange)=\"onLayoutSettingsChange($event)\">\n <!-- folder tree -->\n <ng-template yvcSplitArea [size]=\"20\" [visible]=\"enableTree() && !smallScreenLayout()\">\n <ymd-folder-tree yuvFocusable=\"Tree\"></ymd-folder-tree>\n </ng-template>\n\n <!-- files -->\n <ng-template yvcSplitArea [size]=\"60\">\n @let err = error();\n @if (err) {\n <div class=\"error\">\n <p>\n <yvc-icon [svg]=\"icons.attention\"></yvc-icon>\n @switch (err) {\n @case (ERROR_CODE.NOT_FOUND) {\n {{ 'yuv.app.drive.files.error.load.not-found' | translate }}\n }\n @case (ERROR_CODE.INVALID_ID) {\n {{ 'yuv.app.drive.files.error.load.invalid-id' | translate }}\n }\n @default {\n {{ 'yuv.app.drive.files.error.load' | translate }}\n }\n }\n </p>\n </div>\n } @else {\n <div class=\"files\" [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.label' | translate }\" (fileDrop)=\"onFileDrop($event)\">\n <header class=\"files-header\">\n <h1>{{ queryTitle() }}</h1>\n @if (query()?.term) {\n <ymd-search-filter [query]=\"query()\" (queryChange)=\"onFilterQueryChange($event)\"></ymd-search-filter>\n }\n @if (sortOptionsAvailable()) {\n <ymd-sort />\n }\n <div class=\"flavors\">\n <!-- TODO: enable again once flavors/aspects are supported -->\n <!-- @for (f of flavorChips; track f.id) {\n <yuv-flavor-chip [ngClass]=\"{ active: f.id === appliedFlavor?.id }\" [flavor]=\"f\" (click)=\"appliedFlavor = f\"></yuv-flavor-chip>\n }-->\n </div>\n </header>\n\n <yuv-tile-list\n #tileList\n class=\"staggered\"\n [attr.aria-label]=\"'yuv.app.drive.files.content.aria.label' | translate\"\n [attr.aria-busy]=\"busy()\"\n [attr.role]=\"'listbox'\"\n (keydown.delete)=\"onDelete()\"\n [bucket]=\"objectConfigBucket\"\n [multiselect]=\"true\"\n [query]=\"query()\"\n [flavor]=\"appliedFlavor\"\n [options]=\"tileListOptions\"\n (itemDblClick)=\"itemDoubleClicked($event)\"\n (itemSelect)=\"itemClicked($event)\"\n (selectionChange)=\"selectionChanged($event)\"\n (copy)=\"onCopy($event)\"\n (cut)=\"onCut($event)\"\n (busy)=\"setBusy($event)\"\n (ctxMenu)=\"onContextmenu($event)\"\n [highlights]=\"highlightStyles$ | async\"\n >\n <div #empty>\n @if (emptyMode() === 'root') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.root.list' | translate }}</p>\n } @else if (emptyMode() === 'query') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.query.list' | translate }}</p>\n } @else {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.list' | translate }}</p>\n }\n </div>\n </yuv-tile-list>\n </div>\n }\n </ng-template>\n\n <!-- details -->\n <ng-template yvcSplitArea [size]=\"20\" [visible]=\"enableDetails()\">\n @let selectedItem = selected();\n @if (enableDetails() && selectedItem) {\n @if (selectedItem?.isFolder) {\n <yuv-object-summary [configType]=\"configTypeOptions['folder']\" [dmsObject]=\"selectedItem\"></yuv-object-summary>\n } @else {\n <yuv-object-summary\n [configType]=\"configTypeOptions['file']\"\n [dmsObject]=\"selectedItem\"\n [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.content.replace.label' | translate }\"\n [fileDropDisabled]=\"fileDropSummaryDisabled()\"\n (fileDrop)=\"onFileUpdateDrop($event)\"\n ></yuv-object-summary>\n }\n } @else {\n @let sel = selection();\n @if (sel && sel.length > 0) {\n <yuv-multi-object-summary [headline]=\"'yuv.app.drive.multiselected.details' | translate: { count: selection().length }\"></yuv-multi-object-summary>\n } @else if (tileList()?.items?.length === 0) {\n <!-- TODO: CHOULD HAVE A DIFFERENT MESSAGE FOR EMPTY RESULTS EMPTY FOR NOW -->\n <div class=\"message\">{{ 'yuv.app.drive.empty.results.details.message' | translate }}</div>\n } @else {\n <div class=\"message\">{{ 'yuv.app.drive.unselected.details' | translate }}</div>\n }\n }\n </ng-template>\n</yvc-split-view>\n", styles: [":host{--files-button-padding: calc(var(--app-pane-padding) / 4);--files-button-border-radius: 2px;--files-button-gap: calc(var(--app-pane-padding) / 4);--files-icon-size: 20px;height:100%;overflow:hidden;display:flex;flex-flow:column}:host.searchFocused header>nav .search{grid-column:-1/-3}:host header{flex:0 0 auto}:host header>nav{background-color:var(--app-drive-header-background);border-block-end:1px solid var(--panel-divider-color);display:grid;grid-template-columns:auto 1fr 1fr auto;align-items:center;gap:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2)}:host header>nav .nav{grid-column:1/2;grid-row:1;display:flex;align-items:center;gap:var(--files-button-gap)}:host header>nav .nav button{padding:var(--files-button-padding);border-radius:var(--files-button-border-radius)}:host header>nav .nav button yvc-icon{--icon-size: var(--files-icon-size)}:host header>nav .breadcrumb{grid-column:2/4;grid-row:1;align-self:stretch;display:flex;align-items:center;border-radius:var(--files-button-border-radius);padding:0 .5em;border:1px solid var(--panel-divider-color)}:host header>nav .search{grid-column:-1/-2;grid-row:1;z-index:1}:host yvc-split-view{flex:1;animation:fade-in .3s ease-in-out}:host ymd-ribbon{--ribbon-button-padding: var(--files-button-padding);--ribbon-button-border-radius: var(--files-button-border-radius);--ribbon-button-gap: var(--files-button-gap);--ribbon-icon-size: var(--files-icon-size)}:host ymd-ribbon .options{grid-area:options;display:flex;gap:var(--files-button-gap);align-items:center}:host ymd-ribbon .options yuv-tile-config-trigger{--icon-size: var(--files-icon-size);--button-padding: var(--files-button-padding)}:host ymd-ribbon .options button{padding:var(--files-button-padding);border-radius:var(--files-button-border-radius)}:host ymd-ribbon .options button yvc-icon{--icon-size: var(--files-icon-size)}:host ymd-ribbon .options button.toggle.enabled{background-color:var(--item-focus-background-color)}:host main{height:100%;overflow:hidden;display:flex;flex-flow:column}:host main yvc-master-details{flex:1;overflow:hidden;box-sizing:border-box}:host .error{display:grid;justify-items:center;align-items:center;height:100%;padding:0 2rem;text-align:center;color:var(--text-color-caption)}:host .error p{max-width:31ch;line-height:1.5em;display:grid;justify-items:center}:host .error p yvc-icon{--icon-size: 48px;display:block;margin-block-end:1rem}:host .files{display:flex;flex-flow:column;overflow:hidden;height:100%}:host .files header{flex:0 0 auto;padding:var(--app-pane-padding);display:grid;grid-template-columns:2fr max-content;grid-template-rows:auto auto 1fr;gap:0;grid-auto-flow:row;grid-template-areas:\"title sort\" \"searchfilter searchfilter\" \"flavours flavours\"}:host .files header h1{grid-area:title;margin:0;padding:0;font-size:var(--font-title);font-weight:400;text-overflow:ellipsis;overflow:hidden}:host .files header .flavors{grid-area:flavors;display:flex;gap:2px;justify-content:flex-end;padding:calc(var(--app-pane-padding) / 4)}:host .files header .flavors yuv-flavor-chip{font-size:var(--font-hint);cursor:pointer;--flavor-background: var(--panel-background);--flavor-icon-size: 16px}:host .files header .flavors yuv-flavor-chip:hover{--flavor-border-color: var(--color-accent)}:host .files header ymd-sort{grid-area:sort}:host .files header ymd-search-filter{grid-area:searchfilter}:host .files yuv-tile-list{flex:1;overflow:hidden}:host .message{display:grid;justify-items:center;align-items:center;height:100%;padding:0 2rem;text-align:center;color:var(--text-color-caption)}:host .message p{max-width:31ch;line-height:1.5em}:host yvc-split-view{height:100%;box-sizing:border-box}:host ymd-folder-tree,:host yuv-object-summary{height:100%;overflow-y:auto;box-sizing:border-box}:host yuv-tile-list{--tile-border: 1px solid var(--panel-divider-color);--tile-border-width: 0 0 1px 0;--tile-padding: calc(var(--app-pane-padding) / 2);--tile-icon-size: 18px;--tile-action-icon-size: 18px;--paging-background: var(--panel-background-lightgrey)}:host p.empty{color:var(--text-color-caption)}:host .details{height:100%}:host .details yuv-object-details{height:100%}:host.smallScreen yuv-tile-list{--tile-padding: var(--app-pane-padding) !important}@keyframes fade-in{0%{opacity:0}}\n"] }]
373
- }], ctorParameters: () => [], propDecorators: { searchFocused: [{
374
- type: HostBinding,
375
- args: ['class.searchFocused']
376
- }] } });
377
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHBzL2RyaXZlL3NyYy9saWIvcGFnZXMvZmlsZXMvZmlsZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHBzL2RyaXZlL3NyYy9saWIvcGFnZXMvZmlsZXMvZmlsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVyRCxPQUFPLEVBQWlCLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBWSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakYsT0FBTyxFQUNMLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBR2hCLGFBQWEsRUFFYixVQUFVLEVBQ1YsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixRQUFRLEVBR1IsVUFBVSxFQUNWLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNiLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFVLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFZLGlCQUFpQixFQUE0QyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZKLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQTJCLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEgsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQXlCLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFpQixNQUFNLHNDQUFzQyxDQUFDO0FBQy9ILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUV2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7Ozs7QUFFL0YsTUFBTSxVQUFVLEdBQUc7SUFDakIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsc0JBQXNCO0lBQ3RCLDBCQUEwQjtJQUMxQixlQUFlO0lBQ2Ysa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQiwyQkFBMkI7SUFDM0IsYUFBYTtJQUNiLHFCQUFxQjtDQUN0QixDQUFDO0FBRUYsTUFBTSxNQUFNLEdBQUcsQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBWWxGLE1BQU0sT0FBTyxrQkFBa0I7SUFHN0IsNEJBQTRCLENBQWdDO0lBV25ELG9CQUFvQixDQUErQjtJQUNuRCxPQUFPLENBQXlCO0lBRWhDLGFBQWEsQ0FBd0I7SUFROUMsU0FBUyxDQUEyQjtJQXVEM0IsZ0JBQWdCLENBRXZCO0lBRUYsY0FBYyxDQStCWDtJQW9CSDtRQXRJQSxhQUFRLEdBQUcsU0FBUyxDQUFvQixVQUFVLENBQUMsQ0FBQztRQUVwRCxpQ0FBNEIsR0FBRyw0QkFBNEIsQ0FBQztRQUVwRCxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0IsVUFBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvQixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyQyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRCxjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckMsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMseUJBQW9CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbkQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVoQyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVyQyxlQUFVLEdBQUc7WUFDcEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsbURBQW1EO1lBQ25ELFVBQVUsRUFBRSxVQUFVO1NBQ3ZCLENBQUM7UUFFRixjQUFTLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXBDLHVCQUFrQixHQUFXLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFFM0MsaUJBQVksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEQsYUFBUSxHQUFHLE1BQU0sQ0FBd0IsU0FBUyxDQUFDLENBQUM7UUFDcEQsNEJBQXVCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN0RixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0QixZQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFFeEMsU0FBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM5QixnQkFBVyxHQUFtQixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFHbkUscUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFOUYsY0FBUyxHQUFHLE1BQU0sQ0FBdUIsSUFBSSxDQUFDLENBQUM7UUFDL0MsK0RBQStEO1FBQy9ELGlEQUFpRDtRQUNqRCxVQUFLLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUU5QyxzQkFBaUIsR0FBcUM7WUFDcEQsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM1RCxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1NBQ3pELENBQUM7UUFFa0Msa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFJMUQsa0JBQWEsR0FBRyxNQUFNLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDdEMsZUFBVSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNuQywwQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBRW5GLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyx5QkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEMsT0FBRSxHQUFHLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFaEMscUJBQWdCLEdBQW9DLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDeEYsa0JBQWtCLEVBQUUsRUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDUixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTTtnQkFDckMsQ0FBQyxDQUFDO29CQUNFO3dCQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzt3QkFDekMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3FCQUNoQztpQkFDRjtnQkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVPLHFCQUFnQixHQUE0QztZQUNuRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO1NBQ3RCLENBQUM7UUFFRixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLFNBQVMsQ0FBQztZQUVyQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQ25CLElBQUksS0FBSyxLQUFLLHFCQUFxQixFQUFFLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0JBQzFDLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssb0JBQW9CLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakYsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztnQkFDL0IsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLG9CQUFvQjtvQkFBRSxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztnQkFFcEYsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUM7d0JBQzNELElBQUksRUFBRSxDQUFDLENBQVksRUFBRSxFQUFFOzRCQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzFDLENBQUM7d0JBQ0QsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7NEJBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixDQUFDO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDOztvQkFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQztZQUMzRixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0JBQWUsR0FBMEI7WUFDdkMsYUFBYSxFQUFFLGNBQWM7WUFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUM1QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ25KLENBQUM7UUFFRixVQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2hDLGVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFFMUMsVUFBSyxHQUFHO1lBQ04sR0FBRyxlQUFlO1lBQ2xCLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSTtZQUMxQixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDcEIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO1lBQzlCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztZQUMxQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDbkIsQ0FBQztRQUdBLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3RELElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNWLElBQUksQ0FBQyxLQUFLLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzlELElBQUksRUFBRSxDQUFDLENBQWUsRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssVUFBVSxDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUNwRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUN0QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFnQixFQUFFLEVBQUU7Z0JBQ3pCLElBQUksR0FBRyxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQy9CLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUQsSUFBSSxFQUFFLENBQUMsQ0FBVyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLHFCQUFxQixFQUFFLENBQUM7b0JBQy9ELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUMxQix1Q0FBdUM7b0JBQ3ZDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7d0JBQzFDLE1BQU0sRUFBRSxHQUE0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM5RSxJQUFJLEVBQUUsRUFBRSxDQUFDOzRCQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUMzQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNyQyxPQUFPO3dCQUNULENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNiLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3BDLElBQUksQ0FBQzs0QkFDSCxNQUFNLEVBQUUsR0FBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUMxRCxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7NEJBQ3JGLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLENBQUM7NEJBQzlGLE9BQU87d0JBQ1QsQ0FBQzt3QkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDOzRCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzFDLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhO2FBQ2YsRUFBRSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQzthQUNuQyxJQUFJLENBQ0gsa0JBQWtCLEVBQUUsRUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDUixJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsQ0FBYztRQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUNBQXlDLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxDQUFvQjtRQUNwQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDOztZQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFZO1FBQ3BCLE1BQU0sT0FBTyxHQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqSCxNQUFNLEVBQUUsR0FBeUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9ILE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxJQUFJLFlBQVk7WUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxVQUFtQjtRQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FDcEI7WUFDRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxFQUFFLENBQUM7U0FDckcsRUFDRCxVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQXdDO1FBQzNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVk7UUFDM0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSztpQkFDUCxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDL0MsU0FBUyxFQUFFLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsSUFBYztRQUN4QixxQkFBcUI7SUFDdkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFjO1FBQ3hCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxNQUFNLENBQUMsS0FBaUI7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQ3ZCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFDN0IsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFpQjtRQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FDdkIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUM3QixLQUFLLEVBQ0wsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLENBQWM7UUFDMUIsb0RBQW9EO1FBQ3BELDZEQUE2RDtRQUM3RCxzQkFBc0I7UUFDdEIsQ0FBQyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFFckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDcEMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6RCxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWlCO1FBQ2hDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDakQsQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQzlELElBQUksRUFBRSxDQUFDLENBQWMsRUFBRSxFQUFFO3dCQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLENBQUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBYztRQUM5QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixNQUFNLEdBQUcsR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBWSxLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2pJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JKLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQVU7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3pDLElBQUksRUFBRSxDQUFDLENBQVksRUFBRSxFQUFFO2dCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU07aUJBQ1IsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLEVBQUU7Z0JBQ2hHLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDdEIsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQztpQkFDRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFhO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxDQUFNO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMzRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsUUFBaUM7UUFDcEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2xFLElBQUksRUFBRSxDQUFDLEVBQTJCLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDOytHQXhYVSxrQkFBa0I7bUdBQWxCLGtCQUFrQix3Y0E2Qkssa0JBQWtCLGdFQ3ZHdEQsaTROQXdLQSw4eElEckdZLE9BQU8sK0VBQUUsU0FBUyw2Q0FMZCxhQUFhLDhIQUFFLGVBQWUsMkZBQUUsWUFBWSw4QkFBRSxrQkFBa0Isb2RBYjlFLGlCQUFpQixtUUFDakIsbUJBQW1CLDJEQUNuQixtQkFBbUIsNERBQ25CLHNCQUFzQiwySEFDdEIsMEJBQTBCLDBIQUMxQixlQUFlLHlIQUNmLGtCQUFrQixpRkFDbEIscUJBQXFCLGtMQUNyQiwyQkFBMkIsMkZBQzNCLGFBQWEsK0VBQ2IscUJBQXFCLDJHQVFtQyxxQkFBcUI7OzRGQU9sRSxrQkFBa0I7a0JBVjlCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxVQUFVLEVBQUUscUJBQXFCLENBQUMsUUFHeEU7d0JBQ0oscUJBQXFCLEVBQUUscUJBQXFCO3FCQUM3Qzt3REF1RG1DLGFBQWE7c0JBQWhELFdBQVc7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBIb3N0QmluZGluZywgaW5qZWN0LCBpbnB1dCwgT25EZXN0cm95LCBTaWduYWwsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtTWFwLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBcHBDYWNoZVNlcnZpY2UsXG4gIEJhc2VPYmplY3RUeXBlRmllbGQsXG4gIENsaXBib2FyZFNlcnZpY2UsXG4gIENvbmZpZ1R5cGVPcHRpb24sXG4gIERldmljZVNjcmVlbixcbiAgRGV2aWNlU2VydmljZSxcbiAgRG1zT2JqZWN0LFxuICBEbXNTZXJ2aWNlLFxuICBFdmVudFNlcnZpY2UsXG4gIE9iamVjdENvbmZpZ1NlcnZpY2UsXG4gIE9wZXJhdG9yLFxuICBSZXNvbHZlZE9iamVjdENvbmZpZyxcbiAgU2VhcmNoUXVlcnksXG4gIFN5c3RlbVR5cGUsXG4gIFRyYW5zbGF0ZU1vZHVsZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgWXV2RXZlbnRUeXBlXG59IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBBY3Rpb25zU2VydmljZSwgQkFTRV9BQ1RJT04gfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvYWN0aW9ucyc7XG5pbXBvcnQgeyBGaWxlRHJvcFpvbmVEaXJlY3RpdmUgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvY29tbW9uJztcbmltcG9ydCB7IFlVVl9JQ09OUyB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9pY29ucyc7XG5pbXBvcnQgeyBNdWx0aU9iamVjdFN1bW1hcnlDb21wb25lbnQsIE9iamVjdFN1bW1hcnlDb21wb25lbnQgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvb2JqZWN0LXN1bW1hcnknO1xuaW1wb3J0IHsgU2ltcGxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL3NpbXBsZS1zZWFyY2gnO1xuaW1wb3J0IHsgVGlsZUNvbmZpZ1RyaWdnZXJDb21wb25lbnQsIFRpbGVEYXRhLCBUaWxlTGlzdENvbXBvbmVudCwgVGlsZUxpc3RDb25maWdPcHRpb25zLCBUaWxlTGlzdEhpZ2hsaWdodCB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay90aWxlLWxpc3QnO1xuaW1wb3J0IHsgT2JqZWN0Rmxhdm9yLCBTaGVsbFNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1zaGVsbC1jb3JlJztcbmltcG9ydCB7IElDT05TLCBZdmNJY29uTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvb3ZlcmZsb3ctbWVudSc7XG5pbXBvcnQgeyBTcGxpdFZpZXdDb21wb25lbnQsIFNwbGl0Vmlld0xheW91dFNldHRpbmdzLCBZdmNTcGxpdFZpZXdNb2R1bGUgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvc3BsaXQtdmlldyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgbWFwLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYkNvbXBvbmVudCwgU29ydENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQWRkQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hZGQtYnV0dG9uL2FkZC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEZvbGRlclRyZWVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZvbGRlci10cmVlL2ZvbGRlci10cmVlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSaWJib25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3JpYmJvbi9yaWJib24uY29tcG9uZW50JztcbmltcG9ydCB7IEFQUF9EUklWRV9JQ09OUyB9IGZyb20gJy4uLy4uL2RyaXZlLmljb25zJztcbmltcG9ydCB7IEFDVElPTl9DT05URVhULCBBUFBfSUQsIEFQUF9TQ0hFTUEgfSBmcm9tICcuLi8uLi9kcml2ZS5zY2hlbWEnO1xuaW1wb3J0IHsgRFJJVkVfRVZFTlQsIERSSVZFX1FVRVJZX0ZPTERFUl9JRCwgRFJJVkVfUk9PVF9GT0xERVJfSUQsIERyaXZlRm9sZGVySWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcml2ZS9kcml2ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRHJpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJpdmUvZHJpdmUuc2VydmljZSc7XG5pbXBvcnQgeyBTVE9SRURfUVVFUllfSURfUFJFRklYIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmVkLXF1ZXJ5L3N0b3JlZC1xdWVyeS5kYXRhJztcbmltcG9ydCB7IFN0b3JlZFF1ZXJ5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmVkLXF1ZXJ5L3N0b3JlZC1xdWVyeS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3RvcmVkUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmVkLXF1ZXJ5L3N0b3JlZC1xdWVyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlYXJjaEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2VhcmNoLWZpbHRlci9zZWFyY2gtZmlsdGVyLmNvbXBvbmVudCc7XG5cbmNvbnN0IGNvbXBvbmVudHMgPSBbXG4gIFRpbGVMaXN0Q29tcG9uZW50LFxuICBCcmVhZGNydW1iQ29tcG9uZW50LFxuICBGb2xkZXJUcmVlQ29tcG9uZW50LFxuICBPYmplY3RTdW1tYXJ5Q29tcG9uZW50LFxuICBUaWxlQ29uZmlnVHJpZ2dlckNvbXBvbmVudCxcbiAgUmliYm9uQ29tcG9uZW50LFxuICBBZGRCdXR0b25Db21wb25lbnQsXG4gIFNpbXBsZVNlYXJjaENvbXBvbmVudCxcbiAgTXVsdGlPYmplY3RTdW1tYXJ5Q29tcG9uZW50LFxuICBTb3J0Q29tcG9uZW50LFxuICBTZWFyY2hGaWx0ZXJDb21wb25lbnRcbl07XG5cbmNvbnN0IG1vZHVsZSA9IFtZdmNJY29uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIFJvdXRlck1vZHVsZSwgWXZjU3BsaXRWaWV3TW9kdWxlXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneW1kLWZpbGVzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nQ2xhc3MsIEFzeW5jUGlwZSwgLi4ubW9kdWxlLCAuLi5jb21wb25lbnRzLCBGaWxlRHJvcFpvbmVEaXJlY3RpdmVdLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZmlsZXMuY29tcG9uZW50LnNjc3MnLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5zbWFsbFNjcmVlbl0nOiAnc21hbGxTY3JlZW5MYXlvdXQoKSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlc1BhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICB0aWxlTGlzdCA9IHZpZXdDaGlsZDxUaWxlTGlzdENvbXBvbmVudD4oJ3RpbGVMaXN0Jyk7XG5cbiAgI0xBWU9VVF9TRVRUSU5HU19TVE9SQUdFX0tFWSA9ICd5dXYuYXBwLmRyaXZlLmZpbGVzLmxheW91dCc7XG5cbiAgcHJpdmF0ZSBzaGVsbFNlcnZpY2UgPSBpbmplY3QoU2hlbGxTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkbXNTZXJ2aWNlID0gaW5qZWN0KERtc1NlcnZpY2UpO1xuICBwcml2YXRlIGRyaXZlID0gaW5qZWN0KERyaXZlU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzdG9yZWRRdWVyeVNlcnZpY2UgPSBpbmplY3QoU3RvcmVkUXVlcnlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjbGlwYm9hcmQgPSBpbmplY3QoQ2xpcGJvYXJkU2VydmljZSk7XG4gIHByaXZhdGUgYWN0aW9uc1NlcnZpY2UgPSBpbmplY3QoQWN0aW9uc1NlcnZpY2UpO1xuICByZWFkb25seSAjb2JqZWN0Q29uZmlnU2VydmljZSA9IGluamVjdChPYmplY3RDb25maWdTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2RldmljZSA9IGluamVjdChEZXZpY2VTZXJ2aWNlKTtcblxuICByZWFkb25seSAjZXZlbnRTZXJ2aWNlID0gaW5qZWN0KEV2ZW50U2VydmljZSk7XG5cbiAgcmVhZG9ubHkgRVJST1JfQ09ERSA9IHtcbiAgICBOT1RfRk9VTkQ6ICc0MDQnLFxuICAgIC8vIHBhdHRlcm46IHtIVFRQX1NUQVRVU19DT0RFfS17U0VSVklDRV9FUlJPUl9DT0RFfVxuICAgIElOVkFMSURfSUQ6ICc0MjItMjkxMidcbiAgfTtcblxuICAjYXBwQ2FjaGUgPSBpbmplY3QoQXBwQ2FjaGVTZXJ2aWNlKTtcblxuICBvYmplY3RDb25maWdCdWNrZXQ6IHN0cmluZyA9IEFQUF9TQ0hFTUEuaWQ7XG5cbiAgc3BsaXRWaWV3Q21wID0gdmlld0NoaWxkLnJlcXVpcmVkKFNwbGl0Vmlld0NvbXBvbmVudCk7XG4gIHNlbGVjdGVkID0gc2lnbmFsPERtc09iamVjdCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZmlsZURyb3BTdW1tYXJ5RGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5zZWxlY3RlZCgpPy5wZXJtaXNzaW9ucz8ud3JpdGVDb250ZW50KTtcbiAgZGlzYWJsZUNyZWF0ZSA9IGZhbHNlO1xuXG4gIGFjdGlvbnMgPSB0aGlzLmRyaXZlLnN0YXRlJC5hY3Rpb25zO1xuICBzZWxlY3Rpb24gPSB0aGlzLmRyaXZlLnN0YXRlJC5zZWxlY3Rpb247XG5cbiAgYnVzeSA9IHRoaXMuZHJpdmUuc3RhdGUkLmJ1c3k7XG4gIGZsYXZvckNoaXBzOiBPYmplY3RGbGF2b3JbXSA9IHRoaXMuc2hlbGxTZXJ2aWNlLmdldE9iamVjdEZsYXZvcnMoKTtcbiAgYXBwbGllZEZsYXZvcj86IE9iamVjdEZsYXZvcjtcblxuICBzZWxlY3Rpb25BY3Rpb25zID0gY29tcHV0ZWQoKCkgPT4gKHsgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvbigpLCBhY3Rpb25zOiB0aGlzLmFjdGlvbnMoKSB9KSk7XG5cbiAgZW1wdHlNb2RlID0gc2lnbmFsPERyaXZlRm9sZGVySWQgfCBudWxsPihudWxsKTtcbiAgLy8gZXJyb3IgY29kZSB3aGVuIGxvYWRpbmcgdGhlIG9iamVjdCBmYWlsZWQuIFRoaXMgd2lsbCBiZSB1c2VkXG4gIC8vIHRvIGRldGVybWluZSBhIHByb3BlciBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgZXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIGNvbmZpZ1R5cGVPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25maWdUeXBlT3B0aW9uPiA9IHtcbiAgICBmb2xkZXI6IHsgYnVja2V0OiBBUFBfSUQsIHR5cGU6IEFQUF9TQ0hFTUEudHlwZXNbJ2ZvbGRlciddIH0sXG4gICAgZmlsZTogeyBidWNrZXQ6IEFQUF9JRCwgdHlwZTogQVBQX1NDSEVNQS50eXBlc1snZmlsZSddIH1cbiAgfTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlYXJjaEZvY3VzZWQnKSBzZWFyY2hGb2N1c2VkID0gZmFsc2U7XG5cbiAgY3VycmVudEZvbGRlcklEPzogc3RyaW5nO1xuICBjdXJyZW50Rm9sZGVyPzogRG1zT2JqZWN0O1xuICBlbmFibGVEZXRhaWxzID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBlbmFibGVUcmVlID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICB0aWxlQ29uZmlnQnVja2V0TGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnRpbGUtY29uZmlnLmJ1Y2tldCcpO1xuXG4gIHNtYWxsU2NyZWVuTGF5b3V0ID0gc2lnbmFsKGZhbHNlKTtcbiAgc29ydE9wdGlvbnNBdmFpbGFibGUgPSBzaWduYWwodHJ1ZSk7XG5cbiAgaWQgPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBoaWdobGlnaHRTdHlsZXMkOiBPYnNlcnZhYmxlPFRpbGVMaXN0SGlnaGxpZ2h0W10+ID0gdGhpcy5jbGlwYm9hcmQuY2xpcGJvYXJkJChBUFBfSUQpLnBpcGUoXG4gICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgbWFwKChjKSA9PiB7XG4gICAgICByZXR1cm4gYyAmJiBjLm1vZGUgJiYgYy5vYmplY3RzPy5sZW5ndGhcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNzc1N0eWxlczogdGhpcy4jaGlnaGxpZ2h0U3R5bGVzW2M/Lm1vZGVdLFxuICAgICAgICAgICAgICBpZHM6IGMub2JqZWN0cy5tYXAoKG8pID0+IG8uaWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICA6IFtdO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgI2hpZ2hsaWdodFN0eWxlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge1xuICAgIGN1dDogeyBvcGFjaXR5OiAwLjUgfVxuICB9O1xuXG4gICNyb3V0ZUlkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJhbSA9IHRoaXMuaWQoKSB8fCB1bmRlZmluZWQ7XG5cbiAgICB1bnRyYWNrZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHBhcmFtID09PSBEUklWRV9RVUVSWV9GT0xERVJfSUQpIHtcbiAgICAgICAgdGhpcy5lbXB0eU1vZGUuc2V0KERSSVZFX1FVRVJZX0ZPTERFUl9JRCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbXB0eU1vZGUuc2V0KHBhcmFtID09PSBEUklWRV9ST09UX0ZPTERFUl9JRCA/IERSSVZFX1JPT1RfRk9MREVSX0lEIDogbnVsbCk7XG4gICAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5kaXNhYmxlQ3JlYXRlID0gZmFsc2U7XG4gICAgICB0aGlzLmN1cnJlbnRGb2xkZXJJRCA9IHBhcmFtO1xuICAgICAgdGhpcy5kcml2ZS51cGRhdGVDdXJyZW50Rm9sZGVyKHRoaXMuY3VycmVudEZvbGRlcklEKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLmN1cnJlbnRGb2xkZXIgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5jdXJyZW50Rm9sZGVySUQgPT09IERSSVZFX1JPT1RfRk9MREVSX0lEKSB0aGlzLmN1cnJlbnRGb2xkZXJJRCA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHRoaXMuY3VycmVudEZvbGRlcklEKSB7XG4gICAgICAgIHRoaXMuZG1zU2VydmljZS5nZXREbXNPYmplY3QodGhpcy5jdXJyZW50Rm9sZGVySUQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKG86IERtc09iamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9sZGVyID0gbztcbiAgICAgICAgICAgIHRoaXMuX3NldEZvbGRlclF1ZXJ5KHRoaXMuI2dldFRpdGxlKG8pKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyBmb2xkZXInLCBlKTtcbiAgICAgICAgICAgIHRoaXMuI3Byb2Nlc3NMb2FkRXJyb3IoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB0aGlzLl9zZXRGb2xkZXJRdWVyeSh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLmZvbGRlci10cmVlLm15ZHJpdmUnKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRpbGVMaXN0T3B0aW9uczogVGlsZUxpc3RDb25maWdPcHRpb25zID0ge1xuICAgIGFjdGlvbkNvbnRleHQ6IEFDVElPTl9DT05URVhULFxuICAgIGNvbmZpZ1R5cGVzOiBPYmplY3QudmFsdWVzKEFQUF9TQ0hFTUEudHlwZXMpLFxuICAgIGNvbmZpZ0ZsYXZvcnM6IFsuLi50aGlzLnNoZWxsU2VydmljZS5nZXRPYmplY3RGbGF2b3JzKCksIC4uLkFQUF9TQ0hFTUEuZmxhdm9ycy5maWx0ZXIoKGYpID0+ICFmLmFwcGxpY2FibGVUbykubWFwKChmKSA9PiAoeyAuLi5mLCBhcHA6IEFQUF9JRCB9KSldXG4gIH07XG5cbiAgcXVlcnkgPSB0aGlzLmRyaXZlLnN0YXRlJC5xdWVyeTtcbiAgcXVlcnlUaXRsZSA9IHRoaXMuZHJpdmUuc3RhdGUkLnF1ZXJ5VGl0bGU7XG5cbiAgaWNvbnMgPSB7XG4gICAgLi4uQVBQX0RSSVZFX0lDT05TLFxuICAgIHNvcnQ6IEFQUF9EUklWRV9JQ09OUy5zb3J0LFxuICAgIGJhY2s6IFlVVl9JQ09OUy5iYWNrLFxuICAgIGF0dGVudGlvbjogWVVWX0lDT05TLmF0dGVudGlvbixcbiAgICByZWZyZXNoOiBZVVZfSUNPTlMucmVmcmVzaCxcbiAgICBjbGVhcjogSUNPTlMuY2xlYXJcbiAgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRyaXZlLmV2ZW50cyQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChlKSA9PiB7XG4gICAgICAgIGlmIChlID09PSBEUklWRV9FVkVOVC5yZWZyZXNoKSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuI2RldmljZS5zY3JlZW5DaGFuZ2UkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoczogRGV2aWNlU2NyZWVuKSA9PiB7XG4gICAgICAgIHRoaXMuc21hbGxTY3JlZW5MYXlvdXQuc2V0KHMuc2l6ZSA9PT0gJ3MnICYmIHMub3JpZW50YXRpb24gPT09ICdwb3J0cmFpdCcpO1xuICAgICAgICB0aGlzLmVuYWJsZURldGFpbHMuc2V0KCF0aGlzLnNtYWxsU2NyZWVuTGF5b3V0KCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMuZHJpdmUuc3RhdGUkLnNlbGVjdGlvbilcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChzZWw6IERtc09iamVjdFtdKSA9PiB7XG4gICAgICAgICAgaWYgKHNlbD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnRpbGVMaXN0KCk/LmNsZWFyU2VsZWN0aW9uKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZC5zZXQodW5kZWZpbmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocDogUGFyYW1NYXApID0+IHtcbiAgICAgICAgdGhpcy5zb3J0T3B0aW9uc0F2YWlsYWJsZS5zZXQodHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snaWQnXSA9PT0gRFJJVkVfUVVFUllfRk9MREVSX0lEKSB7XG4gICAgICAgICAgY29uc3QgcSA9IHAuZ2V0KCdxJyk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlQ3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgcXVlcnkgaXMgYSBzdG9yZWQgcXVlcnlcbiAgICAgICAgICBpZiAocT8uc3RhcnRzV2l0aChTVE9SRURfUVVFUllfSURfUFJFRklYKSkge1xuICAgICAgICAgICAgY29uc3Qgc3E6IFN0b3JlZFF1ZXJ5IHwgdW5kZWZpbmVkID0gdGhpcy5zdG9yZWRRdWVyeVNlcnZpY2UuZ2V0U3RvcmVkUXVlcnkocSk7XG4gICAgICAgICAgICBpZiAoc3EpIHtcbiAgICAgICAgICAgICAgdGhpcy5kcml2ZS51cGRhdGVRdWVyeShzcS5xdWVyeSwgc3EubGFiZWwpO1xuICAgICAgICAgICAgICB0aGlzLnNvcnRPcHRpb25zQXZhaWxhYmxlLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHEpIHtcbiAgICAgICAgICAgIHRoaXMuc29ydE9wdGlvbnNBdmFpbGFibGUuc2V0KHRydWUpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3E6IFNlYXJjaFF1ZXJ5ID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQocSkpO1xuICAgICAgICAgICAgICBzcS5maWx0ZXJzID0gKHNxLmZpbHRlcnMgfHwgW10pLmZpbHRlcigoZikgPT4gZi5mICE9PSBCYXNlT2JqZWN0VHlwZUZpZWxkLlBBUkVOVF9JRCk7XG4gICAgICAgICAgICAgIHRoaXMuZHJpdmUudXBkYXRlUXVlcnkoc3EsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuZmlsZXMuc2VhcmNoLnJlc3VsdC50aXRsZScpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIHF1ZXJ5JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLiNldmVudFNlcnZpY2VcbiAgICAgIC5vbihZdXZFdmVudFR5cGUuRE1TX09CSkVDVF9VUERBVEVEKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICB0YXAoKGUpID0+IHtcbiAgICAgICAgICB0aGlzLnRpbGVMaXN0KCk/LnVwZGF0ZVRpbGVMaXN0KFtlLmRhdGFdKTtcbiAgICAgICAgICBlLmRhdGEuaWQgPT09IHRoaXMuc2VsZWN0ZWQoKT8uaWQgJiYgdGhpcy5zZWxlY3RlZC5zZXQoZS5kYXRhKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uRmlsdGVyUXVlcnlDaGFuZ2UocTogU2VhcmNoUXVlcnkpIHtcbiAgICB0aGlzLmRyaXZlLnVwZGF0ZVF1ZXJ5KHEsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuZmlsZXMuc2VhcmNoLnJlc3VsdC50aXRsZScpKTtcbiAgICB0aGlzLmRyaXZlLnNldFNlbGVjdGlvbihbXSk7XG4gIH1cblxuICAjcHJvY2Vzc0xvYWRFcnJvcihlOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIGlmIChgJHtlLnN0YXR1c31gICE9PSB0aGlzLkVSUk9SX0NPREUuTk9UX0ZPVU5EKSB7XG4gICAgICB0aGlzLmVycm9yLnNldChgJHtlLnN0YXR1c30tJHtlLmVycm9yPy5zZXJ2aWNlRXJyb3JDb2RlIHx8ICcnfWApO1xuICAgIH0gZWxzZSB0aGlzLmVycm9yLnNldCh0aGlzLkVSUk9SX0NPREUuTk9UX0ZPVU5EKTtcbiAgfVxuXG4gICNnZXRUaXRsZShvOiBEbXNPYmplY3QpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNmZ1R5cGU6IENvbmZpZ1R5cGVPcHRpb24gPSBvLmlzRm9sZGVyID8gdGhpcy5jb25maWdUeXBlT3B0aW9uc1snZm9sZGVyJ10gOiB0aGlzLmNvbmZpZ1R5cGVPcHRpb25zWydmaWxlJ107XG4gICAgY29uc3Qgb2M6IFJlc29sdmVkT2JqZWN0Q29uZmlnID0gdGhpcy4jb2JqZWN0Q29uZmlnU2VydmljZS5nZXRSZXNvbHZlZE9iamVjdENvbmZpZyhvLmRhdGEsIGNmZ1R5cGUudHlwZSwgY2ZnVHlwZS5idWNrZXQsIHRydWUpO1xuICAgIHJldHVybiBvYy50aXRsZS52YWx1ZTtcbiAgfVxuXG4gIG9uRGVsZXRlKCkge1xuICAgIGNvbnN0IGRlbGV0ZUFjdGlvbiA9IHRoaXMuYWN0aW9ucygpLmZpbmQoKGEpID0+IGEuaWQgPT09IEJBU0VfQUNUSU9OLmRlbGV0ZSk7XG4gICAgaWYgKGRlbGV0ZUFjdGlvbikgZGVsZXRlQWN0aW9uLnJ1bih0aGlzLmRyaXZlLnN0YXRlJC5zZWxlY3Rpb24oKSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRGb2xkZXJRdWVyeShxdWVyeVRpdGxlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5kcml2ZS51cGRhdGVRdWVyeShcbiAgICAgIHtcbiAgICAgICAgZmlsdGVyczogW3sgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5QQVJFTlRfSUQsIG86IE9wZXJhdG9yLkVRVUFMLCB2MTogdGhpcy5jdXJyZW50Rm9sZGVySUQgfHwgbnVsbCB9XVxuICAgICAgfSxcbiAgICAgIHF1ZXJ5VGl0bGVcbiAgICApO1xuICB9XG5cbiAgb25Db250ZXh0bWVudSh7IGV2ZW50IH06IHsgZXZlbnQ6IE1vdXNlRXZlbnQgfCBQb2ludGVyRXZlbnQgfSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5hY3Rpb25zU2VydmljZS5vcGVuQ29udGV4dE1lbnUodGhpcy5hY3Rpb25zLCAoYTogQWN0aW9uKSA9PiBhLnJ1bih0aGlzLnNlbGVjdGlvbigpKSwgeyB4OiBldmVudC54LCB5OiBldmVudC55IH0pO1xuICB9XG5cbiAgb25GaWxlRHJvcChmaWxlczogRmlsZVtdKSB7XG4gICAgdGhpcy5kcml2ZS5zZXRCdXN5KHRydWUpO1xuICAgIHRoaXMuZHJpdmUuY2hlY2tOYW1lc0FuZFVwbG9hZChmaWxlcykuc3Vic2NyaWJlKHsgY29tcGxldGU6ICgpID0+IHRoaXMuZHJpdmUuc2V0QnVzeShmYWxzZSkgfSk7XG4gIH1cblxuICBvbkZpbGVVcGRhdGVEcm9wKGZpbGU6IEZpbGVbXSkge1xuICAgIGNvbnN0IGRtc09iamVjdCA9IHRoaXMuc2VsZWN0ZWQoKTtcbiAgICBpZiAoZG1zT2JqZWN0KSB7XG4gICAgICB0aGlzLmRyaXZlLnNldEJ1c3kodHJ1ZSk7XG4gICAgICB0aGlzLmRyaXZlXG4gICAgICAgIC51cGxvYWRDb250ZW50KGRtc09iamVjdC5pZCwgZmlsZVswXSlcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5kcml2ZS5zZXRCdXN5KGZhbHNlKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBpdGVtRm9jdXNlZCh0aWxlOiBUaWxlRGF0YSkge1xuICAgIC8vIGNvbnNvbGUubG9nKHRpbGUpO1xuICB9XG5cbiAgaXRlbUNsaWNrZWQodGlsZTogVGlsZURhdGEpIHtcbiAgICBpZiAodGhpcy5zbWFsbFNjcmVlbkxheW91dCgpKSB0aGlzLml0ZW1Eb3VibGVDbGlja2VkKHRpbGUpO1xuICB9XG5cbiAgb25Db3B5KHRpbGVzOiBUaWxlRGF0YVtdKSB7XG4gICAgdGhpcy5jbGlwYm9hcmQuYWRkT2JqZWN0cyhcbiAgICAgIHRpbGVzLm1hcCgodCkgPT4gdC5kbXNPYmplY3QpLFxuICAgICAgJ2NvcHknLFxuICAgICAgQVBQX0lEXG4gICAgKTtcbiAgfVxuXG4gIG9uQ3V0KHRpbGVzOiBUaWxlRGF0YVtdKSB7XG4gICAgdGhpcy5jbGlwYm9hcmQuYWRkT2JqZWN0cyhcbiAgICAgIHRpbGVzLm1hcCgodCkgPT4gdC5kbXNPYmplY3QpLFxuICAgICAgJ2N1dCcsXG4gICAgICBBUFBfSURcbiAgICApO1xuICB9XG5cbiAgb25RdWVyeVN1Ym1pdChxOiBTZWFyY2hRdWVyeSkge1xuICAgIC8vIGluIG9yZGVyIHRvIGtlZXAgdGhlIHF1ZXJ5IGluIHRoZSB1cmwgYXMgc2hvcnQgYXNcbiAgICAvLyBwb3NzaWJsZSB3ZSdsbCBnZXQgcmlkIG9mIHRoZSBmaWVsZHMgYmVjYXVzZSB0aGV5IGNvdWxkIGJlXG4gICAgLy8gcmUtYXBwbGllZCBsYXRlciBvblxuICAgIHEuZmllbGRzID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsICdxdWVyeSddLCB7XG4gICAgICBxdWVyeVBhcmFtczogeyBxOiBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocSkpIH0sXG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlXG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3Rpb25DaGFuZ2VkKHRpbGVzOiBUaWxlRGF0YVtdKSB7XG4gICAgaWYgKHRpbGVzLmxlbmd0aCA9PT0gMSkgdGhpcy5sb2FkRGV0YWlscyh0aWxlc1swXS5pZCk7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkLnNldCh1bmRlZmluZWQpO1xuICAgICAgaWYgKHRpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmRyaXZlLnNldFNlbGVjdGlvbihbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRyaXZlLnNldEJ1c3kodHJ1ZSk7XG4gICAgICAgIHRoaXMuZG1zU2VydmljZS5nZXREbXNPYmplY3RzKHRpbGVzLm1hcCgoaSkgPT4gaS5pZCkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKG86IERtc09iamVjdFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRyaXZlLnNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5kcml2ZS5zZXRTZWxlY3Rpb24obyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpdGVtRG91YmxlQ2xpY2tlZCh0aWxlOiBUaWxlRGF0YSkge1xuICAgIGlmICh0aWxlLmluc3RhbmNlRGF0YSkge1xuICAgICAgdGhpcy5kcml2ZS5zZXRCdXN5KHRydWUpO1xuICAgICAgY29uc3QgbmF2ID0gKHRpbGUuaW5zdGFuY2VEYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuQkFTRV9UWVBFX0lEXSBhcyBzdHJpbmcpID09PSBTeXN0ZW1UeXBlLkZPTERFUiA/IFsnLi4nXSA6IFsnLi4vLi4nLCAnb2JqZWN0J107XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbLi4ubmF2LCB0aWxlLmluc3RhbmNlRGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLk9CSkVDVF9JRF1dLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSkudGhlbigoKSA9PiB0aGlzLmRyaXZlLnNldEJ1c3koZmFsc2UpKTtcbiAgICB9XG4gIH1cblxuICBsb2FkRGV0YWlscyhpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zaGVsbFNlcnZpY2UuYWRkQnVzeSgpO1xuICAgIC8vIGxvYWQgdGhlIGRtcyBvYmplY3RcbiAgICB0aGlzLmRtc1NlcnZpY2UuZ2V0RG1zT2JqZWN0KGlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKG86IERtc09iamVjdCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNldChvKTtcbiAgICAgICAgdGhpcy5zaGVsbFNlcnZpY2UucmVtb3ZlQnVzeSgpO1xuICAgICAgICB0aGlzLmRyaXZlLnNldFNlbGVjdGlvbihbb10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5kcml2ZS5zZXRTZWxlY3Rpb24oW10pO1xuICB9XG5cbiAgb3BlblBhcmVudCgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Rm9sZGVyKSB7XG4gICAgICB0aGlzLmRyaXZlLnNldEJ1c3kodHJ1ZSk7XG4gICAgICB0aGlzLnJvdXRlclxuICAgICAgICAubmF2aWdhdGUoWycuLicsIHRoaXMuY3VycmVudEZvbGRlci5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuUEFSRU5UX0lEXSB8fCBEUklWRV9ST09UX0ZPTERFUl9JRF0sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5kcml2ZS5zZXRCdXN5KGZhbHNlKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QnVzeShidXN5OiBib29sZWFuKSB7XG4gICAgdGhpcy5kcml2ZS5zZXRCdXN5KGJ1c3kpO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnRpbGVMaXN0KCk/LnJlZnJlc2goKTtcbiAgICB0aGlzLmRyaXZlLnNldFNlbGVjdGlvbihbXSk7XG4gIH1cblxuICBvbkxheW91dFNldHRpbmdzQ2hhbmdlKGU6IGFueSkge1xuICAgIHRoaXMuI2FwcENhY2hlLnNldEl0ZW0odGhpcy4jTEFZT1VUX1NFVFRJTkdTX1NUT1JBR0VfS0VZLCBlKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gICNhcHBseUxheW91dFNldHRpbmdzKHNldHRpbmdzOiBTcGxpdFZpZXdMYXlvdXRTZXR0aW5ncykge1xuICAgIHRoaXMuc3BsaXRWaWV3Q21wKCkuYXBwbHlMYXlvdXRTZXR0aW5ncyhzZXR0aW5ncyk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jYXBwQ2FjaGUuZ2V0SXRlbSh0aGlzLiNMQVlPVVRfU0VUVElOR1NfU1RPUkFHRV9LRVkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAobHM6IFNwbGl0Vmlld0xheW91dFNldHRpbmdzKSA9PiB7XG4gICAgICAgIGlmIChscykge1xuICAgICAgICAgIHRoaXMuZW5hYmxlRGV0YWlscy5zZXQobHMuYXJlYXNbMl0/LnZpc2libGUpO1xuICAgICAgICAgIHRoaXMuZW5hYmxlVHJlZS5zZXQobHMuYXJlYXNbMF0/LnZpc2libGUpO1xuICAgICAgICAgIHRoaXMuI2FwcGx5TGF5b3V0U2V0dGluZ3MobHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsaXBib2FyZC5jbGVhcihBUFBfSUQpO1xuICB9XG59XG4iLCI8aGVhZGVyPlxuICA8IS0tIG5hdmlnYXRpb24gYmFyIC0tPlxuICA8bmF2IFthdHRyLmFyaWEtbGFiZWxdPVwiJ3l1di5hcHAuZHJpdmUuZmlsZXMubmF2aWFndGlvbi5hcmlhLmxhYmVsJyB8IHRyYW5zbGF0ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJuYXZcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJiYWNrXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Rm9sZGVyXCIgdGl0bGU9XCJ7eyAneXV2LmFwcC5kcml2ZS5maWxlcy5uYXYuYmFjay50b29sdGlwJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJvcGVuUGFyZW50KClcIj5cbiAgICAgICAgPHl2Yy1pY29uIFtzdmddPVwiaWNvbnMuYmFja1wiPjwveXZjLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJyZWZyZXNoXCIgdGl0bGU9XCJ7eyAneXV2LmFwcC5kcml2ZS5maWxlcy5uYXYucmVmcmVzaC50b29sdGlwJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJyZWZyZXNoKClcIj5cbiAgICAgICAgPHl2Yy1pY29uIFtzdmddPVwiaWNvbnMucmVmcmVzaFwiPjwveXZjLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoIXF1ZXJ5KCk/LnRlcm0pIHtcbiAgICAgIDx5bWQtYnJlYWRjcnVtYj48L3ltZC1icmVhZGNydW1iPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBjbGFzcz1cImJyZWFkY3J1bWJcIj48L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxuICAgICAgPHl1di1zaW1wbGUtc2VhcmNoIFtxdWVyeV09XCJxdWVyeSgpXCIgKHF1ZXJ5U3VibWl0KT1cIm9uUXVlcnlTdWJtaXQoJGV2ZW50KVwiPjwveXV2LXNpbXBsZS1zZWFyY2g+XG4gICAgICA8IS0tIFRPRE86IGVuYWJsZSBhZ2FpbiBvbmNlIGRyaXZlIHNlYXJjaCBuZWVkcyB0byBiZSBhIGxpdHRsZSBiaXQgbW9yZSBzb3BoaXN0aWNhdGVkIC0tPlxuICAgICAgPCEtLSA8eW1kLWRyaXZlLXNlYXJjaCAoZm9jdXNlZCk9XCJzZWFyY2hGb2N1c2VkID0gJGV2ZW50XCI+PC95bWQtZHJpdmUtc2VhcmNoPiAtLT5cbiAgICA8L2Rpdj5cbiAgPC9uYXY+XG5cbiAgPCEtLSByaWJib24gd2l0aCBhY3Rpb25zIGFuZCBvcHRpb25zIC0tPlxuICA8eW1kLXJpYmJvbiBbb2JqZWN0c109XCJzZWxlY3Rpb24oKVwiIFtidXN5XT1cImJ1c3koKVwiIFtlbmFibGVDbGlwYm9hcmRdPVwidHJ1ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjcHJpbWFyeUFjdGlvbnM+XG4gICAgICA8eW1kLWFkZC1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVDcmVhdGVcIj48L3ltZC1hZGQtYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI3NlY29uZGFyeUFjdGlvbnM+XG4gICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICBAaWYgKCFzbWFsbFNjcmVlbkxheW91dCgpKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtdHJlZSB0b2dnbGVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBlbmFibGVkOiBlbmFibGVUcmVlKCkgfVwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICd5dXYuYXBwLmRyaXZlLmZpbGVzLnRvZ2dsZXRyZWUudG9vbHRpcCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImVuYWJsZVRyZWUuc2V0KCFlbmFibGVUcmVlKCkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8eXZjLWljb24gW3N2Z109XCJpY29ucy50b2dnbGVMZWZ0XCI+PC95dmMtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1kZXRhaWxzIHRvZ2dsZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGVuYWJsZWQ6IGVuYWJsZURldGFpbHMoKSB9XCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ3l1di5hcHAuZHJpdmUuZmlsZXMudG9nZ2xlZGV0YWlscy50b29sdGlwJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZW5hYmxlRGV0YWlscy5zZXQoIWVuYWJsZURldGFpbHMoKSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx5dmMtaWNvbiBbc3ZnXT1cImljb25zLnRvZ2dsZVJpZ2h0XCI+PC95dmMtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICA8eXV2LXRpbGUtY29uZmlnLXRyaWdnZXJcbiAgICAgICAgICBbaWNvbl09XCJpY29ucy5zZXR0aW5nc1wiXG4gICAgICAgICAgW2J1Y2tldF09XCJvYmplY3RDb25maWdCdWNrZXRcIlxuICAgICAgICAgIFtidWNrZXRMYWJlbF09XCJ0aWxlQ29uZmlnQnVja2V0TGFiZWxcIlxuICAgICAgICAgIFtvcHRpb25zXT1cInRpbGVMaXN0T3B0aW9uc1wiXG4gICAgICAgID48L3l1di10aWxlLWNvbmZpZy10cmlnZ2VyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC95bWQtcmliYm9uPlxuPC9oZWFkZXI+XG5cbjx5dmMtc3BsaXQtdmlldyBbZ3V0dGVyU2l6ZV09XCIxXCIgKGxheW91dFNldHRpbmdzQ2hhbmdlKT1cIm9uTGF5b3V0U2V0dGluZ3NDaGFuZ2UoJGV2ZW50KVwiPlxuICA8IS0tIGZvbGRlciB0cmVlIC0tPlxuICA8bmctdGVtcGxhdGUgeXZjU3BsaXRBcmVhIFtzaXplXT1cIjIwXCIgW3Zpc2libGVdPVwiZW5hYmxlVHJlZSgpICYmICFzbWFsbFNjcmVlbkxheW91dCgpXCI+XG4gICAgPHltZC1mb2xkZXItdHJlZSB5dXZGb2N1c2FibGU9XCJUcmVlXCI+PC95bWQtZm9sZGVyLXRyZWU+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPCEtLSBmaWxlcyAtLT5cbiAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI2MFwiPlxuICAgIEBsZXQgZXJyID0gZXJyb3IoKTtcbiAgICBAaWYgKGVycikge1xuICAgICAgPGRpdiBjbGFzcz1cImVycm9yXCI+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDx5dmMtaWNvbiBbc3ZnXT1cImljb25zLmF0dGVudGlvblwiPjwveXZjLWljb24+XG4gICAgICAgICAgQHN3aXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBAY2FzZSAoRVJST1JfQ09ERS5OT1RfRk9VTkQpIHtcbiAgICAgICAgICAgICAge3sgJ3l1di5hcHAuZHJpdmUuZmlsZXMuZXJyb3IubG9hZC5ub3QtZm91bmQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoRVJST1JfQ09ERS5JTlZBTElEX0lEKSB7XG4gICAgICAgICAgICAgIHt7ICd5dXYuYXBwLmRyaXZlLmZpbGVzLmVycm9yLmxvYWQuaW52YWxpZC1pZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAge3sgJ3l1di5hcHAuZHJpdmUuZmlsZXMuZXJyb3IubG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBjbGFzcz1cImZpbGVzXCIgW3l1dkZpbGVEcm9wWm9uZV09XCJ7IGxhYmVsOiAneXV2LmFwcC5kcml2ZS5maWxlcy5kcm9wem9uZS5sYWJlbCcgfCB0cmFuc2xhdGUgfVwiIChmaWxlRHJvcCk9XCJvbkZpbGVEcm9wKCRldmVudClcIj5cbiAgICAgICAgPGhlYWRlciBjbGFzcz1cImZpbGVzLWhlYWRlclwiPlxuICAgICAgICAgIDxoMT57eyBxdWVyeVRpdGxlKCkgfX08L2gxPlxuICAgICAgICAgIEBpZiAocXVlcnkoKT8udGVybSkge1xuICAgICAgICAgICAgPHltZC1zZWFyY2gtZmlsdGVyIFtxdWVyeV09XCJxdWVyeSgpXCIgKHF1ZXJ5Q2hhbmdlKT1cIm9uRmlsdGVyUXVlcnlDaGFuZ2UoJGV2ZW50KVwiPjwveW1kLXNlYXJjaC1maWx0ZXI+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoc29ydE9wdGlvbnNBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgPHltZC1zb3J0IC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGF2b3JzXCI+XG4gICAgICAgICAgICA8IS0tIFRPRE86IGVuYWJsZSBhZ2FpbiBvbmNlIGZsYXZvcnMvYXNwZWN0cyBhcmUgc3VwcG9ydGVkIC0tPlxuICAgICAgICAgICAgPCEtLSAgQGZvciAoZiBvZiBmbGF2b3JDaGlwczsgdHJhY2sgZi5pZCkge1xuICAgICAgICAgICAgPHl1di1mbGF2b3ItY2hpcCBbbmdDbGFzc109XCJ7IGFjdGl2ZTogZi5pZCA9PT0gYXBwbGllZEZsYXZvcj8uaWQgfVwiIFtmbGF2b3JdPVwiZlwiIChjbGljayk9XCJhcHBsaWVkRmxhdm9yID0gZlwiPjwveXV2LWZsYXZvci1jaGlwPlxuICAgICAgICAgIH0tLT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgPHl1di10aWxlLWxpc3RcbiAgICAgICAgICAjdGlsZUxpc3RcbiAgICAgICAgICBjbGFzcz1cInN0YWdnZXJlZFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIneXV2LmFwcC5kcml2ZS5maWxlcy5jb250ZW50LmFyaWEubGFiZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWJ1c3ldPVwiYnVzeSgpXCJcbiAgICAgICAgICBbYXR0ci5yb2xlXT1cIidsaXN0Ym94J1wiXG4gICAgICAgICAgKGtleWRvd24uZGVsZXRlKT1cIm9uRGVsZXRlKClcIlxuICAgICAgICAgIFtidWNrZXRdPVwib2JqZWN0Q29uZmlnQnVja2V0XCJcbiAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgW3F1ZXJ5XT1cInF1ZXJ5KClcIlxuICAgICAgICAgIFtmbGF2b3JdPVwiYXBwbGllZEZsYXZvclwiXG4gICAgICAgICAgW29wdGlvbnNdPVwidGlsZUxpc3RPcHRpb25zXCJcbiAgICAgICAgICAoaXRlbURibENsaWNrKT1cIml0ZW1Eb3VibGVDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgIChpdGVtU2VsZWN0KT1cIml0ZW1DbGlja2VkKCRldmVudClcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoY29weSk9XCJvbkNvcHkoJGV2ZW50KVwiXG4gICAgICAgICAgKGN1dCk9XCJvbkN1dCgkZXZlbnQpXCJcbiAgICAgICAgICAoYnVzeSk9XCJzZXRCdXN5KCRldmVudClcIlxuICAgICAgICAgIChjdHhNZW51KT1cIm9uQ29udGV4dG1lbnUoJGV2ZW50KVwiXG4gICAgICAgICAgW2hpZ2hsaWdodHNdPVwiaGlnaGxpZ2h0U3R5bGVzJCB8IGFzeW5jXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgI2VtcHR5PlxuICAgICAgICAgICAgQGlmIChlbXB0eU1vZGUoKSA9PT0gJ3Jvb3QnKSB7XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHlcIj57eyAneXV2LmFwcC5kcml2ZS5maWxlcy5jb250ZW50LmVtcHR5LnJvb3QubGlzdCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChlbXB0eU1vZGUoKSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgICAgICAgICA8cCBjbGFzcz1cImVtcHR5XCI+e3sgJ3l1di5hcHAuZHJpdmUuZmlsZXMuY29udGVudC5lbXB0eS5xdWVyeS5saXN0JyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8cCBjbGFzcz1cImVtcHR5XCI+e3sgJ3l1di5hcHAuZHJpdmUuZmlsZXMuY29udGVudC5lbXB0eS5saXN0JyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC95dXYtdGlsZS1saXN0PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDwhLS0gZGV0YWlscyAtLT5cbiAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCIyMFwiIFt2aXNpYmxlXT1cImVuYWJsZURldGFpbHMoKVwiPlxuICAgIEBsZXQgc2VsZWN0ZWRJdGVtID0gc2VsZWN0ZWQoKTtcbiAgICBAaWYgKGVuYWJsZURldGFpbHMoKSAmJiBzZWxlY3RlZEl0ZW0pIHtcbiAgICAgIEBpZiAoc2VsZWN0ZWRJdGVtPy5pc0ZvbGRlcikge1xuICAgICAgICA8eXV2LW9iamVjdC1zdW1tYXJ5IFtjb25maWdUeXBlXT1cImNvbmZpZ1R5cGVPcHRpb25zWydmb2xkZXInXVwiIFtkbXNPYmplY3RdPVwic2VsZWN0ZWRJdGVtXCI+PC95dXYtb2JqZWN0LXN1bW1hcnk+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHl1di1vYmplY3Qtc3VtbWFyeVxuICAgICAgICAgIFtjb25maWdUeXBlXT1cImNvbmZpZ1R5cGVPcHRpb25zWydmaWxlJ11cIlxuICAgICAgICAgIFtkbXNPYmplY3RdPVwic2VsZWN0ZWRJdGVtXCJcbiAgICAgICAgICBbeXV2RmlsZURyb3Bab25lXT1cInsgbGFiZWw6ICd5dXYuYXBwLmRyaXZlLmZpbGVzLmRyb3B6b25lLmNvbnRlbnQucmVwbGFjZS5sYWJlbCcgfCB0cmFuc2xhdGUgfVwiXG4gICAgICAgICAgW2ZpbGVEcm9wRGlzYWJsZWRdPVwiZmlsZURyb3BTdW1tYXJ5RGlzYWJsZWQoKVwiXG4gICAgICAgICAgKGZpbGVEcm9wKT1cIm9uRmlsZVVwZGF0ZURyb3AoJGV2ZW50KVwiXG4gICAgICAgID48L3l1di1vYmplY3Qtc3VtbWFyeT5cbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBsZXQgc2VsID0gc2VsZWN0aW9uKCk7XG4gICAgICBAaWYgKHNlbCAmJiBzZWwubGVuZ3RoID4gMCkge1xuICAgICAgICA8eXV2LW11bHRpLW9iamVjdC1zdW1tYXJ5IFtoZWFkbGluZV09XCIneXV2LmFwcC5kcml2ZS5tdWx0aXNlbGVjdGVkLmRldGFpbHMnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBzZWxlY3Rpb24oKS5sZW5ndGggfVwiPjwveXV2LW11bHRpLW9iamVjdC1zdW1tYXJ5PlxuICAgICAgfSBAZWxzZSBpZiAodGlsZUxpc3QoKT8uaXRlbXM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICA8IS0tIFRPRE86IENIT1VMRCBIQVZFIEEgRElGRkVSRU5UIE1FU1NBR0UgRk9SIEVNUFRZIFJFU1VMVFMgRU1QVFkgRk9SIE5PVyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VcIj57eyAneXV2LmFwcC5kcml2ZS5lbXB0eS5yZXN1bHRzLmRldGFpbHMubWVzc2FnZScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPnt7ICd5dXYuYXBwLmRyaXZlLnVuc2VsZWN0ZWQuZGV0YWlscycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gIDwvbmctdGVtcGxhdGU+XG48L3l2Yy1zcGxpdC12aWV3PlxuIl19
380
+ }, template: "<header>\n <!-- navigation bar -->\n <nav [attr.aria-label]=\"'yuv.app.drive.files.naviagtion.aria.label' | translate\">\n <div class=\"nav\">\n <button class=\"back\" [disabled]=\"!currentFolder\" title=\"{{ 'yuv.app.drive.files.nav.back.tooltip' | translate }}\" (click)=\"openParent()\">\n <yvc-icon [svg]=\"icons.back\"></yvc-icon>\n </button>\n <button class=\"refresh\" title=\"{{ 'yuv.app.drive.files.nav.refresh.tooltip' | translate }}\" (click)=\"refresh()\">\n <yvc-icon [svg]=\"icons.refresh\"></yvc-icon>\n </button>\n </div>\n\n @if (!query()?.term) {\n <ymd-breadcrumb></ymd-breadcrumb>\n } @else {\n <div class=\"breadcrumb\"></div>\n }\n <div class=\"search\">\n <ymd-drive-search></ymd-drive-search>\n </div>\n </nav>\n\n <!-- ribbon with actions and options -->\n <ymd-ribbon [objects]=\"selection()\" [busy]=\"busy()\" [enableClipboard]=\"true\">\n <ng-template #primaryActions>\n <ymd-add-button [disabled]=\"disableCreate\"></ymd-add-button>\n </ng-template>\n\n <ng-template #secondaryActions>\n <div class=\"options\">\n @if (!smallScreenLayout()) {\n <button\n class=\"toggle-tree toggle\"\n [ngClass]=\"{ enabled: enableTree() }\"\n title=\"{{ 'yuv.app.drive.files.toggletree.tooltip' | translate }}\"\n (click)=\"enableTree.set(!enableTree())\"\n >\n <yvc-icon [svg]=\"icons.toggleLeft\"></yvc-icon>\n </button>\n <button\n class=\"toggle-details toggle\"\n [ngClass]=\"{ enabled: enableDetails() }\"\n title=\"{{ 'yuv.app.drive.files.toggledetails.tooltip' | translate }}\"\n (click)=\"enableDetails.set(!enableDetails())\"\n >\n <yvc-icon [svg]=\"icons.toggleRight\"></yvc-icon>\n </button>\n }\n <yuv-tile-config-trigger\n [icon]=\"icons.settings\"\n [bucket]=\"objectConfigBucket\"\n [bucketLabel]=\"tileConfigBucketLabel\"\n [options]=\"tileListOptions\"\n ></yuv-tile-config-trigger>\n </div>\n </ng-template>\n </ymd-ribbon>\n</header>\n\n<yvc-split-view [gutterSize]=\"1\" (layoutSettingsChange)=\"onLayoutSettingsChange($event)\">\n <!-- folder tree -->\n <ng-template yvcSplitArea [size]=\"20\" [visible]=\"enableTree() && !smallScreenLayout()\">\n <ymd-folder-tree yuvFocusable=\"Tree\"></ymd-folder-tree>\n </ng-template>\n\n <!-- files -->\n <ng-template yvcSplitArea [size]=\"60\">\n @let err = error();\n @if (err) {\n <div class=\"error\">\n <p>\n <yvc-icon [svg]=\"icons.attention\"></yvc-icon>\n @switch (err) {\n @case (ERROR_CODE.NOT_FOUND) {\n {{ 'yuv.app.drive.files.error.load.not-found' | translate }}\n }\n @case (ERROR_CODE.INVALID_ID) {\n {{ 'yuv.app.drive.files.error.load.invalid-id' | translate }}\n }\n @default {\n {{ 'yuv.app.drive.files.error.load' | translate }}\n }\n }\n </p>\n </div>\n } @else {\n <div class=\"files\" [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.label' | translate }\" (fileDrop)=\"onFileDrop($event)\">\n <header class=\"files-header\">\n <h1>{{ queryTitle() }}</h1>\n @if (query()?.term && !extendedQuery()) {\n <ymd-search-filter [query]=\"query()\" (queryChange)=\"onFilterQueryChange($event)\"></ymd-search-filter>\n }\n @if (sortOptionsAvailable()) {\n <ymd-sort />\n }\n <div class=\"flavors\">\n <!-- TODO: enable again once flavors/aspects are supported -->\n <!-- @for (f of flavorChips; track f.id) {\n <yuv-flavor-chip [ngClass]=\"{ active: f.id === appliedFlavor?.id }\" [flavor]=\"f\" (click)=\"appliedFlavor = f\"></yuv-flavor-chip>\n }-->\n </div>\n </header>\n\n <yuv-tile-list\n #tileList\n class=\"staggered\"\n [attr.aria-label]=\"'yuv.app.drive.files.content.aria.label' | translate\"\n [attr.aria-busy]=\"busy()\"\n [attr.role]=\"'listbox'\"\n (keydown.delete)=\"onDelete()\"\n [bucket]=\"objectConfigBucket\"\n [multiselect]=\"true\"\n [query]=\"query()\"\n [flavor]=\"appliedFlavor\"\n [options]=\"tileListOptions\"\n (itemDblClick)=\"itemDoubleClicked($event)\"\n (itemSelect)=\"itemClicked($event)\"\n (selectionChange)=\"selectionChanged($event)\"\n (copy)=\"onCopy($event)\"\n (cut)=\"onCut($event)\"\n (busy)=\"setBusy($event)\"\n (ctxMenu)=\"onContextmenu($event)\"\n [highlights]=\"highlightStyles$ | async\"\n >\n <div #empty>\n @if (emptyMode() === 'root') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.root.list' | translate }}</p>\n } @else if (emptyMode() === 'query') {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.query.list' | translate }}</p>\n } @else {\n <p class=\"empty\">{{ 'yuv.app.drive.files.content.empty.list' | translate }}</p>\n }\n </div>\n </yuv-tile-list>\n </div>\n }\n </ng-template>\n\n <!-- details -->\n <ng-template yvcSplitArea [size]=\"20\" [visible]=\"enableDetails()\">\n @let selectedItem = selected();\n @if (enableDetails() && selectedItem) {\n @if (selectedItem?.isFolder) {\n <yuv-object-summary [configType]=\"configTypeOptions['folder']\" [dmsObject]=\"selectedItem\"></yuv-object-summary>\n } @else {\n <yuv-object-summary\n [configType]=\"configTypeOptions['file']\"\n [dmsObject]=\"selectedItem\"\n [yuvFileDropZone]=\"{ label: 'yuv.app.drive.files.dropzone.content.replace.label' | translate }\"\n [fileDropDisabled]=\"fileDropSummaryDisabled()\"\n (fileDrop)=\"onFileUpdateDrop($event)\"\n ></yuv-object-summary>\n }\n } @else {\n @let sel = selection();\n @if (sel && sel.length > 0) {\n <yuv-multi-object-summary [headline]=\"'yuv.app.drive.multiselected.details' | translate: { count: selection().length }\"></yuv-multi-object-summary>\n } @else if (tileList()?.items?.length === 0) {\n <!-- TODO: CHOULD HAVE A DIFFERENT MESSAGE FOR EMPTY RESULTS EMPTY FOR NOW -->\n <div class=\"message\">{{ 'yuv.app.drive.empty.results.details.message' | translate }}</div>\n } @else {\n <div class=\"message\">{{ 'yuv.app.drive.unselected.details' | translate }}</div>\n }\n }\n </ng-template>\n</yvc-split-view>\n", styles: [":host{--files-button-padding: calc(var(--app-pane-padding) / 4);--files-button-border-radius: 2px;--files-button-gap: calc(var(--app-pane-padding) / 4);--files-icon-size: 20px;height:100%;overflow:hidden;display:flex;flex-flow:column}:host header{flex:0 0 auto}:host header>nav{background-color:var(--app-drive-header-background);border-block-end:1px solid var(--panel-divider-color);display:grid;grid-template-columns:auto 1fr 1fr auto;align-items:center;gap:calc(var(--app-pane-padding) / 2);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2)}:host header>nav .nav{grid-column:1/2;grid-row:1;display:flex;align-items:center;gap:var(--files-button-gap)}:host header>nav .nav button{padding:var(--files-button-padding);border-radius:var(--files-button-border-radius)}:host header>nav .nav button yvc-icon{--icon-size: var(--files-icon-size)}:host header>nav .breadcrumb{grid-column:2/4;grid-row:1;align-self:stretch;display:flex;align-items:center;border-radius:var(--files-button-border-radius);padding:0 .5em;border:1px solid var(--panel-divider-color)}:host header>nav .search{grid-column:-1/-2;grid-row:1;z-index:1}:host yvc-split-view{flex:1;animation:fade-in .3s ease-in-out}:host ymd-ribbon{--ribbon-button-padding: var(--files-button-padding);--ribbon-button-border-radius: var(--files-button-border-radius);--ribbon-button-gap: var(--files-button-gap);--ribbon-icon-size: var(--files-icon-size)}:host ymd-ribbon .options{grid-area:options;display:flex;gap:var(--files-button-gap);align-items:center}:host ymd-ribbon .options yuv-tile-config-trigger{--icon-size: var(--files-icon-size);--button-padding: var(--files-button-padding)}:host ymd-ribbon .options button{padding:var(--files-button-padding);border-radius:var(--files-button-border-radius)}:host ymd-ribbon .options button yvc-icon{--icon-size: var(--files-icon-size)}:host ymd-ribbon .options button.toggle.enabled{background-color:var(--item-focus-background-color)}:host main{height:100%;overflow:hidden;display:flex;flex-flow:column}:host main yvc-master-details{flex:1;overflow:hidden;box-sizing:border-box}:host .error{display:grid;justify-items:center;align-items:center;height:100%;padding:0 2rem;text-align:center;color:var(--text-color-caption)}:host .error p{max-width:31ch;line-height:1.5em;display:grid;justify-items:center}:host .error p yvc-icon{--icon-size: 48px;display:block;margin-block-end:1rem}:host .files{display:flex;flex-flow:column;overflow:hidden;height:100%}:host .files header{flex:0 0 auto;padding:var(--app-pane-padding);display:grid;grid-template-columns:2fr max-content;grid-template-rows:auto auto 1fr;gap:0;grid-auto-flow:row;grid-template-areas:\"title sort\" \"searchfilter searchfilter\" \"flavours flavours\"}:host .files header h1{grid-area:title;margin:0;padding:0;font-size:var(--font-title);font-weight:400;text-overflow:ellipsis;overflow:hidden}:host .files header .flavors{grid-area:flavors;display:flex;gap:2px;justify-content:flex-end;padding:calc(var(--app-pane-padding) / 4)}:host .files header .flavors yuv-flavor-chip{font-size:var(--font-hint);cursor:pointer;--flavor-background: var(--panel-background);--flavor-icon-size: 16px}:host .files header .flavors yuv-flavor-chip:hover{--flavor-border-color: var(--color-accent)}:host .files header ymd-sort{grid-area:sort}:host .files header ymd-search-filter{grid-area:searchfilter}:host .files yuv-tile-list{flex:1;overflow:hidden}:host .message{display:grid;justify-items:center;align-items:center;height:100%;padding:0 2rem;text-align:center;color:var(--text-color-caption)}:host .message p{max-width:31ch;line-height:1.5em}:host yvc-split-view{height:100%;box-sizing:border-box}:host ymd-folder-tree,:host yuv-object-summary{height:100%;overflow-y:auto;box-sizing:border-box}:host yuv-tile-list{--tile-border: 1px solid var(--panel-divider-color);--tile-border-width: 0 0 1px 0;--tile-padding: calc(var(--app-pane-padding) / 2);--tile-icon-size: 18px;--tile-action-icon-size: 18px;--paging-background: var(--panel-background-lightgrey)}:host p.empty{color:var(--text-color-caption)}:host .details{height:100%}:host .details yuv-object-details{height:100%}:host.smallScreen yuv-tile-list{--tile-padding: var(--app-pane-padding) !important}@keyframes fade-in{0%{opacity:0}}\n"] }]
381
+ }], ctorParameters: () => [] });
382
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHBzL2RyaXZlL3NyYy9saWIvcGFnZXMvZmlsZXMvZmlsZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHBzL2RyaXZlL3NyYy9saWIvcGFnZXMvZmlsZXMvZmlsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVyRCxPQUFPLEVBQWlCLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkksT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCxlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUdoQixhQUFhLEVBRWIsVUFBVSxFQUNWLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsUUFBUSxFQUVSLGdCQUFnQixFQUVoQixVQUFVLEVBQ1YsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixZQUFZLEVBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQVUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsTUFB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QUFvQiw2REFRb0MscUJBQXFCOzs0RkFPbEUsa0JBQWtCO2tCQVY5QixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsVUFBVSxFQUFFLHFCQUFxQixDQUFDLFFBR3hFO3dCQUNKLHFCQUFxQixFQUFFLHFCQUFxQjtxQkFDN0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1NYXAsIFJvdXRlciwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFwcENhY2hlU2VydmljZSxcbiAgQmFzZU9iamVjdFR5cGVGaWVsZCxcbiAgQ2xpcGJvYXJkU2VydmljZSxcbiAgQ29uZmlnVHlwZU9wdGlvbixcbiAgRGV2aWNlU2NyZWVuLFxuICBEZXZpY2VTZXJ2aWNlLFxuICBEbXNPYmplY3QsXG4gIERtc1NlcnZpY2UsXG4gIEV2ZW50U2VydmljZSxcbiAgT2JqZWN0Q29uZmlnU2VydmljZSxcbiAgT3BlcmF0b3IsXG4gIFJlc29sdmVkT2JqZWN0Q29uZmlnLFxuICBSZXRlbnRpb25TZXJ2aWNlLFxuICBTZWFyY2hRdWVyeSxcbiAgU3lzdGVtVHlwZSxcbiAgVHJhbnNsYXRlTW9kdWxlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBZdXZFdmVudFR5cGVcbn0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIEFjdGlvbnNTZXJ2aWNlLCBCQVNFX0FDVElPTiB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9hY3Rpb25zJztcbmltcG9ydCB7IEZpbGVEcm9wWm9uZURpcmVjdGl2ZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9jb21tb24nO1xuaW1wb3J0IHsgWVVWX0lDT05TIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2ljb25zJztcbmltcG9ydCB7IE11bHRpT2JqZWN0U3VtbWFyeUNvbXBvbmVudCwgT2JqZWN0U3VtbWFyeUNvbXBvbmVudCB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9vYmplY3Qtc3VtbWFyeSc7XG5pbXBvcnQgeyBTaW1wbGVTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvc2ltcGxlLXNlYXJjaCc7XG5pbXBvcnQgeyBUaWxlQ29uZmlnVHJpZ2dlckNvbXBvbmVudCwgVGlsZURhdGEsIFRpbGVMaXN0Q29tcG9uZW50LCBUaWxlTGlzdENvbmZpZ09wdGlvbnMsIFRpbGVMaXN0SGlnaGxpZ2h0IH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL3RpbGUtbGlzdCc7XG5pbXBvcnQgeyBPYmplY3RGbGF2b3IsIFNoZWxsU2VydmljZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LXNoZWxsLWNvcmUnO1xuaW1wb3J0IHsgSUNPTlMsIFl2Y0ljb25Nb2R1bGUgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBTcGxpdFZpZXdDb21wb25lbnQsIFNwbGl0Vmlld0xheW91dFNldHRpbmdzLCBZdmNTcGxpdFZpZXdNb2R1bGUgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvc3BsaXQtdmlldyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgbWFwLCBPYnNlcnZhYmxlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJyZWFkY3J1bWJDb21wb25lbnQsIERyaXZlU2VhcmNoQ29tcG9uZW50LCBTb3J0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBZGRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FkZC1idXR0b24vYWRkLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9sZGVyVHJlZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZm9sZGVyLXRyZWUvZm9sZGVyLXRyZWUuY29tcG9uZW50JztcbmltcG9ydCB7IFJpYmJvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmliYm9uL3JpYmJvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zZWFyY2gtZmlsdGVyL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFQUF9EUklWRV9JQ09OUyB9IGZyb20gJy4uLy4uL2RyaXZlLmljb25zJztcbmltcG9ydCB7IEFDVElPTl9DT05URVhULCBBUFBfSUQsIEFQUF9TQ0hFTUEgfSBmcm9tICcuLi8uLi9kcml2ZS5zY2hlbWEnO1xuaW1wb3J0IHsgRFJJVkVfRVZFTlQsIERSSVZFX1FVRVJZX0ZPTERFUl9JRCwgRFJJVkVfUk9PVF9GT0xERVJfSUQsIERyaXZlRm9sZGVySWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcml2ZS9kcml2ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRHJpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJpdmUvZHJpdmUuc2VydmljZSc7XG5pbXBvcnQgeyBTVE9SRURfUVVFUllfSURfUFJFRklYIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmVkLXF1ZXJ5L3N0b3JlZC1xdWVyeS5kYXRhJztcbmltcG9ydCB7IFN0b3JlZFF1ZXJ5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmVkLXF1ZXJ5L3N0b3JlZC1xdWVyeS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3RvcmVkUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmVkLXF1ZXJ5L3N0b3JlZC1xdWVyeS5zZXJ2aWNlJztcblxuY29uc3QgY29tcG9uZW50cyA9IFtcbiAgVGlsZUxpc3RDb21wb25lbnQsXG4gIEJyZWFkY3J1bWJDb21wb25lbnQsXG4gIEZvbGRlclRyZWVDb21wb25lbnQsXG4gIE9iamVjdFN1bW1hcnlDb21wb25lbnQsXG4gIFRpbGVDb25maWdUcmlnZ2VyQ29tcG9uZW50LFxuICBSaWJib25Db21wb25lbnQsXG4gIEFkZEJ1dHRvbkNvbXBvbmVudCxcbiAgU2ltcGxlU2VhcmNoQ29tcG9uZW50LFxuICBNdWx0aU9iamVjdFN1bW1hcnlDb21wb25lbnQsXG4gIFNvcnRDb21wb25lbnQsXG4gIFNlYXJjaEZpbHRlckNvbXBvbmVudCxcbiAgRHJpdmVTZWFyY2hDb21wb25lbnRcbl07XG5cbmNvbnN0IG1vZHVsZSA9IFtZdmNJY29uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIFJvdXRlck1vZHVsZSwgWXZjU3BsaXRWaWV3TW9kdWxlXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneW1kLWZpbGVzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nQ2xhc3MsIEFzeW5jUGlwZSwgLi4ubW9kdWxlLCAuLi5jb21wb25lbnRzLCBGaWxlRHJvcFpvbmVEaXJlY3RpdmVdLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZmlsZXMuY29tcG9uZW50LnNjc3MnLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5zbWFsbFNjcmVlbl0nOiAnc21hbGxTY3JlZW5MYXlvdXQoKSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlc1BhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICB0aWxlTGlzdCA9IHZpZXdDaGlsZDxUaWxlTGlzdENvbXBvbmVudD4oJ3RpbGVMaXN0Jyk7XG5cbiAgI0xBWU9VVF9TRVRUSU5HU19TVE9SQUdFX0tFWSA9ICd5dXYuYXBwLmRyaXZlLmZpbGVzLmxheW91dCc7XG5cbiAgcHJpdmF0ZSBzaGVsbFNlcnZpY2UgPSBpbmplY3QoU2hlbGxTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkbXNTZXJ2aWNlID0gaW5qZWN0KERtc1NlcnZpY2UpO1xuICBwcml2YXRlIGRyaXZlID0gaW5qZWN0KERyaXZlU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzdG9yZWRRdWVyeVNlcnZpY2UgPSBpbmplY3QoU3RvcmVkUXVlcnlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjbGlwYm9hcmQgPSBpbmplY3QoQ2xpcGJvYXJkU2VydmljZSk7XG4gIHByaXZhdGUgYWN0aW9uc1NlcnZpY2UgPSBpbmplY3QoQWN0aW9uc1NlcnZpY2UpO1xuICByZWFkb25seSAjb2JqZWN0Q29uZmlnU2VydmljZSA9IGluamVjdChPYmplY3RDb25maWdTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2RldmljZSA9IGluamVjdChEZXZpY2VTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI3JldGVudGlvbiA9IGluamVjdChSZXRlbnRpb25TZXJ2aWNlKTtcblxuICByZWFkb25seSAjZXZlbnRTZXJ2aWNlID0gaW5qZWN0KEV2ZW50U2VydmljZSk7XG5cbiAgcmVhZG9ubHkgRVJST1JfQ09ERSA9IHtcbiAgICBOT1RfRk9VTkQ6ICc0MDQnLFxuICAgIC8vIHBhdHRlcm46IHtIVFRQX1NUQVRVU19DT0RFfS17U0VSVklDRV9FUlJPUl9DT0RFfVxuICAgIElOVkFMSURfSUQ6ICc0MjItMjkxMidcbiAgfTtcblxuICAjYXBwQ2FjaGUgPSBpbmplY3QoQXBwQ2FjaGVTZXJ2aWNlKTtcblxuICBvYmplY3RDb25maWdCdWNrZXQ6IHN0cmluZyA9IEFQUF9TQ0hFTUEuaWQ7XG5cbiAgc3BsaXRWaWV3Q21wID0gdmlld0NoaWxkLnJlcXVpcmVkKFNwbGl0Vmlld0NvbXBvbmVudCk7XG4gIHNlbGVjdGVkID0gc2lnbmFsPERtc09iamVjdCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZmlsZURyb3BTdW1tYXJ5RGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZSA9IHRoaXMuc2VsZWN0ZWQoKTtcbiAgICByZXR1cm4gIWUgfHwgIWUucGVybWlzc2lvbnM/LndyaXRlQ29udGVudCB8fCB0aGlzLiNyZXRlbnRpb24uZ2V0UmV0ZW50aW9uU3RhdGUoZSkudW5kZXJSZXRlbnRpb247XG4gIH0pO1xuICBkaXNhYmxlQ3JlYXRlID0gZmFsc2U7XG5cbiAgYWN0aW9ucyA9IHRoaXMuZHJpdmUuc3RhdGUkLmFjdGlvbnM7XG4gIHNlbGVjdGlvbiA9IHRoaXMuZHJpdmUuc3RhdGUkLnNlbGVjdGlvbjtcbiAgZXh0ZW5kZWRRdWVyeSA9IHRoaXMuZHJpdmUuc3RhdGUkLmV4dGVuZGVkUXVlcnk7XG5cbiAgYnVzeSA9IHRoaXMuZHJpdmUuc3RhdGUkLmJ1c3k7XG4gIGZsYXZvckNoaXBzOiBPYmplY3RGbGF2b3JbXSA9IHRoaXMuc2hlbGxTZXJ2aWNlLmdldE9iamVjdEZsYXZvcnMoKTtcbiAgYXBwbGllZEZsYXZvcj86IE9iamVjdEZsYXZvcjtcblxuICBzZWxlY3Rpb25BY3Rpb25zID0gY29tcHV0ZWQoKCkgPT4gKHsgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvbigpLCBhY3Rpb25zOiB0aGlzLmFjdGlvbnMoKSB9KSk7XG5cbiAgZW1wdHlNb2RlID0gc2lnbmFsPERyaXZlRm9sZGVySWQgfCBudWxsPihudWxsKTtcbiAgLy8gZXJyb3IgY29kZSB3aGVuIGxvYWRpbmcgdGhlIG9iamVjdCBmYWlsZWQuIFRoaXMgd2lsbCBiZSB1c2VkXG4gIC8vIHRvIGRldGVybWluZSBhIHByb3BlciBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgZXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIGNvbmZpZ1R5cGVPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25maWdUeXBlT3B0aW9uPiA9IHtcbiAgICBmb2xkZXI6IHsgYnVja2V0OiBBUFBfSUQsIHR5cGU6IEFQUF9TQ0hFTUEudHlwZXNbJ2ZvbGRlciddIH0sXG4gICAgZmlsZTogeyBidWNrZXQ6IEFQUF9JRCwgdHlwZTogQVBQX1NDSEVNQS50eXBlc1snZmlsZSddIH1cbiAgfTtcblxuICBjdXJyZW50Rm9sZGVySUQ/OiBzdHJpbmc7XG4gIGN1cnJlbnRGb2xkZXI/OiBEbXNPYmplY3Q7XG4gIGVuYWJsZURldGFpbHMgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIGVuYWJsZVRyZWUgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHRpbGVDb25maWdCdWNrZXRMYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUudGlsZS1jb25maWcuYnVja2V0Jyk7XG5cbiAgc21hbGxTY3JlZW5MYXlvdXQgPSBzaWduYWwoZmFsc2UpO1xuICBzb3J0T3B0aW9uc0F2YWlsYWJsZSA9IHNpZ25hbCh0cnVlKTtcbiAgZXh0ZW5kZWRTZWFyY2ggPSBzaWduYWwoZmFsc2UpO1xuXG4gIGlkID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgaGlnaGxpZ2h0U3R5bGVzJDogT2JzZXJ2YWJsZTxUaWxlTGlzdEhpZ2hsaWdodFtdPiA9IHRoaXMuY2xpcGJvYXJkLmNsaXBib2FyZCQoQVBQX0lEKS5waXBlKFxuICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgIG1hcCgoYykgPT4ge1xuICAgICAgcmV0dXJuIGMgJiYgYy5tb2RlICYmIGMub2JqZWN0cz8ubGVuZ3RoXG4gICAgICAgID8gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjc3NTdHlsZXM6IHRoaXMuI2hpZ2hsaWdodFN0eWxlc1tjPy5tb2RlXSxcbiAgICAgICAgICAgICAgaWRzOiBjLm9iamVjdHMubWFwKChvKSA9PiBvLmlkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5ICNoaWdobGlnaHRTdHlsZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHtcbiAgICBjdXQ6IHsgb3BhY2l0eTogMC41IH1cbiAgfTtcblxuICAjcm91dGVJZEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLmlkKCkgfHwgdW5kZWZpbmVkO1xuXG4gICAgdW50cmFja2VkKGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChwYXJhbSA9PT0gRFJJVkVfUVVFUllfRk9MREVSX0lEKSB7XG4gICAgICAgIHRoaXMuZW1wdHlNb2RlLnNldChEUklWRV9RVUVSWV9GT0xERVJfSUQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1wdHlNb2RlLnNldChwYXJhbSA9PT0gRFJJVkVfUk9PVF9GT0xERVJfSUQgPyBEUklWRV9ST09UX0ZPTERFUl9JRCA6IG51bGwpO1xuICAgICAgdGhpcy5lcnJvci5zZXQodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuZGlzYWJsZUNyZWF0ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5jdXJyZW50Rm9sZGVySUQgPSBwYXJhbTtcbiAgICAgIHRoaXMuZHJpdmUudXBkYXRlQ3VycmVudEZvbGRlcih0aGlzLmN1cnJlbnRGb2xkZXJJRCk7XG4gICAgICB0aGlzLnNlbGVjdGVkLnNldCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5jdXJyZW50Rm9sZGVyID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHRoaXMuY3VycmVudEZvbGRlcklEID09PSBEUklWRV9ST09UX0ZPTERFUl9JRCkgdGhpcy5jdXJyZW50Rm9sZGVySUQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2xkZXJJRCkge1xuICAgICAgICB0aGlzLmRtc1NlcnZpY2UuZ2V0RG1zT2JqZWN0KHRoaXMuY3VycmVudEZvbGRlcklEKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChvOiBEbXNPYmplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZvbGRlciA9IG87XG4gICAgICAgICAgICB0aGlzLl9zZXRGb2xkZXJRdWVyeSh0aGlzLiNnZXRUaXRsZShvKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgZm9sZGVyJywgZSk7XG4gICAgICAgICAgICB0aGlzLiNwcm9jZXNzTG9hZEVycm9yKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgdGhpcy5fc2V0Rm9sZGVyUXVlcnkodGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5mb2xkZXItdHJlZS5teWRyaXZlJykpO1xuICAgIH0pO1xuICB9KTtcblxuICB0aWxlTGlzdE9wdGlvbnM6IFRpbGVMaXN0Q29uZmlnT3B0aW9ucyA9IHtcbiAgICBhY3Rpb25Db250ZXh0OiBBQ1RJT05fQ09OVEVYVCxcbiAgICBjb25maWdUeXBlczogT2JqZWN0LnZhbHVlcyhBUFBfU0NIRU1BLnR5cGVzKSxcbiAgICBjb25maWdGbGF2b3JzOiBbLi4udGhpcy5zaGVsbFNlcnZpY2UuZ2V0T2JqZWN0Rmxhdm9ycygpLCAuLi5BUFBfU0NIRU1BLmZsYXZvcnMuZmlsdGVyKChmKSA9PiAhZi5hcHBsaWNhYmxlVG8pLm1hcCgoZikgPT4gKHsgLi4uZiwgYXBwOiBBUFBfSUQgfSkpXVxuICB9O1xuXG4gIHF1ZXJ5ID0gdGhpcy5kcml2ZS5zdGF0ZSQucXVlcnk7XG4gIHF1ZXJ5VGl0bGUgPSB0aGlzLmRyaXZlLnN0YXRlJC5xdWVyeVRpdGxlO1xuXG4gIGljb25zID0ge1xuICAgIC4uLkFQUF9EUklWRV9JQ09OUyxcbiAgICBzb3J0OiBBUFBfRFJJVkVfSUNPTlMuc29ydCxcbiAgICBiYWNrOiBZVVZfSUNPTlMuYmFjayxcbiAgICBhdHRlbnRpb246IFlVVl9JQ09OUy5hdHRlbnRpb24sXG4gICAgcmVmcmVzaDogWVVWX0lDT05TLnJlZnJlc2gsXG4gICAgY2xlYXI6IElDT05TLmNsZWFyXG4gIH07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kcml2ZS5ldmVudHMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZSkgPT4ge1xuICAgICAgICBpZiAoZSA9PT0gRFJJVkVfRVZFTlQucmVmcmVzaCkge1xuICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLiNkZXZpY2Uuc2NyZWVuQ2hhbmdlJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHM6IERldmljZVNjcmVlbikgPT4ge1xuICAgICAgICB0aGlzLnNtYWxsU2NyZWVuTGF5b3V0LnNldChzLnNpemUgPT09ICdzJyAmJiBzLm9yaWVudGF0aW9uID09PSAncG9ydHJhaXQnKTtcbiAgICAgICAgdGhpcy5lbmFibGVEZXRhaWxzLnNldCghdGhpcy5zbWFsbFNjcmVlbkxheW91dCgpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmRyaXZlLnN0YXRlJC5zZWxlY3Rpb24pXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoc2VsOiBEbXNPYmplY3RbXSkgPT4ge1xuICAgICAgICAgIGlmIChzZWw/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy50aWxlTGlzdCgpPy5jbGVhclNlbGVjdGlvbih0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHA6IFBhcmFtTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuc29ydE9wdGlvbnNBdmFpbGFibGUuc2V0KHRydWUpO1xuICAgICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2lkJ10gPT09IERSSVZFX1FVRVJZX0ZPTERFUl9JRCkge1xuICAgICAgICAgIGNvbnN0IHEgPSBwLmdldCgncScpO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZUNyZWF0ZSA9IHRydWU7XG4gICAgICAgICAgaWYgKHE/LnN0YXJ0c1dpdGgoU1RPUkVEX1FVRVJZX0lEX1BSRUZJWCkpIHtcbiAgICAgICAgICAgIC8vIHN0b3JlZCBxdWVyeVxuICAgICAgICAgICAgY29uc3Qgc3E6IFN0b3JlZFF1ZXJ5IHwgdW5kZWZpbmVkID0gdGhpcy5zdG9yZWRRdWVyeVNlcnZpY2UuZ2V0U3RvcmVkUXVlcnkocSk7XG4gICAgICAgICAgICBpZiAoc3EpIHtcbiAgICAgICAgICAgICAgdGhpcy5kcml2ZS51cGRhdGVRdWVyeShzcS5xdWVyeSwgc3EubGFiZWwpO1xuICAgICAgICAgICAgICB0aGlzLnNvcnRPcHRpb25zQXZhaWxhYmxlLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHEpIHtcbiAgICAgICAgICAgIC8vIHNlYXJjaCBxdWVyeVxuICAgICAgICAgICAgdGhpcy5zb3J0T3B0aW9uc0F2YWlsYWJsZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBzcTogU2VhcmNoUXVlcnkgPSBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudChxKSk7XG4gICAgICAgICAgICAgIHNxLmZpbHRlcnMgPSAoc3EuZmlsdGVycyB8fCBbXSkuZmlsdGVyKChmKSA9PiBmLmYgIT09IEJhc2VPYmplY3RUeXBlRmllbGQuUEFSRU5UX0lEKTtcbiAgICAgICAgICAgICAgdGhpcy5kcml2ZS51cGRhdGVRdWVyeShzcSwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5maWxlcy5zZWFyY2gucmVzdWx0LnRpdGxlJyksIHAuZ2V0KCdleHQnKSA9PT0gJ3RydWUnKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIHF1ZXJ5JywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLiNldmVudFNlcnZpY2VcbiAgICAgIC5vbihZdXZFdmVudFR5cGUuRE1TX09CSkVDVF9VUERBVEVEKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICB0YXAoKGUpID0+IHtcbiAgICAgICAgICB0aGlzLnRpbGVMaXN0KCk/LnVwZGF0ZVRpbGVMaXN0KFtlLmRhdGFdKTtcbiAgICAgICAgICBlLmRhdGEuaWQgPT09IHRoaXMuc2VsZWN0ZWQoKT8uaWQgJiYgdGhpcy5zZWxlY3RlZC5zZXQoZS5kYXRhKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uRmlsdGVyUXVlcnlDaGFuZ2UocTogU2VhcmNoUXVlcnkpIHtcbiAgICB0aGlzLmRyaXZlLnVwZGF0ZVF1ZXJ5KHEsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuZmlsZXMuc2VhcmNoLnJlc3VsdC50aXRsZScpKTtcbiAgICB0aGlzLmRyaXZlLnNldFNlbGVjdGlvbihbXSk7XG4gIH1cblxuICAjcHJvY2Vzc0xvYWRFcnJvcihlOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIGlmIChgJHtlLnN0YXR1c31gICE9PSB0aGlzLkVSUk9SX0NPREUuTk9UX0ZPVU5EKSB7XG4gICAgICB0aGlzLmVycm9yLnNldChgJHtlLnN0YXR1c30tJHtlLmVycm9yPy5zZXJ2aWNlRXJyb3JDb2RlIHx8ICcnfWApO1xuICAgIH0gZWxzZSB0aGlzLmVycm9yLnNldCh0aGlzLkVSUk9SX0NPREUuTk9UX0ZPVU5EKTtcbiAgfVxuXG4gICNnZXRUaXRsZShvOiBEbXNPYmplY3QpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNmZ1R5cGU6IENvbmZpZ1R5cGVPcHRpb24gPSBvLmlzRm9sZGVyID8gdGhpcy5jb25maWdUeXBlT3B0aW9uc1snZm9sZGVyJ10gOiB0aGlzLmNvbmZpZ1R5cGVPcHRpb25zWydmaWxlJ107XG4gICAgY29uc3Qgb2M6IFJlc29sdmVkT2JqZWN0Q29uZmlnID0gdGhpcy4jb2JqZWN0Q29uZmlnU2VydmljZS5nZXRSZXNvbHZlZE9iamVjdENvbmZpZyhvLmRhdGEsIGNmZ1R5cGUudHlwZSwgY2ZnVHlwZS5idWNrZXQsIHRydWUpO1xuICAgIHJldHVybiBvYy50aXRsZS52YWx1ZTtcbiAgfVxuXG4gIG9uRGVsZXRlKCkge1xuICAgIGNvbnN0IGRlbGV0ZUFjdGlvbiA9IHRoaXMuYWN0aW9ucygpLmZpbmQoKGEpID0+IGEuaWQgPT09IEJBU0VfQUNUSU9OLmRlbGV0ZSk7XG4gICAgaWYgKGRlbGV0ZUFjdGlvbikgZGVsZXRlQWN0aW9uLnJ1bih0aGlzLmRyaXZlLnN0YXRlJC5zZWxlY3Rpb24oKSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRGb2xkZXJRdWVyeShxdWVyeVRpdGxlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5kcml2ZS51cGRhdGVRdWVyeShcbiAgICAgIHtcbiAgICAgICAgZmlsdGVyczogW3sgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5QQVJFTlRfSUQsIG86IE9wZXJhdG9yLkVRVUFMLCB2MTogdGhpcy5jdXJyZW50Rm9sZGVySUQgfHwgbnVsbCB9XVxuICAgICAgfSxcbiAgICAgIHF1ZXJ5VGl0bGVcbiAgICApO1xuICB9XG5cbiAgb25Db250ZXh0bWVudSh7IGV2ZW50IH06IHsgZXZlbnQ6IE1vdXNlRXZlbnQgfCBQb2ludGVyRXZlbnQgfSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5hY3Rpb25zU2VydmljZS5vcGVuQ29udGV4dE1lbnUodGhpcy5hY3Rpb25zLCAoYTogQWN0aW9uKSA9PiBhLnJ1bih0aGlzLnNlbGVjdGlvbigpKSwgeyB4OiBldmVudC54LCB5OiBldmVudC55IH0pO1xuICB9XG5cbiAgb25GaWxlRHJvcChmaWxlczogRmlsZVtdKSB7XG4gICAgdGhpcy5kcml2ZS5zZXRCdXN5KHRydWUpO1xuICAgIHRoaXMuZHJpdmUuY2hlY2tOYW1lc0FuZFVwbG9hZChmaWxlcykuc3Vic2NyaWJlKHsgY29tcGxldGU6ICgpID0+IHRoaXMuZHJpdmUuc2V0QnVzeShmYWxzZSkgfSk7XG4gIH1cblxuICBvbkZpbGVVcGRhdGVEcm9wKGZpbGU6IEZpbGVbXSkge1xuICAgIGNvbnN0IGRtc09iamVjdCA9IHRoaXMuc2VsZWN0ZWQoKTtcbiAgICBpZiAoZG1zT2JqZWN0KSB7XG4gICAgICB0aGlzLmRyaXZlLnNldEJ1c3kodHJ1ZSk7XG4gICAgICB0aGlzLmRyaXZlXG4gICAgICAgIC51cGxvYWRDb250ZW50KGRtc09iamVjdC5pZCwgZmlsZVswXSlcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5kcml2ZS5zZXRCdXN5KGZhbHNlKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBpdGVtRm9jdXNlZCh0aWxlOiBUaWxlRGF0YSkge1xuICAgIC8vIGNvbnNvbGUubG9nKHRpbGUpO1xuICB9XG5cbiAgaXRlbUNsaWNrZWQodGlsZTogVGlsZURhdGEpIHtcbiAgICBpZiAodGhpcy5zbWFsbFNjcmVlbkxheW91dCgpKSB0aGlzLml0ZW1Eb3VibGVDbGlja2VkKHRpbGUpO1xuICB9XG5cbiAgb25Db3B5KHRpbGVzOiBUaWxlRGF0YVtdKSB7XG4gICAgdGhpcy5jbGlwYm9hcmQuYWRkT2JqZWN0cyhcbiAgICAgIHRpbGVzLm1hcCgodCkgPT4gdC5kbXNPYmplY3QpLFxuICAgICAgJ2NvcHknLFxuICAgICAgQVBQX0lEXG4gICAgKTtcbiAgfVxuXG4gIG9uQ3V0KHRpbGVzOiBUaWxlRGF0YVtdKSB7XG4gICAgdGhpcy5jbGlwYm9hcmQuYWRkT2JqZWN0cyhcbiAgICAgIHRpbGVzLm1hcCgodCkgPT4gdC5kbXNPYmplY3QpLFxuICAgICAgJ2N1dCcsXG4gICAgICBBUFBfSURcbiAgICApO1xuICB9XG5cbiAgLy8gb25RdWVyeVN1Ym1pdChxOiBTZWFyY2hRdWVyeSkge1xuICAvLyAgIC8vIGluIG9yZGVyIHRvIGtlZXAgdGhlIHF1ZXJ5IGluIHRoZSB1cmwgYXMgc2hvcnQgYXNcbiAgLy8gICAvLyBwb3NzaWJsZSB3ZSdsbCBnZXQgcmlkIG9mIHRoZSBmaWVsZHMgYmVjYXVzZSB0aGV5IGNvdWxkIGJlXG4gIC8vICAgLy8gcmUtYXBwbGllZCBsYXRlciBvblxuICAvLyAgIHEuZmllbGRzID0gdW5kZWZpbmVkO1xuXG4gIC8vICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsICdxdWVyeSddLCB7XG4gIC8vICAgICBxdWVyeVBhcmFtczogeyBxOiBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocSkpIH0sXG4gIC8vICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlXG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBzZWxlY3Rpb25DaGFuZ2VkKHRpbGVzOiBUaWxlRGF0YVtdKSB7XG4gICAgaWYgKHRpbGVzLmxlbmd0aCA9PT0gMSkgdGhpcy5sb2FkRGV0YWlscyh0aWxlc1swXS5pZCk7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkLnNldCh1bmRlZmluZWQpO1xuICAgICAgaWYgKHRpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmRyaXZlLnNldFNlbGVjdGlvbihbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRyaXZlLnNldEJ1c3kodHJ1ZSk7XG4gICAgICAgIHRoaXMuZG1zU2VydmljZS5nZXREbXNPYmplY3RzKHRpbGVzLm1hcCgoaSkgPT4gaS5pZCkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKG86IERtc09iamVjdFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRyaXZlLnNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5kcml2ZS5zZXRTZWxlY3Rpb24obyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpdGVtRG91YmxlQ2xpY2tlZCh0aWxlOiBUaWxlRGF0YSkge1xuICAgIGlmICh0aWxlLmluc3RhbmNlRGF0YSkge1xuICAgICAgdGhpcy5kcml2ZS5zZXRCdXN5KHRydWUpO1xuICAgICAgY29uc3QgbmF2ID0gKHRpbGUuaW5zdGFuY2VEYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuQkFTRV9UWVBFX0lEXSBhcyBzdHJpbmcpID09PSBTeXN0ZW1UeXBlLkZPTERFUiA/IFsnLi4nXSA6IFsnLi4vLi4nLCAnb2JqZWN0J107XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbLi4ubmF2LCB0aWxlLmluc3RhbmNlRGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLk9CSkVDVF9JRF1dLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSkudGhlbigoKSA9PiB0aGlzLmRyaXZlLnNldEJ1c3koZmFsc2UpKTtcbiAgICB9XG4gIH1cblxuICBsb2FkRGV0YWlscyhpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zaGVsbFNlcnZpY2UuYWRkQnVzeSgpO1xuICAgIC8vIGxvYWQgdGhlIGRtcyBvYmplY3RcbiAgICB0aGlzLmRtc1NlcnZpY2UuZ2V0RG1zT2JqZWN0KGlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKG86IERtc09iamVjdCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNldChvKTtcbiAgICAgICAgdGhpcy5zaGVsbFNlcnZpY2UucmVtb3ZlQnVzeSgpO1xuICAgICAgICB0aGlzLmRyaXZlLnNldFNlbGVjdGlvbihbb10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5kcml2ZS5zZXRTZWxlY3Rpb24oW10pO1xuICB9XG5cbiAgb3BlblBhcmVudCgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Rm9sZGVyKSB7XG4gICAgICB0aGlzLmRyaXZlLnNldEJ1c3kodHJ1ZSk7XG4gICAgICB0aGlzLnJvdXRlclxuICAgICAgICAubmF2aWdhdGUoWycuLicsIHRoaXMuY3VycmVudEZvbGRlci5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuUEFSRU5UX0lEXSB8fCBEUklWRV9ST09UX0ZPTERFUl9JRF0sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5kcml2ZS5zZXRCdXN5KGZhbHNlKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QnVzeShidXN5OiBib29sZWFuKSB7XG4gICAgdGhpcy5kcml2ZS5zZXRCdXN5KGJ1c3kpO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnRpbGVMaXN0KCk/LnJlZnJlc2goKTtcbiAgICB0aGlzLmRyaXZlLnNldFNlbGVjdGlvbihbXSk7XG4gIH1cblxuICBvbkxheW91dFNldHRpbmdzQ2hhbmdlKGU6IGFueSkge1xuICAgIHRoaXMuI2FwcENhY2hlLnNldEl0ZW0odGhpcy4jTEFZT1VUX1NFVFRJTkdTX1NUT1JBR0VfS0VZLCBlKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gICNhcHBseUxheW91dFNldHRpbmdzKHNldHRpbmdzOiBTcGxpdFZpZXdMYXlvdXRTZXR0aW5ncykge1xuICAgIHRoaXMuc3BsaXRWaWV3Q21wKCkuYXBwbHlMYXlvdXRTZXR0aW5ncyhzZXR0aW5ncyk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jYXBwQ2FjaGUuZ2V0SXRlbSh0aGlzLiNMQVlPVVRfU0VUVElOR1NfU1RPUkFHRV9LRVkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAobHM6IFNwbGl0Vmlld0xheW91dFNldHRpbmdzKSA9PiB7XG4gICAgICAgIGlmIChscykge1xuICAgICAgICAgIHRoaXMuZW5hYmxlRGV0YWlscy5zZXQobHMuYXJlYXNbMl0/LnZpc2libGUpO1xuICAgICAgICAgIHRoaXMuZW5hYmxlVHJlZS5zZXQobHMuYXJlYXNbMF0/LnZpc2libGUpO1xuICAgICAgICAgIHRoaXMuI2FwcGx5TGF5b3V0U2V0dGluZ3MobHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsaXBib2FyZC5jbGVhcihBUFBfSUQpO1xuICB9XG59XG4iLCI8aGVhZGVyPlxuICA8IS0tIG5hdmlnYXRpb24gYmFyIC0tPlxuICA8bmF2IFthdHRyLmFyaWEtbGFiZWxdPVwiJ3l1di5hcHAuZHJpdmUuZmlsZXMubmF2aWFndGlvbi5hcmlhLmxhYmVsJyB8IHRyYW5zbGF0ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJuYXZcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJiYWNrXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Rm9sZGVyXCIgdGl0bGU9XCJ7eyAneXV2LmFwcC5kcml2ZS5maWxlcy5uYXYuYmFjay50b29sdGlwJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJvcGVuUGFyZW50KClcIj5cbiAgICAgICAgPHl2Yy1pY29uIFtzdmddPVwiaWNvbnMuYmFja1wiPjwveXZjLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJyZWZyZXNoXCIgdGl0bGU9XCJ7eyAneXV2LmFwcC5kcml2ZS5maWxlcy5uYXYucmVmcmVzaC50b29sdGlwJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJyZWZyZXNoKClcIj5cbiAgICAgICAgPHl2Yy1pY29uIFtzdmddPVwiaWNvbnMucmVmcmVzaFwiPjwveXZjLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoIXF1ZXJ5KCk/LnRlcm0pIHtcbiAgICAgIDx5bWQtYnJlYWRjcnVtYj48L3ltZC1icmVhZGNydW1iPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBjbGFzcz1cImJyZWFkY3J1bWJcIj48L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxuICAgICAgPHltZC1kcml2ZS1zZWFyY2g+PC95bWQtZHJpdmUtc2VhcmNoPlxuICAgIDwvZGl2PlxuICA8L25hdj5cblxuICA8IS0tIHJpYmJvbiB3aXRoIGFjdGlvbnMgYW5kIG9wdGlvbnMgLS0+XG4gIDx5bWQtcmliYm9uIFtvYmplY3RzXT1cInNlbGVjdGlvbigpXCIgW2J1c3ldPVwiYnVzeSgpXCIgW2VuYWJsZUNsaXBib2FyZF09XCJ0cnVlXCI+XG4gICAgPG5nLXRlbXBsYXRlICNwcmltYXJ5QWN0aW9ucz5cbiAgICAgIDx5bWQtYWRkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiZGlzYWJsZUNyZWF0ZVwiPjwveW1kLWFkZC1idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjc2Vjb25kYXJ5QWN0aW9ucz5cbiAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgICAgIEBpZiAoIXNtYWxsU2NyZWVuTGF5b3V0KCkpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInRvZ2dsZS10cmVlIHRvZ2dsZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGVuYWJsZWQ6IGVuYWJsZVRyZWUoKSB9XCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ3l1di5hcHAuZHJpdmUuZmlsZXMudG9nZ2xldHJlZS50b29sdGlwJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZW5hYmxlVHJlZS5zZXQoIWVuYWJsZVRyZWUoKSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx5dmMtaWNvbiBbc3ZnXT1cImljb25zLnRvZ2dsZUxlZnRcIj48L3l2Yy1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWRldGFpbHMgdG9nZ2xlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZW5hYmxlZDogZW5hYmxlRGV0YWlscygpIH1cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAneXV2LmFwcC5kcml2ZS5maWxlcy50b2dnbGVkZXRhaWxzLnRvb2x0aXAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIChjbGljayk9XCJlbmFibGVEZXRhaWxzLnNldCghZW5hYmxlRGV0YWlscygpKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHl2Yy1pY29uIFtzdmddPVwiaWNvbnMudG9nZ2xlUmlnaHRcIj48L3l2Yy1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIDx5dXYtdGlsZS1jb25maWctdHJpZ2dlclxuICAgICAgICAgIFtpY29uXT1cImljb25zLnNldHRpbmdzXCJcbiAgICAgICAgICBbYnVja2V0XT1cIm9iamVjdENvbmZpZ0J1Y2tldFwiXG4gICAgICAgICAgW2J1Y2tldExhYmVsXT1cInRpbGVDb25maWdCdWNrZXRMYWJlbFwiXG4gICAgICAgICAgW29wdGlvbnNdPVwidGlsZUxpc3RPcHRpb25zXCJcbiAgICAgICAgPjwveXV2LXRpbGUtY29uZmlnLXRyaWdnZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3ltZC1yaWJib24+XG48L2hlYWRlcj5cblxuPHl2Yy1zcGxpdC12aWV3IFtndXR0ZXJTaXplXT1cIjFcIiAobGF5b3V0U2V0dGluZ3NDaGFuZ2UpPVwib25MYXlvdXRTZXR0aW5nc0NoYW5nZSgkZXZlbnQpXCI+XG4gIDwhLS0gZm9sZGVyIHRyZWUgLS0+XG4gIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiMjBcIiBbdmlzaWJsZV09XCJlbmFibGVUcmVlKCkgJiYgIXNtYWxsU2NyZWVuTGF5b3V0KClcIj5cbiAgICA8eW1kLWZvbGRlci10cmVlIHl1dkZvY3VzYWJsZT1cIlRyZWVcIj48L3ltZC1mb2xkZXItdHJlZT5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIGZpbGVzIC0tPlxuICA8bmctdGVtcGxhdGUgeXZjU3BsaXRBcmVhIFtzaXplXT1cIjYwXCI+XG4gICAgQGxldCBlcnIgPSBlcnJvcigpO1xuICAgIEBpZiAoZXJyKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5cbiAgICAgICAgPHA+XG4gICAgICAgICAgPHl2Yy1pY29uIFtzdmddPVwiaWNvbnMuYXR0ZW50aW9uXCI+PC95dmMtaWNvbj5cbiAgICAgICAgICBAc3dpdGNoIChlcnIpIHtcbiAgICAgICAgICAgIEBjYXNlIChFUlJPUl9DT0RFLk5PVF9GT1VORCkge1xuICAgICAgICAgICAgICB7eyAneXV2LmFwcC5kcml2ZS5maWxlcy5lcnJvci5sb2FkLm5vdC1mb3VuZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlIChFUlJPUl9DT0RFLklOVkFMSURfSUQpIHtcbiAgICAgICAgICAgICAge3sgJ3l1di5hcHAuZHJpdmUuZmlsZXMuZXJyb3IubG9hZC5pbnZhbGlkLWlkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICB7eyAneXV2LmFwcC5kcml2ZS5maWxlcy5lcnJvci5sb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZXNcIiBbeXV2RmlsZURyb3Bab25lXT1cInsgbGFiZWw6ICd5dXYuYXBwLmRyaXZlLmZpbGVzLmRyb3B6b25lLmxhYmVsJyB8IHRyYW5zbGF0ZSB9XCIgKGZpbGVEcm9wKT1cIm9uRmlsZURyb3AoJGV2ZW50KVwiPlxuICAgICAgICA8aGVhZGVyIGNsYXNzPVwiZmlsZXMtaGVhZGVyXCI+XG4gICAgICAgICAgPGgxPnt7IHF1ZXJ5VGl0bGUoKSB9fTwvaDE+XG4gICAgICAgICAgQGlmIChxdWVyeSgpPy50ZXJtICYmICFleHRlbmRlZFF1ZXJ5KCkpIHtcbiAgICAgICAgICAgIDx5bWQtc2VhcmNoLWZpbHRlciBbcXVlcnldPVwicXVlcnkoKVwiIChxdWVyeUNoYW5nZSk9XCJvbkZpbHRlclF1ZXJ5Q2hhbmdlKCRldmVudClcIj48L3ltZC1zZWFyY2gtZmlsdGVyPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNvcnRPcHRpb25zQXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIDx5bWQtc29ydCAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxhdm9yc1wiPlxuICAgICAgICAgICAgPCEtLSBUT0RPOiBlbmFibGUgYWdhaW4gb25jZSBmbGF2b3JzL2FzcGVjdHMgYXJlIHN1cHBvcnRlZCAtLT5cbiAgICAgICAgICAgIDwhLS0gIEBmb3IgKGYgb2YgZmxhdm9yQ2hpcHM7IHRyYWNrIGYuaWQpIHtcbiAgICAgICAgICAgIDx5dXYtZmxhdm9yLWNoaXAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGYuaWQgPT09IGFwcGxpZWRGbGF2b3I/LmlkIH1cIiBbZmxhdm9yXT1cImZcIiAoY2xpY2spPVwiYXBwbGllZEZsYXZvciA9IGZcIj48L3l1di1mbGF2b3ItY2hpcD5cbiAgICAgICAgICB9LS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIDx5dXYtdGlsZS1saXN0XG4gICAgICAgICAgI3RpbGVMaXN0XG4gICAgICAgICAgY2xhc3M9XCJzdGFnZ2VyZWRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3l1di5hcHAuZHJpdmUuZmlsZXMuY29udGVudC5hcmlhLmxhYmVsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1idXN5XT1cImJ1c3koKVwiXG4gICAgICAgICAgW2F0dHIucm9sZV09XCInbGlzdGJveCdcIlxuICAgICAgICAgIChrZXlkb3duLmRlbGV0ZSk9XCJvbkRlbGV0ZSgpXCJcbiAgICAgICAgICBbYnVja2V0XT1cIm9iamVjdENvbmZpZ0J1Y2tldFwiXG4gICAgICAgICAgW211bHRpc2VsZWN0XT1cInRydWVcIlxuICAgICAgICAgIFtxdWVyeV09XCJxdWVyeSgpXCJcbiAgICAgICAgICBbZmxhdm9yXT1cImFwcGxpZWRGbGF2b3JcIlxuICAgICAgICAgIFtvcHRpb25zXT1cInRpbGVMaXN0T3B0aW9uc1wiXG4gICAgICAgICAgKGl0ZW1EYmxDbGljayk9XCJpdGVtRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoaXRlbVNlbGVjdCk9XCJpdGVtQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNvcHkpPVwib25Db3B5KCRldmVudClcIlxuICAgICAgICAgIChjdXQpPVwib25DdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGJ1c3kpPVwic2V0QnVzeSgkZXZlbnQpXCJcbiAgICAgICAgICAoY3R4TWVudSk9XCJvbkNvbnRleHRtZW51KCRldmVudClcIlxuICAgICAgICAgIFtoaWdobGlnaHRzXT1cImhpZ2hsaWdodFN0eWxlcyQgfCBhc3luY1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2ICNlbXB0eT5cbiAgICAgICAgICAgIEBpZiAoZW1wdHlNb2RlKCkgPT09ICdyb290Jykge1xuICAgICAgICAgICAgICA8cCBjbGFzcz1cImVtcHR5XCI+e3sgJ3l1di5hcHAuZHJpdmUuZmlsZXMuY29udGVudC5lbXB0eS5yb290Lmxpc3QnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoZW1wdHlNb2RlKCkgPT09ICdxdWVyeScpIHtcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJlbXB0eVwiPnt7ICd5dXYuYXBwLmRyaXZlLmZpbGVzLmNvbnRlbnQuZW1wdHkucXVlcnkubGlzdCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJlbXB0eVwiPnt7ICd5dXYuYXBwLmRyaXZlLmZpbGVzLmNvbnRlbnQuZW1wdHkubGlzdCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwveXV2LXRpbGUtbGlzdD5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIGRldGFpbHMgLS0+XG4gIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiMjBcIiBbdmlzaWJsZV09XCJlbmFibGVEZXRhaWxzKClcIj5cbiAgICBAbGV0IHNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkKCk7XG4gICAgQGlmIChlbmFibGVEZXRhaWxzKCkgJiYgc2VsZWN0ZWRJdGVtKSB7XG4gICAgICBAaWYgKHNlbGVjdGVkSXRlbT8uaXNGb2xkZXIpIHtcbiAgICAgICAgPHl1di1vYmplY3Qtc3VtbWFyeSBbY29uZmlnVHlwZV09XCJjb25maWdUeXBlT3B0aW9uc1snZm9sZGVyJ11cIiBbZG1zT2JqZWN0XT1cInNlbGVjdGVkSXRlbVwiPjwveXV2LW9iamVjdC1zdW1tYXJ5PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx5dXYtb2JqZWN0LXN1bW1hcnlcbiAgICAgICAgICBbY29uZmlnVHlwZV09XCJjb25maWdUeXBlT3B0aW9uc1snZmlsZSddXCJcbiAgICAgICAgICBbZG1zT2JqZWN0XT1cInNlbGVjdGVkSXRlbVwiXG4gICAgICAgICAgW3l1dkZpbGVEcm9wWm9uZV09XCJ7IGxhYmVsOiAneXV2LmFwcC5kcml2ZS5maWxlcy5kcm9wem9uZS5jb250ZW50LnJlcGxhY2UubGFiZWwnIHwgdHJhbnNsYXRlIH1cIlxuICAgICAgICAgIFtmaWxlRHJvcERpc2FibGVkXT1cImZpbGVEcm9wU3VtbWFyeURpc2FibGVkKClcIlxuICAgICAgICAgIChmaWxlRHJvcCk9XCJvbkZpbGVVcGRhdGVEcm9wKCRldmVudClcIlxuICAgICAgICA+PC95dXYtb2JqZWN0LXN1bW1hcnk+XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICBAbGV0IHNlbCA9IHNlbGVjdGlvbigpO1xuICAgICAgQGlmIChzZWwgJiYgc2VsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPHl1di1tdWx0aS1vYmplY3Qtc3VtbWFyeSBbaGVhZGxpbmVdPVwiJ3l1di5hcHAuZHJpdmUubXVsdGlzZWxlY3RlZC5kZXRhaWxzJyB8IHRyYW5zbGF0ZTogeyBjb3VudDogc2VsZWN0aW9uKCkubGVuZ3RoIH1cIj48L3l1di1tdWx0aS1vYmplY3Qtc3VtbWFyeT5cbiAgICAgIH0gQGVsc2UgaWYgKHRpbGVMaXN0KCk/Lml0ZW1zPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgPCEtLSBUT0RPOiBDSE9VTEQgSEFWRSBBIERJRkZFUkVOVCBNRVNTQUdFIEZPUiBFTVBUWSBSRVNVTFRTIEVNUFRZIEZPUiBOT1cgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+e3sgJ3l1di5hcHAuZHJpdmUuZW1wdHkucmVzdWx0cy5kZXRhaWxzLm1lc3NhZ2UnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VcIj57eyAneXV2LmFwcC5kcml2ZS51bnNlbGVjdGVkLmRldGFpbHMnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICB9XG4gICAgfVxuICA8L25nLXRlbXBsYXRlPlxuPC95dmMtc3BsaXQtdmlldz5cbiJdfQ==