@valtimo/zgw 12.3.1 → 12.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (19) hide show
  1. package/esm2022/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.mjs +3 -3
  2. package/esm2022/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.mjs +56 -12
  3. package/esm2022/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.mjs +3 -3
  4. package/esm2022/lib/modules/documenten-api/components/documenten-api-link-upload-process/dossier-management-link-process.component.mjs +3 -3
  5. package/esm2022/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +6 -4
  6. package/esm2022/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.mjs +3 -3
  7. package/esm2022/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.mjs +3 -3
  8. package/esm2022/lib/modules/documenten-api/components/documenten-api-version/documenten-api-version.component.mjs +3 -3
  9. package/esm2022/lib/modules/haalcentraal-brp/components/cases-list/cases-list.component.mjs +3 -3
  10. package/esm2022/lib/modules/objecten-api/components/object-type/object-type.component.mjs +3 -3
  11. package/esm2022/lib/modules/objecten-api/components/zaakobjecten/zaakobjecten.component.mjs +3 -3
  12. package/esm2022/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.mjs +3 -3
  13. package/esm2022/lib/modules/zaken-api/components/zaken-api-zaaktype-link/zaken-api-zaaktype-link.component.mjs +3 -3
  14. package/fesm2022/valtimo-zgw.mjs +82 -36
  15. package/fesm2022/valtimo-zgw.mjs.map +1 -1
  16. package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts +11 -2
  17. package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts.map +1 -1
  18. package/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
  19. package/package.json +1 -1
@@ -17,7 +17,7 @@ import { CommonModule } from '@angular/common';
17
17
  import { Component, ViewChild } from '@angular/core';
18
18
  import { Filter16, TagGroup16, Upload16 } from '@carbon/icons';
19
19
  import { TranslateModule } from '@ngx-translate/core';
20
- import { CarbonListModule, ConfirmationModalModule, ViewType, } from '@valtimo/components';
20
+ import { CarbonListModule, ConfirmationModalModule, DEFAULT_PAGINATION, DEFAULT_PAGINATOR_CONFIG, ViewType, } from '@valtimo/components';
21
21
  import { ButtonModule, DialogModule, IconModule } from 'carbon-components-angular';
22
22
  import { BehaviorSubject, combineLatest, of, ReplaySubject, Subject, Subscription, } from 'rxjs';
23
23
  import { catchError, filter, map, switchMap, take, tap } from 'rxjs/operators';
@@ -36,6 +36,9 @@ import * as i8 from "../../services";
36
36
  import * as i9 from "@angular/common";
37
37
  import * as i10 from "@valtimo/components";
38
38
  export class DossierDetailTabDocumentenApiDocumentsComponent {
39
+ get sortState$() {
40
+ return this._sort$.pipe(map(sortValue => this.getSortStateFromSortString(sortValue?.sort)));
41
+ }
39
42
  constructor(route, router, uploadProviderService, downloadService, translateService, configService, userProviderService, iconService, documentenApiDocumentService, documentenApiColumnService, documentenApiVersionService) {
40
43
  this.route = route;
41
44
  this.router = router;
@@ -71,7 +74,9 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
71
74
  ...(column.key === DOCUMENTEN_COLUMN_KEYS.CREATIEDATUM && { format: 'DD-MM-YYYY' }),
72
75
  sortable: column.sortable && supportedDocumentenApiFeatures.supportsSortableColumns,
73
76
  }));
