@valtimo/zgw 12.43.0 → 12.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -449,7 +449,7 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
449
449
  }));
450
450
  }
451
451
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTabDocumentenApiDocumentsComponent, deps: [{ token: i1.ConfigService }, { token: i2.DocumentenApiColumnService }, { token: i2.DocumentenApiDocumentService }, { token: i2.DocumentenApiVersionService }, { token: i3.DownloadService }, { token: i4.IconService }, { token: i5.PermissionService }, { token: i6.ActivatedRoute }, { token: i6.Router }, { token: i7.TranslateService }, { token: i3.UploadProviderService }, { token: i8.UserProviderService }], target: i0.ɵɵFactoryTarget.Component }); }
452
- 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 uploadFields: uploadFields$ | async,\n defaultValues: defaultValues$ | async,\n hideFields: hideFields$ | 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 [defaultValues]=\"obs.defaultValues\"\n [disableAuthor]=\"obs.uploadFields?.auteur?.readonly\"\n [disableConfidentialityLevel]=\"obs.uploadFields?.vertrouwelijkheidaanduiding?.readonly\"\n [disableCreationDate]=\"obs.uploadFields?.creatiedatum?.readonly\"\n [disableDescription]=\"obs.uploadFields?.beschrijving?.readonly\"\n [disableDocumentTitle]=\"obs.uploadFields?.titel?.readonly\"\n [disableDocumentType]=\"obs.uploadFields?.informatieobjecttype?.readonly\"\n [disableFilename]=\"obs.uploadFields?.bestandsnaam?.readonly\"\n [disableLanguage]=\"obs.uploadFields?.taal?.readonly\"\n [disableStatus]=\"obs.uploadFields?.status?.readonly\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [hideFields]=\"obs.hideFields\"\n [isEditMode]=\"isEditMode$ | async\"\n [open]=\"showUploadModal$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n [uploadError]=\"uploadError()\"\n (metadata)=\"metadataSet($event)\"\n (modalClose)=\"closeMetadataModal()\"\n (uploadErrorDismiss)=\"uploadError.set(null)\"\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 #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]=\"\n (uploadProcessLinkedSet && !uploadProcessLinked) ||\n showZaakLinkWarning ||\n disabled ||\n (canCreateResource$ | async) === false\n \"\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 @if (data.item[data.key]) {\n {{ 'document.' + data.item[data.key] | translate }}\n } @else {\n -\n }\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$", "hideFields", "defaultValues", "disableAuthor", "disableConfidentialityLevel", "disableDescription", "disableDocumentTitle", "disableDocumentType", "disableFilename", "disableLanguage", "disableStatus", "supportsTrefwoorden", "disableCreationDate", "isEditMode", "uploadError", "open"], outputs: ["metadata", "modalClose", "uploadErrorDismiss"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "component", type: DocumentenApiFilterComponent, selector: "valtimo-dossier-detail-tab-documenten-api-filter", outputs: ["filterEvent"] }, { kind: "ngmodule", type: DialogModule }, { kind: "directive", type: i4.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"] }] }); }
452
+ 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 uploadFields: uploadFields$ | async,\n defaultValues: defaultValues$ | async,\n hideFields: hideFields$ | 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 [defaultValues]=\"obs.defaultValues\"\n [disableAuthor]=\"obs.uploadFields?.auteur?.readonly\"\n [disableConfidentialityLevel]=\"obs.uploadFields?.vertrouwelijkheidaanduiding?.readonly\"\n [disableCreationDate]=\"obs.uploadFields?.creatiedatum?.readonly\"\n [disableDescription]=\"obs.uploadFields?.beschrijving?.readonly\"\n [disableDocumentTitle]=\"obs.uploadFields?.titel?.readonly\"\n [disableDocumentType]=\"obs.uploadFields?.informatieobjecttype?.readonly\"\n [disableFilename]=\"obs.uploadFields?.bestandsnaam?.readonly\"\n [disableLanguage]=\"obs.uploadFields?.taal?.readonly\"\n [disableStatus]=\"obs.uploadFields?.status?.readonly\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [hideFields]=\"obs.hideFields\"\n [isEditMode]=\"isEditMode$ | async\"\n [open]=\"showUploadModal$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n [uploadError]=\"uploadError()\"\n [uploading]=\"obs.uploading\"\n (metadata)=\"metadataSet($event)\"\n (modalClose)=\"closeMetadataModal()\"\n (uploadErrorDismiss)=\"uploadError.set(null)\"\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 #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]=\"\n (uploadProcessLinkedSet && !uploadProcessLinked) ||\n showZaakLinkWarning ||\n disabled ||\n (canCreateResource$ | async) === false\n \"\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 @if (data.item[data.key]) {\n {{ 'document.' + data.item[data.key] | translate }}\n } @else {\n -\n }\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$", "hideFields", "defaultValues", "disableAuthor", "disableConfidentialityLevel", "disableDescription", "disableDocumentTitle", "disableDocumentType", "disableFilename", "disableLanguage", "disableStatus", "supportsTrefwoorden", "disableCreationDate", "isEditMode", "uploadError", "uploading", "open"], outputs: ["metadata", "modalClose", "uploadErrorDismiss"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "component", type: DocumentenApiFilterComponent, selector: "valtimo-dossier-detail-tab-documenten-api-filter", outputs: ["filterEvent"] }, { kind: "ngmodule", type: DialogModule }, { kind: "directive", type: i4.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"] }] }); }
453
453
  }
454
454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTabDocumentenApiDocumentsComponent, decorators: [{
455
455
  type: Component,
@@ -463,7 +463,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
463
463
  DocumentenApiFilterComponent,
464
464
  DialogModule,
465
465
  ConfirmationModalModule,
466
- ], 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 uploadFields: uploadFields$ | async,\n defaultValues: defaultValues$ | async,\n hideFields: hideFields$ | 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 [defaultValues]=\"obs.defaultValues\"\n [disableAuthor]=\"obs.uploadFields?.auteur?.readonly\"\n [disableConfidentialityLevel]=\"obs.uploadFields?.vertrouwelijkheidaanduiding?.readonly\"\n [disableCreationDate]=\"obs.uploadFields?.creatiedatum?.readonly\"\n [disableDescription]=\"obs.uploadFields?.beschrijving?.readonly\"\n [disableDocumentTitle]=\"obs.uploadFields?.titel?.readonly\"\n [disableDocumentType]=\"obs.uploadFields?.informatieobjecttype?.readonly\"\n [disableFilename]=\"obs.uploadFields?.bestandsnaam?.readonly\"\n [disableLanguage]=\"obs.uploadFields?.taal?.readonly\"\n [disableStatus]=\"obs.uploadFields?.status?.readonly\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [hideFields]=\"obs.hideFields\"\n [isEditMode]=\"isEditMode$ | async\"\n [open]=\"showUploadModal$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n [uploadError]=\"uploadError()\"\n (metadata)=\"metadataSet($event)\"\n (modalClose)=\"closeMetadataModal()\"\n (uploadErrorDismiss)=\"uploadError.set(null)\"\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 #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]=\"\n (uploadProcessLinkedSet && !uploadProcessLinked) ||\n showZaakLinkWarning ||\n disabled ||\n (canCreateResource$ | async) === false\n \"\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 @if (data.item[data.key]) {\n {{ 'document.' + data.item[data.key] | translate }}\n } @else {\n -\n }\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"] }]
466
+ ], 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 uploadFields: uploadFields$ | async,\n defaultValues: defaultValues$ | async,\n hideFields: hideFields$ | 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 [defaultValues]=\"obs.defaultValues\"\n [disableAuthor]=\"obs.uploadFields?.auteur?.readonly\"\n [disableConfidentialityLevel]=\"obs.uploadFields?.vertrouwelijkheidaanduiding?.readonly\"\n [disableCreationDate]=\"obs.uploadFields?.creatiedatum?.readonly\"\n [disableDescription]=\"obs.uploadFields?.beschrijving?.readonly\"\n [disableDocumentTitle]=\"obs.uploadFields?.titel?.readonly\"\n [disableDocumentType]=\"obs.uploadFields?.informatieobjecttype?.readonly\"\n [disableFilename]=\"obs.uploadFields?.bestandsnaam?.readonly\"\n [disableLanguage]=\"obs.uploadFields?.taal?.readonly\"\n [disableStatus]=\"obs.uploadFields?.status?.readonly\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [hideFields]=\"obs.hideFields\"\n [isEditMode]=\"isEditMode$ | async\"\n [open]=\"showUploadModal$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n [uploadError]=\"uploadError()\"\n [uploading]=\"obs.uploading\"\n (metadata)=\"metadataSet($event)\"\n (modalClose)=\"closeMetadataModal()\"\n (uploadErrorDismiss)=\"uploadError.set(null)\"\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 #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]=\"\n (uploadProcessLinkedSet && !uploadProcessLinked) ||\n showZaakLinkWarning ||\n disabled ||\n (canCreateResource$ | async) === false\n \"\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 @if (data.item[data.key]) {\n {{ 'document.' + data.item[data.key] | translate }}\n } @else {\n -\n }\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"] }]
467
467
  }], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.DocumentenApiColumnService }, { type: i2.DocumentenApiDocumentService }, { type: i2.DocumentenApiVersionService }, { type: i3.DownloadService }, { type: i4.IconService }, { type: i5.PermissionService }, { type: i6.ActivatedRoute }, { type: i6.Router }, { type: i7.TranslateService }, { type: i3.UploadProviderService }, { type: i8.UserProviderService }], propDecorators: { fileInput: [{
468
468
  type: ViewChild,
469
469
  args: ['fileInput']
@@ -471,4 +471,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
471
471
  type: ViewChild,
472
472
  args: ['translationTemplate']
473
473
  }] } });
