@eo-sdk/client 10.4.0 → 10.5.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +2 -2
  2. package/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
  3. package/app/eo-client/dashboard/dashboard.component.d.ts.map +1 -1
  4. package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts +57 -0
  5. package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts.map +1 -0
  6. package/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.d.ts +62 -0
  7. package/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.d.ts.map +1 -0
  8. package/app/eo-client/dashboard/widgets/charts-widget/icharts.d.ts +11 -0
  9. package/app/eo-client/dashboard/widgets/charts-widget/icharts.d.ts.map +1 -0
  10. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts.map +1 -1
  11. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.d.ts +4 -2
  12. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.d.ts.map +1 -1
  13. package/app/eo-client/eo-client.module.d.ts +19 -16
  14. package/app/eo-client/eo-client.module.d.ts.map +1 -1
  15. package/app/eo-client/settings/settings.component.d.ts +2 -0
  16. package/app/eo-client/settings/settings.component.d.ts.map +1 -1
  17. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
  18. package/app/eo-framework/form-elements/codesystem/codesystem.component.d.ts +2 -1
  19. package/app/eo-framework/form-elements/codesystem/codesystem.component.d.ts.map +1 -1
  20. package/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.d.ts.map +1 -1
  21. package/app/eo-framework/prepare-details/prepare-details.component.d.ts +1 -0
  22. package/app/eo-framework/prepare-details/prepare-details.component.d.ts.map +1 -1
  23. package/app/eo-framework/tree/tree.component.d.ts +2 -1
  24. package/app/eo-framework/tree/tree.component.d.ts.map +1 -1
  25. package/app/eo-framework-core/empty-state/empty-state.interface.d.ts +3 -3
  26. package/app/eo-framework-core/empty-state/empty-state.interface.d.ts.map +1 -1
  27. package/assets/_default/i18n/de.json +19 -2
  28. package/assets/_default/i18n/en.json +18 -1
  29. package/esm2020/app/eo-client/about-state/about-state.component.mjs +3 -3
  30. package/esm2020/app/eo-client/dashboard/dashboard.component.mjs +11 -3
  31. package/esm2020/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +200 -0
  32. package/esm2020/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +187 -0
  33. package/esm2020/app/eo-client/dashboard/widgets/charts-widget/icharts.mjs +2 -0
  34. package/esm2020/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +9 -4
  35. package/esm2020/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.mjs +22 -23
  36. package/esm2020/app/eo-client/dashboard/widgets/search-widget/search-widget.component.mjs +3 -3
  37. package/esm2020/app/eo-client/eo-client.module.mjs +16 -6
  38. package/esm2020/app/eo-client/object-state/object-state/object-state.component.mjs +2 -2
  39. package/esm2020/app/eo-client/settings/settings.component.mjs +16 -4
  40. package/esm2020/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +3 -3
  41. package/esm2020/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.mjs +1 -1
  42. package/esm2020/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +1 -1
  43. package/esm2020/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +5 -4
  44. package/esm2020/app/eo-framework/form-elements/codesystem/codesystem.component.mjs +7 -4
  45. package/esm2020/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +1 -1
  46. package/esm2020/app/eo-framework/form-elements/reference/reference.component.mjs +3 -3
  47. package/esm2020/app/eo-framework/form-elements/string/string.component.mjs +3 -3
  48. package/esm2020/app/eo-framework/frame/frame.component.mjs +2 -2
  49. package/esm2020/app/eo-framework/grid/filters/codesystem-filter.component.mjs +3 -3
  50. package/esm2020/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +1 -1
  51. package/esm2020/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +1 -1
  52. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +1 -1
  53. package/esm2020/app/eo-framework/prepare-details/prepare-details.component.mjs +13 -6
  54. package/esm2020/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.mjs +3 -3
  55. package/esm2020/app/eo-framework/tree/tree.component.mjs +15 -4
  56. package/esm2020/app/eo-framework-core/empty-state/empty-state.interface.mjs +1 -1
  57. package/esm2020/projects/eo-sdk/core/lib/service/cache/app-cache.service.mjs +6 -1
  58. package/esm2020/projects/eo-sdk/core/lib/service/storage/local-storage.service.mjs +12 -1
  59. package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.mjs +1 -1
  60. package/esm2020/projects/eo-sdk/core/lib/service/user/user.service.mjs +18 -1
  61. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs +33 -0
  62. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs.map +1 -1
  63. package/fesm2015/eo-sdk-client.mjs +480 -63
  64. package/fesm2015/eo-sdk-client.mjs.map +1 -1
  65. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs +33 -0
  66. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs.map +1 -1
  67. package/fesm2020/eo-sdk-client.mjs +468 -62
  68. package/fesm2020/eo-sdk-client.mjs.map +1 -1
  69. package/package.json +3 -2
  70. package/projects/eo-sdk/core/lib/service/cache/app-cache.service.d.ts +1 -0
  71. package/projects/eo-sdk/core/lib/service/cache/app-cache.service.d.ts.map +1 -1
  72. package/projects/eo-sdk/core/lib/service/storage/local-storage.service.d.ts +3 -0
  73. package/projects/eo-sdk/core/lib/service/storage/local-storage.service.d.ts.map +1 -1
  74. package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.d.ts.map +1 -1
  75. package/projects/eo-sdk/core/lib/service/user/user.service.d.ts +11 -0
  76. package/projects/eo-sdk/core/lib/service/user/user.service.d.ts.map +1 -1
  77. package/styles.css +1 -0
  78. package/styles.scss +1 -0