74
- }), tap(() => this.fieldsLoading$.next(false)));
77
+ }), tap(() => {
78
+ this.fieldsLoading$.next(false);
79
+ }));
75
80
  this.actionItems = [
76
81
  {
77
82
  label: 'document.download',
@@ -106,8 +111,13 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
106
111
  this.fieldsLoading$ = new BehaviorSubject(true);
107
112
  this.loading$ = combineLatest([this._itemsLoading$, this.fieldsLoading$]).pipe(map(([itemsLoading, fieldsLoading]) => itemsLoading || fieldsLoading));
108
113
  this.filter$ = new ReplaySubject();
114
+ this.pagination$ = new BehaviorSubject(DEFAULT_PAGINATION);
109
115
  this._refetch$ = new BehaviorSubject(null);
110
116
  this._sort$ = new ReplaySubject();
117
+ this.paginatorConfig = {
118
+ ...DEFAULT_PAGINATOR_CONFIG,
119
+ itemsPerPageOptions: [5, 10, 20, 50, 100],
120
+ };
111
121
  this.relatedFiles$ = combineLatest([
112
122
  this.documentId$,
113
123
  this.route.queryParamMap,
@@ -116,6 +126,10 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
116
126
  this.documentenApiDocumentService.getFilteredZakenApiDocuments(documentId, queryParams['params']),
117
127
  this.translateService.stream('key'),
118
128
  ])), map(([relatedFiles]) => {
129
+ this.pagination$.next({
130
+ ...this.pagination$.getValue(),
131
+ collectionSize: relatedFiles.totalElements,
132
+ });
119
133
  const translatedFiles = relatedFiles?.content?.map(file => ({
120
134
  ...file,
121
135
  createdBy: file.createdBy || this.translateService.instant('list.automaticallyGenerated'),
@@ -136,7 +150,7 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
136
150
  this.iconService.register(Filter16);
137
151
  }
138
152
  ngOnInit() {
139
- this.setInitialFilterAndSort();
153
+ this.setInitialParams();
140
154
  this.setUploadProcessLinked();
141
155
  this.isUserAdmin();
142
156
  this.iconService.registerAll([Filter16, TagGroup16, Upload16]);
@@ -205,6 +219,7 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
205
219
  .subscribe(() => {
206
220
  this.refetchDocuments();
207
221
  this.filter$.next(null);
222
+ this.pagination$.next(DEFAULT_PAGINATION);
208
223
  this.uploading$.next(false);
209
224
  this.fileToBeUploaded$.next(null);
210
225
  });
@@ -237,11 +252,20 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
237
252
  onRowClick(event) {
238
253
  this.downloadDocument(event, false);
239
254
  }
255
+ onPaginationClicked(page) {
256
+ this.pagination$.next({ ...this.pagination$.getValue(), page });
257
+ }
258
+ onPaginationSet(size) {
259
+ const { collectionSize, page } = this.pagination$.getValue();
260
+ const resetPage = Math.ceil(+collectionSize / size) <= +page && +collectionSize > 0;
261
+ this.pagination$.next({ ...this.pagination$.getValue(), size, ...(resetPage && { page: 1 }) });
262
+ }
240
263
  onUploadButtonClick() {
241
264
  this.fileInput.nativeElement.click();
242
265
  }
243
266
  onFilterEvent(filter) {
244
267
  this.filter$.next(filter);
268
+ this.pagination$.next({ ...this.pagination$.getValue(), ...DEFAULT_PAGINATION });
245
269
  }
246
270
  onSortChanged(sortState) {
247
271
  this._sort$.next(sortState.isSorting
@@ -265,9 +289,11 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
265
289
  this.documentId$,
266
290
  this.filter$,
267
291
  this._sort$,
268
- ]).subscribe(([definitionName, documentId, filter, sort]) => {
292
+ this.pagination$,
293
+ ]).subscribe(([definitionName, documentId, filter, sort, pagination]) => {
294
+ const { size, page } = pagination;
269
295
  this.router.navigate([`/dossiers/${definitionName}/document/${documentId}/documents`], {
270
- queryParams: { ...filter, ...sort },
296
+ queryParams: { ...filter, ...sort, size, page: page - 1 },
271
297
  });
272
298
  }));
273
299
  }
@@ -283,20 +309,38 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
283
309
  this.uploadProcessLinked = linked;
284
310
  });
285
311
  }
286
- setInitialFilterAndSort() {
312
+ setInitialParams() {
287
313
  this.route.queryParamMap
288
314
  .pipe(take(1), map(queryParams => {
289
- const { sort, ...filter } = queryParams['params'];
290
- return { sort, filter };
315
+ const { sort, size, page, ...filter } = queryParams['params'];
316
+ return { sort, filter, size, page };
291
317
  }))
292
- .subscribe(({ filter, sort }) => {
318
+ .subscribe(({ filter, sort, size, page }) => {
293
319
  this._sort$.next({ sort });
294
320
  this.filter$.next(filter);
321
+ this.pagination$.next({
322
+ ...this.pagination$.getValue(),
323
+ size: +size,
324
+ page: +(page ?? 0) + 1,
325
+ });
295
326
  this.openQueryParamsSubscription();
296
327
  });
297
328
  }
329
+ getSortStateFromSortString(sortString) {
330
+ const splitString = sortString && sortString.split(',');
331
+ if (splitString && splitString?.length > 1) {
332
+ return {
333
+ isSorting: true,
334
+ state: {
335
+ name: splitString[0],
336
+ direction: splitString[1],
337
+ },
338
+ };
339
+ }
340
+ return null;
341
+ }
298
342
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTabDocumentenApiDocumentsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.UploadProviderService }, { token: i2.DownloadService }, { token: i3.TranslateService }, { token: i4.ConfigService }, { token: i5.UserProviderService }, { token: i6.IconService }, { token: i7.DocumentenApiDocumentService }, { token: i8.DocumentenApiColumnService }, { token: i8.DocumentenApiVersionService }], target: i0.ɵɵFactoryTarget.Component }); }
299
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierDetailTabDocumentenApiDocumentsComponent, isStandalone: true, selector: "valtimo-dossier-detail-tab-documenten-api-documents", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "translationTemplate", first: true, predicate: ["translationTemplate"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<div\n class=\"carbon-document-table-wrapper\"\n *ngIf=\"{\n loading: loading$ | async,\n fieldsLoading: fieldsLoading$ | async,\n uploading: uploading$ | async,\n relatedFiles: relatedFiles$ | async,\n fields: fields$ | async,\n supportedDocumentenApiFeatures: supportedDocumentenApiFeatures$ | async,\n } as obs\"\n>\n @if ((!obs.fieldsLoading && obs.fields.length) || obs.fieldsLoading) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [items]=\"obs.relatedFiles\"\n [fields]=\"obs.fields\"\n [loading]=\"obs.loading\"\n (rowClicked)=\"onRowClick($event)\"\n (sortChanged)=\"\n obs?.supportedDocumentenApiFeatures?.supportsSortableColumns && onSortChanged($event)\n \"\n hideColumnHeader\n >\n <div carbonToolbarContent>\n <input\n [accept]=\"acceptedFiles\"\n (change)=\"onFileSelected($event)\"\n hidden\n type=\"file\"\n #fileInput\n />\n\n <button\n *ngIf=\"obs?.supportedDocumentenApiFeatures?.supportsFilterableColumns\"\n [cdsOverflowMenu]=\"overflowFilter\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"noResults\"></ng-container>\n </valtimo-carbon-list>\n } @else {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'zgw.documents.noColumns.description' | translate\"\n [title]=\"'zgw.documents.noColumns.title' | translate\"\n ></valtimo-no-results>\n }\n\n <valtimo-documenten-api-metadata-modal\n [open]=\"showUploadModal$ | async\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [isEditMode]=\"isEditMode$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n (modalClose)=\"closeMetadataModal()\"\n (metadata)=\"metadataSet($event)\"\n ></valtimo-documenten-api-metadata-modal>\n</div>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n contentTranslationKey=\"dossier.documenten.deleteConfirmationModal.content\"\n confirmButtonType=\"danger\"\n titleTranslationKey=\"dossier.documenten.deleteConfirmationModal.title\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n (confirmEvent)=\"deleteDocument()\"\n>\n</valtimo-confirmation-modal>\n\n<ng-template #downloadButton let-index=\"index\" let-item=\"item\">\n <div\n *ngIf=\"{isDownloading: indexesIncludeIndex(downloadingFileIndexes$ | async, index)} as vars\"\n class=\"download-button-container\"\n >\n <button\n *ngIf=\"!vars.isDownloading\"\n cdsButton=\"primary\"\n size=\"sm\"\n (click)=\"downloadDocument(item, index)\"\n >\n {{ 'interface.download' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n\n <cds-loading size=\"sm\" *ngIf=\"vars.isDownloading\"></cds-loading>\n </div>\n</ng-template>\n\n<ng-template #noResults>\n @if ((filter$ | async | keyvalue)?.length) {\n <valtimo-no-results\n [action]=\"resetFilterButton\"\n [description]=\"'zgw.documents.noResults.filterDescription' | translate\"\n [title]=\"'zgw.documents.noResults.filterTitle' | translate\"\n ></valtimo-no-results>\n } @else if (showZaakLinkWarning && isAdmin) {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'dossier.documenten.noZaakFound' | translate\"\n [title]=\"'dossier.documenten.noZaakFoundTitle' | translate\"\n ></valtimo-no-results>\n } @else {\n <valtimo-no-results\n [action]=\"uploadButton\"\n [description]=\"'dossier.documenten.noFiles' | translate\"\n [title]=\"'dossier.documenten.noFilesTitle' | translate\"\n ></valtimo-no-results>\n }\n</ng-template>\n\n<ng-template #overflowFilter>\n <valtimo-dossier-detail-tab-documenten-api-filter\n [prefillFilter]=\"filter$ | async\"\n (filterEvent)=\"onFilterEvent($event)\"\n ></valtimo-dossier-detail-tab-documenten-api-filter>\n</ng-template>\n\n<ng-template #resetFilterButton>\n <button cdsButton=\"primary\" (click)=\"onFilterEvent(null)\">\n {{ 'Reset filter' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #uploadButton let-disabled=\"disabled\">\n <button\n [disabled]=\"(uploadProcessLinkedSet && !uploadProcessLinked) || showZaakLinkWarning || disabled\"\n [vTooltip]=\"getUploadButtonTooltip() | translate\"\n (click)=\"onUploadButtonClick()\"\n cdsButton=\"primary\"\n >\n {{ 'Upload' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #translationTemplate let-data=\"data\">\n {{ 'document.' + data.item[data.key] | translate }}\n</ng-template>\n\n<ng-template #navigateToCaseAdminButton>\n <button (click)=\"onNavigateToCaseAdminClick()\" cdsButton=\"primary\">\n {{ 'dossier.documenten.navigateToCaseAdmin' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"settings\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: [".hidden{display:none}.loading-container{padding:var(--cds-grid-margin);display:flex;align-items:center;justify-content:center}.carbon-document-table-wrapper{margin:0}.documenten-api-documents-filesize-template{text-align:right}::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i10.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i10.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: DocumentenApiMetadataModalComponent, selector: "valtimo-documenten-api-metadata-modal", inputs: ["disabled$", "file$", "author", "confidentialityLevel", "description", "disableAuthor", "disableConfidentialityLevel", "disableDescription", "disableDocumentTitle", "disableDocumentType", "disableFilename", "disableLanguage", "disableStatus", "disableTrefwoorden", "documentTitle", "documentType", "filename", "isEditMode", "language", "open", "status", "supportsTrefwoorden"], outputs: ["metadata", "modalClose"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i6.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: DocumentenApiFilterComponent, selector: "valtimo-dossier-detail-tab-documenten-api-filter", outputs: ["filterEvent"] }, { kind: "ngmodule", type: DialogModule }, { kind: "directive", type: i6.OverflowMenuDirective, selector: "[cdsOverflowMenu], [ibmOverflowMenu]", inputs: ["ibmOverflowMenu", "cdsOverflowMenu", "flip", "offset", "wrapperClass", "customPane"], exportAs: ["overflowMenu"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i10.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }] }); }
343
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierDetailTabDocumentenApiDocumentsComponent, isStandalone: true, selector: "valtimo-dossier-detail-tab-documenten-api-documents", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "translationTemplate", first: true, predicate: ["translationTemplate"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<div\n class=\"carbon-document-table-wrapper\"\n *ngIf=\"{\n loading: loading$ | async,\n fieldsLoading: fieldsLoading$ | async,\n uploading: uploading$ | async,\n relatedFiles: relatedFiles$ | async,\n fields: fields$ | async,\n supportedDocumentenApiFeatures: supportedDocumentenApiFeatures$ | async,\n pagination: pagination$ | async,\n sortState: sortState$ | async,\n } as obs\"\n>\n @if ((!obs.fieldsLoading && obs.fields.length) || obs.fieldsLoading) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [items]=\"obs.relatedFiles\"\n [fields]=\"obs.fields\"\n [initialSortState]=\"obs.sortState\"\n [loading]=\"obs.loading\"\n [pagination]=\"obs.pagination\"\n [paginatorConfig]=\"paginatorConfig\"\n paginationIdentifier=\"documentenApi\"\n (rowClicked)=\"onRowClick($event)\"\n (sortChanged)=\"\n obs?.supportedDocumentenApiFeatures?.supportsSortableColumns && onSortChanged($event)\n \"\n (paginationClicked)=\"onPaginationClicked($event)\"\n (paginationSet)=\"onPaginationSet($event)\"\n hideColumnHeader\n >\n <div carbonToolbarContent>\n <input\n [accept]=\"acceptedFiles\"\n (change)=\"onFileSelected($event)\"\n hidden\n type=\"file\"\n #fileInput\n />\n\n <button\n *ngIf=\"obs?.supportedDocumentenApiFeatures?.supportsFilterableColumns\"\n [cdsOverflowMenu]=\"overflowFilter\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"noResults\"></ng-container>\n </valtimo-carbon-list>\n } @else {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'zgw.documents.noColumns.description' | translate\"\n [title]=\"'zgw.documents.noColumns.title' | translate\"\n ></valtimo-no-results>\n }\n\n <valtimo-documenten-api-metadata-modal\n [open]=\"showUploadModal$ | async\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [isEditMode]=\"isEditMode$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n (modalClose)=\"closeMetadataModal()\"\n (metadata)=\"metadataSet($event)\"\n ></valtimo-documenten-api-metadata-modal>\n</div>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n contentTranslationKey=\"dossier.documenten.deleteConfirmationModal.content\"\n confirmButtonType=\"danger\"\n titleTranslationKey=\"dossier.documenten.deleteConfirmationModal.title\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n (confirmEvent)=\"deleteDocument()\"\n>\n</valtimo-confirmation-modal>\n\n<ng-template #downloadButton let-index=\"index\" let-item=\"item\">\n <div\n *ngIf=\"{isDownloading: indexesIncludeIndex(downloadingFileIndexes$ | async, index)} as vars\"\n class=\"download-button-container\"\n >\n <button\n *ngIf=\"!vars.isDownloading\"\n cdsButton=\"primary\"\n size=\"sm\"\n (click)=\"downloadDocument(item, index)\"\n >\n {{ 'interface.download' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n\n <cds-loading size=\"sm\" *ngIf=\"vars.isDownloading\"></cds-loading>\n </div>\n</ng-template>\n\n<ng-template #noResults>\n @if ((filter$ | async | keyvalue)?.length) {\n <valtimo-no-results\n [action]=\"resetFilterButton\"\n [description]=\"'zgw.documents.noResults.filterDescription' | translate\"\n [title]=\"'zgw.documents.noResults.filterTitle' | translate\"\n ></valtimo-no-results>\n } @else if (showZaakLinkWarning && isAdmin) {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'dossier.documenten.noZaakFound' | translate\"\n [title]=\"'dossier.documenten.noZaakFoundTitle' | translate\"\n ></valtimo-no-results>\n } @else {\n <valtimo-no-results\n [action]=\"uploadButton\"\n [description]=\"'dossier.documenten.noFiles' | translate\"\n [title]=\"'dossier.documenten.noFilesTitle' | translate\"\n ></valtimo-no-results>\n }\n</ng-template>\n\n<ng-template #overflowFilter>\n <valtimo-dossier-detail-tab-documenten-api-filter\n [prefillFilter]=\"filter$ | async\"\n (filterEvent)=\"onFilterEvent($event)\"\n ></valtimo-dossier-detail-tab-documenten-api-filter>\n</ng-template>\n\n<ng-template #resetFilterButton>\n <button cdsButton=\"primary\" (click)=\"onFilterEvent(null)\">\n {{ 'Reset filter' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #uploadButton let-disabled=\"disabled\">\n <button\n [disabled]=\"(uploadProcessLinkedSet && !uploadProcessLinked) || showZaakLinkWarning || disabled\"\n [vTooltip]=\"getUploadButtonTooltip() | translate\"\n (click)=\"onUploadButtonClick()\"\n cdsButton=\"primary\"\n >\n {{ 'Upload' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #translationTemplate let-data=\"data\">\n {{ 'document.' + data.item[data.key] | translate }}\n</ng-template>\n\n<ng-template #navigateToCaseAdminButton>\n <button (click)=\"onNavigateToCaseAdminClick()\" cdsButton=\"primary\">\n {{ 'dossier.documenten.navigateToCaseAdmin' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"settings\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: [".hidden{display:none}.loading-container{padding:var(--cds-grid-margin);display:flex;align-items:center;justify-content:center}.carbon-document-table-wrapper{margin:0}.documenten-api-documents-filesize-template{text-align:right}::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i10.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i10.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: DocumentenApiMetadataModalComponent, selector: "valtimo-documenten-api-metadata-modal", inputs: ["disabled$", "file$", "author", "confidentialityLevel", "description", "disableAuthor", "disableConfidentialityLevel", "disableDescription", "disableDocumentTitle", "disableDocumentType", "disableFilename", "disableLanguage", "disableStatus", "disableTrefwoorden", "documentTitle", "documentType", "filename", "isEditMode", "language", "open", "status", "supportsTrefwoorden"], outputs: ["metadata", "modalClose"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i6.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: DocumentenApiFilterComponent, selector: "valtimo-dossier-detail-tab-documenten-api-filter", outputs: ["filterEvent"] }, { kind: "ngmodule", type: DialogModule }, { kind: "directive", type: i6.OverflowMenuDirective, selector: "[cdsOverflowMenu], [ibmOverflowMenu]", inputs: ["ibmOverflowMenu", "cdsOverflowMenu", "flip", "offset", "wrapperClass", "customPane"], exportAs: ["overflowMenu"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i10.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }] }); }
300
344
  }
301
345
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTabDocumentenApiDocumentsComponent, decorators: [{
302
346
  type: Component,
@@ -310,7 +354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
310
354
  DocumentenApiFilterComponent,
311
355
  DialogModule,
312
356
  ConfirmationModalModule,
313
- ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<div\n class=\"carbon-document-table-wrapper\"\n *ngIf=\"{\n loading: loading$ | async,\n fieldsLoading: fieldsLoading$ | async,\n uploading: uploading$ | async,\n relatedFiles: relatedFiles$ | async,\n fields: fields$ | async,\n supportedDocumentenApiFeatures: supportedDocumentenApiFeatures$ | async,\n } as obs\"\n>\n @if ((!obs.fieldsLoading && obs.fields.length) || obs.fieldsLoading) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [items]=\"obs.relatedFiles\"\n [fields]=\"obs.fields\"\n [loading]=\"obs.loading\"\n (rowClicked)=\"onRowClick($event)\"\n (sortChanged)=\"\n obs?.supportedDocumentenApiFeatures?.supportsSortableColumns && onSortChanged($event)\n \"\n hideColumnHeader\n >\n <div carbonToolbarContent>\n <input\n [accept]=\"acceptedFiles\"\n (change)=\"onFileSelected($event)\"\n hidden\n type=\"file\"\n #fileInput\n />\n\n <button\n *ngIf=\"obs?.supportedDocumentenApiFeatures?.supportsFilterableColumns\"\n [cdsOverflowMenu]=\"overflowFilter\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"noResults\"></ng-container>\n </valtimo-carbon-list>\n } @else {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'zgw.documents.noColumns.description' | translate\"\n [title]=\"'zgw.documents.noColumns.title' | translate\"\n ></valtimo-no-results>\n }\n\n <valtimo-documenten-api-metadata-modal\n [open]=\"showUploadModal$ | async\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [isEditMode]=\"isEditMode$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n (modalClose)=\"closeMetadataModal()\"\n (metadata)=\"metadataSet($event)\"\n ></valtimo-documenten-api-metadata-modal>\n</div>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n contentTranslationKey=\"dossier.documenten.deleteConfirmationModal.content\"\n confirmButtonType=\"danger\"\n titleTranslationKey=\"dossier.documenten.deleteConfirmationModal.title\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n (confirmEvent)=\"deleteDocument()\"\n>\n</valtimo-confirmation-modal>\n\n<ng-template #downloadButton let-index=\"index\" let-item=\"item\">\n <div\n *ngIf=\"{isDownloading: indexesIncludeIndex(downloadingFileIndexes$ | async, index)} as vars\"\n class=\"download-button-container\"\n >\n <button\n *ngIf=\"!vars.isDownloading\"\n cdsButton=\"primary\"\n size=\"sm\"\n (click)=\"downloadDocument(item, index)\"\n >\n {{ 'interface.download' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n\n <cds-loading size=\"sm\" *ngIf=\"vars.isDownloading\"></cds-loading>\n </div>\n</ng-template>\n\n<ng-template #noResults>\n @if ((filter$ | async | keyvalue)?.length) {\n <valtimo-no-results\n [action]=\"resetFilterButton\"\n [description]=\"'zgw.documents.noResults.filterDescription' | translate\"\n [title]=\"'zgw.documents.noResults.filterTitle' | translate\"\n ></valtimo-no-results>\n } @else if (showZaakLinkWarning && isAdmin) {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'dossier.documenten.noZaakFound' | translate\"\n [title]=\"'dossier.documenten.noZaakFoundTitle' | translate\"\n ></valtimo-no-results>\n } @else {\n <valtimo-no-results\n [action]=\"uploadButton\"\n [description]=\"'dossier.documenten.noFiles' | translate\"\n [title]=\"'dossier.documenten.noFilesTitle' | translate\"\n ></valtimo-no-results>\n }\n</ng-template>\n\n<ng-template #overflowFilter>\n <valtimo-dossier-detail-tab-documenten-api-filter\n [prefillFilter]=\"filter$ | async\"\n (filterEvent)=\"onFilterEvent($event)\"\n ></valtimo-dossier-detail-tab-documenten-api-filter>\n</ng-template>\n\n<ng-template #resetFilterButton>\n <button cdsButton=\"primary\" (click)=\"onFilterEvent(null)\">\n {{ 'Reset filter' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #uploadButton let-disabled=\"disabled\">\n <button\n [disabled]=\"(uploadProcessLinkedSet && !uploadProcessLinked) || showZaakLinkWarning || disabled\"\n [vTooltip]=\"getUploadButtonTooltip() | translate\"\n (click)=\"onUploadButtonClick()\"\n cdsButton=\"primary\"\n >\n {{ 'Upload' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #translationTemplate let-data=\"data\">\n {{ 'document.' + data.item[data.key] | translate }}\n</ng-template>\n\n<ng-template #navigateToCaseAdminButton>\n <button (click)=\"onNavigateToCaseAdminClick()\" cdsButton=\"primary\">\n {{ 'dossier.documenten.navigateToCaseAdmin' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"settings\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: [".hidden{display:none}.loading-container{padding:var(--cds-grid-margin);display:flex;align-items:center;justify-content:center}.carbon-document-table-wrapper{margin:0}.documenten-api-documents-filesize-template{text-align:right}::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
357
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<div\n class=\"carbon-document-table-wrapper\"\n *ngIf=\"{\n loading: loading$ | async,\n fieldsLoading: fieldsLoading$ | async,\n uploading: uploading$ | async,\n relatedFiles: relatedFiles$ | async,\n fields: fields$ | async,\n supportedDocumentenApiFeatures: supportedDocumentenApiFeatures$ | async,\n pagination: pagination$ | async,\n sortState: sortState$ | async,\n } as obs\"\n>\n @if ((!obs.fieldsLoading && obs.fields.length) || obs.fieldsLoading) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [items]=\"obs.relatedFiles\"\n [fields]=\"obs.fields\"\n [initialSortState]=\"obs.sortState\"\n [loading]=\"obs.loading\"\n [pagination]=\"obs.pagination\"\n [paginatorConfig]=\"paginatorConfig\"\n paginationIdentifier=\"documentenApi\"\n (rowClicked)=\"onRowClick($event)\"\n (sortChanged)=\"\n obs?.supportedDocumentenApiFeatures?.supportsSortableColumns && onSortChanged($event)\n \"\n (paginationClicked)=\"onPaginationClicked($event)\"\n (paginationSet)=\"onPaginationSet($event)\"\n hideColumnHeader\n >\n <div carbonToolbarContent>\n <input\n [accept]=\"acceptedFiles\"\n (change)=\"onFileSelected($event)\"\n hidden\n type=\"file\"\n #fileInput\n />\n\n <button\n *ngIf=\"obs?.supportedDocumentenApiFeatures?.supportsFilterableColumns\"\n [cdsOverflowMenu]=\"overflowFilter\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"noResults\"></ng-container>\n </valtimo-carbon-list>\n } @else {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'zgw.documents.noColumns.description' | translate\"\n [title]=\"'zgw.documents.noColumns.title' | translate\"\n ></valtimo-no-results>\n }\n\n <valtimo-documenten-api-metadata-modal\n [open]=\"showUploadModal$ | async\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [isEditMode]=\"isEditMode$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n (modalClose)=\"closeMetadataModal()\"\n (metadata)=\"metadataSet($event)\"\n ></valtimo-documenten-api-metadata-modal>\n</div>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n contentTranslationKey=\"dossier.documenten.deleteConfirmationModal.content\"\n confirmButtonType=\"danger\"\n titleTranslationKey=\"dossier.documenten.deleteConfirmationModal.title\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n (confirmEvent)=\"deleteDocument()\"\n>\n</valtimo-confirmation-modal>\n\n<ng-template #downloadButton let-index=\"index\" let-item=\"item\">\n <div\n *ngIf=\"{isDownloading: indexesIncludeIndex(downloadingFileIndexes$ | async, index)} as vars\"\n class=\"download-button-container\"\n >\n <button\n *ngIf=\"!vars.isDownloading\"\n cdsButton=\"primary\"\n size=\"sm\"\n (click)=\"downloadDocument(item, index)\"\n >\n {{ 'interface.download' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n\n <cds-loading size=\"sm\" *ngIf=\"vars.isDownloading\"></cds-loading>\n </div>\n</ng-template>\n\n<ng-template #noResults>\n @if ((filter$ | async | keyvalue)?.length) {\n <valtimo-no-results\n [action]=\"resetFilterButton\"\n [description]=\"'zgw.documents.noResults.filterDescription' | translate\"\n [title]=\"'zgw.documents.noResults.filterTitle' | translate\"\n ></valtimo-no-results>\n } @else if (showZaakLinkWarning && isAdmin) {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'dossier.documenten.noZaakFound' | translate\"\n [title]=\"'dossier.documenten.noZaakFoundTitle' | translate\"\n ></valtimo-no-results>\n } @else {\n <valtimo-no-results\n [action]=\"uploadButton\"\n [description]=\"'dossier.documenten.noFiles' | translate\"\n [title]=\"'dossier.documenten.noFilesTitle' | translate\"\n ></valtimo-no-results>\n }\n</ng-template>\n\n<ng-template #overflowFilter>\n <valtimo-dossier-detail-tab-documenten-api-filter\n [prefillFilter]=\"filter$ | async\"\n (filterEvent)=\"onFilterEvent($event)\"\n ></valtimo-dossier-detail-tab-documenten-api-filter>\n</ng-template>\n\n<ng-template #resetFilterButton>\n <button cdsButton=\"primary\" (click)=\"onFilterEvent(null)\">\n {{ 'Reset filter' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #uploadButton let-disabled=\"disabled\">\n <button\n [disabled]=\"(uploadProcessLinkedSet && !uploadProcessLinked) || showZaakLinkWarning || disabled\"\n [vTooltip]=\"getUploadButtonTooltip() | translate\"\n (click)=\"onUploadButtonClick()\"\n cdsButton=\"primary\"\n >\n {{ 'Upload' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #translationTemplate let-data=\"data\">\n {{ 'document.' + data.item[data.key] | translate }}\n</ng-template>\n\n<ng-template #navigateToCaseAdminButton>\n <button (click)=\"onNavigateToCaseAdminClick()\" cdsButton=\"primary\">\n {{ 'dossier.documenten.navigateToCaseAdmin' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"settings\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: [".hidden{display:none}.loading-container{padding:var(--cds-grid-margin);display:flex;align-items:center;justify-content:center}.carbon-document-table-wrapper{margin:0}.documenten-api-documents-filesize-template{text-align:right}::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
314
358
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.UploadProviderService }, { type: i2.DownloadService }, { type: i3.TranslateService }, { type: i4.ConfigService }, { type: i5.UserProviderService }, { type: i6.IconService }, { type: i7.DocumentenApiDocumentService }, { type: i8.DocumentenApiColumnService }, { type: i8.DocumentenApiVersionService }], propDecorators: { fileInput: [{
315
359
  type: ViewChild,
316
360
  args: ['fileInput']
@@ -318,4 +362,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
318
362
  type: ViewChild,
319
363
  args: ['translationTemplate']
320
364
  }] } });
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vemd3L3NyYy9saWIvbW9kdWxlcy9kb2N1bWVudGVuLWFwaS9jb21wb25lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUE4QyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFL0YsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUVMLGdCQUFnQixFQUVoQix1QkFBdUIsRUFHdkIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFJN0IsT0FBTyxFQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFjLE1BQU0sMkJBQTJCLENBQUM7QUFDOUYsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBRWIsRUFBRSxFQUNGLGFBQWEsRUFDYixPQUFPLEVBQ1AsWUFBWSxHQUNiLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUNMLGlCQUFpQixFQUVqQixzQkFBc0IsR0FJdkIsTUFBTSxjQUFjLENBQUM7QUFHdEIsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFDLG1DQUFtQyxFQUFDLE1BQU0sMEVBQTBFLENBQUM7Ozs7Ozs7Ozs7OztBQW1CN0gsTUFBTSxPQUFPLCtDQUErQztJQXFKMUQsWUFDbUIsS0FBcUIsRUFDckIsTUFBYyxFQUNkLHFCQUE0QyxFQUM1QyxlQUFnQyxFQUNoQyxnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLFdBQXdCLEVBQ3hCLDRCQUEwRCxFQUMxRCwwQkFBc0QsRUFDdEQsMkJBQXdEO1FBVnhELFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUNBQTRCLEdBQTVCLDRCQUE0QixDQUE4QjtRQUMxRCwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBQ3RELGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBNkI7UUE1SjFELDZCQUF3QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDaEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLEVBQzdDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQ25ELENBQUM7UUFFYyxvQ0FBK0IsR0FDN0MsSUFBSSxlQUFlLENBQXdDLElBQUksQ0FBQyxDQUFDO1FBRWxELHFDQUFnQyxHQUMvQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUNoQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUM3QixJQUFJLENBQUMsMkJBQTJCLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FDN0UsRUFDRCxHQUFHLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUNuQyxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQzFFLENBQ0YsQ0FBQztRQUVZLFlBQU8sR0FBK0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FDdEYsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3pDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQ2pDLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQztZQUM1RSxJQUFJLENBQUMsZ0NBQWdDO1lBQ3JDLElBQUksQ0FBQyxNQUFNO1NBQ1osQ0FBQyxDQUNILEVBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUN0RCxNQUFNLGlCQUFpQixHQUFpQyxPQUFPLENBQUMsSUFBSSxDQUNsRSxDQUFDLE1BQXdCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUNuRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLElBQUksOEJBQThCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksaUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsS0FBSyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUc7Z0JBQy9FLEtBQUssRUFBRSx1QkFBdUIsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDMUMsUUFBUSxFQUFFLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO2dCQUN4RixHQUFHLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxRQUFRLElBQUk7b0JBQ3pELFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CO29CQUNsQyxZQUFZLEVBQUUsRUFBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBQztpQkFDaEMsQ0FBQztnQkFDRixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxzQkFBc0IsQ0FBQyxZQUFZLElBQUksRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFDLENBQUM7Z0JBQ2pGLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxJQUFJLDhCQUE4QixDQUFDLHVCQUF1QjthQUNwRixDQUFDLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUMzQyxDQUFDO1FBRUssZ0JBQVcsR0FBaUI7WUFDakM7Z0JBQ0UsS0FBSyxFQUFFLG1CQUFtQjtnQkFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUMvQyxJQUFJLEVBQUUsUUFBUTthQUNmO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3hDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDOUMsSUFBSSxFQUFFLFFBQVE7YUFDZjtZQUNEO2dCQUNFLEtBQUssRUFBRSxpQkFBaUI7Z0JBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDN0MsSUFBSSxFQUFFLFFBQVE7YUFDZjtTQUNGLENBQUM7UUFFYyw0QkFBdUIsR0FBdUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNsRixHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsRUFDN0MsTUFBTSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FDM0QsQ0FBQztRQUVjLGdCQUFXLEdBQXVCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUNqQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQ25DLENBQUM7UUFJSywyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFHL0IsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUV6QyxrQkFBYSxHQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSwyQkFBMkIsSUFBSSxJQUFJLENBQUM7UUFDbEQsZ0JBQVcsR0FBVyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSx5QkFBeUIsSUFBSSxDQUFDLENBQUM7UUFFakYsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDM0QsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyRCxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNqQyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN2RCxpQ0FBNEIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVuRSxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNyRCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3BELGFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdkYsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsQ0FDdEUsQ0FBQztRQUVjLFlBQU8sR0FBRyxJQUFJLGFBQWEsRUFBbUMsQ0FBQztRQUM5RCxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQU8sSUFBSSxDQUFDLENBQUM7UUFDNUMsV0FBTSxHQUFHLElBQUksYUFBYSxFQUF5QixDQUFDO1FBRTlELGtCQUFhLEdBQWdELGFBQWEsQ0FBQztZQUNoRixJQUFJLENBQUMsV0FBVztZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7WUFDeEIsSUFBSSxDQUFDLFNBQVM7U0FDZixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUN6QyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQ3RDLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyw0QkFBNEIsQ0FDNUQsVUFBVSxFQUNWLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FDdEI7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNwQyxDQUFDLENBQ0gsRUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDckIsTUFBTSxlQUFlLEdBQUcsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxHQUFHLElBQUk7Z0JBQ1AsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQztnQkFDekYsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUNoRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNsRCxPQUFPLEVBQUUsU0FBUztpQkFDbkIsQ0FBQyxDQUFDO2FBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSixPQUFPLGVBQWUsSUFBSSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFZSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFlbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsSUFBOEI7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsNEJBQTRCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQXlCO1FBQy9DLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFdEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzdDLENBQUM7YUFBTSxJQUFJLFNBQVMsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUM1QixPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDL0MsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM1RCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEIsT0FBTyw4Q0FBOEMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsT0FBTyxnREFBZ0QsQ0FBQztJQUMxRCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsbUJBQW1CO2FBQ3JCLGNBQWMsRUFBRTthQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUNSLFlBQVksQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzRCxDQUFDLEVBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUNGLENBQUM7SUFDTixDQUFDO0lBRU0sV0FBVyxDQUFDLFFBQStCO1FBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNCLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQzlFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLHFCQUFxQjtxQkFDdkIsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUM7cUJBQ2xELFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU0scUJBQXFCLENBQUMsSUFBOEI7UUFDekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sY0FBYyxDQUFDLElBQVU7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQVU7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSwwQkFBMEI7UUFDL0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLCtCQUErQixzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBVTtRQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLGFBQWEsQ0FBQyxNQUF1QztRQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU0sYUFBYSxDQUFDLFNBQW9CO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLFNBQVMsQ0FBQyxTQUFTO1lBQ2pCLENBQUMsQ0FBQztnQkFDRSxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7YUFDdkk7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUNULENBQUM7SUFDSixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBOEI7UUFDakQsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQztJQUN0QyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsV0FBcUMsRUFBRSxhQUFzQjtRQUNwRixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FDL0IsMEJBQTBCLFdBQVcsQ0FBQyxxQkFBcUIsVUFBVSxXQUFXLENBQUMsTUFBTSxXQUFXLEVBQ2xHLFdBQVcsQ0FBQyxZQUFZLElBQUksRUFBRSxFQUM5QixhQUFhLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JCLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQyx1QkFBdUI7WUFDNUIsSUFBSSxDQUFDLFdBQVc7WUFDaEIsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsTUFBTTtTQUNaLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLGNBQWMsYUFBYSxVQUFVLFlBQVksQ0FBQyxFQUFFO2dCQUNyRixXQUFXLEVBQUUsRUFBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBQzthQUNsQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyx1QkFBdUI7YUFDekIsSUFBSSxDQUNILFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUMxRSxFQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLE1BQWUsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTthQUNyQixJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoQixNQUFNLEVBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFDLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLENBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBaFhVLCtDQUErQzttR0FBL0MsK0NBQStDLG9VQ3pFNUQsbWtNQThLQSwraENEaEhJLFlBQVkseVpBQ1osZ0JBQWdCLDIxQkFDaEIsbUNBQW1DLHlmQUNuQyxZQUFZLGdNQUNaLFVBQVUsNE5BQ1YsZUFBZSw0RkFDZiw0QkFBNEIsc0hBQzVCLFlBQVksbVFBQ1osdUJBQXVCOzs0RkFHZCwrQ0FBK0M7a0JBakIzRCxTQUFTOytCQUNFLHFEQUFxRCxjQUduRCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLG1DQUFtQzt3QkFDbkMsWUFBWTt3QkFDWixVQUFVO3dCQUNWLGVBQWU7d0JBQ2YsNEJBQTRCO3dCQUM1QixZQUFZO3dCQUNaLHVCQUF1QjtxQkFDeEI7K1pBR3VCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDWSxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RmlsdGVyMTYsIFRhZ0dyb3VwMTYsIFVwbG9hZDE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RNb2R1bGUsXG4gIENvbHVtbkNvbmZpZyxcbiAgQ29uZmlybWF0aW9uTW9kYWxNb2R1bGUsXG4gIERvY3VtZW50ZW5BcGlNZXRhZGF0YSxcbiAgU29ydFN0YXRlLFxuICBWaWV3VHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0Rvd25sb2FkU2VydmljZSwgVXBsb2FkUHJvdmlkZXJTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9yZXNvdXJjZSc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7QnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIEljb25Nb2R1bGUsIEljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFJlcGxheVN1YmplY3QsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ09MVU1OX1ZJRVdfVFlQRVMsXG4gIENvbmZpZ3VyZWRDb2x1bW4sXG4gIERPQ1VNRU5URU5fQ09MVU1OX0tFWVMsXG4gIERvY3VtZW50ZW5BcGlGaWx0ZXJNb2RlbCxcbiAgRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlLFxuICBTdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlLCBEb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7RG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG9jdW1lbnRlbi1hcGktZG9jdW1lbnQuc2VydmljZSc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlGaWx0ZXJDb21wb25lbnR9IGZyb20gJy4uL2RvY3VtZW50ZW4tYXBpLWZpbHRlci9kb2N1bWVudGVuLWFwaS1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7RG9jdW1lbnRlbkFwaU1ldGFkYXRhTW9kYWxDb21wb25lbnR9IGZyb20gJy4uL2RvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsL2RvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFiLWRvY3VtZW50ZW4tYXBpLWRvY3VtZW50cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDYXJib25MaXN0TW9kdWxlLFxuICAgIERvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50LFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBEb2N1bWVudGVuQXBpRmlsdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ01vZHVsZSxcbiAgICBDb25maXJtYXRpb25Nb2RhbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llckRldGFpbFRhYkRvY3VtZW50ZW5BcGlEb2N1bWVudHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndHJhbnNsYXRpb25UZW1wbGF0ZScpIHRyYW5zbGF0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICBmaWx0ZXIoY2FzZURlZmluaXRpb25OYW1lID0+ICEhY2FzZURlZmluaXRpb25OYW1lKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PFN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQ6IE9ic2VydmFibGU8U3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPiA9XG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcChjYXNlRGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2UuZ2V0U3VwcG9ydGVkQXBpRmVhdHVyZXMoY2FzZURlZmluaXRpb25OYW1lKVxuICAgICAgKSxcbiAgICAgIHRhcChzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMgPT5cbiAgICAgICAgdGhpcy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkLm5leHQoc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpZWxkcyQ6IE9ic2VydmFibGU8Q29sdW1uQ29uZmlnW10+ID0gdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5maWVsZHNMb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaUNvbHVtblNlcnZpY2UuZ2V0Q29uZmlndXJlZENvbHVtbnMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICAgIHRoaXMuX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQsXG4gICAgICAgIHRoaXMuX3NvcnQkLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW2NvbHVtbnMsIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcywgc29ydF0pID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3J0Q29sdW1uOiBDb25maWd1cmVkQ29sdW1uIHwgdW5kZWZpbmVkID0gY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sdW1uOiBDb25maWd1cmVkQ29sdW1uKSA9PiAhIWNvbHVtbi5kZWZhdWx0U29ydFxuICAgICAgKTtcbiAgICAgIGlmICghIWRlZmF1bHRTb3J0Q29sdW1uICYmICFzb3J0ICYmIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcy5zdXBwb3J0c1NvcnRhYmxlQ29sdW1ucykge1xuICAgICAgICB0aGlzLl9zb3J0JC5uZXh0KHtzb3J0OiBgJHtkZWZhdWx0U29ydENvbHVtbi5rZXl9LCR7ZGVmYXVsdFNvcnRDb2x1bW4uZGVmYXVsdFNvcnR9YH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbjogQ29uZmlndXJlZENvbHVtbikgPT4gKHtcbiAgICAgICAga2V5OiBjb2x1bW4ua2V5ID09PSBET0NVTUVOVEVOX0NPTFVNTl9LRVlTLkJFU1RBTkRTT01WQU5HID8gJ3NpemUnIDogY29sdW1uLmtleSxcbiAgICAgICAgbGFiZWw6IGB6Z3cuZG9jdW1lbnRDb2x1bW5zLiR7Y29sdW1uLmtleX1gLFxuICAgICAgICB2aWV3VHlwZTogIUNPTFVNTl9WSUVXX1RZUEVTW2NvbHVtbi5rZXldID8gVmlld1R5cGUuVEVYVCA6IENPTFVNTl9WSUVXX1RZUEVTW2NvbHVtbi5rZXldLFxuICAgICAgICAuLi4oQ09MVU1OX1ZJRVdfVFlQRVNbY29sdW1uLmtleV0gPT09IFZpZXdUeXBlLlRFTVBMQVRFICYmIHtcbiAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy50cmFuc2xhdGlvblRlbXBsYXRlLFxuICAgICAgICAgIHRlbXBsYXRlRGF0YToge2tleTogY29sdW1uLmtleX0sXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4oY29sdW1uLmtleSA9PT0gRE9DVU1FTlRFTl9DT0xVTU5fS0VZUy5DUkVBVElFREFUVU0gJiYge2Zvcm1hdDogJ0RELU1NLVlZWVknfSksXG4gICAgICAgIHNvcnRhYmxlOiBjb2x1bW4uc29ydGFibGUgJiYgc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLnN1cHBvcnRzU29ydGFibGVDb2x1bW5zLFxuICAgICAgfSkpO1xuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB0aGlzLmZpZWxkc0xvYWRpbmckLm5leHQoZmFsc2UpKVxuICApO1xuICBwdWJsaWMgZG9jdW1lbnQ6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZTtcbiAgcHVibGljIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW10gPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdkb2N1bWVudC5kb3dubG9hZCcsXG4gICAgICBjYWxsYmFjazogdGhpcy5vbkRvd25sb2FkQWN0aW9uQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgIHR5cGU6ICdub3JtYWwnLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdkb2N1bWVudC5lZGl0JyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9uRWRpdE1ldGFkYXRhLmJpbmQodGhpcyksXG4gICAgICBkaXNhYmxlZENhbGxiYWNrOiB0aGlzLmVkaXREaXNhYmxlZC5iaW5kKHRoaXMpLFxuICAgICAgdHlwZTogJ25vcm1hbCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ2RvY3VtZW50LmRlbGV0ZScsXG4gICAgICBjYWxsYmFjazogdGhpcy5vbkRlbGV0ZUFjdGlvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICB9LFxuICBdO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgZmlsdGVyKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4gISFkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudElkJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnRJZCksXG4gICAgZmlsdGVyKGRvY3VtZW50SWQgPT4gISFkb2N1bWVudElkKVxuICApO1xuXG4gIHB1YmxpYyBpc0FkbWluOiBib29sZWFuO1xuICBwdWJsaWMgc2hvd1phYWtMaW5rV2FybmluZzogYm9vbGVhbjtcbiAgcHVibGljIHVwbG9hZFByb2Nlc3NMaW5rZWRTZXQgPSBmYWxzZTtcbiAgcHVibGljIHVwbG9hZFByb2Nlc3NMaW5rZWQhOiBib29sZWFuO1xuXG4gIHB1YmxpYyBpc0VkaXRNb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBhY2NlcHRlZEZpbGVzOiBzdHJpbmcgfCBudWxsID1cbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2U/LmNvbmZpZz8uY2FzZUZpbGVVcGxvYWRBY2NlcHRlZEZpbGVzIHx8IG51bGw7XG4gIHB1YmxpYyByZWFkb25seSBtYXhGaWxlU2l6ZTogbnVtYmVyID0gdGhpcy5jb25maWdTZXJ2aWNlPy5jb25maWc/LmNhc2VGaWxlU2l6ZVVwbG9hZExpbWl0TUIgfHwgNTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsZVRvQmVVcGxvYWRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbGUgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IG1vZGFsRGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93TW9kYWwkID0gbmV3IFN1YmplY3Q8bnVsbD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dVcGxvYWRNb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dEZWxldGVDb25maXJtYXRpb25Nb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdXBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IGZpZWxkc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckID0gY29tYmluZUxhdGVzdChbdGhpcy5faXRlbXNMb2FkaW5nJCwgdGhpcy5maWVsZHNMb2FkaW5nJF0pLnBpcGUoXG4gICAgbWFwKChbaXRlbXNMb2FkaW5nLCBmaWVsZHNMb2FkaW5nXSkgPT4gaXRlbXNMb2FkaW5nIHx8IGZpZWxkc0xvYWRpbmcpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlciQgPSBuZXcgUmVwbGF5U3ViamVjdDxEb2N1bWVudGVuQXBpRmlsdGVyTW9kZWwgfCBudWxsPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWZldGNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NvcnQkID0gbmV3IFJlcGxheVN1YmplY3Q8e3NvcnQ6IHN0cmluZ30gfCBudWxsPigpO1xuXG4gIHB1YmxpYyByZWxhdGVkRmlsZXMkOiBPYnNlcnZhYmxlPEFycmF5PERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudElkJCxcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAsXG4gICAgdGhpcy5fcmVmZXRjaCQsXG4gIF0pLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnRJZCwgcXVlcnlQYXJhbXNdKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZS5nZXRGaWx0ZXJlZFpha2VuQXBpRG9jdW1lbnRzKFxuICAgICAgICAgIGRvY3VtZW50SWQsXG4gICAgICAgICAgcXVlcnlQYXJhbXNbJ3BhcmFtcyddXG4gICAgICAgICksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW3JlbGF0ZWRGaWxlc10pID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRGaWxlcyA9IHJlbGF0ZWRGaWxlcz8uY29udGVudD8ubWFwKGZpbGUgPT4gKHtcbiAgICAgICAgLi4uZmlsZSxcbiAgICAgICAgY3JlYXRlZEJ5OiBmaWxlLmNyZWF0ZWRCeSB8fCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlzdC5hdXRvbWF0aWNhbGx5R2VuZXJhdGVkJyksXG4gICAgICAgIHNpemU6IHRoaXMuYnl0ZXNUb01lZ2FieXRlcyhmaWxlLmJlc3RhbmRzb212YW5nKSxcbiAgICAgICAgdGFnczogZmlsZS50cmVmd29vcmRlbj8ubWFwKCh0cmVmd29vcmQ6IHN0cmluZykgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiB0cmVmd29vcmQsXG4gICAgICAgIH0pKSxcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiB0cmFuc2xhdGVkRmlsZXMgfHwgW107XG4gICAgfSksXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfSksXG4gICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICB0aGlzLnNob3daYWFrTGlua1dhcm5pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5faXRlbXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cGxvYWRQcm92aWRlclNlcnZpY2U6IFVwbG9hZFByb3ZpZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvd25sb2FkU2VydmljZTogRG93bmxvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZTogRG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlOiBEb2N1bWVudGVuQXBpQ29sdW1uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlWZXJzaW9uU2VydmljZTogRG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXIoRmlsdGVyMTYpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0SW5pdGlhbEZpbHRlckFuZFNvcnQoKTtcbiAgICB0aGlzLnNldFVwbG9hZFByb2Nlc3NMaW5rZWQoKTtcbiAgICB0aGlzLmlzVXNlckFkbWluKCk7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbRmlsdGVyMTYsIFRhZ0dyb3VwMTYsIFVwbG9hZDE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uRGVsZXRlQWN0aW9uQ2xpY2soaXRlbTogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudCA9IGl0ZW07XG4gICAgdGhpcy5zaG93RGVsZXRlQ29uZmlybWF0aW9uTW9kYWwkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlRG9jdW1lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5faXRlbXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZS5kZWxldGVEb2N1bWVudCh0aGlzLmRvY3VtZW50KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZldGNoRG9jdW1lbnRzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYnl0ZXNUb01lZ2FieXRlcyhieXRlczogbnVtYmVyIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIWJ5dGVzKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBtZWdhYnl0ZXMgPSBieXRlcyAvICgxMDI0ICogMTAyNCk7XG4gICAgaWYgKG1lZ2FieXRlcyA8IDEpIHtcbiAgICAgIHJldHVybiBgJHtNYXRoLmNlaWwobWVnYWJ5dGVzICogMTAwMCl9IEtCYDtcbiAgICB9IGVsc2UgaWYgKG1lZ2FieXRlcyA8IDEwMDApIHtcbiAgICAgIHJldHVybiBtZWdhYnl0ZXMudG9GaXhlZCgyKSArICcgTUInO1xuICAgIH1cblxuICAgIHJldHVybiAobWVnYWJ5dGVzIC8gMTAwMCkudG9GaXhlZCgyKSArICcgR0InO1xuICB9XG5cbiAgcHVibGljIGdldFVwbG9hZEJ1dHRvblRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy51cGxvYWRQcm9jZXNzTGlua2VkU2V0ICYmIHRoaXMudXBsb2FkUHJvY2Vzc0xpbmtlZCkge1xuICAgICAgcmV0dXJuICdVcGxvYWQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0FkbWluKSB7XG4gICAgICByZXR1cm4gJ2Rvc3NpZXIuZG9jdW1lbnRlbi5ub1Byb2Nlc3NMaW5rZWQuYWRtaW5Sb2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ2Rvc3NpZXIuZG9jdW1lbnRlbi5ub1Byb2Nlc3NMaW5rZWQucmVndWxhclVzZXInO1xuICB9XG5cbiAgcHVibGljIGlzVXNlckFkbWluKCkge1xuICAgIHRoaXMudXNlclByb3ZpZGVyU2VydmljZVxuICAgICAgLmdldFVzZXJTdWJqZWN0KClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICB1c2VySWRlbnRpdHkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBZG1pbiA9IHVzZXJJZGVudGl0eS5yb2xlcy5pbmNsdWRlcygnUk9MRV9BRE1JTicpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0FkbWluID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgbWV0YWRhdGFTZXQobWV0YWRhdGE6IERvY3VtZW50ZW5BcGlNZXRhZGF0YSk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5maWxlVG9CZVVwbG9hZGVkJCwgdGhpcy5kb2N1bWVudElkJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoW2ZpbGUsIGRvY3VtZW50SWRdKSA9PiB7XG4gICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG4gICAgICAgICAgaWYgKHRoaXMuaXNFZGl0TW9kZSQuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURvY3VtZW50KGZpbGUsIG1ldGFkYXRhKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnJlZmV0Y2hEb2N1bWVudHMoKTtcbiAgICAgICAgICAgICAgdGhpcy51cGxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICB0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLm5leHQobnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm92aWRlclNlcnZpY2VcbiAgICAgICAgICAgICAgLnVwbG9hZEZpbGVXaXRoTWV0YWRhdGEoZmlsZSwgZG9jdW1lbnRJZCwgbWV0YWRhdGEpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVmZXRjaERvY3VtZW50cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRvd25sb2FkQWN0aW9uQ2xpY2soZmlsZTogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5kb3dubG9hZERvY3VtZW50KGZpbGUsIHRydWUpO1xuICB9XG5cbiAgcHVibGljIG9uRWRpdE1ldGFkYXRhKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLmlzRWRpdE1vZGUkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5maWxlVG9CZVVwbG9hZGVkJC5uZXh0KGZpbGUpO1xuICAgIHRoaXMuc2hvd1VwbG9hZE1vZGFsJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIGNsb3NlTWV0YWRhdGFNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dVcGxvYWRNb2RhbCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0TW9kZSQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5maWxlVG9CZVVwbG9hZGVkJC5uZXh0KGV2ZW50LnRhcmdldC5maWxlc1swXSk7XG4gICAgdGhpcy5zaG93VXBsb2FkTW9kYWwkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5yZXNldEZpbGVJbnB1dCgpO1xuICB9XG5cbiAgcHVibGljIG9uTmF2aWdhdGVUb0Nhc2VBZG1pbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9kb3NzaWVyLW1hbmFnZW1lbnQvZG9zc2llci8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9YF0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWREb2N1bWVudChldmVudCwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG9uVXBsb2FkQnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIG9uRmlsdGVyRXZlbnQoZmlsdGVyOiBEb2N1bWVudGVuQXBpRmlsdGVyTW9kZWwgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXIkLm5leHQoZmlsdGVyKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNvcnRDaGFuZ2VkKHNvcnRTdGF0ZTogU29ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5fc29ydCQubmV4dChcbiAgICAgIHNvcnRTdGF0ZS5pc1NvcnRpbmdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzb3J0OiBgJHtzb3J0U3RhdGUuc3RhdGUubmFtZSA9PT0gJ3NpemUnID8gRE9DVU1FTlRFTl9DT0xVTU5fS0VZUy5CRVNUQU5EU09NVkFORyA6IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lfSwke3NvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb259YCxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVmZXRjaERvY3VtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWZldGNoJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0RGlzYWJsZWQoZmlsZTogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpbGUuc3RhdHVzID09PSAnZGVmaW5pdGllZic7XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkRG9jdW1lbnQocmVsYXRlZEZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSwgZm9yY2VEb3dubG9hZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWRTZXJ2aWNlLmRvd25sb2FkRmlsZShcbiAgICAgIGAvYXBpL3YxL2RvY3VtZW50ZW4tYXBpLyR7cmVsYXRlZEZpbGUucGx1Z2luQ29uZmlndXJhdGlvbklkfS9maWxlcy8ke3JlbGF0ZWRGaWxlLmZpbGVJZH0vZG93bmxvYWRgLFxuICAgICAgcmVsYXRlZEZpbGUuYmVzdGFuZHNuYWFtID8/ICcnLFxuICAgICAgZm9yY2VEb3dubG9hZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5RdWVyeVBhcmFtc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgICAgICB0aGlzLmRvY3VtZW50SWQkLFxuICAgICAgICB0aGlzLmZpbHRlciQsXG4gICAgICAgIHRoaXMuX3NvcnQkLFxuICAgICAgXSkuc3Vic2NyaWJlKChbZGVmaW5pdGlvbk5hbWUsIGRvY3VtZW50SWQsIGZpbHRlciwgc29ydF0pID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvZG9zc2llcnMvJHtkZWZpbml0aW9uTmFtZX0vZG9jdW1lbnQvJHtkb2N1bWVudElkfS9kb2N1bWVudHNgXSwge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7Li4uZmlsdGVyLCAuLi5zb3J0fSxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RmlsZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXBsb2FkUHJvY2Vzc0xpbmtlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgICB0aGlzLnVwbG9hZFByb3ZpZGVyU2VydmljZS5jaGVja1VwbG9hZFByb2Nlc3NMaW5rKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICAgICksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm9jZXNzTGlua2VkU2V0ID0gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpbmtlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICB0aGlzLnVwbG9hZFByb2Nlc3NMaW5rZWQgPSBsaW5rZWQ7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbEZpbHRlckFuZFNvcnQoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKHF1ZXJ5UGFyYW1zID0+IHtcbiAgICAgICAgICBjb25zdCB7c29ydCwgLi4uZmlsdGVyfSA9IHF1ZXJ5UGFyYW1zWydwYXJhbXMnXTtcbiAgICAgICAgICByZXR1cm4ge3NvcnQsIGZpbHRlcn07XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7ZmlsdGVyLCBzb3J0fSkgPT4ge1xuICAgICAgICB0aGlzLl9zb3J0JC5uZXh0KHtzb3J0fSk7XG4gICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KGZpbHRlcik7XG4gICAgICAgIHRoaXMub3BlblF1ZXJ5UGFyYW1zU3Vic2NyaXB0aW9uKCk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPGRpdlxuICBjbGFzcz1cImNhcmJvbi1kb2N1bWVudC10YWJsZS13cmFwcGVyXCJcbiAgKm5nSWY9XCJ7XG4gICAgbG9hZGluZzogbG9hZGluZyQgfCBhc3luYyxcbiAgICBmaWVsZHNMb2FkaW5nOiBmaWVsZHNMb2FkaW5nJCB8IGFzeW5jLFxuICAgIHVwbG9hZGluZzogdXBsb2FkaW5nJCB8IGFzeW5jLFxuICAgIHJlbGF0ZWRGaWxlczogcmVsYXRlZEZpbGVzJCB8IGFzeW5jLFxuICAgIGZpZWxkczogZmllbGRzJCB8IGFzeW5jLFxuICAgIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlczogc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJCB8IGFzeW5jLFxuICB9IGFzIG9ic1wiXG4+XG4gIEBpZiAoKCFvYnMuZmllbGRzTG9hZGluZyAmJiBvYnMuZmllbGRzLmxlbmd0aCkgfHwgb2JzLmZpZWxkc0xvYWRpbmcpIHtcbiAgICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgICAgW2FjdGlvbkl0ZW1zXT1cImFjdGlvbkl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJvYnMucmVsYXRlZEZpbGVzXCJcbiAgICAgIFtmaWVsZHNdPVwib2JzLmZpZWxkc1wiXG4gICAgICBbbG9hZGluZ109XCJvYnMubG9hZGluZ1wiXG4gICAgICAocm93Q2xpY2tlZCk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICAgICAgKHNvcnRDaGFuZ2VkKT1cIlxuICAgICAgICBvYnM/LnN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcz8uc3VwcG9ydHNTb3J0YWJsZUNvbHVtbnMgJiYgb25Tb3J0Q2hhbmdlZCgkZXZlbnQpXG4gICAgICBcIlxuICAgICAgaGlkZUNvbHVtbkhlYWRlclxuICAgID5cbiAgICAgIDxkaXYgY2FyYm9uVG9vbGJhckNvbnRlbnQ+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXB0ZWRGaWxlc1wiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICAvPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cIm9icz8uc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPy5zdXBwb3J0c0ZpbHRlcmFibGVDb2x1bW5zXCJcbiAgICAgICAgICBbY2RzT3ZlcmZsb3dNZW51XT1cIm92ZXJmbG93RmlsdGVyXCJcbiAgICAgICAgICBbY3VzdG9tUGFuZV09XCJ0cnVlXCJcbiAgICAgICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgW2ZsaXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW29mZnNldF09XCJ7eDogMCwgeTogNDd9XCJcbiAgICAgICAgICBjZHNCdXR0b249XCJnaG9zdFwiXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJmaWx0ZXJcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVwbG9hZEJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1Jlc3VsdHNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3ZhbHRpbW8tY2FyYm9uLWxpc3Q+XG4gIH0gQGVsc2Uge1xuICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgIFthY3Rpb25dPVwibmF2aWdhdGVUb0Nhc2VBZG1pbkJ1dHRvblwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ3pndy5kb2N1bWVudHMubm9Db2x1bW5zLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdGl0bGVdPVwiJ3pndy5kb2N1bWVudHMubm9Db2x1bW5zLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuICB9XG5cbiAgPHZhbHRpbW8tZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWxcbiAgICBbb3Blbl09XCJzaG93VXBsb2FkTW9kYWwkIHwgYXN5bmNcIlxuICAgIFtkaXNhYmxlZCRdPVwibW9kYWxEaXNhYmxlZCRcIlxuICAgIFtmaWxlJF09XCJmaWxlVG9CZVVwbG9hZGVkJFwiXG4gICAgW2lzRWRpdE1vZGVdPVwiaXNFZGl0TW9kZSQgfCBhc3luY1wiXG4gICAgW3N1cHBvcnRzVHJlZndvb3JkZW5dPVwib2JzPy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXM/LnN1cHBvcnRzVHJlZndvb3JkZW5cIlxuICAgIChtb2RhbENsb3NlKT1cImNsb3NlTWV0YWRhdGFNb2RhbCgpXCJcbiAgICAobWV0YWRhdGEpPVwibWV0YWRhdGFTZXQoJGV2ZW50KVwiXG4gID48L3ZhbHRpbW8tZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWw+XG48L2Rpdj5cblxuPHZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsXG4gIGNvbmZpcm1CdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJkYXNoYm9hcmRNYW5hZ2VtZW50LmRlbGV0ZU1vZGFsLmNvbmZpcm1cIlxuICBjb250ZW50VHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmRvY3VtZW50ZW4uZGVsZXRlQ29uZmlybWF0aW9uTW9kYWwuY29udGVudFwiXG4gIGNvbmZpcm1CdXR0b25UeXBlPVwiZGFuZ2VyXCJcbiAgdGl0bGVUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuZG9jdW1lbnRlbi5kZWxldGVDb25maXJtYXRpb25Nb2RhbC50aXRsZVwiXG4gIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93RGVsZXRlQ29uZmlybWF0aW9uTW9kYWwkXCJcbiAgKGNvbmZpcm1FdmVudCk9XCJkZWxldGVEb2N1bWVudCgpXCJcbj5cbjwvdmFsdGltby1jb25maXJtYXRpb24tbW9kYWw+XG5cbjxuZy10ZW1wbGF0ZSAjZG93bmxvYWRCdXR0b24gbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwie2lzRG93bmxvYWRpbmc6IGluZGV4ZXNJbmNsdWRlSW5kZXgoZG93bmxvYWRpbmdGaWxlSW5kZXhlcyQgfCBhc3luYywgaW5kZXgpfSBhcyB2YXJzXCJcbiAgICBjbGFzcz1cImRvd25sb2FkLWJ1dHRvbi1jb250YWluZXJcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCIhdmFycy5pc0Rvd25sb2FkaW5nXCJcbiAgICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIChjbGljayk9XCJkb3dubG9hZERvY3VtZW50KGl0ZW0sIGluZGV4KVwiXG4gICAgPlxuICAgICAge3sgJ2ludGVyZmFjZS5kb3dubG9hZCcgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImRvd25sb2FkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG5cbiAgICA8Y2RzLWxvYWRpbmcgc2l6ZT1cInNtXCIgKm5nSWY9XCJ2YXJzLmlzRG93bmxvYWRpbmdcIj48L2Nkcy1sb2FkaW5nPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbm9SZXN1bHRzPlxuICBAaWYgKChmaWx0ZXIkIHwgYXN5bmMgfCBrZXl2YWx1ZSk/Lmxlbmd0aCkge1xuICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgIFthY3Rpb25dPVwicmVzZXRGaWx0ZXJCdXR0b25cIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIid6Z3cuZG9jdW1lbnRzLm5vUmVzdWx0cy5maWx0ZXJEZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgW3RpdGxlXT1cIid6Z3cuZG9jdW1lbnRzLm5vUmVzdWx0cy5maWx0ZXJUaXRsZScgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfSBAZWxzZSBpZiAoc2hvd1phYWtMaW5rV2FybmluZyAmJiBpc0FkbWluKSB7XG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2FjdGlvbl09XCJuYXZpZ2F0ZVRvQ2FzZUFkbWluQnV0dG9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9zc2llci5kb2N1bWVudGVuLm5vWmFha0ZvdW5kJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdGl0bGVdPVwiJ2Rvc3NpZXIuZG9jdW1lbnRlbi5ub1phYWtGb3VuZFRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuICB9IEBlbHNlIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cInVwbG9hZEJ1dHRvblwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ2Rvc3NpZXIuZG9jdW1lbnRlbi5ub0ZpbGVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdGl0bGVdPVwiJ2Rvc3NpZXIuZG9jdW1lbnRlbi5ub0ZpbGVzVGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjb3ZlcmZsb3dGaWx0ZXI+XG4gIDx2YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhYi1kb2N1bWVudGVuLWFwaS1maWx0ZXJcbiAgICBbcHJlZmlsbEZpbHRlcl09XCJmaWx0ZXIkIHwgYXN5bmNcIlxuICAgIChmaWx0ZXJFdmVudCk9XCJvbkZpbHRlckV2ZW50KCRldmVudClcIlxuICA+PC92YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhYi1kb2N1bWVudGVuLWFwaS1maWx0ZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Jlc2V0RmlsdGVyQnV0dG9uPlxuICA8YnV0dG9uIGNkc0J1dHRvbj1cInByaW1hcnlcIiAoY2xpY2spPVwib25GaWx0ZXJFdmVudChudWxsKVwiPlxuICAgIHt7ICdSZXNldCBmaWx0ZXInIHwgdHJhbnNsYXRlIH19XG5cbiAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwidHJhc2gtY2FuXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN1cGxvYWRCdXR0b24gbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgPGJ1dHRvblxuICAgIFtkaXNhYmxlZF09XCIodXBsb2FkUHJvY2Vzc0xpbmtlZFNldCAmJiAhdXBsb2FkUHJvY2Vzc0xpbmtlZCkgfHwgc2hvd1phYWtMaW5rV2FybmluZyB8fCBkaXNhYmxlZFwiXG4gICAgW3ZUb29sdGlwXT1cImdldFVwbG9hZEJ1dHRvblRvb2x0aXAoKSB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cIm9uVXBsb2FkQnV0dG9uQ2xpY2soKVwiXG4gICAgY2RzQnV0dG9uPVwicHJpbWFyeVwiXG4gID5cbiAgICB7eyAnVXBsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJ1cGxvYWRcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RyYW5zbGF0aW9uVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIHt7ICdkb2N1bWVudC4nICsgZGF0YS5pdGVtW2RhdGEua2V5XSB8IHRyYW5zbGF0ZSB9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNuYXZpZ2F0ZVRvQ2FzZUFkbWluQnV0dG9uPlxuICA8YnV0dG9uIChjbGljayk9XCJvbk5hdmlnYXRlVG9DYXNlQWRtaW5DbGljaygpXCIgY2RzQnV0dG9uPVwicHJpbWFyeVwiPlxuICAgIHt7ICdkb3NzaWVyLmRvY3VtZW50ZW4ubmF2aWdhdGVUb0Nhc2VBZG1pbicgfCB0cmFuc2xhdGUgfX1cblxuICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJzZXR0aW5nc1wiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vemd3L3NyYy9saWIvbW9kdWxlcy9kb2N1bWVudGVuLWFwaS9jb21wb25lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUE4QyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFL0YsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUVMLGdCQUFnQixFQUVoQix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUl4QixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUk3QixPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQWMsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFFYixFQUFFLEVBQ0YsYUFBYSxFQUNiLE9BQU8sRUFDUCxZQUFZLEdBQ2IsTUFBTSxNQUFNLENBQUM7QUFDZCxP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LE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPO2dCQUNMLFNBQVMsRUFBRSxJQUFJO2dCQUNmLEtBQUssRUFBRTtvQkFDTCxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDcEIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQWM7aUJBQ3ZDO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBbGFVLCtDQUErQzttR0FBL0MsK0NBQStDLG9VQzVFNUQseTZNQXNMQSwraENEckhJLFlBQVkseVpBQ1osZ0JBQWdCLDIxQkFDaEIsbUNBQW1DLHlmQUNuQyxZQUFZLGdNQUNaLFVBQVUsNE5BQ1YsZUFBZSw0RkFDZiw0QkFBNEIsc0hBQzVCLFlBQVksbVFBQ1osdUJBQXVCOzs0RkFHZCwrQ0FBK0M7a0JBakIzRCxTQUFTOytCQUNFLHFEQUFxRCxjQUduRCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLG1DQUFtQzt3QkFDbkMsWUFBWTt3QkFDWixVQUFVO3dCQUNWLGVBQWU7d0JBQ2YsNEJBQTRCO3dCQUM1QixZQUFZO3dCQUNaLHVCQUF1QjtxQkFDeEI7K1pBR3VCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDWSxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RmlsdGVyMTYsIFRhZ0dyb3VwMTYsIFVwbG9hZDE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RNb2R1bGUsXG4gIENvbHVtbkNvbmZpZyxcbiAgQ29uZmlybWF0aW9uTW9kYWxNb2R1bGUsXG4gIERFRkFVTFRfUEFHSU5BVElPTixcbiAgREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHLFxuICBEb2N1bWVudGVuQXBpTWV0YWRhdGEsXG4gIFBhZ2luYXRpb24sXG4gIFNvcnRTdGF0ZSxcbiAgVmlld1R5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlLCBEaXJlY3Rpb259IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0Rvd25sb2FkU2VydmljZSwgVXBsb2FkUHJvdmlkZXJTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9yZXNvdXJjZSc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7QnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIEljb25Nb2R1bGUsIEljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFJlcGxheVN1YmplY3QsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ09MVU1OX1ZJRVdfVFlQRVMsXG4gIENvbmZpZ3VyZWRDb2x1bW4sXG4gIERPQ1VNRU5URU5fQ09MVU1OX0tFWVMsXG4gIERvY3VtZW50ZW5BcGlGaWx0ZXJNb2RlbCxcbiAgRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlLFxuICBTdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlLCBEb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7RG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG9jdW1lbnRlbi1hcGktZG9jdW1lbnQuc2VydmljZSc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlGaWx0ZXJDb21wb25lbnR9IGZyb20gJy4uL2RvY3VtZW50ZW4tYXBpLWZpbHRlci9kb2N1bWVudGVuLWFwaS1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7RG9jdW1lbnRlbkFwaU1ldGFkYXRhTW9kYWxDb21wb25lbnR9IGZyb20gJy4uL2RvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsL2RvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFiLWRvY3VtZW50ZW4tYXBpLWRvY3VtZW50cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDYXJib25MaXN0TW9kdWxlLFxuICAgIERvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50LFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBEb2N1bWVudGVuQXBpRmlsdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ01vZHVsZSxcbiAgICBDb25maXJtYXRpb25Nb2RhbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llckRldGFpbFRhYkRvY3VtZW50ZW5BcGlEb2N1bWVudHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndHJhbnNsYXRpb25UZW1wbGF0ZScpIHRyYW5zbGF0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICBmaWx0ZXIoY2FzZURlZmluaXRpb25OYW1lID0+ICEhY2FzZURlZmluaXRpb25OYW1lKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PFN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQ6IE9ic2VydmFibGU8U3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPiA9XG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcChjYXNlRGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2UuZ2V0U3VwcG9ydGVkQXBpRmVhdHVyZXMoY2FzZURlZmluaXRpb25OYW1lKVxuICAgICAgKSxcbiAgICAgIHRhcChzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMgPT5cbiAgICAgICAgdGhpcy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkLm5leHQoc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpZWxkcyQ6IE9ic2VydmFibGU8Q29sdW1uQ29uZmlnW10+ID0gdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5maWVsZHNMb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaUNvbHVtblNlcnZpY2UuZ2V0Q29uZmlndXJlZENvbHVtbnMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICAgIHRoaXMuX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQsXG4gICAgICAgIHRoaXMuX3NvcnQkLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW2NvbHVtbnMsIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcywgc29ydF0pID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3J0Q29sdW1uOiBDb25maWd1cmVkQ29sdW1uIHwgdW5kZWZpbmVkID0gY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sdW1uOiBDb25maWd1cmVkQ29sdW1uKSA9PiAhIWNvbHVtbi5kZWZhdWx0U29ydFxuICAgICAgKTtcbiAgICAgIGlmICghIWRlZmF1bHRTb3J0Q29sdW1uICYmICFzb3J0ICYmIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcy5zdXBwb3J0c1NvcnRhYmxlQ29sdW1ucykge1xuICAgICAgICB0aGlzLl9zb3J0JC5uZXh0KHtzb3J0OiBgJHtkZWZhdWx0U29ydENvbHVtbi5rZXl9LCR7ZGVmYXVsdFNvcnRDb2x1bW4uZGVmYXVsdFNvcnR9YH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbjogQ29uZmlndXJlZENvbHVtbikgPT4gKHtcbiAgICAgICAga2V5OiBjb2x1bW4ua2V5ID09PSBET0NVTUVOVEVOX0NPTFVNTl9LRVlTLkJFU1RBTkRTT01WQU5HID8gJ3NpemUnIDogY29sdW1uLmtleSxcbiAgICAgICAgbGFiZWw6IGB6Z3cuZG9jdW1lbnRDb2x1bW5zLiR7Y29sdW1uLmtleX1gLFxuICAgICAgICB2aWV3VHlwZTogIUNPTFVNTl9WSUVXX1RZUEVTW2NvbHVtbi5rZXldID8gVmlld1R5cGUuVEVYVCA6IENPTFVNTl9WSUVXX1RZUEVTW2NvbHVtbi5rZXldLFxuICAgICAgICAuLi4oQ09MVU1OX1ZJRVdfVFlQRVNbY29sdW1uLmtleV0gPT09IFZpZXdUeXBlLlRFTVBMQVRFICYmIHtcbiAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy50cmFuc2xhdGlvblRlbXBsYXRlLFxuICAgICAgICAgIHRlbXBsYXRlRGF0YToge2tleTogY29sdW1uLmtleX0sXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4oY29sdW1uLmtleSA9PT0gRE9DVU1FTlRFTl9DT0xVTU5fS0VZUy5DUkVBVElFREFUVU0gJiYge2Zvcm1hdDogJ0RELU1NLVlZWVknfSksXG4gICAgICAgIHNvcnRhYmxlOiBjb2x1bW4uc29ydGFibGUgJiYgc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLnN1cHBvcnRzU29ydGFibGVDb2x1bW5zLFxuICAgICAgfSkpO1xuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLmZpZWxkc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIH0pXG4gICk7XG4gIHB1YmxpYyBkb2N1bWVudDogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlO1xuICBwdWJsaWMgYWN0aW9uSXRlbXM6IEFjdGlvbkl0ZW1bXSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogJ2RvY3VtZW50LmRvd25sb2FkJyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9uRG93bmxvYWRBY3Rpb25DbGljay5iaW5kKHRoaXMpLFxuICAgICAgdHlwZTogJ25vcm1hbCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ2RvY3VtZW50LmVkaXQnLFxuICAgICAgY2FsbGJhY2s6IHRoaXMub25FZGl0TWV0YWRhdGEuYmluZCh0aGlzKSxcbiAgICAgIGRpc2FibGVkQ2FsbGJhY2s6IHRoaXMuZWRpdERpc2FibGVkLmJpbmQodGhpcyksXG4gICAgICB0eXBlOiAnbm9ybWFsJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnZG9jdW1lbnQuZGVsZXRlJyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9uRGVsZXRlQWN0aW9uQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgIH0sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICBmaWx0ZXIoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiAhIWRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50SWQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudElkKSxcbiAgICBmaWx0ZXIoZG9jdW1lbnRJZCA9PiAhIWRvY3VtZW50SWQpXG4gICk7XG5cbiAgcHVibGljIGlzQWRtaW46IGJvb2xlYW47XG4gIHB1YmxpYyBzaG93WmFha0xpbmtXYXJuaW5nOiBib29sZWFuO1xuICBwdWJsaWMgdXBsb2FkUHJvY2Vzc0xpbmtlZFNldCA9IGZhbHNlO1xuICBwdWJsaWMgdXBsb2FkUHJvY2Vzc0xpbmtlZCE6IGJvb2xlYW47XG5cbiAgcHVibGljIGlzRWRpdE1vZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFjY2VwdGVkRmlsZXM6IHN0cmluZyB8IG51bGwgPVxuICAgIHRoaXMuY29uZmlnU2VydmljZT8uY29uZmlnPy5jYXNlRmlsZVVwbG9hZEFjY2VwdGVkRmlsZXMgfHwgbnVsbDtcbiAgcHVibGljIHJlYWRvbmx5IG1heEZpbGVTaXplOiBudW1iZXIgPSB0aGlzLmNvbmZpZ1NlcnZpY2U/LmNvbmZpZz8uY2FzZUZpbGVTaXplVXBsb2FkTGltaXRNQiB8fCA1O1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWxlVG9CZVVwbG9hZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsZSB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgbW9kYWxEaXNhYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dNb2RhbCQgPSBuZXcgU3ViamVjdDxudWxsPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1VwbG9hZE1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSB1cGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9pdGVtc0xvYWRpbmckLCB0aGlzLmZpZWxkc0xvYWRpbmckXSkucGlwZShcbiAgICBtYXAoKFtpdGVtc0xvYWRpbmcsIGZpZWxkc0xvYWRpbmddKSA9PiBpdGVtc0xvYWRpbmcgfHwgZmllbGRzTG9hZGluZylcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyJCA9IG5ldyBSZXBsYXlTdWJqZWN0PERvY3VtZW50ZW5BcGlGaWx0ZXJNb2RlbCB8IG51bGw+KCk7XG4gIHB1YmxpYyByZWFkb25seSBwYWdpbmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbj4oREVGQVVMVF9QQUdJTkFUSU9OKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVmZXRjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zb3J0JCA9IG5ldyBSZXBsYXlTdWJqZWN0PHtzb3J0OiBzdHJpbmd9IHwgbnVsbD4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcGFnaW5hdG9yQ29uZmlnID0ge1xuICAgIC4uLkRFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRyxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zOiBbNSwgMTAsIDIwLCA1MCwgMTAwXSxcbiAgfTtcblxuICBwdWJsaWMgZ2V0IHNvcnRTdGF0ZSQoKTogT2JzZXJ2YWJsZTxTb3J0U3RhdGUgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnQkLnBpcGUobWFwKHNvcnRWYWx1ZSA9PiB0aGlzLmdldFNvcnRTdGF0ZUZyb21Tb3J0U3RyaW5nKHNvcnRWYWx1ZT8uc29ydCkpKTtcbiAgfVxuXG4gIHB1YmxpYyByZWxhdGVkRmlsZXMkOiBPYnNlcnZhYmxlPEFycmF5PERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudElkJCxcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAsXG4gICAgdGhpcy5fcmVmZXRjaCQsXG4gIF0pLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnRJZCwgcXVlcnlQYXJhbXNdKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZS5nZXRGaWx0ZXJlZFpha2VuQXBpRG9jdW1lbnRzKFxuICAgICAgICAgIGRvY3VtZW50SWQsXG4gICAgICAgICAgcXVlcnlQYXJhbXNbJ3BhcmFtcyddXG4gICAgICAgICksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW3JlbGF0ZWRGaWxlc10pID0+IHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKSxcbiAgICAgICAgY29sbGVjdGlvblNpemU6IHJlbGF0ZWRGaWxlcy50b3RhbEVsZW1lbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkRmlsZXMgPSByZWxhdGVkRmlsZXM/LmNvbnRlbnQ/Lm1hcChmaWxlID0+ICh7XG4gICAgICAgIC4uLmZpbGUsXG4gICAgICAgIGNyZWF0ZWRCeTogZmlsZS5jcmVhdGVkQnkgfHwgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xpc3QuYXV0b21hdGljYWxseUdlbmVyYXRlZCcpLFxuICAgICAgICBzaXplOiB0aGlzLmJ5dGVzVG9NZWdhYnl0ZXMoZmlsZS5iZXN0YW5kc29tdmFuZyksXG4gICAgICAgIHRhZ3M6IGZpbGUudHJlZndvb3JkZW4/Lm1hcCgodHJlZndvb3JkOiBzdHJpbmcpID0+ICh7XG4gICAgICAgICAgY29udGVudDogdHJlZndvb3JkLFxuICAgICAgICB9KSksXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlZEZpbGVzIHx8IFtdO1xuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLl9pdGVtc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIH0pLFxuICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93WmFha0xpbmtXYXJuaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBsb2FkUHJvdmlkZXJTZXJ2aWNlOiBVcGxvYWRQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb3dubG9hZFNlcnZpY2U6IERvd25sb2FkU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlclByb3ZpZGVyU2VydmljZTogVXNlclByb3ZpZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25TZXJ2aWNlOiBJY29uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2U6IERvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudGVuQXBpQ29sdW1uU2VydmljZTogRG9jdW1lbnRlbkFwaUNvbHVtblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2U6IERvY3VtZW50ZW5BcGlWZXJzaW9uU2VydmljZVxuICApIHtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyKEZpbHRlcjE2KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEluaXRpYWxQYXJhbXMoKTtcbiAgICB0aGlzLnNldFVwbG9hZFByb2Nlc3NMaW5rZWQoKTtcbiAgICB0aGlzLmlzVXNlckFkbWluKCk7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbRmlsdGVyMTYsIFRhZ0dyb3VwMTYsIFVwbG9hZDE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uRGVsZXRlQWN0aW9uQ2xpY2soaXRlbTogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudCA9IGl0ZW07XG4gICAgdGhpcy5zaG93RGVsZXRlQ29uZmlybWF0aW9uTW9kYWwkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlRG9jdW1lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5faXRlbXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZS5kZWxldGVEb2N1bWVudCh0aGlzLmRvY3VtZW50KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZldGNoRG9jdW1lbnRzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYnl0ZXNUb01lZ2FieXRlcyhieXRlczogbnVtYmVyIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIWJ5dGVzKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBtZWdhYnl0ZXMgPSBieXRlcyAvICgxMDI0ICogMTAyNCk7XG4gICAgaWYgKG1lZ2FieXRlcyA8IDEpIHtcbiAgICAgIHJldHVybiBgJHtNYXRoLmNlaWwobWVnYWJ5dGVzICogMTAwMCl9IEtCYDtcbiAgICB9IGVsc2UgaWYgKG1lZ2FieXRlcyA8IDEwMDApIHtcbiAgICAgIHJldHVybiBtZWdhYnl0ZXMudG9GaXhlZCgyKSArICcgTUInO1xuICAgIH1cblxuICAgIHJldHVybiAobWVnYWJ5dGVzIC8gMTAwMCkudG9GaXhlZCgyKSArICcgR0InO1xuICB9XG5cbiAgcHVibGljIGdldFVwbG9hZEJ1dHRvblRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy51cGxvYWRQcm9jZXNzTGlua2VkU2V0ICYmIHRoaXMudXBsb2FkUHJvY2Vzc0xpbmtlZCkge1xuICAgICAgcmV0dXJuICdVcGxvYWQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0FkbWluKSB7XG4gICAgICByZXR1cm4gJ2Rvc3NpZXIuZG9jdW1lbnRlbi5ub1Byb2Nlc3NMaW5rZWQuYWRtaW5Sb2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ2Rvc3NpZXIuZG9jdW1lbnRlbi5ub1Byb2Nlc3NMaW5rZWQucmVndWxhclVzZXInO1xuICB9XG5cbiAgcHVibGljIGlzVXNlckFkbWluKCkge1xuICAgIHRoaXMudXNlclByb3ZpZGVyU2VydmljZVxuICAgICAgLmdldFVzZXJTdWJqZWN0KClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICB1c2VySWRlbnRpdHkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBZG1pbiA9IHVzZXJJZGVudGl0eS5yb2xlcy5pbmNsdWRlcygnUk9MRV9BRE1JTicpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0FkbWluID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgbWV0YWRhdGFTZXQobWV0YWRhdGE6IERvY3VtZW50ZW5BcGlNZXRhZGF0YSk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5maWxlVG9CZVVwbG9hZGVkJCwgdGhpcy5kb2N1bWVudElkJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoW2ZpbGUsIGRvY3VtZW50SWRdKSA9PiB7XG4gICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG4gICAgICAgICAgaWYgKHRoaXMuaXNFZGl0TW9kZSQuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZURvY3VtZW50KGZpbGUsIG1ldGFkYXRhKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnJlZmV0Y2hEb2N1bWVudHMoKTtcbiAgICAgICAgICAgICAgdGhpcy51cGxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICB0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLm5leHQobnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm92aWRlclNlcnZpY2VcbiAgICAgICAgICAgICAgLnVwbG9hZEZpbGVXaXRoTWV0YWRhdGEoZmlsZSwgZG9jdW1lbnRJZCwgbWV0YWRhdGEpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVmZXRjaERvY3VtZW50cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dChERUZBVUxUX1BBR0lOQVRJT04pO1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRvd25sb2FkQWN0aW9uQ2xpY2soZmlsZTogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5kb3dubG9hZERvY3VtZW50KGZpbGUsIHRydWUpO1xuICB9XG5cbiAgcHVibGljIG9uRWRpdE1ldGFkYXRhKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLmlzRWRpdE1vZGUkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5maWxlVG9CZVVwbG9hZGVkJC5uZXh0KGZpbGUpO1xuICAgIHRoaXMuc2hvd1VwbG9hZE1vZGFsJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIGNsb3NlTWV0YWRhdGFNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dVcGxvYWRNb2RhbCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0TW9kZSQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5maWxlVG9CZVVwbG9hZGVkJC5uZXh0KGV2ZW50LnRhcmdldC5maWxlc1swXSk7XG4gICAgdGhpcy5zaG93VXBsb2FkTW9kYWwkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5yZXNldEZpbGVJbnB1dCgpO1xuICB9XG5cbiAgcHVibGljIG9uTmF2aWdhdGVUb0Nhc2VBZG1pbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9kb3NzaWVyLW1hbmFnZW1lbnQvZG9zc2llci8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9YF0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWREb2N1bWVudChldmVudCwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG9uUGFnaW5hdGlvbkNsaWNrZWQocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi50aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCksIHBhZ2V9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblBhZ2luYXRpb25TZXQoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qge2NvbGxlY3Rpb25TaXplLCBwYWdlfSA9IHRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKTtcbiAgICBjb25zdCByZXNldFBhZ2U6IGJvb2xlYW4gPSBNYXRoLmNlaWwoK2NvbGxlY3Rpb25TaXplIC8gc2l6ZSkgPD0gK3BhZ2UgJiYgK2NvbGxlY3Rpb25TaXplID4gMDtcbiAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKSwgc2l6ZSwgLi4uKHJlc2V0UGFnZSAmJiB7cGFnZTogMX0pfSk7XG4gIH1cblxuICBwdWJsaWMgb25VcGxvYWRCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgb25GaWx0ZXJFdmVudChmaWx0ZXI6IERvY3VtZW50ZW5BcGlGaWx0ZXJNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlciQubmV4dChmaWx0ZXIpO1xuICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7Li4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLCAuLi5ERUZBVUxUX1BBR0lOQVRJT059KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNvcnRDaGFuZ2VkKHNvcnRTdGF0ZTogU29ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5fc29ydCQubmV4dChcbiAgICAgIHNvcnRTdGF0ZS5pc1NvcnRpbmdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzb3J0OiBgJHtzb3J0U3RhdGUuc3RhdGUubmFtZSA9PT0gJ3NpemUnID8gRE9DVU1FTlRFTl9DT0xVTU5fS0VZUy5CRVNUQU5EU09NVkFORyA6IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lfSwke3NvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb259YCxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVmZXRjaERvY3VtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWZldGNoJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0RGlzYWJsZWQoZmlsZTogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpbGUuc3RhdHVzID09PSAnZGVmaW5pdGllZic7XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkRG9jdW1lbnQocmVsYXRlZEZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSwgZm9yY2VEb3dubG9hZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWRTZXJ2aWNlLmRvd25sb2FkRmlsZShcbiAgICAgIGAvYXBpL3YxL2RvY3VtZW50ZW4tYXBpLyR7cmVsYXRlZEZpbGUucGx1Z2luQ29uZmlndXJhdGlvbklkfS9maWxlcy8ke3JlbGF0ZWRGaWxlLmZpbGVJZH0vZG93bmxvYWRgLFxuICAgICAgcmVsYXRlZEZpbGUuYmVzdGFuZHNuYWFtID8/ICcnLFxuICAgICAgZm9yY2VEb3dubG9hZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5RdWVyeVBhcmFtc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgICAgICB0aGlzLmRvY3VtZW50SWQkLFxuICAgICAgICB0aGlzLmZpbHRlciQsXG4gICAgICAgIHRoaXMuX3NvcnQkLFxuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLFxuICAgICAgXSkuc3Vic2NyaWJlKChbZGVmaW5pdGlvbk5hbWUsIGRvY3VtZW50SWQsIGZpbHRlciwgc29ydCwgcGFnaW5hdGlvbl0pID0+IHtcbiAgICAgICAgY29uc3Qge3NpemUsIHBhZ2V9ID0gcGFnaW5hdGlvbjtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvZG9zc2llcnMvJHtkZWZpbml0aW9uTmFtZX0vZG9jdW1lbnQvJHtkb2N1bWVudElkfS9kb2N1bWVudHNgXSwge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7Li4uZmlsdGVyLCAuLi5zb3J0LCBzaXplLCBwYWdlOiBwYWdlIC0gMX0sXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZpbGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldFVwbG9hZFByb2Nlc3NMaW5rZWQoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm92aWRlclNlcnZpY2UuY2hlY2tVcGxvYWRQcm9jZXNzTGluayhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgICApLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkUHJvY2Vzc0xpbmtlZFNldCA9IHRydWU7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaW5rZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy51cGxvYWRQcm9jZXNzTGlua2VkID0gbGlua2VkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKHF1ZXJ5UGFyYW1zID0+IHtcbiAgICAgICAgICBjb25zdCB7c29ydCwgc2l6ZSwgcGFnZSwgLi4uZmlsdGVyfSA9IHF1ZXJ5UGFyYW1zWydwYXJhbXMnXTtcbiAgICAgICAgICByZXR1cm4ge3NvcnQsIGZpbHRlciwgc2l6ZSwgcGFnZX07XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7ZmlsdGVyLCBzb3J0LCBzaXplLCBwYWdlfSkgPT4ge1xuICAgICAgICB0aGlzLl9zb3J0JC5uZXh0KHtzb3J0fSk7XG4gICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KGZpbHRlcik7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHNpemU6ICtzaXplLFxuICAgICAgICAgIHBhZ2U6ICsocGFnZSA/PyAwKSArIDEsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9wZW5RdWVyeVBhcmFtc1N1YnNjcmlwdGlvbigpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNvcnRTdGF0ZUZyb21Tb3J0U3RyaW5nKHNvcnRTdHJpbmc/OiBzdHJpbmcpOiBTb3J0U3RhdGUgfCBudWxsIHtcbiAgICBjb25zdCBzcGxpdFN0cmluZyA9IHNvcnRTdHJpbmcgJiYgc29ydFN0cmluZy5zcGxpdCgnLCcpO1xuICAgIGlmIChzcGxpdFN0cmluZyAmJiBzcGxpdFN0cmluZz8ubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNTb3J0aW5nOiB0cnVlLFxuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIG5hbWU6IHNwbGl0U3RyaW5nWzBdLFxuICAgICAgICAgIGRpcmVjdGlvbjogc3BsaXRTdHJpbmdbMV0gYXMgRGlyZWN0aW9uLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPGRpdlxuICBjbGFzcz1cImNhcmJvbi1kb2N1bWVudC10YWJsZS13cmFwcGVyXCJcbiAgKm5nSWY9XCJ7XG4gICAgbG9hZGluZzogbG9hZGluZyQgfCBhc3luYyxcbiAgICBmaWVsZHNMb2FkaW5nOiBmaWVsZHNMb2FkaW5nJCB8IGFzeW5jLFxuICAgIHVwbG9hZGluZzogdXBsb2FkaW5nJCB8IGFzeW5jLFxuICAgIHJlbGF0ZWRGaWxlczogcmVsYXRlZEZpbGVzJCB8IGFzeW5jLFxuICAgIGZpZWxkczogZmllbGRzJCB8IGFzeW5jLFxuICAgIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlczogc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJCB8IGFzeW5jLFxuICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24kIHwgYXN5bmMsXG4gICAgc29ydFN0YXRlOiBzb3J0U3RhdGUkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbj5cbiAgQGlmICgoIW9icy5maWVsZHNMb2FkaW5nICYmIG9icy5maWVsZHMubGVuZ3RoKSB8fCBvYnMuZmllbGRzTG9hZGluZykge1xuICAgIDx2YWx0aW1vLWNhcmJvbi1saXN0XG4gICAgICBbYWN0aW9uSXRlbXNdPVwiYWN0aW9uSXRlbXNcIlxuICAgICAgW2l0ZW1zXT1cIm9icy5yZWxhdGVkRmlsZXNcIlxuICAgICAgW2ZpZWxkc109XCJvYnMuZmllbGRzXCJcbiAgICAgIFtpbml0aWFsU29ydFN0YXRlXT1cIm9icy5zb3J0U3RhdGVcIlxuICAgICAgW2xvYWRpbmddPVwib2JzLmxvYWRpbmdcIlxuICAgICAgW3BhZ2luYXRpb25dPVwib2JzLnBhZ2luYXRpb25cIlxuICAgICAgW3BhZ2luYXRvckNvbmZpZ109XCJwYWdpbmF0b3JDb25maWdcIlxuICAgICAgcGFnaW5hdGlvbklkZW50aWZpZXI9XCJkb2N1bWVudGVuQXBpXCJcbiAgICAgIChyb3dDbGlja2VkKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXG4gICAgICAoc29ydENoYW5nZWQpPVwiXG4gICAgICAgIG9icz8uc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPy5zdXBwb3J0c1NvcnRhYmxlQ29sdW1ucyAmJiBvblNvcnRDaGFuZ2VkKCRldmVudClcbiAgICAgIFwiXG4gICAgICAocGFnaW5hdGlvbkNsaWNrZWQpPVwib25QYWdpbmF0aW9uQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgIChwYWdpbmF0aW9uU2V0KT1cIm9uUGFnaW5hdGlvblNldCgkZXZlbnQpXCJcbiAgICAgIGhpZGVDb2x1bW5IZWFkZXJcbiAgICA+XG4gICAgICA8ZGl2IGNhcmJvblRvb2xiYXJDb250ZW50PlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZXNcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgaGlkZGVuXG4gICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgLz5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJvYnM/LnN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcz8uc3VwcG9ydHNGaWx0ZXJhYmxlQ29sdW1uc1wiXG4gICAgICAgICAgW2Nkc092ZXJmbG93TWVudV09XCJvdmVyZmxvd0ZpbHRlclwiXG4gICAgICAgICAgW2N1c3RvbVBhbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgICAgIFtmbGlwXT1cInRydWVcIlxuICAgICAgICAgIFtvZmZzZXRdPVwie3g6IDAsIHk6IDQ3fVwiXG4gICAgICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwiZmlsdGVyXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9SZXN1bHRzXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC92YWx0aW1vLWNhcmJvbi1saXN0PlxuICB9IEBlbHNlIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cIm5hdmlnYXRlVG9DYXNlQWRtaW5CdXR0b25cIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIid6Z3cuZG9jdW1lbnRzLm5vQ29sdW1ucy5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgW3RpdGxlXT1cIid6Z3cuZG9jdW1lbnRzLm5vQ29sdW1ucy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfVxuXG4gIDx2YWx0aW1vLWRvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsXG4gICAgW29wZW5dPVwic2hvd1VwbG9hZE1vZGFsJCB8IGFzeW5jXCJcbiAgICBbZGlzYWJsZWQkXT1cIm1vZGFsRGlzYWJsZWQkXCJcbiAgICBbZmlsZSRdPVwiZmlsZVRvQmVVcGxvYWRlZCRcIlxuICAgIFtpc0VkaXRNb2RlXT1cImlzRWRpdE1vZGUkIHwgYXN5bmNcIlxuICAgIFtzdXBwb3J0c1RyZWZ3b29yZGVuXT1cIm9icz8uc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPy5zdXBwb3J0c1RyZWZ3b29yZGVuXCJcbiAgICAobW9kYWxDbG9zZSk9XCJjbG9zZU1ldGFkYXRhTW9kYWwoKVwiXG4gICAgKG1ldGFkYXRhKT1cIm1ldGFkYXRhU2V0KCRldmVudClcIlxuICA+PC92YWx0aW1vLWRvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsPlxuPC9kaXY+XG5cbjx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwiZGFzaGJvYXJkTWFuYWdlbWVudC5kZWxldGVNb2RhbC5jb25maXJtXCJcbiAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5kb2N1bWVudGVuLmRlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsLmNvbnRlbnRcIlxuICBjb25maXJtQnV0dG9uVHlwZT1cImRhbmdlclwiXG4gIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmRvY3VtZW50ZW4uZGVsZXRlQ29uZmlybWF0aW9uTW9kYWwudGl0bGVcIlxuICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0RlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsJFwiXG4gIChjb25maXJtRXZlbnQpPVwiZGVsZXRlRG9jdW1lbnQoKVwiXG4+XG48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI2Rvd25sb2FkQnV0dG9uIGxldC1pbmRleD1cImluZGV4XCIgbGV0LWl0ZW09XCJpdGVtXCI+XG4gIDxkaXZcbiAgICAqbmdJZj1cIntpc0Rvd25sb2FkaW5nOiBpbmRleGVzSW5jbHVkZUluZGV4KGRvd25sb2FkaW5nRmlsZUluZGV4ZXMkIHwgYXN5bmMsIGluZGV4KX0gYXMgdmFyc1wiXG4gICAgY2xhc3M9XCJkb3dubG9hZC1idXR0b24tY29udGFpbmVyXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiIXZhcnMuaXNEb3dubG9hZGluZ1wiXG4gICAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwiZG93bmxvYWREb2N1bWVudChpdGVtLCBpbmRleClcIlxuICAgID5cbiAgICAgIHt7ICdpbnRlcmZhY2UuZG93bmxvYWQnIHwgdHJhbnNsYXRlIH19XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJkb3dubG9hZFwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGNkcy1sb2FkaW5nIHNpemU9XCJzbVwiICpuZ0lmPVwidmFycy5pc0Rvd25sb2FkaW5nXCI+PC9jZHMtbG9hZGluZz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vUmVzdWx0cz5cbiAgQGlmICgoZmlsdGVyJCB8IGFzeW5jIHwga2V5dmFsdWUpPy5sZW5ndGgpIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cInJlc2V0RmlsdGVyQnV0dG9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInemd3LmRvY3VtZW50cy5ub1Jlc3VsdHMuZmlsdGVyRGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInemd3LmRvY3VtZW50cy5ub1Jlc3VsdHMuZmlsdGVyVGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIH0gQGVsc2UgaWYgKHNob3daYWFrTGlua1dhcm5pbmcgJiYgaXNBZG1pbikge1xuICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgIFthY3Rpb25dPVwibmF2aWdhdGVUb0Nhc2VBZG1pbkJ1dHRvblwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ2Rvc3NpZXIuZG9jdW1lbnRlbi5ub1phYWtGb3VuZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgW3RpdGxlXT1cIidkb3NzaWVyLmRvY3VtZW50ZW4ubm9aYWFrRm91bmRUaXRsZScgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfSBAZWxzZSB7XG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2FjdGlvbl09XCJ1cGxvYWRCdXR0b25cIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb3NzaWVyLmRvY3VtZW50ZW4ubm9GaWxlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgW3RpdGxlXT1cIidkb3NzaWVyLmRvY3VtZW50ZW4ubm9GaWxlc1RpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI292ZXJmbG93RmlsdGVyPlxuICA8dmFsdGltby1kb3NzaWVyLWRldGFpbC10YWItZG9jdW1lbnRlbi1hcGktZmlsdGVyXG4gICAgW3ByZWZpbGxGaWx0ZXJdPVwiZmlsdGVyJCB8IGFzeW5jXCJcbiAgICAoZmlsdGVyRXZlbnQpPVwib25GaWx0ZXJFdmVudCgkZXZlbnQpXCJcbiAgPjwvdmFsdGltby1kb3NzaWVyLWRldGFpbC10YWItZG9jdW1lbnRlbi1hcGktZmlsdGVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZXNldEZpbHRlckJ1dHRvbj5cbiAgPGJ1dHRvbiBjZHNCdXR0b249XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uRmlsdGVyRXZlbnQobnVsbClcIj5cbiAgICB7eyAnUmVzZXQgZmlsdGVyJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdXBsb2FkQnV0dG9uIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gIDxidXR0b25cbiAgICBbZGlzYWJsZWRdPVwiKHVwbG9hZFByb2Nlc3NMaW5rZWRTZXQgJiYgIXVwbG9hZFByb2Nlc3NMaW5rZWQpIHx8IHNob3daYWFrTGlua1dhcm5pbmcgfHwgZGlzYWJsZWRcIlxuICAgIFt2VG9vbHRpcF09XCJnZXRVcGxvYWRCdXR0b25Ub29sdGlwKCkgfCB0cmFuc2xhdGVcIlxuICAgIChjbGljayk9XCJvblVwbG9hZEJ1dHRvbkNsaWNrKClcIlxuICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICA+XG4gICAge3sgJ1VwbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwidXBsb2FkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvblRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICB7eyAnZG9jdW1lbnQuJyArIGRhdGEuaXRlbVtkYXRhLmtleV0gfCB0cmFuc2xhdGUgfX1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbmF2aWdhdGVUb0Nhc2VBZG1pbkJ1dHRvbj5cbiAgPGJ1dHRvbiAoY2xpY2spPVwib25OYXZpZ2F0ZVRvQ2FzZUFkbWluQ2xpY2soKVwiIGNkc0J1dHRvbj1cInByaW1hcnlcIj5cbiAgICB7eyAnZG9zc2llci5kb2N1bWVudGVuLm5hdmlnYXRlVG9DYXNlQWRtaW4nIHwgdHJhbnNsYXRlIH19XG5cbiAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwic2V0dGluZ3NcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19