@comet/cms-admin 8.20.2 → 9.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/blocks/AnchorBlock.js +18 -23
- package/lib/blocks/DamVideoBlock.generated.js +1 -7
- package/lib/blocks/DamVideoBlock.js +38 -44
- package/lib/blocks/EmailLinkBlock.js +19 -25
- package/lib/blocks/ExternalLinkBlock.js +22 -28
- package/lib/blocks/InternalLinkBlock.generated.js +1 -7
- package/lib/blocks/InternalLinkBlock.js +31 -38
- package/lib/blocks/PhoneLinkBlock.js +19 -25
- package/lib/blocks/PixelImageBlock.generated.js +1 -7
- package/lib/blocks/PixelImageBlock.js +37 -43
- package/lib/blocks/SpaceBlock.js +16 -22
- package/lib/blocks/SvgImageBlock.generated.js +1 -7
- package/lib/blocks/SvgImageBlock.js +25 -31
- package/lib/blocks/VimeoVideoBlock.js +34 -40
- package/lib/blocks/YouTubeVideoBlock.js +34 -40
- package/lib/blocks/clipboard/CannotPasteBlockDialog.js +18 -19
- package/lib/blocks/clipboard/useBlockClipboard.js +14 -19
- package/lib/blocks/common/AddBlockDrawer.js +41 -47
- package/lib/blocks/common/AdminComponentStickyFooter.d.ts +1 -1
- package/lib/blocks/common/AdminComponentStickyFooter.d.ts.map +1 -1
- package/lib/blocks/common/AdminComponentStickyFooter.js +2 -8
- package/lib/blocks/common/AdminComponentStickyHeader.d.ts +1 -1
- package/lib/blocks/common/AdminComponentStickyHeader.d.ts.map +1 -1
- package/lib/blocks/common/AdminComponentStickyHeader.js +2 -8
- package/lib/blocks/common/AdminTabsTabContent.js +9 -15
- package/lib/blocks/common/BlockAdminComponentButton.js +8 -13
- package/lib/blocks/common/BlockAdminComponentNestedButton.js +17 -23
- package/lib/blocks/common/BlockAdminComponentPaper.js +12 -19
- package/lib/blocks/common/BlockAdminComponentRoot.js +11 -16
- package/lib/blocks/common/BlockAdminComponentSection.js +12 -18
- package/lib/blocks/common/BlockAdminComponentSectionGroup.js +9 -15
- package/lib/blocks/common/BlockAdminTabLabel.js +9 -15
- package/lib/blocks/common/BlockAdminTabs.d.ts +1 -0
- package/lib/blocks/common/BlockAdminTabs.d.ts.map +1 -1
- package/lib/blocks/common/BlockAdminTabs.js +24 -30
- package/lib/blocks/common/Collapsible.js +7 -13
- package/lib/blocks/common/CollapsibleSwitchButtonHeader.js +8 -14
- package/lib/blocks/common/HiddenInSubroute.js +5 -11
- package/lib/blocks/common/blockRow/BlockPreviewContent.d.ts +1 -1
- package/lib/blocks/common/blockRow/BlockPreviewContent.d.ts.map +1 -1
- package/lib/blocks/common/blockRow/BlockPreviewContent.js +18 -26
- package/lib/blocks/common/blockRow/BlockPreviewContent.sc.d.ts +5 -5
- package/lib/blocks/common/blockRow/BlockPreviewContent.sc.d.ts.map +1 -1
- package/lib/blocks/common/blockRow/BlockPreviewContent.sc.js +6 -12
- package/lib/blocks/common/blockRow/BlockRow.d.ts +1 -1
- package/lib/blocks/common/blockRow/BlockRow.d.ts.map +1 -1
- package/lib/blocks/common/blockRow/BlockRow.js +51 -58
- package/lib/blocks/common/blockRow/BlockRow.sc.js +16 -22
- package/lib/blocks/common/blockRow/image/StackedImages.d.ts +1 -0
- package/lib/blocks/common/blockRow/image/StackedImages.d.ts.map +1 -1
- package/lib/blocks/common/blockRow/image/StackedImages.js +18 -26
- package/lib/blocks/common/blockRow/image/StackedImages.sc.d.ts +8 -8
- package/lib/blocks/common/blockRow/image/StackedImages.sc.d.ts.map +1 -1
- package/lib/blocks/common/blockRow/image/StackedImages.sc.js +11 -17
- package/lib/blocks/common/usePromise.js +6 -10
- package/lib/blocks/common/useScrollRestoration.d.ts +2 -2
- package/lib/blocks/common/useScrollRestoration.d.ts.map +1 -1
- package/lib/blocks/common/useScrollRestoration.js +8 -14
- package/lib/blocks/config/BlocksConfigContext.js +7 -14
- package/lib/blocks/context/BlockContext.js +2 -8
- package/lib/blocks/context/BlockContextProvider.js +4 -10
- package/lib/blocks/context/useBlockContext.js +12 -18
- package/lib/blocks/createImageLinkBlock.js +10 -16
- package/lib/blocks/createLinkBlock.js +25 -30
- package/lib/blocks/createRichTextBlock.js +29 -38
- package/lib/blocks/createSeoBlock.js +114 -121
- package/lib/blocks/createTableBlock.js +30 -36
- package/lib/blocks/createTextImageBlock.js +43 -48
- package/lib/blocks/createTextLinkBlock.js +24 -30
- package/lib/blocks/factories/columnsBlock/ColumnsIcon.d.ts +1 -0
- package/lib/blocks/factories/columnsBlock/ColumnsIcon.d.ts.map +1 -1
- package/lib/blocks/factories/columnsBlock/ColumnsIcon.js +6 -12
- package/lib/blocks/factories/columnsBlock/ColumnsLayoutPreview.js +13 -21
- package/lib/blocks/factories/columnsBlock/FinalFormColumnsSelect.js +7 -13
- package/lib/blocks/factories/columnsBlock/FinalFormLayoutSelect.js +21 -27
- package/lib/blocks/factories/createBlocksBlock.js +113 -117
- package/lib/blocks/factories/createColumnsBlock.js +85 -91
- package/lib/blocks/factories/createCompositeBlock.js +54 -60
- package/lib/blocks/factories/createListBlock.js +80 -84
- package/lib/blocks/factories/createOneOfBlock.js +54 -61
- package/lib/blocks/factories/createOptionalBlock.js +24 -29
- package/lib/blocks/factories/listBlock/createUseAdminComponent.js +24 -30
- package/lib/blocks/factories/spaceBlock/createSpaceBlock.js +16 -22
- package/lib/blocks/form/AutosaveFinalForm.d.ts +1 -0
- package/lib/blocks/form/AutosaveFinalForm.d.ts.map +1 -1
- package/lib/blocks/form/AutosaveFinalForm.js +7 -13
- package/lib/blocks/form/BlocksFinalForm.d.ts +1 -0
- package/lib/blocks/form/BlocksFinalForm.d.ts.map +1 -1
- package/lib/blocks/form/BlocksFinalForm.js +12 -18
- package/lib/blocks/form/createFinalFormBlock.js +7 -12
- package/lib/blocks/helpers/VideoOptionsFields.js +15 -21
- package/lib/blocks/helpers/composeBlocks/composeBlocks.js +40 -40
- package/lib/blocks/helpers/composeBlocks/createCompositeBlockField.js +3 -9
- package/lib/blocks/helpers/composeBlocks/createCompositeBlockFields.js +3 -9
- package/lib/blocks/helpers/composeBlocks/createSettingsBlock.js +3 -9
- package/lib/blocks/helpers/composeBlocks/types.js +1 -5
- package/lib/blocks/helpers/composeBlocks/utility-types.js +1 -5
- package/lib/blocks/helpers/composeBlocks/utils.js +5 -14
- package/lib/blocks/helpers/createBlockSkeleton.js +14 -16
- package/lib/blocks/helpers/createCompositeBlockSelectField.js +8 -14
- package/lib/blocks/helpers/createCompositeBlockSwitchField.js +8 -14
- package/lib/blocks/helpers/createCompositeBlockTextField.js +8 -14
- package/lib/blocks/helpers/decomposeUpdateStateAction.js +3 -9
- package/lib/blocks/helpers/deduplicateBlockDependencies.js +3 -10
- package/lib/blocks/helpers/isBlockInterface.js +1 -7
- package/lib/blocks/helpers/withAdditionalBlockAttributes.js +1 -7
- package/lib/blocks/iframebridge/HoverPreviewComponent.js +15 -24
- package/lib/blocks/iframebridge/HoverPreviewComponent.sc.d.ts +1 -3
- package/lib/blocks/iframebridge/HoverPreviewComponent.sc.d.ts.map +1 -1
- package/lib/blocks/iframebridge/HoverPreviewComponent.sc.js +6 -12
- package/lib/blocks/iframebridge/IFrameBridge.js +26 -32
- package/lib/blocks/iframebridge/IFrameMessage.js +16 -8
- package/lib/blocks/iframebridge/SelectPreviewComponent.js +9 -15
- package/lib/blocks/iframebridge/useIFrameBridge.js +4 -10
- package/lib/blocks/image/EditImageDialog.js +66 -69
- package/lib/blocks/rte/extension/CmsLink/Decorator.js +4 -10
- package/lib/blocks/rte/extension/CmsLink/EditorComponent.js +3 -9
- package/lib/blocks/rte/extension/CmsLink/createCmsLinkToolbarButton.js +46 -52
- package/lib/blocks/seo/useSeoTagGeneration.generated.js +1 -7
- package/lib/blocks/seo/useSeoTagGeneration.js +24 -30
- package/lib/blocks/seo/useSitemapChangeFrequencyFormOptions.js +3 -9
- package/lib/blocks/seo/useSitemapPagePriorityFormOptions.js +3 -9
- package/lib/blocks/table/CellValue.js +12 -18
- package/lib/blocks/table/ColumnHeader.js +74 -80
- package/lib/blocks/table/EditCell.js +23 -29
- package/lib/blocks/table/FailedToPasteSnackbar.js +8 -14
- package/lib/blocks/table/RowActionsCell.js +58 -64
- package/lib/blocks/table/TableBlockContext.js +7 -13
- package/lib/blocks/table/TableBlockGrid.js +31 -35
- package/lib/blocks/table/__mocks__/TableBlockData.mocks.js +23 -29
- package/lib/blocks/table/dataGridStyles.js +1 -7
- package/lib/blocks/table/utils/column.js +19 -25
- package/lib/blocks/table/utils/ensureMinimumTableState.js +4 -10
- package/lib/blocks/table/utils/getClipboardValueForSchema.js +3 -9
- package/lib/blocks/table/utils/row.js +15 -21
- package/lib/blocks/table/utils/rteSchema.js +3 -9
- package/lib/blocks/table/utils/useRecentlyPastedIds.js +6 -12
- package/lib/blocks/types.js +19 -22
- package/lib/blocks/utils/parallelAsyncEvery.js +1 -7
- package/lib/blocks/utils.js +1 -7
- package/lib/blocks/validators/isValidUrl.js +1 -7
- package/lib/blocks.generated.js +1 -5
- package/lib/builds/BuildEntry.generated.js +1 -7
- package/lib/builds/BuildEntry.js +44 -50
- package/lib/builds/PublishButton.js +13 -19
- package/lib/builds/PublisherPage.generated.js +1 -7
- package/lib/builds/PublisherPage.js +33 -39
- package/lib/builds/StartBuildsDialog.generated.js +1 -7
- package/lib/builds/StartBuildsDialog.js +29 -33
- package/lib/common/DropdownMenuItem.js +22 -29
- package/lib/common/DropdownMenuItem.sc.d.ts +3 -9
- package/lib/common/DropdownMenuItem.sc.d.ts.map +1 -1
- package/lib/common/DropdownMenuItem.sc.js +10 -16
- package/lib/common/InsertInBetweenAction.js +9 -15
- package/lib/common/InsertInBetweenActionButton.js +8 -14
- package/lib/common/MarkedMatches.js +16 -23
- package/lib/common/MasterMenu.js +20 -27
- package/lib/common/MasterMenuRoutes.js +11 -18
- package/lib/common/PageList.d.ts +1 -0
- package/lib/common/PageList.d.ts.map +1 -1
- package/lib/common/PageList.js +22 -28
- package/lib/common/PageName.d.ts +1 -0
- package/lib/common/PageName.d.ts.map +1 -1
- package/lib/common/PageName.generated.js +1 -7
- package/lib/common/PageName.js +15 -21
- package/lib/common/SearchInput.js +24 -30
- package/lib/common/apollo/links/includeInvisibleContentContext.js +3 -8
- package/lib/common/errors/errorMessages.js +9 -15
- package/lib/common/header/Header.js +13 -18
- package/lib/common/header/ImpersonationInlay.js +22 -28
- package/lib/common/header/UserHeaderItem.js +58 -64
- package/lib/common/header/about/AboutModal.js +41 -46
- package/lib/common/header/about/build-information/buildInformation.js +1 -5
- package/lib/common/header/about/build-information/useBuildInformation.js +3 -9
- package/lib/common/image/ChooseFocalPoint.js +19 -25
- package/lib/common/image/ImageCrop.js +15 -23
- package/lib/common/image/ImageCrop.sc.js +10 -16
- package/lib/common/impersonation/commonImpersonationMessages.js +6 -12
- package/lib/common/signOutButton/SignOutButton.gql.d.ts +1 -1
- package/lib/common/signOutButton/SignOutButton.gql.d.ts.map +1 -1
- package/lib/common/signOutButton/SignOutButton.gql.generated.js +1 -7
- package/lib/common/signOutButton/SignOutButton.gql.js +2 -8
- package/lib/common/signOutButton/SignOutButton.js +13 -18
- package/lib/common/useEditState.js +10 -17
- package/lib/common/useSaveState.d.ts +1 -1
- package/lib/common/useSaveState.d.ts.map +1 -1
- package/lib/common/useSaveState.js +11 -17
- package/lib/config/CometConfigContext.js +11 -18
- package/lib/contentLanguage/contentLanguageConfig.js +3 -9
- package/lib/contentLanguage/useContentLanguage.js +3 -9
- package/lib/contentScope/ContentScopeIndicator.js +21 -27
- package/lib/contentScope/ContentScopeSelect.js +40 -47
- package/lib/contentScope/Controls.d.ts +1 -1
- package/lib/contentScope/Controls.d.ts.map +1 -1
- package/lib/contentScope/Controls.js +6 -12
- package/lib/contentScope/Provider.d.ts +1 -1
- package/lib/contentScope/Provider.d.ts.map +1 -1
- package/lib/contentScope/Provider.js +29 -37
- package/lib/contentScope/noContentScopeFallback/NoContentScopeFallback.js +30 -36
- package/lib/contentScope/useContentScopeConfig.js +5 -11
- package/lib/contentScope/utils/createPathFromDimensionValues.js +1 -7
- package/lib/contentScope/utils/defaultCreatePath.js +5 -10
- package/lib/contentScope/utils/groupObjectsIntoArrays.js +1 -7
- package/lib/cronJobs/CronJobsGrid.generated.js +1 -7
- package/lib/cronJobs/CronJobsGrid.js +51 -55
- package/lib/cronJobs/CronJobsPage.js +27 -33
- package/lib/cronJobs/JobLogs.generated.js +1 -7
- package/lib/cronJobs/JobLogs.js +19 -25
- package/lib/cronJobs/JobRuntime.js +11 -17
- package/lib/cronJobs/JobStatus.d.ts +1 -1
- package/lib/cronJobs/JobStatus.js +2 -8
- package/lib/cronJobs/JobsGrid.generated.js +1 -7
- package/lib/cronJobs/JobsGrid.js +35 -41
- package/lib/dam/CurrentDamFolderProvider.js +7 -14
- package/lib/dam/DamPage.js +21 -26
- package/lib/dam/DamTable.js +36 -44
- package/lib/dam/DataGrid/DamContextMenu.d.ts.map +1 -1
- package/lib/dam/DataGrid/DamContextMenu.generated.js +1 -7
- package/lib/dam/DataGrid/DamContextMenu.gql.d.ts +3 -3
- package/lib/dam/DataGrid/DamContextMenu.gql.d.ts.map +1 -1
- package/lib/dam/DataGrid/DamContextMenu.gql.generated.js +1 -7
- package/lib/dam/DataGrid/DamContextMenu.gql.js +4 -10
- package/lib/dam/DataGrid/DamContextMenu.js +70 -77
- package/lib/dam/DataGrid/FolderDataGrid.gql.d.ts +5 -5
- package/lib/dam/DataGrid/FolderDataGrid.gql.d.ts.map +1 -1
- package/lib/dam/DataGrid/FolderDataGrid.gql.generated.js +1 -7
- package/lib/dam/DataGrid/FolderDataGrid.gql.js +9 -15
- package/lib/dam/DataGrid/FolderDataGrid.js +101 -125
- package/lib/dam/DataGrid/FolderDataGrid.sc.js +8 -14
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.d.ts +1 -1
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.d.ts.map +1 -1
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.generated.js +1 -7
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.js +2 -8
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.js +20 -26
- package/lib/dam/DataGrid/duplicatedFilenames/ManuallyHandleDuplicatedFilenamesDialog.d.ts +2 -2
- package/lib/dam/DataGrid/duplicatedFilenames/ManuallyHandleDuplicatedFilenamesDialog.d.ts.map +1 -1
- package/lib/dam/DataGrid/duplicatedFilenames/ManuallyHandleDuplicatedFilenamesDialog.js +49 -53
- package/lib/dam/DataGrid/fileUpload/FileUploadContext.js +10 -16
- package/lib/dam/DataGrid/fileUpload/FileUploadErrorDialog.js +35 -39
- package/lib/dam/DataGrid/fileUpload/ProgressDialog.js +21 -25
- package/lib/dam/DataGrid/fileUpload/UploadFilesButton.js +18 -24
- package/lib/dam/DataGrid/fileUpload/fileUpload.utils.js +2 -10
- package/lib/dam/DataGrid/fileUpload/fileUploadErrorMessages.js +26 -32
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.d.ts +2 -2
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.d.ts.map +1 -1
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.generated.js +1 -7
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.js +3 -9
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.js +58 -64
- package/lib/dam/DataGrid/filter/DamSortPopover.js +28 -36
- package/lib/dam/DataGrid/filter/DamSortPopover.sc.d.ts +2 -4
- package/lib/dam/DataGrid/filter/DamSortPopover.sc.d.ts.map +1 -1
- package/lib/dam/DataGrid/filter/DamSortPopover.sc.js +8 -14
- package/lib/dam/DataGrid/filter/DamTableFilter.d.ts.map +1 -1
- package/lib/dam/DataGrid/filter/DamTableFilter.js +15 -22
- package/lib/dam/DataGrid/footer/DamFooter.js +6 -12
- package/lib/dam/DataGrid/footer/UploadFooter.js +13 -19
- package/lib/dam/DataGrid/label/DamItemLabel.js +19 -25
- package/lib/dam/DataGrid/label/DamItemLabelColumn.js +25 -32
- package/lib/dam/DataGrid/selection/DamMoreActions.js +38 -44
- package/lib/dam/DataGrid/selection/DamSelectionContext.generated.js +1 -7
- package/lib/dam/DataGrid/selection/DamSelectionContext.js +42 -48
- package/lib/dam/DataGrid/tags/ArchivedTag.js +8 -14
- package/lib/dam/DataGrid/tags/LicenseValidityTags.js +16 -22
- package/lib/dam/DataGrid/tags/Tag.d.ts +1 -1
- package/lib/dam/DataGrid/tags/Tag.js +2 -8
- package/lib/dam/DataGrid/thumbnail/AudioThumbnail.js +8 -14
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.d.ts +1 -1
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.d.ts.map +1 -1
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.generated.js +1 -7
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.js +2 -8
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.js +28 -41
- package/lib/dam/DataGrid/thumbnail/VideoThumbnail.js +8 -14
- package/lib/dam/DataGrid/useDamSearchHighlighting.js +5 -12
- package/lib/dam/FileActions/ConfirmDeleteDialog.js +28 -33
- package/lib/dam/FileActions/ConfirmDeleteDialog.sc.js +9 -15
- package/lib/dam/FileForm/CropSettingsFields.d.ts +1 -0
- package/lib/dam/FileForm/CropSettingsFields.d.ts.map +1 -1
- package/lib/dam/FileForm/CropSettingsFields.js +34 -40
- package/lib/dam/FileForm/Duplicates.generated.js +1 -7
- package/lib/dam/FileForm/Duplicates.js +37 -43
- package/lib/dam/FileForm/EditFile.gql.d.ts +3 -3
- package/lib/dam/FileForm/EditFile.gql.d.ts.map +1 -1
- package/lib/dam/FileForm/EditFile.gql.generated.d.ts +3 -0
- package/lib/dam/FileForm/EditFile.gql.generated.d.ts.map +1 -1
- package/lib/dam/FileForm/EditFile.gql.generated.js +1 -7
- package/lib/dam/FileForm/EditFile.gql.js +5 -11
- package/lib/dam/FileForm/EditFile.js +79 -86
- package/lib/dam/FileForm/FilePreview.d.ts.map +1 -1
- package/lib/dam/FileForm/FilePreview.gql.d.ts +3 -3
- package/lib/dam/FileForm/FilePreview.gql.d.ts.map +1 -1
- package/lib/dam/FileForm/FilePreview.gql.generated.js +1 -7
- package/lib/dam/FileForm/FilePreview.gql.js +4 -10
- package/lib/dam/FileForm/FilePreview.js +56 -64
- package/lib/dam/FileForm/FileSettingsFields.generated.js +1 -7
- package/lib/dam/FileForm/FileSettingsFields.gql.d.ts +2 -2
- package/lib/dam/FileForm/FileSettingsFields.gql.d.ts.map +1 -1
- package/lib/dam/FileForm/FileSettingsFields.gql.generated.js +1 -7
- package/lib/dam/FileForm/FileSettingsFields.gql.js +3 -9
- package/lib/dam/FileForm/FileSettingsFields.js +78 -84
- package/lib/dam/FileForm/ImageInfos.js +24 -30
- package/lib/dam/FileForm/ReplaceFileButton.js +30 -36
- package/lib/dam/FileForm/licenseType.js +6 -12
- package/lib/dam/FileForm/previews/AudioPreview.js +15 -21
- package/lib/dam/FileForm/previews/DefaultFilePreview.js +11 -17
- package/lib/dam/FileForm/previews/ImagePreview.d.ts +1 -0
- package/lib/dam/FileForm/previews/ImagePreview.d.ts.map +1 -1
- package/lib/dam/FileForm/previews/ImagePreview.js +4 -10
- package/lib/dam/FileForm/previews/PdfPreview.js +7 -13
- package/lib/dam/FileForm/previews/VideoPreview.generated.js +1 -7
- package/lib/dam/FileForm/previews/VideoPreview.js +15 -21
- package/lib/dam/FolderForm/AddFolder.gql.d.ts +1 -1
- package/lib/dam/FolderForm/AddFolder.gql.d.ts.map +1 -1
- package/lib/dam/FolderForm/AddFolder.gql.generated.js +1 -7
- package/lib/dam/FolderForm/AddFolder.gql.js +2 -8
- package/lib/dam/FolderForm/AddFolder.js +13 -19
- package/lib/dam/FolderForm/EditFolder.gql.d.ts +2 -2
- package/lib/dam/FolderForm/EditFolder.gql.d.ts.map +1 -1
- package/lib/dam/FolderForm/EditFolder.gql.generated.js +1 -7
- package/lib/dam/FolderForm/EditFolder.gql.js +3 -9
- package/lib/dam/FolderForm/EditFolder.js +11 -17
- package/lib/dam/FolderForm/FolderFormFields.js +7 -13
- package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.d.ts +1 -1
- package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.d.ts.map +1 -1
- package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.generated.js +1 -7
- package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.js +2 -8
- package/lib/dam/MoveDamItemDialog/ChooseFolder.js +30 -43
- package/lib/dam/MoveDamItemDialog/MoveDamItemDialog.js +44 -48
- package/lib/dam/MoveDamItemDialog/useFolderTree.js +11 -17
- package/lib/dam/MoveDamItemDialog/useFolderTreeSearch.js +14 -21
- package/lib/dam/blocks/DamFileDownloadLinkBlock.generated.js +1 -7
- package/lib/dam/blocks/DamFileDownloadLinkBlock.js +27 -33
- package/lib/dam/blocks/DamImageBlock.d.ts +1 -1
- package/lib/dam/blocks/DamImageBlock.d.ts.map +1 -1
- package/lib/dam/blocks/DamImageBlock.js +26 -31
- package/lib/dam/config/DamScopeContext.js +2 -8
- package/lib/dam/config/DamScopeProvider.js +8 -14
- package/lib/dam/config/damConfig.js +4 -11
- package/lib/dam/config/damDefaultAcceptedMimeTypes.js +1 -7
- package/lib/dam/config/useDamAcceptedMimeTypes.js +5 -11
- package/lib/dam/config/useDamScope.js +5 -10
- package/lib/dam/dependencies/createDamFileDependency.generated.js +1 -7
- package/lib/dam/dependencies/createDamFileDependency.js +8 -13
- package/lib/dam/helpers/clearDamItemCache.js +1 -7
- package/lib/dam/helpers/isFile.js +1 -7
- package/lib/dam/helpers/isFolder.js +1 -7
- package/lib/dam/helpers/slugifyFilename.js +3 -10
- package/lib/dam/mediaAlternatives/MediaAlternativeForm.generated.js +1 -7
- package/lib/dam/mediaAlternatives/MediaAlternativeForm.js +25 -31
- package/lib/dam/mediaAlternatives/MediaAlternativesGrid.d.ts +1 -1
- package/lib/dam/mediaAlternatives/MediaAlternativesGrid.d.ts.map +1 -1
- package/lib/dam/mediaAlternatives/MediaAlternativesGrid.generated.js +1 -7
- package/lib/dam/mediaAlternatives/MediaAlternativesGrid.js +44 -51
- package/lib/dashboard/DashboardHeader.js +12 -18
- package/lib/dashboard/DateTime.js +15 -21
- package/lib/dashboard/DefaultGreeting.js +6 -12
- package/lib/dashboard/widgets/DashboardWidgetRoot.js +8 -14
- package/lib/dashboard/widgets/LatestBuildsDashboardWidget.generated.js +1 -7
- package/lib/dashboard/widgets/LatestBuildsDashboardWidget.js +19 -25
- package/lib/dashboard/widgets/LatestContentUpdatesDashboardWidget.js +16 -22
- package/lib/dependencies/DependenciesList.d.ts +30 -0
- package/lib/dependencies/DependenciesList.d.ts.map +1 -0
- package/lib/dependencies/DependenciesList.js +282 -0
- package/lib/dependencies/DependentsList.d.ts +30 -0
- package/lib/dependencies/DependentsList.d.ts.map +1 -0
- package/lib/dependencies/{DependencyList.js → DependentsList.js} +190 -167
- package/lib/dependencies/createDependencyMethods.js +3 -9
- package/lib/dependencies/createDocumentDependencyMethods.js +3 -9
- package/lib/dependencies/dependenciesConfig.js +3 -9
- package/lib/dependencies/getDisplayNameString.d.ts +4 -0
- package/lib/dependencies/getDisplayNameString.d.ts.map +1 -0
- package/lib/dependencies/getDisplayNameString.js +12 -0
- package/lib/dependencies/types.js +1 -5
- package/lib/documents/ContentGenerationConfigContext.js +7 -13
- package/lib/documents/createDocumentRootBlocksMethods.js +1 -7
- package/lib/documents/types.js +1 -5
- package/lib/form/SyncFields.js +7 -13
- package/lib/form/file/DamPathLazy.generated.js +1 -7
- package/lib/form/file/DamPathLazy.js +7 -13
- package/lib/form/file/FileField.gql.d.ts +1 -1
- package/lib/form/file/FileField.gql.d.ts.map +1 -1
- package/lib/form/file/FileField.gql.generated.js +1 -7
- package/lib/form/file/FileField.gql.js +3 -9
- package/lib/form/file/FileField.js +53 -58
- package/lib/form/file/FileUploadField.js +6 -12
- package/lib/form/file/FinalFormFileUpload.d.ts +2 -2
- package/lib/form/file/FinalFormFileUpload.d.ts.map +1 -1
- package/lib/form/file/FinalFormFileUpload.generated.js +1 -7
- package/lib/form/file/FinalFormFileUpload.js +20 -26
- package/lib/form/file/chooseFile/ChooseFileDialog.js +28 -35
- package/lib/form/file/chooseFile/RedirectToPersistedDamLocation.js +12 -18
- package/lib/form/file/upload.js +3 -11
- package/lib/form/queryUpdatedAt.js +3 -9
- package/lib/form/serializeInitialValues.js +1 -7
- package/lib/form/useFormSaveConflict.d.ts +2 -2
- package/lib/form/useFormSaveConflict.d.ts.map +1 -1
- package/lib/form/useFormSaveConflict.js +3 -9
- package/lib/graphql.generated.d.ts +27 -3
- package/lib/graphql.generated.d.ts.map +1 -1
- package/lib/graphql.generated.js +1 -5
- package/lib/index.d.ts +3 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +144 -1128
- package/lib/pages/LocalPageTreeNodeDocumentAnchors.js +7 -13
- package/lib/pages/SaveConflictDialog.js +54 -57
- package/lib/pages/config/usePageTreeScope.js +5 -11
- package/lib/pages/createEditPageNode.d.ts +1 -1
- package/lib/pages/createEditPageNode.d.ts.map +1 -1
- package/lib/pages/createEditPageNode.generated.js +1 -7
- package/lib/pages/createEditPageNode.js +83 -90
- package/lib/pages/createUsePage.d.ts +1 -1
- package/lib/pages/createUsePage.d.ts.map +1 -1
- package/lib/pages/createUsePage.generated.js +1 -7
- package/lib/pages/createUsePage.js +46 -45
- package/lib/pages/pageSearch/PageSearch.js +4 -10
- package/lib/pages/pageSearch/usePageSearch.d.ts +1 -1
- package/lib/pages/pageSearch/usePageSearch.d.ts.map +1 -1
- package/lib/pages/pageSearch/usePageSearch.generated.js +1 -7
- package/lib/pages/pageSearch/usePageSearch.js +16 -22
- package/lib/pages/pageTree/CopyPasteMenuItem.js +19 -25
- package/lib/pages/pageTree/MovePageMenuItem.generated.js +1 -7
- package/lib/pages/pageTree/MovePageMenuItem.js +17 -23
- package/lib/pages/pageTree/Page.d.ts +1 -1
- package/lib/pages/pageTree/Page.d.ts.map +1 -1
- package/lib/pages/pageTree/Page.generated.js +1 -7
- package/lib/pages/pageTree/Page.js +2 -8
- package/lib/pages/pageTree/PageActions.js +54 -60
- package/lib/pages/pageTree/PageDeleteDialog.js +56 -58
- package/lib/pages/pageTree/PageDeleteDialog.sc.d.ts +1 -3
- package/lib/pages/pageTree/PageDeleteDialog.sc.d.ts.map +1 -1
- package/lib/pages/pageTree/PageDeleteDialog.sc.js +8 -14
- package/lib/pages/pageTree/PageInfo.js +13 -19
- package/lib/pages/pageTree/PageLabel.js +25 -31
- package/lib/pages/pageTree/PageTree.generated.js +1 -7
- package/lib/pages/pageTree/PageTree.js +52 -58
- package/lib/pages/pageTree/PageTreeContext.js +2 -8
- package/lib/pages/pageTree/PageTreeDragLayer.js +13 -22
- package/lib/pages/pageTree/PageTreeDragLayer.sc.d.ts +2 -2
- package/lib/pages/pageTree/PageTreeDragLayer.sc.d.ts.map +1 -1
- package/lib/pages/pageTree/PageTreeDragLayer.sc.js +3 -9
- package/lib/pages/pageTree/PageTreeRow.js +54 -63
- package/lib/pages/pageTree/PageTreeRow.sc.js +9 -15
- package/lib/pages/pageTree/PageTreeRowDivider.js +12 -18
- package/lib/pages/pageTree/PageTreeService.js +2 -7
- package/lib/pages/pageTree/PageTypeIcon.d.ts +1 -0
- package/lib/pages/pageTree/PageTypeIcon.d.ts.map +1 -1
- package/lib/pages/pageTree/PageTypeIcon.js +8 -14
- package/lib/pages/pageTree/PageVisibility.d.ts +1 -1
- package/lib/pages/pageTree/PageVisibility.d.ts.map +1 -1
- package/lib/pages/pageTree/PageVisibility.generated.js +1 -7
- package/lib/pages/pageTree/PageVisibility.js +37 -43
- package/lib/pages/pageTree/PageVisibilityIcon.d.ts +1 -0
- package/lib/pages/pageTree/PageVisibilityIcon.d.ts.map +1 -1
- package/lib/pages/pageTree/PageVisibilityIcon.js +6 -12
- package/lib/pages/pageTree/common/PageTreeTableRow.d.ts +1 -1
- package/lib/pages/pageTree/common/PageTreeTableRow.d.ts.map +1 -1
- package/lib/pages/pageTree/common/PageTreeTableRow.js +18 -24
- package/lib/pages/pageTree/treemap/TreeMapUtils.js +9 -14
- package/lib/pages/pageTree/useButtonHoverStates.js +4 -10
- package/lib/pages/pageTree/useCopyPastePages/ProgressDialog.js +26 -30
- package/lib/pages/pageTree/useCopyPastePages/createInboxFolder.generated.js +1 -7
- package/lib/pages/pageTree/useCopyPastePages/createInboxFolder.js +7 -13
- package/lib/pages/pageTree/useCopyPastePages/sendPages.generated.js +1 -7
- package/lib/pages/pageTree/useCopyPastePages/sendPages.js +33 -39
- package/lib/pages/pageTree/useCopyPastePages.js +38 -43
- package/lib/pages/pageTree/useDndWindowScroll/ScrollManager.js +3 -8
- package/lib/pages/pageTree/useDndWindowScroll/useAnimationFrame.js +6 -11
- package/lib/pages/pageTree/useDndWindowScroll/useDndWindowScroll.d.ts +1 -1
- package/lib/pages/pageTree/useDndWindowScroll/useDndWindowScroll.d.ts.map +1 -1
- package/lib/pages/pageTree/useDndWindowScroll/useDndWindowScroll.js +12 -19
- package/lib/pages/pageTree/usePageTree.d.ts +1 -1
- package/lib/pages/pageTree/usePageTree.d.ts.map +1 -1
- package/lib/pages/pageTree/usePageTree.generated.js +1 -7
- package/lib/pages/pageTree/usePageTree.js +17 -24
- package/lib/pages/pageTree/usePageTreeContext.js +4 -10
- package/lib/pages/pageTreeConfig.js +3 -9
- package/lib/pages/pageTreeSelect/FinalFormPageTreeSelect.d.ts +1 -0
- package/lib/pages/pageTreeSelect/FinalFormPageTreeSelect.d.ts.map +1 -1
- package/lib/pages/pageTreeSelect/FinalFormPageTreeSelect.js +4 -11
- package/lib/pages/pageTreeSelect/PageTreeSelect.generated.js +1 -7
- package/lib/pages/pageTreeSelect/PageTreeSelect.js +20 -27
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.d.ts +2 -1
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.d.ts.map +1 -1
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.generated.js +1 -7
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.js +88 -96
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.sc.js +6 -12
- package/lib/pages/pagesPage/ConfirmPageActionDialog.js +23 -27
- package/lib/pages/pagesPage/PageCanNotDeleteDialog.js +15 -19
- package/lib/pages/pagesPage/PagesPage.js +80 -86
- package/lib/pages/pagesPage/PagesPageActionToolbar.js +97 -103
- package/lib/pages/pagesPage/PagesPageActionToolbar.sc.d.ts +4 -8
- package/lib/pages/pagesPage/PagesPageActionToolbar.sc.d.ts.map +1 -1
- package/lib/pages/pagesPage/PagesPageActionToolbar.sc.js +6 -12
- package/lib/pages/pagesPage/PagesPageActionToolbarBatchUpdateHelper.js +5 -11
- package/lib/pages/pagesPage/areAllSubTreesFullSelected.js +4 -10
- package/lib/pages/pagesPage/createPagesQuery.generated.js +1 -7
- package/lib/pages/pagesPage/createPagesQuery.js +6 -12
- package/lib/pages/resolveHasSaveConflict.js +5 -11
- package/lib/pages/usePageTreeDocumentAnchors.generated.js +1 -7
- package/lib/pages/usePageTreeDocumentAnchors.js +10 -14
- package/lib/pages/useSaveConflict.js +20 -26
- package/lib/pages/useSaveConflictQuery.js +7 -13
- package/lib/preview/block/BlockPreview.generated.js +1 -7
- package/lib/preview/block/BlockPreview.js +33 -38
- package/lib/preview/block/BlockPreviewWithTabs.js +10 -15
- package/lib/preview/block/SplitPreview.js +22 -27
- package/lib/preview/block/SplitPreview.sc.js +12 -19
- package/lib/preview/block/useBlockPreview.js +7 -12
- package/lib/preview/common/Device.js +3 -8
- package/lib/preview/common/DeviceToggle.js +22 -27
- package/lib/preview/common/IFrameViewer.js +24 -30
- package/lib/preview/common/ToggleButton.d.ts +1 -3
- package/lib/preview/common/ToggleButton.d.ts.map +1 -1
- package/lib/preview/common/ToggleButton.js +5 -10
- package/lib/preview/common/VisibilityToggle.js +9 -14
- package/lib/preview/openSitePreviewWindow.js +2 -8
- package/lib/preview/site/OpenLinkDialog.js +31 -33
- package/lib/preview/site/SitePreview.generated.js +1 -7
- package/lib/preview/site/SitePreview.js +58 -61
- package/lib/preview/site/SitePreview.sc.d.ts +1 -3
- package/lib/preview/site/SitePreview.sc.d.ts.map +1 -1
- package/lib/preview/site/SitePreview.sc.js +8 -14
- package/lib/preview/site/iframebridge/SitePreviewIFrameMessage.js +3 -7
- package/lib/preview/site/iframebridge/useSitePreviewIFrameBridge.js +5 -11
- package/lib/redirects/RedirectActiveness.d.ts +2 -1
- package/lib/redirects/RedirectActiveness.d.ts.map +1 -1
- package/lib/redirects/RedirectActiveness.generated.js +1 -7
- package/lib/redirects/RedirectActiveness.js +26 -32
- package/lib/redirects/RedirectForm.d.ts +1 -0
- package/lib/redirects/RedirectForm.d.ts.map +1 -1
- package/lib/redirects/RedirectForm.generated.js +1 -7
- package/lib/redirects/RedirectForm.gql.d.ts +3 -3
- package/lib/redirects/RedirectForm.gql.d.ts.map +1 -1
- package/lib/redirects/RedirectForm.gql.generated.js +1 -7
- package/lib/redirects/RedirectForm.gql.js +5 -11
- package/lib/redirects/RedirectForm.js +64 -65
- package/lib/redirects/RedirectsGrid.d.ts +1 -0
- package/lib/redirects/RedirectsGrid.d.ts.map +1 -1
- package/lib/redirects/RedirectsGrid.gql.d.ts +2 -2
- package/lib/redirects/RedirectsGrid.gql.d.ts.map +1 -1
- package/lib/redirects/RedirectsGrid.gql.generated.js +1 -7
- package/lib/redirects/RedirectsGrid.gql.js +6 -11
- package/lib/redirects/RedirectsGrid.js +48 -55
- package/lib/redirects/createRedirectsPage.d.ts +1 -1
- package/lib/redirects/createRedirectsPage.d.ts.map +1 -1
- package/lib/redirects/createRedirectsPage.js +37 -43
- package/lib/redirects/redirectsConfig.js +5 -11
- package/lib/redirects/submitMutation.js +5 -11
- package/lib/siteConfigs/siteConfigsConfig.js +1 -5
- package/lib/siteConfigs/useSiteConfig.js +3 -9
- package/lib/siteConfigs/useSiteConfigs.js +3 -9
- package/lib/testing/test-utils.js +15 -32
- package/lib/translation/AzureAiTranslatorProvider.generated.js +1 -7
- package/lib/translation/AzureAiTranslatorProvider.js +11 -17
- package/lib/userPermissions/ImpersonateMenuItem.generated.js +1 -7
- package/lib/userPermissions/ImpersonateMenuItem.js +27 -33
- package/lib/userPermissions/UserGrid.generated.js +1 -7
- package/lib/userPermissions/UserGrid.js +45 -51
- package/lib/userPermissions/UserPermissionsPage.js +42 -48
- package/lib/userPermissions/hooks/currentUser.generated.js +1 -7
- package/lib/userPermissions/hooks/currentUser.js +21 -27
- package/lib/userPermissions/user/ImpersonationButtons.js +18 -24
- package/lib/userPermissions/user/UserPageToolbar.generated.js +1 -7
- package/lib/userPermissions/user/UserPageToolbar.js +29 -35
- package/lib/userPermissions/user/basicData/UserBasicData.generated.js +1 -7
- package/lib/userPermissions/user/basicData/UserBasicData.js +23 -29
- package/lib/userPermissions/user/permissions/ContentScopeGrid.generated.js +1 -7
- package/lib/userPermissions/user/permissions/ContentScopeGrid.js +38 -44
- package/lib/userPermissions/user/permissions/OverrideContentScopesDialog.generated.js +1 -7
- package/lib/userPermissions/user/permissions/OverrideContentScopesDialog.js +34 -38
- package/lib/userPermissions/user/permissions/PermissionDialog.d.ts.map +1 -1
- package/lib/userPermissions/user/permissions/PermissionDialog.generated.js +1 -7
- package/lib/userPermissions/user/permissions/PermissionDialog.js +50 -54
- package/lib/userPermissions/user/permissions/PermissionGrid.generated.js +1 -7
- package/lib/userPermissions/user/permissions/PermissionGrid.js +48 -54
- package/lib/userPermissions/user/permissions/PermissionsPanel.js +9 -15
- package/lib/userPermissions/user/permissions/selectScopesDialogContent/SelectScopesDialogContent.generated.js +1 -7
- package/lib/userPermissions/user/permissions/selectScopesDialogContent/SelectScopesDialogContent.js +19 -26
- package/lib/userPermissions/utils/camelCaseToHumanReadable.js +1 -7
- package/lib/userPermissions/utils/handleImpersonation.js +5 -12
- package/lib/validation/isLinkTarget.js +6 -12
- package/lib/validation/isPhoneNumber.js +1 -7
- package/lib/validation/validateLinkTarget.js +6 -12
- package/lib/validation/validatePhoneNumber.js +6 -12
- package/lib/validation/validateUrl.js +6 -12
- package/lib/vendors.d.js +1 -5
- package/lib/warnings/LatestWarningsDashboardWidget.generated.js +1 -7
- package/lib/warnings/LatestWarningsDashboardWidget.js +27 -33
- package/lib/warnings/WarningActions.js +25 -31
- package/lib/warnings/WarningMessage.d.ts +1 -1
- package/lib/warnings/WarningMessage.d.ts.map +1 -1
- package/lib/warnings/WarningMessage.js +1 -7
- package/lib/warnings/WarningSeverity.js +9 -15
- package/lib/warnings/WarningsGrid.generated.js +1 -7
- package/lib/warnings/WarningsGrid.js +45 -52
- package/lib/warnings/WarningsPage.js +11 -17
- package/lib/warnings/warningMessages.js +10 -16
- package/lib/warnings/warningsConfig.js +5 -11
- package/package.json +25 -26
- package/lib/dependencies/DependencyList.d.ts +0 -29
- package/lib/dependencies/DependencyList.d.ts.map +0 -1
- package/lib/dependencies/DependencyList.sc.d.ts +0 -11
- package/lib/dependencies/DependencyList.sc.d.ts.map +0 -1
- package/lib/dependencies/DependencyList.sc.js +0 -79
- package/lib/http/createHttpClient.d.ts +0 -3
- package/lib/http/createHttpClient.d.ts.map +0 -1
- package/lib/http/createHttpClient.js +0 -43
|
@@ -1,35 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.createBlocksBlock = createBlocksBlock;
|
|
8
|
-
var _admin = require("@comet/admin");
|
|
9
|
-
var _adminIcons = require("@comet/admin-icons");
|
|
10
|
-
var _material = require("@mui/material");
|
|
11
|
-
var _styles = require("@mui/material/styles");
|
|
12
|
-
var _react = require("react");
|
|
13
|
-
var _reactIntl = require("react-intl");
|
|
14
|
-
var _uuid = require("uuid");
|
|
15
|
-
var _Provider = require("../../contentScope/Provider");
|
|
16
|
-
var _CannotPasteBlockDialog = require("../clipboard/CannotPasteBlockDialog");
|
|
17
|
-
var _useBlockClipboard2 = require("../clipboard/useBlockClipboard");
|
|
18
|
-
var _AddBlockDrawer = require("../common/AddBlockDrawer");
|
|
19
|
-
var _AdminComponentStickyFooter = require("../common/AdminComponentStickyFooter");
|
|
20
|
-
var _AdminComponentStickyHeader = require("../common/AdminComponentStickyHeader");
|
|
21
|
-
var _BlockAdminComponentButton = require("../common/BlockAdminComponentButton");
|
|
22
|
-
var _BlockAdminComponentPaper = require("../common/BlockAdminComponentPaper");
|
|
23
|
-
var _BlockPreviewContent = require("../common/blockRow/BlockPreviewContent");
|
|
24
|
-
var _BlockRow = require("../common/blockRow/BlockRow");
|
|
25
|
-
var _BlocksConfigContext = require("../config/BlocksConfigContext");
|
|
26
|
-
var _createBlockSkeleton = require("../helpers/createBlockSkeleton");
|
|
27
|
-
var _deduplicateBlockDependencies = require("../helpers/deduplicateBlockDependencies");
|
|
28
|
-
var _HoverPreviewComponent = require("../iframebridge/HoverPreviewComponent");
|
|
29
|
-
var _SelectPreviewComponent = require("../iframebridge/SelectPreviewComponent");
|
|
30
|
-
var _utils = require("../utils");
|
|
31
|
-
var _parallelAsyncEvery = require("../utils/parallelAsyncEvery");
|
|
32
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
33
2
|
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
34
3
|
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
35
4
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
@@ -50,13 +19,40 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
|
|
|
50
19
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
51
20
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
52
21
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
53
|
-
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
22
|
+
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
23
|
+
import { RowActionsItem, RowActionsMenu, StackPage, StackPageTitle, StackSwitch, StackSwitchApiContext, Tooltip, UndoSnackbar, useSnackbarApi } from "@comet/admin";
|
|
24
|
+
import { Add, Copy, Delete, Invisible, Paste, Visible } from "@comet/admin-icons";
|
|
25
|
+
import { Box, Checkbox, FormControlLabel, IconButton, Typography } from "@mui/material";
|
|
26
|
+
import { styled } from "@mui/material/styles";
|
|
27
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
28
|
+
import { FormattedMessage } from "react-intl";
|
|
29
|
+
import { v4 as uuid } from "uuid";
|
|
30
|
+
import { useContentScope } from "../../contentScope/Provider";
|
|
31
|
+
import { CannotPasteBlockDialog } from "../clipboard/CannotPasteBlockDialog";
|
|
32
|
+
import { useBlockClipboard } from "../clipboard/useBlockClipboard";
|
|
33
|
+
import { AddBlockDrawer } from "../common/AddBlockDrawer";
|
|
34
|
+
import { AdminComponentStickyFooter } from "../common/AdminComponentStickyFooter";
|
|
35
|
+
import { AdminComponentStickyHeader } from "../common/AdminComponentStickyHeader";
|
|
36
|
+
import { BlockAdminComponentButton } from "../common/BlockAdminComponentButton";
|
|
37
|
+
import { BlockAdminComponentPaper } from "../common/BlockAdminComponentPaper";
|
|
38
|
+
import { BlockPreviewContent } from "../common/blockRow/BlockPreviewContent";
|
|
39
|
+
import { BlockRow } from "../common/blockRow/BlockRow";
|
|
40
|
+
import { useBlocksConfig } from "../config/BlocksConfigContext";
|
|
41
|
+
import { createBlockSkeleton } from "../helpers/createBlockSkeleton";
|
|
42
|
+
import { deduplicateBlockDependencies } from "../helpers/deduplicateBlockDependencies";
|
|
43
|
+
import { HoverPreviewComponent } from "../iframebridge/HoverPreviewComponent";
|
|
44
|
+
import { SelectPreviewComponent } from "../iframebridge/SelectPreviewComponent";
|
|
45
|
+
import { resolveNewState } from "../utils";
|
|
46
|
+
import { parallelAsyncEvery } from "../utils/parallelAsyncEvery";
|
|
47
|
+
|
|
48
|
+
// Using {} instead of Record<string, never> because never and unknown are incompatible.
|
|
54
49
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
55
|
-
|
|
50
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
51
|
+
export function createBlocksBlock(_ref, override) {
|
|
56
52
|
var supportedBlocks = _ref.supportedBlocks,
|
|
57
53
|
name = _ref.name,
|
|
58
54
|
_ref$displayName = _ref.displayName,
|
|
59
|
-
displayName = _ref$displayName === void 0 ? /*#__PURE__*/(
|
|
55
|
+
displayName = _ref$displayName === void 0 ? /*#__PURE__*/_jsx(FormattedMessage, {
|
|
60
56
|
id: "comet.blocks.blocks.name",
|
|
61
57
|
defaultMessage: "Blocks"
|
|
62
58
|
}) : _ref$displayName,
|
|
@@ -89,7 +85,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
89
85
|
}
|
|
90
86
|
return acc;
|
|
91
87
|
}, []);
|
|
92
|
-
var BlocksBlock = _objectSpread(_objectSpread({},
|
|
88
|
+
var BlocksBlock = _objectSpread(_objectSpread({}, createBlockSkeleton()), {}, {
|
|
93
89
|
name: name,
|
|
94
90
|
displayName: displayName,
|
|
95
91
|
tags: tags ? tags : childTags,
|
|
@@ -248,7 +244,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
248
244
|
return _regenerator().w(function (_context3) {
|
|
249
245
|
while (1) switch (_context3.n) {
|
|
250
246
|
case 0:
|
|
251
|
-
return _context3.a(2,
|
|
247
|
+
return _context3.a(2, parallelAsyncEvery(state.blocks, /*#__PURE__*/function () {
|
|
252
248
|
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(c) {
|
|
253
249
|
var block;
|
|
254
250
|
return _regenerator().w(function (_context2) {
|
|
@@ -299,7 +295,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
299
295
|
}
|
|
300
296
|
return [].concat(_toConsumableArray(dependencies), _toConsumableArray((_block$dependencies = (_block$dependencies2 = block.dependencies) === null || _block$dependencies2 === void 0 ? void 0 : _block$dependencies2.call(block, child.props)) !== null && _block$dependencies !== void 0 ? _block$dependencies : []));
|
|
301
297
|
}, []);
|
|
302
|
-
return
|
|
298
|
+
return deduplicateBlockDependencies(mergedDependencies);
|
|
303
299
|
},
|
|
304
300
|
replaceDependenciesInOutput: function replaceDependenciesInOutput(output, replacements) {
|
|
305
301
|
var newOutput = {
|
|
@@ -329,7 +325,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
329
325
|
AdminComponent: function AdminComponent(_ref5) {
|
|
330
326
|
var state = _ref5.state,
|
|
331
327
|
updateState = _ref5.updateState;
|
|
332
|
-
var toggleVisible =
|
|
328
|
+
var toggleVisible = useCallback(function (blockKey) {
|
|
333
329
|
updateState(function (prevState) {
|
|
334
330
|
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
335
331
|
blocks: prevState.blocks.map(function (c) {
|
|
@@ -340,23 +336,23 @@ function createBlocksBlock(_ref, override) {
|
|
|
340
336
|
});
|
|
341
337
|
});
|
|
342
338
|
}, [updateState]);
|
|
343
|
-
var _useState =
|
|
339
|
+
var _useState = useState(false),
|
|
344
340
|
_useState2 = _slicedToArray(_useState, 2),
|
|
345
341
|
showAddBlockDrawer = _useState2[0],
|
|
346
342
|
setShowAddBlockDrawer = _useState2[1];
|
|
347
|
-
var _useState3 =
|
|
343
|
+
var _useState3 = useState(),
|
|
348
344
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
349
345
|
beforeIndex = _useState4[0],
|
|
350
346
|
setBeforeIndex = _useState4[1];
|
|
351
|
-
var _useState5 =
|
|
347
|
+
var _useState5 = useState(),
|
|
352
348
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
353
349
|
cannotPasteBlockError = _useState6[0],
|
|
354
350
|
setCannotPasteBlockError = _useState6[1];
|
|
355
|
-
var snackbarApi =
|
|
351
|
+
var snackbarApi = useSnackbarApi();
|
|
356
352
|
var totalVisibleBlocks = state.blocks.filter(function (block) {
|
|
357
353
|
return block.visible;
|
|
358
354
|
}).length;
|
|
359
|
-
|
|
355
|
+
useEffect(function () {
|
|
360
356
|
if (state.blocks.some(function (block) {
|
|
361
357
|
return block.slideIn;
|
|
362
358
|
})) {
|
|
@@ -376,7 +372,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
376
372
|
};
|
|
377
373
|
}
|
|
378
374
|
}, [state.blocks, updateState]);
|
|
379
|
-
var handleUndoClick =
|
|
375
|
+
var handleUndoClick = useCallback(function (removedBlocks) {
|
|
380
376
|
if (!removedBlocks) {
|
|
381
377
|
return;
|
|
382
378
|
}
|
|
@@ -393,7 +389,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
393
389
|
});
|
|
394
390
|
});
|
|
395
391
|
}, [updateState]);
|
|
396
|
-
var deleteBlocks =
|
|
392
|
+
var deleteBlocks = useCallback(function (blockKeys) {
|
|
397
393
|
updateState(function (prevState) {
|
|
398
394
|
var blocksToRemove = prevState.blocks.map(function (block, index) {
|
|
399
395
|
return _objectSpread(_objectSpread({}, block), {}, {
|
|
@@ -402,8 +398,8 @@ function createBlocksBlock(_ref, override) {
|
|
|
402
398
|
}).filter(function (block) {
|
|
403
399
|
return blockKeys.includes(block.key);
|
|
404
400
|
});
|
|
405
|
-
snackbarApi.showSnackbar(/*#__PURE__*/(
|
|
406
|
-
message: /*#__PURE__*/(
|
|
401
|
+
snackbarApi.showSnackbar(/*#__PURE__*/_jsx(UndoSnackbar, {
|
|
402
|
+
message: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
407
403
|
id: "comet.blocks.list.blockDeleted",
|
|
408
404
|
defaultMessage: "{count, plural, one {block} other {# blocks}} deleted",
|
|
409
405
|
values: {
|
|
@@ -445,7 +441,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
445
441
|
}));
|
|
446
442
|
};
|
|
447
443
|
var addNewBlock = function addNewBlock(type, beforeIndex) {
|
|
448
|
-
var key = (
|
|
444
|
+
var key = uuid();
|
|
449
445
|
var block = blockForType(type);
|
|
450
446
|
if (!block) {
|
|
451
447
|
throw new Error("No Block found for type ".concat(type));
|
|
@@ -476,13 +472,13 @@ function createBlocksBlock(_ref, override) {
|
|
|
476
472
|
});
|
|
477
473
|
return key;
|
|
478
474
|
};
|
|
479
|
-
var createUpdateSubBlocksFn =
|
|
475
|
+
var createUpdateSubBlocksFn = useCallback(function (blockKey) {
|
|
480
476
|
var updateSubBlocksFn = function updateSubBlocksFn(setStateAction) {
|
|
481
477
|
updateState(function (prevState) {
|
|
482
478
|
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
483
479
|
blocks: prevState.blocks.map(function (c) {
|
|
484
480
|
return c.key === blockKey ? _objectSpread(_objectSpread({}, c), {}, {
|
|
485
|
-
props:
|
|
481
|
+
props: resolveNewState({
|
|
486
482
|
prevState: c.props,
|
|
487
483
|
setStateAction: setStateAction
|
|
488
484
|
})
|
|
@@ -493,11 +489,11 @@ function createBlocksBlock(_ref, override) {
|
|
|
493
489
|
};
|
|
494
490
|
return updateSubBlocksFn;
|
|
495
491
|
}, [updateState]);
|
|
496
|
-
var _useContentScope =
|
|
492
|
+
var _useContentScope = useContentScope(),
|
|
497
493
|
scope = _useContentScope.scope;
|
|
498
|
-
var _useBlocksConfig =
|
|
494
|
+
var _useBlocksConfig = useBlocksConfig(),
|
|
499
495
|
isBlockSupported = _useBlocksConfig.isBlockSupported;
|
|
500
|
-
var filteredSupportedBlocks =
|
|
496
|
+
var filteredSupportedBlocks = useMemo(function () {
|
|
501
497
|
if (isBlockSupported) {
|
|
502
498
|
return Object.fromEntries(Object.entries(supportedBlocks).filter(function (_ref8) {
|
|
503
499
|
var _ref9 = _slicedToArray(_ref8, 2),
|
|
@@ -508,7 +504,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
508
504
|
return supportedBlocks;
|
|
509
505
|
}
|
|
510
506
|
}, [scope, isBlockSupported]);
|
|
511
|
-
var _useBlockClipboard =
|
|
507
|
+
var _useBlockClipboard = useBlockClipboard({
|
|
512
508
|
supports: Object.values(filteredSupportedBlocks)
|
|
513
509
|
}),
|
|
514
510
|
updateClipboardContent = _useBlockClipboard.updateClipboardContent,
|
|
@@ -542,7 +538,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
542
538
|
throw new Error("No type found for block \"".concat(block.name, "\""));
|
|
543
539
|
}
|
|
544
540
|
return _objectSpread({
|
|
545
|
-
key: (
|
|
541
|
+
key: uuid(),
|
|
546
542
|
type: type,
|
|
547
543
|
selected: false,
|
|
548
544
|
visible: canAddVisibleBlock ? block.visible : false,
|
|
@@ -620,74 +616,74 @@ function createBlocksBlock(_ref, override) {
|
|
|
620
616
|
var selectedCount = state.blocks.filter(function (block) {
|
|
621
617
|
return block.selected;
|
|
622
618
|
}).length;
|
|
623
|
-
return /*#__PURE__*/(
|
|
624
|
-
children: [/*#__PURE__*/(
|
|
619
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
620
|
+
children: [/*#__PURE__*/_jsxs(StackSwitch, {
|
|
625
621
|
disableForcePromptRoute: true,
|
|
626
|
-
children: [/*#__PURE__*/(
|
|
622
|
+
children: [/*#__PURE__*/_jsx(StackPage, {
|
|
627
623
|
name: "main",
|
|
628
|
-
children: /*#__PURE__*/(
|
|
624
|
+
children: /*#__PURE__*/_jsx(StackSwitchApiContext.Consumer, {
|
|
629
625
|
children: function children(stackApi) {
|
|
630
|
-
return /*#__PURE__*/(
|
|
631
|
-
children: [/*#__PURE__*/(
|
|
626
|
+
return /*#__PURE__*/_jsxs(SelectPreviewComponent, {
|
|
627
|
+
children: [/*#__PURE__*/_jsxs(BlockAdminComponentPaper, {
|
|
632
628
|
disablePadding: true,
|
|
633
|
-
children: [/*#__PURE__*/(
|
|
634
|
-
children: /*#__PURE__*/(
|
|
635
|
-
children: [state.blocks.length ? /*#__PURE__*/(
|
|
636
|
-
control: /*#__PURE__*/(
|
|
629
|
+
children: [/*#__PURE__*/_jsx(AdminComponentStickyHeader, {
|
|
630
|
+
children: /*#__PURE__*/_jsxs(BlockListHeader, {
|
|
631
|
+
children: [state.blocks.length ? /*#__PURE__*/_jsx(SelectAllFromControlLabel, {
|
|
632
|
+
control: /*#__PURE__*/_jsx(Checkbox, {
|
|
637
633
|
checked: selectedCount === state.blocks.length && selectedCount > 0,
|
|
638
634
|
indeterminate: selectedCount > 0 && selectedCount !== state.blocks.length,
|
|
639
635
|
onChange: handleToggleSelectAll
|
|
640
636
|
}),
|
|
641
|
-
label: /*#__PURE__*/(
|
|
637
|
+
label: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
642
638
|
id: "comet.blocks.list.selectAll",
|
|
643
639
|
defaultMessage: "Select all"
|
|
644
640
|
})
|
|
645
|
-
}) : /*#__PURE__*/(
|
|
646
|
-
children: /*#__PURE__*/(
|
|
647
|
-
children: [!maxVisibleBlocks && /*#__PURE__*/(
|
|
648
|
-
children: [/*#__PURE__*/(
|
|
649
|
-
icon: /*#__PURE__*/(
|
|
641
|
+
}) : /*#__PURE__*/_jsx("div", {}), /*#__PURE__*/_jsx(BlockListHeaderActionContainer, {
|
|
642
|
+
children: /*#__PURE__*/_jsxs(RowActionsMenu, {
|
|
643
|
+
children: [!maxVisibleBlocks && /*#__PURE__*/_jsxs(_Fragment, {
|
|
644
|
+
children: [/*#__PURE__*/_jsx(RowActionsItem, {
|
|
645
|
+
icon: /*#__PURE__*/_jsx(Visible, {}),
|
|
650
646
|
disabled: selectedCount === 0,
|
|
651
647
|
onClick: function onClick() {
|
|
652
648
|
return handleToggleVisibilityOfAllSelectedBlocks(true);
|
|
653
649
|
},
|
|
654
|
-
children: /*#__PURE__*/(
|
|
650
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
655
651
|
id: "comet.blocks.list.action.visible",
|
|
656
652
|
defaultMessage: "Make visible"
|
|
657
653
|
})
|
|
658
|
-
}), /*#__PURE__*/(
|
|
659
|
-
icon: /*#__PURE__*/(
|
|
654
|
+
}), /*#__PURE__*/_jsx(RowActionsItem, {
|
|
655
|
+
icon: /*#__PURE__*/_jsx(Invisible, {}),
|
|
660
656
|
disabled: selectedCount === 0,
|
|
661
657
|
onClick: function onClick() {
|
|
662
658
|
return handleToggleVisibilityOfAllSelectedBlocks();
|
|
663
659
|
},
|
|
664
|
-
children: /*#__PURE__*/(
|
|
660
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
665
661
|
id: "comet.blocks.list.action.invisible",
|
|
666
662
|
defaultMessage: "Make invisible"
|
|
667
663
|
})
|
|
668
664
|
})]
|
|
669
|
-
}), /*#__PURE__*/(
|
|
670
|
-
icon: /*#__PURE__*/(
|
|
665
|
+
}), /*#__PURE__*/_jsx(Separator, {}), /*#__PURE__*/_jsx(RowActionsItem, {
|
|
666
|
+
icon: /*#__PURE__*/_jsx(Delete, {}),
|
|
671
667
|
disabled: selectedCount === 0,
|
|
672
668
|
onClick: handleDeleteAllSelectedBlocks,
|
|
673
|
-
children: /*#__PURE__*/(
|
|
669
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
674
670
|
id: "comet.blocks.list.action.delete",
|
|
675
671
|
defaultMessage: "Delete"
|
|
676
672
|
})
|
|
677
|
-
}), /*#__PURE__*/(
|
|
678
|
-
icon: /*#__PURE__*/(
|
|
673
|
+
}), /*#__PURE__*/_jsx(RowActionsItem, {
|
|
674
|
+
icon: /*#__PURE__*/_jsx(Copy, {}),
|
|
679
675
|
disabled: selectedCount === 0,
|
|
680
676
|
onClick: handleCopySelectedBlocks,
|
|
681
|
-
children: /*#__PURE__*/(
|
|
677
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
682
678
|
id: "comet.blocks.list.action.copy",
|
|
683
679
|
defaultMessage: "Copy"
|
|
684
680
|
})
|
|
685
|
-
}), /*#__PURE__*/(
|
|
686
|
-
icon: /*#__PURE__*/(
|
|
681
|
+
}), /*#__PURE__*/_jsx(RowActionsItem, {
|
|
682
|
+
icon: /*#__PURE__*/_jsx(Paste, {}),
|
|
687
683
|
onClick: function onClick() {
|
|
688
684
|
return pasteBlock(0);
|
|
689
685
|
},
|
|
690
|
-
children: /*#__PURE__*/(
|
|
686
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
691
687
|
id: "comet.blocks.list.action.paste",
|
|
692
688
|
defaultMessage: "Paste"
|
|
693
689
|
})
|
|
@@ -695,7 +691,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
695
691
|
})
|
|
696
692
|
})]
|
|
697
693
|
})
|
|
698
|
-
}), /*#__PURE__*/(
|
|
694
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
699
695
|
children: [state.blocks.map(function (data, blockIndex) {
|
|
700
696
|
var block = blockForType(data.type);
|
|
701
697
|
if (!block) {
|
|
@@ -704,12 +700,12 @@ function createBlocksBlock(_ref, override) {
|
|
|
704
700
|
var isMaxVisibleBlocksReached = !!maxVisibleBlocks && totalVisibleBlocks >= maxVisibleBlocks;
|
|
705
701
|
var canToggleVisibility = isMaxVisibleBlocksReached ? data.visible : true;
|
|
706
702
|
var showMaxBlocksAllowedMessage = isMaxVisibleBlocksReached && !data.visible;
|
|
707
|
-
return /*#__PURE__*/(
|
|
703
|
+
return /*#__PURE__*/_jsx(HoverPreviewComponent, {
|
|
708
704
|
componentSlug: "".concat(data.key, "/blocks"),
|
|
709
|
-
children: /*#__PURE__*/(
|
|
705
|
+
children: /*#__PURE__*/_jsx(BlockRow, {
|
|
710
706
|
id: data.key,
|
|
711
707
|
renderPreviewContent: function renderPreviewContent() {
|
|
712
|
-
return /*#__PURE__*/(
|
|
708
|
+
return /*#__PURE__*/_jsx(BlockPreviewContent, {
|
|
713
709
|
block: block,
|
|
714
710
|
state: data.props
|
|
715
711
|
});
|
|
@@ -731,25 +727,25 @@ function createBlocksBlock(_ref, override) {
|
|
|
731
727
|
});
|
|
732
728
|
});
|
|
733
729
|
},
|
|
734
|
-
visibilityButton: /*#__PURE__*/(
|
|
735
|
-
title: showMaxBlocksAllowedMessage ? /*#__PURE__*/(
|
|
730
|
+
visibilityButton: /*#__PURE__*/_jsx(Tooltip, {
|
|
731
|
+
title: showMaxBlocksAllowedMessage ? /*#__PURE__*/_jsx(FormattedMessage, {
|
|
736
732
|
id: "comet.blocks.block.maxVisibleBlocks",
|
|
737
733
|
defaultMessage: "Max. visible blocks allowed: {maxVisibleBlocks}",
|
|
738
734
|
values: {
|
|
739
735
|
maxVisibleBlocks: maxVisibleBlocks
|
|
740
736
|
}
|
|
741
737
|
}) : null,
|
|
742
|
-
children: /*#__PURE__*/(
|
|
738
|
+
children: /*#__PURE__*/_jsx(Box, {
|
|
743
739
|
component: "span",
|
|
744
|
-
children: /*#__PURE__*/(
|
|
740
|
+
children: /*#__PURE__*/_jsx(IconButton, {
|
|
745
741
|
onClick: function onClick() {
|
|
746
742
|
return canToggleVisibility && toggleVisible(data.key);
|
|
747
743
|
},
|
|
748
744
|
size: "small",
|
|
749
745
|
disabled: !canToggleVisibility,
|
|
750
|
-
children: data.visible ? /*#__PURE__*/(
|
|
746
|
+
children: data.visible ? /*#__PURE__*/_jsx(Visible, {
|
|
751
747
|
color: "success"
|
|
752
|
-
}) : /*#__PURE__*/(
|
|
748
|
+
}) : /*#__PURE__*/_jsx(Invisible, {
|
|
753
749
|
color: "action"
|
|
754
750
|
})
|
|
755
751
|
})
|
|
@@ -783,7 +779,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
783
779
|
slideIn: data.slideIn,
|
|
784
780
|
hideBottomInsertBetweenButton: blockIndex >= state.blocks.length - 1,
|
|
785
781
|
additionalMenuItems: function additionalMenuItems(onMenuClose) {
|
|
786
|
-
return AdditionalItemContextMenuItems ? /*#__PURE__*/(
|
|
782
|
+
return AdditionalItemContextMenuItems ? /*#__PURE__*/_jsx(AdditionalItemContextMenuItems, {
|
|
787
783
|
item: data,
|
|
788
784
|
onChange: function onChange(updatedItem) {
|
|
789
785
|
updateState(function (previousState) {
|
|
@@ -797,41 +793,41 @@ function createBlocksBlock(_ref, override) {
|
|
|
797
793
|
onMenuClose: onMenuClose
|
|
798
794
|
}) : undefined;
|
|
799
795
|
},
|
|
800
|
-
additionalContent: AdditionalItemContent ? /*#__PURE__*/(
|
|
796
|
+
additionalContent: AdditionalItemContent ? /*#__PURE__*/_jsx(AdditionalItemContent, {
|
|
801
797
|
item: data
|
|
802
798
|
}) : undefined
|
|
803
799
|
})
|
|
804
800
|
}, data.key);
|
|
805
|
-
}), state.blocks.length === 0 ? /*#__PURE__*/(
|
|
801
|
+
}), state.blocks.length === 0 ? /*#__PURE__*/_jsx(BlockAdminComponentButton, {
|
|
806
802
|
onClick: function onClick() {
|
|
807
803
|
return handleAddBlockClick();
|
|
808
804
|
},
|
|
809
805
|
variant: "primary",
|
|
810
806
|
size: "large",
|
|
811
|
-
children: /*#__PURE__*/(
|
|
812
|
-
children: [/*#__PURE__*/(
|
|
813
|
-
children: /*#__PURE__*/(
|
|
807
|
+
children: /*#__PURE__*/_jsxs(LargeAddButtonContent, {
|
|
808
|
+
children: [/*#__PURE__*/_jsx(LargeAddButtonIcon, {}), /*#__PURE__*/_jsx(Typography, {
|
|
809
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
814
810
|
id: "comet.blocks.list.addNewBlock",
|
|
815
811
|
defaultMessage: "Add block"
|
|
816
812
|
})
|
|
817
813
|
})]
|
|
818
814
|
})
|
|
819
|
-
}) : /*#__PURE__*/(
|
|
820
|
-
children: /*#__PURE__*/(
|
|
815
|
+
}) : /*#__PURE__*/_jsx(AdminComponentStickyFooter, {
|
|
816
|
+
children: /*#__PURE__*/_jsx(BlockAdminComponentButton, {
|
|
821
817
|
onClick: function onClick() {
|
|
822
818
|
return handleAddBlockClick();
|
|
823
819
|
},
|
|
824
820
|
variant: "primary",
|
|
825
821
|
size: "large",
|
|
826
|
-
startIcon: /*#__PURE__*/(
|
|
827
|
-
children: /*#__PURE__*/(
|
|
822
|
+
startIcon: /*#__PURE__*/_jsx(Add, {}),
|
|
823
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
828
824
|
id: "comet.blocks.list.addNewBlock",
|
|
829
825
|
defaultMessage: "Add block"
|
|
830
826
|
})
|
|
831
827
|
})
|
|
832
828
|
})]
|
|
833
829
|
})]
|
|
834
|
-
}), /*#__PURE__*/(
|
|
830
|
+
}), /*#__PURE__*/_jsx(AddBlockDrawer, {
|
|
835
831
|
open: showAddBlockDrawer,
|
|
836
832
|
onClose: handleCloseAddBlockDrawer,
|
|
837
833
|
blocks: filteredSupportedBlocks,
|
|
@@ -845,11 +841,11 @@ function createBlocksBlock(_ref, override) {
|
|
|
845
841
|
});
|
|
846
842
|
}
|
|
847
843
|
})
|
|
848
|
-
}), /*#__PURE__*/(
|
|
844
|
+
}), /*#__PURE__*/_jsx(StackPage, {
|
|
849
845
|
name: "blocks",
|
|
850
846
|
title: "Block bearbeiten",
|
|
851
847
|
children: function children(id) {
|
|
852
|
-
return /*#__PURE__*/(
|
|
848
|
+
return /*#__PURE__*/_jsx(StackSwitchApiContext.Consumer, {
|
|
853
849
|
children: function children(stackApi) {
|
|
854
850
|
var match = state.blocks.find(function (c) {
|
|
855
851
|
return c.key === id;
|
|
@@ -863,9 +859,9 @@ function createBlocksBlock(_ref, override) {
|
|
|
863
859
|
stackApi.activatePage("main", "");
|
|
864
860
|
return;
|
|
865
861
|
}
|
|
866
|
-
return /*#__PURE__*/(
|
|
862
|
+
return /*#__PURE__*/_jsx(StackPageTitle, {
|
|
867
863
|
title: block.displayName,
|
|
868
|
-
children: /*#__PURE__*/(
|
|
864
|
+
children: /*#__PURE__*/_jsx(block.AdminComponent, {
|
|
869
865
|
state: match.props,
|
|
870
866
|
updateState: createUpdateSubBlocksFn(id)
|
|
871
867
|
})
|
|
@@ -874,7 +870,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
874
870
|
});
|
|
875
871
|
}
|
|
876
872
|
})]
|
|
877
|
-
}), cannotPasteBlockError !== undefined && /*#__PURE__*/(
|
|
873
|
+
}), cannotPasteBlockError !== undefined && /*#__PURE__*/_jsx(CannotPasteBlockDialog, {
|
|
878
874
|
open: true,
|
|
879
875
|
onClose: function onClose() {
|
|
880
876
|
return setCannotPasteBlockError(undefined);
|
|
@@ -887,7 +883,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
887
883
|
if (state.blocks.length === 0) {
|
|
888
884
|
return [{
|
|
889
885
|
type: "text",
|
|
890
|
-
content: /*#__PURE__*/(
|
|
886
|
+
content: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
891
887
|
id: "comet.blocks.list.count",
|
|
892
888
|
defaultMessage: "{count, plural, =0 {No blocks} one {# block} other {# blocks}}",
|
|
893
889
|
values: {
|
|
@@ -941,7 +937,7 @@ function createBlocksBlock(_ref, override) {
|
|
|
941
937
|
}
|
|
942
938
|
return BlocksBlock;
|
|
943
939
|
}
|
|
944
|
-
var BlockListHeader = /*#__PURE__*/
|
|
940
|
+
var BlockListHeader = /*#__PURE__*/styled("div", process.env.NODE_ENV === "production" ? {
|
|
945
941
|
target: "e1dbbzf55"
|
|
946
942
|
} : {
|
|
947
943
|
target: "e1dbbzf55",
|
|
@@ -950,7 +946,7 @@ var BlockListHeader = /*#__PURE__*/(0, _styles.styled)("div", process.env.NODE_E
|
|
|
950
946
|
var theme = _ref1.theme;
|
|
951
947
|
return theme.spacing(0, 1);
|
|
952
948
|
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1NkJxQyIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAY29tZXQvYWRtaW5cIjtcbmltcG9ydCB7IEFkZCwgQ29weSwgRGVsZXRlLCBJbnZpc2libGUsIFBhc3RlLCBWaXNpYmxlIH0gZnJvbSBcIkBjb21ldC9hZG1pbi1pY29uc1wiO1xuaW1wb3J0IHsgQm94LCBDaGVja2JveCwgRm9ybUNvbnRyb2xMYWJlbCwgSWNvbkJ1dHRvbiwgVHlwb2dyYXBoeSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9zdHlsZXNcIjtcbmltcG9ydCB7XG4gICAgdHlwZSBDaGFuZ2VFdmVudCxcbiAgICB0eXBlIERpc3BhdGNoLFxuICAgIHR5cGUgRnVuY3Rpb25Db21wb25lbnQsXG4gICAgdHlwZSBSZWFjdE5vZGUsXG4gICAgdHlwZSBTZXRTdGF0ZUFjdGlvbixcbiAgICB1c2VDYWxsYmFjayxcbiAgICB1c2VFZmZlY3QsXG4gICAgdXNlTWVtbyxcbiAgICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGb3JtYXR0ZWRNZXNzYWdlLCB0eXBlIE1lc3NhZ2VEZXNjcmlwdG9yIH0gZnJvbSBcInJlYWN0LWludGxcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuXG5pbXBvcnQgeyB1c2VDb250ZW50U2NvcGUgfSBmcm9tIFwiLi4vLi4vY29udGVudFNjb3BlL1Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBDYW5ub3RQYXN0ZUJsb2NrRGlhbG9nIH0gZnJvbSBcIi4uL2NsaXBib2FyZC9DYW5ub3RQYXN0ZUJsb2NrRGlhbG9nXCI7XG5pbXBvcnQgeyB1c2VCbG9ja0NsaXBib2FyZCB9IGZyb20gXCIuLi9jbGlwYm9hcmQvdXNlQmxvY2tDbGlwYm9hcmRcIjtcbmltcG9ydCB7IEFkZEJsb2NrRHJhd2VyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZGRCbG9ja0RyYXdlclwiO1xuaW1wb3J0IHsgQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXJcIjtcbmltcG9ydCB7IEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b24gfSBmcm9tIFwiLi4vY29tbW9uL0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cIjtcbmltcG9ydCB7IEJsb2NrQWRtaW5Db21wb25lbnRQYXBlciB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyXCI7XG5pbXBvcnQgeyBCbG9ja1ByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1ByZXZpZXdDb250ZW50XCI7XG5pbXBvcnQgeyBCbG9ja1JvdyB9IGZyb20gXCIuLi9jb21tb24vYmxvY2tSb3cvQmxvY2tSb3dcIjtcbmltcG9ydCB7IHVzZUJsb2Nrc0NvbmZpZyB9IGZyb20gXCIuLi9jb25maWcvQmxvY2tzQ29uZmlnQ29udGV4dFwiO1xuaW1wb3J0IHsgY3JlYXRlQmxvY2tTa2VsZXRvbiB9IGZyb20gXCIuLi9oZWxwZXJzL2NyZWF0ZUJsb2NrU2tlbGV0b25cIjtcbmltcG9ydCB7IGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi4vaGVscGVycy9kZWR1cGxpY2F0ZUJsb2NrRGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgeyBIb3ZlclByZXZpZXdDb21wb25lbnQgfSBmcm9tIFwiLi4vaWZyYW1lYnJpZGdlL0hvdmVyUHJldmlld0NvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2VsZWN0UHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvU2VsZWN0UHJldmlld0NvbXBvbmVudFwiO1xuaW1wb3J0IHsgdHlwZSBCbG9ja0RlcGVuZGVuY3ksIHR5cGUgQmxvY2tJbnRlcmZhY2UsIHR5cGUgQmxvY2tTdGF0ZSwgdHlwZSBQcmV2aWV3Q29udGVudCB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZU5ld1N0YXRlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBwYXJhbGxlbEFzeW5jRXZlcnkgfSBmcm9tIFwiLi4vdXRpbHMvcGFyYWxsZWxBc3luY0V2ZXJ5XCI7XG5cbi8vIFVzaW5nIHt9IGluc3RlYWQgb2YgUmVjb3JkPHN0cmluZywgbmV2ZXI+IGJlY2F1c2UgbmV2ZXIgYW5kIHVua25vd24gYXJlIGluY29tcGF0aWJsZS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbnR5cGUgRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzID0ge307XG5cbnR5cGUgQmxvY2tzQmxvY2tJdGVtPFxuICAgIFQgZXh0ZW5kcyBCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlLFxuICAgIEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMsXG4+ID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgcHJvcHM6IEJsb2NrU3RhdGU8VD47XG4gICAgc2xpZGVJbjogYm9vbGVhbjtcbn0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkcztcblxudHlwZSBSZW1vdmVkQmxvY2tzQmxvY2tJdGVtPFxuICAgIFQgZXh0ZW5kcyBCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlLFxuICAgIEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMsXG4+ID0gQmxvY2tzQmxvY2tJdGVtPFQsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiAmIHsgcmVtb3ZlZEF0OiBudW1iZXIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPiB7XG4gICAgYmxvY2tzOiBBcnJheTxcbiAgICAgICAge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICAgICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBwcm9wczogYW55O1xuICAgICAgICB9ICYgQWRkaXRpb25hbEl0ZW1GaWVsZHNcbiAgICA+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbnR5cGUgQmxvY2tUeXBlID0gc3RyaW5nO1xuXG5pbnRlcmZhY2UgQmxvY2tzQmxvY2tBZGRpdGlvbmFsSXRlbUZpZWxkPFZhbHVlID0gdW5rbm93bj4ge1xuICAgIGRlZmF1bHRWYWx1ZTogVmFsdWU7XG59XG5cbmludGVyZmFjZSBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZT86IFJlYWN0Tm9kZTtcbiAgICBzdXBwb3J0ZWRCbG9ja3M6IFJlY29yZDxCbG9ja1R5cGUsIEJsb2NrSW50ZXJmYWNlPjtcbiAgICBtYXhWaXNpYmxlQmxvY2tzPzogbnVtYmVyO1xuICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzPzoge1xuICAgICAgICBbS2V5IGluIGtleW9mIEFkZGl0aW9uYWxJdGVtRmllbGRzXTogQmxvY2tzQmxvY2tBZGRpdGlvbmFsSXRlbUZpZWxkPEFkZGl0aW9uYWxJdGVtRmllbGRzW0tleV0+O1xuICAgIH07XG4gICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zPzogRnVuY3Rpb25Db21wb25lbnQ8e1xuICAgICAgICBpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPjtcbiAgICAgICAgb25DaGFuZ2U6IChpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPikgPT4gdm9pZDtcbiAgICAgICAgb25NZW51Q2xvc2U6ICgpID0+IHZvaWQ7XG4gICAgfT47XG4gICAgQWRkaXRpb25hbEl0ZW1Db250ZW50PzogRnVuY3Rpb25Db21wb25lbnQ8eyBpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiB9PjtcbiAgICB0YWdzPzogQXJyYXk8TWVzc2FnZURlc2NyaXB0b3IgfCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmxvY2tzQmxvY2s8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4oXG4gICAge1xuICAgICAgICBzdXBwb3J0ZWRCbG9ja3MsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRpc3BsYXlOYW1lID0gPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MuYmxvY2tzLm5hbWVcIiBkZWZhdWx0TWVzc2FnZT1cIkJsb2Nrc1wiIC8+LFxuICAgICAgICBtYXhWaXNpYmxlQmxvY2tzLFxuICAgICAgICBhZGRpdGlvbmFsSXRlbUZpZWxkcyxcbiAgICAgICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQsXG4gICAgICAgIHRhZ3MsXG4gICAgfTogQ3JlYXRlQmxvY2tzQmxvY2tPcHRpb25zPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICBvdmVycmlkZT86IChcbiAgICAgICAgYmxvY2s6IEJsb2NrSW50ZXJmYWNlPFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgICAgICBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPlxuICAgICAgICA+LFxuICAgICkgPT4gQmxvY2tJbnRlcmZhY2U8QmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LCBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4+LFxuKTogQmxvY2tJbnRlcmZhY2U8QmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LCBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4+IHtcbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggbm8gc3VwcG9ydGVkIGJsb2NrIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2Ugc3BlY2lmeSBhdCBsZWFzdCB0d28gc3VwcG9ydGVkIGJsb2Nrcy5cIik7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKHN1cHBvcnRlZEJsb2NrcykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJsb2NrcyBibG9jayB3aXRoIGEgc2luZ2xlIGJsb2NrIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2UgdXNlIGEgbGlzdCBibG9jayAoY3JlYXRlTGlzdEJsb2NrKCkpIGluc3RlYWQuXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJsb2NrRm9yVHlwZSh0eXBlOiBzdHJpbmcpOiBCbG9ja0ludGVyZmFjZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gc3VwcG9ydGVkQmxvY2tzW3R5cGVdID8/IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHlwZUZvckJsb2NrKHRhcmdldEJsb2NrOiBQaWNrPEJsb2NrSW50ZXJmYWNlLCBcIm5hbWVcIj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmluZCgoWywgYmxvY2tdKSA9PiBibG9jay5uYW1lID09PSB0YXJnZXRCbG9jay5uYW1lKT8uWzBdID8/IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRUYWdzID0gT2JqZWN0LnZhbHVlcyhzdXBwb3J0ZWRCbG9ja3MpLnJlZHVjZTxBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz4+KChhY2MsIGJsb2NrKSA9PiB7XG4gICAgICAgIGlmIChibG9jay50YWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFjYywgLi4uYmxvY2sudGFnc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBCbG9ja3NCbG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgIEJsb2Nrc0Jsb2NrRnJhZ21lbnQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgPiA9IHtcbiAgICAgICAgLi4uY3JlYXRlQmxvY2tTa2VsZXRvbigpLFxuXG4gICAgICAgIG5hbWUsXG5cbiAgICAgICAgZGlzcGxheU5hbWUsXG5cbiAgICAgICAgdGFnczogdGFncyA/IHRhZ3MgOiBjaGlsZFRhZ3MsXG5cbiAgICAgICAgZGVmYXVsdFZhbHVlczogKCkgPT4gKHsgYmxvY2tzOiBbXSB9KSxcblxuICAgICAgICBpbnB1dDJTdGF0ZTogKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBpbnB1dC5ibG9ja3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcblxuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIGJsb2NrIHR5cGUgXCIke2NoaWxkLnR5cGV9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmlucHV0MlN0YXRlKGNoaWxkLnByb3BzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZSgoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBibG9ja3MsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHN0YXRlMk91dHB1dDogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2Nrczogc3RhdGUuYmxvY2tzLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY2hpbGQudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZTJPdXRwdXQoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgb3V0cHV0MlN0YXRlOiBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZTogQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBbXSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygb3V0cHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5ibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGF3YWl0IGJsb2NrLm91dHB1dDJTdGF0ZShjaGlsZC5wcm9wcywgY29udGV4dCksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNyZWF0ZVByZXZpZXdTdGF0ZTogKHN0YXRlLCBwcmV2aWV3Q3R4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsLFxuICAgICAgICAgICAgICAgIGJsb2Nrczogc3RhdGUuYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNoaWxkKSA9PiAocHJldmlld0N0eC5zaG93VmlzaWJsZU9ubHkgPyBjaGlsZC52aXNpYmxlIDogdHJ1ZSkpIC8vIGRlcGVuZGluZyBvbiBjb250ZXh0IHNob3cgYWxsIGJsb2NrcyBvciBvbmx5IHZpc2libGUgYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0FkbWluUm91dGUgPSBgJHtwcmV2aWV3Q3R4LnBhcmVudFVybFN1YlJvdXRlID8/IHByZXZpZXdDdHgucGFyZW50VXJsfS8ke2NoaWxkLmtleX0vYmxvY2tzYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2hpbGQudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IGJsb2NrQWRtaW5Sb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suY3JlYXRlUHJldmlld1N0YXRlKGNoaWxkLnByb3BzLCB7IC4uLnByZXZpZXdDdHgsIHBhcmVudFVybFN1YlJvdXRlOiB1bmRlZmluZWQsIHBhcmVudFVybDogYmxvY2tBZG1pblJvdXRlIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgYWRtaW5NZXRhOiB7IHJvdXRlOiBwcmV2aWV3Q3R4LnBhcmVudFVybCB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNWYWxpZDogYXN5bmMgKHN0YXRlKSA9PlxuICAgICAgICAgICAgcGFyYWxsZWxBc3luY0V2ZXJ5KHN0YXRlLmJsb2NrcywgYXN5bmMgKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2MudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5pc1ZhbGlkKGMucHJvcHMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIGNoaWxkQmxvY2tDb3VudDogKHN0YXRlKSA9PiBzdGF0ZS5ibG9ja3MubGVuZ3RoLFxuXG4gICAgICAgIGFuY2hvcnM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChhbmNob3JzLCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFuY2hvcnMsIC4uLihibG9jay5hbmNob3JzPy4oY2hpbGQucHJvcHMpID8/IFtdKV07XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVwZW5kZW5jaWVzOiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZERlcGVuZGVuY2llcyA9IHN0YXRlLmJsb2Nrcy5yZWR1Y2U8QmxvY2tEZXBlbmRlbmN5W10+KChkZXBlbmRlbmNpZXMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uZGVwZW5kZW5jaWVzLCAuLi4oYmxvY2suZGVwZW5kZW5jaWVzPy4oY2hpbGQucHJvcHMpID8/IFtdKV07XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWR1cGxpY2F0ZUJsb2NrRGVwZW5kZW5jaWVzKG1lcmdlZERlcGVuZGVuY2llcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVwbGFjZURlcGVuZGVuY2llc0luT3V0cHV0OiAob3V0cHV0LCByZXBsYWNlbWVudHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld091dHB1dDogQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+ID0geyBibG9ja3M6IFtdIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygb3V0cHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV3T3V0cHV0LmJsb2Nrcy5wdXNoKHsgLi4uY2hpbGQsIHByb3BzOiBibG9jay5yZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQoY2hpbGQucHJvcHMsIHJlcGxhY2VtZW50cykgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdPdXRwdXQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVmaW5lc093blBhZGRpbmc6IHRydWUsXG5cbiAgICAgICAgQWRtaW5Db21wb25lbnQ6ICh7IHN0YXRlLCB1cGRhdGVTdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b2dnbGVWaXNpYmxlID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGJsb2NrS2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IChjLmtleSA9PT0gYmxvY2tLZXkgPyB7IC4uLmMsIHZpc2libGU6ICFjLnZpc2libGUgfSA6IGMpKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IFtzaG93QWRkQmxvY2tEcmF3ZXIsIHNldFNob3dBZGRCbG9ja0RyYXdlcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBbYmVmb3JlSW5kZXgsIHNldEJlZm9yZUluZGV4XSA9IHVzZVN0YXRlPG51bWJlcj4oKTtcbiAgICAgICAgICAgIGNvbnN0IFtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IsIHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcl0gPSB1c2VTdGF0ZTxSZWFjdE5vZGU+KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNuYWNrYmFyQXBpID0gdXNlU25hY2tiYXJBcGkoKTtcblxuICAgICAgICAgICAgY29uc3QgdG90YWxWaXNpYmxlQmxvY2tzID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnZpc2libGUpLmxlbmd0aDtcblxuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLnNvbWUoKGJsb2NrKSA9PiBibG9jay5zbGlkZUluKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHsgLi4ucHJldlN0YXRlLCBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChibG9jaykgPT4gKHsgLi4uYmxvY2ssIHNsaWRlSW46IGZhbHNlIH0pKSB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtzdGF0ZS5ibG9ja3MsIHVwZGF0ZVN0YXRlXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVVuZG9DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChyZW1vdmVkQmxvY2tzOiBSZW1vdmVkQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbW92ZWRCbG9ja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IFsuLi5wcmV2U3RhdGUuYmxvY2tzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRCbG9ja3M/LmZvckVhY2goKHJlbW92ZWRCbG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVtb3ZlZEF0IH0gPSByZW1vdmVkQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2s6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ID0geyAuLi5yZW1vdmVkQmxvY2sgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYmxvY2sucmVtb3ZlZEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5zcGxpY2UocmVtb3ZlZEF0LCAwLCBibG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZGVsZXRlQmxvY2tzID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGJsb2NrS2V5czogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzVG9SZW1vdmUgPSBwcmV2U3RhdGUuYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoYmxvY2ssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCByZW1vdmVkQXQ6IGluZGV4IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2tLZXlzLmluY2x1ZGVzKGJsb2NrLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYWNrYmFyQXBpLnNob3dTbmFja2JhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VW5kb1NuYWNrYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmJsb2NrRGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJ7Y291bnQsIHBsdXJhbCwgb25lIHtibG9ja30gb3RoZXIgeyMgYmxvY2tzfX0gZGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBibG9ja3NUb1JlbW92ZS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZD17YmxvY2tzVG9SZW1vdmV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVW5kb0NsaWNrPXsoYmxvY2tzVG9SZW1vdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVuZG9DbGljayhibG9ja3NUb1JlbW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5maWx0ZXIoKGMpID0+ICFibG9ja0tleXMuaW5jbHVkZXMoYy5rZXkpKSB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtoYW5kbGVVbmRvQ2xpY2ssIHNuYWNrYmFyQXBpLCB1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2NrcyA9ICh2aXNpYmxlID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1Nob3cgPSBzdGF0ZS5ibG9ja3MubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLnZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrczogYmxvY2tzVG9TaG93IH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVEZWxldGVBbGxTZWxlY3RlZEJsb2NrcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb0RlbGV0ZSA9IHN0YXRlLmJsb2Nrcy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMuc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoXG4gICAgICAgICAgICAgICAgICAgIGJsb2Nrc1RvRGVsZXRlLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5rZXk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhZGROZXdCbG9jayA9ICh0eXBlOiBCbG9ja1R5cGUsIGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdXVpZCgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUodHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7dHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbTogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogbWF4VmlzaWJsZUJsb2NrcyA/IHRvdGFsVmlzaWJsZUJsb2NrcyA8IG1heFZpc2libGVCbG9ja3MgOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5kZWZhdWx0VmFsdWVzKCksXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgW2ZpZWxkLCB7IGRlZmF1bHRWYWx1ZSB9XSkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBkZWZhdWx0VmFsdWUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrcyA9IFsuLi5zdGF0ZS5ibG9ja3NdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tzLnNwbGljZShiZWZvcmVJbmRleCwgMCwgbmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tzLnB1c2gobmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBibG9ja3M6IG5ld0Jsb2NrcyxcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4gPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVTdWJCbG9ja3NGbjogRGlzcGF0Y2g8U2V0U3RhdGVBY3Rpb248dW5rbm93bj4+ID0gKHNldFN0YXRlQWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChjKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmtleSA9PT0gYmxvY2tLZXkgPyB7IC4uLmMsIHByb3BzOiByZXNvbHZlTmV3U3RhdGUoeyBwcmV2U3RhdGU6IGMucHJvcHMsIHNldFN0YXRlQWN0aW9uIH0pIH0gOiBjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdWJCbG9ja3NGbjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCB7IHNjb3BlIH0gPSB1c2VDb250ZW50U2NvcGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaXNCbG9ja1N1cHBvcnRlZCB9ID0gdXNlQmxvY2tzQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU3VwcG9ydGVkQmxvY2tzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQmxvY2tTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhzdXBwb3J0ZWRCbG9ja3MpLmZpbHRlcigoWywgYmxvY2tdKSA9PiBpc0Jsb2NrU3VwcG9ydGVkKGJsb2NrLCBzY29wZSkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwcG9ydGVkQmxvY2tzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtzY29wZSwgaXNCbG9ja1N1cHBvcnRlZF0pO1xuXG4gICAgICAgICAgICBjb25zdCB7IHVwZGF0ZUNsaXBib2FyZENvbnRlbnQsIGdldENsaXBib2FyZENvbnRlbnQgfSA9IHVzZUJsb2NrQ2xpcGJvYXJkKHsgc3VwcG9ydHM6IE9iamVjdC52YWx1ZXMoZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MpIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwYXN0ZUJsb2NrID0gYXN5bmMgKGluc2VydEF0OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldENsaXBib2FyZENvbnRlbnQoKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuY2FuUGFzdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yKHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZFZpc2libGVCbG9ja3MgPSBjb250ZW50LmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnZpc2libGUpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuQWRkVmlzaWJsZUJsb2NrID0gbWF4VmlzaWJsZUJsb2NrcyA/IHRvdGFsVmlzaWJsZUJsb2NrcyArIGNsaXBib2FyZFZpc2libGVCbG9ja3MgPD0gbWF4VmlzaWJsZUJsb2NrcyA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdID0gY29udGVudC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZvckJsb2NrKGJsb2NrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB0eXBlIGZvdW5kIGZvciBibG9jayBcIiR7YmxvY2submFtZX1cImApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdXVpZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNhbkFkZFZpc2libGVCbG9jayA/IGJsb2NrLnZpc2libGUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oYmxvY2suYWRkaXRpb25hbEZpZWxkcyBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBbLi4ucHJldlN0YXRlLmJsb2Nrcy5zbGljZSgwLCBpbnNlcnRBdCksIC4uLm5ld0Jsb2NrcywgLi4ucHJldlN0YXRlLmJsb2Nrcy5zbGljZShpbnNlcnRBdCldLm1hcCgoYmxvY2spID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQWRkQmxvY2tDbGljayA9IChiZWZvcmVJbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dBZGRCbG9ja0RyYXdlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleChiZWZvcmVJbmRleCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dBZGRCbG9ja0RyYXdlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2V0QmVmb3JlSW5kZXgodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVNlbGVjdEFsbCA9IChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdEJsb2NrID0gKGN1cnJlbnRCbG9jazogQmxvY2tzQmxvY2tJdGVtLCBzZWxlY3Q6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCBzZWxlY3RlZDogYmxvY2sgPT09IGN1cnJlbnRCbG9jayA/IHNlbGVjdCA6IGJsb2NrLnNlbGVjdGVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNvcHlTZWxlY3RlZEJsb2NrcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb0NvcHkgPSBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tJbnRlcmZhY2UgPSBibG9ja0ZvclR5cGUoYmxvY2sudHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2tJbnRlcmZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7YmxvY2sudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBibG9ja0ludGVyZmFjZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGJsb2NrLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHM6IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGJsb2NrW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlQ2xpcGJvYXJkQ29udGVudChibG9ja3NUb0NvcHkpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHN0YXRlLmJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiBibG9jay5zZWxlY3RlZCkubGVuZ3RoO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaCBkaXNhYmxlRm9yY2VQcm9tcHRSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1BhZ2UgbmFtZT1cIm1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RQcmV2aWV3Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIGRpc2FibGVQYWRkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0xpc3RIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZENvdW50ID09PSBzdGF0ZS5ibG9ja3MubGVuZ3RoICYmIHNlbGVjdGVkQ291bnQgPiAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZT17c2VsZWN0ZWRDb3VudCA+IDAgJiYgc2VsZWN0ZWRDb3VudCAhPT0gc3RhdGUuYmxvY2tzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVUb2dnbGVTZWxlY3RBbGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5zZWxlY3RBbGxcIiBkZWZhdWx0TWVzc2FnZT1cIlNlbGVjdCBhbGxcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc01lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIERvIG5vdCBzaG93IHRvZ2dsZSB2aXNpYmlsaXR5IG9mIGFsbCBzZWxlY3RlZCBibG9ja3MgYnV0dG9ucyB3aGVuIG1heFZpc2libGVCbG9ja3MgaXMgc2V0ICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshbWF4VmlzaWJsZUJsb2NrcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8VmlzaWJsZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2Nrcyh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIHZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0FjdGlvbnNJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PEludmlzaWJsZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2NrcygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLmludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWFrZSBpbnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZXBhcmF0b3IgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PERlbGV0ZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkQ291bnQgPT09IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uZGVsZXRlXCIgZGVmYXVsdE1lc3NhZ2U9XCJEZWxldGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0FjdGlvbnNJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxDb3B5IC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uY29weVwiIGRlZmF1bHRNZXNzYWdlPVwiQ29weVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW0gaWNvbj17PFBhc3RlIC8+fSBvbkNsaWNrPXsoKSA9PiBwYXN0ZUJsb2NrKDApfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24ucGFzdGVcIiBkZWZhdWx0TWVzc2FnZT1cIlBhc3RlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0xpc3RIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLm1hcCgoZGF0YSwgYmxvY2tJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTWF4VmlzaWJsZUJsb2Nrc1JlYWNoZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISFtYXhWaXNpYmxlQmxvY2tzICYmIHRvdGFsVmlzaWJsZUJsb2NrcyA+PSBtYXhWaXNpYmxlQmxvY2tzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5Ub2dnbGVWaXNpYmlsaXR5ID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA/IGRhdGEudmlzaWJsZSA6IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3dNYXhCbG9ja3NBbGxvd2VkTWVzc2FnZSA9IGlzTWF4VmlzaWJsZUJsb2Nrc1JlYWNoZWQgJiYgIWRhdGEudmlzaWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhvdmVyUHJldmlld0NvbXBvbmVudCBrZXk9e2RhdGEua2V5fSBjb21wb25lbnRTbHVnPXtgJHtkYXRhLmtleX0vYmxvY2tzYH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtkYXRhLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUHJldmlld0NvbnRlbnQ9eygpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja1ByZXZpZXdDb250ZW50IGJsb2NrPXtibG9ja30gc3RhdGU9e2RhdGEucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtibG9ja0luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbnRlbnRDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGRhdGEua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25EZWxldGVDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQmxvY2tzKFtkYXRhLmtleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQmxvY2s9eyhmcm9tLCB0bykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IFsuLi5wcmV2U3RhdGUuYmxvY2tzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja1RvTW92ZSA9IGJsb2Nrcy5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZSh0bywgMCwgYmxvY2tUb01vdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eUJ1dHRvbj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5ibG9jay5tYXhWaXNpYmxlQmxvY2tzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1heC4gdmlzaWJsZSBibG9ja3MgYWxsb3dlZDoge21heFZpc2libGVCbG9ja3N9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgbWF4VmlzaWJsZUJsb2NrcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBjb21wb25lbnQ9XCJzcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjYW5Ub2dnbGVWaXNpYmlsaXR5ICYmIHRvZ2dsZVZpc2libGUoZGF0YS5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuVG9nZ2xlVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2RhdGEudmlzaWJsZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VmlzaWJsZSBjb2xvcj1cInN1Y2Nlc3NcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW52aXNpYmxlIGNvbG9yPVwiYWN0aW9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZE5ld0Jsb2NrPXtoYW5kbGVBZGRCbG9ja0NsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvcHlDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoZGF0YS50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtkYXRhLnR5cGV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGRhdGEudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGRhdGEucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHM6IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBkYXRhW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QYXN0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZUJsb2NrKGJsb2NrSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2RhdGEuc2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0ZWRDbGljaz17KHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RCbG9jayhkYXRhLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWRGbj17KCkgPT4gYmxvY2suaXNWYWxpZChkYXRhLnByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVJbj17ZGF0YS5zbGlkZUlufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQm90dG9tSW5zZXJ0QmV0d2VlbkJ1dHRvbj17YmxvY2tJbmRleCA+PSBzdGF0ZS5ibG9ja3MubGVuZ3RoIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1lbnVJdGVtcz17KG9uTWVudUNsb3NlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh1cGRhdGVkSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZpb3VzU3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2aW91c1N0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5rZXkgPT09IGRhdGEua2V5ID8gdXBkYXRlZEl0ZW0gOiBibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQ29udGVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQgPyA8QWRkaXRpb25hbEl0ZW1Db250ZW50IGl0ZW09e2RhdGF9IC8+IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ib3ZlclByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hZGROZXdCbG9ja1wiIGRlZmF1bHRNZXNzYWdlPVwiQWRkIGJsb2NrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhcmdlQWRkQnV0dG9uQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZG1pbkNvbXBvbmVudFN0aWNreUZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQWRkQmxvY2tDbGljaygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SWNvbj17PEFkZCAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRCbG9ja0RyYXdlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17c2hvd0FkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VBZGRCbG9ja0RyYXdlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcz17ZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZE5ld0Jsb2NrPXsodHlwZSwgYWRkQW5kRWRpdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGFkZE5ld0Jsb2NrKHR5cGUsIGJlZm9yZUluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRBbmRFZGl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQXBpLmFjdGl2YXRlUGFnZShcImJsb2Nrc1wiLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RQcmV2aWV3Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tQYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwiYmxvY2tzXCIgdGl0bGU9XCJCbG9jayBiZWFyYmVpdGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhpZCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhzdGFja0FwaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gc3RhdGUuYmxvY2tzLmZpbmQoKGMpID0+IGMua2V5ID09PSBpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQXBpLmFjdGl2YXRlUGFnZShcIm1haW5cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShtYXRjaC50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1BhZ2VUaXRsZSB0aXRsZT17YmxvY2suZGlzcGxheU5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJsb2NrLkFkbWluQ29tcG9uZW50IHN0YXRlPXttYXRjaC5wcm9wc30gdXBkYXRlU3RhdGU9e2NyZWF0ZVVwZGF0ZVN1YkJsb2Nrc0ZuKGlkKX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2VUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tQYWdlPlxuICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICB7Y2Fubm90UGFzdGVCbG9ja0Vycm9yICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgb3BlbiBvbkNsb3NlPXsoKSA9PiBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IodW5kZWZpbmVkKX0gZXJyb3I9e2Nhbm5vdFBhc3RlQmxvY2tFcnJvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdDb250ZW50OiAoc3RhdGUsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmNvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJ7Y291bnQsIHBsdXJhbCwgPTAge05vIGJsb2Nrc30gb25lIHsjIGJsb2NrfSBvdGhlciB7IyBibG9ja3N9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBjb3VudDogc3RhdGUuYmxvY2tzLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxQcmV2aWV3Q29udGVudFtdPigocHJldiwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG5leHQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQcmV2aWV3Q29udGVudCA9IGJsb2NrLnByZXZpZXdDb250ZW50KG5leHQucHJvcHMsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4ubmV4dFByZXZpZXdDb250ZW50XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmVEZXBlbmRlbmN5UGF0aDogKHN0YXRlLCBqc29uUGF0aCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEvXmJsb2Nrcy5cXGQrLnByb3BzLy50ZXN0KGpzb25QYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJsb2Nrc0Jsb2NrOiBJbnZhbGlkIGpzb25QYXRoXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXRoQXJyID0ganNvblBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHBhdGhBcnJbMV0pO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJdGVtID0gc3RhdGUuYmxvY2tzW251bV07XG5cbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGJsb2NrSXRlbS50eXBlKTtcblxuICAgICAgICAgICAgaWYgKGJsb2NrID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEJsb2NrIGlzIG51bGxcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGJsb2NrLnJlc29sdmVEZXBlbmRlbmN5UGF0aChibG9ja0l0ZW0ucHJvcHMsIHBhdGhBcnIuc2xpY2UoMykuam9pbihcIi5cIikpO1xuICAgICAgICAgICAgcmV0dXJuIGAke2Jsb2NrSXRlbS5rZXl9L2Jsb2Nrcy8ke2NoaWxkUGF0aH1gO1xuICAgICAgICB9LFxuICAgICAgICBleHRyYWN0VGV4dENvbnRlbnRzOiAoc3RhdGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVJbnZpc2libGVDb250ZW50ID0gb3B0aW9ucz8uaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPz8gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPHN0cmluZ1tdPigoY29udGVudCwgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUgJiYgIWluY2x1ZGVJbnZpc2libGVDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uY29udGVudCwgLi4uKGJsb2NrLmV4dHJhY3RUZXh0Q29udGVudHM/LihjaGlsZC5wcm9wcywgb3B0aW9ucykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZShCbG9ja3NCbG9jayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJsb2Nrc0Jsb2NrO1xufVxuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMCwgMSl9O1xuYDtcblxuY29uc3QgQmxvY2tMaXN0SGVhZGVyQWN0aW9uQ29udGFpbmVyID0gc3R5bGVkKFwiZGl2XCIpYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAxMnB4IDA7XG5gO1xuXG5jb25zdCBTZWxlY3RBbGxGcm9tQ29udHJvbExhYmVsID0gc3R5bGVkKEZvcm1Db250cm9sTGFiZWwpYFxuICAgIHBhZGRpbmc6IDE1cHggMTBweCAxNXB4IDdweDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uQ29udGVudCA9IHN0eWxlZChcInNwYW5cIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogNHB4IDA7XG5gO1xuXG5jb25zdCBMYXJnZUFkZEJ1dHRvbkljb24gPSBzdHlsZWQoQWRkKWBcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuYDtcblxuY29uc3QgU2VwYXJhdG9yID0gc3R5bGVkKFwiZGl2XCIpYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHByb3BzKSA9PiBwcm9wcy50aGVtZS5wYWxldHRlLmdyZXlbXCIxMDBcIl19O1xuICAgIGhlaWdodDogMjJweDtcbiAgICB3aWR0aDogMXB4O1xuICAgIG1hcmdpbi1sZWZ0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuICAgIG1hcmdpbi1yaWdodDogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS5zcGFjaW5nKDEpfTtcbmA7XG4iXX0= */"));
|
|
953
|
-
var BlockListHeaderActionContainer = /*#__PURE__*/
|
|
949
|
+
var BlockListHeaderActionContainer = /*#__PURE__*/styled("div", process.env.NODE_ENV === "production" ? {
|
|
954
950
|
target: "e1dbbzf54"
|
|
955
951
|
} : {
|
|
956
952
|
target: "e1dbbzf54",
|
|
@@ -963,7 +959,7 @@ var BlockListHeaderActionContainer = /*#__PURE__*/(0, _styles.styled)("div", pro
|
|
|
963
959
|
styles: "display:flex;align-items:center;padding:12px 0/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4NkJvRCIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAY29tZXQvYWRtaW5cIjtcbmltcG9ydCB7IEFkZCwgQ29weSwgRGVsZXRlLCBJbnZpc2libGUsIFBhc3RlLCBWaXNpYmxlIH0gZnJvbSBcIkBjb21ldC9hZG1pbi1pY29uc1wiO1xuaW1wb3J0IHsgQm94LCBDaGVja2JveCwgRm9ybUNvbnRyb2xMYWJlbCwgSWNvbkJ1dHRvbiwgVHlwb2dyYXBoeSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9zdHlsZXNcIjtcbmltcG9ydCB7XG4gICAgdHlwZSBDaGFuZ2VFdmVudCxcbiAgICB0eXBlIERpc3BhdGNoLFxuICAgIHR5cGUgRnVuY3Rpb25Db21wb25lbnQsXG4gICAgdHlwZSBSZWFjdE5vZGUsXG4gICAgdHlwZSBTZXRTdGF0ZUFjdGlvbixcbiAgICB1c2VDYWxsYmFjayxcbiAgICB1c2VFZmZlY3QsXG4gICAgdXNlTWVtbyxcbiAgICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGb3JtYXR0ZWRNZXNzYWdlLCB0eXBlIE1lc3NhZ2VEZXNjcmlwdG9yIH0gZnJvbSBcInJlYWN0LWludGxcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuXG5pbXBvcnQgeyB1c2VDb250ZW50U2NvcGUgfSBmcm9tIFwiLi4vLi4vY29udGVudFNjb3BlL1Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBDYW5ub3RQYXN0ZUJsb2NrRGlhbG9nIH0gZnJvbSBcIi4uL2NsaXBib2FyZC9DYW5ub3RQYXN0ZUJsb2NrRGlhbG9nXCI7XG5pbXBvcnQgeyB1c2VCbG9ja0NsaXBib2FyZCB9IGZyb20gXCIuLi9jbGlwYm9hcmQvdXNlQmxvY2tDbGlwYm9hcmRcIjtcbmltcG9ydCB7IEFkZEJsb2NrRHJhd2VyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZGRCbG9ja0RyYXdlclwiO1xuaW1wb3J0IHsgQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXJcIjtcbmltcG9ydCB7IEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b24gfSBmcm9tIFwiLi4vY29tbW9uL0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cIjtcbmltcG9ydCB7IEJsb2NrQWRtaW5Db21wb25lbnRQYXBlciB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyXCI7XG5pbXBvcnQgeyBCbG9ja1ByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1ByZXZpZXdDb250ZW50XCI7XG5pbXBvcnQgeyBCbG9ja1JvdyB9IGZyb20gXCIuLi9jb21tb24vYmxvY2tSb3cvQmxvY2tSb3dcIjtcbmltcG9ydCB7IHVzZUJsb2Nrc0NvbmZpZyB9IGZyb20gXCIuLi9jb25maWcvQmxvY2tzQ29uZmlnQ29udGV4dFwiO1xuaW1wb3J0IHsgY3JlYXRlQmxvY2tTa2VsZXRvbiB9IGZyb20gXCIuLi9oZWxwZXJzL2NyZWF0ZUJsb2NrU2tlbGV0b25cIjtcbmltcG9ydCB7IGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi4vaGVscGVycy9kZWR1cGxpY2F0ZUJsb2NrRGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgeyBIb3ZlclByZXZpZXdDb21wb25lbnQgfSBmcm9tIFwiLi4vaWZyYW1lYnJpZGdlL0hvdmVyUHJldmlld0NvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2VsZWN0UHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvU2VsZWN0UHJldmlld0NvbXBvbmVudFwiO1xuaW1wb3J0IHsgdHlwZSBCbG9ja0RlcGVuZGVuY3ksIHR5cGUgQmxvY2tJbnRlcmZhY2UsIHR5cGUgQmxvY2tTdGF0ZSwgdHlwZSBQcmV2aWV3Q29udGVudCB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZU5ld1N0YXRlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBwYXJhbGxlbEFzeW5jRXZlcnkgfSBmcm9tIFwiLi4vdXRpbHMvcGFyYWxsZWxBc3luY0V2ZXJ5XCI7XG5cbi8vIFVzaW5nIHt9IGluc3RlYWQgb2YgUmVjb3JkPHN0cmluZywgbmV2ZXI+IGJlY2F1c2UgbmV2ZXIgYW5kIHVua25vd24gYXJlIGluY29tcGF0aWJsZS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbnR5cGUgRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzID0ge307XG5cbnR5cGUgQmxvY2tzQmxvY2tJdGVtPFxuICAgIFQgZXh0ZW5kcyBCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlLFxuICAgIEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMsXG4+ID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgcHJvcHM6IEJsb2NrU3RhdGU8VD47XG4gICAgc2xpZGVJbjogYm9vbGVhbjtcbn0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkcztcblxudHlwZSBSZW1vdmVkQmxvY2tzQmxvY2tJdGVtPFxuICAgIFQgZXh0ZW5kcyBCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlLFxuICAgIEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMsXG4+ID0gQmxvY2tzQmxvY2tJdGVtPFQsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiAmIHsgcmVtb3ZlZEF0OiBudW1iZXIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPiB7XG4gICAgYmxvY2tzOiBBcnJheTxcbiAgICAgICAge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICAgICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBwcm9wczogYW55O1xuICAgICAgICB9ICYgQWRkaXRpb25hbEl0ZW1GaWVsZHNcbiAgICA+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbnR5cGUgQmxvY2tUeXBlID0gc3RyaW5nO1xuXG5pbnRlcmZhY2UgQmxvY2tzQmxvY2tBZGRpdGlvbmFsSXRlbUZpZWxkPFZhbHVlID0gdW5rbm93bj4ge1xuICAgIGRlZmF1bHRWYWx1ZTogVmFsdWU7XG59XG5cbmludGVyZmFjZSBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZT86IFJlYWN0Tm9kZTtcbiAgICBzdXBwb3J0ZWRCbG9ja3M6IFJlY29yZDxCbG9ja1R5cGUsIEJsb2NrSW50ZXJmYWNlPjtcbiAgICBtYXhWaXNpYmxlQmxvY2tzPzogbnVtYmVyO1xuICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzPzoge1xuICAgICAgICBbS2V5IGluIGtleW9mIEFkZGl0aW9uYWxJdGVtRmllbGRzXTogQmxvY2tzQmxvY2tBZGRpdGlvbmFsSXRlbUZpZWxkPEFkZGl0aW9uYWxJdGVtRmllbGRzW0tleV0+O1xuICAgIH07XG4gICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zPzogRnVuY3Rpb25Db21wb25lbnQ8e1xuICAgICAgICBpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPjtcbiAgICAgICAgb25DaGFuZ2U6IChpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPikgPT4gdm9pZDtcbiAgICAgICAgb25NZW51Q2xvc2U6ICgpID0+IHZvaWQ7XG4gICAgfT47XG4gICAgQWRkaXRpb25hbEl0ZW1Db250ZW50PzogRnVuY3Rpb25Db21wb25lbnQ8eyBpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiB9PjtcbiAgICB0YWdzPzogQXJyYXk8TWVzc2FnZURlc2NyaXB0b3IgfCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmxvY2tzQmxvY2s8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4oXG4gICAge1xuICAgICAgICBzdXBwb3J0ZWRCbG9ja3MsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRpc3BsYXlOYW1lID0gPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MuYmxvY2tzLm5hbWVcIiBkZWZhdWx0TWVzc2FnZT1cIkJsb2Nrc1wiIC8+LFxuICAgICAgICBtYXhWaXNpYmxlQmxvY2tzLFxuICAgICAgICBhZGRpdGlvbmFsSXRlbUZpZWxkcyxcbiAgICAgICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQsXG4gICAgICAgIHRhZ3MsXG4gICAgfTogQ3JlYXRlQmxvY2tzQmxvY2tPcHRpb25zPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICBvdmVycmlkZT86IChcbiAgICAgICAgYmxvY2s6IEJsb2NrSW50ZXJmYWNlPFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgICAgICBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPlxuICAgICAgICA+LFxuICAgICkgPT4gQmxvY2tJbnRlcmZhY2U8QmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LCBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4+LFxuKTogQmxvY2tJbnRlcmZhY2U8QmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LCBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4+IHtcbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggbm8gc3VwcG9ydGVkIGJsb2NrIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2Ugc3BlY2lmeSBhdCBsZWFzdCB0d28gc3VwcG9ydGVkIGJsb2Nrcy5cIik7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKHN1cHBvcnRlZEJsb2NrcykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJsb2NrcyBibG9jayB3aXRoIGEgc2luZ2xlIGJsb2NrIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2UgdXNlIGEgbGlzdCBibG9jayAoY3JlYXRlTGlzdEJsb2NrKCkpIGluc3RlYWQuXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJsb2NrRm9yVHlwZSh0eXBlOiBzdHJpbmcpOiBCbG9ja0ludGVyZmFjZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gc3VwcG9ydGVkQmxvY2tzW3R5cGVdID8/IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHlwZUZvckJsb2NrKHRhcmdldEJsb2NrOiBQaWNrPEJsb2NrSW50ZXJmYWNlLCBcIm5hbWVcIj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmluZCgoWywgYmxvY2tdKSA9PiBibG9jay5uYW1lID09PSB0YXJnZXRCbG9jay5uYW1lKT8uWzBdID8/IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRUYWdzID0gT2JqZWN0LnZhbHVlcyhzdXBwb3J0ZWRCbG9ja3MpLnJlZHVjZTxBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz4+KChhY2MsIGJsb2NrKSA9PiB7XG4gICAgICAgIGlmIChibG9jay50YWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFjYywgLi4uYmxvY2sudGFnc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBCbG9ja3NCbG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgIEJsb2Nrc0Jsb2NrRnJhZ21lbnQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgPiA9IHtcbiAgICAgICAgLi4uY3JlYXRlQmxvY2tTa2VsZXRvbigpLFxuXG4gICAgICAgIG5hbWUsXG5cbiAgICAgICAgZGlzcGxheU5hbWUsXG5cbiAgICAgICAgdGFnczogdGFncyA/IHRhZ3MgOiBjaGlsZFRhZ3MsXG5cbiAgICAgICAgZGVmYXVsdFZhbHVlczogKCkgPT4gKHsgYmxvY2tzOiBbXSB9KSxcblxuICAgICAgICBpbnB1dDJTdGF0ZTogKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBpbnB1dC5ibG9ja3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcblxuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIGJsb2NrIHR5cGUgXCIke2NoaWxkLnR5cGV9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmlucHV0MlN0YXRlKGNoaWxkLnByb3BzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZSgoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBibG9ja3MsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHN0YXRlMk91dHB1dDogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2Nrczogc3RhdGUuYmxvY2tzLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY2hpbGQudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZTJPdXRwdXQoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgb3V0cHV0MlN0YXRlOiBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZTogQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBbXSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygb3V0cHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5ibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGF3YWl0IGJsb2NrLm91dHB1dDJTdGF0ZShjaGlsZC5wcm9wcywgY29udGV4dCksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNyZWF0ZVByZXZpZXdTdGF0ZTogKHN0YXRlLCBwcmV2aWV3Q3R4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsLFxuICAgICAgICAgICAgICAgIGJsb2Nrczogc3RhdGUuYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNoaWxkKSA9PiAocHJldmlld0N0eC5zaG93VmlzaWJsZU9ubHkgPyBjaGlsZC52aXNpYmxlIDogdHJ1ZSkpIC8vIGRlcGVuZGluZyBvbiBjb250ZXh0IHNob3cgYWxsIGJsb2NrcyBvciBvbmx5IHZpc2libGUgYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0FkbWluUm91dGUgPSBgJHtwcmV2aWV3Q3R4LnBhcmVudFVybFN1YlJvdXRlID8/IHByZXZpZXdDdHgucGFyZW50VXJsfS8ke2NoaWxkLmtleX0vYmxvY2tzYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2hpbGQudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IGJsb2NrQWRtaW5Sb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suY3JlYXRlUHJldmlld1N0YXRlKGNoaWxkLnByb3BzLCB7IC4uLnByZXZpZXdDdHgsIHBhcmVudFVybFN1YlJvdXRlOiB1bmRlZmluZWQsIHBhcmVudFVybDogYmxvY2tBZG1pblJvdXRlIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgYWRtaW5NZXRhOiB7IHJvdXRlOiBwcmV2aWV3Q3R4LnBhcmVudFVybCB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNWYWxpZDogYXN5bmMgKHN0YXRlKSA9PlxuICAgICAgICAgICAgcGFyYWxsZWxBc3luY0V2ZXJ5KHN0YXRlLmJsb2NrcywgYXN5bmMgKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2MudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5pc1ZhbGlkKGMucHJvcHMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIGNoaWxkQmxvY2tDb3VudDogKHN0YXRlKSA9PiBzdGF0ZS5ibG9ja3MubGVuZ3RoLFxuXG4gICAgICAgIGFuY2hvcnM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChhbmNob3JzLCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFuY2hvcnMsIC4uLihibG9jay5hbmNob3JzPy4oY2hpbGQucHJvcHMpID8/IFtdKV07XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVwZW5kZW5jaWVzOiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZERlcGVuZGVuY2llcyA9IHN0YXRlLmJsb2Nrcy5yZWR1Y2U8QmxvY2tEZXBlbmRlbmN5W10+KChkZXBlbmRlbmNpZXMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uZGVwZW5kZW5jaWVzLCAuLi4oYmxvY2suZGVwZW5kZW5jaWVzPy4oY2hpbGQucHJvcHMpID8/IFtdKV07XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWR1cGxpY2F0ZUJsb2NrRGVwZW5kZW5jaWVzKG1lcmdlZERlcGVuZGVuY2llcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVwbGFjZURlcGVuZGVuY2llc0luT3V0cHV0OiAob3V0cHV0LCByZXBsYWNlbWVudHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld091dHB1dDogQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+ID0geyBibG9ja3M6IFtdIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygb3V0cHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV3T3V0cHV0LmJsb2Nrcy5wdXNoKHsgLi4uY2hpbGQsIHByb3BzOiBibG9jay5yZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQoY2hpbGQucHJvcHMsIHJlcGxhY2VtZW50cykgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdPdXRwdXQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVmaW5lc093blBhZGRpbmc6IHRydWUsXG5cbiAgICAgICAgQWRtaW5Db21wb25lbnQ6ICh7IHN0YXRlLCB1cGRhdGVTdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b2dnbGVWaXNpYmxlID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGJsb2NrS2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IChjLmtleSA9PT0gYmxvY2tLZXkgPyB7IC4uLmMsIHZpc2libGU6ICFjLnZpc2libGUgfSA6IGMpKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IFtzaG93QWRkQmxvY2tEcmF3ZXIsIHNldFNob3dBZGRCbG9ja0RyYXdlcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBbYmVmb3JlSW5kZXgsIHNldEJlZm9yZUluZGV4XSA9IHVzZVN0YXRlPG51bWJlcj4oKTtcbiAgICAgICAgICAgIGNvbnN0IFtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IsIHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcl0gPSB1c2VTdGF0ZTxSZWFjdE5vZGU+KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNuYWNrYmFyQXBpID0gdXNlU25hY2tiYXJBcGkoKTtcblxuICAgICAgICAgICAgY29uc3QgdG90YWxWaXNpYmxlQmxvY2tzID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnZpc2libGUpLmxlbmd0aDtcblxuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLnNvbWUoKGJsb2NrKSA9PiBibG9jay5zbGlkZUluKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHsgLi4ucHJldlN0YXRlLCBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChibG9jaykgPT4gKHsgLi4uYmxvY2ssIHNsaWRlSW46IGZhbHNlIH0pKSB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtzdGF0ZS5ibG9ja3MsIHVwZGF0ZVN0YXRlXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVVuZG9DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChyZW1vdmVkQmxvY2tzOiBSZW1vdmVkQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbW92ZWRCbG9ja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IFsuLi5wcmV2U3RhdGUuYmxvY2tzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRCbG9ja3M/LmZvckVhY2goKHJlbW92ZWRCbG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVtb3ZlZEF0IH0gPSByZW1vdmVkQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2s6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ID0geyAuLi5yZW1vdmVkQmxvY2sgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYmxvY2sucmVtb3ZlZEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5zcGxpY2UocmVtb3ZlZEF0LCAwLCBibG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZGVsZXRlQmxvY2tzID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGJsb2NrS2V5czogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzVG9SZW1vdmUgPSBwcmV2U3RhdGUuYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoYmxvY2ssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCByZW1vdmVkQXQ6IGluZGV4IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2tLZXlzLmluY2x1ZGVzKGJsb2NrLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYWNrYmFyQXBpLnNob3dTbmFja2JhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VW5kb1NuYWNrYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmJsb2NrRGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJ7Y291bnQsIHBsdXJhbCwgb25lIHtibG9ja30gb3RoZXIgeyMgYmxvY2tzfX0gZGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBibG9ja3NUb1JlbW92ZS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZD17YmxvY2tzVG9SZW1vdmV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVW5kb0NsaWNrPXsoYmxvY2tzVG9SZW1vdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVuZG9DbGljayhibG9ja3NUb1JlbW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5maWx0ZXIoKGMpID0+ICFibG9ja0tleXMuaW5jbHVkZXMoYy5rZXkpKSB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtoYW5kbGVVbmRvQ2xpY2ssIHNuYWNrYmFyQXBpLCB1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2NrcyA9ICh2aXNpYmxlID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1Nob3cgPSBzdGF0ZS5ibG9ja3MubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLnZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrczogYmxvY2tzVG9TaG93IH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVEZWxldGVBbGxTZWxlY3RlZEJsb2NrcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb0RlbGV0ZSA9IHN0YXRlLmJsb2Nrcy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMuc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoXG4gICAgICAgICAgICAgICAgICAgIGJsb2Nrc1RvRGVsZXRlLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5rZXk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhZGROZXdCbG9jayA9ICh0eXBlOiBCbG9ja1R5cGUsIGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdXVpZCgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUodHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7dHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbTogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogbWF4VmlzaWJsZUJsb2NrcyA/IHRvdGFsVmlzaWJsZUJsb2NrcyA8IG1heFZpc2libGVCbG9ja3MgOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5kZWZhdWx0VmFsdWVzKCksXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgW2ZpZWxkLCB7IGRlZmF1bHRWYWx1ZSB9XSkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBkZWZhdWx0VmFsdWUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrcyA9IFsuLi5zdGF0ZS5ibG9ja3NdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tzLnNwbGljZShiZWZvcmVJbmRleCwgMCwgbmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tzLnB1c2gobmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBibG9ja3M6IG5ld0Jsb2NrcyxcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4gPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVTdWJCbG9ja3NGbjogRGlzcGF0Y2g8U2V0U3RhdGVBY3Rpb248dW5rbm93bj4+ID0gKHNldFN0YXRlQWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChjKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmtleSA9PT0gYmxvY2tLZXkgPyB7IC4uLmMsIHByb3BzOiByZXNvbHZlTmV3U3RhdGUoeyBwcmV2U3RhdGU6IGMucHJvcHMsIHNldFN0YXRlQWN0aW9uIH0pIH0gOiBjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdWJCbG9ja3NGbjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCB7IHNjb3BlIH0gPSB1c2VDb250ZW50U2NvcGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaXNCbG9ja1N1cHBvcnRlZCB9ID0gdXNlQmxvY2tzQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU3VwcG9ydGVkQmxvY2tzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQmxvY2tTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhzdXBwb3J0ZWRCbG9ja3MpLmZpbHRlcigoWywgYmxvY2tdKSA9PiBpc0Jsb2NrU3VwcG9ydGVkKGJsb2NrLCBzY29wZSkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwcG9ydGVkQmxvY2tzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtzY29wZSwgaXNCbG9ja1N1cHBvcnRlZF0pO1xuXG4gICAgICAgICAgICBjb25zdCB7IHVwZGF0ZUNsaXBib2FyZENvbnRlbnQsIGdldENsaXBib2FyZENvbnRlbnQgfSA9IHVzZUJsb2NrQ2xpcGJvYXJkKHsgc3VwcG9ydHM6IE9iamVjdC52YWx1ZXMoZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MpIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwYXN0ZUJsb2NrID0gYXN5bmMgKGluc2VydEF0OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldENsaXBib2FyZENvbnRlbnQoKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuY2FuUGFzdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yKHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZFZpc2libGVCbG9ja3MgPSBjb250ZW50LmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnZpc2libGUpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuQWRkVmlzaWJsZUJsb2NrID0gbWF4VmlzaWJsZUJsb2NrcyA/IHRvdGFsVmlzaWJsZUJsb2NrcyArIGNsaXBib2FyZFZpc2libGVCbG9ja3MgPD0gbWF4VmlzaWJsZUJsb2NrcyA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdID0gY29udGVudC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZvckJsb2NrKGJsb2NrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB0eXBlIGZvdW5kIGZvciBibG9jayBcIiR7YmxvY2submFtZX1cImApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdXVpZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNhbkFkZFZpc2libGVCbG9jayA/IGJsb2NrLnZpc2libGUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oYmxvY2suYWRkaXRpb25hbEZpZWxkcyBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBbLi4ucHJldlN0YXRlLmJsb2Nrcy5zbGljZSgwLCBpbnNlcnRBdCksIC4uLm5ld0Jsb2NrcywgLi4ucHJldlN0YXRlLmJsb2Nrcy5zbGljZShpbnNlcnRBdCldLm1hcCgoYmxvY2spID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQWRkQmxvY2tDbGljayA9IChiZWZvcmVJbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dBZGRCbG9ja0RyYXdlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleChiZWZvcmVJbmRleCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dBZGRCbG9ja0RyYXdlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2V0QmVmb3JlSW5kZXgodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVNlbGVjdEFsbCA9IChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdEJsb2NrID0gKGN1cnJlbnRCbG9jazogQmxvY2tzQmxvY2tJdGVtLCBzZWxlY3Q6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCBzZWxlY3RlZDogYmxvY2sgPT09IGN1cnJlbnRCbG9jayA/IHNlbGVjdCA6IGJsb2NrLnNlbGVjdGVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNvcHlTZWxlY3RlZEJsb2NrcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb0NvcHkgPSBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tJbnRlcmZhY2UgPSBibG9ja0ZvclR5cGUoYmxvY2sudHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2tJbnRlcmZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7YmxvY2sudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBibG9ja0ludGVyZmFjZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGJsb2NrLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHM6IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGJsb2NrW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlQ2xpcGJvYXJkQ29udGVudChibG9ja3NUb0NvcHkpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHN0YXRlLmJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiBibG9jay5zZWxlY3RlZCkubGVuZ3RoO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaCBkaXNhYmxlRm9yY2VQcm9tcHRSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1BhZ2UgbmFtZT1cIm1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RQcmV2aWV3Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIGRpc2FibGVQYWRkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0xpc3RIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZENvdW50ID09PSBzdGF0ZS5ibG9ja3MubGVuZ3RoICYmIHNlbGVjdGVkQ291bnQgPiAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZT17c2VsZWN0ZWRDb3VudCA+IDAgJiYgc2VsZWN0ZWRDb3VudCAhPT0gc3RhdGUuYmxvY2tzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVUb2dnbGVTZWxlY3RBbGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5zZWxlY3RBbGxcIiBkZWZhdWx0TWVzc2FnZT1cIlNlbGVjdCBhbGxcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc01lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIERvIG5vdCBzaG93IHRvZ2dsZSB2aXNpYmlsaXR5IG9mIGFsbCBzZWxlY3RlZCBibG9ja3MgYnV0dG9ucyB3aGVuIG1heFZpc2libGVCbG9ja3MgaXMgc2V0ICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshbWF4VmlzaWJsZUJsb2NrcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8VmlzaWJsZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2Nrcyh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIHZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0FjdGlvbnNJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PEludmlzaWJsZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2NrcygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLmludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWFrZSBpbnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZXBhcmF0b3IgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PERlbGV0ZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkQ291bnQgPT09IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uZGVsZXRlXCIgZGVmYXVsdE1lc3NhZ2U9XCJEZWxldGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0FjdGlvbnNJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxDb3B5IC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uY29weVwiIGRlZmF1bHRNZXNzYWdlPVwiQ29weVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW0gaWNvbj17PFBhc3RlIC8+fSBvbkNsaWNrPXsoKSA9PiBwYXN0ZUJsb2NrKDApfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24ucGFzdGVcIiBkZWZhdWx0TWVzc2FnZT1cIlBhc3RlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0xpc3RIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLm1hcCgoZGF0YSwgYmxvY2tJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTWF4VmlzaWJsZUJsb2Nrc1JlYWNoZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISFtYXhWaXNpYmxlQmxvY2tzICYmIHRvdGFsVmlzaWJsZUJsb2NrcyA+PSBtYXhWaXNpYmxlQmxvY2tzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5Ub2dnbGVWaXNpYmlsaXR5ID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA/IGRhdGEudmlzaWJsZSA6IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3dNYXhCbG9ja3NBbGxvd2VkTWVzc2FnZSA9IGlzTWF4VmlzaWJsZUJsb2Nrc1JlYWNoZWQgJiYgIWRhdGEudmlzaWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhvdmVyUHJldmlld0NvbXBvbmVudCBrZXk9e2RhdGEua2V5fSBjb21wb25lbnRTbHVnPXtgJHtkYXRhLmtleX0vYmxvY2tzYH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtkYXRhLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUHJldmlld0NvbnRlbnQ9eygpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja1ByZXZpZXdDb250ZW50IGJsb2NrPXtibG9ja30gc3RhdGU9e2RhdGEucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtibG9ja0luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbnRlbnRDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGRhdGEua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25EZWxldGVDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQmxvY2tzKFtkYXRhLmtleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQmxvY2s9eyhmcm9tLCB0bykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IFsuLi5wcmV2U3RhdGUuYmxvY2tzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja1RvTW92ZSA9IGJsb2Nrcy5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZSh0bywgMCwgYmxvY2tUb01vdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eUJ1dHRvbj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5ibG9jay5tYXhWaXNpYmxlQmxvY2tzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1heC4gdmlzaWJsZSBibG9ja3MgYWxsb3dlZDoge21heFZpc2libGVCbG9ja3N9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgbWF4VmlzaWJsZUJsb2NrcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBjb21wb25lbnQ9XCJzcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjYW5Ub2dnbGVWaXNpYmlsaXR5ICYmIHRvZ2dsZVZpc2libGUoZGF0YS5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuVG9nZ2xlVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2RhdGEudmlzaWJsZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VmlzaWJsZSBjb2xvcj1cInN1Y2Nlc3NcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW52aXNpYmxlIGNvbG9yPVwiYWN0aW9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZE5ld0Jsb2NrPXtoYW5kbGVBZGRCbG9ja0NsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvcHlDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoZGF0YS50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtkYXRhLnR5cGV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGRhdGEudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGRhdGEucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHM6IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBkYXRhW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QYXN0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZUJsb2NrKGJsb2NrSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2RhdGEuc2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0ZWRDbGljaz17KHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RCbG9jayhkYXRhLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWRGbj17KCkgPT4gYmxvY2suaXNWYWxpZChkYXRhLnByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVJbj17ZGF0YS5zbGlkZUlufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQm90dG9tSW5zZXJ0QmV0d2VlbkJ1dHRvbj17YmxvY2tJbmRleCA+PSBzdGF0ZS5ibG9ja3MubGVuZ3RoIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1lbnVJdGVtcz17KG9uTWVudUNsb3NlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh1cGRhdGVkSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZpb3VzU3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2aW91c1N0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5rZXkgPT09IGRhdGEua2V5ID8gdXBkYXRlZEl0ZW0gOiBibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQ29udGVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQgPyA8QWRkaXRpb25hbEl0ZW1Db250ZW50IGl0ZW09e2RhdGF9IC8+IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ib3ZlclByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hZGROZXdCbG9ja1wiIGRlZmF1bHRNZXNzYWdlPVwiQWRkIGJsb2NrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhcmdlQWRkQnV0dG9uQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZG1pbkNvbXBvbmVudFN0aWNreUZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQWRkQmxvY2tDbGljaygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SWNvbj17PEFkZCAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRCbG9ja0RyYXdlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17c2hvd0FkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VBZGRCbG9ja0RyYXdlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcz17ZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZE5ld0Jsb2NrPXsodHlwZSwgYWRkQW5kRWRpdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGFkZE5ld0Jsb2NrKHR5cGUsIGJlZm9yZUluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRBbmRFZGl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQXBpLmFjdGl2YXRlUGFnZShcImJsb2Nrc1wiLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RQcmV2aWV3Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tQYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwiYmxvY2tzXCIgdGl0bGU9XCJCbG9jayBiZWFyYmVpdGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhpZCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhzdGFja0FwaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gc3RhdGUuYmxvY2tzLmZpbmQoKGMpID0+IGMua2V5ID09PSBpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQXBpLmFjdGl2YXRlUGFnZShcIm1haW5cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShtYXRjaC50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1BhZ2VUaXRsZSB0aXRsZT17YmxvY2suZGlzcGxheU5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJsb2NrLkFkbWluQ29tcG9uZW50IHN0YXRlPXttYXRjaC5wcm9wc30gdXBkYXRlU3RhdGU9e2NyZWF0ZVVwZGF0ZVN1YkJsb2Nrc0ZuKGlkKX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2VUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tQYWdlPlxuICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICB7Y2Fubm90UGFzdGVCbG9ja0Vycm9yICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgb3BlbiBvbkNsb3NlPXsoKSA9PiBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IodW5kZWZpbmVkKX0gZXJyb3I9e2Nhbm5vdFBhc3RlQmxvY2tFcnJvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdDb250ZW50OiAoc3RhdGUsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmNvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJ7Y291bnQsIHBsdXJhbCwgPTAge05vIGJsb2Nrc30gb25lIHsjIGJsb2NrfSBvdGhlciB7IyBibG9ja3N9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBjb3VudDogc3RhdGUuYmxvY2tzLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxQcmV2aWV3Q29udGVudFtdPigocHJldiwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG5leHQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQcmV2aWV3Q29udGVudCA9IGJsb2NrLnByZXZpZXdDb250ZW50KG5leHQucHJvcHMsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4ubmV4dFByZXZpZXdDb250ZW50XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmVEZXBlbmRlbmN5UGF0aDogKHN0YXRlLCBqc29uUGF0aCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEvXmJsb2Nrcy5cXGQrLnByb3BzLy50ZXN0KGpzb25QYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJsb2Nrc0Jsb2NrOiBJbnZhbGlkIGpzb25QYXRoXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXRoQXJyID0ganNvblBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHBhdGhBcnJbMV0pO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJdGVtID0gc3RhdGUuYmxvY2tzW251bV07XG5cbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGJsb2NrSXRlbS50eXBlKTtcblxuICAgICAgICAgICAgaWYgKGJsb2NrID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEJsb2NrIGlzIG51bGxcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGJsb2NrLnJlc29sdmVEZXBlbmRlbmN5UGF0aChibG9ja0l0ZW0ucHJvcHMsIHBhdGhBcnIuc2xpY2UoMykuam9pbihcIi5cIikpO1xuICAgICAgICAgICAgcmV0dXJuIGAke2Jsb2NrSXRlbS5rZXl9L2Jsb2Nrcy8ke2NoaWxkUGF0aH1gO1xuICAgICAgICB9LFxuICAgICAgICBleHRyYWN0VGV4dENvbnRlbnRzOiAoc3RhdGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVJbnZpc2libGVDb250ZW50ID0gb3B0aW9ucz8uaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPz8gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPHN0cmluZ1tdPigoY29udGVudCwgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUgJiYgIWluY2x1ZGVJbnZpc2libGVDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uY29udGVudCwgLi4uKGJsb2NrLmV4dHJhY3RUZXh0Q29udGVudHM/LihjaGlsZC5wcm9wcywgb3B0aW9ucykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZShCbG9ja3NCbG9jayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJsb2Nrc0Jsb2NrO1xufVxuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMCwgMSl9O1xuYDtcblxuY29uc3QgQmxvY2tMaXN0SGVhZGVyQWN0aW9uQ29udGFpbmVyID0gc3R5bGVkKFwiZGl2XCIpYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAxMnB4IDA7XG5gO1xuXG5jb25zdCBTZWxlY3RBbGxGcm9tQ29udHJvbExhYmVsID0gc3R5bGVkKEZvcm1Db250cm9sTGFiZWwpYFxuICAgIHBhZGRpbmc6IDE1cHggMTBweCAxNXB4IDdweDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uQ29udGVudCA9IHN0eWxlZChcInNwYW5cIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogNHB4IDA7XG5gO1xuXG5jb25zdCBMYXJnZUFkZEJ1dHRvbkljb24gPSBzdHlsZWQoQWRkKWBcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuYDtcblxuY29uc3QgU2VwYXJhdG9yID0gc3R5bGVkKFwiZGl2XCIpYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHByb3BzKSA9PiBwcm9wcy50aGVtZS5wYWxldHRlLmdyZXlbXCIxMDBcIl19O1xuICAgIGhlaWdodDogMjJweDtcbiAgICB3aWR0aDogMXB4O1xuICAgIG1hcmdpbi1sZWZ0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuICAgIG1hcmdpbi1yaWdodDogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS5zcGFjaW5nKDEpfTtcbmA7XG4iXX0= */",
|
|
964
960
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
965
961
|
});
|
|
966
|
-
var SelectAllFromControlLabel = /*#__PURE__*/
|
|
962
|
+
var SelectAllFromControlLabel = /*#__PURE__*/styled(FormControlLabel, process.env.NODE_ENV === "production" ? {
|
|
967
963
|
target: "e1dbbzf53"
|
|
968
964
|
} : {
|
|
969
965
|
target: "e1dbbzf53",
|
|
@@ -976,7 +972,7 @@ var SelectAllFromControlLabel = /*#__PURE__*/(0, _styles.styled)(_material.FormC
|
|
|
976
972
|
styles: "padding:15px 10px 15px 7px/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvN0IwRCIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAY29tZXQvYWRtaW5cIjtcbmltcG9ydCB7IEFkZCwgQ29weSwgRGVsZXRlLCBJbnZpc2libGUsIFBhc3RlLCBWaXNpYmxlIH0gZnJvbSBcIkBjb21ldC9hZG1pbi1pY29uc1wiO1xuaW1wb3J0IHsgQm94LCBDaGVja2JveCwgRm9ybUNvbnRyb2xMYWJlbCwgSWNvbkJ1dHRvbiwgVHlwb2dyYXBoeSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9zdHlsZXNcIjtcbmltcG9ydCB7XG4gICAgdHlwZSBDaGFuZ2VFdmVudCxcbiAgICB0eXBlIERpc3BhdGNoLFxuICAgIHR5cGUgRnVuY3Rpb25Db21wb25lbnQsXG4gICAgdHlwZSBSZWFjdE5vZGUsXG4gICAgdHlwZSBTZXRTdGF0ZUFjdGlvbixcbiAgICB1c2VDYWxsYmFjayxcbiAgICB1c2VFZmZlY3QsXG4gICAgdXNlTWVtbyxcbiAgICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGb3JtYXR0ZWRNZXNzYWdlLCB0eXBlIE1lc3NhZ2VEZXNjcmlwdG9yIH0gZnJvbSBcInJlYWN0LWludGxcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuXG5pbXBvcnQgeyB1c2VDb250ZW50U2NvcGUgfSBmcm9tIFwiLi4vLi4vY29udGVudFNjb3BlL1Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBDYW5ub3RQYXN0ZUJsb2NrRGlhbG9nIH0gZnJvbSBcIi4uL2NsaXBib2FyZC9DYW5ub3RQYXN0ZUJsb2NrRGlhbG9nXCI7XG5pbXBvcnQgeyB1c2VCbG9ja0NsaXBib2FyZCB9IGZyb20gXCIuLi9jbGlwYm9hcmQvdXNlQmxvY2tDbGlwYm9hcmRcIjtcbmltcG9ydCB7IEFkZEJsb2NrRHJhd2VyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZGRCbG9ja0RyYXdlclwiO1xuaW1wb3J0IHsgQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXJcIjtcbmltcG9ydCB7IEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b24gfSBmcm9tIFwiLi4vY29tbW9uL0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cIjtcbmltcG9ydCB7IEJsb2NrQWRtaW5Db21wb25lbnRQYXBlciB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyXCI7XG5pbXBvcnQgeyBCbG9ja1ByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1ByZXZpZXdDb250ZW50XCI7XG5pbXBvcnQgeyBCbG9ja1JvdyB9IGZyb20gXCIuLi9jb21tb24vYmxvY2tSb3cvQmxvY2tSb3dcIjtcbmltcG9ydCB7IHVzZUJsb2Nrc0NvbmZpZyB9IGZyb20gXCIuLi9jb25maWcvQmxvY2tzQ29uZmlnQ29udGV4dFwiO1xuaW1wb3J0IHsgY3JlYXRlQmxvY2tTa2VsZXRvbiB9IGZyb20gXCIuLi9oZWxwZXJzL2NyZWF0ZUJsb2NrU2tlbGV0b25cIjtcbmltcG9ydCB7IGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi4vaGVscGVycy9kZWR1cGxpY2F0ZUJsb2NrRGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgeyBIb3ZlclByZXZpZXdDb21wb25lbnQgfSBmcm9tIFwiLi4vaWZyYW1lYnJpZGdlL0hvdmVyUHJldmlld0NvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2VsZWN0UHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvU2VsZWN0UHJldmlld0NvbXBvbmVudFwiO1xuaW1wb3J0IHsgdHlwZSBCbG9ja0RlcGVuZGVuY3ksIHR5cGUgQmxvY2tJbnRlcmZhY2UsIHR5cGUgQmxvY2tTdGF0ZSwgdHlwZSBQcmV2aWV3Q29udGVudCB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZU5ld1N0YXRlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBwYXJhbGxlbEFzeW5jRXZlcnkgfSBmcm9tIFwiLi4vdXRpbHMvcGFyYWxsZWxBc3luY0V2ZXJ5XCI7XG5cbi8vIFVzaW5nIHt9IGluc3RlYWQgb2YgUmVjb3JkPHN0cmluZywgbmV2ZXI+IGJlY2F1c2UgbmV2ZXIgYW5kIHVua25vd24gYXJlIGluY29tcGF0aWJsZS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbnR5cGUgRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzID0ge307XG5cbnR5cGUgQmxvY2tzQmxvY2tJdGVtPFxuICAgIFQgZXh0ZW5kcyBCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlLFxuICAgIEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMsXG4+ID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgcHJvcHM6IEJsb2NrU3RhdGU8VD47XG4gICAgc2xpZGVJbjogYm9vbGVhbjtcbn0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkcztcblxudHlwZSBSZW1vdmVkQmxvY2tzQmxvY2tJdGVtPFxuICAgIFQgZXh0ZW5kcyBCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlLFxuICAgIEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMsXG4+ID0gQmxvY2tzQmxvY2tJdGVtPFQsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiAmIHsgcmVtb3ZlZEF0OiBudW1iZXIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPiB7XG4gICAgYmxvY2tzOiBBcnJheTxcbiAgICAgICAge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICAgICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBwcm9wczogYW55O1xuICAgICAgICB9ICYgQWRkaXRpb25hbEl0ZW1GaWVsZHNcbiAgICA+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbnR5cGUgQmxvY2tUeXBlID0gc3RyaW5nO1xuXG5pbnRlcmZhY2UgQmxvY2tzQmxvY2tBZGRpdGlvbmFsSXRlbUZpZWxkPFZhbHVlID0gdW5rbm93bj4ge1xuICAgIGRlZmF1bHRWYWx1ZTogVmFsdWU7XG59XG5cbmludGVyZmFjZSBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZT86IFJlYWN0Tm9kZTtcbiAgICBzdXBwb3J0ZWRCbG9ja3M6IFJlY29yZDxCbG9ja1R5cGUsIEJsb2NrSW50ZXJmYWNlPjtcbiAgICBtYXhWaXNpYmxlQmxvY2tzPzogbnVtYmVyO1xuICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzPzoge1xuICAgICAgICBbS2V5IGluIGtleW9mIEFkZGl0aW9uYWxJdGVtRmllbGRzXTogQmxvY2tzQmxvY2tBZGRpdGlvbmFsSXRlbUZpZWxkPEFkZGl0aW9uYWxJdGVtRmllbGRzW0tleV0+O1xuICAgIH07XG4gICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zPzogRnVuY3Rpb25Db21wb25lbnQ8e1xuICAgICAgICBpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPjtcbiAgICAgICAgb25DaGFuZ2U6IChpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPikgPT4gdm9pZDtcbiAgICAgICAgb25NZW51Q2xvc2U6ICgpID0+IHZvaWQ7XG4gICAgfT47XG4gICAgQWRkaXRpb25hbEl0ZW1Db250ZW50PzogRnVuY3Rpb25Db21wb25lbnQ8eyBpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiB9PjtcbiAgICB0YWdzPzogQXJyYXk8TWVzc2FnZURlc2NyaXB0b3IgfCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmxvY2tzQmxvY2s8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4oXG4gICAge1xuICAgICAgICBzdXBwb3J0ZWRCbG9ja3MsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRpc3BsYXlOYW1lID0gPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MuYmxvY2tzLm5hbWVcIiBkZWZhdWx0TWVzc2FnZT1cIkJsb2Nrc1wiIC8+LFxuICAgICAgICBtYXhWaXNpYmxlQmxvY2tzLFxuICAgICAgICBhZGRpdGlvbmFsSXRlbUZpZWxkcyxcbiAgICAgICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQsXG4gICAgICAgIHRhZ3MsXG4gICAgfTogQ3JlYXRlQmxvY2tzQmxvY2tPcHRpb25zPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICBvdmVycmlkZT86IChcbiAgICAgICAgYmxvY2s6IEJsb2NrSW50ZXJmYWNlPFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgICAgICBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPlxuICAgICAgICA+LFxuICAgICkgPT4gQmxvY2tJbnRlcmZhY2U8QmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LCBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4+LFxuKTogQmxvY2tJbnRlcmZhY2U8QmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LCBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4+IHtcbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggbm8gc3VwcG9ydGVkIGJsb2NrIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2Ugc3BlY2lmeSBhdCBsZWFzdCB0d28gc3VwcG9ydGVkIGJsb2Nrcy5cIik7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKHN1cHBvcnRlZEJsb2NrcykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJsb2NrcyBibG9jayB3aXRoIGEgc2luZ2xlIGJsb2NrIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2UgdXNlIGEgbGlzdCBibG9jayAoY3JlYXRlTGlzdEJsb2NrKCkpIGluc3RlYWQuXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJsb2NrRm9yVHlwZSh0eXBlOiBzdHJpbmcpOiBCbG9ja0ludGVyZmFjZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gc3VwcG9ydGVkQmxvY2tzW3R5cGVdID8/IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHlwZUZvckJsb2NrKHRhcmdldEJsb2NrOiBQaWNrPEJsb2NrSW50ZXJmYWNlLCBcIm5hbWVcIj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmluZCgoWywgYmxvY2tdKSA9PiBibG9jay5uYW1lID09PSB0YXJnZXRCbG9jay5uYW1lKT8uWzBdID8/IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRUYWdzID0gT2JqZWN0LnZhbHVlcyhzdXBwb3J0ZWRCbG9ja3MpLnJlZHVjZTxBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz4+KChhY2MsIGJsb2NrKSA9PiB7XG4gICAgICAgIGlmIChibG9jay50YWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFjYywgLi4uYmxvY2sudGFnc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBCbG9ja3NCbG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgIEJsb2Nrc0Jsb2NrRnJhZ21lbnQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgPiA9IHtcbiAgICAgICAgLi4uY3JlYXRlQmxvY2tTa2VsZXRvbigpLFxuXG4gICAgICAgIG5hbWUsXG5cbiAgICAgICAgZGlzcGxheU5hbWUsXG5cbiAgICAgICAgdGFnczogdGFncyA/IHRhZ3MgOiBjaGlsZFRhZ3MsXG5cbiAgICAgICAgZGVmYXVsdFZhbHVlczogKCkgPT4gKHsgYmxvY2tzOiBbXSB9KSxcblxuICAgICAgICBpbnB1dDJTdGF0ZTogKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBpbnB1dC5ibG9ja3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcblxuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIGJsb2NrIHR5cGUgXCIke2NoaWxkLnR5cGV9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmlucHV0MlN0YXRlKGNoaWxkLnByb3BzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZSgoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBibG9ja3MsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHN0YXRlMk91dHB1dDogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2Nrczogc3RhdGUuYmxvY2tzLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY2hpbGQudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZTJPdXRwdXQoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgb3V0cHV0MlN0YXRlOiBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZTogQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBbXSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygb3V0cHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5ibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGF3YWl0IGJsb2NrLm91dHB1dDJTdGF0ZShjaGlsZC5wcm9wcywgY29udGV4dCksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNyZWF0ZVByZXZpZXdTdGF0ZTogKHN0YXRlLCBwcmV2aWV3Q3R4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsLFxuICAgICAgICAgICAgICAgIGJsb2Nrczogc3RhdGUuYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNoaWxkKSA9PiAocHJldmlld0N0eC5zaG93VmlzaWJsZU9ubHkgPyBjaGlsZC52aXNpYmxlIDogdHJ1ZSkpIC8vIGRlcGVuZGluZyBvbiBjb250ZXh0IHNob3cgYWxsIGJsb2NrcyBvciBvbmx5IHZpc2libGUgYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0FkbWluUm91dGUgPSBgJHtwcmV2aWV3Q3R4LnBhcmVudFVybFN1YlJvdXRlID8/IHByZXZpZXdDdHgucGFyZW50VXJsfS8ke2NoaWxkLmtleX0vYmxvY2tzYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2hpbGQudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IGJsb2NrQWRtaW5Sb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suY3JlYXRlUHJldmlld1N0YXRlKGNoaWxkLnByb3BzLCB7IC4uLnByZXZpZXdDdHgsIHBhcmVudFVybFN1YlJvdXRlOiB1bmRlZmluZWQsIHBhcmVudFVybDogYmxvY2tBZG1pblJvdXRlIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgYWRtaW5NZXRhOiB7IHJvdXRlOiBwcmV2aWV3Q3R4LnBhcmVudFVybCB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNWYWxpZDogYXN5bmMgKHN0YXRlKSA9PlxuICAgICAgICAgICAgcGFyYWxsZWxBc3luY0V2ZXJ5KHN0YXRlLmJsb2NrcywgYXN5bmMgKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2MudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5pc1ZhbGlkKGMucHJvcHMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIGNoaWxkQmxvY2tDb3VudDogKHN0YXRlKSA9PiBzdGF0ZS5ibG9ja3MubGVuZ3RoLFxuXG4gICAgICAgIGFuY2hvcnM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChhbmNob3JzLCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFuY2hvcnMsIC4uLihibG9jay5hbmNob3JzPy4oY2hpbGQucHJvcHMpID8/IFtdKV07XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVwZW5kZW5jaWVzOiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZERlcGVuZGVuY2llcyA9IHN0YXRlLmJsb2Nrcy5yZWR1Y2U8QmxvY2tEZXBlbmRlbmN5W10+KChkZXBlbmRlbmNpZXMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uZGVwZW5kZW5jaWVzLCAuLi4oYmxvY2suZGVwZW5kZW5jaWVzPy4oY2hpbGQucHJvcHMpID8/IFtdKV07XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWR1cGxpY2F0ZUJsb2NrRGVwZW5kZW5jaWVzKG1lcmdlZERlcGVuZGVuY2llcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVwbGFjZURlcGVuZGVuY2llc0luT3V0cHV0OiAob3V0cHV0LCByZXBsYWNlbWVudHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld091dHB1dDogQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+ID0geyBibG9ja3M6IFtdIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygb3V0cHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV3T3V0cHV0LmJsb2Nrcy5wdXNoKHsgLi4uY2hpbGQsIHByb3BzOiBibG9jay5yZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQoY2hpbGQucHJvcHMsIHJlcGxhY2VtZW50cykgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdPdXRwdXQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVmaW5lc093blBhZGRpbmc6IHRydWUsXG5cbiAgICAgICAgQWRtaW5Db21wb25lbnQ6ICh7IHN0YXRlLCB1cGRhdGVTdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b2dnbGVWaXNpYmxlID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGJsb2NrS2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IChjLmtleSA9PT0gYmxvY2tLZXkgPyB7IC4uLmMsIHZpc2libGU6ICFjLnZpc2libGUgfSA6IGMpKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IFtzaG93QWRkQmxvY2tEcmF3ZXIsIHNldFNob3dBZGRCbG9ja0RyYXdlcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBbYmVmb3JlSW5kZXgsIHNldEJlZm9yZUluZGV4XSA9IHVzZVN0YXRlPG51bWJlcj4oKTtcbiAgICAgICAgICAgIGNvbnN0IFtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IsIHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcl0gPSB1c2VTdGF0ZTxSZWFjdE5vZGU+KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNuYWNrYmFyQXBpID0gdXNlU25hY2tiYXJBcGkoKTtcblxuICAgICAgICAgICAgY29uc3QgdG90YWxWaXNpYmxlQmxvY2tzID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnZpc2libGUpLmxlbmd0aDtcblxuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLnNvbWUoKGJsb2NrKSA9PiBibG9jay5zbGlkZUluKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHsgLi4ucHJldlN0YXRlLCBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChibG9jaykgPT4gKHsgLi4uYmxvY2ssIHNsaWRlSW46IGZhbHNlIH0pKSB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtzdGF0ZS5ibG9ja3MsIHVwZGF0ZVN0YXRlXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVVuZG9DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChyZW1vdmVkQmxvY2tzOiBSZW1vdmVkQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbW92ZWRCbG9ja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IFsuLi5wcmV2U3RhdGUuYmxvY2tzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRCbG9ja3M/LmZvckVhY2goKHJlbW92ZWRCbG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVtb3ZlZEF0IH0gPSByZW1vdmVkQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2s6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ID0geyAuLi5yZW1vdmVkQmxvY2sgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYmxvY2sucmVtb3ZlZEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5zcGxpY2UocmVtb3ZlZEF0LCAwLCBibG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZGVsZXRlQmxvY2tzID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGJsb2NrS2V5czogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzVG9SZW1vdmUgPSBwcmV2U3RhdGUuYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoYmxvY2ssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCByZW1vdmVkQXQ6IGluZGV4IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2tLZXlzLmluY2x1ZGVzKGJsb2NrLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYWNrYmFyQXBpLnNob3dTbmFja2JhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VW5kb1NuYWNrYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmJsb2NrRGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJ7Y291bnQsIHBsdXJhbCwgb25lIHtibG9ja30gb3RoZXIgeyMgYmxvY2tzfX0gZGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBibG9ja3NUb1JlbW92ZS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZD17YmxvY2tzVG9SZW1vdmV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVW5kb0NsaWNrPXsoYmxvY2tzVG9SZW1vdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVuZG9DbGljayhibG9ja3NUb1JlbW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5maWx0ZXIoKGMpID0+ICFibG9ja0tleXMuaW5jbHVkZXMoYy5rZXkpKSB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtoYW5kbGVVbmRvQ2xpY2ssIHNuYWNrYmFyQXBpLCB1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2NrcyA9ICh2aXNpYmxlID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1Nob3cgPSBzdGF0ZS5ibG9ja3MubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLnZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrczogYmxvY2tzVG9TaG93IH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVEZWxldGVBbGxTZWxlY3RlZEJsb2NrcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb0RlbGV0ZSA9IHN0YXRlLmJsb2Nrcy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMuc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoXG4gICAgICAgICAgICAgICAgICAgIGJsb2Nrc1RvRGVsZXRlLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5rZXk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhZGROZXdCbG9jayA9ICh0eXBlOiBCbG9ja1R5cGUsIGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdXVpZCgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUodHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7dHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbTogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogbWF4VmlzaWJsZUJsb2NrcyA/IHRvdGFsVmlzaWJsZUJsb2NrcyA8IG1heFZpc2libGVCbG9ja3MgOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5kZWZhdWx0VmFsdWVzKCksXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgW2ZpZWxkLCB7IGRlZmF1bHRWYWx1ZSB9XSkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBkZWZhdWx0VmFsdWUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrcyA9IFsuLi5zdGF0ZS5ibG9ja3NdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tzLnNwbGljZShiZWZvcmVJbmRleCwgMCwgbmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tzLnB1c2gobmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBibG9ja3M6IG5ld0Jsb2NrcyxcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4gPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVTdWJCbG9ja3NGbjogRGlzcGF0Y2g8U2V0U3RhdGVBY3Rpb248dW5rbm93bj4+ID0gKHNldFN0YXRlQWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChjKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmtleSA9PT0gYmxvY2tLZXkgPyB7IC4uLmMsIHByb3BzOiByZXNvbHZlTmV3U3RhdGUoeyBwcmV2U3RhdGU6IGMucHJvcHMsIHNldFN0YXRlQWN0aW9uIH0pIH0gOiBjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdWJCbG9ja3NGbjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCB7IHNjb3BlIH0gPSB1c2VDb250ZW50U2NvcGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaXNCbG9ja1N1cHBvcnRlZCB9ID0gdXNlQmxvY2tzQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU3VwcG9ydGVkQmxvY2tzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQmxvY2tTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhzdXBwb3J0ZWRCbG9ja3MpLmZpbHRlcigoWywgYmxvY2tdKSA9PiBpc0Jsb2NrU3VwcG9ydGVkKGJsb2NrLCBzY29wZSkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwcG9ydGVkQmxvY2tzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtzY29wZSwgaXNCbG9ja1N1cHBvcnRlZF0pO1xuXG4gICAgICAgICAgICBjb25zdCB7IHVwZGF0ZUNsaXBib2FyZENvbnRlbnQsIGdldENsaXBib2FyZENvbnRlbnQgfSA9IHVzZUJsb2NrQ2xpcGJvYXJkKHsgc3VwcG9ydHM6IE9iamVjdC52YWx1ZXMoZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MpIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwYXN0ZUJsb2NrID0gYXN5bmMgKGluc2VydEF0OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldENsaXBib2FyZENvbnRlbnQoKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuY2FuUGFzdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yKHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZFZpc2libGVCbG9ja3MgPSBjb250ZW50LmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnZpc2libGUpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuQWRkVmlzaWJsZUJsb2NrID0gbWF4VmlzaWJsZUJsb2NrcyA/IHRvdGFsVmlzaWJsZUJsb2NrcyArIGNsaXBib2FyZFZpc2libGVCbG9ja3MgPD0gbWF4VmlzaWJsZUJsb2NrcyA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdID0gY29udGVudC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZvckJsb2NrKGJsb2NrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB0eXBlIGZvdW5kIGZvciBibG9jayBcIiR7YmxvY2submFtZX1cImApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdXVpZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNhbkFkZFZpc2libGVCbG9jayA/IGJsb2NrLnZpc2libGUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oYmxvY2suYWRkaXRpb25hbEZpZWxkcyBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBbLi4ucHJldlN0YXRlLmJsb2Nrcy5zbGljZSgwLCBpbnNlcnRBdCksIC4uLm5ld0Jsb2NrcywgLi4ucHJldlN0YXRlLmJsb2Nrcy5zbGljZShpbnNlcnRBdCldLm1hcCgoYmxvY2spID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQWRkQmxvY2tDbGljayA9IChiZWZvcmVJbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dBZGRCbG9ja0RyYXdlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleChiZWZvcmVJbmRleCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dBZGRCbG9ja0RyYXdlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2V0QmVmb3JlSW5kZXgodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVNlbGVjdEFsbCA9IChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdEJsb2NrID0gKGN1cnJlbnRCbG9jazogQmxvY2tzQmxvY2tJdGVtLCBzZWxlY3Q6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCBzZWxlY3RlZDogYmxvY2sgPT09IGN1cnJlbnRCbG9jayA/IHNlbGVjdCA6IGJsb2NrLnNlbGVjdGVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNvcHlTZWxlY3RlZEJsb2NrcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb0NvcHkgPSBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tJbnRlcmZhY2UgPSBibG9ja0ZvclR5cGUoYmxvY2sudHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2tJbnRlcmZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7YmxvY2sudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBibG9ja0ludGVyZmFjZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGJsb2NrLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHM6IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGJsb2NrW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlQ2xpcGJvYXJkQ29udGVudChibG9ja3NUb0NvcHkpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHN0YXRlLmJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiBibG9jay5zZWxlY3RlZCkubGVuZ3RoO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaCBkaXNhYmxlRm9yY2VQcm9tcHRSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1BhZ2UgbmFtZT1cIm1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RQcmV2aWV3Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIGRpc2FibGVQYWRkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0xpc3RIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZENvdW50ID09PSBzdGF0ZS5ibG9ja3MubGVuZ3RoICYmIHNlbGVjdGVkQ291bnQgPiAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZT17c2VsZWN0ZWRDb3VudCA+IDAgJiYgc2VsZWN0ZWRDb3VudCAhPT0gc3RhdGUuYmxvY2tzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVUb2dnbGVTZWxlY3RBbGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5zZWxlY3RBbGxcIiBkZWZhdWx0TWVzc2FnZT1cIlNlbGVjdCBhbGxcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc01lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIERvIG5vdCBzaG93IHRvZ2dsZSB2aXNpYmlsaXR5IG9mIGFsbCBzZWxlY3RlZCBibG9ja3MgYnV0dG9ucyB3aGVuIG1heFZpc2libGVCbG9ja3MgaXMgc2V0ICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshbWF4VmlzaWJsZUJsb2NrcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8VmlzaWJsZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2Nrcyh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIHZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0FjdGlvbnNJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PEludmlzaWJsZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2NrcygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLmludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWFrZSBpbnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZXBhcmF0b3IgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PERlbGV0ZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkQ291bnQgPT09IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uZGVsZXRlXCIgZGVmYXVsdE1lc3NhZ2U9XCJEZWxldGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0FjdGlvbnNJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxDb3B5IC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uY29weVwiIGRlZmF1bHRNZXNzYWdlPVwiQ29weVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW0gaWNvbj17PFBhc3RlIC8+fSBvbkNsaWNrPXsoKSA9PiBwYXN0ZUJsb2NrKDApfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24ucGFzdGVcIiBkZWZhdWx0TWVzc2FnZT1cIlBhc3RlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0xpc3RIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLm1hcCgoZGF0YSwgYmxvY2tJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTWF4VmlzaWJsZUJsb2Nrc1JlYWNoZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISFtYXhWaXNpYmxlQmxvY2tzICYmIHRvdGFsVmlzaWJsZUJsb2NrcyA+PSBtYXhWaXNpYmxlQmxvY2tzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5Ub2dnbGVWaXNpYmlsaXR5ID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA/IGRhdGEudmlzaWJsZSA6IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3dNYXhCbG9ja3NBbGxvd2VkTWVzc2FnZSA9IGlzTWF4VmlzaWJsZUJsb2Nrc1JlYWNoZWQgJiYgIWRhdGEudmlzaWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhvdmVyUHJldmlld0NvbXBvbmVudCBrZXk9e2RhdGEua2V5fSBjb21wb25lbnRTbHVnPXtgJHtkYXRhLmtleX0vYmxvY2tzYH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtkYXRhLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUHJldmlld0NvbnRlbnQ9eygpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja1ByZXZpZXdDb250ZW50IGJsb2NrPXtibG9ja30gc3RhdGU9e2RhdGEucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtibG9ja0luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbnRlbnRDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGRhdGEua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25EZWxldGVDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQmxvY2tzKFtkYXRhLmtleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQmxvY2s9eyhmcm9tLCB0bykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IFsuLi5wcmV2U3RhdGUuYmxvY2tzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja1RvTW92ZSA9IGJsb2Nrcy5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZSh0bywgMCwgYmxvY2tUb01vdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eUJ1dHRvbj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5ibG9jay5tYXhWaXNpYmxlQmxvY2tzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1heC4gdmlzaWJsZSBibG9ja3MgYWxsb3dlZDoge21heFZpc2libGVCbG9ja3N9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgbWF4VmlzaWJsZUJsb2NrcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBjb21wb25lbnQ9XCJzcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjYW5Ub2dnbGVWaXNpYmlsaXR5ICYmIHRvZ2dsZVZpc2libGUoZGF0YS5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuVG9nZ2xlVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2RhdGEudmlzaWJsZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VmlzaWJsZSBjb2xvcj1cInN1Y2Nlc3NcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW52aXNpYmxlIGNvbG9yPVwiYWN0aW9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZE5ld0Jsb2NrPXtoYW5kbGVBZGRCbG9ja0NsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvcHlDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoZGF0YS50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtkYXRhLnR5cGV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGRhdGEudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGRhdGEucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHM6IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBkYXRhW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QYXN0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZUJsb2NrKGJsb2NrSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2RhdGEuc2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0ZWRDbGljaz17KHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RCbG9jayhkYXRhLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWRGbj17KCkgPT4gYmxvY2suaXNWYWxpZChkYXRhLnByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVJbj17ZGF0YS5zbGlkZUlufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQm90dG9tSW5zZXJ0QmV0d2VlbkJ1dHRvbj17YmxvY2tJbmRleCA+PSBzdGF0ZS5ibG9ja3MubGVuZ3RoIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1lbnVJdGVtcz17KG9uTWVudUNsb3NlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh1cGRhdGVkSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZpb3VzU3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2aW91c1N0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5rZXkgPT09IGRhdGEua2V5ID8gdXBkYXRlZEl0ZW0gOiBibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQ29udGVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQgPyA8QWRkaXRpb25hbEl0ZW1Db250ZW50IGl0ZW09e2RhdGF9IC8+IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ib3ZlclByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hZGROZXdCbG9ja1wiIGRlZmF1bHRNZXNzYWdlPVwiQWRkIGJsb2NrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhcmdlQWRkQnV0dG9uQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZG1pbkNvbXBvbmVudFN0aWNreUZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQWRkQmxvY2tDbGljaygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SWNvbj17PEFkZCAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRCbG9ja0RyYXdlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17c2hvd0FkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VBZGRCbG9ja0RyYXdlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcz17ZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZE5ld0Jsb2NrPXsodHlwZSwgYWRkQW5kRWRpdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGFkZE5ld0Jsb2NrKHR5cGUsIGJlZm9yZUluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRBbmRFZGl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQXBpLmFjdGl2YXRlUGFnZShcImJsb2Nrc1wiLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RQcmV2aWV3Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tQYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwiYmxvY2tzXCIgdGl0bGU9XCJCbG9jayBiZWFyYmVpdGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhpZCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhzdGFja0FwaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gc3RhdGUuYmxvY2tzLmZpbmQoKGMpID0+IGMua2V5ID09PSBpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQXBpLmFjdGl2YXRlUGFnZShcIm1haW5cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShtYXRjaC50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1BhZ2VUaXRsZSB0aXRsZT17YmxvY2suZGlzcGxheU5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJsb2NrLkFkbWluQ29tcG9uZW50IHN0YXRlPXttYXRjaC5wcm9wc30gdXBkYXRlU3RhdGU9e2NyZWF0ZVVwZGF0ZVN1YkJsb2Nrc0ZuKGlkKX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2VUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tQYWdlPlxuICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICB7Y2Fubm90UGFzdGVCbG9ja0Vycm9yICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgb3BlbiBvbkNsb3NlPXsoKSA9PiBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IodW5kZWZpbmVkKX0gZXJyb3I9e2Nhbm5vdFBhc3RlQmxvY2tFcnJvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdDb250ZW50OiAoc3RhdGUsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmNvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJ7Y291bnQsIHBsdXJhbCwgPTAge05vIGJsb2Nrc30gb25lIHsjIGJsb2NrfSBvdGhlciB7IyBibG9ja3N9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBjb3VudDogc3RhdGUuYmxvY2tzLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxQcmV2aWV3Q29udGVudFtdPigocHJldiwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG5leHQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQcmV2aWV3Q29udGVudCA9IGJsb2NrLnByZXZpZXdDb250ZW50KG5leHQucHJvcHMsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4ubmV4dFByZXZpZXdDb250ZW50XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmVEZXBlbmRlbmN5UGF0aDogKHN0YXRlLCBqc29uUGF0aCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEvXmJsb2Nrcy5cXGQrLnByb3BzLy50ZXN0KGpzb25QYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJsb2Nrc0Jsb2NrOiBJbnZhbGlkIGpzb25QYXRoXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXRoQXJyID0ganNvblBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHBhdGhBcnJbMV0pO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJdGVtID0gc3RhdGUuYmxvY2tzW251bV07XG5cbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGJsb2NrSXRlbS50eXBlKTtcblxuICAgICAgICAgICAgaWYgKGJsb2NrID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEJsb2NrIGlzIG51bGxcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGJsb2NrLnJlc29sdmVEZXBlbmRlbmN5UGF0aChibG9ja0l0ZW0ucHJvcHMsIHBhdGhBcnIuc2xpY2UoMykuam9pbihcIi5cIikpO1xuICAgICAgICAgICAgcmV0dXJuIGAke2Jsb2NrSXRlbS5rZXl9L2Jsb2Nrcy8ke2NoaWxkUGF0aH1gO1xuICAgICAgICB9LFxuICAgICAgICBleHRyYWN0VGV4dENvbnRlbnRzOiAoc3RhdGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVJbnZpc2libGVDb250ZW50ID0gb3B0aW9ucz8uaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPz8gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPHN0cmluZ1tdPigoY29udGVudCwgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUgJiYgIWluY2x1ZGVJbnZpc2libGVDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uY29udGVudCwgLi4uKGJsb2NrLmV4dHJhY3RUZXh0Q29udGVudHM/LihjaGlsZC5wcm9wcywgb3B0aW9ucykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZShCbG9ja3NCbG9jayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJsb2Nrc0Jsb2NrO1xufVxuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMCwgMSl9O1xuYDtcblxuY29uc3QgQmxvY2tMaXN0SGVhZGVyQWN0aW9uQ29udGFpbmVyID0gc3R5bGVkKFwiZGl2XCIpYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAxMnB4IDA7XG5gO1xuXG5jb25zdCBTZWxlY3RBbGxGcm9tQ29udHJvbExhYmVsID0gc3R5bGVkKEZvcm1Db250cm9sTGFiZWwpYFxuICAgIHBhZGRpbmc6IDE1cHggMTBweCAxNXB4IDdweDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uQ29udGVudCA9IHN0eWxlZChcInNwYW5cIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogNHB4IDA7XG5gO1xuXG5jb25zdCBMYXJnZUFkZEJ1dHRvbkljb24gPSBzdHlsZWQoQWRkKWBcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuYDtcblxuY29uc3QgU2VwYXJhdG9yID0gc3R5bGVkKFwiZGl2XCIpYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHByb3BzKSA9PiBwcm9wcy50aGVtZS5wYWxldHRlLmdyZXlbXCIxMDBcIl19O1xuICAgIGhlaWdodDogMjJweDtcbiAgICB3aWR0aDogMXB4O1xuICAgIG1hcmdpbi1sZWZ0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuICAgIG1hcmdpbi1yaWdodDogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS5zcGFjaW5nKDEpfTtcbmA7XG4iXX0= */",
|
|
977
973
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
978
974
|
});
|
|
979
|
-
var LargeAddButtonContent = /*#__PURE__*/
|
|
975
|
+
var LargeAddButtonContent = /*#__PURE__*/styled("span", process.env.NODE_ENV === "production" ? {
|
|
980
976
|
target: "e1dbbzf52"
|
|
981
977
|
} : {
|
|
982
978
|
target: "e1dbbzf52",
|
|
@@ -989,7 +985,7 @@ var LargeAddButtonContent = /*#__PURE__*/(0, _styles.styled)("span", process.env
|
|
|
989
985
|
styles: "display:flex;flex-direction:column;align-items:center;padding:4px 0/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3N0I0QyIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAY29tZXQvYWRtaW5cIjtcbmltcG9ydCB7IEFkZCwgQ29weSwgRGVsZXRlLCBJbnZpc2libGUsIFBhc3RlLCBWaXNpYmxlIH0gZnJvbSBcIkBjb21ldC9hZG1pbi1pY29uc1wiO1xuaW1wb3J0IHsgQm94LCBDaGVja2JveCwgRm9ybUNvbnRyb2xMYWJlbCwgSWNvbkJ1dHRvbiwgVHlwb2dyYXBoeSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9zdHlsZXNcIjtcbmltcG9ydCB7XG4gICAgdHlwZSBDaGFuZ2VFdmVudCxcbiAgICB0eXBlIERpc3BhdGNoLFxuICAgIHR5cGUgRnVuY3Rpb25Db21wb25lbnQsXG4gICAgdHlwZSBSZWFjdE5vZGUsXG4gICAgdHlwZSBTZXRTdGF0ZUFjdGlvbixcbiAgICB1c2VDYWxsYmFjayxcbiAgICB1c2VFZmZlY3QsXG4gICAgdXNlTWVtbyxcbiAgICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGb3JtYXR0ZWRNZXNzYWdlLCB0eXBlIE1lc3NhZ2VEZXNjcmlwdG9yIH0gZnJvbSBcInJlYWN0LWludGxcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuXG5pbXBvcnQgeyB1c2VDb250ZW50U2NvcGUgfSBmcm9tIFwiLi4vLi4vY29udGVudFNjb3BlL1Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBDYW5ub3RQYXN0ZUJsb2NrRGlhbG9nIH0gZnJvbSBcIi4uL2NsaXBib2FyZC9DYW5ub3RQYXN0ZUJsb2NrRGlhbG9nXCI7XG5pbXBvcnQgeyB1c2VCbG9ja0NsaXBib2FyZCB9IGZyb20gXCIuLi9jbGlwYm9hcmQvdXNlQmxvY2tDbGlwYm9hcmRcIjtcbmltcG9ydCB7IEFkZEJsb2NrRHJhd2VyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZGRCbG9ja0RyYXdlclwiO1xuaW1wb3J0IHsgQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXJcIjtcbmltcG9ydCB7IEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b24gfSBmcm9tIFwiLi4vY29tbW9uL0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cIjtcbmltcG9ydCB7IEJsb2NrQWRtaW5Db21wb25lbnRQYXBlciB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyXCI7XG5pbXBvcnQgeyBCbG9ja1ByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1ByZXZpZXdDb250ZW50XCI7XG5pbXBvcnQgeyBCbG9ja1JvdyB9IGZyb20gXCIuLi9jb21tb24vYmxvY2tSb3cvQmxvY2tSb3dcIjtcbmltcG9ydCB7IHVzZUJsb2Nrc0NvbmZpZyB9IGZyb20gXCIuLi9jb25maWcvQmxvY2tzQ29uZmlnQ29udGV4dFwiO1xuaW1wb3J0IHsgY3JlYXRlQmxvY2tTa2VsZXRvbiB9IGZyb20gXCIuLi9oZWxwZXJzL2NyZWF0ZUJsb2NrU2tlbGV0b25cIjtcbmltcG9ydCB7IGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi4vaGVscGVycy9kZWR1cGxpY2F0ZUJsb2NrRGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgeyBIb3ZlclByZXZpZXdDb21wb25lbnQgfSBmcm9tIFwiLi4vaWZyYW1lYnJpZGdlL0hvdmVyUHJldmlld0NvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2VsZWN0UHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvU2VsZWN0UHJldmlld0NvbXBvbmVudFwiO1xuaW1wb3J0IHsgdHlwZSBCbG9ja0RlcGVuZGVuY3ksIHR5cGUgQmxvY2tJbnRlcmZhY2UsIHR5cGUgQmxvY2tTdGF0ZSwgdHlwZSBQcmV2aWV3Q29udGVudCB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZU5ld1N0YXRlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBwYXJhbGxlbEFzeW5jRXZlcnkgfSBmcm9tIFwiLi4vdXRpbHMvcGFyYWxsZWxBc3luY0V2ZXJ5XCI7XG5cbi8vIFVzaW5nIHt9IGluc3RlYWQgb2YgUmVjb3JkPHN0cmluZywgbmV2ZXI+IGJlY2F1c2UgbmV2ZXIgYW5kIHVua25vd24gYXJlIGluY29tcGF0aWJsZS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbnR5cGUgRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzID0ge307XG5cbnR5cGUgQmxvY2tzQmxvY2tJdGVtPFxuICAgIFQgZXh0ZW5kcyBCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlLFxuICAgIEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMsXG4+ID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgcHJvcHM6IEJsb2NrU3RhdGU8VD47XG4gICAgc2xpZGVJbjogYm9vbGVhbjtcbn0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkcztcblxudHlwZSBSZW1vdmVkQmxvY2tzQmxvY2tJdGVtPFxuICAgIFQgZXh0ZW5kcyBCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlLFxuICAgIEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMsXG4+ID0gQmxvY2tzQmxvY2tJdGVtPFQsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiAmIHsgcmVtb3ZlZEF0OiBudW1iZXIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPiB7XG4gICAgYmxvY2tzOiBBcnJheTxcbiAgICAgICAge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICAgICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBwcm9wczogYW55O1xuICAgICAgICB9ICYgQWRkaXRpb25hbEl0ZW1GaWVsZHNcbiAgICA+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbnR5cGUgQmxvY2tUeXBlID0gc3RyaW5nO1xuXG5pbnRlcmZhY2UgQmxvY2tzQmxvY2tBZGRpdGlvbmFsSXRlbUZpZWxkPFZhbHVlID0gdW5rbm93bj4ge1xuICAgIGRlZmF1bHRWYWx1ZTogVmFsdWU7XG59XG5cbmludGVyZmFjZSBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZT86IFJlYWN0Tm9kZTtcbiAgICBzdXBwb3J0ZWRCbG9ja3M6IFJlY29yZDxCbG9ja1R5cGUsIEJsb2NrSW50ZXJmYWNlPjtcbiAgICBtYXhWaXNpYmxlQmxvY2tzPzogbnVtYmVyO1xuICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzPzoge1xuICAgICAgICBbS2V5IGluIGtleW9mIEFkZGl0aW9uYWxJdGVtRmllbGRzXTogQmxvY2tzQmxvY2tBZGRpdGlvbmFsSXRlbUZpZWxkPEFkZGl0aW9uYWxJdGVtRmllbGRzW0tleV0+O1xuICAgIH07XG4gICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zPzogRnVuY3Rpb25Db21wb25lbnQ8e1xuICAgICAgICBpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPjtcbiAgICAgICAgb25DaGFuZ2U6IChpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPikgPT4gdm9pZDtcbiAgICAgICAgb25NZW51Q2xvc2U6ICgpID0+IHZvaWQ7XG4gICAgfT47XG4gICAgQWRkaXRpb25hbEl0ZW1Db250ZW50PzogRnVuY3Rpb25Db21wb25lbnQ8eyBpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiB9PjtcbiAgICB0YWdzPzogQXJyYXk8TWVzc2FnZURlc2NyaXB0b3IgfCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmxvY2tzQmxvY2s8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4oXG4gICAge1xuICAgICAgICBzdXBwb3J0ZWRCbG9ja3MsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRpc3BsYXlOYW1lID0gPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MuYmxvY2tzLm5hbWVcIiBkZWZhdWx0TWVzc2FnZT1cIkJsb2Nrc1wiIC8+LFxuICAgICAgICBtYXhWaXNpYmxlQmxvY2tzLFxuICAgICAgICBhZGRpdGlvbmFsSXRlbUZpZWxkcyxcbiAgICAgICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQsXG4gICAgICAgIHRhZ3MsXG4gICAgfTogQ3JlYXRlQmxvY2tzQmxvY2tPcHRpb25zPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICBvdmVycmlkZT86IChcbiAgICAgICAgYmxvY2s6IEJsb2NrSW50ZXJmYWNlPFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgICAgICBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPlxuICAgICAgICA+LFxuICAgICkgPT4gQmxvY2tJbnRlcmZhY2U8QmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LCBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4+LFxuKTogQmxvY2tJbnRlcmZhY2U8QmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LCBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4+IHtcbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggbm8gc3VwcG9ydGVkIGJsb2NrIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2Ugc3BlY2lmeSBhdCBsZWFzdCB0d28gc3VwcG9ydGVkIGJsb2Nrcy5cIik7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKHN1cHBvcnRlZEJsb2NrcykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJsb2NrcyBibG9jayB3aXRoIGEgc2luZ2xlIGJsb2NrIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2UgdXNlIGEgbGlzdCBibG9jayAoY3JlYXRlTGlzdEJsb2NrKCkpIGluc3RlYWQuXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJsb2NrRm9yVHlwZSh0eXBlOiBzdHJpbmcpOiBCbG9ja0ludGVyZmFjZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gc3VwcG9ydGVkQmxvY2tzW3R5cGVdID8/IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHlwZUZvckJsb2NrKHRhcmdldEJsb2NrOiBQaWNrPEJsb2NrSW50ZXJmYWNlLCBcIm5hbWVcIj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmluZCgoWywgYmxvY2tdKSA9PiBibG9jay5uYW1lID09PSB0YXJnZXRCbG9jay5uYW1lKT8uWzBdID8/IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRUYWdzID0gT2JqZWN0LnZhbHVlcyhzdXBwb3J0ZWRCbG9ja3MpLnJlZHVjZTxBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz4+KChhY2MsIGJsb2NrKSA9PiB7XG4gICAgICAgIGlmIChibG9jay50YWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFjYywgLi4uYmxvY2sudGFnc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBCbG9ja3NCbG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgIEJsb2Nrc0Jsb2NrRnJhZ21lbnQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgPiA9IHtcbiAgICAgICAgLi4uY3JlYXRlQmxvY2tTa2VsZXRvbigpLFxuXG4gICAgICAgIG5hbWUsXG5cbiAgICAgICAgZGlzcGxheU5hbWUsXG5cbiAgICAgICAgdGFnczogdGFncyA/IHRhZ3MgOiBjaGlsZFRhZ3MsXG5cbiAgICAgICAgZGVmYXVsdFZhbHVlczogKCkgPT4gKHsgYmxvY2tzOiBbXSB9KSxcblxuICAgICAgICBpbnB1dDJTdGF0ZTogKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBpbnB1dC5ibG9ja3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcblxuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIGJsb2NrIHR5cGUgXCIke2NoaWxkLnR5cGV9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmlucHV0MlN0YXRlKGNoaWxkLnByb3BzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZSgoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBibG9ja3MsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHN0YXRlMk91dHB1dDogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2Nrczogc3RhdGUuYmxvY2tzLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY2hpbGQudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZTJPdXRwdXQoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgb3V0cHV0MlN0YXRlOiBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZTogQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBbXSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygb3V0cHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5ibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGF3YWl0IGJsb2NrLm91dHB1dDJTdGF0ZShjaGlsZC5wcm9wcywgY29udGV4dCksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNyZWF0ZVByZXZpZXdTdGF0ZTogKHN0YXRlLCBwcmV2aWV3Q3R4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsLFxuICAgICAgICAgICAgICAgIGJsb2Nrczogc3RhdGUuYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNoaWxkKSA9PiAocHJldmlld0N0eC5zaG93VmlzaWJsZU9ubHkgPyBjaGlsZC52aXNpYmxlIDogdHJ1ZSkpIC8vIGRlcGVuZGluZyBvbiBjb250ZXh0IHNob3cgYWxsIGJsb2NrcyBvciBvbmx5IHZpc2libGUgYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0FkbWluUm91dGUgPSBgJHtwcmV2aWV3Q3R4LnBhcmVudFVybFN1YlJvdXRlID8/IHByZXZpZXdDdHgucGFyZW50VXJsfS8ke2NoaWxkLmtleX0vYmxvY2tzYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2hpbGQudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IGJsb2NrQWRtaW5Sb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suY3JlYXRlUHJldmlld1N0YXRlKGNoaWxkLnByb3BzLCB7IC4uLnByZXZpZXdDdHgsIHBhcmVudFVybFN1YlJvdXRlOiB1bmRlZmluZWQsIHBhcmVudFVybDogYmxvY2tBZG1pblJvdXRlIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgYWRtaW5NZXRhOiB7IHJvdXRlOiBwcmV2aWV3Q3R4LnBhcmVudFVybCB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNWYWxpZDogYXN5bmMgKHN0YXRlKSA9PlxuICAgICAgICAgICAgcGFyYWxsZWxBc3luY0V2ZXJ5KHN0YXRlLmJsb2NrcywgYXN5bmMgKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2MudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5pc1ZhbGlkKGMucHJvcHMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIGNoaWxkQmxvY2tDb3VudDogKHN0YXRlKSA9PiBzdGF0ZS5ibG9ja3MubGVuZ3RoLFxuXG4gICAgICAgIGFuY2hvcnM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChhbmNob3JzLCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFuY2hvcnMsIC4uLihibG9jay5hbmNob3JzPy4oY2hpbGQucHJvcHMpID8/IFtdKV07XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVwZW5kZW5jaWVzOiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZERlcGVuZGVuY2llcyA9IHN0YXRlLmJsb2Nrcy5yZWR1Y2U8QmxvY2tEZXBlbmRlbmN5W10+KChkZXBlbmRlbmNpZXMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uZGVwZW5kZW5jaWVzLCAuLi4oYmxvY2suZGVwZW5kZW5jaWVzPy4oY2hpbGQucHJvcHMpID8/IFtdKV07XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWR1cGxpY2F0ZUJsb2NrRGVwZW5kZW5jaWVzKG1lcmdlZERlcGVuZGVuY2llcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVwbGFjZURlcGVuZGVuY2llc0luT3V0cHV0OiAob3V0cHV0LCByZXBsYWNlbWVudHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld091dHB1dDogQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+ID0geyBibG9ja3M6IFtdIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygb3V0cHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV3T3V0cHV0LmJsb2Nrcy5wdXNoKHsgLi4uY2hpbGQsIHByb3BzOiBibG9jay5yZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQoY2hpbGQucHJvcHMsIHJlcGxhY2VtZW50cykgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdPdXRwdXQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVmaW5lc093blBhZGRpbmc6IHRydWUsXG5cbiAgICAgICAgQWRtaW5Db21wb25lbnQ6ICh7IHN0YXRlLCB1cGRhdGVTdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b2dnbGVWaXNpYmxlID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGJsb2NrS2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IChjLmtleSA9PT0gYmxvY2tLZXkgPyB7IC4uLmMsIHZpc2libGU6ICFjLnZpc2libGUgfSA6IGMpKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IFtzaG93QWRkQmxvY2tEcmF3ZXIsIHNldFNob3dBZGRCbG9ja0RyYXdlcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBbYmVmb3JlSW5kZXgsIHNldEJlZm9yZUluZGV4XSA9IHVzZVN0YXRlPG51bWJlcj4oKTtcbiAgICAgICAgICAgIGNvbnN0IFtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IsIHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcl0gPSB1c2VTdGF0ZTxSZWFjdE5vZGU+KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNuYWNrYmFyQXBpID0gdXNlU25hY2tiYXJBcGkoKTtcblxuICAgICAgICAgICAgY29uc3QgdG90YWxWaXNpYmxlQmxvY2tzID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnZpc2libGUpLmxlbmd0aDtcblxuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLnNvbWUoKGJsb2NrKSA9PiBibG9jay5zbGlkZUluKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHsgLi4ucHJldlN0YXRlLCBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChibG9jaykgPT4gKHsgLi4uYmxvY2ssIHNsaWRlSW46IGZhbHNlIH0pKSB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtzdGF0ZS5ibG9ja3MsIHVwZGF0ZVN0YXRlXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVVuZG9DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChyZW1vdmVkQmxvY2tzOiBSZW1vdmVkQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbW92ZWRCbG9ja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IFsuLi5wcmV2U3RhdGUuYmxvY2tzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRCbG9ja3M/LmZvckVhY2goKHJlbW92ZWRCbG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVtb3ZlZEF0IH0gPSByZW1vdmVkQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2s6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ID0geyAuLi5yZW1vdmVkQmxvY2sgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYmxvY2sucmVtb3ZlZEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5zcGxpY2UocmVtb3ZlZEF0LCAwLCBibG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZGVsZXRlQmxvY2tzID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGJsb2NrS2V5czogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzVG9SZW1vdmUgPSBwcmV2U3RhdGUuYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoYmxvY2ssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCByZW1vdmVkQXQ6IGluZGV4IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2tLZXlzLmluY2x1ZGVzKGJsb2NrLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYWNrYmFyQXBpLnNob3dTbmFja2JhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VW5kb1NuYWNrYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmJsb2NrRGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJ7Y291bnQsIHBsdXJhbCwgb25lIHtibG9ja30gb3RoZXIgeyMgYmxvY2tzfX0gZGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBibG9ja3NUb1JlbW92ZS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZD17YmxvY2tzVG9SZW1vdmV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVW5kb0NsaWNrPXsoYmxvY2tzVG9SZW1vdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVuZG9DbGljayhibG9ja3NUb1JlbW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5maWx0ZXIoKGMpID0+ICFibG9ja0tleXMuaW5jbHVkZXMoYy5rZXkpKSB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtoYW5kbGVVbmRvQ2xpY2ssIHNuYWNrYmFyQXBpLCB1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2NrcyA9ICh2aXNpYmxlID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1Nob3cgPSBzdGF0ZS5ibG9ja3MubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLnZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrczogYmxvY2tzVG9TaG93IH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVEZWxldGVBbGxTZWxlY3RlZEJsb2NrcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb0RlbGV0ZSA9IHN0YXRlLmJsb2Nrcy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMuc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoXG4gICAgICAgICAgICAgICAgICAgIGJsb2Nrc1RvRGVsZXRlLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5rZXk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhZGROZXdCbG9jayA9ICh0eXBlOiBCbG9ja1R5cGUsIGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdXVpZCgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUodHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7dHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbTogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogbWF4VmlzaWJsZUJsb2NrcyA/IHRvdGFsVmlzaWJsZUJsb2NrcyA8IG1heFZpc2libGVCbG9ja3MgOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5kZWZhdWx0VmFsdWVzKCksXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgW2ZpZWxkLCB7IGRlZmF1bHRWYWx1ZSB9XSkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBkZWZhdWx0VmFsdWUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrcyA9IFsuLi5zdGF0ZS5ibG9ja3NdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tzLnNwbGljZShiZWZvcmVJbmRleCwgMCwgbmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tzLnB1c2gobmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBibG9ja3M6IG5ld0Jsb2NrcyxcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4gPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVTdWJCbG9ja3NGbjogRGlzcGF0Y2g8U2V0U3RhdGVBY3Rpb248dW5rbm93bj4+ID0gKHNldFN0YXRlQWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChjKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmtleSA9PT0gYmxvY2tLZXkgPyB7IC4uLmMsIHByb3BzOiByZXNvbHZlTmV3U3RhdGUoeyBwcmV2U3RhdGU6IGMucHJvcHMsIHNldFN0YXRlQWN0aW9uIH0pIH0gOiBjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdWJCbG9ja3NGbjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCB7IHNjb3BlIH0gPSB1c2VDb250ZW50U2NvcGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaXNCbG9ja1N1cHBvcnRlZCB9ID0gdXNlQmxvY2tzQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU3VwcG9ydGVkQmxvY2tzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQmxvY2tTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhzdXBwb3J0ZWRCbG9ja3MpLmZpbHRlcigoWywgYmxvY2tdKSA9PiBpc0Jsb2NrU3VwcG9ydGVkKGJsb2NrLCBzY29wZSkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwcG9ydGVkQmxvY2tzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtzY29wZSwgaXNCbG9ja1N1cHBvcnRlZF0pO1xuXG4gICAgICAgICAgICBjb25zdCB7IHVwZGF0ZUNsaXBib2FyZENvbnRlbnQsIGdldENsaXBib2FyZENvbnRlbnQgfSA9IHVzZUJsb2NrQ2xpcGJvYXJkKHsgc3VwcG9ydHM6IE9iamVjdC52YWx1ZXMoZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MpIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwYXN0ZUJsb2NrID0gYXN5bmMgKGluc2VydEF0OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldENsaXBib2FyZENvbnRlbnQoKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuY2FuUGFzdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yKHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZFZpc2libGVCbG9ja3MgPSBjb250ZW50LmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnZpc2libGUpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuQWRkVmlzaWJsZUJsb2NrID0gbWF4VmlzaWJsZUJsb2NrcyA/IHRvdGFsVmlzaWJsZUJsb2NrcyArIGNsaXBib2FyZFZpc2libGVCbG9ja3MgPD0gbWF4VmlzaWJsZUJsb2NrcyA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdID0gY29udGVudC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZvckJsb2NrKGJsb2NrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB0eXBlIGZvdW5kIGZvciBibG9jayBcIiR7YmxvY2submFtZX1cImApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdXVpZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNhbkFkZFZpc2libGVCbG9jayA/IGJsb2NrLnZpc2libGUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oYmxvY2suYWRkaXRpb25hbEZpZWxkcyBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBbLi4ucHJldlN0YXRlLmJsb2Nrcy5zbGljZSgwLCBpbnNlcnRBdCksIC4uLm5ld0Jsb2NrcywgLi4ucHJldlN0YXRlLmJsb2Nrcy5zbGljZShpbnNlcnRBdCldLm1hcCgoYmxvY2spID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQWRkQmxvY2tDbGljayA9IChiZWZvcmVJbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dBZGRCbG9ja0RyYXdlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleChiZWZvcmVJbmRleCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dBZGRCbG9ja0RyYXdlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2V0QmVmb3JlSW5kZXgodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVNlbGVjdEFsbCA9IChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdEJsb2NrID0gKGN1cnJlbnRCbG9jazogQmxvY2tzQmxvY2tJdGVtLCBzZWxlY3Q6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCBzZWxlY3RlZDogYmxvY2sgPT09IGN1cnJlbnRCbG9jayA/IHNlbGVjdCA6IGJsb2NrLnNlbGVjdGVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNvcHlTZWxlY3RlZEJsb2NrcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb0NvcHkgPSBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tJbnRlcmZhY2UgPSBibG9ja0ZvclR5cGUoYmxvY2sudHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2tJbnRlcmZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7YmxvY2sudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBibG9ja0ludGVyZmFjZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGJsb2NrLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHM6IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGJsb2NrW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlQ2xpcGJvYXJkQ29udGVudChibG9ja3NUb0NvcHkpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHN0YXRlLmJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiBibG9jay5zZWxlY3RlZCkubGVuZ3RoO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaCBkaXNhYmxlRm9yY2VQcm9tcHRSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1BhZ2UgbmFtZT1cIm1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RQcmV2aWV3Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIGRpc2FibGVQYWRkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0xpc3RIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZENvdW50ID09PSBzdGF0ZS5ibG9ja3MubGVuZ3RoICYmIHNlbGVjdGVkQ291bnQgPiAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZT17c2VsZWN0ZWRDb3VudCA+IDAgJiYgc2VsZWN0ZWRDb3VudCAhPT0gc3RhdGUuYmxvY2tzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVUb2dnbGVTZWxlY3RBbGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5zZWxlY3RBbGxcIiBkZWZhdWx0TWVzc2FnZT1cIlNlbGVjdCBhbGxcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc01lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIERvIG5vdCBzaG93IHRvZ2dsZSB2aXNpYmlsaXR5IG9mIGFsbCBzZWxlY3RlZCBibG9ja3MgYnV0dG9ucyB3aGVuIG1heFZpc2libGVCbG9ja3MgaXMgc2V0ICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshbWF4VmlzaWJsZUJsb2NrcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8VmlzaWJsZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2Nrcyh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIHZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0FjdGlvbnNJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PEludmlzaWJsZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2NrcygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLmludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWFrZSBpbnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZXBhcmF0b3IgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PERlbGV0ZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkQ291bnQgPT09IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uZGVsZXRlXCIgZGVmYXVsdE1lc3NhZ2U9XCJEZWxldGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0FjdGlvbnNJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxDb3B5IC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uY29weVwiIGRlZmF1bHRNZXNzYWdlPVwiQ29weVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW0gaWNvbj17PFBhc3RlIC8+fSBvbkNsaWNrPXsoKSA9PiBwYXN0ZUJsb2NrKDApfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24ucGFzdGVcIiBkZWZhdWx0TWVzc2FnZT1cIlBhc3RlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0xpc3RIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLm1hcCgoZGF0YSwgYmxvY2tJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTWF4VmlzaWJsZUJsb2Nrc1JlYWNoZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISFtYXhWaXNpYmxlQmxvY2tzICYmIHRvdGFsVmlzaWJsZUJsb2NrcyA+PSBtYXhWaXNpYmxlQmxvY2tzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5Ub2dnbGVWaXNpYmlsaXR5ID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA/IGRhdGEudmlzaWJsZSA6IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3dNYXhCbG9ja3NBbGxvd2VkTWVzc2FnZSA9IGlzTWF4VmlzaWJsZUJsb2Nrc1JlYWNoZWQgJiYgIWRhdGEudmlzaWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhvdmVyUHJldmlld0NvbXBvbmVudCBrZXk9e2RhdGEua2V5fSBjb21wb25lbnRTbHVnPXtgJHtkYXRhLmtleX0vYmxvY2tzYH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtkYXRhLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUHJldmlld0NvbnRlbnQ9eygpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja1ByZXZpZXdDb250ZW50IGJsb2NrPXtibG9ja30gc3RhdGU9e2RhdGEucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtibG9ja0luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbnRlbnRDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGRhdGEua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25EZWxldGVDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQmxvY2tzKFtkYXRhLmtleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQmxvY2s9eyhmcm9tLCB0bykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IFsuLi5wcmV2U3RhdGUuYmxvY2tzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja1RvTW92ZSA9IGJsb2Nrcy5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZSh0bywgMCwgYmxvY2tUb01vdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eUJ1dHRvbj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5ibG9jay5tYXhWaXNpYmxlQmxvY2tzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1heC4gdmlzaWJsZSBibG9ja3MgYWxsb3dlZDoge21heFZpc2libGVCbG9ja3N9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgbWF4VmlzaWJsZUJsb2NrcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBjb21wb25lbnQ9XCJzcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjYW5Ub2dnbGVWaXNpYmlsaXR5ICYmIHRvZ2dsZVZpc2libGUoZGF0YS5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuVG9nZ2xlVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2RhdGEudmlzaWJsZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VmlzaWJsZSBjb2xvcj1cInN1Y2Nlc3NcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW52aXNpYmxlIGNvbG9yPVwiYWN0aW9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZE5ld0Jsb2NrPXtoYW5kbGVBZGRCbG9ja0NsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvcHlDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoZGF0YS50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtkYXRhLnR5cGV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGRhdGEudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGRhdGEucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHM6IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBkYXRhW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QYXN0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZUJsb2NrKGJsb2NrSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2RhdGEuc2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0ZWRDbGljaz17KHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RCbG9jayhkYXRhLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWRGbj17KCkgPT4gYmxvY2suaXNWYWxpZChkYXRhLnByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVJbj17ZGF0YS5zbGlkZUlufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQm90dG9tSW5zZXJ0QmV0d2VlbkJ1dHRvbj17YmxvY2tJbmRleCA+PSBzdGF0ZS5ibG9ja3MubGVuZ3RoIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1lbnVJdGVtcz17KG9uTWVudUNsb3NlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh1cGRhdGVkSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZpb3VzU3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2aW91c1N0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5rZXkgPT09IGRhdGEua2V5ID8gdXBkYXRlZEl0ZW0gOiBibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQ29udGVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQgPyA8QWRkaXRpb25hbEl0ZW1Db250ZW50IGl0ZW09e2RhdGF9IC8+IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ib3ZlclByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hZGROZXdCbG9ja1wiIGRlZmF1bHRNZXNzYWdlPVwiQWRkIGJsb2NrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhcmdlQWRkQnV0dG9uQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZG1pbkNvbXBvbmVudFN0aWNreUZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQWRkQmxvY2tDbGljaygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SWNvbj17PEFkZCAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRCbG9ja0RyYXdlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17c2hvd0FkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VBZGRCbG9ja0RyYXdlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcz17ZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZE5ld0Jsb2NrPXsodHlwZSwgYWRkQW5kRWRpdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGFkZE5ld0Jsb2NrKHR5cGUsIGJlZm9yZUluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRBbmRFZGl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQXBpLmFjdGl2YXRlUGFnZShcImJsb2Nrc1wiLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RQcmV2aWV3Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tQYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwiYmxvY2tzXCIgdGl0bGU9XCJCbG9jayBiZWFyYmVpdGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhpZCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhzdGFja0FwaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gc3RhdGUuYmxvY2tzLmZpbmQoKGMpID0+IGMua2V5ID09PSBpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQXBpLmFjdGl2YXRlUGFnZShcIm1haW5cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShtYXRjaC50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1BhZ2VUaXRsZSB0aXRsZT17YmxvY2suZGlzcGxheU5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJsb2NrLkFkbWluQ29tcG9uZW50IHN0YXRlPXttYXRjaC5wcm9wc30gdXBkYXRlU3RhdGU9e2NyZWF0ZVVwZGF0ZVN1YkJsb2Nrc0ZuKGlkKX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2VUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tQYWdlPlxuICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICB7Y2Fubm90UGFzdGVCbG9ja0Vycm9yICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgb3BlbiBvbkNsb3NlPXsoKSA9PiBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IodW5kZWZpbmVkKX0gZXJyb3I9e2Nhbm5vdFBhc3RlQmxvY2tFcnJvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdDb250ZW50OiAoc3RhdGUsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmNvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJ7Y291bnQsIHBsdXJhbCwgPTAge05vIGJsb2Nrc30gb25lIHsjIGJsb2NrfSBvdGhlciB7IyBibG9ja3N9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBjb3VudDogc3RhdGUuYmxvY2tzLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxQcmV2aWV3Q29udGVudFtdPigocHJldiwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG5leHQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQcmV2aWV3Q29udGVudCA9IGJsb2NrLnByZXZpZXdDb250ZW50KG5leHQucHJvcHMsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4ubmV4dFByZXZpZXdDb250ZW50XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmVEZXBlbmRlbmN5UGF0aDogKHN0YXRlLCBqc29uUGF0aCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEvXmJsb2Nrcy5cXGQrLnByb3BzLy50ZXN0KGpzb25QYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJsb2Nrc0Jsb2NrOiBJbnZhbGlkIGpzb25QYXRoXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXRoQXJyID0ganNvblBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHBhdGhBcnJbMV0pO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJdGVtID0gc3RhdGUuYmxvY2tzW251bV07XG5cbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGJsb2NrSXRlbS50eXBlKTtcblxuICAgICAgICAgICAgaWYgKGJsb2NrID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEJsb2NrIGlzIG51bGxcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGJsb2NrLnJlc29sdmVEZXBlbmRlbmN5UGF0aChibG9ja0l0ZW0ucHJvcHMsIHBhdGhBcnIuc2xpY2UoMykuam9pbihcIi5cIikpO1xuICAgICAgICAgICAgcmV0dXJuIGAke2Jsb2NrSXRlbS5rZXl9L2Jsb2Nrcy8ke2NoaWxkUGF0aH1gO1xuICAgICAgICB9LFxuICAgICAgICBleHRyYWN0VGV4dENvbnRlbnRzOiAoc3RhdGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVJbnZpc2libGVDb250ZW50ID0gb3B0aW9ucz8uaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPz8gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPHN0cmluZ1tdPigoY29udGVudCwgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUgJiYgIWluY2x1ZGVJbnZpc2libGVDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uY29udGVudCwgLi4uKGJsb2NrLmV4dHJhY3RUZXh0Q29udGVudHM/LihjaGlsZC5wcm9wcywgb3B0aW9ucykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZShCbG9ja3NCbG9jayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJsb2Nrc0Jsb2NrO1xufVxuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMCwgMSl9O1xuYDtcblxuY29uc3QgQmxvY2tMaXN0SGVhZGVyQWN0aW9uQ29udGFpbmVyID0gc3R5bGVkKFwiZGl2XCIpYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAxMnB4IDA7XG5gO1xuXG5jb25zdCBTZWxlY3RBbGxGcm9tQ29udHJvbExhYmVsID0gc3R5bGVkKEZvcm1Db250cm9sTGFiZWwpYFxuICAgIHBhZGRpbmc6IDE1cHggMTBweCAxNXB4IDdweDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uQ29udGVudCA9IHN0eWxlZChcInNwYW5cIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogNHB4IDA7XG5gO1xuXG5jb25zdCBMYXJnZUFkZEJ1dHRvbkljb24gPSBzdHlsZWQoQWRkKWBcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuYDtcblxuY29uc3QgU2VwYXJhdG9yID0gc3R5bGVkKFwiZGl2XCIpYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHByb3BzKSA9PiBwcm9wcy50aGVtZS5wYWxldHRlLmdyZXlbXCIxMDBcIl19O1xuICAgIGhlaWdodDogMjJweDtcbiAgICB3aWR0aDogMXB4O1xuICAgIG1hcmdpbi1sZWZ0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuICAgIG1hcmdpbi1yaWdodDogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS5zcGFjaW5nKDEpfTtcbmA7XG4iXX0= */",
|
|
990
986
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
991
987
|
});
|
|
992
|
-
var LargeAddButtonIcon = /*#__PURE__*/
|
|
988
|
+
var LargeAddButtonIcon = /*#__PURE__*/styled(Add, process.env.NODE_ENV === "production" ? {
|
|
993
989
|
target: "e1dbbzf51"
|
|
994
990
|
} : {
|
|
995
991
|
target: "e1dbbzf51",
|
|
@@ -1002,7 +998,7 @@ var LargeAddButtonIcon = /*#__PURE__*/(0, _styles.styled)(_adminIcons.Add, proce
|
|
|
1002
998
|
styles: "font-size:24px;margin-bottom:8px/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErN0JzQyIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAY29tZXQvYWRtaW5cIjtcbmltcG9ydCB7IEFkZCwgQ29weSwgRGVsZXRlLCBJbnZpc2libGUsIFBhc3RlLCBWaXNpYmxlIH0gZnJvbSBcIkBjb21ldC9hZG1pbi1pY29uc1wiO1xuaW1wb3J0IHsgQm94LCBDaGVja2JveCwgRm9ybUNvbnRyb2xMYWJlbCwgSWNvbkJ1dHRvbiwgVHlwb2dyYXBoeSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9zdHlsZXNcIjtcbmltcG9ydCB7XG4gICAgdHlwZSBDaGFuZ2VFdmVudCxcbiAgICB0eXBlIERpc3BhdGNoLFxuICAgIHR5cGUgRnVuY3Rpb25Db21wb25lbnQsXG4gICAgdHlwZSBSZWFjdE5vZGUsXG4gICAgdHlwZSBTZXRTdGF0ZUFjdGlvbixcbiAgICB1c2VDYWxsYmFjayxcbiAgICB1c2VFZmZlY3QsXG4gICAgdXNlTWVtbyxcbiAgICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGb3JtYXR0ZWRNZXNzYWdlLCB0eXBlIE1lc3NhZ2VEZXNjcmlwdG9yIH0gZnJvbSBcInJlYWN0LWludGxcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuXG5pbXBvcnQgeyB1c2VDb250ZW50U2NvcGUgfSBmcm9tIFwiLi4vLi4vY29udGVudFNjb3BlL1Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBDYW5ub3RQYXN0ZUJsb2NrRGlhbG9nIH0gZnJvbSBcIi4uL2NsaXBib2FyZC9DYW5ub3RQYXN0ZUJsb2NrRGlhbG9nXCI7XG5pbXBvcnQgeyB1c2VCbG9ja0NsaXBib2FyZCB9IGZyb20gXCIuLi9jbGlwYm9hcmQvdXNlQmxvY2tDbGlwYm9hcmRcIjtcbmltcG9ydCB7IEFkZEJsb2NrRHJhd2VyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZGRCbG9ja0RyYXdlclwiO1xuaW1wb3J0IHsgQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXJcIjtcbmltcG9ydCB7IEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b24gfSBmcm9tIFwiLi4vY29tbW9uL0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cIjtcbmltcG9ydCB7IEJsb2NrQWRtaW5Db21wb25lbnRQYXBlciB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyXCI7XG5pbXBvcnQgeyBCbG9ja1ByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1ByZXZpZXdDb250ZW50XCI7XG5pbXBvcnQgeyBCbG9ja1JvdyB9IGZyb20gXCIuLi9jb21tb24vYmxvY2tSb3cvQmxvY2tSb3dcIjtcbmltcG9ydCB7IHVzZUJsb2Nrc0NvbmZpZyB9IGZyb20gXCIuLi9jb25maWcvQmxvY2tzQ29uZmlnQ29udGV4dFwiO1xuaW1wb3J0IHsgY3JlYXRlQmxvY2tTa2VsZXRvbiB9IGZyb20gXCIuLi9oZWxwZXJzL2NyZWF0ZUJsb2NrU2tlbGV0b25cIjtcbmltcG9ydCB7IGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi4vaGVscGVycy9kZWR1cGxpY2F0ZUJsb2NrRGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgeyBIb3ZlclByZXZpZXdDb21wb25lbnQgfSBmcm9tIFwiLi4vaWZyYW1lYnJpZGdlL0hvdmVyUHJldmlld0NvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2VsZWN0UHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvU2VsZWN0UHJldmlld0NvbXBvbmVudFwiO1xuaW1wb3J0IHsgdHlwZSBCbG9ja0RlcGVuZGVuY3ksIHR5cGUgQmxvY2tJbnRlcmZhY2UsIHR5cGUgQmxvY2tTdGF0ZSwgdHlwZSBQcmV2aWV3Q29udGVudCB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZU5ld1N0YXRlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBwYXJhbGxlbEFzeW5jRXZlcnkgfSBmcm9tIFwiLi4vdXRpbHMvcGFyYWxsZWxBc3luY0V2ZXJ5XCI7XG5cbi8vIFVzaW5nIHt9IGluc3RlYWQgb2YgUmVjb3JkPHN0cmluZywgbmV2ZXI+IGJlY2F1c2UgbmV2ZXIgYW5kIHVua25vd24gYXJlIGluY29tcGF0aWJsZS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbnR5cGUgRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzID0ge307XG5cbnR5cGUgQmxvY2tzQmxvY2tJdGVtPFxuICAgIFQgZXh0ZW5kcyBCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlLFxuICAgIEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMsXG4+ID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgcHJvcHM6IEJsb2NrU3RhdGU8VD47XG4gICAgc2xpZGVJbjogYm9vbGVhbjtcbn0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkcztcblxudHlwZSBSZW1vdmVkQmxvY2tzQmxvY2tJdGVtPFxuICAgIFQgZXh0ZW5kcyBCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlLFxuICAgIEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMsXG4+ID0gQmxvY2tzQmxvY2tJdGVtPFQsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiAmIHsgcmVtb3ZlZEF0OiBudW1iZXIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPiB7XG4gICAgYmxvY2tzOiBBcnJheTxcbiAgICAgICAge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICAgICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBwcm9wczogYW55O1xuICAgICAgICB9ICYgQWRkaXRpb25hbEl0ZW1GaWVsZHNcbiAgICA+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbnR5cGUgQmxvY2tUeXBlID0gc3RyaW5nO1xuXG5pbnRlcmZhY2UgQmxvY2tzQmxvY2tBZGRpdGlvbmFsSXRlbUZpZWxkPFZhbHVlID0gdW5rbm93bj4ge1xuICAgIGRlZmF1bHRWYWx1ZTogVmFsdWU7XG59XG5cbmludGVyZmFjZSBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZT86IFJlYWN0Tm9kZTtcbiAgICBzdXBwb3J0ZWRCbG9ja3M6IFJlY29yZDxCbG9ja1R5cGUsIEJsb2NrSW50ZXJmYWNlPjtcbiAgICBtYXhWaXNpYmxlQmxvY2tzPzogbnVtYmVyO1xuICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzPzoge1xuICAgICAgICBbS2V5IGluIGtleW9mIEFkZGl0aW9uYWxJdGVtRmllbGRzXTogQmxvY2tzQmxvY2tBZGRpdGlvbmFsSXRlbUZpZWxkPEFkZGl0aW9uYWxJdGVtRmllbGRzW0tleV0+O1xuICAgIH07XG4gICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zPzogRnVuY3Rpb25Db21wb25lbnQ8e1xuICAgICAgICBpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPjtcbiAgICAgICAgb25DaGFuZ2U6IChpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPikgPT4gdm9pZDtcbiAgICAgICAgb25NZW51Q2xvc2U6ICgpID0+IHZvaWQ7XG4gICAgfT47XG4gICAgQWRkaXRpb25hbEl0ZW1Db250ZW50PzogRnVuY3Rpb25Db21wb25lbnQ8eyBpdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiB9PjtcbiAgICB0YWdzPzogQXJyYXk8TWVzc2FnZURlc2NyaXB0b3IgfCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmxvY2tzQmxvY2s8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4oXG4gICAge1xuICAgICAgICBzdXBwb3J0ZWRCbG9ja3MsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRpc3BsYXlOYW1lID0gPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MuYmxvY2tzLm5hbWVcIiBkZWZhdWx0TWVzc2FnZT1cIkJsb2Nrc1wiIC8+LFxuICAgICAgICBtYXhWaXNpYmxlQmxvY2tzLFxuICAgICAgICBhZGRpdGlvbmFsSXRlbUZpZWxkcyxcbiAgICAgICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQsXG4gICAgICAgIHRhZ3MsXG4gICAgfTogQ3JlYXRlQmxvY2tzQmxvY2tPcHRpb25zPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICBvdmVycmlkZT86IChcbiAgICAgICAgYmxvY2s6IEJsb2NrSW50ZXJmYWNlPFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgICAgICBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPlxuICAgICAgICA+LFxuICAgICkgPT4gQmxvY2tJbnRlcmZhY2U8QmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LCBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4+LFxuKTogQmxvY2tJbnRlcmZhY2U8QmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LCBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4+IHtcbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggbm8gc3VwcG9ydGVkIGJsb2NrIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2Ugc3BlY2lmeSBhdCBsZWFzdCB0d28gc3VwcG9ydGVkIGJsb2Nrcy5cIik7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKHN1cHBvcnRlZEJsb2NrcykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJsb2NrcyBibG9jayB3aXRoIGEgc2luZ2xlIGJsb2NrIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2UgdXNlIGEgbGlzdCBibG9jayAoY3JlYXRlTGlzdEJsb2NrKCkpIGluc3RlYWQuXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJsb2NrRm9yVHlwZSh0eXBlOiBzdHJpbmcpOiBCbG9ja0ludGVyZmFjZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gc3VwcG9ydGVkQmxvY2tzW3R5cGVdID8/IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHlwZUZvckJsb2NrKHRhcmdldEJsb2NrOiBQaWNrPEJsb2NrSW50ZXJmYWNlLCBcIm5hbWVcIj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmluZCgoWywgYmxvY2tdKSA9PiBibG9jay5uYW1lID09PSB0YXJnZXRCbG9jay5uYW1lKT8uWzBdID8/IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRUYWdzID0gT2JqZWN0LnZhbHVlcyhzdXBwb3J0ZWRCbG9ja3MpLnJlZHVjZTxBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz4+KChhY2MsIGJsb2NrKSA9PiB7XG4gICAgICAgIGlmIChibG9jay50YWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFjYywgLi4uYmxvY2sudGFnc107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBCbG9ja3NCbG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgIEJsb2Nrc0Jsb2NrRnJhZ21lbnQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgPiA9IHtcbiAgICAgICAgLi4uY3JlYXRlQmxvY2tTa2VsZXRvbigpLFxuXG4gICAgICAgIG5hbWUsXG5cbiAgICAgICAgZGlzcGxheU5hbWUsXG5cbiAgICAgICAgdGFnczogdGFncyA/IHRhZ3MgOiBjaGlsZFRhZ3MsXG5cbiAgICAgICAgZGVmYXVsdFZhbHVlczogKCkgPT4gKHsgYmxvY2tzOiBbXSB9KSxcblxuICAgICAgICBpbnB1dDJTdGF0ZTogKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBpbnB1dC5ibG9ja3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcblxuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIGJsb2NrIHR5cGUgXCIke2NoaWxkLnR5cGV9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmlucHV0MlN0YXRlKGNoaWxkLnByb3BzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZSgoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBibG9ja3MsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHN0YXRlMk91dHB1dDogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2Nrczogc3RhdGUuYmxvY2tzLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY2hpbGQudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZTJPdXRwdXQoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgb3V0cHV0MlN0YXRlOiBhc3luYyAob3V0cHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZTogQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBbXSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygb3V0cHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5ibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGF3YWl0IGJsb2NrLm91dHB1dDJTdGF0ZShjaGlsZC5wcm9wcywgY29udGV4dCksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNyZWF0ZVByZXZpZXdTdGF0ZTogKHN0YXRlLCBwcmV2aWV3Q3R4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsLFxuICAgICAgICAgICAgICAgIGJsb2Nrczogc3RhdGUuYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNoaWxkKSA9PiAocHJldmlld0N0eC5zaG93VmlzaWJsZU9ubHkgPyBjaGlsZC52aXNpYmxlIDogdHJ1ZSkpIC8vIGRlcGVuZGluZyBvbiBjb250ZXh0IHNob3cgYWxsIGJsb2NrcyBvciBvbmx5IHZpc2libGUgYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0FkbWluUm91dGUgPSBgJHtwcmV2aWV3Q3R4LnBhcmVudFVybFN1YlJvdXRlID8/IHByZXZpZXdDdHgucGFyZW50VXJsfS8ke2NoaWxkLmtleX0vYmxvY2tzYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjaGlsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2hpbGQudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluUm91dGU6IGJsb2NrQWRtaW5Sb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suY3JlYXRlUHJldmlld1N0YXRlKGNoaWxkLnByb3BzLCB7IC4uLnByZXZpZXdDdHgsIHBhcmVudFVybFN1YlJvdXRlOiB1bmRlZmluZWQsIHBhcmVudFVybDogYmxvY2tBZG1pblJvdXRlIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBjaGlsZFtmaWVsZF0gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgYWRtaW5NZXRhOiB7IHJvdXRlOiBwcmV2aWV3Q3R4LnBhcmVudFVybCB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNWYWxpZDogYXN5bmMgKHN0YXRlKSA9PlxuICAgICAgICAgICAgcGFyYWxsZWxBc3luY0V2ZXJ5KHN0YXRlLmJsb2NrcywgYXN5bmMgKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2MudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5pc1ZhbGlkKGMucHJvcHMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIGNoaWxkQmxvY2tDb3VudDogKHN0YXRlKSA9PiBzdGF0ZS5ibG9ja3MubGVuZ3RoLFxuXG4gICAgICAgIGFuY2hvcnM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChhbmNob3JzLCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFuY2hvcnMsIC4uLihibG9jay5hbmNob3JzPy4oY2hpbGQucHJvcHMpID8/IFtdKV07XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVwZW5kZW5jaWVzOiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZERlcGVuZGVuY2llcyA9IHN0YXRlLmJsb2Nrcy5yZWR1Y2U8QmxvY2tEZXBlbmRlbmN5W10+KChkZXBlbmRlbmNpZXMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uZGVwZW5kZW5jaWVzLCAuLi4oYmxvY2suZGVwZW5kZW5jaWVzPy4oY2hpbGQucHJvcHMpID8/IFtdKV07XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIHJldHVybiBkZWR1cGxpY2F0ZUJsb2NrRGVwZW5kZW5jaWVzKG1lcmdlZERlcGVuZGVuY2llcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVwbGFjZURlcGVuZGVuY2llc0luT3V0cHV0OiAob3V0cHV0LCByZXBsYWNlbWVudHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld091dHB1dDogQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+ID0geyBibG9ja3M6IFtdIH07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygb3V0cHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV3T3V0cHV0LmJsb2Nrcy5wdXNoKHsgLi4uY2hpbGQsIHByb3BzOiBibG9jay5yZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQoY2hpbGQucHJvcHMsIHJlcGxhY2VtZW50cykgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdPdXRwdXQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGVmaW5lc093blBhZGRpbmc6IHRydWUsXG5cbiAgICAgICAgQWRtaW5Db21wb25lbnQ6ICh7IHN0YXRlLCB1cGRhdGVTdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b2dnbGVWaXNpYmxlID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGJsb2NrS2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IChjLmtleSA9PT0gYmxvY2tLZXkgPyB7IC4uLmMsIHZpc2libGU6ICFjLnZpc2libGUgfSA6IGMpKSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IFtzaG93QWRkQmxvY2tEcmF3ZXIsIHNldFNob3dBZGRCbG9ja0RyYXdlcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBbYmVmb3JlSW5kZXgsIHNldEJlZm9yZUluZGV4XSA9IHVzZVN0YXRlPG51bWJlcj4oKTtcbiAgICAgICAgICAgIGNvbnN0IFtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IsIHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcl0gPSB1c2VTdGF0ZTxSZWFjdE5vZGU+KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNuYWNrYmFyQXBpID0gdXNlU25hY2tiYXJBcGkoKTtcblxuICAgICAgICAgICAgY29uc3QgdG90YWxWaXNpYmxlQmxvY2tzID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnZpc2libGUpLmxlbmd0aDtcblxuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLnNvbWUoKGJsb2NrKSA9PiBibG9jay5zbGlkZUluKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHsgLi4ucHJldlN0YXRlLCBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChibG9jaykgPT4gKHsgLi4uYmxvY2ssIHNsaWRlSW46IGZhbHNlIH0pKSB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtzdGF0ZS5ibG9ja3MsIHVwZGF0ZVN0YXRlXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVVuZG9DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChyZW1vdmVkQmxvY2tzOiBSZW1vdmVkQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbW92ZWRCbG9ja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IFsuLi5wcmV2U3RhdGUuYmxvY2tzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRCbG9ja3M/LmZvckVhY2goKHJlbW92ZWRCbG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVtb3ZlZEF0IH0gPSByZW1vdmVkQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2s6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ID0geyAuLi5yZW1vdmVkQmxvY2sgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYmxvY2sucmVtb3ZlZEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5zcGxpY2UocmVtb3ZlZEF0LCAwLCBibG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZGVsZXRlQmxvY2tzID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGJsb2NrS2V5czogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzVG9SZW1vdmUgPSBwcmV2U3RhdGUuYmxvY2tzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoYmxvY2ssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCByZW1vdmVkQXQ6IGluZGV4IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2tLZXlzLmluY2x1ZGVzKGJsb2NrLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYWNrYmFyQXBpLnNob3dTbmFja2JhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VW5kb1NuYWNrYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmJsb2NrRGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJ7Y291bnQsIHBsdXJhbCwgb25lIHtibG9ja30gb3RoZXIgeyMgYmxvY2tzfX0gZGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBibG9ja3NUb1JlbW92ZS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZD17YmxvY2tzVG9SZW1vdmV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVW5kb0NsaWNrPXsoYmxvY2tzVG9SZW1vdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVuZG9DbGljayhibG9ja3NUb1JlbW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5maWx0ZXIoKGMpID0+ICFibG9ja0tleXMuaW5jbHVkZXMoYy5rZXkpKSB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtoYW5kbGVVbmRvQ2xpY2ssIHNuYWNrYmFyQXBpLCB1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2NrcyA9ICh2aXNpYmxlID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1Nob3cgPSBzdGF0ZS5ibG9ja3MubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLnZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrczogYmxvY2tzVG9TaG93IH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVEZWxldGVBbGxTZWxlY3RlZEJsb2NrcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb0RlbGV0ZSA9IHN0YXRlLmJsb2Nrcy5maWx0ZXIoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMuc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoXG4gICAgICAgICAgICAgICAgICAgIGJsb2Nrc1RvRGVsZXRlLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5rZXk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhZGROZXdCbG9jayA9ICh0eXBlOiBCbG9ja1R5cGUsIGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdXVpZCgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUodHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7dHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbTogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogbWF4VmlzaWJsZUJsb2NrcyA/IHRvdGFsVmlzaWJsZUJsb2NrcyA8IG1heFZpc2libGVCbG9ja3MgOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5kZWZhdWx0VmFsdWVzKCksXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgW2ZpZWxkLCB7IGRlZmF1bHRWYWx1ZSB9XSkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBkZWZhdWx0VmFsdWUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrcyA9IFsuLi5zdGF0ZS5ibG9ja3NdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tzLnNwbGljZShiZWZvcmVJbmRleCwgMCwgbmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3QmxvY2tzLnB1c2gobmV3SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBibG9ja3M6IG5ld0Jsb2NrcyxcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4gPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVTdWJCbG9ja3NGbjogRGlzcGF0Y2g8U2V0U3RhdGVBY3Rpb248dW5rbm93bj4+ID0gKHNldFN0YXRlQWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChjKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmtleSA9PT0gYmxvY2tLZXkgPyB7IC4uLmMsIHByb3BzOiByZXNvbHZlTmV3U3RhdGUoeyBwcmV2U3RhdGU6IGMucHJvcHMsIHNldFN0YXRlQWN0aW9uIH0pIH0gOiBjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdWJCbG9ja3NGbjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCB7IHNjb3BlIH0gPSB1c2VDb250ZW50U2NvcGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaXNCbG9ja1N1cHBvcnRlZCB9ID0gdXNlQmxvY2tzQ29uZmlnKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU3VwcG9ydGVkQmxvY2tzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQmxvY2tTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhzdXBwb3J0ZWRCbG9ja3MpLmZpbHRlcigoWywgYmxvY2tdKSA9PiBpc0Jsb2NrU3VwcG9ydGVkKGJsb2NrLCBzY29wZSkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwcG9ydGVkQmxvY2tzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtzY29wZSwgaXNCbG9ja1N1cHBvcnRlZF0pO1xuXG4gICAgICAgICAgICBjb25zdCB7IHVwZGF0ZUNsaXBib2FyZENvbnRlbnQsIGdldENsaXBib2FyZENvbnRlbnQgfSA9IHVzZUJsb2NrQ2xpcGJvYXJkKHsgc3VwcG9ydHM6IE9iamVjdC52YWx1ZXMoZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MpIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwYXN0ZUJsb2NrID0gYXN5bmMgKGluc2VydEF0OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldENsaXBib2FyZENvbnRlbnQoKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuY2FuUGFzdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yKHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZFZpc2libGVCbG9ja3MgPSBjb250ZW50LmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnZpc2libGUpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuQWRkVmlzaWJsZUJsb2NrID0gbWF4VmlzaWJsZUJsb2NrcyA/IHRvdGFsVmlzaWJsZUJsb2NrcyArIGNsaXBib2FyZFZpc2libGVCbG9ja3MgPD0gbWF4VmlzaWJsZUJsb2NrcyA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdID0gY29udGVudC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZvckJsb2NrKGJsb2NrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB0eXBlIGZvdW5kIGZvciBibG9jayBcIiR7YmxvY2submFtZX1cImApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdXVpZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNhbkFkZFZpc2libGVCbG9jayA/IGJsb2NrLnZpc2libGUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oYmxvY2suYWRkaXRpb25hbEZpZWxkcyBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBbLi4ucHJldlN0YXRlLmJsb2Nrcy5zbGljZSgwLCBpbnNlcnRBdCksIC4uLm5ld0Jsb2NrcywgLi4ucHJldlN0YXRlLmJsb2Nrcy5zbGljZShpbnNlcnRBdCldLm1hcCgoYmxvY2spID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQWRkQmxvY2tDbGljayA9IChiZWZvcmVJbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dBZGRCbG9ja0RyYXdlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleChiZWZvcmVJbmRleCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFNob3dBZGRCbG9ja0RyYXdlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2V0QmVmb3JlSW5kZXgodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVNlbGVjdEFsbCA9IChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdEJsb2NrID0gKGN1cnJlbnRCbG9jazogQmxvY2tzQmxvY2tJdGVtLCBzZWxlY3Q6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZTdGF0ZS5ibG9ja3MubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCBzZWxlY3RlZDogYmxvY2sgPT09IGN1cnJlbnRCbG9jayA/IHNlbGVjdCA6IGJsb2NrLnNlbGVjdGVkIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNvcHlTZWxlY3RlZEJsb2NrcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb0NvcHkgPSBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tJbnRlcmZhY2UgPSBibG9ja0ZvclR5cGUoYmxvY2sudHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2tJbnRlcmZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7YmxvY2sudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBibG9ja0ludGVyZmFjZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGJsb2NrLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHM6IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGJsb2NrW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlQ2xpcGJvYXJkQ29udGVudChibG9ja3NUb0NvcHkpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHN0YXRlLmJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiBibG9jay5zZWxlY3RlZCkubGVuZ3RoO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaCBkaXNhYmxlRm9yY2VQcm9tcHRSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1BhZ2UgbmFtZT1cIm1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RQcmV2aWV3Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIGRpc2FibGVQYWRkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0xpc3RIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZENvdW50ID09PSBzdGF0ZS5ibG9ja3MubGVuZ3RoICYmIHNlbGVjdGVkQ291bnQgPiAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZT17c2VsZWN0ZWRDb3VudCA+IDAgJiYgc2VsZWN0ZWRDb3VudCAhPT0gc3RhdGUuYmxvY2tzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVUb2dnbGVTZWxlY3RBbGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5zZWxlY3RBbGxcIiBkZWZhdWx0TWVzc2FnZT1cIlNlbGVjdCBhbGxcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc01lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIERvIG5vdCBzaG93IHRvZ2dsZSB2aXNpYmlsaXR5IG9mIGFsbCBzZWxlY3RlZCBibG9ja3MgYnV0dG9ucyB3aGVuIG1heFZpc2libGVCbG9ja3MgaXMgc2V0ICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshbWF4VmlzaWJsZUJsb2NrcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8VmlzaWJsZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2Nrcyh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIHZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0FjdGlvbnNJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PEludmlzaWJsZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVWaXNpYmlsaXR5T2ZBbGxTZWxlY3RlZEJsb2NrcygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLmludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWFrZSBpbnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZXBhcmF0b3IgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PERlbGV0ZSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkQ291bnQgPT09IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uZGVsZXRlXCIgZGVmYXVsdE1lc3NhZ2U9XCJEZWxldGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvd0FjdGlvbnNJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxDb3B5IC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uY29weVwiIGRlZmF1bHRNZXNzYWdlPVwiQ29weVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW0gaWNvbj17PFBhc3RlIC8+fSBvbkNsaWNrPXsoKSA9PiBwYXN0ZUJsb2NrKDApfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24ucGFzdGVcIiBkZWZhdWx0TWVzc2FnZT1cIlBhc3RlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0xpc3RIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLm1hcCgoZGF0YSwgYmxvY2tJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTWF4VmlzaWJsZUJsb2Nrc1JlYWNoZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISFtYXhWaXNpYmxlQmxvY2tzICYmIHRvdGFsVmlzaWJsZUJsb2NrcyA+PSBtYXhWaXNpYmxlQmxvY2tzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5Ub2dnbGVWaXNpYmlsaXR5ID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA/IGRhdGEudmlzaWJsZSA6IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3dNYXhCbG9ja3NBbGxvd2VkTWVzc2FnZSA9IGlzTWF4VmlzaWJsZUJsb2Nrc1JlYWNoZWQgJiYgIWRhdGEudmlzaWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhvdmVyUHJldmlld0NvbXBvbmVudCBrZXk9e2RhdGEua2V5fSBjb21wb25lbnRTbHVnPXtgJHtkYXRhLmtleX0vYmxvY2tzYH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtkYXRhLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUHJldmlld0NvbnRlbnQ9eygpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja1ByZXZpZXdDb250ZW50IGJsb2NrPXtibG9ja30gc3RhdGU9e2RhdGEucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtibG9ja0luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbnRlbnRDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGRhdGEua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25EZWxldGVDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQmxvY2tzKFtkYXRhLmtleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQmxvY2s9eyhmcm9tLCB0bykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IFsuLi5wcmV2U3RhdGUuYmxvY2tzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja1RvTW92ZSA9IGJsb2Nrcy5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZSh0bywgMCwgYmxvY2tUb01vdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eUJ1dHRvbj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5ibG9jay5tYXhWaXNpYmxlQmxvY2tzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1heC4gdmlzaWJsZSBibG9ja3MgYWxsb3dlZDoge21heFZpc2libGVCbG9ja3N9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgbWF4VmlzaWJsZUJsb2NrcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBjb21wb25lbnQ9XCJzcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjYW5Ub2dnbGVWaXNpYmlsaXR5ICYmIHRvZ2dsZVZpc2libGUoZGF0YS5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuVG9nZ2xlVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2RhdGEudmlzaWJsZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VmlzaWJsZSBjb2xvcj1cInN1Y2Nlc3NcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW52aXNpYmxlIGNvbG9yPVwiYWN0aW9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZE5ld0Jsb2NrPXtoYW5kbGVBZGRCbG9ja0NsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvcHlDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoZGF0YS50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtkYXRhLnR5cGV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGRhdGEudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGRhdGEucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHM6IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBmaWVsZCkgPT4gKHsgLi4uZmllbGRzLCBbZmllbGRdOiBkYXRhW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QYXN0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZUJsb2NrKGJsb2NrSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2RhdGEuc2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0ZWRDbGljaz17KHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RCbG9jayhkYXRhLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWRGbj17KCkgPT4gYmxvY2suaXNWYWxpZChkYXRhLnByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVJbj17ZGF0YS5zbGlkZUlufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQm90dG9tSW5zZXJ0QmV0d2VlbkJ1dHRvbj17YmxvY2tJbmRleCA+PSBzdGF0ZS5ibG9ja3MubGVuZ3RoIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1lbnVJdGVtcz17KG9uTWVudUNsb3NlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbEl0ZW1Db250ZXh0TWVudUl0ZW1zID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh1cGRhdGVkSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZpb3VzU3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2aW91c1N0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay5rZXkgPT09IGRhdGEua2V5ID8gdXBkYXRlZEl0ZW0gOiBibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQ29udGVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQgPyA8QWRkaXRpb25hbEl0ZW1Db250ZW50IGl0ZW09e2RhdGF9IC8+IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ib3ZlclByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hZGROZXdCbG9ja1wiIGRlZmF1bHRNZXNzYWdlPVwiQWRkIGJsb2NrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhcmdlQWRkQnV0dG9uQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZG1pbkNvbXBvbmVudFN0aWNreUZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQWRkQmxvY2tDbGljaygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SWNvbj17PEFkZCAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRCbG9ja0RyYXdlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Blbj17c2hvd0FkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VBZGRCbG9ja0RyYXdlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcz17ZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZE5ld0Jsb2NrPXsodHlwZSwgYWRkQW5kRWRpdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGFkZE5ld0Jsb2NrKHR5cGUsIGJlZm9yZUluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRBbmRFZGl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQXBpLmFjdGl2YXRlUGFnZShcImJsb2Nrc1wiLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RQcmV2aWV3Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tQYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwiYmxvY2tzXCIgdGl0bGU9XCJCbG9jayBiZWFyYmVpdGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhpZCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhzdGFja0FwaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gc3RhdGUuYmxvY2tzLmZpbmQoKGMpID0+IGMua2V5ID09PSBpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQXBpLmFjdGl2YXRlUGFnZShcIm1haW5cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShtYXRjaC50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1BhZ2VUaXRsZSB0aXRsZT17YmxvY2suZGlzcGxheU5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJsb2NrLkFkbWluQ29tcG9uZW50IHN0YXRlPXttYXRjaC5wcm9wc30gdXBkYXRlU3RhdGU9e2NyZWF0ZVVwZGF0ZVN1YkJsb2Nrc0ZuKGlkKX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2VUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tQYWdlPlxuICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICB7Y2Fubm90UGFzdGVCbG9ja0Vycm9yICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgb3BlbiBvbkNsb3NlPXsoKSA9PiBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IodW5kZWZpbmVkKX0gZXJyb3I9e2Nhbm5vdFBhc3RlQmxvY2tFcnJvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdDb250ZW50OiAoc3RhdGUsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmNvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJ7Y291bnQsIHBsdXJhbCwgPTAge05vIGJsb2Nrc30gb25lIHsjIGJsb2NrfSBvdGhlciB7IyBibG9ja3N9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBjb3VudDogc3RhdGUuYmxvY2tzLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxQcmV2aWV3Q29udGVudFtdPigocHJldiwgbmV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG5leHQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQcmV2aWV3Q29udGVudCA9IGJsb2NrLnByZXZpZXdDb250ZW50KG5leHQucHJvcHMsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4ubmV4dFByZXZpZXdDb250ZW50XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmVEZXBlbmRlbmN5UGF0aDogKHN0YXRlLCBqc29uUGF0aCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEvXmJsb2Nrcy5cXGQrLnByb3BzLy50ZXN0KGpzb25QYXRoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJsb2Nrc0Jsb2NrOiBJbnZhbGlkIGpzb25QYXRoXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXRoQXJyID0ganNvblBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHBhdGhBcnJbMV0pO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJdGVtID0gc3RhdGUuYmxvY2tzW251bV07XG5cbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGJsb2NrSXRlbS50eXBlKTtcblxuICAgICAgICAgICAgaWYgKGJsb2NrID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEJsb2NrIGlzIG51bGxcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGJsb2NrLnJlc29sdmVEZXBlbmRlbmN5UGF0aChibG9ja0l0ZW0ucHJvcHMsIHBhdGhBcnIuc2xpY2UoMykuam9pbihcIi5cIikpO1xuICAgICAgICAgICAgcmV0dXJuIGAke2Jsb2NrSXRlbS5rZXl9L2Jsb2Nrcy8ke2NoaWxkUGF0aH1gO1xuICAgICAgICB9LFxuICAgICAgICBleHRyYWN0VGV4dENvbnRlbnRzOiAoc3RhdGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVJbnZpc2libGVDb250ZW50ID0gb3B0aW9ucz8uaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPz8gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPHN0cmluZ1tdPigoY29udGVudCwgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLnZpc2libGUgJiYgIWluY2x1ZGVJbnZpc2libGVDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uY29udGVudCwgLi4uKGJsb2NrLmV4dHJhY3RUZXh0Q29udGVudHM/LihjaGlsZC5wcm9wcywgb3B0aW9ucykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZShCbG9ja3NCbG9jayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJsb2Nrc0Jsb2NrO1xufVxuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMCwgMSl9O1xuYDtcblxuY29uc3QgQmxvY2tMaXN0SGVhZGVyQWN0aW9uQ29udGFpbmVyID0gc3R5bGVkKFwiZGl2XCIpYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAxMnB4IDA7XG5gO1xuXG5jb25zdCBTZWxlY3RBbGxGcm9tQ29udHJvbExhYmVsID0gc3R5bGVkKEZvcm1Db250cm9sTGFiZWwpYFxuICAgIHBhZGRpbmc6IDE1cHggMTBweCAxNXB4IDdweDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uQ29udGVudCA9IHN0eWxlZChcInNwYW5cIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogNHB4IDA7XG5gO1xuXG5jb25zdCBMYXJnZUFkZEJ1dHRvbkljb24gPSBzdHlsZWQoQWRkKWBcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuYDtcblxuY29uc3QgU2VwYXJhdG9yID0gc3R5bGVkKFwiZGl2XCIpYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHByb3BzKSA9PiBwcm9wcy50aGVtZS5wYWxldHRlLmdyZXlbXCIxMDBcIl19O1xuICAgIGhlaWdodDogMjJweDtcbiAgICB3aWR0aDogMXB4O1xuICAgIG1hcmdpbi1sZWZ0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuICAgIG1hcmdpbi1yaWdodDogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS5zcGFjaW5nKDEpfTtcbmA7XG4iXX0= */",
|
|
1003
999
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
1004
1000
|
});
|
|
1005
|
-
var Separator = /*#__PURE__*/
|
|
1001
|
+
var Separator = /*#__PURE__*/styled("div", process.env.NODE_ENV === "production" ? {
|
|
1006
1002
|
target: "e1dbbzf50"
|
|
1007
1003
|
} : {
|
|
1008
1004
|
target: "e1dbbzf50",
|