@@ -28,6 +28,9 @@ let PrepareDetailsComponent = class PrepareDetailsComponent {
28
28
  set preparedItem(item) {
29
29
  const objectToStringifiedValueArray = (obj) => JSON.stringify(Object.keys(obj || {}).sort().map(key => obj[key]));
30
30
  const isProcessingAllowed = objectToStringifiedValueArray(this._preparedItem) !== objectToStringifiedValueArray(item);
31
+ if (item && item.types) {
32
+ item.types = item.types.sort(Utils.sortValues('label'));
33
+ }
31
34
  this._preparedItem = item;
32
35
  if (this.preparedItem && this.preparedItem.id && isProcessingAllowed) {
33
36
  this.process();
@@ -133,6 +136,13 @@ let PrepareDetailsComponent = class PrepareDetailsComponent {
133
136
  };
134
137
  }
135
138
  }
139
+ resetObjectType() {
140
+ this.prepareService.updateChildType('dms:sysobject', this.preparedItem.id).subscribe(updatedPrepareItem => {
141
+ this.preparedItem = updatedPrepareItem;
142
+ this.onItemChanged.emit(updatedPrepareItem);
143
+ this.initPreparePhase(this.PHASE_TYPE);
144
+ });
145
+ }
136
146
  /**
137
147
  * Commits a prepared item. This will cause the temporary prepared object to be converted to a real DMS-Object.
138
148
  * @param openLocationAfterCommit - when set to true, application will navigate to the objects location
@@ -501,23 +511,20 @@ let PrepareDetailsComponent = class PrepareDetailsComponent {
501
511
  .subscribe((res) => {
502
512
  this.loading = false;
503
513
  this.committing = false;
504
- if (res && res.types) {
505
- res.types = res.types.sort(Utils.sortValues('label'));
506
- }
507
514
  this.preparedItem = res;
508
515
  });
509
516
  }
510
517
  }
511
518
  };
512
519
  PrepareDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: PrepareDetailsComponent, deps: [{ token: i1.PrepareService }, { token: i2.Router }, { token: i3.PendingChangesService }, { token: i1.TranslateService }, { token: i1.NotificationsService }, { token: i1.SystemService }, { token: i4.SelectionService }, { token: i1.BackendService }, { token: i1.CapabilitiesService }], target: i0.ɵɵFactoryTarget.Component });
513
- PrepareDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: PrepareDetailsComponent, selector: "eo-prepare-details", inputs: { preparedItem: "preparedItem", emptyState: "emptyState", applySelection: "applySelection" }, outputs: { onItemChanged: "onItemChanged", onCommit: "onCommit", onItemRemove: "onItemRemove" }, host: { properties: { "attr.data-type": "this.dataType" } }, viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true }, { propertyName: "objectForm", first: true, predicate: ["form"], descendants: true }, { propertyName: "confirmDeleteButton", first: true, predicate: ["confirmDelete"], descendants: true }, { propertyName: "confirmContentDeleteButton", first: true, predicate: ["confirmContentDelete"], descendants: true }], ngImport: i0, template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.prepare.template.abort</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"commit()\" class=\"btn-idx-save\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <yvc-split-view *ngIf=\"preparePhase.data.previewFile; else nopreview\"\n [layoutSettingsID]=\"'prepare.details.phase.type'\">\n <ng-template yvcSplitArea [size]=\"30\">\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template yvcSplitArea [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <yvc-split-view *ngIf=\"chooseTemplate; else attach\" [layoutSettingsID]=\"'prepare.details.phase.content'\">\n <ng-template yvcSplitArea [size]=\"40\">\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"60\">\n <!-- preview of selected template -->\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"selectedTemplateFile\"></eo-media>\n </ng-template>\n </yvc-split-view>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <yvc-split-view *ngIf=\"preparedItem.contents; else justform\" [layoutSettingsID]=\"'prepare.state'\">\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n </div>\n </div>\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\" [(visible)]=\"showContentDeleteDialog\"\n [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ?\n preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\"\n class=\"button primary\" translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%}:host yvc-split-view{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content ::ng-deep yvc-split-view{width:100%;height:100%}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{position:absolute;inset:0;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:white!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i6.ObjectFormComponent, selector: "eo-object-form", inputs: ["isInnerTableForm", "formOptions"], outputs: ["statusChanged", "onFormReady"] }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i9.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "component", type: i10.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i11.OverlayComponent, selector: "eo-overlay", inputs: ["iconSrc", "badge", "iconClass", "styleClass", "active", "iconTitle"] }, { kind: "component", type: i12.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i13.EoDialogComponent, selector: "eo-dialog", inputs: ["hasPreviewFile", "title", "subtitle", "styleClass", "dirtyCheck", "minWidth", "minHeight", "height", "width", "focusOnShow", "align", "isFormTable", "showPreview", "visible"], outputs: ["onTogglePreview", "visibleChange", "hide", "show"] }, { kind: "component", type: i14.MediaComponent, selector: "eo-media", inputs: ["undockDisabled", "enableCloseBtn", "useVersion", "attachments", "searchTerm", "previewUri", "previewFile", "dmsObject"] }, { kind: "component", type: i15.GridComponent, selector: "eo-grid", inputs: ["selectFirst", "selectionLimit", "sizeToFit", "fullWidth", "showHeader", "showFooter", "loaderContent", "options", "gridOptions"], outputs: ["eoGridCountChanged", "eoGridSelectionChanged", "eoGridFocusChanged", "eoGridCellClick", "eoGridDoubleClick", "eoGridContextMenuClick", "eoGridColumnResized"] }, { kind: "component", type: i16.CustomFilterComponent, selector: "eo-custom-filter", inputs: ["overlay", "eoGrid", "activeFilter", "isFilterActive"], outputs: ["change", "active", "onResetFilters"] }, { kind: "component", type: i17.TextFilterComponent, selector: "eo-text-filter", inputs: ["title", "placeholder", "enableSave", "filterParams", "matchFields"] }, { kind: "component", type: i18.SetFilterComponent, selector: "eo-set-filter", inputs: ["title", "searchLimit", "operator", "options", "filterParams"] }, { kind: "component", type: i19.ListContainerComponent, selector: "eo-list-container", inputs: ["applySelection", "applyVersion", "loading", "tabs", "parseDmsParams"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i20.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i20.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "component", type: i21.PrepareContentExistsInfoComponent, selector: "eo-prepare-content-exists-info", inputs: ["content"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
520
+ PrepareDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: PrepareDetailsComponent, selector: "eo-prepare-details", inputs: { preparedItem: "preparedItem", emptyState: "emptyState", applySelection: "applySelection" }, outputs: { onItemChanged: "onItemChanged", onCommit: "onCommit", onItemRemove: "onItemRemove" }, host: { properties: { "attr.data-type": "this.dataType" } }, viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true }, { propertyName: "objectForm", first: true, predicate: ["form"], descendants: true }, { propertyName: "confirmDeleteButton", first: true, predicate: ["confirmDelete"], descendants: true }, { propertyName: "confirmContentDeleteButton", first: true, predicate: ["confirmContentDelete"], descendants: true }], ngImport: i0, template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.prepare.template.abort</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"resetObjectType()\" translate>eo.prepare.resetObject</button>\n <button (click)=\"commit()\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <yvc-split-view *ngIf=\"preparePhase.data.previewFile; else nopreview\"\n [layoutSettingsID]=\"'prepare.details.phase.type'\">\n <ng-template yvcSplitArea [size]=\"30\">\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template yvcSplitArea [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <yvc-split-view *ngIf=\"chooseTemplate; else attach\" [layoutSettingsID]=\"'prepare.details.phase.content'\">\n <ng-template yvcSplitArea [size]=\"40\">\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"60\">\n <!-- preview of selected template -->\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"selectedTemplateFile\"></eo-media>\n </ng-template>\n </yvc-split-view>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <yvc-split-view *ngIf=\"preparedItem.contents; else justform\" [layoutSettingsID]=\"'prepare.state'\">\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n </div>\n </div>\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\" [(visible)]=\"showContentDeleteDialog\"\n [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ?\n preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\"\n class=\"button primary\" translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%}:host yvc-split-view{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content ::ng-deep yvc-split-view{width:100%;height:100%}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{position:absolute;inset:0;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:white!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i6.ObjectFormComponent, selector: "eo-object-form", inputs: ["isInnerTableForm", "formOptions"], outputs: ["statusChanged", "onFormReady"] }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i9.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "component", type: i10.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i11.OverlayComponent, selector: "eo-overlay", inputs: ["iconSrc", "badge", "iconClass", "styleClass", "active", "iconTitle"] }, { kind: "component", type: i12.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i13.EoDialogComponent, selector: "eo-dialog", inputs: ["hasPreviewFile", "title", "subtitle", "styleClass", "dirtyCheck", "minWidth", "minHeight", "height", "width", "focusOnShow", "align", "isFormTable", "showPreview", "visible"], outputs: ["onTogglePreview", "visibleChange", "hide", "show"] }, { kind: "component", type: i14.MediaComponent, selector: "eo-media", inputs: ["undockDisabled", "enableCloseBtn", "useVersion", "attachments", "searchTerm", "previewUri", "previewFile", "dmsObject"] }, { kind: "component", type: i15.GridComponent, selector: "eo-grid", inputs: ["selectFirst", "selectionLimit", "sizeToFit", "fullWidth", "showHeader", "showFooter", "loaderContent", "options", "gridOptions"], outputs: ["eoGridCountChanged", "eoGridSelectionChanged", "eoGridFocusChanged", "eoGridCellClick", "eoGridDoubleClick", "eoGridContextMenuClick", "eoGridColumnResized"] }, { kind: "component", type: i16.CustomFilterComponent, selector: "eo-custom-filter", inputs: ["overlay", "eoGrid", "activeFilter", "isFilterActive"], outputs: ["change", "active", "onResetFilters"] }, { kind: "component", type: i17.TextFilterComponent, selector: "eo-text-filter", inputs: ["title", "placeholder", "enableSave", "filterParams", "matchFields"] }, { kind: "component", type: i18.SetFilterComponent, selector: "eo-set-filter", inputs: ["title", "searchLimit", "operator", "options", "filterParams"] }, { kind: "component", type: i19.ListContainerComponent, selector: "eo-list-container", inputs: ["applySelection", "applyVersion", "loading", "tabs", "parseDmsParams"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i20.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i20.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "component", type: i21.PrepareContentExistsInfoComponent, selector: "eo-prepare-content-exists-info", inputs: ["content"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
514
521
  PrepareDetailsComponent = __decorate([
515
522
  UntilDestroy()
516
523
  ], PrepareDetailsComponent);
517
524
  export { PrepareDetailsComponent };
518
525
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: PrepareDetailsComponent, decorators: [{
519
526
  type: Component,
520
- args: [{ selector: 'eo-prepare-details', template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.prepare.template.abort</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"commit()\" class=\"btn-idx-save\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <yvc-split-view *ngIf=\"preparePhase.data.previewFile; else nopreview\"\n [layoutSettingsID]=\"'prepare.details.phase.type'\">\n <ng-template yvcSplitArea [size]=\"30\">\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template yvcSplitArea [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <yvc-split-view *ngIf=\"chooseTemplate; else attach\" [layoutSettingsID]=\"'prepare.details.phase.content'\">\n <ng-template yvcSplitArea [size]=\"40\">\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"60\">\n <!-- preview of selected template -->\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"selectedTemplateFile\"></eo-media>\n </ng-template>\n </yvc-split-view>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <yvc-split-view *ngIf=\"preparedItem.contents; else justform\" [layoutSettingsID]=\"'prepare.state'\">\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n </div>\n </div>\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\" [(visible)]=\"showContentDeleteDialog\"\n [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ?\n preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\"\n class=\"button primary\" translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%}:host yvc-split-view{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content ::ng-deep yvc-split-view{width:100%;height:100%}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{position:absolute;inset:0;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:white!important}\n"] }]
527
+ args: [{ selector: 'eo-prepare-details', template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.prepare.template.abort</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"resetObjectType()\" translate>eo.prepare.resetObject</button>\n <button (click)=\"commit()\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <yvc-split-view *ngIf=\"preparePhase.data.previewFile; else nopreview\"\n [layoutSettingsID]=\"'prepare.details.phase.type'\">\n <ng-template yvcSplitArea [size]=\"30\">\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template yvcSplitArea [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <yvc-split-view *ngIf=\"chooseTemplate; else attach\" [layoutSettingsID]=\"'prepare.details.phase.content'\">\n <ng-template yvcSplitArea [size]=\"40\">\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"60\">\n <!-- preview of selected template -->\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"selectedTemplateFile\"></eo-media>\n </ng-template>\n </yvc-split-view>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <yvc-split-view *ngIf=\"preparedItem.contents; else justform\" [layoutSettingsID]=\"'prepare.state'\">\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n </div>\n </div>\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\" [(visible)]=\"showContentDeleteDialog\"\n [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ?\n preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.prepare.details.delete.dialog.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\"\n class=\"button primary\" translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%}:host yvc-split-view{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content ::ng-deep yvc-split-view{width:100%;height:100%}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{position:absolute;inset:0;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:white!important}\n"] }]
521
528
  }], ctorParameters: function () { return [{ type: i1.PrepareService }, { type: i2.Router }, { type: i3.PendingChangesService }, { type: i1.TranslateService }, { type: i1.NotificationsService }, { type: i1.SystemService }, { type: i4.SelectionService }, { type: i1.BackendService }, { type: i1.CapabilitiesService }]; }, propDecorators: { file: [{
522
529
  type: ViewChild,
523
530
  args: ['file']
@@ -547,4 +554,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
547
554
  type: HostBinding,
548
555
  args: ['attr.data-type']
549
556
  }] } });
550
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL3ByZXBhcmUtZGV0YWlscy9wcmVwYXJlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvcHJlcGFyZS1kZXRhaWxzL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFLTCxZQUFZLEVBS1osS0FBSyxFQUNMLFNBQVMsRUFDVixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCNUQsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBdUI7SUF5QmxDLElBQ0ksWUFBWSxDQUFDLElBQWtCO1FBQ2pDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsSCxNQUFNLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0SCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJ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LEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0gsUUFBUTtzQkFEWCxXQUFXO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29sRGVmLCBHcmlkT3B0aW9uc30gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQmFja2VuZFNlcnZpY2UsIENhcGFiaWxpdGllc1NlcnZpY2UsXG4gIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICBPYmplY3RUeXBlLFxuICBQcmVwYXJlU2VydmljZSxcbiAgUHJlcGFyZWRJdGVtLFxuICBQcmVwYXJlZEl0ZW1UZW1wbGF0ZSxcbiAgUHJlcGFyZWRJdGVtVHlwZSxcbiAgU3lzdGVtU2VydmljZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgVXRpbHMsXG4gIERtc09iamVjdFxufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHtQZW5kaW5nQ2hhbmdlc1NlcnZpY2V9IGZyb20gJy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BlbmRpbmctY2hhbmdlcy9wZW5kaW5nLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQge1NlbGVjdGlvbkNvbmZpZywgU2VsZWN0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7UHJldmlld0ZpbGV9IGZyb20gJy4uL21lZGlhL21lZGlhLmNvbXBvbmVudCc7XG5pbXBvcnQge0Zvcm1TdGF0dXNDaGFuZ2VkRXZlbnR9IGZyb20gJy4uL29iamVjdC1mb3JtL2Zvcm0tc3RhdHVzLWNoYW5nZWQtZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7T2JqZWN0Rm9ybU9wdGlvbnN9IGZyb20gJy4uL29iamVjdC1mb3JtL2luZGV4JztcbmltcG9ydCB7T2JqZWN0Rm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0uY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBQcmVwYXJlUGhhc2Uge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRhdGE6IHtcbiAgICBwcmV2aWV3SW5kZXg/OiBudW1iZXIsXG4gICAgcHJldmlld0ZpbGU/OiBQcmV2aWV3RmlsZSxcbiAgICBmaWxlPzogYm9vbGVhbixcbiAgICB3aXRob3V0RmlsZT86IGJvb2xlYW4sXG4gICAgdGVtcGxhdGVzPzogYW55W11cbiAgfTtcbn1cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tcHJlcGFyZS1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByZXBhcmVEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zO1xuXG4gIC8vIElEIHNldCBieSBwZW5kaW5nQ2hhbmdlcyBzZXJ2aWNlIHdoZW4gZWRpdGluZyBpbmRleGRhdGFcbiAgLy8gVXNlZCB0byBmaW5pc2ggdGhlIHBlbmRpbmcgdGFzayB3aGVuIGVkaXRpbmcgaXMgZG9uZVxuICBwcml2YXRlIHBlbmRpbmdUYXNrSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBzZWxlY3RlZFR5cGVPYmplY3Q7XG5cbiAgLy8gaGlkZGVuIGZpbGUgaW5wdXQgdG8gdHJpZ2dlciBmaWxlIHVwbG9hZHNcbiAgQFZpZXdDaGlsZCgnZmlsZScpIGZpbGU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm0nKSBvYmplY3RGb3JtOiBPYmplY3RGb3JtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdjb25maXJtRGVsZXRlJykgY29uZmlybURlbGV0ZUJ1dHRvbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY29uZmlybUNvbnRlbnREZWxldGUnKSBjb25maXJtQ29udGVudERlbGV0ZUJ1dHRvbjogRWxlbWVudFJlZjtcblxuICAvLyBwcmVwYXJhdGlvbiBpcyBkaXZpZGVkIGludG8gc2V2ZXJhbCBwaGFzZXNcbiAgLy8gc2VsZWN0IGFuIG9iamVjdCB0eXBlXG4gIFBIQVNFX1RZUEUgPSAndHlwZSc7XG4gIC8vIGFkZCBjb250ZW50XG4gIFBIQVNFX0NPTlRFTlQgPSAnY29udGVudCc7XG4gIC8vIHNldCBpbmRleGRhdGFcbiAgUEhBU0VfSU5ERVhEQVRBID0gJ2luZGV4ZGF0YSc7XG5cbiAgX3ByZXBhcmVkSXRlbTogUHJlcGFyZWRJdGVtO1xuICBwc2V1ZG9EbXNPYmplY3Q6IERtc09iamVjdDtcblxuICBASW5wdXQoJ3ByZXBhcmVkSXRlbScpXG4gIHNldCBwcmVwYXJlZEl0ZW0oaXRlbTogUHJlcGFyZWRJdGVtKSB7XG4gICAgY29uc3Qgb2JqZWN0VG9TdHJpbmdpZmllZFZhbHVlQXJyYXkgPSAob2JqKSA9PiBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhvYmogfHwge30pLnNvcnQoKS5tYXAoa2V5ID0+IG9ialtrZXldKSk7XG4gICAgY29uc3QgaXNQcm9jZXNzaW5nQWxsb3dlZCA9IG9iamVjdFRvU3RyaW5naWZpZWRWYWx1ZUFycmF5KHRoaXMuX3ByZXBhcmVkSXRlbSkgIT09IG9iamVjdFRvU3RyaW5naWZpZWRWYWx1ZUFycmF5KGl0ZW0pO1xuICAgIHRoaXMuX3ByZXBhcmVkSXRlbSA9IGl0ZW07XG4gICAgaWYgKHRoaXMucHJlcGFyZWRJdGVtICYmIHRoaXMucHJlcGFyZWRJdGVtLmlkICYmIGlzUHJvY2Vzc2luZ0FsbG93ZWQpIHtcbiAgICAgIHRoaXMucHJvY2VzcygpO1xuICAgICAgLy8gd2UgbmVlZCB0aGlzIGZvciB0aGUgTzM2NSBpbnRlZ3JhdGlvbiBUVUstMzU3NlxuICAgICAgdGhpcy5wc2V1ZG9EbXNPYmplY3QgPSBuZXcgRG1zT2JqZWN0KHtpZDogdGhpcy5wcmVwYXJlZEl0ZW0uaWQsIHZlcnNpb246IDB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgcHJlcGFyZWRJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9wcmVwYXJlZEl0ZW07XG4gIH1cblxuXG4gIEBJbnB1dCgpIGVtcHR5U3RhdGUgPSB7aWNvbjogJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZXJyb3Iuc3ZnJywgdGV4dDogJycsIGNsYXNzTmFtZTogJ2RldGFpbHMtZXJyb3InfTtcblxuICBwcmVwYXJlUGhhc2U6IFByZXBhcmVQaGFzZTtcbiAgc2VsZWN0ZWRUZW1wbGF0ZTogUHJlcGFyZWRJdGVtVGVtcGxhdGU7XG4gIHNlbGVjdGVkVGVtcGxhdGVGaWxlOiBQcmV2aWV3RmlsZTtcbiAgZm9ybU9wdGlvbnM6IE9iamVjdEZvcm1PcHRpb25zO1xuICBmb3JtU3RhdGU6IEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQ7XG4gIGNob29zZVRlbXBsYXRlOiBib29sZWFuO1xuICB1cGxvYWRJblByb2dyZXNzOiBib29sZWFuO1xuICBjb21taXR0aW5nOiBib29sZWFuO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIHRhZ0ZpbHRlck9wdGlvbnM6IGFueTtcbiAgX3Nob3dEZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nID0gZmFsc2U7XG4gIGRlbGV0ZWRDb250ZW50SW5kZXg6IG51bWJlcjtcblxuICAvLyB0aXRsZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGRldGFpbHMgaGVhZGVyXG4gIGhlYWRlciA9IHtcbiAgICB0aXRsZTogbnVsbCxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgbGFiZWw6IG51bGwsXG4gICAgICBsaW5rOiBudWxsXG4gICAgfSxcbiAgICBzdWJ0aXRsZTogbnVsbFxuICB9O1xuXG4gIGNvbERlZnM6IENvbERlZltdID0gW3tcbiAgICBoZWFkZXJOYW1lOiAnJyxcbiAgICBmaWVsZDogJ3RpdGxlJyxcbiAgICBjZWxsUmVuZGVyZXI6IHRoaXMuY2VsbFJlbmRlcmVyLFxuICAgIGZpbHRlcjogZmFsc2VcbiAgfV07XG5cbiAgQElucHV0KCkgYXBwbHlTZWxlY3Rpb246IFNlbGVjdGlvbkNvbmZpZztcblxuICBAT3V0cHV0KCkgb25JdGVtQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlcGFyZWRJdGVtPigpO1xuICBAT3V0cHV0KCkgb25Db21taXQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9uSXRlbVJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlcGFyZWRJdGVtPigpO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXR5cGUnKVxuICBnZXQgZGF0YVR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZWRJdGVtICYmIHRoaXMucHJlcGFyZWRJdGVtLnNlbGVjdGVkdHlwZSA/IHRoaXMucHJlcGFyZWRJdGVtLnNlbGVjdGVkdHlwZS5uYW1lIDogJ25vbmUnO1xuICB9XG5cbiAgc2V0IHNob3dEZWxldGVEaWFsb2codmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0RlbGV0ZURpYWxvZyA9IHZhbDtcblxuICAgIGlmICh0aGlzLl9zaG93RGVsZXRlRGlhbG9nKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29uZmlybURlbGV0ZUJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93RGVsZXRlRGlhbG9nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93RGVsZXRlRGlhbG9nO1xuICB9XG5cbiAgc2V0IHNob3dDb250ZW50RGVsZXRlRGlhbG9nKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nID0gdmFsO1xuXG4gICAgaWYgKHRoaXMuX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29uZmlybUNvbnRlbnREZWxldGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpLCAwKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0NvbnRlbnREZWxldGVEaWFsb2coKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dDb250ZW50RGVsZXRlRGlhbG9nO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwcmVwYXJlU2VydmljZTogUHJlcGFyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHBlbmRpbmdDaGFuZ2VzOiBQZW5kaW5nQ2hhbmdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIHNlbGVjdGlvbjogU2VsZWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGJhY2tlbmQ6IEJhY2tlbmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FwYWJpbGl0ZXM6IENhcGFiaWxpdGllc1NlcnZpY2UpIHtcbiAgfVxuXG4gIGNlbGxSZW5kZXJlcihwYXJhbXMpIHtcbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJ0ZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke3BhcmFtcy5kYXRhLnRpdGxlIHx8ICcnfSR7cGFyYW1zLmRhdGEuY29udGVudCA/ICc8c3BhbiBjbGFzcz1cInRpdGxlXCI+JyArICcgKCcgKyBwYXJhbXMuZGF0YS5jb250ZW50Lm1pbWVncm91cCArICcpJyArICc8L3NwYW4+JyA6ICcnfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj4ke3BhcmFtcy5kYXRhLmRlc2NyaXB0aW9uIHx8ICcnfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFnc1wiPlxuICAgICAgICAgICAgICAgICR7cGFyYW1zLmRhdGEudGFncy5tYXAodGFnID0+IGA8c3BhbiBjbGFzcz1cImNoaXBcIj4ke3RhZ308L3NwYW4+YCkuam9pbignJyl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRQZW5kaW5nKCkge1xuICAgIC8vIGJlY2F1c2UgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgZm9ybSBzdGF0dXMgY2hhbmdlcyxcbiAgICAvLyBwZW5kaW5nIHRhc2sgd2lsbCBvbmx5IGJlIHN0YXJ0ZWQgb25jZSB1bnRpbCBpdCB3YXMgZmluaXNoZWRcbiAgICBpZiAoIXRoaXMucGVuZGluZ0NoYW5nZXMuaGFzUGVuZGluZ1Rhc2sodGhpcy5wZW5kaW5nVGFza0lkIHx8ICcgJykpIHtcbiAgICAgIHRoaXMucGVuZGluZ1Rhc2tJZCA9IHRoaXMucGVuZGluZ0NoYW5nZXMuc3RhcnRUYXNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5pc2hQZW5kaW5nKCkge1xuICAgIHRoaXMucGVuZGluZ0NoYW5nZXMuZmluaXNoVGFzayh0aGlzLnBlbmRpbmdUYXNrSWQpO1xuICB9XG5cbiAgcHJlcGFyZUZvcm1Db250ZW50KGZvcm1EYXRhPykge1xuICAgIGNvbnN0IGRhdGEgPSBmb3JtRGF0YSB8fCB0aGlzLnNlbGVjdGVkVHlwZU9iamVjdC5kYXRhO1xuICAgIHRoaXMuZm9ybU9wdGlvbnMgPSB7XG4gICAgICBmb3JtTW9kZWw6IHRoaXMuc2VsZWN0ZWRUeXBlT2JqZWN0LmZvcm0sXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfTtcbiAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50KSB7XG4gICAgICB0aGlzLmZvcm1PcHRpb25zLmNvbnRleHQgPSB7XG4gICAgICAgIGlkOiB0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQuaWQsXG4gICAgICAgIHRpdGxlOiB0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQudGl0bGUsXG4gICAgICAgIHR5cGVOYW1lOiB0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQudHlwZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0cyBhIHByZXBhcmVkIGl0ZW0uIFRoaXMgd2lsbCBjYXVzZSB0aGUgdGVtcG9yYXJ5IHByZXBhcmVkIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8gYSByZWFsIERNUy1PYmplY3QuXG4gICAqIEBwYXJhbSBvcGVuTG9jYXRpb25BZnRlckNvbW1pdCAtIHdoZW4gc2V0IHRvIHRydWUsIGFwcGxpY2F0aW9uIHdpbGwgbmF2aWdhdGUgdG8gdGhlIG9iamVjdHMgbG9jYXRpb25cbiAgICovXG4gIGNvbW1pdChvcGVuTG9jYXRpb25BZnRlckNvbW1pdD86IGJvb2xlYW4pIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZvcm1TdGF0ZSAmJiAhdGhpcy5mb3JtU3RhdGUuaW52YWxpZCkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMub2JqZWN0Rm9ybS5nZXRGb3JtRGF0YSgpO1xuICAgICAgICB0aGlzLmNvbW1pdHRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAgICAgLmNvbW1pdFByZXBhcmVkSXRlbSh0aGlzLnByZXBhcmVkSXRlbS5pZCwgdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCkubmFtZSwgZm9ybURhdGEpXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tbWl0LmVtaXQocmVzKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgICAgICAgICAgaWYgKG9wZW5Mb2NhdGlvbkFmdGVyQ29tbWl0KSB7XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL29iamVjdCcsIHJlc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIFV0aWxzLnRocm93KGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtrZXksIGNhdXNlLCB1bmlxdWVmaWVsZHN9ID0gZXJyb3IuZXJyb3I7XG4gICAgICAgICAgICBpZiAoa2V5ICYmIGtleSA9PT0gJ0RNU19NRVRBREFUQV9VTklRVUVfVklPTEFUSU9OX0VSUk9SJykge1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby51bmlxdWUudmFsaWRhdGlvbi5lcnJvci5oaW50Jywge2ZpZWxkOiB1bmlxdWVmaWVsZHMudG9TdHJpbmcoKX0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F1c2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IobnVsbCwgY2F1c2UubWVzc2FnZXNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21taXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUZvcm1Db250ZW50KGZvcm1EYXRhKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJlcGFyZS5jcmVhdGVkLmVycm9yLnRpdGxlJyksXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLmNyZWF0ZWQuZXJyb3IubWVzc2FnZScpXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oaXRlbTogUHJlcGFyZWRJdGVtKSB7XG4gICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgdGhpcy5vbkl0ZW1SZW1vdmUuZW1pdChpdGVtKTtcbiAgICB0aGlzLl9zaG93RGVsZXRlRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICByZW1vdmVJdGVtQ29udGVudChpdGVtOiBQcmVwYXJlZEl0ZW0sIGRlbGV0ZWRDb250ZW50SW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2UuZGVsZXRlUHJlcGFyZWRJdGVtQ29udGVudChpdGVtLmlkLCBkZWxldGVkQ29udGVudEluZGV4KVxuICAgICAgLnN1YnNjcmliZSgodXBkYXRlZEl0ZW06IFByZXBhcmVkSXRlbSkgPT4ge1xuICAgICAgICB0aGlzLnByZXBhcmVkSXRlbSA9IHVwZGF0ZWRJdGVtO1xuICAgICAgICB0aGlzLnNob3dDb250ZW50RGVsZXRlRGlhbG9nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldEZpbGVOYW1lcyhpdGVtOiBQcmVwYXJlZEl0ZW0pIHtcbiAgICByZXR1cm4gKGl0ZW0uY29udGVudHMgfHwgW10pLm1hcChjID0+IGMucGF0aCkuam9pbignLCAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYSB0YXJnZXQgb2JqZWN0IHR5cGUgZm9yIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW0uXG4gICAqIEBwYXJhbSB0eXBlIC0gdGhlIG9iamVjdCB0eXBlcyBuYW1lIHRvIGJlIHNldCBhcyB0YXJnZXRcbiAgICovXG4gIHNlbGVjdE9iamVjdFR5cGUodHlwZTogUHJlcGFyZWRJdGVtVHlwZSkge1xuICAgIHRoaXMucHJlcGFyZWRJdGVtLnR5cGVzXG4gICAgICAuZm9yRWFjaCgodCkgPT4gdC5zZWxlY3RlZCA9ICh0Lm5hbWUgPT09IHR5cGUubmFtZSkpO1xuXG4gICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgLnVwZGF0ZUNoaWxkVHlwZSh0eXBlLm5hbWUsIHRoaXMucHJlcGFyZWRJdGVtLmlkKVxuICAgICAgLnN1YnNjcmliZSh1cGRhdGVkUHJlcGFyZWRJdGVtID0+IHtcbiAgICAgICAgdGhpcy5wcmVwYXJlZEl0ZW0gPSB1cGRhdGVkUHJlcGFyZWRJdGVtO1xuICAgICAgICB0aGlzLm9uSXRlbUNoYW5nZWQuZW1pdCh1cGRhdGVkUHJlcGFyZWRJdGVtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHRlbXBsYXRlIHRvIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW0uXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSAtIHRoZSB0ZW1wbGF0ZSB0byBiZSBhZGRlZFxuICAgKi9cbiAgYWRkVGVtcGxhdGUodGVtcGxhdGU6IFByZXBhcmVkSXRlbVRlbXBsYXRlKSB7XG5cbiAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAuYWRkVGVtcGxhdGUodGhpcy5wcmVwYXJlZEl0ZW0uaWQsIHRlbXBsYXRlLmlkKVxuICAgICAgLnN1YnNjcmliZSgodXBkYXRlZFByZXBhcmVkSXRlbSkgPT4ge1xuICAgICAgICB0aGlzLnByZXBhcmVkSXRlbSA9IHVwZGF0ZWRQcmVwYXJlZEl0ZW07XG4gICAgICAgIHRoaXMub25JdGVtQ2hhbmdlZC5lbWl0KHVwZGF0ZWRQcmVwYXJlZEl0ZW0pO1xuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJlcGFyZS50ZW1wbGF0ZS5lcnJvci50aXRsZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLnRlbXBsYXRlLmVycm9yLm1lc3NhZ2UnKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIHRlbXBsYXRlLiBXaWxsIHNob3cgcHJldmlldyBmb3IgdGhlIHNlbGVjdGVkIHRlbXBsYXRlLlxuICAgKiBAcGFyYW0gdGVtcGxhdGUgLSB0aGUgdGVtcGxhdGUgdG8gYmUgc2VsZWN0ZWRcbiAgICovXG4gIHNlbGVjdFRlbXBsYXRlKHRlbXBsYXRlOiBQcmVwYXJlZEl0ZW1UZW1wbGF0ZSkge1xuICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZUZpbGUgPSAhKHRlbXBsYXRlICYmIHRlbXBsYXRlLmNvbnRlbnQpID8gbnVsbCA6IHtcbiAgICAgIHVyaTogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRUZW1wbGF0ZVByZXZpZXdVcmkodGhpcy5zZWxlY3RlZFRlbXBsYXRlLmlkKSxcbiAgICAgIHVyaVBkZjogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRUZW1wbGF0ZVByZXZpZXdVcmkodGhpcy5zZWxlY3RlZFRlbXBsYXRlLmlkLCAnUERGJyksXG4gICAgICBtaW1ldHlwZTogdGVtcGxhdGUuY29udGVudC5taW1ldHlwZSxcbiAgICAgIG1pbWVncm91cDogdGVtcGxhdGUuY29udGVudC5taW1lZ3JvdXAsXG4gICAgICBzaXplOiB0ZW1wbGF0ZS5jb250ZW50LnNpemVcbiAgICB9O1xuICB9XG5cbiAgc2V0UHJldmlld1VyaShpbmRleDogbnVtYmVyKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLnByZXBhcmVQaGFzZS5kYXRhLCB0aGlzLmdldFByZXZpZXdEYXRhKGluZGV4KSk7XG4gIH1cblxuICAvLyBza2lwIGNvbnRlbnQgc2VsZWN0aW9uIGZvciB0aGUgY3VycmVudCBwcmVwYXJlZCBpdGVtXG4gIC8vIGFuZCBjb250aW51ZSBzZXR0aW5nIGluZGV4ZGF0YVxuICBub0ZpbGUoKSB7XG4gICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgfVxuXG4gIC8vIHRyaWdnZXIgZmlsZSB1cGxvYWRcbiAgdXBsb2FkKCkge1xuICAgIC8vIGFmdGVyIHRoZSB1c2VyIHNlbGVjdGVkIGEgZmlsZSBmaWxlQ2hhbmdlTGlzdGVuZXIoKSB3aWxsIGNvbnRpbnVlXG4gICAgdGhpcy5maWxlLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIC8vIG9uQ2hhbmdlIGxpc3RlbmVyIG9uIGhpZGRlbiBmaWxlIGlucHV0XG4gIGZpbGVDaGFuZ2VMaXN0ZW5lcihldmVudCkge1xuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudFswXTtcbiAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC51cGxvYWRDb250ZW50KHRoaXMucHJlcGFyZWRJdGVtLmlkLCBmaWxlKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAvLyB1cGxvYWQgc3VjY2VlZGVkIHNvIHdlIGNhbiBnbyBvbiB0byB0aGUgbmV4dCBwcmVwYXJlIHBoYXNlXG4gICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gbmV3IFByZXBhcmVkSXRlbShyZXMpO1xuICAgICAgICB0aGlzLm9uSXRlbUNoYW5nZWQuZW1pdCh0aGlzLnByZXBhcmVkSXRlbSk7XG4gICAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0lOREVYREFUQSk7XG4gICAgICAgIHRoaXMudXBsb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgfSwgVXRpbHMudGhyb3coZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IuY2F1c2UpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihudWxsLCBlcnJvci5lcnJvci5jYXVzZS5tZXNzYWdlc1swXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IuZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihudWxsLCBlcnJvci5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcih0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLmNyZWF0ZWQuZXJyb3IudGl0bGUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbW1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby51cGxvYWQuZ2xvYmFsLmVycm9yLnRpdGxlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVwbG9hZC5nbG9iYWwuZXJyb3IuZGVzY3JpcHRpb24nKVxuICAgICAgKSk7XG4gIH1cblxuICBvbkZvcm1TdGF0dXNDaGFuZ2VkKGV2dCkge1xuICAgIHRoaXMuZm9ybVN0YXRlID0gZXZ0O1xuXG4gICAgaWYgKHRoaXMuZm9ybVN0YXRlLmRpcnR5KSB7XG4gICAgICB0aGlzLnN0YXJ0UGVuZGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3MoKSB7XG4gICAgLy8gdG9kbzogcmVzZXQgc3R1ZmZcbiAgICB0aGlzLmZvcm1TdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5mb3JtT3B0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5nZXRQcmVwYXJlUGhhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHByZXBhcmUgcGhhc2UgdG8gYmUgaW5pdGlhbGl6ZWQgYmFzZWQgb24gdGhlIGNvbmRpdGlvbnNcbiAgICogb2YgdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgZ2V0UHJlcGFyZVBoYXNlKCkge1xuICAgIGlmICghdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCkpIHtcbiAgICAgIC8vIFN0ZXAgIzEgc2VsZWN0IGFuIG9iamVjdCB0eXBlIGlmIG5vdCB5ZXQgc2V0XG4gICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9UWVBFKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnByZXBhcmVkSXRlbS5oYXNDb250ZW50KCkpIHtcbiAgICAgIC8vIFN0ZXAgIzIgYWRkIGNvbnRlbnQgaWYgbm90IHlldCBjb250YWluZWRcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0NPTlRFTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwICMzIGVkaXQgaW5kZXhkYXRhIGFuZCBzYXZlXG4gICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGVtcGxhdGUoc2VsZWN0ZWRUeXBlT2JqZWN0KSB7XG4gICAgY29uc3QgdHlwZTogT2JqZWN0VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHNlbGVjdGVkVHlwZU9iamVjdC5uYW1lKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC5nZXRUZW1wbGF0ZXMoc2VsZWN0ZWRUeXBlT2JqZWN0Lm5hbWUpXG4gICAgICAuc3Vic2NyaWJlKCh0ZW1wbGF0ZXM6IFByZXBhcmVkSXRlbVRlbXBsYXRlW10pID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVJlcXVpcmVkID0gdGhpcy5wcmVwYXJlZEl0ZW0uc3RhdGUuY29udGVudHN0YXRlID09PSAnUkVRVUlSRUQnO1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgIGZpbGU6IHR5cGUubWF4RmlsZXMgPiAwLFxuICAgICAgICAgIHdpdGhvdXRGaWxlOiAhKHR5cGUubWluRmlsZXMgPiAwKSAmJiAhZmlsZVJlcXVpcmVkLFxuICAgICAgICAgIHRlbXBsYXRlczogdGVtcGxhdGVzIHx8IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgb2JqZWN0IHR5cGUgZG9lcyBub3Qgc3VwcG9ydCBmaWxlIHVwbG9hZCBvciB0ZW1wbGF0ZSBjb250ZW50c1xuICAgICAgICAvLyB3ZSBza2lwIGNvbnRlbnQgcGhhc2UgYW5kIG1vdmUgb24gdG8gaW5kZXhkYXRhIHBoYXNlXG4gICAgICAgIGlmICghZGF0YS5maWxlKSB7XG4gICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByZXBhcmVQaGFzZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuUEhBU0VfQ09OVEVOVCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuc2V0dXBUaXRsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFnRmlsdGVyT3B0aW9ucyA9IHRoaXMuY3JlYXRlVGFnRmlsdGVyT3B0aW9ucyh0ZW1wbGF0ZXMpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zID0ge1xuICAgICAgICAgIGNvbnRleHQ6IHtjb3VudDogdGhpcy5wcmVwYXJlUGhhc2UuZGF0YS50ZW1wbGF0ZXMubGVuZ3RofSxcbiAgICAgICAgICByb3dEYXRhOiB0aGlzLnByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlcy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ3RpdGxlJykpLFxuICAgICAgICAgIGNvbHVtbkRlZnM6IHRoaXMuY29sRGVmcyxcbiAgICAgICAgICByb3dIZWlnaHQ6IDgwXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBjcmVhdGVUYWdGaWx0ZXJPcHRpb25zKHRlbXBsYXRlczogUHJlcGFyZWRJdGVtVGVtcGxhdGVbXSkge1xuICAgIGxldCB0YWdGaWx0ZXJPcHRpb25zID0gW107XG4gICAgdGVtcGxhdGVzLmZvckVhY2godGVtcGxhdGUgPT4ge1xuICAgICAgdGVtcGxhdGUudGFncy5mb3JFYWNoKHRhZyA9PiB7XG4gICAgICAgIHRhZ0ZpbHRlck9wdGlvbnMucHVzaCh7bGFiZWw6IHRhZywgZmlsdGVyOiAobm9kZSkgPT4gbm9kZS5kYXRhLnRhZ3MuaW5jbHVkZXModGFnKSwgdmFsdWU6IHRydWV9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBVdGlscy51bmlxQnkodGFnRmlsdGVyT3B0aW9ucywgJ2xhYmVsJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIHNwZWNpZmljIHByZXBhcmUgcGhhc2UuXG4gICAqIEBwYXJhbSBwaGFzZSAtIHBoYXNlIHRvIGluaXQgKFBIQVNFX1RZUEUsIFBIQVNFX0NPTlRFTlQsIFBIQVNFX0lOREVYREFUQSlcbiAgICovXG4gIHByaXZhdGUgaW5pdFByZXBhcmVQaGFzZShwaGFzZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wcmVwYXJlUGhhc2UgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRUeXBlT2JqZWN0ID0gdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCk7XG5cbiAgICBzd2l0Y2ggKHBoYXNlKSB7XG4gICAgICAvLyBpbml0IHByZXBhcmUgcGhhc2UgZm9yIHNlbGVjdGluZyB0aGUgdGFyZ2V0IG9iamVjdCB0eXBlXG4gICAgICBjYXNlIHRoaXMuUEhBU0VfVFlQRToge1xuXG4gICAgICAgIHRoaXMucHJlcGFyZVBoYXNlID0ge1xuICAgICAgICAgIG5hbWU6IHRoaXMuUEhBU0VfVFlQRSxcbiAgICAgICAgICBkYXRhOiB0aGlzLmdldFByZXZpZXdEYXRhKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXR1cFRpdGxlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBpbml0IHByZXBhcmUgcGhhc2UgZm9yIHNldHRpbmcgdXAgY29udGVudFxuICAgICAgY2FzZSB0aGlzLlBIQVNFX0NPTlRFTlQ6IHtcblxuICAgICAgICB0aGlzLmNob29zZVRlbXBsYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA9IG51bGw7XG5cbiAgICAgICAgLy8gY2hlY2sgd2hldGhlciBvciBub3QgdGhlIHByZXBhcmVkSXRlbSBhbHJlYWR5IGNvbnRhaW5zIGEgZmlsZSBvciB0ZW1wbGF0ZVxuICAgICAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0uaGFzQ29udGVudCgpKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnByZXBhcmVkSXRlbS5zdGF0ZS50eXBlc2VsZWN0ZWRhbGxvd2VkKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc2VsZWN0ZWQgdHlwZSBpcyBub3QgYWxsb3dlZCwgd2UnbGwgZ28gYmFjayB0byB0aGUgdHlwZSBzZWxlY3Qgc3RhdGUgLi4uXG4gICAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9UWVBFKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gLi4uIG90aGVyd2lzZSB3ZSBnbyBvbiBzZXR0aW5nIGluZGV4ZGF0YVxuICAgICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0uc3RhdGUuY29udGVudHN0YXRlID09PSAnTk9DT05URU5UQUxMT1dFRCcpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0lOREVYREFUQSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVtcGxhdGUodGhpcy5zZWxlY3RlZFR5cGVPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIGluaXQgcHJlcGFyZSBwaGFzZSBmb3IgYWRkaW5nIGluZGV4ZGF0YVxuICAgICAgY2FzZSB0aGlzLlBIQVNFX0lOREVYREFUQToge1xuXG4gICAgICAgIHRoaXMuY2hvb3NlVGVtcGxhdGUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMucHJlcGFyZWRJdGVtLnN0YXRlLnR5cGVzZWxlY3RlZGFsbG93ZWQpIHtcbiAgICAgICAgICAvLyBpZiB0aGUgc2VsZWN0ZWQgdHlwZSBpcyBub3QgYWxsb3dlZCwgd2UnbGwgZ28gYmFjayB0byB0aGUgdHlwZSBzZWxlY3Qgc3RhdGUgLi4uXG4gICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfVFlQRSk7XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICB0aGlzLnByZXBhcmVGb3JtQ29udGVudCgpO1xuXG4gICAgICAgICAgdGhpcy5wcmVwYXJlUGhhc2UgPSB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLlBIQVNFX0lOREVYREFUQSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZ2V0UHJldmlld0RhdGEoKVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5zZXR1cFRpdGxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmV2aWV3RGF0YShpbmRleD86IG51bWJlcik6IGFueSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZWRJdGVtICYmIHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzICYmIHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSBpbmRleCB8fCAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldmlld0luZGV4OiBpbmRleCxcbiAgICAgICAgcHJldmlld0ZpbGU6IHtcbiAgICAgICAgICB1cmk6IHRoaXMucHJlcGFyZVNlcnZpY2UuZ2V0UHJldmlld1VyaSh0aGlzLnByZXBhcmVkSXRlbS5pZCwgaW5kZXgpLFxuICAgICAgICAgIHVyaVBkZjogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRQcmV2aWV3VXJpKHRoaXMucHJlcGFyZWRJdGVtLmlkLCBpbmRleCwgJ1BERicpLFxuICAgICAgICAgIG1pbWV0eXBlOiB0aGlzLnByZXBhcmVkSXRlbS5jb250ZW50c1tpbmRleF0ubWltZXR5cGUsXG4gICAgICAgICAgbWltZWdyb3VwOiB0aGlzLnByZXBhcmVkSXRlbS5jb250ZW50c1tpbmRleF0ubWltZWdyb3VwLFxuICAgICAgICAgIHBhdGg6IHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzW2luZGV4XS5wYXRoLFxuICAgICAgICAgIHNpemU6IHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzW2luZGV4XS5zaXplXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtwcmV2aWV3RmlsZTogbnVsbH07XG4gIH1cblxuICAvKipcbiAgICogU2V0dXAgdGl0bGUgZm9yIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW0gYmFzZWQgb24gdGhlXG4gICAqIGN1cnJlbnQgcHJlcGFyZSBwaGFzZS4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBwcmVwYXJlIHBoYXNlIGlzIGlkZW50aWZpZWQuXG4gICAqL1xuICBwcml2YXRlIHNldHVwVGl0bGUoKSB7XG5cbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoW1xuICAgICAgJ2VvLnByZXBhcmUubG9jYXRpb24udGl0bGUuc3lzcm9vdCcsXG4gICAgICAnZW8ucHJlcGFyZS5sb2NhdGlvbi50aXRsZS5wcmVmaXgnLFxuICAgICAgJ2VvLnByZXBhcmUuZGV0YWlscy50eXBlLnRpdGxlJyxcbiAgICAgICdlby5wcmVwYXJlLmRldGFpbHMudHlwZS5zdWJ0aXRsZScsXG4gICAgICAnZW8ucHJlcGFyZS5kZXRhaWxzLmNvbnRlbnQuc3VidGl0bGUnLFxuICAgICAgJ2VvLnByZXBhcmUuZGV0YWlscy5pbmRleGRhdGEuc3VidGl0bGUnXG4gICAgXSkuc3Vic2NyaWJlKHQgPT4ge1xuXG4gICAgICBsZXQgaGVhZGVyID0ge1xuICAgICAgICB0aXRsZTogbnVsbCxcbiAgICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgICBsYWJlbDogbnVsbCxcbiAgICAgICAgICBsaW5rOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHN1YnRpdGxlOiBudWxsXG4gICAgICB9O1xuICAgICAgc3dpdGNoICh0aGlzLnByZXBhcmVQaGFzZS5uYW1lKSB7XG4gICAgICAgIGNhc2UgdGhpcy5QSEFTRV9UWVBFOiB7XG4gICAgICAgICAgaGVhZGVyLnRpdGxlID0gdFsnZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUudGl0bGUnXTtcbiAgICAgICAgICBoZWFkZXIuc3VidGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMudHlwZS5zdWJ0aXRsZSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgdGhpcy5QSEFTRV9DT05URU5UOiB7XG4gICAgICAgICAgY29uc3QgdHlwZU9iamVjdCA9IHRoaXMucHJlcGFyZWRJdGVtLmdldFNlbGVjdGVkVHlwZU9iamVjdCgpO1xuICAgICAgICAgIGhlYWRlci50aXRsZSA9IHR5cGVPYmplY3QgPyB0eXBlT2JqZWN0LmxhYmVsIDogJyc7XG4gICAgICAgICAgaGVhZGVyLnN1YnRpdGxlID0gdFsnZW8ucHJlcGFyZS5kZXRhaWxzLmNvbnRlbnQuc3VidGl0bGUnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHRoaXMuUEhBU0VfSU5ERVhEQVRBOiB7XG4gICAgICAgICAgY29uc3QgdHlwZU9iamVjdCA9IHRoaXMucHJlcGFyZWRJdGVtLmdldFNlbGVjdGVkVHlwZU9iamVjdCgpO1xuICAgICAgICAgIGhlYWRlci50aXRsZSA9IHR5cGVPYmplY3QgPyB0eXBlT2JqZWN0LmxhYmVsIDogJyc7XG4gICAgICAgICAgaGVhZGVyLnN1YnRpdGxlID0gdFsnZW8ucHJlcGFyZS5kZXRhaWxzLmluZGV4ZGF0YS5zdWJ0aXRsZSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB1cCBsb2NhdGlvbiBpbmZvXG4gICAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LnR5cGUgPT09ICdzeXNyb290Jykge1xuICAgICAgICBoZWFkZXIubG9jYXRpb24gPSB7XG4gICAgICAgICAgbGFiZWw6IHRbJ2VvLnByZXBhcmUubG9jYXRpb24udGl0bGUuc3lzcm9vdCddLFxuICAgICAgICAgIGxpbms6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFR5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZSh0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQudHlwZSk7XG4gICAgICAgIGhlYWRlci5sb2NhdGlvbiA9IHtcbiAgICAgICAgICBsYWJlbDogYCAke3BhcmVudFR5cGUubGFiZWx9OiAke3RoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50aXRsZX1gLFxuICAgICAgICAgIGxpbms6IGAvb2JqZWN0LyR7dGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LmlkfWBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyO1xuICAgIH0pO1xuICB9XG5cbiAgc2hvd1RlbXBsYXRlU2VsZWN0b3Ioc2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuY2hvb3NlVGVtcGxhdGUgPSBzaG93O1xuICAgIHRoaXMuc2VsZWN0VGVtcGxhdGUodGhpcy5wcmVwYXJlUGhhc2UuZGF0YS50ZW1wbGF0ZXNbMF0pO1xuICB9XG5cbiAgZG93bmxvYWQoKSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZVBoYXNlKSB7XG4gICAgICBjb25zdCBmaWxlID0gdGhpcy5wcmVwYXJlUGhhc2UubmFtZSA9PT0gJ2NvbnRlbnQnID8gdGhpcy5zZWxlY3RlZFRlbXBsYXRlRmlsZSA6IHRoaXMucHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGU7XG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICB0aGlzLmJhY2tlbmQuZG93bmxvYWQoZmlsZS51cmkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhc1RlbXBsYXRlQ2FwYWJpbGl0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYXBhYmlsaXRlcy5oYXNDYXBhYmlsaXR5KCd0ZW1wbGF0ZScpO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJZEZuKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUluZGV4Rm4oaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5hcHBseVNlbGVjdGlvbikge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgIC5maW5kKHRoaXMuYXBwbHlTZWxlY3Rpb24uaW4pLmZvY3VzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogUHJlcGFyZWRJdGVtKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jb21taXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMudHlwZXMpIHtcbiAgICAgICAgICAgIHJlcy50eXBlcyA9IHJlcy50eXBlcy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnByZXBhcmVkSXRlbSA9IHJlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJwcmVwYXJlRGV0YWlsc19fd3JhcHBlclwiICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2UgbWFpblNwaW5uZXJcIj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJwcmVwYXJlRGV0YWlsc1wiICpuZ0lmPVwicHJlcGFyZWRJdGVtICYmIHByZXBhcmVQaGFzZTsgZWxzZSBub0l0ZW1cIlxuICAgIFtuZ0NsYXNzXT1cInttdWx0aWZpbGU6IHByZXBhcmVkSXRlbS5jb250ZW50Y291bnQgPiAxLCBjb21taXR0aW5nOiBjb21taXR0aW5nfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItaW5mb1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+e3toZWFkZXIudGl0bGV9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXN1Yi10aXRsZSBoLWxvY2F0aW9uXCIgKm5nSWY9XCIhaGVhZGVyLmxvY2F0aW9uLmxpbms7IGVsc2UgbGlua2VkXCI+e3toZWFkZXIubG9jYXRpb24ubGFiZWx9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1zdWItdGl0bGUgaC1zdWJ0aXRsZVwiPnt7aGVhZGVyLnN1YnRpdGxlfX08L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2xpbmtlZD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXN1Yi10aXRsZSBoLXN1YnRpdGxlLWRldGFpbGVkXCI+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5sb2NhdGlvbi50aXRsZS5wcmVmaXg8L3NwYW4+XG4gICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJoZWFkZXIubG9jYXRpb24ubGlua1wiPnt7aGVhZGVyLmxvY2F0aW9uLmxhYmVsfX08L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgPGVvLWljb24gY2xhc3M9XCJidG4gYnRuLWRvd25sb2FkXCJcbiAgICAgICAgICAqbmdJZj1cInByZXBhcmVQaGFzZS5uYW1lID09PSAnY29udGVudCcgPyBzZWxlY3RlZFRlbXBsYXRlRmlsZSA6IHByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdGaWxlXCJcbiAgICAgICAgICBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jb250ZW50LWRvd25sb2FkLnN2ZydcIlxuICAgICAgICAgIFtpY29uVGl0bGVdPVwiKCdlby5hY3Rpb24uZG93bmxvYWQuZG1zLm9iamVjdC5jb250ZW50LmxhYmVsJyB8IHRyYW5zbGF0ZSlcIiAoY2xpY2spPVwiZG93bmxvYWQoKVwiPjwvZW8taWNvbj5cbiAgICAgICAgPGVvLWljb24gY2xhc3M9XCJidG4gYnRuLWRlbGV0ZVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3RyYXNoLnN2ZydcIlxuICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlRGlhbG9nID0gdHJ1ZTtcIj48L2VvLWljb24+XG4gICAgICAgIDwhLS0gYnV0dG9ucyB3aGlsZSBjaG9vc2luZyBhIHRlbXBsYXRlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hvb3NlVGVtcGxhdGVcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXRwbC1hYm9ydFwiIChjbGljayk9XCJzaG93VGVtcGxhdGVTZWxlY3RvcihmYWxzZSlcIlxuICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnByZXBhcmUudGVtcGxhdGUuYWJvcnQ8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tdHBsLWFwcGx5XCIgKGNsaWNrKT1cImFkZFRlbXBsYXRlKHNlbGVjdGVkVGVtcGxhdGUpXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFRlbXBsYXRlXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnRlbXBsYXRlLnNlbGVjdDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJlcGFyZVBoYXNlLm5hbWUgPT09ICdpbmRleGRhdGEnXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29tbWl0KClcIiBjbGFzcz1cImJ0bi1pZHgtc2F2ZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7cHJpbWFyeTogcHJlcGFyZWRJdGVtLnN0YXRlLnBhcmVudGlzcm9vdCAmJiBwcmVwYXJlZEl0ZW0uY29udGVudGNvdW50ID4gMX1cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1TdGF0ZT8uaW52YWxpZCB8fCBjb21taXR0aW5nXCIgdHJhbnNsYXRlPmVvLnByZXBhcmUuc2F2ZTwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29tbWl0KHRydWUpXCIgW2Rpc2FibGVkXT1cImZvcm1TdGF0ZT8uaW52YWxpZCB8fCBjb21taXR0aW5nXCIgY2xhc3M9XCJwcmltYXJ5IGJ0bi1pZHgtc2F2ZW9wZW5cIlxuICAgICAgICAgICAgW2hpZGRlbl09XCJwcmVwYXJlZEl0ZW0/LnN0YXRlLnBhcmVudGlzcm9vdCAmJiBwcmVwYXJlZEl0ZW0/LmNvbnRlbnRjb3VudCA+IDFcIlxuICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnByZXBhcmUuc2F2ZW9wZW48L2J1dHRvbj5cblxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZW8tYm9keVwiIFtuZ1N3aXRjaF09XCJwcmVwYXJlUGhhc2UubmFtZVwiICpuZ0lmPVwiIWNvbW1pdHRpbmc7IGVsc2Ugc3Bpbm5lclwiPlxuXG4gICAgICA8IS0tIFBIQVNFIFRZUEUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwicGhhc2UgdHlwZVwiICpuZ1N3aXRjaENhc2U9XCIndHlwZSdcIj5cblxuICAgICAgICA8IS0tIHdpdGggcHJldmlldyAtLT5cbiAgICAgICAgPHl2Yy1zcGxpdC12aWV3ICpuZ0lmPVwicHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGU7IGVsc2Ugbm9wcmV2aWV3XCJcbiAgICAgICAgICBbbGF5b3V0U2V0dGluZ3NJRF09XCIncHJlcGFyZS5kZXRhaWxzLnBoYXNlLnR5cGUnXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCIzMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmlsZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC10eXBlLXNlbGVjdCBlbXB0eVwiICpuZ0lmPVwicHJlcGFyZWRJdGVtLnR5cGVzLmxlbmd0aCA9PSAwXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIGVvLnByZXBhcmUuZGV0YWlscy50eXBlLmVtcHR5PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZS1zZWxlY3QgZW1wdHlcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIXByZXBhcmVkSXRlbS5zdGF0ZS50eXBlc2VsZWN0ZWRhbGxvd2VkICYmIHByZXBhcmVkSXRlbS5zdGF0ZS50eXBlc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwie3R5cGU6IHByZXBhcmVkSXRlbS5zZWxlY3RlZHR5cGUubGFiZWwsIGZpbGVuYW1lOiBnZXRGaWxlTmFtZXMocHJlcGFyZWRJdGVtKX1cIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMudHlwZS5ub3RhbGxvd2VkPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC10eXBlLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHByZXBhcmVkSXRlbS50eXBlczsgdHJhY2tCeTogdHJhY2tCeUlkRm5cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9iamVjdFR5cGUodHlwZSlcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0eXBlLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25JZF09XCJ0eXBlLmljb24uaWRcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7dHlwZS5kZXNjcmlwdGlvbn19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy5jb250ZW50cy50aXRsZTwvaDI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbnRlbnQgb2YgcHJlcGFyZWRJdGVtLmNvbnRlbnRzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhGbjsgaW5kZXggYXMgaWR4O1wiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IHByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdJbmRleCA9PSBpZHh9XCIgKGNsaWNrKT1cInNldFByZXZpZXdVcmkoaWR4KVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tjb250ZW50LnBhdGh9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnRuIGJ0bi1kZWxldGUtY29udGVudFwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3RyYXNoLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSB0cnVlOyBkZWxldGVkQ29udGVudEluZGV4ID0gaWR4O1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb250ZW50LmV4aXN0c2NvdW50ID4gMFwiIGNsYXNzPVwiYXR0ZW50aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eydlby5wcmVwYXJlLmNvbnRlbnQuZXhpc3RzY291bnQubWVzc2FnZSd8dHJhbnNsYXRlOiAoe2NvdW50OiBjb250ZW50LmV4aXN0c2NvdW50fSl9fVwiPiFcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI3MFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLW1lZGlhLXdyYXBcIj5cbiAgICAgICAgICAgICAgPGVvLXByZXBhcmUtY29udGVudC1leGlzdHMtaW5mbyBbY29udGVudF09XCJwcmVwYXJlZEl0ZW0uY29udGVudHNbcHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0luZGV4XVwiPlxuICAgICAgICAgICAgICA8L2VvLXByZXBhcmUtY29udGVudC1leGlzdHMtaW5mbz5cbiAgICAgICAgICAgICAgPGVvLW1lZGlhIFtkbXNPYmplY3RdPVwicHNldWRvRG1zT2JqZWN0XCIgW3ByZXZpZXdGaWxlXT1cInByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdGaWxlXCI+PC9lby1tZWRpYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwveXZjLXNwbGl0LXZpZXc+XG5cbiAgICAgICAgPCEtLSB3aXRob3V0IHByZXZpZXcgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9wcmV2aWV3PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpbGVzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGUtc2VsZWN0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHByZXBhcmVkSXRlbS50eXBlczsgdHJhY2tCeTogdHJhY2tCeUlkRm5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPYmplY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR5cGUtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25JZF09XCJ0eXBlLmljb24uaWRcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3R5cGUuZGVzY3JpcHRpb259fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQSEFTRSBDT05URU5UIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBoYXNlIGNvbnRlbnRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2NvbnRlbnQnXCI+XG5cbiAgICAgICAgPCEtLSBwYW5lbCBmb3Igc2VsZWN0aW5nIGEgdGVtcGxhdGUgdG8gYmUgdXNlZCBhcyBpdGVtcyBjb250ZW50IC0tPlxuICAgICAgICA8eXZjLXNwbGl0LXZpZXcgKm5nSWY9XCJjaG9vc2VUZW1wbGF0ZTsgZWxzZSBhdHRhY2hcIiBbbGF5b3V0U2V0dGluZ3NJRF09XCIncHJlcGFyZS5kZXRhaWxzLnBoYXNlLmNvbnRlbnQnXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI0MFwiPlxuICAgICAgICAgICAgPCEtLSBsaXN0IG9mIGF2YWlsYWJsZSB0ZW1wbGF0ZXMgLS0+XG4gICAgICAgICAgICA8ZW8tbGlzdC1jb250YWluZXIgI2VvTGlzdCBbbG9hZGluZ109XCJmYWxzZVwiIGNsYXNzPVwidGVtcGxhdGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImVvLWhlYWRlci1pY29uXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfdGVtcGxhdGUuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXItdGl0bGVcIiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS50ZW1wbGF0ZS5saXN0LnRpdGxlPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLWhlYWRlci1hY3Rpb25zXCI+XG5cbiAgICAgICAgICAgICAgICAgIDxlby1vdmVybGF5ICNvRmlsdGVyIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2ZpbHRlci5zdmcnXCIgW2ljb25DbGFzc109XCIncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm92ZXJsYXktZmlsdGVyXCIgW3RpdGxlXT1cIidlby5saXN0LmZpbHRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAoYWN0aXZlKT1cIm9GaWx0ZXIub25BY3RpdmVDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGVvLWN1c3RvbS1maWx0ZXIgI2NGaWx0ZXIgKGNoYW5nZSk9XCJjRmlsdGVyLnVwZGF0ZUdyaWQoZW9MaXN0LmVvR3JpZFN1YmplY3QsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChhY3RpdmUpPVwib0ZpbHRlci5vbkFjdGl2ZUNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxlby10ZXh0LWZpbHRlciBbdGl0bGVdPVwiJ2VvLnByZXBhcmUudGVtcGxhdGUuZmlsdGVyLnRleHQudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRjaEZpZWxkc109XCJbJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJywgJ3RhZ3MnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2VvLnByZXBhcmUudGVtcGxhdGUuZmlsdGVyLnRleHQudGl0bGUnXCI+PC9lby10ZXh0LWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZW8tc2V0LWZpbHRlciBbb3BlcmF0b3JdPVwiJ09SJ1wiIFt0aXRsZV09XCInZW8ucHJlcGFyZS50ZW1wbGF0ZS5maWx0ZXIuc2V0LnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhZ0ZpbHRlck9wdGlvbnM/Lmxlbmd0aFwiIFtvcHRpb25zXT1cInRhZ0ZpbHRlck9wdGlvbnNcIj48L2VvLXNldC1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZW8tY3VzdG9tLWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgIDwvZW8tb3ZlcmxheT5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZW8tZ3JpZCAjZW9HcmlkICpuZ0lmPVwiZ3JpZE9wdGlvbnM/LnJvd0RhdGFcIiBbZ3JpZE9wdGlvbnNdPVwiZ3JpZE9wdGlvbnNcIiBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiIFtzaG93Rm9vdGVyXT1cImZhbHNlXCIgW3NlbGVjdGlvbkxpbWl0XT1cIjFcIlxuICAgICAgICAgICAgICAgICAgKGVvR3JpZFNlbGVjdGlvbkNoYW5nZWQpPVwic2VsZWN0VGVtcGxhdGUoJGV2ZW50WzBdKVwiPlxuICAgICAgICAgICAgICAgIDwvZW8tZ3JpZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2VvLWxpc3QtY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgeXZjU3BsaXRBcmVhIFtzaXplXT1cIjYwXCI+XG4gICAgICAgICAgICA8IS0tIHByZXZpZXcgb2Ygc2VsZWN0ZWQgdGVtcGxhdGUgLS0+XG4gICAgICAgICAgICA8ZW8tbWVkaWEgW2Rtc09iamVjdF09XCJwc2V1ZG9EbXNPYmplY3RcIiBbcHJldmlld0ZpbGVdPVwic2VsZWN0ZWRUZW1wbGF0ZUZpbGVcIj48L2VvLW1lZGlhPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwveXZjLXNwbGl0LXZpZXc+XG5cbiAgICAgICAgPCEtLSBhZGQgY29udGVudCBnZW5lcmFsIG92ZXJ2aWV3ICh1cGxvYWQsIHRlbXBsYXRlLCBub25lKSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhdHRhY2g+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mb1wiICpuZ0lmPVwiIXVwbG9hZEluUHJvZ3Jlc3NcIiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50LmluZm88L2Rpdj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiAjZmlsZSAoY2hhbmdlKT1cImZpbGVDaGFuZ2VMaXN0ZW5lcigkZXZlbnQudGFyZ2V0LmZpbGVzKVwiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnRzXCIgKm5nSWY9XCIhdXBsb2FkSW5Qcm9ncmVzczsgZWxzZSB1cGxvYWRzcGlubmVyXCI+XG5cbiAgICAgICAgICAgIDwhLS0gdXBsb2FkIGEgZmlsZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50IGF0dC1maWxlXCIgKm5nSWY9XCJwcmVwYXJlUGhhc2UuZGF0YS5maWxlXCIgKGNsaWNrKT1cInVwbG9hZCgpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWdcIj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19maWxlX3VwbG9hZC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQudXBsb2FkLnRpdGxlPC9oMz5cbiAgICAgICAgICAgICAgPHAgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC51cGxvYWQuZGVzYzwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIHNlbGVjdCBhIHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQgYXR0LXRtcGxcIiAqbmdJZj1cInByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlcy5sZW5ndGggPiAwICYmIGhhc1RlbXBsYXRlQ2FwYWJpbGl0eSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dUZW1wbGF0ZVNlbGVjdG9yKHRydWUpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWdcIj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19wcmVwYXJlX2FkZC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQudGVtcGxhdGUudGl0bGU8L2gzPlxuICAgICAgICAgICAgICA8cCB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50LnRlbXBsYXRlLmRlc2M8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBubyBmaWxlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQgYXR0LW5vbmVcIiAqbmdJZj1cInByZXBhcmVQaGFzZS5kYXRhLndpdGhvdXRGaWxlXCIgKGNsaWNrKT1cIm5vRmlsZSgpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWdcIj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19uby1maWxlLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC5ub2ZpbGUudGl0bGU8L2gzPlxuICAgICAgICAgICAgICA8cCB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50Lm5vZmlsZS5kZXNjPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gdXBsb2FkIHByb2dyZXNzIGluZGljYXRvciAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN1cGxvYWRzcGlubmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICA8ZW8tbG9hZGluZy1zcGlubmVyIFtzaXplXT1cIidsYXJnZSdcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFBIQVNFIElOREVYREFUQSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwaGFzZSBpbmRleGRhdGFcIiAqbmdTd2l0Y2hDYXNlPVwiJ2luZGV4ZGF0YSdcIj5cblxuICAgICAgICA8IS0tIGZvcm0gYW5kIHByZXZpZXcgLS0+XG4gICAgICAgIDx5dmMtc3BsaXQtdmlldyAqbmdJZj1cInByZXBhcmVkSXRlbS5jb250ZW50czsgZWxzZSBqdXN0Zm9ybVwiIFtsYXlvdXRTZXR0aW5nc0lEXT1cIidwcmVwYXJlLnN0YXRlJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiNTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpbGVzXCI+XG5cbiAgICAgICAgICAgICAgPCEtLSBpbmRleGRhdGEgZm9ybSAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImp1c3Rmb3JtXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBsaXN0IG9mIGNvbnRlbnRzIChpbiBjYXNlIG9mIGJ1bGsgdXBsb2FkKSB0aGF0IGNhbiBiZSBwcmV2aWV3ZWQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LXNlbGVjdFwiPlxuXG4gICAgICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuY29udGVudHMudGl0bGU8L2gyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIHByZXBhcmVkSXRlbS5jb250ZW50czsgdHJhY2tCeTogdHJhY2tCeUluZGV4Rm47IGluZGV4IGFzIGlkeFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IHByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdJbmRleCA9PT0gaWR4fVwiIChjbGljayk9XCJzZXRQcmV2aWV3VXJpKGlkeClcIj5cbiAgICAgICAgICAgICAgICAgIHt7Y29udGVudC5wYXRofX0gPHNwYW4gKm5nSWY9XCJjb250ZW50LmV4aXN0c2NvdW50ID4gMFwiIGNsYXNzPVwiYXR0ZW50aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eydlby5wcmVwYXJlLmNvbnRlbnQuZXhpc3RzY291bnQubWVzc2FnZSd8dHJhbnNsYXRlOiAoe2NvdW50OiBjb250ZW50LmV4aXN0c2NvdW50fSl9fVwiPiE8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiNTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1tZWRpYS13cmFwXCI+XG4gICAgICAgICAgICAgIDxlby1wcmVwYXJlLWNvbnRlbnQtZXhpc3RzLWluZm8gW2NvbnRlbnRdPVwicHJlcGFyZWRJdGVtLmNvbnRlbnRzW3ByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdJbmRleF1cIj5cbiAgICAgICAgICAgICAgPC9lby1wcmVwYXJlLWNvbnRlbnQtZXhpc3RzLWluZm8+XG4gICAgICAgICAgICAgIDxlby1tZWRpYSBbZG1zT2JqZWN0XT1cInBzZXVkb0Rtc09iamVjdFwiIFtwcmV2aWV3RmlsZV09XCJwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZVwiPjwvZW8tbWVkaWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3l2Yy1zcGxpdC12aWV3PlxuXG4gICAgICAgIDwhLS0ganVzdCB0aGUgZm9ybSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNqdXN0Zm9ybT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250YWluZXIgc2l0dWF0aW9uLWNyZWF0ZVwiICpuZ0lmPVwiZm9ybU9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxlby1vYmplY3QtZm9ybSAjZm9ybSBbZm9ybU9wdGlvbnNdPVwiZm9ybU9wdGlvbnNcIiAoc3RhdHVzQ2hhbmdlZCk9XCJvbkZvcm1TdGF0dXNDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvZW8tb2JqZWN0LWZvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuXG4gIDxuZy10ZW1wbGF0ZSAjc3Bpbm5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZW8tYm9keVwiPlxuICAgICAgPGVvLWxvYWRpbmctc3Bpbm5lciBzaXplPVwibWVkaXVtXCI+PC9lby1sb2FkaW5nLXNwaW5uZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21haW5TcGlubmVyPlxuICA8ZGl2IGNsYXNzPVwicHJlcGFyZURldGFpbHNfX21haW4tc3Bpbm5lclwiPlxuICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgc2l6ZT1cIm1lZGl1bVwiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuPG5nLXRlbXBsYXRlICNub0l0ZW0+XG4gIDxlby1lcnJvci1tZXNzYWdlIFtlbXB0eVN0YXRlXT1cIntpY29uOiBlbXB0eVN0YXRlLmljb24sIHRleHQ6IGVtcHR5U3RhdGUudGV4dCwgY2xhc3NOYW1lOiBlbXB0eVN0YXRlLmNsYXNzTmFtZX1cIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuZXJyb3JcIj48L25nLWNvbnRlbnQ+XG4gIDwvZW8tZXJyb3ItbWVzc2FnZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxlby1kaWFsb2cgW3RpdGxlXT1cIidlby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmRpYWxvZy50aXRsZScgfCB0cmFuc2xhdGVcIiBbKHZpc2libGUpXT1cInNob3dEZWxldGVEaWFsb2dcIlxuICBbZm9jdXNPblNob3ddPVwiZmFsc2VcIiBbbWluV2lkdGhdPVwiNDAwXCIgW3N0eWxlQ2xhc3NdPVwiJ3ByZXBhcmUtZGVsZXRlX19kaWFsb2cnXCI+XG5cbiAgPGRpdj57eydlby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmRpYWxvZy5tZXNzYWdlJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b25zIHByZXBhcmUtZGVsZXRlLS1hY3Rpb24tYnV0dG9ucyBmbGV4LXJvd1wiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uIGNhbmNlbFwiIChjbGljayk9XCJzaG93RGVsZXRlRGlhbG9nID0gZmFsc2VcIlxuICAgICAgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLmNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNjb25maXJtRGVsZXRlIChjbGljayk9XCJyZW1vdmVJdGVtKHByZXBhcmVkSXRlbSlcIiBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCJcbiAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmRpYWxvZy5vazwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZW8tZGlhbG9nPlxuXG48ZW8tZGlhbG9nIFt0aXRsZV09XCInZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5jb250ZW50LmRpYWxvZy50aXRsZScgfCB0cmFuc2xhdGVcIiBbKHZpc2libGUpXT1cInNob3dDb250ZW50RGVsZXRlRGlhbG9nXCJcbiAgW21pbldpZHRoXT1cIjQwMFwiIFtzdHlsZUNsYXNzXT1cIidwcmVwYXJlLWRlbGV0ZV9fZGlhbG9nJ1wiPlxuXG4gIDxkaXY+e3snZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5jb250ZW50LmRpYWxvZy5tZXNzYWdlJyB8IHRyYW5zbGF0ZTogKHtjb250ZW50UGF0aDogcHJlcGFyZWRJdGVtPy5jb250ZW50cyA/XG4gICAgcHJlcGFyZWRJdGVtPy5jb250ZW50c1tkZWxldGVkQ29udGVudEluZGV4XT8ucGF0aCA6ICcnfSl9fTwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucyBwcmVwYXJlLWRlbGV0ZS0tYWN0aW9uLWJ1dHRvbnMgZmxleC1yb3dcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBjYW5jZWxcIiAoY2xpY2spPVwic2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSBmYWxzZVwiXG4gICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cuY2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI2NvbmZpcm1Db250ZW50RGVsZXRlIChjbGljayk9XCJyZW1vdmVJdGVtQ29udGVudChwcmVwYXJlZEl0ZW0sIGRlbGV0ZWRDb250ZW50SW5kZXgpXCJcbiAgICAgIGNsYXNzPVwiYnV0dG9uIHByaW1hcnlcIiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cub2s8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2VvLWRpYWxvZz5cbiJdfQ==
557
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL3ByZXBhcmUtZGV0YWlscy9wcmVwYXJlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvcHJlcGFyZS1kZXRhaWxzL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFLTCxZQUFZLEVBS1osS0FBSyxFQUNMLFNBQVMsRUFDVixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCNUQsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBdUI7SUF5QmxDLElBQ0ksWUFBWSxDQUFDLElBQWtCO1FBQ2pDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsSCxNQUFNLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0SCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3RC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TUYsdUJBQXVCLENBdWtCbkM7U0F2a0JZLHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLG9CQUFvQjswVkFhWCxJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU07Z0JBQ0UsVUFBVTtzQkFBNUIsU0FBUzt1QkFBQyxNQUFNO2dCQUNXLG1CQUFtQjtzQkFBOUMsU0FBUzt1QkFBQyxlQUFlO2dCQUNTLDBCQUEwQjtzQkFBNUQsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBYzdCLFlBQVk7c0JBRGYsS0FBSzt1QkFBQyxjQUFjO2dCQW9CWixVQUFVO3NCQUFsQixLQUFLO2dCQWlDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUdILFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbERlZiwgR3JpZE9wdGlvbnN9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcbmltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEJhY2tlbmRTZXJ2aWNlLCBDYXBhYmlsaXRpZXNTZXJ2aWNlLFxuICBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgT2JqZWN0VHlwZSxcbiAgUHJlcGFyZVNlcnZpY2UsXG4gIFByZXBhcmVkSXRlbSxcbiAgUHJlcGFyZWRJdGVtVGVtcGxhdGUsXG4gIFByZXBhcmVkSXRlbVR5cGUsXG4gIFN5c3RlbVNlcnZpY2UsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsXG4gIFV0aWxzLFxuICBEbXNPYmplY3Rcbn0gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7UGVuZGluZ0NoYW5nZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmstY29yZS9wZW5kaW5nLWNoYW5nZXMvcGVuZGluZy1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHtTZWxlY3Rpb25Db25maWcsIFNlbGVjdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQge1ByZXZpZXdGaWxlfSBmcm9tICcuLi9tZWRpYS9tZWRpYS5jb21wb25lbnQnO1xuaW1wb3J0IHtGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50fSBmcm9tICcuLi9vYmplY3QtZm9ybS9mb3JtLXN0YXR1cy1jaGFuZ2VkLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQge09iamVjdEZvcm1PcHRpb25zfSBmcm9tICcuLi9vYmplY3QtZm9ybS9pbmRleCc7XG5pbXBvcnQge09iamVjdEZvcm1Db21wb25lbnR9IGZyb20gJy4uL29iamVjdC1mb3JtL29iamVjdC1mb3JtL29iamVjdC1mb3JtLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcGFyZVBoYXNlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkYXRhOiB7XG4gICAgcHJldmlld0luZGV4PzogbnVtYmVyLFxuICAgIHByZXZpZXdGaWxlPzogUHJldmlld0ZpbGUsXG4gICAgZmlsZT86IGJvb2xlYW4sXG4gICAgd2l0aG91dEZpbGU/OiBib29sZWFuLFxuICAgIHRlbXBsYXRlcz86IGFueVtdXG4gIH07XG59XG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VvLXByZXBhcmUtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcmVwYXJlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcmVwYXJlLWRldGFpbHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQcmVwYXJlRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucztcblxuICAvLyBJRCBzZXQgYnkgcGVuZGluZ0NoYW5nZXMgc2VydmljZSB3aGVuIGVkaXRpbmcgaW5kZXhkYXRhXG4gIC8vIFVzZWQgdG8gZmluaXNoIHRoZSBwZW5kaW5nIHRhc2sgd2hlbiBlZGl0aW5nIGlzIGRvbmVcbiAgcHJpdmF0ZSBwZW5kaW5nVGFza0lkOiBzdHJpbmc7XG4gIHByaXZhdGUgc2VsZWN0ZWRUeXBlT2JqZWN0O1xuXG4gIC8vIGhpZGRlbiBmaWxlIGlucHV0IHRvIHRyaWdnZXIgZmlsZSB1cGxvYWRzXG4gIEBWaWV3Q2hpbGQoJ2ZpbGUnKSBmaWxlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdmb3JtJykgb2JqZWN0Rm9ybTogT2JqZWN0Rm9ybUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY29uZmlybURlbGV0ZScpIGNvbmZpcm1EZWxldGVCdXR0b246IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbmZpcm1Db250ZW50RGVsZXRlJykgY29uZmlybUNvbnRlbnREZWxldGVCdXR0b246IEVsZW1lbnRSZWY7XG5cbiAgLy8gcHJlcGFyYXRpb24gaXMgZGl2aWRlZCBpbnRvIHNldmVyYWwgcGhhc2VzXG4gIC8vIHNlbGVjdCBhbiBvYmplY3QgdHlwZVxuICBQSEFTRV9UWVBFID0gJ3R5cGUnO1xuICAvLyBhZGQgY29udGVudFxuICBQSEFTRV9DT05URU5UID0gJ2NvbnRlbnQnO1xuICAvLyBzZXQgaW5kZXhkYXRhXG4gIFBIQVNFX0lOREVYREFUQSA9ICdpbmRleGRhdGEnO1xuXG4gIF9wcmVwYXJlZEl0ZW06IFByZXBhcmVkSXRlbTtcbiAgcHNldWRvRG1zT2JqZWN0OiBEbXNPYmplY3Q7XG5cbiAgQElucHV0KCdwcmVwYXJlZEl0ZW0nKVxuICBzZXQgcHJlcGFyZWRJdGVtKGl0ZW06IFByZXBhcmVkSXRlbSkge1xuICAgIGNvbnN0IG9iamVjdFRvU3RyaW5naWZpZWRWYWx1ZUFycmF5ID0gKG9iaikgPT4gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMob2JqIHx8IHt9KS5zb3J0KCkubWFwKGtleSA9PiBvYmpba2V5XSkpO1xuICAgIGNvbnN0IGlzUHJvY2Vzc2luZ0FsbG93ZWQgPSBvYmplY3RUb1N0cmluZ2lmaWVkVmFsdWVBcnJheSh0aGlzLl9wcmVwYXJlZEl0ZW0pICE9PSBvYmplY3RUb1N0cmluZ2lmaWVkVmFsdWVBcnJheShpdGVtKTtcbiAgICBpZiAoaXRlbSAmJiBpdGVtLnR5cGVzKSB7XG4gICAgICBpdGVtLnR5cGVzID0gaXRlbS50eXBlcy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpO1xuICAgIH1cbiAgICB0aGlzLl9wcmVwYXJlZEl0ZW0gPSBpdGVtO1xuICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbSAmJiB0aGlzLnByZXBhcmVkSXRlbS5pZCAmJiBpc1Byb2Nlc3NpbmdBbGxvd2VkKSB7XG4gICAgICB0aGlzLnByb2Nlc3MoKTtcbiAgICAgIC8vIHdlIG5lZWQgdGhpcyBmb3IgdGhlIE8zNjUgaW50ZWdyYXRpb24gVFVLLTM1NzZcbiAgICAgIHRoaXMucHNldWRvRG1zT2JqZWN0ID0gbmV3IERtc09iamVjdCh7aWQ6IHRoaXMucHJlcGFyZWRJdGVtLmlkLCB2ZXJzaW9uOiAwfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHByZXBhcmVkSXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlcGFyZWRJdGVtO1xuICB9XG5cblxuICBASW5wdXQoKSBlbXB0eVN0YXRlID0ge2ljb246ICdhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Vycm9yLnN2ZycsIHRleHQ6ICcnLCBjbGFzc05hbWU6ICdkZXRhaWxzLWVycm9yJ307XG5cbiAgcHJlcGFyZVBoYXNlOiBQcmVwYXJlUGhhc2U7XG4gIHNlbGVjdGVkVGVtcGxhdGU6IFByZXBhcmVkSXRlbVRlbXBsYXRlO1xuICBzZWxlY3RlZFRlbXBsYXRlRmlsZTogUHJldmlld0ZpbGU7XG4gIGZvcm1PcHRpb25zOiBPYmplY3RGb3JtT3B0aW9ucztcbiAgZm9ybVN0YXRlOiBGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50O1xuICBjaG9vc2VUZW1wbGF0ZTogYm9vbGVhbjtcbiAgdXBsb2FkSW5Qcm9ncmVzczogYm9vbGVhbjtcbiAgY29tbWl0dGluZzogYm9vbGVhbjtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICB0YWdGaWx0ZXJPcHRpb25zOiBhbnk7XG4gIF9zaG93RGVsZXRlRGlhbG9nID0gZmFsc2U7XG4gIF9zaG93Q29udGVudERlbGV0ZURpYWxvZyA9IGZhbHNlO1xuICBkZWxldGVkQ29udGVudEluZGV4OiBudW1iZXI7XG5cbiAgLy8gdGl0bGUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBkZXRhaWxzIGhlYWRlclxuICBoZWFkZXIgPSB7XG4gICAgdGl0bGU6IG51bGwsXG4gICAgbG9jYXRpb246IHtcbiAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgbGluazogbnVsbFxuICAgIH0sXG4gICAgc3VidGl0bGU6IG51bGxcbiAgfTtcblxuICBjb2xEZWZzOiBDb2xEZWZbXSA9IFt7XG4gICAgaGVhZGVyTmFtZTogJycsXG4gICAgZmllbGQ6ICd0aXRsZScsXG4gICAgY2VsbFJlbmRlcmVyOiB0aGlzLmNlbGxSZW5kZXJlcixcbiAgICBmaWx0ZXI6IGZhbHNlXG4gIH1dO1xuXG4gIEBJbnB1dCgpIGFwcGx5U2VsZWN0aW9uOiBTZWxlY3Rpb25Db25maWc7XG5cbiAgQE91dHB1dCgpIG9uSXRlbUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFByZXBhcmVkSXRlbT4oKTtcbiAgQE91dHB1dCgpIG9uQ29tbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBvbkl0ZW1SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFByZXBhcmVkSXRlbT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS10eXBlJylcbiAgZ2V0IGRhdGFUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnByZXBhcmVkSXRlbSAmJiB0aGlzLnByZXBhcmVkSXRlbS5zZWxlY3RlZHR5cGUgPyB0aGlzLnByZXBhcmVkSXRlbS5zZWxlY3RlZHR5cGUubmFtZSA6ICdub25lJztcbiAgfVxuXG4gIHNldCBzaG93RGVsZXRlRGlhbG9nKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dEZWxldGVEaWFsb2cgPSB2YWw7XG5cbiAgICBpZiAodGhpcy5fc2hvd0RlbGV0ZURpYWxvZykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbmZpcm1EZWxldGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpLCAwKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0RlbGV0ZURpYWxvZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0RlbGV0ZURpYWxvZztcbiAgfVxuXG4gIHNldCBzaG93Q29udGVudERlbGV0ZURpYWxvZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Q29udGVudERlbGV0ZURpYWxvZyA9IHZhbDtcblxuICAgIGlmICh0aGlzLl9zaG93Q29udGVudERlbGV0ZURpYWxvZykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbmZpcm1Db250ZW50RGVsZXRlQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3dDb250ZW50RGVsZXRlRGlhbG9nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Q29udGVudERlbGV0ZURpYWxvZztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJlcGFyZVNlcnZpY2U6IFByZXBhcmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2hhbmdlczogUGVuZGluZ0NoYW5nZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWxlY3Rpb246IFNlbGVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kU2VydmljZSxcbiAgICBwcml2YXRlIGNhcGFiaWxpdGVzOiBDYXBhYmlsaXRpZXNTZXJ2aWNlKSB7XG4gIH1cblxuICBjZWxsUmVuZGVyZXIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwidGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHtwYXJhbXMuZGF0YS50aXRsZSB8fCAnJ30ke3BhcmFtcy5kYXRhLmNvbnRlbnQgPyAnPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPicgKyAnICgnICsgcGFyYW1zLmRhdGEuY29udGVudC5taW1lZ3JvdXAgKyAnKScgKyAnPC9zcGFuPicgOiAnJ308L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+JHtwYXJhbXMuZGF0YS5kZXNjcmlwdGlvbiB8fCAnJ308L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZ3NcIj5cbiAgICAgICAgICAgICAgICAke3BhcmFtcy5kYXRhLnRhZ3MubWFwKHRhZyA9PiBgPHNwYW4gY2xhc3M9XCJjaGlwXCI+JHt0YWd9PC9zcGFuPmApLmpvaW4oJycpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIGA7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UGVuZGluZygpIHtcbiAgICAvLyBiZWNhdXNlIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGZvcm0gc3RhdHVzIGNoYW5nZXMsXG4gICAgLy8gcGVuZGluZyB0YXNrIHdpbGwgb25seSBiZSBzdGFydGVkIG9uY2UgdW50aWwgaXQgd2FzIGZpbmlzaGVkXG4gICAgaWYgKCF0aGlzLnBlbmRpbmdDaGFuZ2VzLmhhc1BlbmRpbmdUYXNrKHRoaXMucGVuZGluZ1Rhc2tJZCB8fCAnICcpKSB7XG4gICAgICB0aGlzLnBlbmRpbmdUYXNrSWQgPSB0aGlzLnBlbmRpbmdDaGFuZ2VzLnN0YXJ0VGFzaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluaXNoUGVuZGluZygpIHtcbiAgICB0aGlzLnBlbmRpbmdDaGFuZ2VzLmZpbmlzaFRhc2sodGhpcy5wZW5kaW5nVGFza0lkKTtcbiAgfVxuXG4gIHByZXBhcmVGb3JtQ29udGVudChmb3JtRGF0YT8pIHtcbiAgICBjb25zdCBkYXRhID0gZm9ybURhdGEgfHwgdGhpcy5zZWxlY3RlZFR5cGVPYmplY3QuZGF0YTtcbiAgICB0aGlzLmZvcm1PcHRpb25zID0ge1xuICAgICAgZm9ybU1vZGVsOiB0aGlzLnNlbGVjdGVkVHlwZU9iamVjdC5mb3JtLFxuICAgICAgZGF0YTogZGF0YVxuICAgIH07XG4gICAgaWYgKHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudCkge1xuICAgICAgdGhpcy5mb3JtT3B0aW9ucy5jb250ZXh0ID0ge1xuICAgICAgICBpZDogdGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LmlkLFxuICAgICAgICB0aXRsZTogdGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LnRpdGxlLFxuICAgICAgICB0eXBlTmFtZTogdGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LnR5cGVcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmVzZXRPYmplY3RUeXBlKCkge1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2UudXBkYXRlQ2hpbGRUeXBlKCdkbXM6c3lzb2JqZWN0JywgdGhpcy5wcmVwYXJlZEl0ZW0uaWQpLnN1YnNjcmliZSh1cGRhdGVkUHJlcGFyZUl0ZW0gPT4ge1xuICAgICAgdGhpcy5wcmVwYXJlZEl0ZW0gPSB1cGRhdGVkUHJlcGFyZUl0ZW07XG4gICAgICB0aGlzLm9uSXRlbUNoYW5nZWQuZW1pdCh1cGRhdGVkUHJlcGFyZUl0ZW0pO1xuICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfVFlQRSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0cyBhIHByZXBhcmVkIGl0ZW0uIFRoaXMgd2lsbCBjYXVzZSB0aGUgdGVtcG9yYXJ5IHByZXBhcmVkIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8gYSByZWFsIERNUy1PYmplY3QuXG4gICAqIEBwYXJhbSBvcGVuTG9jYXRpb25BZnRlckNvbW1pdCAtIHdoZW4gc2V0IHRvIHRydWUsIGFwcGxpY2F0aW9uIHdpbGwgbmF2aWdhdGUgdG8gdGhlIG9iamVjdHMgbG9jYXRpb25cbiAgICovXG4gIGNvbW1pdChvcGVuTG9jYXRpb25BZnRlckNvbW1pdD86IGJvb2xlYW4pIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZvcm1TdGF0ZSAmJiAhdGhpcy5mb3JtU3RhdGUuaW52YWxpZCkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMub2JqZWN0Rm9ybS5nZXRGb3JtRGF0YSgpO1xuICAgICAgICB0aGlzLmNvbW1pdHRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAgICAgLmNvbW1pdFByZXBhcmVkSXRlbSh0aGlzLnByZXBhcmVkSXRlbS5pZCwgdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCkubmFtZSwgZm9ybURhdGEpXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tbWl0LmVtaXQocmVzKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgICAgICAgICAgaWYgKG9wZW5Mb2NhdGlvbkFmdGVyQ29tbWl0KSB7XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL29iamVjdCcsIHJlc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIFV0aWxzLnRocm93KGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtrZXksIGNhdXNlLCB1bmlxdWVmaWVsZHN9ID0gZXJyb3IuZXJyb3I7XG4gICAgICAgICAgICBpZiAoa2V5ICYmIGtleSA9PT0gJ0RNU19NRVRBREFUQV9VTklRVUVfVklPTEFUSU9OX0VSUk9SJykge1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby51bmlxdWUudmFsaWRhdGlvbi5lcnJvci5oaW50Jywge2ZpZWxkOiB1bmlxdWVmaWVsZHMudG9TdHJpbmcoKX0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F1c2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IobnVsbCwgY2F1c2UubWVzc2FnZXNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21taXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUZvcm1Db250ZW50KGZvcm1EYXRhKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJlcGFyZS5jcmVhdGVkLmVycm9yLnRpdGxlJyksXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLmNyZWF0ZWQuZXJyb3IubWVzc2FnZScpXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oaXRlbTogUHJlcGFyZWRJdGVtKSB7XG4gICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgdGhpcy5vbkl0ZW1SZW1vdmUuZW1pdChpdGVtKTtcbiAgICB0aGlzLl9zaG93RGVsZXRlRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICByZW1vdmVJdGVtQ29udGVudChpdGVtOiBQcmVwYXJlZEl0ZW0sIGRlbGV0ZWRDb250ZW50SW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2UuZGVsZXRlUHJlcGFyZWRJdGVtQ29udGVudChpdGVtLmlkLCBkZWxldGVkQ29udGVudEluZGV4KVxuICAgICAgLnN1YnNjcmliZSgodXBkYXRlZEl0ZW06IFByZXBhcmVkSXRlbSkgPT4ge1xuICAgICAgICB0aGlzLnByZXBhcmVkSXRlbSA9IHVwZGF0ZWRJdGVtO1xuICAgICAgICB0aGlzLnNob3dDb250ZW50RGVsZXRlRGlhbG9nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldEZpbGVOYW1lcyhpdGVtOiBQcmVwYXJlZEl0ZW0pIHtcbiAgICByZXR1cm4gKGl0ZW0uY29udGVudHMgfHwgW10pLm1hcChjID0+IGMucGF0aCkuam9pbignLCAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYSB0YXJnZXQgb2JqZWN0IHR5cGUgZm9yIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW0uXG4gICAqIEBwYXJhbSB0eXBlIC0gdGhlIG9iamVjdCB0eXBlcyBuYW1lIHRvIGJlIHNldCBhcyB0YXJnZXRcbiAgICovXG4gIHNlbGVjdE9iamVjdFR5cGUodHlwZTogUHJlcGFyZWRJdGVtVHlwZSkge1xuICAgIHRoaXMucHJlcGFyZWRJdGVtLnR5cGVzXG4gICAgICAuZm9yRWFjaCgodCkgPT4gdC5zZWxlY3RlZCA9ICh0Lm5hbWUgPT09IHR5cGUubmFtZSkpO1xuXG4gICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgLnVwZGF0ZUNoaWxkVHlwZSh0eXBlLm5hbWUsIHRoaXMucHJlcGFyZWRJdGVtLmlkKVxuICAgICAgLnN1YnNjcmliZSh1cGRhdGVkUHJlcGFyZWRJdGVtID0+IHtcbiAgICAgICAgdGhpcy5wcmVwYXJlZEl0ZW0gPSB1cGRhdGVkUHJlcGFyZWRJdGVtO1xuICAgICAgICB0aGlzLm9uSXRlbUNoYW5nZWQuZW1pdCh1cGRhdGVkUHJlcGFyZWRJdGVtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHRlbXBsYXRlIHRvIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW0uXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSAtIHRoZSB0ZW1wbGF0ZSB0byBiZSBhZGRlZFxuICAgKi9cbiAgYWRkVGVtcGxhdGUodGVtcGxhdGU6IFByZXBhcmVkSXRlbVRlbXBsYXRlKSB7XG5cbiAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAuYWRkVGVtcGxhdGUodGhpcy5wcmVwYXJlZEl0ZW0uaWQsIHRlbXBsYXRlLmlkKVxuICAgICAgLnN1YnNjcmliZSgodXBkYXRlZFByZXBhcmVkSXRlbSkgPT4ge1xuICAgICAgICB0aGlzLnByZXBhcmVkSXRlbSA9IHVwZGF0ZWRQcmVwYXJlZEl0ZW07XG4gICAgICAgIHRoaXMub25JdGVtQ2hhbmdlZC5lbWl0KHVwZGF0ZWRQcmVwYXJlZEl0ZW0pO1xuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJlcGFyZS50ZW1wbGF0ZS5lcnJvci50aXRsZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLnRlbXBsYXRlLmVycm9yLm1lc3NhZ2UnKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIHRlbXBsYXRlLiBXaWxsIHNob3cgcHJldmlldyBmb3IgdGhlIHNlbGVjdGVkIHRlbXBsYXRlLlxuICAgKiBAcGFyYW0gdGVtcGxhdGUgLSB0aGUgdGVtcGxhdGUgdG8gYmUgc2VsZWN0ZWRcbiAgICovXG4gIHNlbGVjdFRlbXBsYXRlKHRlbXBsYXRlOiBQcmVwYXJlZEl0ZW1UZW1wbGF0ZSkge1xuICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZUZpbGUgPSAhKHRlbXBsYXRlICYmIHRlbXBsYXRlLmNvbnRlbnQpID8gbnVsbCA6IHtcbiAgICAgIHVyaTogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRUZW1wbGF0ZVByZXZpZXdVcmkodGhpcy5zZWxlY3RlZFRlbXBsYXRlLmlkKSxcbiAgICAgIHVyaVBkZjogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRUZW1wbGF0ZVByZXZpZXdVcmkodGhpcy5zZWxlY3RlZFRlbXBsYXRlLmlkLCAnUERGJyksXG4gICAgICBtaW1ldHlwZTogdGVtcGxhdGUuY29udGVudC5taW1ldHlwZSxcbiAgICAgIG1pbWVncm91cDogdGVtcGxhdGUuY29udGVudC5taW1lZ3JvdXAsXG4gICAgICBzaXplOiB0ZW1wbGF0ZS5jb250ZW50LnNpemVcbiAgICB9O1xuICB9XG5cbiAgc2V0UHJldmlld1VyaShpbmRleDogbnVtYmVyKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLnByZXBhcmVQaGFzZS5kYXRhLCB0aGlzLmdldFByZXZpZXdEYXRhKGluZGV4KSk7XG4gIH1cblxuICAvLyBza2lwIGNvbnRlbnQgc2VsZWN0aW9uIGZvciB0aGUgY3VycmVudCBwcmVwYXJlZCBpdGVtXG4gIC8vIGFuZCBjb250aW51ZSBzZXR0aW5nIGluZGV4ZGF0YVxuICBub0ZpbGUoKSB7XG4gICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgfVxuXG4gIC8vIHRyaWdnZXIgZmlsZSB1cGxvYWRcbiAgdXBsb2FkKCkge1xuICAgIC8vIGFmdGVyIHRoZSB1c2VyIHNlbGVjdGVkIGEgZmlsZSBmaWxlQ2hhbmdlTGlzdGVuZXIoKSB3aWxsIGNvbnRpbnVlXG4gICAgdGhpcy5maWxlLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIC8vIG9uQ2hhbmdlIGxpc3RlbmVyIG9uIGhpZGRlbiBmaWxlIGlucHV0XG4gIGZpbGVDaGFuZ2VMaXN0ZW5lcihldmVudCkge1xuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudFswXTtcbiAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC51cGxvYWRDb250ZW50KHRoaXMucHJlcGFyZWRJdGVtLmlkLCBmaWxlKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAvLyB1cGxvYWQgc3VjY2VlZGVkIHNvIHdlIGNhbiBnbyBvbiB0byB0aGUgbmV4dCBwcmVwYXJlIHBoYXNlXG4gICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gbmV3IFByZXBhcmVkSXRlbShyZXMpO1xuICAgICAgICB0aGlzLm9uSXRlbUNoYW5nZWQuZW1pdCh0aGlzLnByZXBhcmVkSXRlbSk7XG4gICAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0lOREVYREFUQSk7XG4gICAgICAgIHRoaXMudXBsb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgfSwgVXRpbHMudGhyb3coZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IuY2F1c2UpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihudWxsLCBlcnJvci5lcnJvci5jYXVzZS5tZXNzYWdlc1swXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IuZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihudWxsLCBlcnJvci5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcih0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLmNyZWF0ZWQuZXJyb3IudGl0bGUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbW1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby51cGxvYWQuZ2xvYmFsLmVycm9yLnRpdGxlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVwbG9hZC5nbG9iYWwuZXJyb3IuZGVzY3JpcHRpb24nKVxuICAgICAgKSk7XG4gIH1cblxuICBvbkZvcm1TdGF0dXNDaGFuZ2VkKGV2dCkge1xuICAgIHRoaXMuZm9ybVN0YXRlID0gZXZ0O1xuXG4gICAgaWYgKHRoaXMuZm9ybVN0YXRlLmRpcnR5KSB7XG4gICAgICB0aGlzLnN0YXJ0UGVuZGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3MoKSB7XG4gICAgLy8gdG9kbzogcmVzZXQgc3R1ZmZcbiAgICB0aGlzLmZvcm1TdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5mb3JtT3B0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5nZXRQcmVwYXJlUGhhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHByZXBhcmUgcGhhc2UgdG8gYmUgaW5pdGlhbGl6ZWQgYmFzZWQgb24gdGhlIGNvbmRpdGlvbnNcbiAgICogb2YgdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgZ2V0UHJlcGFyZVBoYXNlKCkge1xuICAgIGlmICghdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCkpIHtcbiAgICAgIC8vIFN0ZXAgIzEgc2VsZWN0IGFuIG9iamVjdCB0eXBlIGlmIG5vdCB5ZXQgc2V0XG4gICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9UWVBFKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnByZXBhcmVkSXRlbS5oYXNDb250ZW50KCkpIHtcbiAgICAgIC8vIFN0ZXAgIzIgYWRkIGNvbnRlbnQgaWYgbm90IHlldCBjb250YWluZWRcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0NPTlRFTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwICMzIGVkaXQgaW5kZXhkYXRhIGFuZCBzYXZlXG4gICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGVtcGxhdGUoc2VsZWN0ZWRUeXBlT2JqZWN0KSB7XG4gICAgY29uc3QgdHlwZTogT2JqZWN0VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHNlbGVjdGVkVHlwZU9iamVjdC5uYW1lKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC5nZXRUZW1wbGF0ZXMoc2VsZWN0ZWRUeXBlT2JqZWN0Lm5hbWUpXG4gICAgICAuc3Vic2NyaWJlKCh0ZW1wbGF0ZXM6IFByZXBhcmVkSXRlbVRlbXBsYXRlW10pID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVJlcXVpcmVkID0gdGhpcy5wcmVwYXJlZEl0ZW0uc3RhdGUuY29udGVudHN0YXRlID09PSAnUkVRVUlSRUQnO1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgIGZpbGU6IHR5cGUubWF4RmlsZXMgPiAwLFxuICAgICAgICAgIHdpdGhvdXRGaWxlOiAhKHR5cGUubWluRmlsZXMgPiAwKSAmJiAhZmlsZVJlcXVpcmVkLFxuICAgICAgICAgIHRlbXBsYXRlczogdGVtcGxhdGVzIHx8IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgb2JqZWN0IHR5cGUgZG9lcyBub3Qgc3VwcG9ydCBmaWxlIHVwbG9hZCBvciB0ZW1wbGF0ZSBjb250ZW50c1xuICAgICAgICAvLyB3ZSBza2lwIGNvbnRlbnQgcGhhc2UgYW5kIG1vdmUgb24gdG8gaW5kZXhkYXRhIHBoYXNlXG4gICAgICAgIGlmICghZGF0YS5maWxlKSB7XG4gICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByZXBhcmVQaGFzZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuUEhBU0VfQ09OVEVOVCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuc2V0dXBUaXRsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFnRmlsdGVyT3B0aW9ucyA9IHRoaXMuY3JlYXRlVGFnRmlsdGVyT3B0aW9ucyh0ZW1wbGF0ZXMpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zID0ge1xuICAgICAgICAgIGNvbnRleHQ6IHtjb3VudDogdGhpcy5wcmVwYXJlUGhhc2UuZGF0YS50ZW1wbGF0ZXMubGVuZ3RofSxcbiAgICAgICAgICByb3dEYXRhOiB0aGlzLnByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlcy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ3RpdGxlJykpLFxuICAgICAgICAgIGNvbHVtbkRlZnM6IHRoaXMuY29sRGVmcyxcbiAgICAgICAgICByb3dIZWlnaHQ6IDgwXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBjcmVhdGVUYWdGaWx0ZXJPcHRpb25zKHRlbXBsYXRlczogUHJlcGFyZWRJdGVtVGVtcGxhdGVbXSkge1xuICAgIGxldCB0YWdGaWx0ZXJPcHRpb25zID0gW107XG4gICAgdGVtcGxhdGVzLmZvckVhY2godGVtcGxhdGUgPT4ge1xuICAgICAgdGVtcGxhdGUudGFncy5mb3JFYWNoKHRhZyA9PiB7XG4gICAgICAgIHRhZ0ZpbHRlck9wdGlvbnMucHVzaCh7bGFiZWw6IHRhZywgZmlsdGVyOiAobm9kZSkgPT4gbm9kZS5kYXRhLnRhZ3MuaW5jbHVkZXModGFnKSwgdmFsdWU6IHRydWV9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBVdGlscy51bmlxQnkodGFnRmlsdGVyT3B0aW9ucywgJ2xhYmVsJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIHNwZWNpZmljIHByZXBhcmUgcGhhc2UuXG4gICAqIEBwYXJhbSBwaGFzZSAtIHBoYXNlIHRvIGluaXQgKFBIQVNFX1RZUEUsIFBIQVNFX0NPTlRFTlQsIFBIQVNFX0lOREVYREFUQSlcbiAgICovXG4gIHByaXZhdGUgaW5pdFByZXBhcmVQaGFzZShwaGFzZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wcmVwYXJlUGhhc2UgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRUeXBlT2JqZWN0ID0gdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCk7XG5cbiAgICBzd2l0Y2ggKHBoYXNlKSB7XG4gICAgICAvLyBpbml0IHByZXBhcmUgcGhhc2UgZm9yIHNlbGVjdGluZyB0aGUgdGFyZ2V0IG9iamVjdCB0eXBlXG4gICAgICBjYXNlIHRoaXMuUEhBU0VfVFlQRToge1xuXG4gICAgICAgIHRoaXMucHJlcGFyZVBoYXNlID0ge1xuICAgICAgICAgIG5hbWU6IHRoaXMuUEhBU0VfVFlQRSxcbiAgICAgICAgICBkYXRhOiB0aGlzLmdldFByZXZpZXdEYXRhKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXR1cFRpdGxlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBpbml0IHByZXBhcmUgcGhhc2UgZm9yIHNldHRpbmcgdXAgY29udGVudFxuICAgICAgY2FzZSB0aGlzLlBIQVNFX0NPTlRFTlQ6IHtcblxuICAgICAgICB0aGlzLmNob29zZVRlbXBsYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA9IG51bGw7XG5cbiAgICAgICAgLy8gY2hlY2sgd2hldGhlciBvciBub3QgdGhlIHByZXBhcmVkSXRlbSBhbHJlYWR5IGNvbnRhaW5zIGEgZmlsZSBvciB0ZW1wbGF0ZVxuICAgICAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0uaGFzQ29udGVudCgpKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnByZXBhcmVkSXRlbS5zdGF0ZS50eXBlc2VsZWN0ZWRhbGxvd2VkKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc2VsZWN0ZWQgdHlwZSBpcyBub3QgYWxsb3dlZCwgd2UnbGwgZ28gYmFjayB0byB0aGUgdHlwZSBzZWxlY3Qgc3RhdGUgLi4uXG4gICAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9UWVBFKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gLi4uIG90aGVyd2lzZSB3ZSBnbyBvbiBzZXR0aW5nIGluZGV4ZGF0YVxuICAgICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0uc3RhdGUuY29udGVudHN0YXRlID09PSAnTk9DT05URU5UQUxMT1dFRCcpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0lOREVYREFUQSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGVtcGxhdGUodGhpcy5zZWxlY3RlZFR5cGVPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIGluaXQgcHJlcGFyZSBwaGFzZSBmb3IgYWRkaW5nIGluZGV4ZGF0YVxuICAgICAgY2FzZSB0aGlzLlBIQVNFX0lOREVYREFUQToge1xuXG4gICAgICAgIHRoaXMuY2hvb3NlVGVtcGxhdGUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMucHJlcGFyZWRJdGVtLnN0YXRlLnR5cGVzZWxlY3RlZGFsbG93ZWQpIHtcbiAgICAgICAgICAvLyBpZiB0aGUgc2VsZWN0ZWQgdHlwZSBpcyBub3QgYWxsb3dlZCwgd2UnbGwgZ28gYmFjayB0byB0aGUgdHlwZSBzZWxlY3Qgc3RhdGUgLi4uXG4gICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfVFlQRSk7XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICB0aGlzLnByZXBhcmVGb3JtQ29udGVudCgpO1xuXG4gICAgICAgICAgdGhpcy5wcmVwYXJlUGhhc2UgPSB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLlBIQVNFX0lOREVYREFUQSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZ2V0UHJldmlld0RhdGEoKVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5zZXR1cFRpdGxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmV2aWV3RGF0YShpbmRleD86IG51bWJlcik6IGFueSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZWRJdGVtICYmIHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzICYmIHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSBpbmRleCB8fCAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJldmlld0luZGV4OiBpbmRleCxcbiAgICAgICAgcHJldmlld0ZpbGU6IHtcbiAgICAgICAgICB1cmk6IHRoaXMucHJlcGFyZVNlcnZpY2UuZ2V0UHJldmlld1VyaSh0aGlzLnByZXBhcmVkSXRlbS5pZCwgaW5kZXgpLFxuICAgICAgICAgIHVyaVBkZjogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRQcmV2aWV3VXJpKHRoaXMucHJlcGFyZWRJdGVtLmlkLCBpbmRleCwgJ1BERicpLFxuICAgICAgICAgIG1pbWV0eXBlOiB0aGlzLnByZXBhcmVkSXRlbS5jb250ZW50c1tpbmRleF0ubWltZXR5cGUsXG4gICAgICAgICAgbWltZWdyb3VwOiB0aGlzLnByZXBhcmVkSXRlbS5jb250ZW50c1tpbmRleF0ubWltZWdyb3VwLFxuICAgICAgICAgIHBhdGg6IHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzW2luZGV4XS5wYXRoLFxuICAgICAgICAgIHNpemU6IHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzW2luZGV4XS5zaXplXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtwcmV2aWV3RmlsZTogbnVsbH07XG4gIH1cblxuICAvKipcbiAgICogU2V0dXAgdGl0bGUgZm9yIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW0gYmFzZWQgb24gdGhlXG4gICAqIGN1cnJlbnQgcHJlcGFyZSBwaGFzZS4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBwcmVwYXJlIHBoYXNlIGlzIGlkZW50aWZpZWQuXG4gICAqL1xuICBwcml2YXRlIHNldHVwVGl0bGUoKSB7XG5cbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoW1xuICAgICAgJ2VvLnByZXBhcmUubG9jYXRpb24udGl0bGUuc3lzcm9vdCcsXG4gICAgICAnZW8ucHJlcGFyZS5sb2NhdGlvbi50aXRsZS5wcmVmaXgnLFxuICAgICAgJ2VvLnByZXBhcmUuZGV0YWlscy50eXBlLnRpdGxlJyxcbiAgICAgICdlby5wcmVwYXJlLmRldGFpbHMudHlwZS5zdWJ0aXRsZScsXG4gICAgICAnZW8ucHJlcGFyZS5kZXRhaWxzLmNvbnRlbnQuc3VidGl0bGUnLFxuICAgICAgJ2VvLnByZXBhcmUuZGV0YWlscy5pbmRleGRhdGEuc3VidGl0bGUnXG4gICAgXSkuc3Vic2NyaWJlKHQgPT4ge1xuXG4gICAgICBsZXQgaGVhZGVyID0ge1xuICAgICAgICB0aXRsZTogbnVsbCxcbiAgICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgICBsYWJlbDogbnVsbCxcbiAgICAgICAgICBsaW5rOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHN1YnRpdGxlOiBudWxsXG4gICAgICB9O1xuICAgICAgc3dpdGNoICh0aGlzLnByZXBhcmVQaGFzZS5uYW1lKSB7XG4gICAgICAgIGNhc2UgdGhpcy5QSEFTRV9UWVBFOiB7XG4gICAgICAgICAgaGVhZGVyLnRpdGxlID0gdFsnZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUudGl0bGUnXTtcbiAgICAgICAgICBoZWFkZXIuc3VidGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMudHlwZS5zdWJ0aXRsZSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgdGhpcy5QSEFTRV9DT05URU5UOiB7XG4gICAgICAgICAgY29uc3QgdHlwZU9iamVjdCA9IHRoaXMucHJlcGFyZWRJdGVtLmdldFNlbGVjdGVkVHlwZU9iamVjdCgpO1xuICAgICAgICAgIGhlYWRlci50aXRsZSA9IHR5cGVPYmplY3QgPyB0eXBlT2JqZWN0LmxhYmVsIDogJyc7XG4gICAgICAgICAgaGVhZGVyLnN1YnRpdGxlID0gdFsnZW8ucHJlcGFyZS5kZXRhaWxzLmNvbnRlbnQuc3VidGl0bGUnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHRoaXMuUEhBU0VfSU5ERVhEQVRBOiB7XG4gICAgICAgICAgY29uc3QgdHlwZU9iamVjdCA9IHRoaXMucHJlcGFyZWRJdGVtLmdldFNlbGVjdGVkVHlwZU9iamVjdCgpO1xuICAgICAgICAgIGhlYWRlci50aXRsZSA9IHR5cGVPYmplY3QgPyB0eXBlT2JqZWN0LmxhYmVsIDogJyc7XG4gICAgICAgICAgaGVhZGVyLnN1YnRpdGxlID0gdFsnZW8ucHJlcGFyZS5kZXRhaWxzLmluZGV4ZGF0YS5zdWJ0aXRsZSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB1cCBsb2NhdGlvbiBpbmZvXG4gICAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LnR5cGUgPT09ICdzeXNyb290Jykge1xuICAgICAgICBoZWFkZXIubG9jYXRpb24gPSB7XG4gICAgICAgICAgbGFiZWw6IHRbJ2VvLnByZXBhcmUubG9jYXRpb24udGl0bGUuc3lzcm9vdCddLFxuICAgICAgICAgIGxpbms6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFR5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZSh0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQudHlwZSk7XG4gICAgICAgIGhlYWRlci5sb2NhdGlvbiA9IHtcbiAgICAgICAgICBsYWJlbDogYCAke3BhcmVudFR5cGUubGFiZWx9OiAke3RoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50aXRsZX1gLFxuICAgICAgICAgIGxpbms6IGAvb2JqZWN0LyR7dGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LmlkfWBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyO1xuICAgIH0pO1xuICB9XG5cbiAgc2hvd1RlbXBsYXRlU2VsZWN0b3Ioc2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuY2hvb3NlVGVtcGxhdGUgPSBzaG93O1xuICAgIHRoaXMuc2VsZWN0VGVtcGxhdGUodGhpcy5wcmVwYXJlUGhhc2UuZGF0YS50ZW1wbGF0ZXNbMF0pO1xuICB9XG5cbiAgZG93bmxvYWQoKSB7XG4gICAgaWYgKHRoaXMucHJlcGFyZVBoYXNlKSB7XG4gICAgICBjb25zdCBmaWxlID0gdGhpcy5wcmVwYXJlUGhhc2UubmFtZSA9PT0gJ2NvbnRlbnQnID8gdGhpcy5zZWxlY3RlZFRlbXBsYXRlRmlsZSA6IHRoaXMucHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGU7XG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICB0aGlzLmJhY2tlbmQuZG93bmxvYWQoZmlsZS51cmkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhc1RlbXBsYXRlQ2FwYWJpbGl0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYXBhYmlsaXRlcy5oYXNDYXBhYmlsaXR5KCd0ZW1wbGF0ZScpO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJZEZuKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUluZGV4Rm4oaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5hcHBseVNlbGVjdGlvbikge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgIC5maW5kKHRoaXMuYXBwbHlTZWxlY3Rpb24uaW4pLmZvY3VzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogUHJlcGFyZWRJdGVtKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jb21taXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wcmVwYXJlZEl0ZW0gPSByZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicHJlcGFyZURldGFpbHNfX3dyYXBwZXJcIiAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIG1haW5TcGlubmVyXCI+XG4gIDxzZWN0aW9uIGNsYXNzPVwicHJlcGFyZURldGFpbHNcIiAqbmdJZj1cInByZXBhcmVkSXRlbSAmJiBwcmVwYXJlUGhhc2U7IGVsc2Ugbm9JdGVtXCJcbiAgICBbbmdDbGFzc109XCJ7bXVsdGlmaWxlOiBwcmVwYXJlZEl0ZW0uY29udGVudGNvdW50ID4gMSwgY29tbWl0dGluZzogY29tbWl0dGluZ31cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZFwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWluZm9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZVwiPnt7aGVhZGVyLnRpdGxlfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1zdWItdGl0bGUgaC1sb2NhdGlvblwiICpuZ0lmPVwiIWhlYWRlci5sb2NhdGlvbi5saW5rOyBlbHNlIGxpbmtlZFwiPnt7aGVhZGVyLmxvY2F0aW9uLmxhYmVsfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc3ViLXRpdGxlIGgtc3VidGl0bGVcIj57e2hlYWRlci5zdWJ0aXRsZX19PC9kaXY+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNsaW5rZWQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1zdWItdGl0bGUgaC1zdWJ0aXRsZS1kZXRhaWxlZFwiPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPmVvLnByZXBhcmUubG9jYXRpb24udGl0bGUucHJlZml4PC9zcGFuPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiaGVhZGVyLmxvY2F0aW9uLmxpbmtcIj57e2hlYWRlci5sb2NhdGlvbi5sYWJlbH19PC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnRuIGJ0bi1kb3dubG9hZFwiXG4gICAgICAgICAgKm5nSWY9XCJwcmVwYXJlUGhhc2UubmFtZSA9PT0gJ2NvbnRlbnQnID8gc2VsZWN0ZWRUZW1wbGF0ZUZpbGUgOiBwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZVwiXG4gICAgICAgICAgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY29udGVudC1kb3dubG9hZC5zdmcnXCJcbiAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uYWN0aW9uLmRvd25sb2FkLmRtcy5vYmplY3QuY29udGVudC5sYWJlbCcgfCB0cmFuc2xhdGUpXCIgKGNsaWNrKT1cImRvd25sb2FkKClcIj48L2VvLWljb24+XG4gICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnRuIGJ0bi1kZWxldGVcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY190cmFzaC5zdmcnXCJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0RlbGV0ZURpYWxvZyA9IHRydWU7XCI+PC9lby1pY29uPlxuICAgICAgICA8IS0tIGJ1dHRvbnMgd2hpbGUgY2hvb3NpbmcgYSB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNob29zZVRlbXBsYXRlXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi10cGwtYWJvcnRcIiAoY2xpY2spPVwic2hvd1RlbXBsYXRlU2VsZWN0b3IoZmFsc2UpXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnRlbXBsYXRlLmFib3J0PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLXRwbC1hcHBseVwiIChjbGljayk9XCJhZGRUZW1wbGF0ZShzZWxlY3RlZFRlbXBsYXRlKVwiIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRUZW1wbGF0ZVwiXG4gICAgICAgICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS50ZW1wbGF0ZS5zZWxlY3Q8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXBhcmVQaGFzZS5uYW1lID09PSAnaW5kZXhkYXRhJ1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJlc2V0T2JqZWN0VHlwZSgpXCIgdHJhbnNsYXRlPmVvLnByZXBhcmUucmVzZXRPYmplY3Q8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjb21taXQoKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7cHJpbWFyeTogcHJlcGFyZWRJdGVtLnN0YXRlLnBhcmVudGlzcm9vdCAmJiBwcmVwYXJlZEl0ZW0uY29udGVudGNvdW50ID4gMX1cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1TdGF0ZT8uaW52YWxpZCB8fCBjb21taXR0aW5nXCIgdHJhbnNsYXRlPmVvLnByZXBhcmUuc2F2ZTwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29tbWl0KHRydWUpXCIgW2Rpc2FibGVkXT1cImZvcm1TdGF0ZT8uaW52YWxpZCB8fCBjb21taXR0aW5nXCIgY2xhc3M9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwicHJlcGFyZWRJdGVtPy5zdGF0ZS5wYXJlbnRpc3Jvb3QgJiYgcHJlcGFyZWRJdGVtPy5jb250ZW50Y291bnQgPiAxXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnNhdmVvcGVuPC9idXR0b24+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImVvLWJvZHlcIiBbbmdTd2l0Y2hdPVwicHJlcGFyZVBoYXNlLm5hbWVcIiAqbmdJZj1cIiFjb21taXR0aW5nOyBlbHNlIHNwaW5uZXJcIj5cblxuICAgICAgPCEtLSBQSEFTRSBUWVBFIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBoYXNlIHR5cGVcIiAqbmdTd2l0Y2hDYXNlPVwiJ3R5cGUnXCI+XG5cbiAgICAgICAgPCEtLSB3aXRoIHByZXZpZXcgLS0+XG4gICAgICAgIDx5dmMtc3BsaXQtdmlldyAqbmdJZj1cInByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdGaWxlOyBlbHNlIG5vcHJldmlld1wiXG4gICAgICAgICAgW2xheW91dFNldHRpbmdzSURdPVwiJ3ByZXBhcmUuZGV0YWlscy5waGFzZS50eXBlJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiMzBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpbGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZS1zZWxlY3QgZW1wdHlcIiAqbmdJZj1cInByZXBhcmVkSXRlbS50eXBlcy5sZW5ndGggPT0gMFwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICBlby5wcmVwYXJlLmRldGFpbHMudHlwZS5lbXB0eTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGUtc2VsZWN0IGVtcHR5XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFwcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkYWxsb3dlZCAmJiBwcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInt0eXBlOiBwcmVwYXJlZEl0ZW0uc2VsZWN0ZWR0eXBlLmxhYmVsLCBmaWxlbmFtZTogZ2V0RmlsZU5hbWVzKHByZXBhcmVkSXRlbSl9XCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUubm90YWxsb3dlZDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBwcmVwYXJlZEl0ZW0udHlwZXM7IHRyYWNrQnk6IHRyYWNrQnlJZEZuXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPYmplY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHlwZS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidHlwZS5pY29uLmlkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3R5cGUuZGVzY3JpcHRpb259fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuY29udGVudHMudGl0bGU8L2gyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIHByZXBhcmVkSXRlbS5jb250ZW50czsgdHJhY2tCeTogdHJhY2tCeUluZGV4Rm47IGluZGV4IGFzIGlkeDtcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3SW5kZXggPT0gaWR4fVwiIChjbGljayk9XCJzZXRQcmV2aWV3VXJpKGlkeClcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Y29udGVudC5wYXRofX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ0biBidG4tZGVsZXRlLWNvbnRlbnRcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY190cmFzaC5zdmcnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dDb250ZW50RGVsZXRlRGlhbG9nID0gdHJ1ZTsgZGVsZXRlZENvbnRlbnRJbmRleCA9IGlkeDtcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGVudC5leGlzdHNjb3VudCA+IDBcIiBjbGFzcz1cImF0dGVudGlvblwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3snZW8ucHJlcGFyZS5jb250ZW50LmV4aXN0c2NvdW50Lm1lc3NhZ2UnfHRyYW5zbGF0ZTogKHtjb3VudDogY29udGVudC5leGlzdHNjb3VudH0pfX1cIj4hXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiNzBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1tZWRpYS13cmFwXCI+XG4gICAgICAgICAgICAgIDxlby1wcmVwYXJlLWNvbnRlbnQtZXhpc3RzLWluZm8gW2NvbnRlbnRdPVwicHJlcGFyZWRJdGVtLmNvbnRlbnRzW3ByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdJbmRleF1cIj5cbiAgICAgICAgICAgICAgPC9lby1wcmVwYXJlLWNvbnRlbnQtZXhpc3RzLWluZm8+XG4gICAgICAgICAgICAgIDxlby1tZWRpYSBbZG1zT2JqZWN0XT1cInBzZXVkb0Rtc09iamVjdFwiIFtwcmV2aWV3RmlsZV09XCJwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZVwiPjwvZW8tbWVkaWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3l2Yy1zcGxpdC12aWV3PlxuXG4gICAgICAgIDwhLS0gd2l0aG91dCBwcmV2aWV3IC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vcHJldmlldz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWxlc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC10eXBlLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBwcmVwYXJlZEl0ZW0udHlwZXM7IHRyYWNrQnk6IHRyYWNrQnlJZEZuXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T2JqZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0eXBlLWljb25cIj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidHlwZS5pY29uLmlkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t0eXBlLmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUEhBU0UgQ09OVEVOVCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwaGFzZSBjb250ZW50XCIgKm5nU3dpdGNoQ2FzZT1cIidjb250ZW50J1wiPlxuXG4gICAgICAgIDwhLS0gcGFuZWwgZm9yIHNlbGVjdGluZyBhIHRlbXBsYXRlIHRvIGJlIHVzZWQgYXMgaXRlbXMgY29udGVudCAtLT5cbiAgICAgICAgPHl2Yy1zcGxpdC12aWV3ICpuZ0lmPVwiY2hvb3NlVGVtcGxhdGU7IGVsc2UgYXR0YWNoXCIgW2xheW91dFNldHRpbmdzSURdPVwiJ3ByZXBhcmUuZGV0YWlscy5waGFzZS5jb250ZW50J1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiNDBcIj5cbiAgICAgICAgICAgIDwhLS0gbGlzdCBvZiBhdmFpbGFibGUgdGVtcGxhdGVzIC0tPlxuICAgICAgICAgICAgPGVvLWxpc3QtY29udGFpbmVyICNlb0xpc3QgW2xvYWRpbmddPVwiZmFsc2VcIiBjbGFzcz1cInRlbXBsYXRlc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJlby1oZWFkZXItaWNvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3RlbXBsYXRlLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLWhlYWRlci1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyLXRpdGxlXCIgdHJhbnNsYXRlPmVvLnByZXBhcmUudGVtcGxhdGUubGlzdC50aXRsZTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXItYWN0aW9uc1wiPlxuXG4gICAgICAgICAgICAgICAgICA8ZW8tb3ZlcmxheSAjb0ZpbHRlciBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19maWx0ZXIuc3ZnJ1wiIFtpY29uQ2xhc3NdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvdmVybGF5LWZpbHRlclwiIFt0aXRsZV09XCInZW8ubGlzdC5maWx0ZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGFjdGl2ZSk9XCJvRmlsdGVyLm9uQWN0aXZlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxlby1jdXN0b20tZmlsdGVyICNjRmlsdGVyIChjaGFuZ2UpPVwiY0ZpbHRlci51cGRhdGVHcmlkKGVvTGlzdC5lb0dyaWRTdWJqZWN0LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYWN0aXZlKT1cIm9GaWx0ZXIub25BY3RpdmVDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZW8tdGV4dC1maWx0ZXIgW3RpdGxlXT1cIidlby5wcmVwYXJlLnRlbXBsYXRlLmZpbHRlci50ZXh0LnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0Y2hGaWVsZHNdPVwiWyd0aXRsZScsICdkZXNjcmlwdGlvbicsICd0YWdzJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlby5wcmVwYXJlLnRlbXBsYXRlLmZpbHRlci50ZXh0LnRpdGxlJ1wiPjwvZW8tdGV4dC1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPGVvLXNldC1maWx0ZXIgW29wZXJhdG9yXT1cIidPUidcIiBbdGl0bGVdPVwiJ2VvLnByZXBhcmUudGVtcGxhdGUuZmlsdGVyLnNldC50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWdGaWx0ZXJPcHRpb25zPy5sZW5ndGhcIiBbb3B0aW9uc109XCJ0YWdGaWx0ZXJPcHRpb25zXCI+PC9lby1zZXQtZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICA8L2VvLWN1c3RvbS1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICA8L2VvLW92ZXJsYXk+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPGVvLWdyaWQgI2VvR3JpZCAqbmdJZj1cImdyaWRPcHRpb25zPy5yb3dEYXRhXCIgW2dyaWRPcHRpb25zXT1cImdyaWRPcHRpb25zXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cInRydWVcIiBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiIFtzZWxlY3Rpb25MaW1pdF09XCIxXCJcbiAgICAgICAgICAgICAgICAgIChlb0dyaWRTZWxlY3Rpb25DaGFuZ2VkKT1cInNlbGVjdFRlbXBsYXRlKCRldmVudFswXSlcIj5cbiAgICAgICAgICAgICAgICA8L2VvLWdyaWQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9lby1saXN0LWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI2MFwiPlxuICAgICAgICAgICAgPCEtLSBwcmV2aWV3IG9mIHNlbGVjdGVkIHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgPGVvLW1lZGlhIFtkbXNPYmplY3RdPVwicHNldWRvRG1zT2JqZWN0XCIgW3ByZXZpZXdGaWxlXT1cInNlbGVjdGVkVGVtcGxhdGVGaWxlXCI+PC9lby1tZWRpYT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3l2Yy1zcGxpdC12aWV3PlxuXG4gICAgICAgIDwhLS0gYWRkIGNvbnRlbnQgZ2VuZXJhbCBvdmVydmlldyAodXBsb2FkLCB0ZW1wbGF0ZSwgbm9uZSkgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjYXR0YWNoPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9cIiAqbmdJZj1cIiF1cGxvYWRJblByb2dyZXNzXCIgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC5pbmZvPC9kaXY+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgI2ZpbGUgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlTGlzdGVuZXIoJGV2ZW50LnRhcmdldC5maWxlcylcIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50c1wiICpuZ0lmPVwiIXVwbG9hZEluUHJvZ3Jlc3M7IGVsc2UgdXBsb2Fkc3Bpbm5lclwiPlxuXG4gICAgICAgICAgICA8IS0tIHVwbG9hZCBhIGZpbGUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudCBhdHQtZmlsZVwiICpuZ0lmPVwicHJlcGFyZVBoYXNlLmRhdGEuZmlsZVwiIChjbGljayk9XCJ1cGxvYWQoKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nXCI+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZmlsZV91cGxvYWQuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50LnVwbG9hZC50aXRsZTwvaDM+XG4gICAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQudXBsb2FkLmRlc2M8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBzZWxlY3QgYSB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50IGF0dC10bXBsXCIgKm5nSWY9XCJwcmVwYXJlUGhhc2UuZGF0YS50ZW1wbGF0ZXMubGVuZ3RoID4gMCAmJiBoYXNUZW1wbGF0ZUNhcGFiaWxpdHkoKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzaG93VGVtcGxhdGVTZWxlY3Rvcih0cnVlKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nXCI+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfcHJlcGFyZV9hZGQuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50LnRlbXBsYXRlLnRpdGxlPC9oMz5cbiAgICAgICAgICAgICAgPHAgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC50ZW1wbGF0ZS5kZXNjPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gbm8gZmlsZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50IGF0dC1ub25lXCIgKm5nSWY9XCJwcmVwYXJlUGhhc2UuZGF0YS53aXRob3V0RmlsZVwiIChjbGljayk9XCJub0ZpbGUoKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nXCI+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfbm8tZmlsZS5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQubm9maWxlLnRpdGxlPC9oMz5cbiAgICAgICAgICAgICAgPHAgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC5ub2ZpbGUuZGVzYzwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIHVwbG9hZCBwcm9ncmVzcyBpbmRpY2F0b3IgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdXBsb2Fkc3Bpbm5lcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWluZGljYXRvclwiPlxuICAgICAgICAgICAgPGVvLWxvYWRpbmctc3Bpbm5lciBbc2l6ZV09XCInbGFyZ2UnXCI+PC9lby1sb2FkaW5nLXNwaW5uZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQSEFTRSBJTkRFWERBVEEgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwicGhhc2UgaW5kZXhkYXRhXCIgKm5nU3dpdGNoQ2FzZT1cIidpbmRleGRhdGEnXCI+XG5cbiAgICAgICAgPCEtLSBmb3JtIGFuZCBwcmV2aWV3IC0tPlxuICAgICAgICA8eXZjLXNwbGl0LXZpZXcgKm5nSWY9XCJwcmVwYXJlZEl0ZW0uY29udGVudHM7IGVsc2UganVzdGZvcm1cIiBbbGF5b3V0U2V0dGluZ3NJRF09XCIncHJlcGFyZS5zdGF0ZSdcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgeXZjU3BsaXRBcmVhIFtzaXplXT1cIjUwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWxlc1wiPlxuXG4gICAgICAgICAgICAgIDwhLS0gaW5kZXhkYXRhIGZvcm0gLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJqdXN0Zm9ybVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gbGlzdCBvZiBjb250ZW50cyAoaW4gY2FzZSBvZiBidWxrIHVwbG9hZCkgdGhhdCBjYW4gYmUgcHJldmlld2VkIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1zZWxlY3RcIj5cblxuICAgICAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLmNvbnRlbnRzLnRpdGxlPC9oMj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBwcmVwYXJlZEl0ZW0uY29udGVudHM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleEZuOyBpbmRleCBhcyBpZHhcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3SW5kZXggPT09IGlkeH1cIiAoY2xpY2spPVwic2V0UHJldmlld1VyaShpZHgpXCI+XG4gICAgICAgICAgICAgICAgICB7e2NvbnRlbnQucGF0aH19IDxzcGFuICpuZ0lmPVwiY29udGVudC5leGlzdHNjb3VudCA+IDBcIiBjbGFzcz1cImF0dGVudGlvblwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3snZW8ucHJlcGFyZS5jb250ZW50LmV4aXN0c2NvdW50Lm1lc3NhZ2UnfHRyYW5zbGF0ZTogKHtjb3VudDogY29udGVudC5leGlzdHNjb3VudH0pfX1cIj4hPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgeXZjU3BsaXRBcmVhIFtzaXplXT1cIjUwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8tbWVkaWEtd3JhcFwiPlxuICAgICAgICAgICAgICA8ZW8tcHJlcGFyZS1jb250ZW50LWV4aXN0cy1pbmZvIFtjb250ZW50XT1cInByZXBhcmVkSXRlbS5jb250ZW50c1twcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3SW5kZXhdXCI+XG4gICAgICAgICAgICAgIDwvZW8tcHJlcGFyZS1jb250ZW50LWV4aXN0cy1pbmZvPlxuICAgICAgICAgICAgICA8ZW8tbWVkaWEgW2Rtc09iamVjdF09XCJwc2V1ZG9EbXNPYmplY3RcIiBbcHJldmlld0ZpbGVdPVwicHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGVcIj48L2VvLW1lZGlhPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC95dmMtc3BsaXQtdmlldz5cblxuICAgICAgICA8IS0tIGp1c3QgdGhlIGZvcm0gLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjanVzdGZvcm0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyIHNpdHVhdGlvbi1jcmVhdGVcIiAqbmdJZj1cImZvcm1PcHRpb25zXCI+XG4gICAgICAgICAgICA8ZW8tb2JqZWN0LWZvcm0gI2Zvcm0gW2Zvcm1PcHRpb25zXT1cImZvcm1PcHRpb25zXCIgKHN0YXR1c0NoYW5nZWQpPVwib25Gb3JtU3RhdHVzQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L2VvLW9iamVjdC1mb3JtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cblxuICA8bmctdGVtcGxhdGUgI3NwaW5uZXI+XG4gICAgPGRpdiBjbGFzcz1cImVvLWJvZHlcIj5cbiAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgc2l6ZT1cIm1lZGl1bVwiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNtYWluU3Bpbm5lcj5cbiAgPGRpdiBjbGFzcz1cInByZXBhcmVEZXRhaWxzX19tYWluLXNwaW5uZXJcIj5cbiAgICA8ZW8tbG9hZGluZy1zcGlubmVyIHNpemU9XCJtZWRpdW1cIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cbjxuZy10ZW1wbGF0ZSAjbm9JdGVtPlxuICA8ZW8tZXJyb3ItbWVzc2FnZSBbZW1wdHlTdGF0ZV09XCJ7aWNvbjogZW1wdHlTdGF0ZS5pY29uLCB0ZXh0OiBlbXB0eVN0YXRlLnRleHQsIGNsYXNzTmFtZTogZW1wdHlTdGF0ZS5jbGFzc05hbWV9XCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmVycm9yXCI+PC9uZy1jb250ZW50PlxuICA8L2VvLWVycm9yLW1lc3NhZ2U+XG48L25nLXRlbXBsYXRlPlxuXG48ZW8tZGlhbG9nIFt0aXRsZV09XCInZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cudGl0bGUnIHwgdHJhbnNsYXRlXCIgWyh2aXNpYmxlKV09XCJzaG93RGVsZXRlRGlhbG9nXCJcbiAgW2ZvY3VzT25TaG93XT1cImZhbHNlXCIgW21pbldpZHRoXT1cIjQwMFwiIFtzdHlsZUNsYXNzXT1cIidwcmVwYXJlLWRlbGV0ZV9fZGlhbG9nJ1wiPlxuXG4gIDxkaXY+e3snZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cubWVzc2FnZScgfCB0cmFuc2xhdGV9fTwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucyBwcmVwYXJlLWRlbGV0ZS0tYWN0aW9uLWJ1dHRvbnMgZmxleC1yb3dcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBjYW5jZWxcIiAoY2xpY2spPVwic2hvd0RlbGV0ZURpYWxvZyA9IGZhbHNlXCJcbiAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmRpYWxvZy5jYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjY29uZmlybURlbGV0ZSAoY2xpY2spPVwicmVtb3ZlSXRlbShwcmVwYXJlZEl0ZW0pXCIgY2xhc3M9XCJidXR0b24gcHJpbWFyeVwiXG4gICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cub2s8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2VvLWRpYWxvZz5cblxuPGVvLWRpYWxvZyBbdGl0bGVdPVwiJ2VvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuY29udGVudC5kaWFsb2cudGl0bGUnIHwgdHJhbnNsYXRlXCIgWyh2aXNpYmxlKV09XCJzaG93Q29udGVudERlbGV0ZURpYWxvZ1wiXG4gIFttaW5XaWR0aF09XCI0MDBcIiBbc3R5bGVDbGFzc109XCIncHJlcGFyZS1kZWxldGVfX2RpYWxvZydcIj5cblxuICA8ZGl2Pnt7J2VvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuY29udGVudC5kaWFsb2cubWVzc2FnZScgfCB0cmFuc2xhdGU6ICh7Y29udGVudFBhdGg6IHByZXBhcmVkSXRlbT8uY29udGVudHMgP1xuICAgIHByZXBhcmVkSXRlbT8uY29udGVudHNbZGVsZXRlZENvbnRlbnRJbmRleF0/LnBhdGggOiAnJ30pfX08L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMgcHJlcGFyZS1kZWxldGUtLWFjdGlvbi1idXR0b25zIGZsZXgtcm93XCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cInNob3dDb250ZW50RGVsZXRlRGlhbG9nID0gZmFsc2VcIlxuICAgICAgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLmNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNjb25maXJtQ29udGVudERlbGV0ZSAoY2xpY2spPVwicmVtb3ZlSXRlbUNvbnRlbnQocHJlcGFyZWRJdGVtLCBkZWxldGVkQ29udGVudEluZGV4KVwiXG4gICAgICBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCIgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLm9rPC9idXR0b24+XG4gIDwvZGl2PlxuPC9lby1kaWFsb2c+XG4iXX0=