474
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vemd3L3NyYy9saWIvbW9kdWxlcy9kb2N1bWVudGVuLWFwaS9jb21wb25lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsU0FBUyxFQUFpQyxNQUFNLEVBQWUsU0FBUyxHQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhHLE9BQU8sRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFFTCxnQkFBZ0IsRUFFaEIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFJeEIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUNMLDhCQUE4QixFQUU5Qiw0QkFBNEIsR0FFN0IsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQWMsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxZQUFZLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0csT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFDTCxpQkFBaUIsRUFFakIsc0JBQXNCLEdBS3ZCLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RHLE9BQU8sRUFDTCxtQ0FBbUMsRUFDcEMsTUFBTSwwRUFBMEUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBd0JsRixNQUFNLE9BQU8sK0NBQStDO0lBNk4xRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQWFELFlBQ21CLGFBQTRCLEVBQzVCLDBCQUFzRCxFQUN0RCw0QkFBMEQsRUFDMUQsMkJBQXdELEVBQ3hELGVBQWdDLEVBQ2hDLFdBQXdCLEVBQ3hCLGlCQUFvQyxFQUNwQyxLQUFxQixFQUNyQixNQUFjLEVBQ2QsZ0JBQWtDLEVBQ2xDLHFCQUE0QyxFQUM1QyxtQkFBd0M7UUFYeEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUN0RCxpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO1FBQzFELGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBNkI7UUFDeEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBcFAxQyw2QkFBd0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2hFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxFQUM3QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUNuRCxDQUFDO1FBRWMsb0NBQStCLEdBQzdDLElBQUksZUFBZSxDQUF3QyxJQUFJLENBQUMsQ0FBQztRQUVsRCxxQ0FBZ0MsR0FDL0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FDaEMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDN0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLENBQzdFLEVBQ0QsR0FBRyxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FDbkMsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUMxRSxDQUNGLENBQUM7UUFFWSxZQUFPLEdBQStCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQ3RGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUN6QyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUNqQyxhQUFhLENBQUM7WUFDWixJQUFJLENBQUMsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsc0JBQXNCLENBQUM7WUFDNUUsSUFBSSxDQUFDLGdDQUFnQztZQUNyQyxJQUFJLENBQUMsTUFBTTtTQUNaLENBQUMsQ0FDSCxFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDdEQsTUFBTSxpQkFBaUIsR0FBaUMsT0FBTyxDQUFDLElBQUksQ0FDbEUsQ0FBQyxNQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbkQsQ0FBQztZQUNGLElBQ0UsQ0FBQyxDQUFDLGlCQUFpQjtnQkFDbkIsQ0FBQyxJQUFJLEVBQUUsSUFBSTtnQkFDWCw4QkFBOEIsQ0FBQyx1QkFBdUIsRUFDdEQsQ0FBQztnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBQyxDQUFDLENBQUM7WUFDeEYsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQXdCLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRztnQkFDL0UsS0FBSyxFQUFFLHVCQUF1QixNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUMxQyxRQUFRLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQ3hGLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxDQUFDLFFBQVEsSUFBSTtvQkFDekQsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7b0JBQ2xDLFlBQVksRUFBRSxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFDO2lCQUNoQyxDQUFDO2dCQUNGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLHNCQUFzQixDQUFDLFlBQVksSUFBSSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsQ0FBQztnQkFDakYsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksOEJBQThCLENBQUMsdUJBQXVCO2FBQ3BGLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzNDLENBQUM7UUFFSyxnQkFBVyxHQUFpQjtZQUNqQztnQkFDRSxLQUFLLEVBQUUsbUJBQW1CO2dCQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQy9DLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNsRCxJQUFJLEVBQUUsUUFBUTthQUNmO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3hDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDOUMsSUFBSSxFQUFFLFFBQVE7YUFDZjtZQUNEO2dCQUNFLEtBQUssRUFBRSxpQkFBaUI7Z0JBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDN0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNoRCxJQUFJLEVBQUUsUUFBUTthQUNmO1NBQ0YsQ0FBQztRQUVjLDRCQUF1QixHQUF1QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2xGLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxFQUM3QyxNQUFNLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUMzRCxDQUFDO1FBRWMsZ0JBQVcsR0FBdUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0RSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQ2pDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FDbkMsQ0FBQztRQUlLLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUcvQixnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRXpDLGtCQUFhLEdBQzNCLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLDJCQUEyQixJQUFJLElBQUksQ0FBQztRQUNsRCxnQkFBVyxHQUFXLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixJQUFJLENBQUMsQ0FBQztRQUVqRixzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBYyxJQUFJLENBQUMsQ0FBQztRQUMzRCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3JELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELGdCQUFXLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUMxQyxpQ0FBNEIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVuRSxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNyRCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3BELGFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdkYsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsQ0FDdEUsQ0FBQztRQUVjLFlBQU8sR0FBRyxJQUFJLGFBQWEsRUFBbUMsQ0FBQztRQUMvRCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFhLGtCQUFrQixDQUFDLENBQUM7UUFDakUsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFPLElBQUksQ0FBQyxDQUFDO1FBQzVDLFdBQU0sR0FBRyxJQUFJLGFBQWEsRUFBeUIsQ0FBQztRQUdyRCxvQkFBZSxHQUFHO1lBQ2hDLEdBQUcsd0JBQXdCO1lBQzNCLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztTQUMxQyxDQUFDO1FBRUssZUFBVSxHQUFpQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDaEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFDdEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUNuRSxDQUFDO1FBRUssa0JBQWEsR0FBMEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pGLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUMvRixHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FDakIsWUFBWSxDQUFDLE1BQU0sQ0FDakIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2QsR0FBRyxHQUFHO1lBQ04sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1YsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO2dCQUNiLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDeEI7U0FDRixDQUFDLEVBQ0YsRUFBRSxDQUNILENBQ0YsQ0FDRixDQUFDO1FBRUssbUJBQWMsR0FDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakIsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWTtZQUN4QywyQkFBMkIsRUFBRSxVQUFVLEVBQUUsMkJBQTJCLEVBQUUsWUFBWTtZQUNsRixZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZO1lBQ3BELEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFlBQVk7WUFDdEMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLFlBQVk7WUFDcEUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWTtZQUNwRCxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZO1lBQ3BDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVk7WUFDeEMsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWTtnQkFDaEQsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUNaLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4QixFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDekIsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUVHLGdCQUFXLEdBQThCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyRSxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDZixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5RSxDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUssa0JBQWEsR0FBZ0QsYUFBYSxDQUFDO1lBQ2hGLElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTtZQUN4QixJQUFJLENBQUMsU0FBUztTQUNmLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3pDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FDdEMsYUFBYSxDQUFDO1lBQ1osSUFBSSxDQUFDLDRCQUE0QixDQUFDLDRCQUE0QixDQUM1RCxVQUFVLEVBQ1YsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUN0QjtZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3BDLENBQUMsQ0FDSCxFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDcEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDOUIsY0FBYyxFQUFFLFlBQVksQ0FBQyxhQUFhO2FBQzNDLENBQUMsQ0FBQztZQUNILE1BQU0sZUFBZSxHQUFHLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUQsR0FBRyxJQUFJO2dCQUNQLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUM7Z0JBQ3pGLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDaEQsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbEQsT0FBTyxFQUFFLFNBQVM7aUJBQ25CLENBQUMsQ0FBQzthQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0osT0FBTyxlQUFlLElBQUksRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsRUFBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUM3QyxDQUFDO1FBRWMsc0NBQWlDLEdBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUU3RSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBK0IsRUFBRSxDQUFDLENBQUM7UUFNaEUsdUJBQWtCLEdBQXdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUM3RSxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyw4QkFBOEIsRUFBRTtZQUNqRCxRQUFRLEVBQUUsNEJBQTRCLENBQUMsa0JBQWtCO1lBQ3pELFVBQVUsRUFBRSxVQUFVO1NBQ3ZCLENBQUMsQ0FDSCxDQUNGLENBQUM7UUFFZSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFnQm5ELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7SUFDeEUsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVNLCtCQUErQjtRQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDbkYsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ3ZCLE1BQU0sV0FBVyxHQUFpQyxFQUFFLENBQUM7WUFDckQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkIsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRztvQkFDekIsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3BELFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO29CQUN4RCxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtpQkFDekQsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsSUFBOEI7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDcEYsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO29CQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBeUI7UUFDL0MsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV0QixNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDN0MsQ0FBQzthQUFNLElBQUksU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzVCLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdEMsQ0FBQztRQUVELE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBRU0sc0JBQXNCO1FBQzNCLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzVELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixPQUFPLDhDQUE4QyxDQUFDO1FBQ3hELENBQUM7UUFFRCxPQUFPLGdEQUFnRCxDQUFDO0lBQzFELENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUI7YUFDckIsY0FBYyxFQUFFO2FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQ1IsWUFBWSxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBK0I7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLElBQUk7Z0JBQUUsT0FBTztZQUNsQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDckYsSUFBSSxFQUFFLEdBQUcsRUFBRTt3QkFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3BDLENBQUM7b0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBd0IsRUFBRSxFQUFFO3dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDOzRCQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUNqRSxDQUFDO3dCQUNKLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNwQyxDQUFDO29CQUNILENBQUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxxQkFBcUI7cUJBQ3ZCLHNCQUFzQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDO3FCQUNsRCxTQUFTLENBQUM7b0JBQ1QsSUFBSSxFQUFFLEdBQUcsRUFBRTt3QkFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7d0JBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwQyxDQUFDO29CQUNELEtBQUssRUFBRSxDQUFDLEtBQXdCLEVBQUUsRUFBRTt3QkFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQzs0QkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FDakUsQ0FBQzt3QkFDSixDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDcEMsQ0FBQztvQkFDSCxDQUFDO2lCQUNGLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxJQUE4QjtRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxjQUFjLENBQUMsSUFBVTtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxjQUFjLENBQUMsS0FBVTtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLDBCQUEwQjtRQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1lBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsK0JBQStCLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQzFCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLG1CQUFtQixDQUFDLElBQVk7UUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sZUFBZSxDQUFDLElBQVk7UUFDakMsTUFBTSxFQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNELE1BQU0sU0FBUyxHQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLGFBQWEsQ0FBQyxNQUF1QztRQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLGtCQUFrQixFQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU0sYUFBYSxDQUFDLFNBQW9CO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLFNBQVMsQ0FBQyxTQUFTO1lBQ2pCLENBQUMsQ0FBQztnQkFDRSxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7YUFDdkk7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUNULENBQUM7SUFDSixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUE4QjtRQUNyRCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ3JELENBQUM7SUFFTyxZQUFZLENBQUMsSUFBOEI7UUFDakQsT0FBTyxDQUNMLENBQUMsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLGtDQUFrQztZQUM3RSxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQztZQUMvQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FDOUMsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBOEI7UUFDbkQsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsV0FBcUMsRUFBRSxhQUFzQjtRQUNwRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQy9CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixnQkFBZ0IsV0FBVyxDQUFDLHFCQUFxQixrQkFBa0IsVUFBVSxVQUFVLFdBQVcsQ0FBQyxNQUFNLFdBQVcsRUFDOUksV0FBVyxDQUFDLFlBQVksSUFBSSxFQUFFLEVBQzlCLGFBQWEsQ0FDZCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNyQixhQUFhLENBQUM7WUFDWixJQUFJLENBQUMsdUJBQXVCO1lBQzVCLElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxPQUFPO1lBQ1osSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLENBQUMsV0FBVztTQUNqQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTtZQUN0RSxNQUFNLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxHQUFHLFVBQVUsQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsY0FBYyxhQUFhLFVBQVUsWUFBWSxDQUFDLEVBQUU7Z0JBQ3JGLFdBQVcsRUFBRSxFQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBQzthQUN4RCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyx1QkFBdUI7YUFDekIsSUFBSSxDQUNILFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUMxRSxFQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLE1BQWUsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTthQUNyQixJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoQixNQUFNLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUQsT0FBTyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDcEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDOUIsSUFBSSxFQUFFLENBQUMsSUFBSTtnQkFDWCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO2FBQ3ZCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFVBQW1CO1FBQ3BELE1BQU0sV0FBVyxHQUFHLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELElBQUksV0FBVyxJQUFJLFdBQVcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTztnQkFDTCxTQUFTLEVBQUUsSUFBSTtnQkFDZixLQUFLLEVBQUU7b0JBQ0wsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ3BCLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFjO2lCQUN2QzthQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sYUFBYSxDQUFDLGlCQUFvQyxFQUFFLE9BQWE7UUFDdkUsT0FBTyxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUNoRCxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0E1akJVLCtDQUErQzttR0FBL0MsK0NBQStDLG9VQ2pGNUQsZzJOQTJMQSwraENEckhJLFlBQVkseVpBQ1osZ0JBQWdCLDIxQkFDaEIsbUNBQW1DLDBjQUNuQyxZQUFZLGdNQUNaLFVBQVUsNE5BQ1YsZUFBZSw0RkFDZiw0QkFBNEIsc0hBQzVCLFlBQVksbVFBQ1osdUJBQXVCOzs0RkFHZCwrQ0FBK0M7a0JBakIzRCxTQUFTOytCQUNFLHFEQUFxRCxjQUduRCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLG1DQUFtQzt3QkFDbkMsWUFBWTt3QkFDWixVQUFVO3dCQUNWLGVBQWU7d0JBQ2YsNEJBQTRCO3dCQUM1QixZQUFZO3dCQUNaLHVCQUF1QjtxQkFDeEI7K2JBR3VCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDWSxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjYgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RmlsdGVyMTYsIFRhZ0dyb3VwMTYsIFVwbG9hZDE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RNb2R1bGUsXG4gIENvbHVtbkNvbmZpZyxcbiAgQ29uZmlybWF0aW9uTW9kYWxNb2R1bGUsXG4gIERFRkFVTFRfUEFHSU5BVElPTixcbiAgREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHLFxuICBEb2N1bWVudGVuQXBpTWV0YWRhdGEsXG4gIFBhZ2luYXRpb24sXG4gIFNvcnRTdGF0ZSxcbiAgVmlld1R5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlLCBEaXJlY3Rpb259IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1xuICBDQU5fQ1JFQVRFX1JFU09VUkNFX1BFUk1JU1NJT04sXG4gIERvd25sb2FkU2VydmljZSxcbiAgUkVTT1VSQ0VfUEVSTUlTU0lPTl9SRVNPVVJDRSxcbiAgVXBsb2FkUHJvdmlkZXJTZXJ2aWNlLFxufSBmcm9tICdAdmFsdGltby9yZXNvdXJjZSc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7QnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIEljb25Nb2R1bGUsIEljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENPTFVNTl9WSUVXX1RZUEVTLFxuICBDb25maWd1cmVkQ29sdW1uLFxuICBET0NVTUVOVEVOX0NPTFVNTl9LRVlTLFxuICBEb2N1bWVudGVuQXBpRmlsZVBlcm1pc3Npb25zLFxuICBEb2N1bWVudGVuQXBpRmlsdGVyTW9kZWwsXG4gIERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSxcbiAgU3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpQ29sdW1uU2VydmljZSwgRG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZSwgRG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlGaWx0ZXJDb21wb25lbnR9IGZyb20gJy4uL2RvY3VtZW50ZW4tYXBpLWZpbHRlci9kb2N1bWVudGVuLWFwaS1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIERvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50XG59IGZyb20gJy4uL2RvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsL2RvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBEb2N1bWVudGVuQXBpVXBsb2FkRmllbGREZWZhdWx0VmFsdWVzLFxuICBEb2N1bWVudGVuQXBpVXBsb2FkRmllbGRzLFxufSBmcm9tICcuLi8uLi9tb2RlbHMvZG9jdW1lbnRlbi1hcGktdXBsb2FkLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7UGVybWlzc2lvblJlcXVlc3QsIFBlcm1pc3Npb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9hY2Nlc3MtY29udHJvbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFiLWRvY3VtZW50ZW4tYXBpLWRvY3VtZW50cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDYXJib25MaXN0TW9kdWxlLFxuICAgIERvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50LFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBEb2N1bWVudGVuQXBpRmlsdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ01vZHVsZSxcbiAgICBDb25maXJtYXRpb25Nb2RhbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llckRldGFpbFRhYkRvY3VtZW50ZW5BcGlEb2N1bWVudHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndHJhbnNsYXRpb25UZW1wbGF0ZScpIHRyYW5zbGF0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICBmaWx0ZXIoY2FzZURlZmluaXRpb25OYW1lID0+ICEhY2FzZURlZmluaXRpb25OYW1lKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PFN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQ6IE9ic2VydmFibGU8U3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPiA9XG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcChjYXNlRGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2UuZ2V0U3VwcG9ydGVkQXBpRmVhdHVyZXMoY2FzZURlZmluaXRpb25OYW1lKVxuICAgICAgKSxcbiAgICAgIHRhcChzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMgPT5cbiAgICAgICAgdGhpcy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkLm5leHQoc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpZWxkcyQ6IE9ic2VydmFibGU8Q29sdW1uQ29uZmlnW10+ID0gdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5maWVsZHNMb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaUNvbHVtblNlcnZpY2UuZ2V0Q29uZmlndXJlZENvbHVtbnMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICAgIHRoaXMuX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQsXG4gICAgICAgIHRoaXMuX3NvcnQkLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW2NvbHVtbnMsIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcywgc29ydF0pID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3J0Q29sdW1uOiBDb25maWd1cmVkQ29sdW1uIHwgdW5kZWZpbmVkID0gY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sdW1uOiBDb25maWd1cmVkQ29sdW1uKSA9PiAhIWNvbHVtbi5kZWZhdWx0U29ydFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgISFkZWZhdWx0U29ydENvbHVtbiAmJlxuICAgICAgICAhc29ydD8uc29ydCAmJlxuICAgICAgICBzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMuc3VwcG9ydHNTb3J0YWJsZUNvbHVtbnNcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9zb3J0JC5uZXh0KHtzb3J0OiBgJHtkZWZhdWx0U29ydENvbHVtbi5rZXl9LCR7ZGVmYXVsdFNvcnRDb2x1bW4uZGVmYXVsdFNvcnR9YH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbjogQ29uZmlndXJlZENvbHVtbikgPT4gKHtcbiAgICAgICAga2V5OiBjb2x1bW4ua2V5ID09PSBET0NVTUVOVEVOX0NPTFVNTl9LRVlTLkJFU1RBTkRTT01WQU5HID8gJ3NpemUnIDogY29sdW1uLmtleSxcbiAgICAgICAgbGFiZWw6IGB6Z3cuZG9jdW1lbnRDb2x1bW5zLiR7Y29sdW1uLmtleX1gLFxuICAgICAgICB2aWV3VHlwZTogIUNPTFVNTl9WSUVXX1RZUEVTW2NvbHVtbi5rZXldID8gVmlld1R5cGUuVEVYVCA6IENPTFVNTl9WSUVXX1RZUEVTW2NvbHVtbi5rZXldLFxuICAgICAgICAuLi4oQ09MVU1OX1ZJRVdfVFlQRVNbY29sdW1uLmtleV0gPT09IFZpZXdUeXBlLlRFTVBMQVRFICYmIHtcbiAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy50cmFuc2xhdGlvblRlbXBsYXRlLFxuICAgICAgICAgIHRlbXBsYXRlRGF0YToge2tleTogY29sdW1uLmtleX0sXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4oY29sdW1uLmtleSA9PT0gRE9DVU1FTlRFTl9DT0xVTU5fS0VZUy5DUkVBVElFREFUVU0gJiYge2Zvcm1hdDogJ0RELU1NLVlZWVknfSksXG4gICAgICAgIHNvcnRhYmxlOiBjb2x1bW4uc29ydGFibGUgJiYgc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLnN1cHBvcnRzU29ydGFibGVDb2x1bW5zLFxuICAgICAgfSkpO1xuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB0aGlzLmZpZWxkc0xvYWRpbmckLm5leHQoZmFsc2UpKVxuICApO1xuICBwdWJsaWMgZG9jdW1lbnQ6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZTtcbiAgcHVibGljIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW10gPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdkb2N1bWVudC5kb3dubG9hZCcsXG4gICAgICBjYWxsYmFjazogdGhpcy5vbkRvd25sb2FkQWN0aW9uQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgIGRpc2FibGVkQ2FsbGJhY2s6IHRoaXMuZG93bmxvYWREaXNhYmxlZC5iaW5kKHRoaXMpLFxuICAgICAgdHlwZTogJ25vcm1hbCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ2RvY3VtZW50LmVkaXQnLFxuICAgICAgY2FsbGJhY2s6IHRoaXMub25FZGl0TWV0YWRhdGEuYmluZCh0aGlzKSxcbiAgICAgIGRpc2FibGVkQ2FsbGJhY2s6IHRoaXMuZWRpdERpc2FibGVkLmJpbmQodGhpcyksXG4gICAgICB0eXBlOiAnbm9ybWFsJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnZG9jdW1lbnQuZGVsZXRlJyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9uRGVsZXRlQWN0aW9uQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgIGRpc2FibGVkQ2FsbGJhY2s6IHRoaXMuZGVsZXRlRGlzYWJsZWQuYmluZCh0aGlzKSxcbiAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgIH0sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICBmaWx0ZXIoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiAhIWRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50SWQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudElkKSxcbiAgICBmaWx0ZXIoZG9jdW1lbnRJZCA9PiAhIWRvY3VtZW50SWQpXG4gICk7XG5cbiAgcHVibGljIGlzQWRtaW46IGJvb2xlYW47XG4gIHB1YmxpYyBzaG93WmFha0xpbmtXYXJuaW5nOiBib29sZWFuO1xuICBwdWJsaWMgdXBsb2FkUHJvY2Vzc0xpbmtlZFNldCA9IGZhbHNlO1xuICBwdWJsaWMgdXBsb2FkUHJvY2Vzc0xpbmtlZCE6IGJvb2xlYW47XG5cbiAgcHVibGljIGlzRWRpdE1vZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFjY2VwdGVkRmlsZXM6IHN0cmluZyB8IG51bGwgPVxuICAgIHRoaXMuY29uZmlnU2VydmljZT8uY29uZmlnPy5jYXNlRmlsZVVwbG9hZEFjY2VwdGVkRmlsZXMgfHwgbnVsbDtcbiAgcHVibGljIHJlYWRvbmx5IG1heEZpbGVTaXplOiBudW1iZXIgPSB0aGlzLmNvbmZpZ1NlcnZpY2U/LmNvbmZpZz8uY2FzZUZpbGVTaXplVXBsb2FkTGltaXRNQiB8fCA1O1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWxlVG9CZVVwbG9hZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsZSB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgbW9kYWxEaXNhYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dNb2RhbCQgPSBuZXcgU3ViamVjdDxudWxsPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1VwbG9hZE1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgdXBsb2FkRXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93RGVsZXRlQ29uZmlybWF0aW9uTW9kYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHVwbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXRlbXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBmaWVsZHNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2l0ZW1zTG9hZGluZyQsIHRoaXMuZmllbGRzTG9hZGluZyRdKS5waXBlKFxuICAgIG1hcCgoW2l0ZW1zTG9hZGluZywgZmllbGRzTG9hZGluZ10pID0+IGl0ZW1zTG9hZGluZyB8fCBmaWVsZHNMb2FkaW5nKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXIkID0gbmV3IFJlcGxheVN1YmplY3Q8RG9jdW1lbnRlbkFwaUZpbHRlck1vZGVsIHwgbnVsbD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uPihERUZBVUxUX1BBR0lOQVRJT04pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWZldGNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NvcnQkID0gbmV3IFJlcGxheVN1YmplY3Q8e3NvcnQ6IHN0cmluZ30gfCBudWxsPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHRpbW9FbmRwb2ludFVyaSE6IHN0cmluZztcblxuICBwdWJsaWMgcmVhZG9ubHkgcGFnaW5hdG9yQ29uZmlnID0ge1xuICAgIC4uLkRFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRyxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zOiBbNSwgMTAsIDIwLCA1MCwgMTAwXSxcbiAgfTtcblxuICBwdWJsaWMgc29ydFN0YXRlJDogT2JzZXJ2YWJsZTxTb3J0U3RhdGUgfCBudWxsPiA9IHRoaXMuX3NvcnQkLnBpcGUoXG4gICAgZmlsdGVyKHNvcnRWYWx1ZSA9PiAhIXNvcnRWYWx1ZT8uc29ydCksXG4gICAgbWFwKHNvcnRWYWx1ZSA9PiB0aGlzLmdldFNvcnRTdGF0ZUZyb21Tb3J0U3RyaW5nKHNvcnRWYWx1ZT8uc29ydCkpXG4gICk7XG5cbiAgcHVibGljIHVwbG9hZEZpZWxkcyQ6IE9ic2VydmFibGU8RG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkcz4gPSB0aGlzLmRvY3VtZW50SWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50SWQgPT4gdGhpcy5kb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlLmdldFByZWZpbGxlZFVwbG9hZEZpZWxkcyhkb2N1bWVudElkKSksXG4gICAgbWFwKHVwbG9hZEZpZWxkcyA9PlxuICAgICAgdXBsb2FkRmllbGRzLnJlZHVjZShcbiAgICAgICAgKGFjYywgY3VycikgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2N1cnIua2V5XToge1xuICAgICAgICAgICAga2V5OiBjdXJyLmtleSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogY3Vyci5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjdXJyLnZpc2libGUsXG4gICAgICAgICAgICByZWFkb25seTogY3Vyci5yZWFkb25seSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHVibGljIGRlZmF1bHRWYWx1ZXMkOiBPYnNlcnZhYmxlPERvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZERlZmF1bHRWYWx1ZXM+ID1cbiAgICB0aGlzLnVwbG9hZEZpZWxkcyQucGlwZShcbiAgICAgIG1hcChmb3JtRmllbGRzID0+ICh7XG4gICAgICAgIGF1dGV1cjogZm9ybUZpZWxkcz8uYXV0ZXVyPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZzogZm9ybUZpZWxkcz8udmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGJlc2NocmlqdmluZzogZm9ybUZpZWxkcz8uYmVzY2hyaWp2aW5nPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIHRpdGVsOiBmb3JtRmllbGRzPy50aXRlbD8uZGVmYXVsdFZhbHVlLFxuICAgICAgICBpbmZvcm1hdGllb2JqZWN0dHlwZTogZm9ybUZpZWxkcz8uaW5mb3JtYXRpZW9iamVjdHR5cGU/LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgYmVzdGFuZHNuYWFtOiBmb3JtRmllbGRzPy5iZXN0YW5kc25hYW0/LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdGFhbDogZm9ybUZpZWxkcz8udGFhbD8uZGVmYXVsdFZhbHVlLFxuICAgICAgICBzdGF0dXM6IGZvcm1GaWVsZHM/LnN0YXR1cz8uZGVmYXVsdFZhbHVlLFxuICAgICAgICB0cmVmd29vcmRlbjogZm9ybUZpZWxkcz8udHJlZndvb3JkZW4/LmRlZmF1bHRWYWx1ZVxuICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgID8ubWFwKHRhZyA9PiB0YWcudHJpbSgpKVxuICAgICAgICAgID8uZmlsdGVyKHRhZyA9PiAhIXRhZyksXG4gICAgICB9KSlcbiAgICApO1xuXG4gIHB1YmxpYyBoaWRlRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PiA9IHRoaXMudXBsb2FkRmllbGRzJC5waXBlKFxuICAgIG1hcChmb3JtRmllbGRzID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGRzKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmb3JtRmllbGRzKS5maWx0ZXIoZmllbGQgPT4gIWZvcm1GaWVsZHNbZmllbGRdPy52aXNpYmxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KVxuICApO1xuXG4gIHB1YmxpYyByZWxhdGVkRmlsZXMkOiBPYnNlcnZhYmxlPEFycmF5PERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudElkJCxcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAsXG4gICAgdGhpcy5fcmVmZXRjaCQsXG4gIF0pLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnRJZCwgcXVlcnlQYXJhbXNdKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZS5nZXRGaWx0ZXJlZFpha2VuQXBpRG9jdW1lbnRzKFxuICAgICAgICAgIGRvY3VtZW50SWQsXG4gICAgICAgICAgcXVlcnlQYXJhbXNbJ3BhcmFtcyddXG4gICAgICAgICksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW3JlbGF0ZWRGaWxlc10pID0+IHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKSxcbiAgICAgICAgY29sbGVjdGlvblNpemU6IHJlbGF0ZWRGaWxlcy50b3RhbEVsZW1lbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkRmlsZXMgPSByZWxhdGVkRmlsZXM/LmNvbnRlbnQ/Lm1hcChmaWxlID0+ICh7XG4gICAgICAgIC4uLmZpbGUsXG4gICAgICAgIGNyZWF0ZWRCeTogZmlsZS5jcmVhdGVkQnkgfHwgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xpc3QuYXV0b21hdGljYWxseUdlbmVyYXRlZCcpLFxuICAgICAgICBzaXplOiB0aGlzLmJ5dGVzVG9NZWdhYnl0ZXMoZmlsZS5iZXN0YW5kc29tdmFuZyksXG4gICAgICAgIHRhZ3M6IGZpbGUudHJlZndvb3JkZW4/Lm1hcCgodHJlZndvb3JkOiBzdHJpbmcpID0+ICh7XG4gICAgICAgICAgY29udGVudDogdHJlZndvb3JkLFxuICAgICAgICB9KSksXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlZEZpbGVzIHx8IFtdO1xuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLl9pdGVtc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIH0pLFxuICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93WmFha0xpbmtXYXJuaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHtidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZX0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVuYWJsZVBiYWNEb2N1bWVudGVuQXBpRG9jdW1lbnRzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLmdldEZlYXR1cmVUb2dnbGVPYnNlcnZhYmxlKCdlbmFibGVQYmFjRG9jdW1lbnRlbkFwaURvY3VtZW50cycpO1xuXG4gIHB1YmxpYyBmaWxlUGVybWlzc2lvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2N1bWVudGVuQXBpRmlsZVBlcm1pc3Npb25zPih7fSk7XG5cbiAgcHVibGljIGdldCBmaWxlUGVybWlzc2lvbnMoKTogRG9jdW1lbnRlbkFwaUZpbGVQZXJtaXNzaW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVBlcm1pc3Npb25zJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhbkNyZWF0ZVJlc291cmNlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZG9jdW1lbnRJZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnRJZCA9PlxuICAgICAgdGhpcy5nZXRQZXJtaXNzaW9uKENBTl9DUkVBVEVfUkVTT1VSQ0VfUEVSTUlTU0lPTiwge1xuICAgICAgICByZXNvdXJjZTogUkVTT1VSQ0VfUEVSTUlTU0lPTl9SRVNPVVJDRS5qc29uU2NoZW1hRG9jdW1lbnQsXG4gICAgICAgIGlkZW50aWZpZXI6IGRvY3VtZW50SWQsXG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlOiBEb2N1bWVudGVuQXBpQ29sdW1uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2U6IERvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2U6IERvY3VtZW50ZW5BcGlWZXJzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvd25sb2FkU2VydmljZTogRG93bmxvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBsb2FkUHJvdmlkZXJTZXJ2aWNlOiBVcGxvYWRQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXIoRmlsdGVyMTYpO1xuICAgIHRoaXMudmFsdGltb0VuZHBvaW50VXJpID0gY29uZmlnU2VydmljZS5jb25maWcudmFsdGltb0FwaS5lbmRwb2ludFVyaTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEluaXRpYWxQYXJhbXMoKTtcbiAgICB0aGlzLnNldFVwbG9hZFByb2Nlc3NMaW5rZWQoKTtcbiAgICB0aGlzLmlzVXNlckFkbWluKCk7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbRmlsdGVyMTYsIFRhZ0dyb3VwMTYsIFVwbG9hZDE2XSk7XG4gICAgdGhpcy5yZWdpc3RlclBlcm1pc3Npb25TdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJQZXJtaXNzaW9uU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucmVsYXRlZEZpbGVzJCwgdGhpcy5lbmFibGVQYmFjRG9jdW1lbnRlbkFwaURvY3VtZW50cyRdKS5zdWJzY3JpYmUoXG4gICAgICAgIChbZmlsZXMsIHBiYWNFbmFibGVkXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25zOiBEb2N1bWVudGVuQXBpRmlsZVBlcm1pc3Npb25zID0ge307XG4gICAgICAgICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zW2ZpbGUuZmlsZUlkXSA9IHtcbiAgICAgICAgICAgICAgY2FuVmlldzogcGJhY0VuYWJsZWQgPyBmaWxlLmNhblZpZXcgIT09IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FuTW9kaWZ5OiBwYmFjRW5hYmxlZCA/IGZpbGUuY2FuTW9kaWZ5ICE9PSBmYWxzZSA6IHRydWUsXG4gICAgICAgICAgICAgIGNhbkRlbGV0ZTogcGJhY0VuYWJsZWQgPyBmaWxlLmNhbkRlbGV0ZSAhPT0gZmFsc2UgOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmZpbGVQZXJtaXNzaW9ucyQubmV4dChwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRlbGV0ZUFjdGlvbkNsaWNrKGl0ZW06IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnQgPSBpdGVtO1xuICAgIHRoaXMuc2hvd0RlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZURvY3VtZW50KCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRJZCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnRJZCA9PiB7XG4gICAgICB0aGlzLl9pdGVtc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UuZGVsZXRlRG9jdW1lbnQodGhpcy5kb2N1bWVudCwgZG9jdW1lbnRJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVmZXRjaERvY3VtZW50cygpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBieXRlc1RvTWVnYWJ5dGVzKGJ5dGVzOiBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghYnl0ZXMpIHJldHVybiAnJztcblxuICAgIGNvbnN0IG1lZ2FieXRlcyA9IGJ5dGVzIC8gKDEwMjQgKiAxMDI0KTtcbiAgICBpZiAobWVnYWJ5dGVzIDwgMSkge1xuICAgICAgcmV0dXJuIGAke01hdGguY2VpbChtZWdhYnl0ZXMgKiAxMDAwKX0gS0JgO1xuICAgIH0gZWxzZSBpZiAobWVnYWJ5dGVzIDwgMTAwMCkge1xuICAgICAgcmV0dXJuIG1lZ2FieXRlcy50b0ZpeGVkKDIpICsgJyBNQic7XG4gICAgfVxuXG4gICAgcmV0dXJuIChtZWdhYnl0ZXMgLyAxMDAwKS50b0ZpeGVkKDIpICsgJyBHQic7XG4gIH1cblxuICBwdWJsaWMgZ2V0VXBsb2FkQnV0dG9uVG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnVwbG9hZFByb2Nlc3NMaW5rZWRTZXQgJiYgdGhpcy51cGxvYWRQcm9jZXNzTGlua2VkKSB7XG4gICAgICByZXR1cm4gJ1VwbG9hZCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQWRtaW4pIHtcbiAgICAgIHJldHVybiAnZG9zc2llci5kb2N1bWVudGVuLm5vUHJvY2Vzc0xpbmtlZC5hZG1pblJvbGUnO1xuICAgIH1cblxuICAgIHJldHVybiAnZG9zc2llci5kb2N1bWVudGVuLm5vUHJvY2Vzc0xpbmtlZC5yZWd1bGFyVXNlcic7XG4gIH1cblxuICBwdWJsaWMgaXNVc2VyQWRtaW4oKSB7XG4gICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlXG4gICAgICAuZ2V0VXNlclN1YmplY3QoKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIHVzZXJJZGVudGl0eSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0FkbWluID0gdXNlcklkZW50aXR5LnJvbGVzLmluY2x1ZGVzKCdST0xFX0FETUlOJyk7XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzQWRtaW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRhZGF0YVNldChtZXRhZGF0YTogRG9jdW1lbnRlbkFwaU1ldGFkYXRhKTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy51cGxvYWRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLCB0aGlzLmRvY3VtZW50SWQkXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChbZmlsZSwgZG9jdW1lbnRJZF0pID0+IHtcbiAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcbiAgICAgICAgICBpZiAodGhpcy5pc0VkaXRNb2RlJC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UudXBkYXRlRG9jdW1lbnQoZmlsZSwgbWV0YWRhdGEsIGRvY3VtZW50SWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dVcGxvYWRNb2RhbCQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZldGNoRG9jdW1lbnRzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZVRvQmVVcGxvYWRlZCQubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEVycm9yLnNldChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2RvY3VtZW50LnVwbG9hZFBlcm1pc3Npb25EZW5pZWQnKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93VXBsb2FkTW9kYWwkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZFByb3ZpZGVyU2VydmljZVxuICAgICAgICAgICAgICAudXBsb2FkRmlsZVdpdGhNZXRhZGF0YShmaWxlLCBkb2N1bWVudElkLCBtZXRhZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93VXBsb2FkTW9kYWwkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZWZldGNoRG9jdW1lbnRzKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciQubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dChERUZBVUxUX1BBR0lOQVRJT04pO1xuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5maWxlVG9CZVVwbG9hZGVkJC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEVycm9yLnNldChcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZG9jdW1lbnQudXBsb2FkUGVybWlzc2lvbkRlbmllZCcpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dVcGxvYWRNb2RhbCQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uRG93bmxvYWRBY3Rpb25DbGljayhmaWxlOiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLmRvd25sb2FkRG9jdW1lbnQoZmlsZSwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25FZGl0TWV0YWRhdGEoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0TW9kZSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLm5leHQoZmlsZSk7XG4gICAgdGhpcy5zaG93VXBsb2FkTW9kYWwkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VNZXRhZGF0YU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkRXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd1VwbG9hZE1vZGFsJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRNb2RlJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLm5leHQoZXZlbnQudGFyZ2V0LmZpbGVzWzBdKTtcbiAgICB0aGlzLnNob3dVcGxvYWRNb2RhbCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnJlc2V0RmlsZUlucHV0KCk7XG4gIH1cblxuICBwdWJsaWMgb25OYXZpZ2F0ZVRvQ2FzZUFkbWluQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgL2Rvc3NpZXItbWFuYWdlbWVudC9kb3NzaWVyLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX1gXSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGljayhldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsZVBlcm1pc3Npb25zW2V2ZW50LmZpbGVJZF0/LmNhblZpZXcpIHtcbiAgICAgIHRoaXMuZG93bmxvYWREb2N1bWVudChldmVudCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblBhZ2luYXRpb25DbGlja2VkKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7Li4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLCBwYWdlfSk7XG4gIH1cblxuICBwdWJsaWMgb25QYWdpbmF0aW9uU2V0KHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHtjb2xsZWN0aW9uU2l6ZSwgcGFnZX0gPSB0aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCk7XG4gICAgY29uc3QgcmVzZXRQYWdlOiBib29sZWFuID0gTWF0aC5jZWlsKCtjb2xsZWN0aW9uU2l6ZSAvIHNpemUpIDw9ICtwYWdlICYmICtjb2xsZWN0aW9uU2l6ZSA+IDA7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi50aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCksIHNpemUsIC4uLihyZXNldFBhZ2UgJiYge3BhZ2U6IDF9KX0pO1xuICB9XG5cbiAgcHVibGljIG9uVXBsb2FkQnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIG9uRmlsdGVyRXZlbnQoZmlsdGVyOiBEb2N1bWVudGVuQXBpRmlsdGVyTW9kZWwgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXIkLm5leHQoZmlsdGVyKTtcbiAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKSwgLi4uREVGQVVMVF9QQUdJTkFUSU9OfSk7XG4gIH1cblxuICBwdWJsaWMgb25Tb3J0Q2hhbmdlZChzb3J0U3RhdGU6IFNvcnRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuX3NvcnQkLm5leHQoXG4gICAgICBzb3J0U3RhdGUuaXNTb3J0aW5nXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc29ydDogYCR7c29ydFN0YXRlLnN0YXRlLm5hbWUgPT09ICdzaXplJyA/IERPQ1VNRU5URU5fQ09MVU1OX0tFWVMuQkVTVEFORFNPTVZBTkcgOiBzb3J0U3RhdGUuc3RhdGUubmFtZX0sJHtzb3J0U3RhdGUuc3RhdGUuZGlyZWN0aW9ufWAsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlZmV0Y2hEb2N1bWVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVmZXRjaCQubmV4dChudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgZG93bmxvYWREaXNhYmxlZChmaWxlOiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZmlsZVBlcm1pc3Npb25zW2ZpbGUuZmlsZUlkXT8uY2FuVmlldztcbiAgfVxuXG4gIHByaXZhdGUgZWRpdERpc2FibGVkKGZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoIXRoaXMuc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJC52YWx1ZS5zdXBwb3J0c1VwZGF0aW5nRGVmaW5pdGl2ZURvY3VtZW50ICYmXG4gICAgICAgIGZpbGUuc3RhdHVzID09PSAnZGVmaW5pdGllZicpIHx8XG4gICAgICAhdGhpcy5maWxlUGVybWlzc2lvbnNbZmlsZS5maWxlSWRdPy5jYW5Nb2RpZnlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVEaXNhYmxlZChmaWxlOiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZmlsZVBlcm1pc3Npb25zW2ZpbGUuZmlsZUlkXT8uY2FuRGVsZXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZERvY3VtZW50KHJlbGF0ZWRGaWxlOiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGUsIGZvcmNlRG93bmxvYWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50SWQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGRvY3VtZW50SWQgPT4ge1xuICAgICAgdGhpcy5kb3dubG9hZFNlcnZpY2UuZG93bmxvYWRGaWxlKFxuICAgICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS96YWtlbi1hcGkvJHtyZWxhdGVkRmlsZS5wbHVnaW5Db25maWd1cmF0aW9uSWR9L2Nhc2UtZG9jdW1lbnQvJHtkb2N1bWVudElkfS9maWxlcy8ke3JlbGF0ZWRGaWxlLmZpbGVJZH0vZG93bmxvYWRgLFxuICAgICAgICByZWxhdGVkRmlsZS5iZXN0YW5kc25hYW0gPz8gJycsXG4gICAgICAgIGZvcmNlRG93bmxvYWRcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5RdWVyeVBhcmFtc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgICAgICB0aGlzLmRvY3VtZW50SWQkLFxuICAgICAgICB0aGlzLmZpbHRlciQsXG4gICAgICAgIHRoaXMuX3NvcnQkLFxuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLFxuICAgICAgXSkuc3Vic2NyaWJlKChbZGVmaW5pdGlvbk5hbWUsIGRvY3VtZW50SWQsIGZpbHRlciwgc29ydCwgcGFnaW5hdGlvbl0pID0+IHtcbiAgICAgICAgY29uc3Qge3NpemUsIHBhZ2V9ID0gcGFnaW5hdGlvbjtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvZG9zc2llcnMvJHtkZWZpbml0aW9uTmFtZX0vZG9jdW1lbnQvJHtkb2N1bWVudElkfS9kb2N1bWVudHNgXSwge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7Li4uZmlsdGVyLCAuLi5zb3J0LCBzaXplLCBwYWdlOiBwYWdlIC0gMX0sXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZpbGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldFVwbG9hZFByb2Nlc3NMaW5rZWQoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm92aWRlclNlcnZpY2UuY2hlY2tVcGxvYWRQcm9jZXNzTGluayhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgICApLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkUHJvY2Vzc0xpbmtlZFNldCA9IHRydWU7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaW5rZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy51cGxvYWRQcm9jZXNzTGlua2VkID0gbGlua2VkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKHF1ZXJ5UGFyYW1zID0+IHtcbiAgICAgICAgICBjb25zdCB7c29ydCwgc2l6ZSwgcGFnZSwgLi4uZmlsdGVyfSA9IHF1ZXJ5UGFyYW1zWydwYXJhbXMnXTtcbiAgICAgICAgICByZXR1cm4ge3NvcnQsIGZpbHRlciwgc2l6ZSwgcGFnZX07XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7ZmlsdGVyLCBzb3J0LCBzaXplLCBwYWdlfSkgPT4ge1xuICAgICAgICB0aGlzLl9zb3J0JC5uZXh0KHtzb3J0fSk7XG4gICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KGZpbHRlcik7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHNpemU6ICtzaXplLFxuICAgICAgICAgIHBhZ2U6ICsocGFnZSA/PyAwKSArIDEsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9wZW5RdWVyeVBhcmFtc1N1YnNjcmlwdGlvbigpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNvcnRTdGF0ZUZyb21Tb3J0U3RyaW5nKHNvcnRTdHJpbmc/OiBzdHJpbmcpOiBTb3J0U3RhdGUgfCBudWxsIHtcbiAgICBjb25zdCBzcGxpdFN0cmluZyA9IHNvcnRTdHJpbmcgJiYgc29ydFN0cmluZy5zcGxpdCgnLCcpO1xuICAgIGlmIChzcGxpdFN0cmluZyAmJiBzcGxpdFN0cmluZz8ubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNTb3J0aW5nOiB0cnVlLFxuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIG5hbWU6IHNwbGl0U3RyaW5nWzBdLFxuICAgICAgICAgIGRpcmVjdGlvbjogc3BsaXRTdHJpbmdbMV0gYXMgRGlyZWN0aW9uLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVybWlzc2lvbihwZXJtaXNzaW9uUmVxdWVzdDogUGVybWlzc2lvblJlcXVlc3QsIGNvbnRleHQ/OiBhbnkpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVQYmFjRG9jdW1lbnRlbkFwaURvY3VtZW50cyQucGlwZShcbiAgICAgIHN3aXRjaE1hcChlbmFibGVkID0+IHtcbiAgICAgICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKHBlcm1pc3Npb25SZXF1ZXN0LCBjb250ZXh0KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPGRpdlxuICBjbGFzcz1cImNhcmJvbi1kb2N1bWVudC10YWJsZS13cmFwcGVyXCJcbiAgKm5nSWY9XCJ7XG4gICAgbG9hZGluZzogbG9hZGluZyQgfCBhc3luYyxcbiAgICBmaWVsZHNMb2FkaW5nOiBmaWVsZHNMb2FkaW5nJCB8IGFzeW5jLFxuICAgIHVwbG9hZGluZzogdXBsb2FkaW5nJCB8IGFzeW5jLFxuICAgIHJlbGF0ZWRGaWxlczogcmVsYXRlZEZpbGVzJCB8IGFzeW5jLFxuICAgIGZpZWxkczogZmllbGRzJCB8IGFzeW5jLFxuICAgIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlczogc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJCB8IGFzeW5jLFxuICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24kIHwgYXN5bmMsXG4gICAgc29ydFN0YXRlOiBzb3J0U3RhdGUkIHwgYXN5bmMsXG4gICAgdXBsb2FkRmllbGRzOiB1cGxvYWRGaWVsZHMkIHwgYXN5bmMsXG4gICAgZGVmYXVsdFZhbHVlczogZGVmYXVsdFZhbHVlcyQgfCBhc3luYyxcbiAgICBoaWRlRmllbGRzOiBoaWRlRmllbGRzJCB8IGFzeW5jLFxuICB9IGFzIG9ic1wiXG4+XG4gIEBpZiAoKCFvYnMuZmllbGRzTG9hZGluZyAmJiBvYnMuZmllbGRzLmxlbmd0aCkgfHwgb2JzLmZpZWxkc0xvYWRpbmcpIHtcbiAgICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgICAgW2FjdGlvbkl0ZW1zXT1cImFjdGlvbkl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJvYnMucmVsYXRlZEZpbGVzXCJcbiAgICAgIFtmaWVsZHNdPVwib2JzLmZpZWxkc1wiXG4gICAgICBbaW5pdGlhbFNvcnRTdGF0ZV09XCJvYnMuc29ydFN0YXRlXCJcbiAgICAgIFtsb2FkaW5nXT1cIm9icy5sb2FkaW5nXCJcbiAgICAgIFtwYWdpbmF0aW9uXT1cIm9icy5wYWdpbmF0aW9uXCJcbiAgICAgIFtwYWdpbmF0b3JDb25maWddPVwicGFnaW5hdG9yQ29uZmlnXCJcbiAgICAgIHBhZ2luYXRpb25JZGVudGlmaWVyPVwiZG9jdW1lbnRlbkFwaVwiXG4gICAgICAocm93Q2xpY2tlZCk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICAgICAgKHNvcnRDaGFuZ2VkKT1cIlxuICAgICAgICBvYnM/LnN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcz8uc3VwcG9ydHNTb3J0YWJsZUNvbHVtbnMgJiYgb25Tb3J0Q2hhbmdlZCgkZXZlbnQpXG4gICAgICBcIlxuICAgICAgKHBhZ2luYXRpb25DbGlja2VkKT1cIm9uUGFnaW5hdGlvbkNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAocGFnaW5hdGlvblNldCk9XCJvblBhZ2luYXRpb25TZXQoJGV2ZW50KVwiXG4gICAgICBoaWRlQ29sdW1uSGVhZGVyXG4gICAgPlxuICAgICAgPGRpdiBjYXJib25Ub29sYmFyQ29udGVudD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgW2FjY2VwdF09XCJhY2NlcHRlZEZpbGVzXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgIGhpZGRlblxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgIC8+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwib2JzPy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXM/LnN1cHBvcnRzRmlsdGVyYWJsZUNvbHVtbnNcIlxuICAgICAgICAgIFtjZHNPdmVyZmxvd01lbnVdPVwib3ZlcmZsb3dGaWx0ZXJcIlxuICAgICAgICAgIFtjdXN0b21QYW5lXT1cInRydWVcIlxuICAgICAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgICAgICBbZmxpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbb2Zmc2V0XT1cInt4OiAwLCB5OiA0N31cIlxuICAgICAgICAgIGNkc0J1dHRvbj1cImdob3N0XCJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImZpbHRlclwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUmVzdWx0c1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvdmFsdGltby1jYXJib24tbGlzdD5cbiAgfSBAZWxzZSB7XG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2FjdGlvbl09XCJuYXZpZ2F0ZVRvQ2FzZUFkbWluQnV0dG9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInemd3LmRvY3VtZW50cy5ub0NvbHVtbnMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInemd3LmRvY3VtZW50cy5ub0NvbHVtbnMudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIH1cblxuICA8dmFsdGltby1kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbFxuICAgIFtkZWZhdWx0VmFsdWVzXT1cIm9icy5kZWZhdWx0VmFsdWVzXCJcbiAgICBbZGlzYWJsZUF1dGhvcl09XCJvYnMudXBsb2FkRmllbGRzPy5hdXRldXI/LnJlYWRvbmx5XCJcbiAgICBbZGlzYWJsZUNvbmZpZGVudGlhbGl0eUxldmVsXT1cIm9icy51cGxvYWRGaWVsZHM/LnZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZz8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlQ3JlYXRpb25EYXRlXT1cIm9icy51cGxvYWRGaWVsZHM/LmNyZWF0aWVkYXR1bT8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlRGVzY3JpcHRpb25dPVwib2JzLnVwbG9hZEZpZWxkcz8uYmVzY2hyaWp2aW5nPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVEb2N1bWVudFRpdGxlXT1cIm9icy51cGxvYWRGaWVsZHM/LnRpdGVsPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVEb2N1bWVudFR5cGVdPVwib2JzLnVwbG9hZEZpZWxkcz8uaW5mb3JtYXRpZW9iamVjdHR5cGU/LnJlYWRvbmx5XCJcbiAgICBbZGlzYWJsZUZpbGVuYW1lXT1cIm9icy51cGxvYWRGaWVsZHM/LmJlc3RhbmRzbmFhbT8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlTGFuZ3VhZ2VdPVwib2JzLnVwbG9hZEZpZWxkcz8udGFhbD8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlU3RhdHVzXT1cIm9icy51cGxvYWRGaWVsZHM/LnN0YXR1cz8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlZCRdPVwibW9kYWxEaXNhYmxlZCRcIlxuICAgIFtmaWxlJF09XCJmaWxlVG9CZVVwbG9hZGVkJFwiXG4gICAgW2hpZGVGaWVsZHNdPVwib2JzLmhpZGVGaWVsZHNcIlxuICAgIFtpc0VkaXRNb2RlXT1cImlzRWRpdE1vZGUkIHwgYXN5bmNcIlxuICAgIFtvcGVuXT1cInNob3dVcGxvYWRNb2RhbCQgfCBhc3luY1wiXG4gICAgW3N1cHBvcnRzVHJlZndvb3JkZW5dPVwib2JzPy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXM/LnN1cHBvcnRzVHJlZndvb3JkZW5cIlxuICAgIFt1cGxvYWRFcnJvcl09XCJ1cGxvYWRFcnJvcigpXCJcbiAgICAobWV0YWRhdGEpPVwibWV0YWRhdGFTZXQoJGV2ZW50KVwiXG4gICAgKG1vZGFsQ2xvc2UpPVwiY2xvc2VNZXRhZGF0YU1vZGFsKClcIlxuICAgICh1cGxvYWRFcnJvckRpc21pc3MpPVwidXBsb2FkRXJyb3Iuc2V0KG51bGwpXCJcbiAgPjwvdmFsdGltby1kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbD5cbjwvZGl2PlxuXG48dmFsdGltby1jb25maXJtYXRpb24tbW9kYWxcbiAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImRhc2hib2FyZE1hbmFnZW1lbnQuZGVsZXRlTW9kYWwuY29uZmlybVwiXG4gIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuZG9jdW1lbnRlbi5kZWxldGVDb25maXJtYXRpb25Nb2RhbC5jb250ZW50XCJcbiAgY29uZmlybUJ1dHRvblR5cGU9XCJkYW5nZXJcIlxuICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5kb2N1bWVudGVuLmRlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsLnRpdGxlXCJcbiAgW3Nob3dNb2RhbFN1YmplY3QkXT1cInNob3dEZWxldGVDb25maXJtYXRpb25Nb2RhbCRcIlxuICAoY29uZmlybUV2ZW50KT1cImRlbGV0ZURvY3VtZW50KClcIlxuPlxuPC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNub1Jlc3VsdHM+XG4gIEBpZiAoKGZpbHRlciQgfCBhc3luYyB8IGtleXZhbHVlKT8ubGVuZ3RoKSB7XG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2FjdGlvbl09XCJyZXNldEZpbHRlckJ1dHRvblwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ3pndy5kb2N1bWVudHMubm9SZXN1bHRzLmZpbHRlckRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdGl0bGVdPVwiJ3pndy5kb2N1bWVudHMubm9SZXN1bHRzLmZpbHRlclRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuICB9IEBlbHNlIGlmIChzaG93WmFha0xpbmtXYXJuaW5nICYmIGlzQWRtaW4pIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cIm5hdmlnYXRlVG9DYXNlQWRtaW5CdXR0b25cIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb3NzaWVyLmRvY3VtZW50ZW4ubm9aYWFrRm91bmQnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInZG9zc2llci5kb2N1bWVudGVuLm5vWmFha0ZvdW5kVGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIH0gQGVsc2Uge1xuICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgIFthY3Rpb25dPVwidXBsb2FkQnV0dG9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9zc2llci5kb2N1bWVudGVuLm5vRmlsZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInZG9zc2llci5kb2N1bWVudGVuLm5vRmlsZXNUaXRsZScgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNvdmVyZmxvd0ZpbHRlcj5cbiAgPHZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFiLWRvY3VtZW50ZW4tYXBpLWZpbHRlclxuICAgIFtwcmVmaWxsRmlsdGVyXT1cImZpbHRlciQgfCBhc3luY1wiXG4gICAgKGZpbHRlckV2ZW50KT1cIm9uRmlsdGVyRXZlbnQoJGV2ZW50KVwiXG4gID48L3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFiLWRvY3VtZW50ZW4tYXBpLWZpbHRlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmVzZXRGaWx0ZXJCdXR0b24+XG4gIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkZpbHRlckV2ZW50KG51bGwpXCI+XG4gICAge3sgJ1Jlc2V0IGZpbHRlcicgfCB0cmFuc2xhdGUgfX1cblxuICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJ0cmFzaC1jYW5cIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3VwbG9hZEJ1dHRvbiBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICA8YnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cIlxuICAgICAgKHVwbG9hZFByb2Nlc3NMaW5rZWRTZXQgJiYgIXVwbG9hZFByb2Nlc3NMaW5rZWQpIHx8XG4gICAgICBzaG93WmFha0xpbmtXYXJuaW5nIHx8XG4gICAgICBkaXNhYmxlZCB8fFxuICAgICAgKGNhbkNyZWF0ZVJlc291cmNlJCB8IGFzeW5jKSA9PT0gZmFsc2VcbiAgICBcIlxuICAgIFt2VG9vbHRpcF09XCJnZXRVcGxvYWRCdXR0b25Ub29sdGlwKCkgfCB0cmFuc2xhdGVcIlxuICAgIChjbGljayk9XCJvblVwbG9hZEJ1dHRvbkNsaWNrKClcIlxuICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICA+XG4gICAge3sgJ1VwbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwidXBsb2FkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvblRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICBAaWYgKGRhdGEuaXRlbVtkYXRhLmtleV0pIHtcbiAgICB7eyAnZG9jdW1lbnQuJyArIGRhdGEuaXRlbVtkYXRhLmtleV0gfCB0cmFuc2xhdGUgfX1cbiAgfSBAZWxzZSB7XG4gICAgLVxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25hdmlnYXRlVG9DYXNlQWRtaW5CdXR0b24+XG4gIDxidXR0b24gKGNsaWNrKT1cIm9uTmF2aWdhdGVUb0Nhc2VBZG1pbkNsaWNrKClcIiBjZHNCdXR0b249XCJwcmltYXJ5XCI+XG4gICAge3sgJ2Rvc3NpZXIuZG9jdW1lbnRlbi5uYXZpZ2F0ZVRvQ2FzZUFkbWluJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInNldHRpbmdzXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
474
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vemd3L3NyYy9saWIvbW9kdWxlcy9kb2N1bWVudGVuLWFwaS9jb21wb25lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsU0FBUyxFQUFpQyxNQUFNLEVBQWUsU0FBUyxHQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhHLE9BQU8sRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFFTCxnQkFBZ0IsRUFFaEIsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFJeEIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUNMLDhCQUE4QixFQUU5Qiw0QkFBNEIsR0FFN0IsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQWMsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxZQUFZLEdBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0csT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFDTCxpQkFBaUIsRUFFakIsc0JBQXNCLEdBS3ZCLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RHLE9BQU8sRUFDTCxtQ0FBbUMsRUFDcEMsTUFBTSwwRUFBMEUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBd0JsRixNQUFNLE9BQU8sK0NBQStDO0lBNk4xRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQWFELFlBQ21CLGFBQTRCLEVBQzVCLDBCQUFzRCxFQUN0RCw0QkFBMEQsRUFDMUQsMkJBQXdELEVBQ3hELGVBQWdDLEVBQ2hDLFdBQXdCLEVBQ3hCLGlCQUFvQyxFQUNwQyxLQUFxQixFQUNyQixNQUFjLEVBQ2QsZ0JBQWtDLEVBQ2xDLHFCQUE0QyxFQUM1QyxtQkFBd0M7UUFYeEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUN0RCxpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO1FBQzFELGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBNkI7UUFDeEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBcFAxQyw2QkFBd0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2hFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxFQUM3QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUNuRCxDQUFDO1FBRWMsb0NBQStCLEdBQzdDLElBQUksZUFBZSxDQUF3QyxJQUFJLENBQUMsQ0FBQztRQUVsRCxxQ0FBZ0MsR0FDL0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FDaEMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDN0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLENBQzdFLEVBQ0QsR0FBRyxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FDbkMsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUMxRSxDQUNGLENBQUM7UUFFWSxZQUFPLEdBQStCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQ3RGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUN6QyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUNqQyxhQUFhLENBQUM7WUFDWixJQUFJLENBQUMsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsc0JBQXNCLENBQUM7WUFDNUUsSUFBSSxDQUFDLGdDQUFnQztZQUNyQyxJQUFJLENBQUMsTUFBTTtTQUNaLENBQUMsQ0FDSCxFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDdEQsTUFBTSxpQkFBaUIsR0FBaUMsT0FBTyxDQUFDLElBQUksQ0FDbEUsQ0FBQyxNQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbkQsQ0FBQztZQUNGLElBQ0UsQ0FBQyxDQUFDLGlCQUFpQjtnQkFDbkIsQ0FBQyxJQUFJLEVBQUUsSUFBSTtnQkFDWCw4QkFBOEIsQ0FBQyx1QkFBdUIsRUFDdEQsQ0FBQztnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBQyxDQUFDLENBQUM7WUFDeEYsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQXdCLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRztnQkFDL0UsS0FBSyxFQUFFLHVCQUF1QixNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUMxQyxRQUFRLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQ3hGLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxDQUFDLFFBQVEsSUFBSTtvQkFDekQsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7b0JBQ2xDLFlBQVksRUFBRSxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFDO2lCQUNoQyxDQUFDO2dCQUNGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLHNCQUFzQixDQUFDLFlBQVksSUFBSSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsQ0FBQztnQkFDakYsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksOEJBQThCLENBQUMsdUJBQXVCO2FBQ3BGLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzNDLENBQUM7UUFFSyxnQkFBVyxHQUFpQjtZQUNqQztnQkFDRSxLQUFLLEVBQUUsbUJBQW1CO2dCQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQy9DLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNsRCxJQUFJLEVBQUUsUUFBUTthQUNmO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3hDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDOUMsSUFBSSxFQUFFLFFBQVE7YUFDZjtZQUNEO2dCQUNFLEtBQUssRUFBRSxpQkFBaUI7Z0JBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDN0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNoRCxJQUFJLEVBQUUsUUFBUTthQUNmO1NBQ0YsQ0FBQztRQUVjLDRCQUF1QixHQUF1QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2xGLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxFQUM3QyxNQUFNLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUMzRCxDQUFDO1FBRWMsZ0JBQVcsR0FBdUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0RSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQ2pDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FDbkMsQ0FBQztRQUlLLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUcvQixnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRXpDLGtCQUFhLEdBQzNCLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLDJCQUEyQixJQUFJLElBQUksQ0FBQztRQUNsRCxnQkFBVyxHQUFXLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixJQUFJLENBQUMsQ0FBQztRQUVqRixzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBYyxJQUFJLENBQUMsQ0FBQztRQUMzRCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3JELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELGdCQUFXLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUMxQyxpQ0FBNEIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVuRSxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNyRCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3BELGFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdkYsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsQ0FDdEUsQ0FBQztRQUVjLFlBQU8sR0FBRyxJQUFJLGFBQWEsRUFBbUMsQ0FBQztRQUMvRCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFhLGtCQUFrQixDQUFDLENBQUM7UUFDakUsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFPLElBQUksQ0FBQyxDQUFDO1FBQzVDLFdBQU0sR0FBRyxJQUFJLGFBQWEsRUFBeUIsQ0FBQztRQUdyRCxvQkFBZSxHQUFHO1lBQ2hDLEdBQUcsd0JBQXdCO1lBQzNCLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztTQUMxQyxDQUFDO1FBRUssZUFBVSxHQUFpQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDaEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFDdEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUNuRSxDQUFDO1FBRUssa0JBQWEsR0FBMEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pGLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUMvRixHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FDakIsWUFBWSxDQUFDLE1BQU0sQ0FDakIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2QsR0FBRyxHQUFHO1lBQ04sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1YsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO2dCQUNiLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDeEI7U0FDRixDQUFDLEVBQ0YsRUFBRSxDQUNILENBQ0YsQ0FDRixDQUFDO1FBRUssbUJBQWMsR0FDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakIsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWTtZQUN4QywyQkFBMkIsRUFBRSxVQUFVLEVBQUUsMkJBQTJCLEVBQUUsWUFBWTtZQUNsRixZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZO1lBQ3BELEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFlBQVk7WUFDdEMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLFlBQVk7WUFDcEUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWTtZQUNwRCxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZO1lBQ3BDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVk7WUFDeEMsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWTtnQkFDaEQsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUNaLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4QixFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDekIsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUVHLGdCQUFXLEdBQThCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyRSxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDZixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5RSxDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUssa0JBQWEsR0FBZ0QsYUFBYSxDQUFDO1lBQ2hGLElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTtZQUN4QixJQUFJLENBQUMsU0FBUztTQUNmLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3pDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FDdEMsYUFBYSxDQUFDO1lBQ1osSUFBSSxDQUFDLDRCQUE0QixDQUFDLDRCQUE0QixDQUM1RCxVQUFVLEVBQ1YsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUN0QjtZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3BDLENBQUMsQ0FDSCxFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDcEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDOUIsY0FBYyxFQUFFLFlBQVksQ0FBQyxhQUFhO2FBQzNDLENBQUMsQ0FBQztZQUNILE1BQU0sZUFBZSxHQUFHLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUQsR0FBRyxJQUFJO2dCQUNQLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUM7Z0JBQ3pGLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDaEQsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbEQsT0FBTyxFQUFFLFNBQVM7aUJBQ25CLENBQUMsQ0FBQzthQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0osT0FBTyxlQUFlLElBQUksRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsRUFBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUM3QyxDQUFDO1FBRWMsc0NBQWlDLEdBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUU3RSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBK0IsRUFBRSxDQUFDLENBQUM7UUFNaEUsdUJBQWtCLEdBQXdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUM3RSxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyw4QkFBOEIsRUFBRTtZQUNqRCxRQUFRLEVBQUUsNEJBQTRCLENBQUMsa0JBQWtCO1lBQ3pELFVBQVUsRUFBRSxVQUFVO1NBQ3ZCLENBQUMsQ0FDSCxDQUNGLENBQUM7UUFFZSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFnQm5ELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7SUFDeEUsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVNLCtCQUErQjtRQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDbkYsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ3ZCLE1BQU0sV0FBVyxHQUFpQyxFQUFFLENBQUM7WUFDckQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkIsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRztvQkFDekIsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3BELFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO29CQUN4RCxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtpQkFDekQsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsSUFBOEI7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDcEYsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO29CQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBeUI7UUFDL0MsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV0QixNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDN0MsQ0FBQzthQUFNLElBQUksU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzVCLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdEMsQ0FBQztRQUVELE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBRU0sc0JBQXNCO1FBQzNCLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzVELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixPQUFPLDhDQUE4QyxDQUFDO1FBQ3hELENBQUM7UUFFRCxPQUFPLGdEQUFnRCxDQUFDO0lBQzFELENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUI7YUFDckIsY0FBYyxFQUFFO2FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQ1IsWUFBWSxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBK0I7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLElBQUk7Z0JBQUUsT0FBTztZQUNsQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDckYsSUFBSSxFQUFFLEdBQUcsRUFBRTt3QkFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3BDLENBQUM7b0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBd0IsRUFBRSxFQUFFO3dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDOzRCQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUNqRSxDQUFDO3dCQUNKLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNwQyxDQUFDO29CQUNILENBQUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxxQkFBcUI7cUJBQ3ZCLHNCQUFzQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDO3FCQUNsRCxTQUFTLENBQUM7b0JBQ1QsSUFBSSxFQUFFLEdBQUcsRUFBRTt3QkFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7d0JBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwQyxDQUFDO29CQUNELEtBQUssRUFBRSxDQUFDLEtBQXdCLEVBQUUsRUFBRTt3QkFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQzs0QkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FDakUsQ0FBQzt3QkFDSixDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDcEMsQ0FBQztvQkFDSCxDQUFDO2lCQUNGLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxJQUE4QjtRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxjQUFjLENBQUMsSUFBVTtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxjQUFjLENBQUMsS0FBVTtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLDBCQUEwQjtRQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1lBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsK0JBQStCLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFVO1FBQzFCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLG1CQUFtQixDQUFDLElBQVk7UUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sZUFBZSxDQUFDLElBQVk7UUFDakMsTUFBTSxFQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNELE1BQU0sU0FBUyxHQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLGFBQWEsQ0FBQyxNQUF1QztRQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLGtCQUFrQixFQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU0sYUFBYSxDQUFDLFNBQW9CO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLFNBQVMsQ0FBQyxTQUFTO1lBQ2pCLENBQUMsQ0FBQztnQkFDRSxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7YUFDdkk7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUNULENBQUM7SUFDSixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUE4QjtRQUNyRCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ3JELENBQUM7SUFFTyxZQUFZLENBQUMsSUFBOEI7UUFDakQsT0FBTyxDQUNMLENBQUMsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLGtDQUFrQztZQUM3RSxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQztZQUMvQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FDOUMsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBOEI7UUFDbkQsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsV0FBcUMsRUFBRSxhQUFzQjtRQUNwRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQy9CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixnQkFBZ0IsV0FBVyxDQUFDLHFCQUFxQixrQkFBa0IsVUFBVSxVQUFVLFdBQVcsQ0FBQyxNQUFNLFdBQVcsRUFDOUksV0FBVyxDQUFDLFlBQVksSUFBSSxFQUFFLEVBQzlCLGFBQWEsQ0FDZCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNyQixhQUFhLENBQUM7WUFDWixJQUFJLENBQUMsdUJBQXVCO1lBQzVCLElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxPQUFPO1lBQ1osSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLENBQUMsV0FBVztTQUNqQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTtZQUN0RSxNQUFNLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxHQUFHLFVBQVUsQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsY0FBYyxhQUFhLFVBQVUsWUFBWSxDQUFDLEVBQUU7Z0JBQ3JGLFdBQVcsRUFBRSxFQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBQzthQUN4RCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyx1QkFBdUI7YUFDekIsSUFBSSxDQUNILFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUMxRSxFQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLE1BQWUsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTthQUNyQixJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoQixNQUFNLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUQsT0FBTyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDcEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDOUIsSUFBSSxFQUFFLENBQUMsSUFBSTtnQkFDWCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO2FBQ3ZCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFVBQW1CO1FBQ3BELE1BQU0sV0FBVyxHQUFHLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELElBQUksV0FBVyxJQUFJLFdBQVcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTztnQkFDTCxTQUFTLEVBQUUsSUFBSTtnQkFDZixLQUFLLEVBQUU7b0JBQ0wsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ3BCLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFjO2lCQUN2QzthQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sYUFBYSxDQUFDLGlCQUFvQyxFQUFFLE9BQWE7UUFDdkUsT0FBTyxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUNoRCxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0E1akJVLCtDQUErQzttR0FBL0MsK0NBQStDLG9VQ2pGNUQsbTROQTRMQSwraENEdEhJLFlBQVkseVpBQ1osZ0JBQWdCLDIxQkFDaEIsbUNBQW1DLHVkQUNuQyxZQUFZLGdNQUNaLFVBQVUsNE5BQ1YsZUFBZSw0RkFDZiw0QkFBNEIsc0hBQzVCLFlBQVksbVFBQ1osdUJBQXVCOzs0RkFHZCwrQ0FBK0M7a0JBakIzRCxTQUFTOytCQUNFLHFEQUFxRCxjQUduRCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLG1DQUFtQzt3QkFDbkMsWUFBWTt3QkFDWixVQUFVO3dCQUNWLGVBQWU7d0JBQ2YsNEJBQTRCO3dCQUM1QixZQUFZO3dCQUNaLHVCQUF1QjtxQkFDeEI7K2JBR3VCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDWSxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjYgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RmlsdGVyMTYsIFRhZ0dyb3VwMTYsIFVwbG9hZDE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RNb2R1bGUsXG4gIENvbHVtbkNvbmZpZyxcbiAgQ29uZmlybWF0aW9uTW9kYWxNb2R1bGUsXG4gIERFRkFVTFRfUEFHSU5BVElPTixcbiAgREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHLFxuICBEb2N1bWVudGVuQXBpTWV0YWRhdGEsXG4gIFBhZ2luYXRpb24sXG4gIFNvcnRTdGF0ZSxcbiAgVmlld1R5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlLCBEaXJlY3Rpb259IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1xuICBDQU5fQ1JFQVRFX1JFU09VUkNFX1BFUk1JU1NJT04sXG4gIERvd25sb2FkU2VydmljZSxcbiAgUkVTT1VSQ0VfUEVSTUlTU0lPTl9SRVNPVVJDRSxcbiAgVXBsb2FkUHJvdmlkZXJTZXJ2aWNlLFxufSBmcm9tICdAdmFsdGltby9yZXNvdXJjZSc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7QnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIEljb25Nb2R1bGUsIEljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENPTFVNTl9WSUVXX1RZUEVTLFxuICBDb25maWd1cmVkQ29sdW1uLFxuICBET0NVTUVOVEVOX0NPTFVNTl9LRVlTLFxuICBEb2N1bWVudGVuQXBpRmlsZVBlcm1pc3Npb25zLFxuICBEb2N1bWVudGVuQXBpRmlsdGVyTW9kZWwsXG4gIERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSxcbiAgU3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpQ29sdW1uU2VydmljZSwgRG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZSwgRG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlGaWx0ZXJDb21wb25lbnR9IGZyb20gJy4uL2RvY3VtZW50ZW4tYXBpLWZpbHRlci9kb2N1bWVudGVuLWFwaS1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIERvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50XG59IGZyb20gJy4uL2RvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsL2RvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBEb2N1bWVudGVuQXBpVXBsb2FkRmllbGREZWZhdWx0VmFsdWVzLFxuICBEb2N1bWVudGVuQXBpVXBsb2FkRmllbGRzLFxufSBmcm9tICcuLi8uLi9tb2RlbHMvZG9jdW1lbnRlbi1hcGktdXBsb2FkLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7UGVybWlzc2lvblJlcXVlc3QsIFBlcm1pc3Npb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9hY2Nlc3MtY29udHJvbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFiLWRvY3VtZW50ZW4tYXBpLWRvY3VtZW50cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDYXJib25MaXN0TW9kdWxlLFxuICAgIERvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50LFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBEb2N1bWVudGVuQXBpRmlsdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ01vZHVsZSxcbiAgICBDb25maXJtYXRpb25Nb2RhbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llckRldGFpbFRhYkRvY3VtZW50ZW5BcGlEb2N1bWVudHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndHJhbnNsYXRpb25UZW1wbGF0ZScpIHRyYW5zbGF0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICBmaWx0ZXIoY2FzZURlZmluaXRpb25OYW1lID0+ICEhY2FzZURlZmluaXRpb25OYW1lKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PFN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQ6IE9ic2VydmFibGU8U3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPiA9XG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcChjYXNlRGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2UuZ2V0U3VwcG9ydGVkQXBpRmVhdHVyZXMoY2FzZURlZmluaXRpb25OYW1lKVxuICAgICAgKSxcbiAgICAgIHRhcChzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMgPT5cbiAgICAgICAgdGhpcy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkLm5leHQoc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpZWxkcyQ6IE9ic2VydmFibGU8Q29sdW1uQ29uZmlnW10+ID0gdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5maWVsZHNMb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaUNvbHVtblNlcnZpY2UuZ2V0Q29uZmlndXJlZENvbHVtbnMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgICAgIHRoaXMuX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQsXG4gICAgICAgIHRoaXMuX3NvcnQkLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW2NvbHVtbnMsIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcywgc29ydF0pID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTb3J0Q29sdW1uOiBDb25maWd1cmVkQ29sdW1uIHwgdW5kZWZpbmVkID0gY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sdW1uOiBDb25maWd1cmVkQ29sdW1uKSA9PiAhIWNvbHVtbi5kZWZhdWx0U29ydFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgISFkZWZhdWx0U29ydENvbHVtbiAmJlxuICAgICAgICAhc29ydD8uc29ydCAmJlxuICAgICAgICBzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMuc3VwcG9ydHNTb3J0YWJsZUNvbHVtbnNcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9zb3J0JC5uZXh0KHtzb3J0OiBgJHtkZWZhdWx0U29ydENvbHVtbi5rZXl9LCR7ZGVmYXVsdFNvcnRDb2x1bW4uZGVmYXVsdFNvcnR9YH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbjogQ29uZmlndXJlZENvbHVtbikgPT4gKHtcbiAgICAgICAga2V5OiBjb2x1bW4ua2V5ID09PSBET0NVTUVOVEVOX0NPTFVNTl9LRVlTLkJFU1RBTkRTT01WQU5HID8gJ3NpemUnIDogY29sdW1uLmtleSxcbiAgICAgICAgbGFiZWw6IGB6Z3cuZG9jdW1lbnRDb2x1bW5zLiR7Y29sdW1uLmtleX1gLFxuICAgICAgICB2aWV3VHlwZTogIUNPTFVNTl9WSUVXX1RZUEVTW2NvbHVtbi5rZXldID8gVmlld1R5cGUuVEVYVCA6IENPTFVNTl9WSUVXX1RZUEVTW2NvbHVtbi5rZXldLFxuICAgICAgICAuLi4oQ09MVU1OX1ZJRVdfVFlQRVNbY29sdW1uLmtleV0gPT09IFZpZXdUeXBlLlRFTVBMQVRFICYmIHtcbiAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy50cmFuc2xhdGlvblRlbXBsYXRlLFxuICAgICAgICAgIHRlbXBsYXRlRGF0YToge2tleTogY29sdW1uLmtleX0sXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4oY29sdW1uLmtleSA9PT0gRE9DVU1FTlRFTl9DT0xVTU5fS0VZUy5DUkVBVElFREFUVU0gJiYge2Zvcm1hdDogJ0RELU1NLVlZWVknfSksXG4gICAgICAgIHNvcnRhYmxlOiBjb2x1bW4uc29ydGFibGUgJiYgc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLnN1cHBvcnRzU29ydGFibGVDb2x1bW5zLFxuICAgICAgfSkpO1xuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB0aGlzLmZpZWxkc0xvYWRpbmckLm5leHQoZmFsc2UpKVxuICApO1xuICBwdWJsaWMgZG9jdW1lbnQ6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZTtcbiAgcHVibGljIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW10gPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdkb2N1bWVudC5kb3dubG9hZCcsXG4gICAgICBjYWxsYmFjazogdGhpcy5vbkRvd25sb2FkQWN0aW9uQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgIGRpc2FibGVkQ2FsbGJhY2s6IHRoaXMuZG93bmxvYWREaXNhYmxlZC5iaW5kKHRoaXMpLFxuICAgICAgdHlwZTogJ25vcm1hbCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ2RvY3VtZW50LmVkaXQnLFxuICAgICAgY2FsbGJhY2s6IHRoaXMub25FZGl0TWV0YWRhdGEuYmluZCh0aGlzKSxcbiAgICAgIGRpc2FibGVkQ2FsbGJhY2s6IHRoaXMuZWRpdERpc2FibGVkLmJpbmQodGhpcyksXG4gICAgICB0eXBlOiAnbm9ybWFsJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnZG9jdW1lbnQuZGVsZXRlJyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9uRGVsZXRlQWN0aW9uQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgIGRpc2FibGVkQ2FsbGJhY2s6IHRoaXMuZGVsZXRlRGlzYWJsZWQuYmluZCh0aGlzKSxcbiAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgIH0sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSxcbiAgICBmaWx0ZXIoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiAhIWRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50SWQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudElkKSxcbiAgICBmaWx0ZXIoZG9jdW1lbnRJZCA9PiAhIWRvY3VtZW50SWQpXG4gICk7XG5cbiAgcHVibGljIGlzQWRtaW46IGJvb2xlYW47XG4gIHB1YmxpYyBzaG93WmFha0xpbmtXYXJuaW5nOiBib29sZWFuO1xuICBwdWJsaWMgdXBsb2FkUHJvY2Vzc0xpbmtlZFNldCA9IGZhbHNlO1xuICBwdWJsaWMgdXBsb2FkUHJvY2Vzc0xpbmtlZCE6IGJvb2xlYW47XG5cbiAgcHVibGljIGlzRWRpdE1vZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFjY2VwdGVkRmlsZXM6IHN0cmluZyB8IG51bGwgPVxuICAgIHRoaXMuY29uZmlnU2VydmljZT8uY29uZmlnPy5jYXNlRmlsZVVwbG9hZEFjY2VwdGVkRmlsZXMgfHwgbnVsbDtcbiAgcHVibGljIHJlYWRvbmx5IG1heEZpbGVTaXplOiBudW1iZXIgPSB0aGlzLmNvbmZpZ1NlcnZpY2U/LmNvbmZpZz8uY2FzZUZpbGVTaXplVXBsb2FkTGltaXRNQiB8fCA1O1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWxlVG9CZVVwbG9hZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsZSB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgbW9kYWxEaXNhYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dNb2RhbCQgPSBuZXcgU3ViamVjdDxudWxsPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1VwbG9hZE1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgdXBsb2FkRXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93RGVsZXRlQ29uZmlybWF0aW9uTW9kYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHVwbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXRlbXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBmaWVsZHNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2l0ZW1zTG9hZGluZyQsIHRoaXMuZmllbGRzTG9hZGluZyRdKS5waXBlKFxuICAgIG1hcCgoW2l0ZW1zTG9hZGluZywgZmllbGRzTG9hZGluZ10pID0+IGl0ZW1zTG9hZGluZyB8fCBmaWVsZHNMb2FkaW5nKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXIkID0gbmV3IFJlcGxheVN1YmplY3Q8RG9jdW1lbnRlbkFwaUZpbHRlck1vZGVsIHwgbnVsbD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uPihERUZBVUxUX1BBR0lOQVRJT04pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWZldGNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NvcnQkID0gbmV3IFJlcGxheVN1YmplY3Q8e3NvcnQ6IHN0cmluZ30gfCBudWxsPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHRpbW9FbmRwb2ludFVyaSE6IHN0cmluZztcblxuICBwdWJsaWMgcmVhZG9ubHkgcGFnaW5hdG9yQ29uZmlnID0ge1xuICAgIC4uLkRFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRyxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zOiBbNSwgMTAsIDIwLCA1MCwgMTAwXSxcbiAgfTtcblxuICBwdWJsaWMgc29ydFN0YXRlJDogT2JzZXJ2YWJsZTxTb3J0U3RhdGUgfCBudWxsPiA9IHRoaXMuX3NvcnQkLnBpcGUoXG4gICAgZmlsdGVyKHNvcnRWYWx1ZSA9PiAhIXNvcnRWYWx1ZT8uc29ydCksXG4gICAgbWFwKHNvcnRWYWx1ZSA9PiB0aGlzLmdldFNvcnRTdGF0ZUZyb21Tb3J0U3RyaW5nKHNvcnRWYWx1ZT8uc29ydCkpXG4gICk7XG5cbiAgcHVibGljIHVwbG9hZEZpZWxkcyQ6IE9ic2VydmFibGU8RG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkcz4gPSB0aGlzLmRvY3VtZW50SWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50SWQgPT4gdGhpcy5kb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlLmdldFByZWZpbGxlZFVwbG9hZEZpZWxkcyhkb2N1bWVudElkKSksXG4gICAgbWFwKHVwbG9hZEZpZWxkcyA9PlxuICAgICAgdXBsb2FkRmllbGRzLnJlZHVjZShcbiAgICAgICAgKGFjYywgY3VycikgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2N1cnIua2V5XToge1xuICAgICAgICAgICAga2V5OiBjdXJyLmtleSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogY3Vyci5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjdXJyLnZpc2libGUsXG4gICAgICAgICAgICByZWFkb25seTogY3Vyci5yZWFkb25seSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHVibGljIGRlZmF1bHRWYWx1ZXMkOiBPYnNlcnZhYmxlPERvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZERlZmF1bHRWYWx1ZXM+ID1cbiAgICB0aGlzLnVwbG9hZEZpZWxkcyQucGlwZShcbiAgICAgIG1hcChmb3JtRmllbGRzID0+ICh7XG4gICAgICAgIGF1dGV1cjogZm9ybUZpZWxkcz8uYXV0ZXVyPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZzogZm9ybUZpZWxkcz8udmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGJlc2NocmlqdmluZzogZm9ybUZpZWxkcz8uYmVzY2hyaWp2aW5nPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIHRpdGVsOiBmb3JtRmllbGRzPy50aXRlbD8uZGVmYXVsdFZhbHVlLFxuICAgICAgICBpbmZvcm1hdGllb2JqZWN0dHlwZTogZm9ybUZpZWxkcz8uaW5mb3JtYXRpZW9iamVjdHR5cGU/LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgYmVzdGFuZHNuYWFtOiBmb3JtRmllbGRzPy5iZXN0YW5kc25hYW0/LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdGFhbDogZm9ybUZpZWxkcz8udGFhbD8uZGVmYXVsdFZhbHVlLFxuICAgICAgICBzdGF0dXM6IGZvcm1GaWVsZHM/LnN0YXR1cz8uZGVmYXVsdFZhbHVlLFxuICAgICAgICB0cmVmd29vcmRlbjogZm9ybUZpZWxkcz8udHJlZndvb3JkZW4/LmRlZmF1bHRWYWx1ZVxuICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgID8ubWFwKHRhZyA9PiB0YWcudHJpbSgpKVxuICAgICAgICAgID8uZmlsdGVyKHRhZyA9PiAhIXRhZyksXG4gICAgICB9KSlcbiAgICApO1xuXG4gIHB1YmxpYyBoaWRlRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PiA9IHRoaXMudXBsb2FkRmllbGRzJC5waXBlKFxuICAgIG1hcChmb3JtRmllbGRzID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGRzKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmb3JtRmllbGRzKS5maWx0ZXIoZmllbGQgPT4gIWZvcm1GaWVsZHNbZmllbGRdPy52aXNpYmxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KVxuICApO1xuXG4gIHB1YmxpYyByZWxhdGVkRmlsZXMkOiBPYnNlcnZhYmxlPEFycmF5PERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudElkJCxcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAsXG4gICAgdGhpcy5fcmVmZXRjaCQsXG4gIF0pLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnRJZCwgcXVlcnlQYXJhbXNdKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZS5nZXRGaWx0ZXJlZFpha2VuQXBpRG9jdW1lbnRzKFxuICAgICAgICAgIGRvY3VtZW50SWQsXG4gICAgICAgICAgcXVlcnlQYXJhbXNbJ3BhcmFtcyddXG4gICAgICAgICksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW3JlbGF0ZWRGaWxlc10pID0+IHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKSxcbiAgICAgICAgY29sbGVjdGlvblNpemU6IHJlbGF0ZWRGaWxlcy50b3RhbEVsZW1lbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkRmlsZXMgPSByZWxhdGVkRmlsZXM/LmNvbnRlbnQ/Lm1hcChmaWxlID0+ICh7XG4gICAgICAgIC4uLmZpbGUsXG4gICAgICAgIGNyZWF0ZWRCeTogZmlsZS5jcmVhdGVkQnkgfHwgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xpc3QuYXV0b21hdGljYWxseUdlbmVyYXRlZCcpLFxuICAgICAgICBzaXplOiB0aGlzLmJ5dGVzVG9NZWdhYnl0ZXMoZmlsZS5iZXN0YW5kc29tdmFuZyksXG4gICAgICAgIHRhZ3M6IGZpbGUudHJlZndvb3JkZW4/Lm1hcCgodHJlZndvb3JkOiBzdHJpbmcpID0+ICh7XG4gICAgICAgICAgY29udGVudDogdHJlZndvb3JkLFxuICAgICAgICB9KSksXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlZEZpbGVzIHx8IFtdO1xuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLl9pdGVtc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIH0pLFxuICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93WmFha0xpbmtXYXJuaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHtidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZX0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVuYWJsZVBiYWNEb2N1bWVudGVuQXBpRG9jdW1lbnRzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5jb25maWdTZXJ2aWNlLmdldEZlYXR1cmVUb2dnbGVPYnNlcnZhYmxlKCdlbmFibGVQYmFjRG9jdW1lbnRlbkFwaURvY3VtZW50cycpO1xuXG4gIHB1YmxpYyBmaWxlUGVybWlzc2lvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2N1bWVudGVuQXBpRmlsZVBlcm1pc3Npb25zPih7fSk7XG5cbiAgcHVibGljIGdldCBmaWxlUGVybWlzc2lvbnMoKTogRG9jdW1lbnRlbkFwaUZpbGVQZXJtaXNzaW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVBlcm1pc3Npb25zJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhbkNyZWF0ZVJlc291cmNlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZG9jdW1lbnRJZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnRJZCA9PlxuICAgICAgdGhpcy5nZXRQZXJtaXNzaW9uKENBTl9DUkVBVEVfUkVTT1VSQ0VfUEVSTUlTU0lPTiwge1xuICAgICAgICByZXNvdXJjZTogUkVTT1VSQ0VfUEVSTUlTU0lPTl9SRVNPVVJDRS5qc29uU2NoZW1hRG9jdW1lbnQsXG4gICAgICAgIGlkZW50aWZpZXI6IGRvY3VtZW50SWQsXG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlOiBEb2N1bWVudGVuQXBpQ29sdW1uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2U6IERvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2U6IERvY3VtZW50ZW5BcGlWZXJzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvd25sb2FkU2VydmljZTogRG93bmxvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBsb2FkUHJvdmlkZXJTZXJ2aWNlOiBVcGxvYWRQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXIoRmlsdGVyMTYpO1xuICAgIHRoaXMudmFsdGltb0VuZHBvaW50VXJpID0gY29uZmlnU2VydmljZS5jb25maWcudmFsdGltb0FwaS5lbmRwb2ludFVyaTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEluaXRpYWxQYXJhbXMoKTtcbiAgICB0aGlzLnNldFVwbG9hZFByb2Nlc3NMaW5rZWQoKTtcbiAgICB0aGlzLmlzVXNlckFkbWluKCk7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbRmlsdGVyMTYsIFRhZ0dyb3VwMTYsIFVwbG9hZDE2XSk7XG4gICAgdGhpcy5yZWdpc3RlclBlcm1pc3Npb25TdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJQZXJtaXNzaW9uU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMucmVsYXRlZEZpbGVzJCwgdGhpcy5lbmFibGVQYmFjRG9jdW1lbnRlbkFwaURvY3VtZW50cyRdKS5zdWJzY3JpYmUoXG4gICAgICAgIChbZmlsZXMsIHBiYWNFbmFibGVkXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25zOiBEb2N1bWVudGVuQXBpRmlsZVBlcm1pc3Npb25zID0ge307XG4gICAgICAgICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zW2ZpbGUuZmlsZUlkXSA9IHtcbiAgICAgICAgICAgICAgY2FuVmlldzogcGJhY0VuYWJsZWQgPyBmaWxlLmNhblZpZXcgIT09IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FuTW9kaWZ5OiBwYmFjRW5hYmxlZCA/IGZpbGUuY2FuTW9kaWZ5ICE9PSBmYWxzZSA6IHRydWUsXG4gICAgICAgICAgICAgIGNhbkRlbGV0ZTogcGJhY0VuYWJsZWQgPyBmaWxlLmNhbkRlbGV0ZSAhPT0gZmFsc2UgOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmZpbGVQZXJtaXNzaW9ucyQubmV4dChwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRlbGV0ZUFjdGlvbkNsaWNrKGl0ZW06IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnQgPSBpdGVtO1xuICAgIHRoaXMuc2hvd0RlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZURvY3VtZW50KCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRJZCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnRJZCA9PiB7XG4gICAgICB0aGlzLl9pdGVtc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UuZGVsZXRlRG9jdW1lbnQodGhpcy5kb2N1bWVudCwgZG9jdW1lbnRJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVmZXRjaERvY3VtZW50cygpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBieXRlc1RvTWVnYWJ5dGVzKGJ5dGVzOiBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghYnl0ZXMpIHJldHVybiAnJztcblxuICAgIGNvbnN0IG1lZ2FieXRlcyA9IGJ5dGVzIC8gKDEwMjQgKiAxMDI0KTtcbiAgICBpZiAobWVnYWJ5dGVzIDwgMSkge1xuICAgICAgcmV0dXJuIGAke01hdGguY2VpbChtZWdhYnl0ZXMgKiAxMDAwKX0gS0JgO1xuICAgIH0gZWxzZSBpZiAobWVnYWJ5dGVzIDwgMTAwMCkge1xuICAgICAgcmV0dXJuIG1lZ2FieXRlcy50b0ZpeGVkKDIpICsgJyBNQic7XG4gICAgfVxuXG4gICAgcmV0dXJuIChtZWdhYnl0ZXMgLyAxMDAwKS50b0ZpeGVkKDIpICsgJyBHQic7XG4gIH1cblxuICBwdWJsaWMgZ2V0VXBsb2FkQnV0dG9uVG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnVwbG9hZFByb2Nlc3NMaW5rZWRTZXQgJiYgdGhpcy51cGxvYWRQcm9jZXNzTGlua2VkKSB7XG4gICAgICByZXR1cm4gJ1VwbG9hZCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQWRtaW4pIHtcbiAgICAgIHJldHVybiAnZG9zc2llci5kb2N1bWVudGVuLm5vUHJvY2Vzc0xpbmtlZC5hZG1pblJvbGUnO1xuICAgIH1cblxuICAgIHJldHVybiAnZG9zc2llci5kb2N1bWVudGVuLm5vUHJvY2Vzc0xpbmtlZC5yZWd1bGFyVXNlcic7XG4gIH1cblxuICBwdWJsaWMgaXNVc2VyQWRtaW4oKSB7XG4gICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlXG4gICAgICAuZ2V0VXNlclN1YmplY3QoKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIHVzZXJJZGVudGl0eSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0FkbWluID0gdXNlcklkZW50aXR5LnJvbGVzLmluY2x1ZGVzKCdST0xFX0FETUlOJyk7XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzQWRtaW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRhZGF0YVNldChtZXRhZGF0YTogRG9jdW1lbnRlbkFwaU1ldGFkYXRhKTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy51cGxvYWRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLCB0aGlzLmRvY3VtZW50SWQkXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChbZmlsZSwgZG9jdW1lbnRJZF0pID0+IHtcbiAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcbiAgICAgICAgICBpZiAodGhpcy5pc0VkaXRNb2RlJC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UudXBkYXRlRG9jdW1lbnQoZmlsZSwgbWV0YWRhdGEsIGRvY3VtZW50SWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dVcGxvYWRNb2RhbCQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZldGNoRG9jdW1lbnRzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZVRvQmVVcGxvYWRlZCQubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEVycm9yLnNldChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2RvY3VtZW50LnVwbG9hZFBlcm1pc3Npb25EZW5pZWQnKVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93VXBsb2FkTW9kYWwkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZFByb3ZpZGVyU2VydmljZVxuICAgICAgICAgICAgICAudXBsb2FkRmlsZVdpdGhNZXRhZGF0YShmaWxlLCBkb2N1bWVudElkLCBtZXRhZGF0YSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93VXBsb2FkTW9kYWwkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZWZldGNoRG9jdW1lbnRzKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciQubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dChERUZBVUxUX1BBR0lOQVRJT04pO1xuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5maWxlVG9CZVVwbG9hZGVkJC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEVycm9yLnNldChcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZG9jdW1lbnQudXBsb2FkUGVybWlzc2lvbkRlbmllZCcpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dVcGxvYWRNb2RhbCQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uRG93bmxvYWRBY3Rpb25DbGljayhmaWxlOiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLmRvd25sb2FkRG9jdW1lbnQoZmlsZSwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25FZGl0TWV0YWRhdGEoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0TW9kZSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLm5leHQoZmlsZSk7XG4gICAgdGhpcy5zaG93VXBsb2FkTW9kYWwkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VNZXRhZGF0YU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkRXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd1VwbG9hZE1vZGFsJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRNb2RlJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLm5leHQoZXZlbnQudGFyZ2V0LmZpbGVzWzBdKTtcbiAgICB0aGlzLnNob3dVcGxvYWRNb2RhbCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnJlc2V0RmlsZUlucHV0KCk7XG4gIH1cblxuICBwdWJsaWMgb25OYXZpZ2F0ZVRvQ2FzZUFkbWluQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgL2Rvc3NpZXItbWFuYWdlbWVudC9kb3NzaWVyLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX1gXSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGljayhldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsZVBlcm1pc3Npb25zW2V2ZW50LmZpbGVJZF0/LmNhblZpZXcpIHtcbiAgICAgIHRoaXMuZG93bmxvYWREb2N1bWVudChldmVudCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblBhZ2luYXRpb25DbGlja2VkKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7Li4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLCBwYWdlfSk7XG4gIH1cblxuICBwdWJsaWMgb25QYWdpbmF0aW9uU2V0KHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHtjb2xsZWN0aW9uU2l6ZSwgcGFnZX0gPSB0aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCk7XG4gICAgY29uc3QgcmVzZXRQYWdlOiBib29sZWFuID0gTWF0aC5jZWlsKCtjb2xsZWN0aW9uU2l6ZSAvIHNpemUpIDw9ICtwYWdlICYmICtjb2xsZWN0aW9uU2l6ZSA+IDA7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi50aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCksIHNpemUsIC4uLihyZXNldFBhZ2UgJiYge3BhZ2U6IDF9KX0pO1xuICB9XG5cbiAgcHVibGljIG9uVXBsb2FkQnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIG9uRmlsdGVyRXZlbnQoZmlsdGVyOiBEb2N1bWVudGVuQXBpRmlsdGVyTW9kZWwgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXIkLm5leHQoZmlsdGVyKTtcbiAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKSwgLi4uREVGQVVMVF9QQUdJTkFUSU9OfSk7XG4gIH1cblxuICBwdWJsaWMgb25Tb3J0Q2hhbmdlZChzb3J0U3RhdGU6IFNvcnRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuX3NvcnQkLm5leHQoXG4gICAgICBzb3J0U3RhdGUuaXNTb3J0aW5nXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc29ydDogYCR7c29ydFN0YXRlLnN0YXRlLm5hbWUgPT09ICdzaXplJyA/IERPQ1VNRU5URU5fQ09MVU1OX0tFWVMuQkVTVEFORFNPTVZBTkcgOiBzb3J0U3RhdGUuc3RhdGUubmFtZX0sJHtzb3J0U3RhdGUuc3RhdGUuZGlyZWN0aW9ufWAsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlZmV0Y2hEb2N1bWVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVmZXRjaCQubmV4dChudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgZG93bmxvYWREaXNhYmxlZChmaWxlOiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZmlsZVBlcm1pc3Npb25zW2ZpbGUuZmlsZUlkXT8uY2FuVmlldztcbiAgfVxuXG4gIHByaXZhdGUgZWRpdERpc2FibGVkKGZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoIXRoaXMuc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJC52YWx1ZS5zdXBwb3J0c1VwZGF0aW5nRGVmaW5pdGl2ZURvY3VtZW50ICYmXG4gICAgICAgIGZpbGUuc3RhdHVzID09PSAnZGVmaW5pdGllZicpIHx8XG4gICAgICAhdGhpcy5maWxlUGVybWlzc2lvbnNbZmlsZS5maWxlSWRdPy5jYW5Nb2RpZnlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVEaXNhYmxlZChmaWxlOiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZmlsZVBlcm1pc3Npb25zW2ZpbGUuZmlsZUlkXT8uY2FuRGVsZXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZERvY3VtZW50KHJlbGF0ZWRGaWxlOiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGUsIGZvcmNlRG93bmxvYWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50SWQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGRvY3VtZW50SWQgPT4ge1xuICAgICAgdGhpcy5kb3dubG9hZFNlcnZpY2UuZG93bmxvYWRGaWxlKFxuICAgICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS96YWtlbi1hcGkvJHtyZWxhdGVkRmlsZS5wbHVnaW5Db25maWd1cmF0aW9uSWR9L2Nhc2UtZG9jdW1lbnQvJHtkb2N1bWVudElkfS9maWxlcy8ke3JlbGF0ZWRGaWxlLmZpbGVJZH0vZG93bmxvYWRgLFxuICAgICAgICByZWxhdGVkRmlsZS5iZXN0YW5kc25hYW0gPz8gJycsXG4gICAgICAgIGZvcmNlRG93bmxvYWRcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5RdWVyeVBhcmFtc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgICAgICB0aGlzLmRvY3VtZW50SWQkLFxuICAgICAgICB0aGlzLmZpbHRlciQsXG4gICAgICAgIHRoaXMuX3NvcnQkLFxuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLFxuICAgICAgXSkuc3Vic2NyaWJlKChbZGVmaW5pdGlvbk5hbWUsIGRvY3VtZW50SWQsIGZpbHRlciwgc29ydCwgcGFnaW5hdGlvbl0pID0+IHtcbiAgICAgICAgY29uc3Qge3NpemUsIHBhZ2V9ID0gcGFnaW5hdGlvbjtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvZG9zc2llcnMvJHtkZWZpbml0aW9uTmFtZX0vZG9jdW1lbnQvJHtkb2N1bWVudElkfS9kb2N1bWVudHNgXSwge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7Li4uZmlsdGVyLCAuLi5zb3J0LCBzaXplLCBwYWdlOiBwYWdlIC0gMX0sXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZpbGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldFVwbG9hZFByb2Nlc3NMaW5rZWQoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm92aWRlclNlcnZpY2UuY2hlY2tVcGxvYWRQcm9jZXNzTGluayhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgICApLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkUHJvY2Vzc0xpbmtlZFNldCA9IHRydWU7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaW5rZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy51cGxvYWRQcm9jZXNzTGlua2VkID0gbGlua2VkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKHF1ZXJ5UGFyYW1zID0+IHtcbiAgICAgICAgICBjb25zdCB7c29ydCwgc2l6ZSwgcGFnZSwgLi4uZmlsdGVyfSA9IHF1ZXJ5UGFyYW1zWydwYXJhbXMnXTtcbiAgICAgICAgICByZXR1cm4ge3NvcnQsIGZpbHRlciwgc2l6ZSwgcGFnZX07XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7ZmlsdGVyLCBzb3J0LCBzaXplLCBwYWdlfSkgPT4ge1xuICAgICAgICB0aGlzLl9zb3J0JC5uZXh0KHtzb3J0fSk7XG4gICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KGZpbHRlcik7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHNpemU6ICtzaXplLFxuICAgICAgICAgIHBhZ2U6ICsocGFnZSA/PyAwKSArIDEsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9wZW5RdWVyeVBhcmFtc1N1YnNjcmlwdGlvbigpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNvcnRTdGF0ZUZyb21Tb3J0U3RyaW5nKHNvcnRTdHJpbmc/OiBzdHJpbmcpOiBTb3J0U3RhdGUgfCBudWxsIHtcbiAgICBjb25zdCBzcGxpdFN0cmluZyA9IHNvcnRTdHJpbmcgJiYgc29ydFN0cmluZy5zcGxpdCgnLCcpO1xuICAgIGlmIChzcGxpdFN0cmluZyAmJiBzcGxpdFN0cmluZz8ubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNTb3J0aW5nOiB0cnVlLFxuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIG5hbWU6IHNwbGl0U3RyaW5nWzBdLFxuICAgICAgICAgIGRpcmVjdGlvbjogc3BsaXRTdHJpbmdbMV0gYXMgRGlyZWN0aW9uLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVybWlzc2lvbihwZXJtaXNzaW9uUmVxdWVzdDogUGVybWlzc2lvblJlcXVlc3QsIGNvbnRleHQ/OiBhbnkpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVQYmFjRG9jdW1lbnRlbkFwaURvY3VtZW50cyQucGlwZShcbiAgICAgIHN3aXRjaE1hcChlbmFibGVkID0+IHtcbiAgICAgICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKHBlcm1pc3Npb25SZXF1ZXN0LCBjb250ZXh0KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPGRpdlxuICBjbGFzcz1cImNhcmJvbi1kb2N1bWVudC10YWJsZS13cmFwcGVyXCJcbiAgKm5nSWY9XCJ7XG4gICAgbG9hZGluZzogbG9hZGluZyQgfCBhc3luYyxcbiAgICBmaWVsZHNMb2FkaW5nOiBmaWVsZHNMb2FkaW5nJCB8IGFzeW5jLFxuICAgIHVwbG9hZGluZzogdXBsb2FkaW5nJCB8IGFzeW5jLFxuICAgIHJlbGF0ZWRGaWxlczogcmVsYXRlZEZpbGVzJCB8IGFzeW5jLFxuICAgIGZpZWxkczogZmllbGRzJCB8IGFzeW5jLFxuICAgIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlczogc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJCB8IGFzeW5jLFxuICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24kIHwgYXN5bmMsXG4gICAgc29ydFN0YXRlOiBzb3J0U3RhdGUkIHwgYXN5bmMsXG4gICAgdXBsb2FkRmllbGRzOiB1cGxvYWRGaWVsZHMkIHwgYXN5bmMsXG4gICAgZGVmYXVsdFZhbHVlczogZGVmYXVsdFZhbHVlcyQgfCBhc3luYyxcbiAgICBoaWRlRmllbGRzOiBoaWRlRmllbGRzJCB8IGFzeW5jLFxuICB9IGFzIG9ic1wiXG4+XG4gIEBpZiAoKCFvYnMuZmllbGRzTG9hZGluZyAmJiBvYnMuZmllbGRzLmxlbmd0aCkgfHwgb2JzLmZpZWxkc0xvYWRpbmcpIHtcbiAgICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgICAgW2FjdGlvbkl0ZW1zXT1cImFjdGlvbkl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJvYnMucmVsYXRlZEZpbGVzXCJcbiAgICAgIFtmaWVsZHNdPVwib2JzLmZpZWxkc1wiXG4gICAgICBbaW5pdGlhbFNvcnRTdGF0ZV09XCJvYnMuc29ydFN0YXRlXCJcbiAgICAgIFtsb2FkaW5nXT1cIm9icy5sb2FkaW5nXCJcbiAgICAgIFtwYWdpbmF0aW9uXT1cIm9icy5wYWdpbmF0aW9uXCJcbiAgICAgIFtwYWdpbmF0b3JDb25maWddPVwicGFnaW5hdG9yQ29uZmlnXCJcbiAgICAgIHBhZ2luYXRpb25JZGVudGlmaWVyPVwiZG9jdW1lbnRlbkFwaVwiXG4gICAgICAocm93Q2xpY2tlZCk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICAgICAgKHNvcnRDaGFuZ2VkKT1cIlxuICAgICAgICBvYnM/LnN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcz8uc3VwcG9ydHNTb3J0YWJsZUNvbHVtbnMgJiYgb25Tb3J0Q2hhbmdlZCgkZXZlbnQpXG4gICAgICBcIlxuICAgICAgKHBhZ2luYXRpb25DbGlja2VkKT1cIm9uUGFnaW5hdGlvbkNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAocGFnaW5hdGlvblNldCk9XCJvblBhZ2luYXRpb25TZXQoJGV2ZW50KVwiXG4gICAgICBoaWRlQ29sdW1uSGVhZGVyXG4gICAgPlxuICAgICAgPGRpdiBjYXJib25Ub29sYmFyQ29udGVudD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgW2FjY2VwdF09XCJhY2NlcHRlZEZpbGVzXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgIGhpZGRlblxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgIC8+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwib2JzPy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXM/LnN1cHBvcnRzRmlsdGVyYWJsZUNvbHVtbnNcIlxuICAgICAgICAgIFtjZHNPdmVyZmxvd01lbnVdPVwib3ZlcmZsb3dGaWx0ZXJcIlxuICAgICAgICAgIFtjdXN0b21QYW5lXT1cInRydWVcIlxuICAgICAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgICAgICBbZmxpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbb2Zmc2V0XT1cInt4OiAwLCB5OiA0N31cIlxuICAgICAgICAgIGNkc0J1dHRvbj1cImdob3N0XCJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImZpbHRlclwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUmVzdWx0c1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvdmFsdGltby1jYXJib24tbGlzdD5cbiAgfSBAZWxzZSB7XG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2FjdGlvbl09XCJuYXZpZ2F0ZVRvQ2FzZUFkbWluQnV0dG9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInemd3LmRvY3VtZW50cy5ub0NvbHVtbnMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInemd3LmRvY3VtZW50cy5ub0NvbHVtbnMudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIH1cblxuICA8dmFsdGltby1kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbFxuICAgIFtkZWZhdWx0VmFsdWVzXT1cIm9icy5kZWZhdWx0VmFsdWVzXCJcbiAgICBbZGlzYWJsZUF1dGhvcl09XCJvYnMudXBsb2FkRmllbGRzPy5hdXRldXI/LnJlYWRvbmx5XCJcbiAgICBbZGlzYWJsZUNvbmZpZGVudGlhbGl0eUxldmVsXT1cIm9icy51cGxvYWRGaWVsZHM/LnZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZz8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlQ3JlYXRpb25EYXRlXT1cIm9icy51cGxvYWRGaWVsZHM/LmNyZWF0aWVkYXR1bT8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlRGVzY3JpcHRpb25dPVwib2JzLnVwbG9hZEZpZWxkcz8uYmVzY2hyaWp2aW5nPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVEb2N1bWVudFRpdGxlXT1cIm9icy51cGxvYWRGaWVsZHM/LnRpdGVsPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVEb2N1bWVudFR5cGVdPVwib2JzLnVwbG9hZEZpZWxkcz8uaW5mb3JtYXRpZW9iamVjdHR5cGU/LnJlYWRvbmx5XCJcbiAgICBbZGlzYWJsZUZpbGVuYW1lXT1cIm9icy51cGxvYWRGaWVsZHM/LmJlc3RhbmRzbmFhbT8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlTGFuZ3VhZ2VdPVwib2JzLnVwbG9hZEZpZWxkcz8udGFhbD8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlU3RhdHVzXT1cIm9icy51cGxvYWRGaWVsZHM/LnN0YXR1cz8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlZCRdPVwibW9kYWxEaXNhYmxlZCRcIlxuICAgIFtmaWxlJF09XCJmaWxlVG9CZVVwbG9hZGVkJFwiXG4gICAgW2hpZGVGaWVsZHNdPVwib2JzLmhpZGVGaWVsZHNcIlxuICAgIFtpc0VkaXRNb2RlXT1cImlzRWRpdE1vZGUkIHwgYXN5bmNcIlxuICAgIFtvcGVuXT1cInNob3dVcGxvYWRNb2RhbCQgfCBhc3luY1wiXG4gICAgW3N1cHBvcnRzVHJlZndvb3JkZW5dPVwib2JzPy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXM/LnN1cHBvcnRzVHJlZndvb3JkZW5cIlxuICAgIFt1cGxvYWRFcnJvcl09XCJ1cGxvYWRFcnJvcigpXCJcbiAgICBbdXBsb2FkaW5nXT1cIm9icy51cGxvYWRpbmdcIlxuICAgIChtZXRhZGF0YSk9XCJtZXRhZGF0YVNldCgkZXZlbnQpXCJcbiAgICAobW9kYWxDbG9zZSk9XCJjbG9zZU1ldGFkYXRhTW9kYWwoKVwiXG4gICAgKHVwbG9hZEVycm9yRGlzbWlzcyk9XCJ1cGxvYWRFcnJvci5zZXQobnVsbClcIlxuICA+PC92YWx0aW1vLWRvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsPlxuPC9kaXY+XG5cbjx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwiZGFzaGJvYXJkTWFuYWdlbWVudC5kZWxldGVNb2RhbC5jb25maXJtXCJcbiAgY29udGVudFRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5kb2N1bWVudGVuLmRlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsLmNvbnRlbnRcIlxuICBjb25maXJtQnV0dG9uVHlwZT1cImRhbmdlclwiXG4gIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyLmRvY3VtZW50ZW4uZGVsZXRlQ29uZmlybWF0aW9uTW9kYWwudGl0bGVcIlxuICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0RlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsJFwiXG4gIChjb25maXJtRXZlbnQpPVwiZGVsZXRlRG9jdW1lbnQoKVwiXG4+XG48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI25vUmVzdWx0cz5cbiAgQGlmICgoZmlsdGVyJCB8IGFzeW5jIHwga2V5dmFsdWUpPy5sZW5ndGgpIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cInJlc2V0RmlsdGVyQnV0dG9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInemd3LmRvY3VtZW50cy5ub1Jlc3VsdHMuZmlsdGVyRGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInemd3LmRvY3VtZW50cy5ub1Jlc3VsdHMuZmlsdGVyVGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIH0gQGVsc2UgaWYgKHNob3daYWFrTGlua1dhcm5pbmcgJiYgaXNBZG1pbikge1xuICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgIFthY3Rpb25dPVwibmF2aWdhdGVUb0Nhc2VBZG1pbkJ1dHRvblwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ2Rvc3NpZXIuZG9jdW1lbnRlbi5ub1phYWtGb3VuZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgW3RpdGxlXT1cIidkb3NzaWVyLmRvY3VtZW50ZW4ubm9aYWFrRm91bmRUaXRsZScgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfSBAZWxzZSB7XG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2FjdGlvbl09XCJ1cGxvYWRCdXR0b25cIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb3NzaWVyLmRvY3VtZW50ZW4ubm9GaWxlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgW3RpdGxlXT1cIidkb3NzaWVyLmRvY3VtZW50ZW4ubm9GaWxlc1RpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI292ZXJmbG93RmlsdGVyPlxuICA8dmFsdGltby1kb3NzaWVyLWRldGFpbC10YWItZG9jdW1lbnRlbi1hcGktZmlsdGVyXG4gICAgW3ByZWZpbGxGaWx0ZXJdPVwiZmlsdGVyJCB8IGFzeW5jXCJcbiAgICAoZmlsdGVyRXZlbnQpPVwib25GaWx0ZXJFdmVudCgkZXZlbnQpXCJcbiAgPjwvdmFsdGltby1kb3NzaWVyLWRldGFpbC10YWItZG9jdW1lbnRlbi1hcGktZmlsdGVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZXNldEZpbHRlckJ1dHRvbj5cbiAgPGJ1dHRvbiBjZHNCdXR0b249XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uRmlsdGVyRXZlbnQobnVsbClcIj5cbiAgICB7eyAnUmVzZXQgZmlsdGVyJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdXBsb2FkQnV0dG9uIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gIDxidXR0b25cbiAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAodXBsb2FkUHJvY2Vzc0xpbmtlZFNldCAmJiAhdXBsb2FkUHJvY2Vzc0xpbmtlZCkgfHxcbiAgICAgIHNob3daYWFrTGlua1dhcm5pbmcgfHxcbiAgICAgIGRpc2FibGVkIHx8XG4gICAgICAoY2FuQ3JlYXRlUmVzb3VyY2UkIHwgYXN5bmMpID09PSBmYWxzZVxuICAgIFwiXG4gICAgW3ZUb29sdGlwXT1cImdldFVwbG9hZEJ1dHRvblRvb2x0aXAoKSB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cIm9uVXBsb2FkQnV0dG9uQ2xpY2soKVwiXG4gICAgY2RzQnV0dG9uPVwicHJpbWFyeVwiXG4gID5cbiAgICB7eyAnVXBsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJ1cGxvYWRcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RyYW5zbGF0aW9uVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIEBpZiAoZGF0YS5pdGVtW2RhdGEua2V5XSkge1xuICAgIHt7ICdkb2N1bWVudC4nICsgZGF0YS5pdGVtW2RhdGEua2V5XSB8IHRyYW5zbGF0ZSB9fVxuICB9IEBlbHNlIHtcbiAgICAtXG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbmF2aWdhdGVUb0Nhc2VBZG1pbkJ1dHRvbj5cbiAgPGJ1dHRvbiAoY2xpY2spPVwib25OYXZpZ2F0ZVRvQ2FzZUFkbWluQ2xpY2soKVwiIGNkc0J1dHRvbj1cInByaW1hcnlcIj5cbiAgICB7eyAnZG9zc2llci5kb2N1bWVudGVuLm5hdmlnYXRlVG9DYXNlQWRtaW4nIHwgdHJhbnNsYXRlIH19XG5cbiAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwic2V0dGluZ3NcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19