@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.
Files changed (606) hide show
  1. package/lib/blocks/AnchorBlock.js +18 -23
  2. package/lib/blocks/DamVideoBlock.generated.js +1 -7
  3. package/lib/blocks/DamVideoBlock.js +38 -44
  4. package/lib/blocks/EmailLinkBlock.js +19 -25
  5. package/lib/blocks/ExternalLinkBlock.js +22 -28
  6. package/lib/blocks/InternalLinkBlock.generated.js +1 -7
  7. package/lib/blocks/InternalLinkBlock.js +31 -38
  8. package/lib/blocks/PhoneLinkBlock.js +19 -25
  9. package/lib/blocks/PixelImageBlock.generated.js +1 -7
  10. package/lib/blocks/PixelImageBlock.js +37 -43
  11. package/lib/blocks/SpaceBlock.js +16 -22
  12. package/lib/blocks/SvgImageBlock.generated.js +1 -7
  13. package/lib/blocks/SvgImageBlock.js +25 -31
  14. package/lib/blocks/VimeoVideoBlock.js +34 -40
  15. package/lib/blocks/YouTubeVideoBlock.js +34 -40
  16. package/lib/blocks/clipboard/CannotPasteBlockDialog.js +18 -19
  17. package/lib/blocks/clipboard/useBlockClipboard.js +14 -19
  18. package/lib/blocks/common/AddBlockDrawer.js +41 -47
  19. package/lib/blocks/common/AdminComponentStickyFooter.d.ts +1 -1
  20. package/lib/blocks/common/AdminComponentStickyFooter.d.ts.map +1 -1
  21. package/lib/blocks/common/AdminComponentStickyFooter.js +2 -8
  22. package/lib/blocks/common/AdminComponentStickyHeader.d.ts +1 -1
  23. package/lib/blocks/common/AdminComponentStickyHeader.d.ts.map +1 -1
  24. package/lib/blocks/common/AdminComponentStickyHeader.js +2 -8
  25. package/lib/blocks/common/AdminTabsTabContent.js +9 -15
  26. package/lib/blocks/common/BlockAdminComponentButton.js +8 -13
  27. package/lib/blocks/common/BlockAdminComponentNestedButton.js +17 -23
  28. package/lib/blocks/common/BlockAdminComponentPaper.js +12 -19
  29. package/lib/blocks/common/BlockAdminComponentRoot.js +11 -16
  30. package/lib/blocks/common/BlockAdminComponentSection.js +12 -18
  31. package/lib/blocks/common/BlockAdminComponentSectionGroup.js +9 -15
  32. package/lib/blocks/common/BlockAdminTabLabel.js +9 -15
  33. package/lib/blocks/common/BlockAdminTabs.d.ts +1 -0
  34. package/lib/blocks/common/BlockAdminTabs.d.ts.map +1 -1
  35. package/lib/blocks/common/BlockAdminTabs.js +24 -30
  36. package/lib/blocks/common/Collapsible.js +7 -13
  37. package/lib/blocks/common/CollapsibleSwitchButtonHeader.js +8 -14
  38. package/lib/blocks/common/HiddenInSubroute.js +5 -11
  39. package/lib/blocks/common/blockRow/BlockPreviewContent.d.ts +1 -1
  40. package/lib/blocks/common/blockRow/BlockPreviewContent.d.ts.map +1 -1
  41. package/lib/blocks/common/blockRow/BlockPreviewContent.js +18 -26
  42. package/lib/blocks/common/blockRow/BlockPreviewContent.sc.d.ts +5 -5
  43. package/lib/blocks/common/blockRow/BlockPreviewContent.sc.d.ts.map +1 -1
  44. package/lib/blocks/common/blockRow/BlockPreviewContent.sc.js +6 -12
  45. package/lib/blocks/common/blockRow/BlockRow.d.ts +1 -1
  46. package/lib/blocks/common/blockRow/BlockRow.d.ts.map +1 -1
  47. package/lib/blocks/common/blockRow/BlockRow.js +51 -58
  48. package/lib/blocks/common/blockRow/BlockRow.sc.js +16 -22
  49. package/lib/blocks/common/blockRow/image/StackedImages.d.ts +1 -0
  50. package/lib/blocks/common/blockRow/image/StackedImages.d.ts.map +1 -1
  51. package/lib/blocks/common/blockRow/image/StackedImages.js +18 -26
  52. package/lib/blocks/common/blockRow/image/StackedImages.sc.d.ts +8 -8
  53. package/lib/blocks/common/blockRow/image/StackedImages.sc.d.ts.map +1 -1
  54. package/lib/blocks/common/blockRow/image/StackedImages.sc.js +11 -17
  55. package/lib/blocks/common/usePromise.js +6 -10
  56. package/lib/blocks/common/useScrollRestoration.d.ts +2 -2
  57. package/lib/blocks/common/useScrollRestoration.d.ts.map +1 -1
  58. package/lib/blocks/common/useScrollRestoration.js +8 -14
  59. package/lib/blocks/config/BlocksConfigContext.js +7 -14
  60. package/lib/blocks/context/BlockContext.js +2 -8
  61. package/lib/blocks/context/BlockContextProvider.js +4 -10
  62. package/lib/blocks/context/useBlockContext.js +12 -18
  63. package/lib/blocks/createImageLinkBlock.js +10 -16
  64. package/lib/blocks/createLinkBlock.js +25 -30
  65. package/lib/blocks/createRichTextBlock.js +29 -38
  66. package/lib/blocks/createSeoBlock.js +114 -121
  67. package/lib/blocks/createTableBlock.js +30 -36
  68. package/lib/blocks/createTextImageBlock.js +43 -48
  69. package/lib/blocks/createTextLinkBlock.js +24 -30
  70. package/lib/blocks/factories/columnsBlock/ColumnsIcon.d.ts +1 -0
  71. package/lib/blocks/factories/columnsBlock/ColumnsIcon.d.ts.map +1 -1
  72. package/lib/blocks/factories/columnsBlock/ColumnsIcon.js +6 -12
  73. package/lib/blocks/factories/columnsBlock/ColumnsLayoutPreview.js +13 -21
  74. package/lib/blocks/factories/columnsBlock/FinalFormColumnsSelect.js +7 -13
  75. package/lib/blocks/factories/columnsBlock/FinalFormLayoutSelect.js +21 -27
  76. package/lib/blocks/factories/createBlocksBlock.js +113 -117
  77. package/lib/blocks/factories/createColumnsBlock.js +85 -91
  78. package/lib/blocks/factories/createCompositeBlock.js +54 -60
  79. package/lib/blocks/factories/createListBlock.js +80 -84
  80. package/lib/blocks/factories/createOneOfBlock.js +54 -61
  81. package/lib/blocks/factories/createOptionalBlock.js +24 -29
  82. package/lib/blocks/factories/listBlock/createUseAdminComponent.js +24 -30
  83. package/lib/blocks/factories/spaceBlock/createSpaceBlock.js +16 -22
  84. package/lib/blocks/form/AutosaveFinalForm.d.ts +1 -0
  85. package/lib/blocks/form/AutosaveFinalForm.d.ts.map +1 -1
  86. package/lib/blocks/form/AutosaveFinalForm.js +7 -13
  87. package/lib/blocks/form/BlocksFinalForm.d.ts +1 -0
  88. package/lib/blocks/form/BlocksFinalForm.d.ts.map +1 -1
  89. package/lib/blocks/form/BlocksFinalForm.js +12 -18
  90. package/lib/blocks/form/createFinalFormBlock.js +7 -12
  91. package/lib/blocks/helpers/VideoOptionsFields.js +15 -21
  92. package/lib/blocks/helpers/composeBlocks/composeBlocks.js +40 -40
  93. package/lib/blocks/helpers/composeBlocks/createCompositeBlockField.js +3 -9
  94. package/lib/blocks/helpers/composeBlocks/createCompositeBlockFields.js +3 -9
  95. package/lib/blocks/helpers/composeBlocks/createSettingsBlock.js +3 -9
  96. package/lib/blocks/helpers/composeBlocks/types.js +1 -5
  97. package/lib/blocks/helpers/composeBlocks/utility-types.js +1 -5
  98. package/lib/blocks/helpers/composeBlocks/utils.js +5 -14
  99. package/lib/blocks/helpers/createBlockSkeleton.js +14 -16
  100. package/lib/blocks/helpers/createCompositeBlockSelectField.js +8 -14
  101. package/lib/blocks/helpers/createCompositeBlockSwitchField.js +8 -14
  102. package/lib/blocks/helpers/createCompositeBlockTextField.js +8 -14
  103. package/lib/blocks/helpers/decomposeUpdateStateAction.js +3 -9
  104. package/lib/blocks/helpers/deduplicateBlockDependencies.js +3 -10
  105. package/lib/blocks/helpers/isBlockInterface.js +1 -7
  106. package/lib/blocks/helpers/withAdditionalBlockAttributes.js +1 -7
  107. package/lib/blocks/iframebridge/HoverPreviewComponent.js +15 -24
  108. package/lib/blocks/iframebridge/HoverPreviewComponent.sc.d.ts +1 -3
  109. package/lib/blocks/iframebridge/HoverPreviewComponent.sc.d.ts.map +1 -1
  110. package/lib/blocks/iframebridge/HoverPreviewComponent.sc.js +6 -12
  111. package/lib/blocks/iframebridge/IFrameBridge.js +26 -32
  112. package/lib/blocks/iframebridge/IFrameMessage.js +16 -8
  113. package/lib/blocks/iframebridge/SelectPreviewComponent.js +9 -15
  114. package/lib/blocks/iframebridge/useIFrameBridge.js +4 -10
  115. package/lib/blocks/image/EditImageDialog.js +66 -69
  116. package/lib/blocks/rte/extension/CmsLink/Decorator.js +4 -10
  117. package/lib/blocks/rte/extension/CmsLink/EditorComponent.js +3 -9
  118. package/lib/blocks/rte/extension/CmsLink/createCmsLinkToolbarButton.js +46 -52
  119. package/lib/blocks/seo/useSeoTagGeneration.generated.js +1 -7
  120. package/lib/blocks/seo/useSeoTagGeneration.js +24 -30
  121. package/lib/blocks/seo/useSitemapChangeFrequencyFormOptions.js +3 -9
  122. package/lib/blocks/seo/useSitemapPagePriorityFormOptions.js +3 -9
  123. package/lib/blocks/table/CellValue.js +12 -18
  124. package/lib/blocks/table/ColumnHeader.js +74 -80
  125. package/lib/blocks/table/EditCell.js +23 -29
  126. package/lib/blocks/table/FailedToPasteSnackbar.js +8 -14
  127. package/lib/blocks/table/RowActionsCell.js +58 -64
  128. package/lib/blocks/table/TableBlockContext.js +7 -13
  129. package/lib/blocks/table/TableBlockGrid.js +31 -35
  130. package/lib/blocks/table/__mocks__/TableBlockData.mocks.js +23 -29
  131. package/lib/blocks/table/dataGridStyles.js +1 -7
  132. package/lib/blocks/table/utils/column.js +19 -25
  133. package/lib/blocks/table/utils/ensureMinimumTableState.js +4 -10
  134. package/lib/blocks/table/utils/getClipboardValueForSchema.js +3 -9
  135. package/lib/blocks/table/utils/row.js +15 -21
  136. package/lib/blocks/table/utils/rteSchema.js +3 -9
  137. package/lib/blocks/table/utils/useRecentlyPastedIds.js +6 -12
  138. package/lib/blocks/types.js +19 -22
  139. package/lib/blocks/utils/parallelAsyncEvery.js +1 -7
  140. package/lib/blocks/utils.js +1 -7
  141. package/lib/blocks/validators/isValidUrl.js +1 -7
  142. package/lib/blocks.generated.js +1 -5
  143. package/lib/builds/BuildEntry.generated.js +1 -7
  144. package/lib/builds/BuildEntry.js +44 -50
  145. package/lib/builds/PublishButton.js +13 -19
  146. package/lib/builds/PublisherPage.generated.js +1 -7
  147. package/lib/builds/PublisherPage.js +33 -39
  148. package/lib/builds/StartBuildsDialog.generated.js +1 -7
  149. package/lib/builds/StartBuildsDialog.js +29 -33
  150. package/lib/common/DropdownMenuItem.js +22 -29
  151. package/lib/common/DropdownMenuItem.sc.d.ts +3 -9
  152. package/lib/common/DropdownMenuItem.sc.d.ts.map +1 -1
  153. package/lib/common/DropdownMenuItem.sc.js +10 -16
  154. package/lib/common/InsertInBetweenAction.js +9 -15
  155. package/lib/common/InsertInBetweenActionButton.js +8 -14
  156. package/lib/common/MarkedMatches.js +16 -23
  157. package/lib/common/MasterMenu.js +20 -27
  158. package/lib/common/MasterMenuRoutes.js +11 -18
  159. package/lib/common/PageList.d.ts +1 -0
  160. package/lib/common/PageList.d.ts.map +1 -1
  161. package/lib/common/PageList.js +22 -28
  162. package/lib/common/PageName.d.ts +1 -0
  163. package/lib/common/PageName.d.ts.map +1 -1
  164. package/lib/common/PageName.generated.js +1 -7
  165. package/lib/common/PageName.js +15 -21
  166. package/lib/common/SearchInput.js +24 -30
  167. package/lib/common/apollo/links/includeInvisibleContentContext.js +3 -8
  168. package/lib/common/errors/errorMessages.js +9 -15
  169. package/lib/common/header/Header.js +13 -18
  170. package/lib/common/header/ImpersonationInlay.js +22 -28
  171. package/lib/common/header/UserHeaderItem.js +58 -64
  172. package/lib/common/header/about/AboutModal.js +41 -46
  173. package/lib/common/header/about/build-information/buildInformation.js +1 -5
  174. package/lib/common/header/about/build-information/useBuildInformation.js +3 -9
  175. package/lib/common/image/ChooseFocalPoint.js +19 -25
  176. package/lib/common/image/ImageCrop.js +15 -23
  177. package/lib/common/image/ImageCrop.sc.js +10 -16
  178. package/lib/common/impersonation/commonImpersonationMessages.js +6 -12
  179. package/lib/common/signOutButton/SignOutButton.gql.d.ts +1 -1
  180. package/lib/common/signOutButton/SignOutButton.gql.d.ts.map +1 -1
  181. package/lib/common/signOutButton/SignOutButton.gql.generated.js +1 -7
  182. package/lib/common/signOutButton/SignOutButton.gql.js +2 -8
  183. package/lib/common/signOutButton/SignOutButton.js +13 -18
  184. package/lib/common/useEditState.js +10 -17
  185. package/lib/common/useSaveState.d.ts +1 -1
  186. package/lib/common/useSaveState.d.ts.map +1 -1
  187. package/lib/common/useSaveState.js +11 -17
  188. package/lib/config/CometConfigContext.js +11 -18
  189. package/lib/contentLanguage/contentLanguageConfig.js +3 -9
  190. package/lib/contentLanguage/useContentLanguage.js +3 -9
  191. package/lib/contentScope/ContentScopeIndicator.js +21 -27
  192. package/lib/contentScope/ContentScopeSelect.js +40 -47
  193. package/lib/contentScope/Controls.d.ts +1 -1
  194. package/lib/contentScope/Controls.d.ts.map +1 -1
  195. package/lib/contentScope/Controls.js +6 -12
  196. package/lib/contentScope/Provider.d.ts +1 -1
  197. package/lib/contentScope/Provider.d.ts.map +1 -1
  198. package/lib/contentScope/Provider.js +29 -37
  199. package/lib/contentScope/noContentScopeFallback/NoContentScopeFallback.js +30 -36
  200. package/lib/contentScope/useContentScopeConfig.js +5 -11
  201. package/lib/contentScope/utils/createPathFromDimensionValues.js +1 -7
  202. package/lib/contentScope/utils/defaultCreatePath.js +5 -10
  203. package/lib/contentScope/utils/groupObjectsIntoArrays.js +1 -7
  204. package/lib/cronJobs/CronJobsGrid.generated.js +1 -7
  205. package/lib/cronJobs/CronJobsGrid.js +51 -55
  206. package/lib/cronJobs/CronJobsPage.js +27 -33
  207. package/lib/cronJobs/JobLogs.generated.js +1 -7
  208. package/lib/cronJobs/JobLogs.js +19 -25
  209. package/lib/cronJobs/JobRuntime.js +11 -17
  210. package/lib/cronJobs/JobStatus.d.ts +1 -1
  211. package/lib/cronJobs/JobStatus.js +2 -8
  212. package/lib/cronJobs/JobsGrid.generated.js +1 -7
  213. package/lib/cronJobs/JobsGrid.js +35 -41
  214. package/lib/dam/CurrentDamFolderProvider.js +7 -14
  215. package/lib/dam/DamPage.js +21 -26
  216. package/lib/dam/DamTable.js +36 -44
  217. package/lib/dam/DataGrid/DamContextMenu.d.ts.map +1 -1
  218. package/lib/dam/DataGrid/DamContextMenu.generated.js +1 -7
  219. package/lib/dam/DataGrid/DamContextMenu.gql.d.ts +3 -3
  220. package/lib/dam/DataGrid/DamContextMenu.gql.d.ts.map +1 -1
  221. package/lib/dam/DataGrid/DamContextMenu.gql.generated.js +1 -7
  222. package/lib/dam/DataGrid/DamContextMenu.gql.js +4 -10
  223. package/lib/dam/DataGrid/DamContextMenu.js +70 -77
  224. package/lib/dam/DataGrid/FolderDataGrid.gql.d.ts +5 -5
  225. package/lib/dam/DataGrid/FolderDataGrid.gql.d.ts.map +1 -1
  226. package/lib/dam/DataGrid/FolderDataGrid.gql.generated.js +1 -7
  227. package/lib/dam/DataGrid/FolderDataGrid.gql.js +9 -15
  228. package/lib/dam/DataGrid/FolderDataGrid.js +101 -125
  229. package/lib/dam/DataGrid/FolderDataGrid.sc.js +8 -14
  230. package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.d.ts +1 -1
  231. package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.d.ts.map +1 -1
  232. package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.generated.js +1 -7
  233. package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.js +2 -8
  234. package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.js +20 -26
  235. package/lib/dam/DataGrid/duplicatedFilenames/ManuallyHandleDuplicatedFilenamesDialog.d.ts +2 -2
  236. package/lib/dam/DataGrid/duplicatedFilenames/ManuallyHandleDuplicatedFilenamesDialog.d.ts.map +1 -1
  237. package/lib/dam/DataGrid/duplicatedFilenames/ManuallyHandleDuplicatedFilenamesDialog.js +49 -53
  238. package/lib/dam/DataGrid/fileUpload/FileUploadContext.js +10 -16
  239. package/lib/dam/DataGrid/fileUpload/FileUploadErrorDialog.js +35 -39
  240. package/lib/dam/DataGrid/fileUpload/ProgressDialog.js +21 -25
  241. package/lib/dam/DataGrid/fileUpload/UploadFilesButton.js +18 -24
  242. package/lib/dam/DataGrid/fileUpload/fileUpload.utils.js +2 -10
  243. package/lib/dam/DataGrid/fileUpload/fileUploadErrorMessages.js +26 -32
  244. package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.d.ts +2 -2
  245. package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.d.ts.map +1 -1
  246. package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.generated.js +1 -7
  247. package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.js +3 -9
  248. package/lib/dam/DataGrid/fileUpload/useDamFileUpload.js +58 -64
  249. package/lib/dam/DataGrid/filter/DamSortPopover.js +28 -36
  250. package/lib/dam/DataGrid/filter/DamSortPopover.sc.d.ts +2 -4
  251. package/lib/dam/DataGrid/filter/DamSortPopover.sc.d.ts.map +1 -1
  252. package/lib/dam/DataGrid/filter/DamSortPopover.sc.js +8 -14
  253. package/lib/dam/DataGrid/filter/DamTableFilter.d.ts.map +1 -1
  254. package/lib/dam/DataGrid/filter/DamTableFilter.js +15 -22
  255. package/lib/dam/DataGrid/footer/DamFooter.js +6 -12
  256. package/lib/dam/DataGrid/footer/UploadFooter.js +13 -19
  257. package/lib/dam/DataGrid/label/DamItemLabel.js +19 -25
  258. package/lib/dam/DataGrid/label/DamItemLabelColumn.js +25 -32
  259. package/lib/dam/DataGrid/selection/DamMoreActions.js +38 -44
  260. package/lib/dam/DataGrid/selection/DamSelectionContext.generated.js +1 -7
  261. package/lib/dam/DataGrid/selection/DamSelectionContext.js +42 -48
  262. package/lib/dam/DataGrid/tags/ArchivedTag.js +8 -14
  263. package/lib/dam/DataGrid/tags/LicenseValidityTags.js +16 -22
  264. package/lib/dam/DataGrid/tags/Tag.d.ts +1 -1
  265. package/lib/dam/DataGrid/tags/Tag.js +2 -8
  266. package/lib/dam/DataGrid/thumbnail/AudioThumbnail.js +8 -14
  267. package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.d.ts +1 -1
  268. package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.d.ts.map +1 -1
  269. package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.generated.js +1 -7
  270. package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.js +2 -8
  271. package/lib/dam/DataGrid/thumbnail/DamThumbnail.js +28 -41
  272. package/lib/dam/DataGrid/thumbnail/VideoThumbnail.js +8 -14
  273. package/lib/dam/DataGrid/useDamSearchHighlighting.js +5 -12
  274. package/lib/dam/FileActions/ConfirmDeleteDialog.js +28 -33
  275. package/lib/dam/FileActions/ConfirmDeleteDialog.sc.js +9 -15
  276. package/lib/dam/FileForm/CropSettingsFields.d.ts +1 -0
  277. package/lib/dam/FileForm/CropSettingsFields.d.ts.map +1 -1
  278. package/lib/dam/FileForm/CropSettingsFields.js +34 -40
  279. package/lib/dam/FileForm/Duplicates.generated.js +1 -7
  280. package/lib/dam/FileForm/Duplicates.js +37 -43
  281. package/lib/dam/FileForm/EditFile.gql.d.ts +3 -3
  282. package/lib/dam/FileForm/EditFile.gql.d.ts.map +1 -1
  283. package/lib/dam/FileForm/EditFile.gql.generated.d.ts +3 -0
  284. package/lib/dam/FileForm/EditFile.gql.generated.d.ts.map +1 -1
  285. package/lib/dam/FileForm/EditFile.gql.generated.js +1 -7
  286. package/lib/dam/FileForm/EditFile.gql.js +5 -11
  287. package/lib/dam/FileForm/EditFile.js +79 -86
  288. package/lib/dam/FileForm/FilePreview.d.ts.map +1 -1
  289. package/lib/dam/FileForm/FilePreview.gql.d.ts +3 -3
  290. package/lib/dam/FileForm/FilePreview.gql.d.ts.map +1 -1
  291. package/lib/dam/FileForm/FilePreview.gql.generated.js +1 -7
  292. package/lib/dam/FileForm/FilePreview.gql.js +4 -10
  293. package/lib/dam/FileForm/FilePreview.js +56 -64
  294. package/lib/dam/FileForm/FileSettingsFields.generated.js +1 -7
  295. package/lib/dam/FileForm/FileSettingsFields.gql.d.ts +2 -2
  296. package/lib/dam/FileForm/FileSettingsFields.gql.d.ts.map +1 -1
  297. package/lib/dam/FileForm/FileSettingsFields.gql.generated.js +1 -7
  298. package/lib/dam/FileForm/FileSettingsFields.gql.js +3 -9
  299. package/lib/dam/FileForm/FileSettingsFields.js +78 -84
  300. package/lib/dam/FileForm/ImageInfos.js +24 -30
  301. package/lib/dam/FileForm/ReplaceFileButton.js +30 -36
  302. package/lib/dam/FileForm/licenseType.js +6 -12
  303. package/lib/dam/FileForm/previews/AudioPreview.js +15 -21
  304. package/lib/dam/FileForm/previews/DefaultFilePreview.js +11 -17
  305. package/lib/dam/FileForm/previews/ImagePreview.d.ts +1 -0
  306. package/lib/dam/FileForm/previews/ImagePreview.d.ts.map +1 -1
  307. package/lib/dam/FileForm/previews/ImagePreview.js +4 -10
  308. package/lib/dam/FileForm/previews/PdfPreview.js +7 -13
  309. package/lib/dam/FileForm/previews/VideoPreview.generated.js +1 -7
  310. package/lib/dam/FileForm/previews/VideoPreview.js +15 -21
  311. package/lib/dam/FolderForm/AddFolder.gql.d.ts +1 -1
  312. package/lib/dam/FolderForm/AddFolder.gql.d.ts.map +1 -1
  313. package/lib/dam/FolderForm/AddFolder.gql.generated.js +1 -7
  314. package/lib/dam/FolderForm/AddFolder.gql.js +2 -8
  315. package/lib/dam/FolderForm/AddFolder.js +13 -19
  316. package/lib/dam/FolderForm/EditFolder.gql.d.ts +2 -2
  317. package/lib/dam/FolderForm/EditFolder.gql.d.ts.map +1 -1
  318. package/lib/dam/FolderForm/EditFolder.gql.generated.js +1 -7
  319. package/lib/dam/FolderForm/EditFolder.gql.js +3 -9
  320. package/lib/dam/FolderForm/EditFolder.js +11 -17
  321. package/lib/dam/FolderForm/FolderFormFields.js +7 -13
  322. package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.d.ts +1 -1
  323. package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.d.ts.map +1 -1
  324. package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.generated.js +1 -7
  325. package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.js +2 -8
  326. package/lib/dam/MoveDamItemDialog/ChooseFolder.js +30 -43
  327. package/lib/dam/MoveDamItemDialog/MoveDamItemDialog.js +44 -48
  328. package/lib/dam/MoveDamItemDialog/useFolderTree.js +11 -17
  329. package/lib/dam/MoveDamItemDialog/useFolderTreeSearch.js +14 -21
  330. package/lib/dam/blocks/DamFileDownloadLinkBlock.generated.js +1 -7
  331. package/lib/dam/blocks/DamFileDownloadLinkBlock.js +27 -33
  332. package/lib/dam/blocks/DamImageBlock.d.ts +1 -1
  333. package/lib/dam/blocks/DamImageBlock.d.ts.map +1 -1
  334. package/lib/dam/blocks/DamImageBlock.js +26 -31
  335. package/lib/dam/config/DamScopeContext.js +2 -8
  336. package/lib/dam/config/DamScopeProvider.js +8 -14
  337. package/lib/dam/config/damConfig.js +4 -11
  338. package/lib/dam/config/damDefaultAcceptedMimeTypes.js +1 -7
  339. package/lib/dam/config/useDamAcceptedMimeTypes.js +5 -11
  340. package/lib/dam/config/useDamScope.js +5 -10
  341. package/lib/dam/dependencies/createDamFileDependency.generated.js +1 -7
  342. package/lib/dam/dependencies/createDamFileDependency.js +8 -13
  343. package/lib/dam/helpers/clearDamItemCache.js +1 -7
  344. package/lib/dam/helpers/isFile.js +1 -7
  345. package/lib/dam/helpers/isFolder.js +1 -7
  346. package/lib/dam/helpers/slugifyFilename.js +3 -10
  347. package/lib/dam/mediaAlternatives/MediaAlternativeForm.generated.js +1 -7
  348. package/lib/dam/mediaAlternatives/MediaAlternativeForm.js +25 -31
  349. package/lib/dam/mediaAlternatives/MediaAlternativesGrid.d.ts +1 -1
  350. package/lib/dam/mediaAlternatives/MediaAlternativesGrid.d.ts.map +1 -1
  351. package/lib/dam/mediaAlternatives/MediaAlternativesGrid.generated.js +1 -7
  352. package/lib/dam/mediaAlternatives/MediaAlternativesGrid.js +44 -51
  353. package/lib/dashboard/DashboardHeader.js +12 -18
  354. package/lib/dashboard/DateTime.js +15 -21
  355. package/lib/dashboard/DefaultGreeting.js +6 -12
  356. package/lib/dashboard/widgets/DashboardWidgetRoot.js +8 -14
  357. package/lib/dashboard/widgets/LatestBuildsDashboardWidget.generated.js +1 -7
  358. package/lib/dashboard/widgets/LatestBuildsDashboardWidget.js +19 -25
  359. package/lib/dashboard/widgets/LatestContentUpdatesDashboardWidget.js +16 -22
  360. package/lib/dependencies/DependenciesList.d.ts +30 -0
  361. package/lib/dependencies/DependenciesList.d.ts.map +1 -0
  362. package/lib/dependencies/DependenciesList.js +282 -0
  363. package/lib/dependencies/DependentsList.d.ts +30 -0
  364. package/lib/dependencies/DependentsList.d.ts.map +1 -0
  365. package/lib/dependencies/{DependencyList.js → DependentsList.js} +190 -167
  366. package/lib/dependencies/createDependencyMethods.js +3 -9
  367. package/lib/dependencies/createDocumentDependencyMethods.js +3 -9
  368. package/lib/dependencies/dependenciesConfig.js +3 -9
  369. package/lib/dependencies/getDisplayNameString.d.ts +4 -0
  370. package/lib/dependencies/getDisplayNameString.d.ts.map +1 -0
  371. package/lib/dependencies/getDisplayNameString.js +12 -0
  372. package/lib/dependencies/types.js +1 -5
  373. package/lib/documents/ContentGenerationConfigContext.js +7 -13
  374. package/lib/documents/createDocumentRootBlocksMethods.js +1 -7
  375. package/lib/documents/types.js +1 -5
  376. package/lib/form/SyncFields.js +7 -13
  377. package/lib/form/file/DamPathLazy.generated.js +1 -7
  378. package/lib/form/file/DamPathLazy.js +7 -13
  379. package/lib/form/file/FileField.gql.d.ts +1 -1
  380. package/lib/form/file/FileField.gql.d.ts.map +1 -1
  381. package/lib/form/file/FileField.gql.generated.js +1 -7
  382. package/lib/form/file/FileField.gql.js +3 -9
  383. package/lib/form/file/FileField.js +53 -58
  384. package/lib/form/file/FileUploadField.js +6 -12
  385. package/lib/form/file/FinalFormFileUpload.d.ts +2 -2
  386. package/lib/form/file/FinalFormFileUpload.d.ts.map +1 -1
  387. package/lib/form/file/FinalFormFileUpload.generated.js +1 -7
  388. package/lib/form/file/FinalFormFileUpload.js +20 -26
  389. package/lib/form/file/chooseFile/ChooseFileDialog.js +28 -35
  390. package/lib/form/file/chooseFile/RedirectToPersistedDamLocation.js +12 -18
  391. package/lib/form/file/upload.js +3 -11
  392. package/lib/form/queryUpdatedAt.js +3 -9
  393. package/lib/form/serializeInitialValues.js +1 -7
  394. package/lib/form/useFormSaveConflict.d.ts +2 -2
  395. package/lib/form/useFormSaveConflict.d.ts.map +1 -1
  396. package/lib/form/useFormSaveConflict.js +3 -9
  397. package/lib/graphql.generated.d.ts +27 -3
  398. package/lib/graphql.generated.d.ts.map +1 -1
  399. package/lib/graphql.generated.js +1 -5
  400. package/lib/index.d.ts +3 -4
  401. package/lib/index.d.ts.map +1 -1
  402. package/lib/index.js +144 -1128
  403. package/lib/pages/LocalPageTreeNodeDocumentAnchors.js +7 -13
  404. package/lib/pages/SaveConflictDialog.js +54 -57
  405. package/lib/pages/config/usePageTreeScope.js +5 -11
  406. package/lib/pages/createEditPageNode.d.ts +1 -1
  407. package/lib/pages/createEditPageNode.d.ts.map +1 -1
  408. package/lib/pages/createEditPageNode.generated.js +1 -7
  409. package/lib/pages/createEditPageNode.js +83 -90
  410. package/lib/pages/createUsePage.d.ts +1 -1
  411. package/lib/pages/createUsePage.d.ts.map +1 -1
  412. package/lib/pages/createUsePage.generated.js +1 -7
  413. package/lib/pages/createUsePage.js +46 -45
  414. package/lib/pages/pageSearch/PageSearch.js +4 -10
  415. package/lib/pages/pageSearch/usePageSearch.d.ts +1 -1
  416. package/lib/pages/pageSearch/usePageSearch.d.ts.map +1 -1
  417. package/lib/pages/pageSearch/usePageSearch.generated.js +1 -7
  418. package/lib/pages/pageSearch/usePageSearch.js +16 -22
  419. package/lib/pages/pageTree/CopyPasteMenuItem.js +19 -25
  420. package/lib/pages/pageTree/MovePageMenuItem.generated.js +1 -7
  421. package/lib/pages/pageTree/MovePageMenuItem.js +17 -23
  422. package/lib/pages/pageTree/Page.d.ts +1 -1
  423. package/lib/pages/pageTree/Page.d.ts.map +1 -1
  424. package/lib/pages/pageTree/Page.generated.js +1 -7
  425. package/lib/pages/pageTree/Page.js +2 -8
  426. package/lib/pages/pageTree/PageActions.js +54 -60
  427. package/lib/pages/pageTree/PageDeleteDialog.js +56 -58
  428. package/lib/pages/pageTree/PageDeleteDialog.sc.d.ts +1 -3
  429. package/lib/pages/pageTree/PageDeleteDialog.sc.d.ts.map +1 -1
  430. package/lib/pages/pageTree/PageDeleteDialog.sc.js +8 -14
  431. package/lib/pages/pageTree/PageInfo.js +13 -19
  432. package/lib/pages/pageTree/PageLabel.js +25 -31
  433. package/lib/pages/pageTree/PageTree.generated.js +1 -7
  434. package/lib/pages/pageTree/PageTree.js +52 -58
  435. package/lib/pages/pageTree/PageTreeContext.js +2 -8
  436. package/lib/pages/pageTree/PageTreeDragLayer.js +13 -22
  437. package/lib/pages/pageTree/PageTreeDragLayer.sc.d.ts +2 -2
  438. package/lib/pages/pageTree/PageTreeDragLayer.sc.d.ts.map +1 -1
  439. package/lib/pages/pageTree/PageTreeDragLayer.sc.js +3 -9
  440. package/lib/pages/pageTree/PageTreeRow.js +54 -63
  441. package/lib/pages/pageTree/PageTreeRow.sc.js +9 -15
  442. package/lib/pages/pageTree/PageTreeRowDivider.js +12 -18
  443. package/lib/pages/pageTree/PageTreeService.js +2 -7
  444. package/lib/pages/pageTree/PageTypeIcon.d.ts +1 -0
  445. package/lib/pages/pageTree/PageTypeIcon.d.ts.map +1 -1
  446. package/lib/pages/pageTree/PageTypeIcon.js +8 -14
  447. package/lib/pages/pageTree/PageVisibility.d.ts +1 -1
  448. package/lib/pages/pageTree/PageVisibility.d.ts.map +1 -1
  449. package/lib/pages/pageTree/PageVisibility.generated.js +1 -7
  450. package/lib/pages/pageTree/PageVisibility.js +37 -43
  451. package/lib/pages/pageTree/PageVisibilityIcon.d.ts +1 -0
  452. package/lib/pages/pageTree/PageVisibilityIcon.d.ts.map +1 -1
  453. package/lib/pages/pageTree/PageVisibilityIcon.js +6 -12
  454. package/lib/pages/pageTree/common/PageTreeTableRow.d.ts +1 -1
  455. package/lib/pages/pageTree/common/PageTreeTableRow.d.ts.map +1 -1
  456. package/lib/pages/pageTree/common/PageTreeTableRow.js +18 -24
  457. package/lib/pages/pageTree/treemap/TreeMapUtils.js +9 -14
  458. package/lib/pages/pageTree/useButtonHoverStates.js +4 -10
  459. package/lib/pages/pageTree/useCopyPastePages/ProgressDialog.js +26 -30
  460. package/lib/pages/pageTree/useCopyPastePages/createInboxFolder.generated.js +1 -7
  461. package/lib/pages/pageTree/useCopyPastePages/createInboxFolder.js +7 -13
  462. package/lib/pages/pageTree/useCopyPastePages/sendPages.generated.js +1 -7
  463. package/lib/pages/pageTree/useCopyPastePages/sendPages.js +33 -39
  464. package/lib/pages/pageTree/useCopyPastePages.js +38 -43
  465. package/lib/pages/pageTree/useDndWindowScroll/ScrollManager.js +3 -8
  466. package/lib/pages/pageTree/useDndWindowScroll/useAnimationFrame.js +6 -11
  467. package/lib/pages/pageTree/useDndWindowScroll/useDndWindowScroll.d.ts +1 -1
  468. package/lib/pages/pageTree/useDndWindowScroll/useDndWindowScroll.d.ts.map +1 -1
  469. package/lib/pages/pageTree/useDndWindowScroll/useDndWindowScroll.js +12 -19
  470. package/lib/pages/pageTree/usePageTree.d.ts +1 -1
  471. package/lib/pages/pageTree/usePageTree.d.ts.map +1 -1
  472. package/lib/pages/pageTree/usePageTree.generated.js +1 -7
  473. package/lib/pages/pageTree/usePageTree.js +17 -24
  474. package/lib/pages/pageTree/usePageTreeContext.js +4 -10
  475. package/lib/pages/pageTreeConfig.js +3 -9
  476. package/lib/pages/pageTreeSelect/FinalFormPageTreeSelect.d.ts +1 -0
  477. package/lib/pages/pageTreeSelect/FinalFormPageTreeSelect.d.ts.map +1 -1
  478. package/lib/pages/pageTreeSelect/FinalFormPageTreeSelect.js +4 -11
  479. package/lib/pages/pageTreeSelect/PageTreeSelect.generated.js +1 -7
  480. package/lib/pages/pageTreeSelect/PageTreeSelect.js +20 -27
  481. package/lib/pages/pageTreeSelect/PageTreeSelectDialog.d.ts +2 -1
  482. package/lib/pages/pageTreeSelect/PageTreeSelectDialog.d.ts.map +1 -1
  483. package/lib/pages/pageTreeSelect/PageTreeSelectDialog.generated.js +1 -7
  484. package/lib/pages/pageTreeSelect/PageTreeSelectDialog.js +88 -96
  485. package/lib/pages/pageTreeSelect/PageTreeSelectDialog.sc.js +6 -12
  486. package/lib/pages/pagesPage/ConfirmPageActionDialog.js +23 -27
  487. package/lib/pages/pagesPage/PageCanNotDeleteDialog.js +15 -19
  488. package/lib/pages/pagesPage/PagesPage.js +80 -86
  489. package/lib/pages/pagesPage/PagesPageActionToolbar.js +97 -103
  490. package/lib/pages/pagesPage/PagesPageActionToolbar.sc.d.ts +4 -8
  491. package/lib/pages/pagesPage/PagesPageActionToolbar.sc.d.ts.map +1 -1
  492. package/lib/pages/pagesPage/PagesPageActionToolbar.sc.js +6 -12
  493. package/lib/pages/pagesPage/PagesPageActionToolbarBatchUpdateHelper.js +5 -11
  494. package/lib/pages/pagesPage/areAllSubTreesFullSelected.js +4 -10
  495. package/lib/pages/pagesPage/createPagesQuery.generated.js +1 -7
  496. package/lib/pages/pagesPage/createPagesQuery.js +6 -12
  497. package/lib/pages/resolveHasSaveConflict.js +5 -11
  498. package/lib/pages/usePageTreeDocumentAnchors.generated.js +1 -7
  499. package/lib/pages/usePageTreeDocumentAnchors.js +10 -14
  500. package/lib/pages/useSaveConflict.js +20 -26
  501. package/lib/pages/useSaveConflictQuery.js +7 -13
  502. package/lib/preview/block/BlockPreview.generated.js +1 -7
  503. package/lib/preview/block/BlockPreview.js +33 -38
  504. package/lib/preview/block/BlockPreviewWithTabs.js +10 -15
  505. package/lib/preview/block/SplitPreview.js +22 -27
  506. package/lib/preview/block/SplitPreview.sc.js +12 -19
  507. package/lib/preview/block/useBlockPreview.js +7 -12
  508. package/lib/preview/common/Device.js +3 -8
  509. package/lib/preview/common/DeviceToggle.js +22 -27
  510. package/lib/preview/common/IFrameViewer.js +24 -30
  511. package/lib/preview/common/ToggleButton.d.ts +1 -3
  512. package/lib/preview/common/ToggleButton.d.ts.map +1 -1
  513. package/lib/preview/common/ToggleButton.js +5 -10
  514. package/lib/preview/common/VisibilityToggle.js +9 -14
  515. package/lib/preview/openSitePreviewWindow.js +2 -8
  516. package/lib/preview/site/OpenLinkDialog.js +31 -33
  517. package/lib/preview/site/SitePreview.generated.js +1 -7
  518. package/lib/preview/site/SitePreview.js +58 -61
  519. package/lib/preview/site/SitePreview.sc.d.ts +1 -3
  520. package/lib/preview/site/SitePreview.sc.d.ts.map +1 -1
  521. package/lib/preview/site/SitePreview.sc.js +8 -14
  522. package/lib/preview/site/iframebridge/SitePreviewIFrameMessage.js +3 -7
  523. package/lib/preview/site/iframebridge/useSitePreviewIFrameBridge.js +5 -11
  524. package/lib/redirects/RedirectActiveness.d.ts +2 -1
  525. package/lib/redirects/RedirectActiveness.d.ts.map +1 -1
  526. package/lib/redirects/RedirectActiveness.generated.js +1 -7
  527. package/lib/redirects/RedirectActiveness.js +26 -32
  528. package/lib/redirects/RedirectForm.d.ts +1 -0
  529. package/lib/redirects/RedirectForm.d.ts.map +1 -1
  530. package/lib/redirects/RedirectForm.generated.js +1 -7
  531. package/lib/redirects/RedirectForm.gql.d.ts +3 -3
  532. package/lib/redirects/RedirectForm.gql.d.ts.map +1 -1
  533. package/lib/redirects/RedirectForm.gql.generated.js +1 -7
  534. package/lib/redirects/RedirectForm.gql.js +5 -11
  535. package/lib/redirects/RedirectForm.js +64 -65
  536. package/lib/redirects/RedirectsGrid.d.ts +1 -0
  537. package/lib/redirects/RedirectsGrid.d.ts.map +1 -1
  538. package/lib/redirects/RedirectsGrid.gql.d.ts +2 -2
  539. package/lib/redirects/RedirectsGrid.gql.d.ts.map +1 -1
  540. package/lib/redirects/RedirectsGrid.gql.generated.js +1 -7
  541. package/lib/redirects/RedirectsGrid.gql.js +6 -11
  542. package/lib/redirects/RedirectsGrid.js +48 -55
  543. package/lib/redirects/createRedirectsPage.d.ts +1 -1
  544. package/lib/redirects/createRedirectsPage.d.ts.map +1 -1
  545. package/lib/redirects/createRedirectsPage.js +37 -43
  546. package/lib/redirects/redirectsConfig.js +5 -11
  547. package/lib/redirects/submitMutation.js +5 -11
  548. package/lib/siteConfigs/siteConfigsConfig.js +1 -5
  549. package/lib/siteConfigs/useSiteConfig.js +3 -9
  550. package/lib/siteConfigs/useSiteConfigs.js +3 -9
  551. package/lib/testing/test-utils.js +15 -32
  552. package/lib/translation/AzureAiTranslatorProvider.generated.js +1 -7
  553. package/lib/translation/AzureAiTranslatorProvider.js +11 -17
  554. package/lib/userPermissions/ImpersonateMenuItem.generated.js +1 -7
  555. package/lib/userPermissions/ImpersonateMenuItem.js +27 -33
  556. package/lib/userPermissions/UserGrid.generated.js +1 -7
  557. package/lib/userPermissions/UserGrid.js +45 -51
  558. package/lib/userPermissions/UserPermissionsPage.js +42 -48
  559. package/lib/userPermissions/hooks/currentUser.generated.js +1 -7
  560. package/lib/userPermissions/hooks/currentUser.js +21 -27
  561. package/lib/userPermissions/user/ImpersonationButtons.js +18 -24
  562. package/lib/userPermissions/user/UserPageToolbar.generated.js +1 -7
  563. package/lib/userPermissions/user/UserPageToolbar.js +29 -35
  564. package/lib/userPermissions/user/basicData/UserBasicData.generated.js +1 -7
  565. package/lib/userPermissions/user/basicData/UserBasicData.js +23 -29
  566. package/lib/userPermissions/user/permissions/ContentScopeGrid.generated.js +1 -7
  567. package/lib/userPermissions/user/permissions/ContentScopeGrid.js +38 -44
  568. package/lib/userPermissions/user/permissions/OverrideContentScopesDialog.generated.js +1 -7
  569. package/lib/userPermissions/user/permissions/OverrideContentScopesDialog.js +34 -38
  570. package/lib/userPermissions/user/permissions/PermissionDialog.d.ts.map +1 -1
  571. package/lib/userPermissions/user/permissions/PermissionDialog.generated.js +1 -7
  572. package/lib/userPermissions/user/permissions/PermissionDialog.js +50 -54
  573. package/lib/userPermissions/user/permissions/PermissionGrid.generated.js +1 -7
  574. package/lib/userPermissions/user/permissions/PermissionGrid.js +48 -54
  575. package/lib/userPermissions/user/permissions/PermissionsPanel.js +9 -15
  576. package/lib/userPermissions/user/permissions/selectScopesDialogContent/SelectScopesDialogContent.generated.js +1 -7
  577. package/lib/userPermissions/user/permissions/selectScopesDialogContent/SelectScopesDialogContent.js +19 -26
  578. package/lib/userPermissions/utils/camelCaseToHumanReadable.js +1 -7
  579. package/lib/userPermissions/utils/handleImpersonation.js +5 -12
  580. package/lib/validation/isLinkTarget.js +6 -12
  581. package/lib/validation/isPhoneNumber.js +1 -7
  582. package/lib/validation/validateLinkTarget.js +6 -12
  583. package/lib/validation/validatePhoneNumber.js +6 -12
  584. package/lib/validation/validateUrl.js +6 -12
  585. package/lib/vendors.d.js +1 -5
  586. package/lib/warnings/LatestWarningsDashboardWidget.generated.js +1 -7
  587. package/lib/warnings/LatestWarningsDashboardWidget.js +27 -33
  588. package/lib/warnings/WarningActions.js +25 -31
  589. package/lib/warnings/WarningMessage.d.ts +1 -1
  590. package/lib/warnings/WarningMessage.d.ts.map +1 -1
  591. package/lib/warnings/WarningMessage.js +1 -7
  592. package/lib/warnings/WarningSeverity.js +9 -15
  593. package/lib/warnings/WarningsGrid.generated.js +1 -7
  594. package/lib/warnings/WarningsGrid.js +45 -52
  595. package/lib/warnings/WarningsPage.js +11 -17
  596. package/lib/warnings/warningMessages.js +10 -16
  597. package/lib/warnings/warningsConfig.js +5 -11
  598. package/package.json +25 -26
  599. package/lib/dependencies/DependencyList.d.ts +0 -29
  600. package/lib/dependencies/DependencyList.d.ts.map +0 -1
  601. package/lib/dependencies/DependencyList.sc.d.ts +0 -11
  602. package/lib/dependencies/DependencyList.sc.d.ts.map +0 -1
  603. package/lib/dependencies/DependencyList.sc.js +0 -79
  604. package/lib/http/createHttpClient.d.ts +0 -3
  605. package/lib/http/createHttpClient.d.ts.map +0 -1
  606. 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)."; } // Using {} instead of Record<string, never> because never and unknown are incompatible.
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
- function createBlocksBlock(_ref, override) {
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__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
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({}, (0, _createBlockSkeleton.createBlockSkeleton)()), {}, {
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, (0, _parallelAsyncEvery.parallelAsyncEvery)(state.blocks, /*#__PURE__*/function () {
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 (0, _deduplicateBlockDependencies.deduplicateBlockDependencies)(mergedDependencies);
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 = (0, _react.useCallback)(function (blockKey) {
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 = (0, _react.useState)(false),
339
+ var _useState = useState(false),
344
340
  _useState2 = _slicedToArray(_useState, 2),
345
341
  showAddBlockDrawer = _useState2[0],
346
342
  setShowAddBlockDrawer = _useState2[1];
347
- var _useState3 = (0, _react.useState)(),
343
+ var _useState3 = useState(),
348
344
  _useState4 = _slicedToArray(_useState3, 2),
349
345
  beforeIndex = _useState4[0],
350
346
  setBeforeIndex = _useState4[1];
351
- var _useState5 = (0, _react.useState)(),
347
+ var _useState5 = useState(),
352
348
  _useState6 = _slicedToArray(_useState5, 2),
353
349
  cannotPasteBlockError = _useState6[0],
354
350
  setCannotPasteBlockError = _useState6[1];
355
- var snackbarApi = (0, _admin.useSnackbarApi)();
351
+ var snackbarApi = useSnackbarApi();
356
352
  var totalVisibleBlocks = state.blocks.filter(function (block) {
357
353
  return block.visible;
358
354
  }).length;
359
- (0, _react.useEffect)(function () {
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 = (0, _react.useCallback)(function (removedBlocks) {
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 = (0, _react.useCallback)(function (blockKeys) {
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__*/(0, _jsxRuntime.jsx)(_admin.UndoSnackbar, {
406
- message: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
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 = (0, _uuid.v4)();
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 = (0, _react.useCallback)(function (blockKey) {
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: (0, _utils.resolveNewState)({
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 = (0, _Provider.useContentScope)(),
492
+ var _useContentScope = useContentScope(),
497
493
  scope = _useContentScope.scope;
498
- var _useBlocksConfig = (0, _BlocksConfigContext.useBlocksConfig)(),
494
+ var _useBlocksConfig = useBlocksConfig(),
499
495
  isBlockSupported = _useBlocksConfig.isBlockSupported;
500
- var filteredSupportedBlocks = (0, _react.useMemo)(function () {
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 = (0, _useBlockClipboard2.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: (0, _uuid.v4)(),
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__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
624
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_admin.StackSwitch, {
619
+ return /*#__PURE__*/_jsxs(_Fragment, {
620
+ children: [/*#__PURE__*/_jsxs(StackSwitch, {
625
621
  disableForcePromptRoute: true,
626
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_admin.StackPage, {
622
+ children: [/*#__PURE__*/_jsx(StackPage, {
627
623
  name: "main",
628
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_admin.StackSwitchApiContext.Consumer, {
624
+ children: /*#__PURE__*/_jsx(StackSwitchApiContext.Consumer, {
629
625
  children: function children(stackApi) {
630
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_SelectPreviewComponent.SelectPreviewComponent, {
631
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_BlockAdminComponentPaper.BlockAdminComponentPaper, {
626
+ return /*#__PURE__*/_jsxs(SelectPreviewComponent, {
627
+ children: [/*#__PURE__*/_jsxs(BlockAdminComponentPaper, {
632
628
  disablePadding: true,
633
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_AdminComponentStickyHeader.AdminComponentStickyHeader, {
634
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(BlockListHeader, {
635
- children: [state.blocks.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(SelectAllFromControlLabel, {
636
- control: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Checkbox, {
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__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
637
+ label: /*#__PURE__*/_jsx(FormattedMessage, {
642
638
  id: "comet.blocks.list.selectAll",
643
639
  defaultMessage: "Select all"
644
640
  })
645
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(BlockListHeaderActionContainer, {
646
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_admin.RowActionsMenu, {
647
- children: [!maxVisibleBlocks && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
648
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_admin.RowActionsItem, {
649
- icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_adminIcons.Visible, {}),
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__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
650
+ children: /*#__PURE__*/_jsx(FormattedMessage, {
655
651
  id: "comet.blocks.list.action.visible",
656
652
  defaultMessage: "Make visible"
657
653
  })
658
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_admin.RowActionsItem, {
659
- icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_adminIcons.Invisible, {}),
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__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
660
+ children: /*#__PURE__*/_jsx(FormattedMessage, {
665
661
  id: "comet.blocks.list.action.invisible",
666
662
  defaultMessage: "Make invisible"
667
663
  })
668
664
  })]
669
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Separator, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_admin.RowActionsItem, {
670
- icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_adminIcons.Delete, {}),
665
+ }), /*#__PURE__*/_jsx(Separator, {}), /*#__PURE__*/_jsx(RowActionsItem, {
666
+ icon: /*#__PURE__*/_jsx(Delete, {}),
671
667
  disabled: selectedCount === 0,
672
668
  onClick: handleDeleteAllSelectedBlocks,
673
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
669
+ children: /*#__PURE__*/_jsx(FormattedMessage, {
674
670
  id: "comet.blocks.list.action.delete",
675
671
  defaultMessage: "Delete"
676
672
  })
677
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_admin.RowActionsItem, {
678
- icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_adminIcons.Copy, {}),
673
+ }), /*#__PURE__*/_jsx(RowActionsItem, {
674
+ icon: /*#__PURE__*/_jsx(Copy, {}),
679
675
  disabled: selectedCount === 0,
680
676
  onClick: handleCopySelectedBlocks,
681
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
677
+ children: /*#__PURE__*/_jsx(FormattedMessage, {
682
678
  id: "comet.blocks.list.action.copy",
683
679
  defaultMessage: "Copy"
684
680
  })
685
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_admin.RowActionsItem, {
686
- icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_adminIcons.Paste, {}),
681
+ }), /*#__PURE__*/_jsx(RowActionsItem, {
682
+ icon: /*#__PURE__*/_jsx(Paste, {}),
687
683
  onClick: function onClick() {
688
684
  return pasteBlock(0);
689
685
  },
690
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
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__*/(0, _jsxRuntime.jsxs)("div", {
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__*/(0, _jsxRuntime.jsx)(_HoverPreviewComponent.HoverPreviewComponent, {
703
+ return /*#__PURE__*/_jsx(HoverPreviewComponent, {
708
704
  componentSlug: "".concat(data.key, "/blocks"),
709
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_BlockRow.BlockRow, {
705
+ children: /*#__PURE__*/_jsx(BlockRow, {
710
706
  id: data.key,
711
707
  renderPreviewContent: function renderPreviewContent() {
712
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_BlockPreviewContent.BlockPreviewContent, {
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__*/(0, _jsxRuntime.jsx)(_admin.Tooltip, {
735
- title: showMaxBlocksAllowedMessage ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
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__*/(0, _jsxRuntime.jsx)(_material.Box, {
738
+ children: /*#__PURE__*/_jsx(Box, {
743
739
  component: "span",
744
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.IconButton, {
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__*/(0, _jsxRuntime.jsx)(_adminIcons.Visible, {
746
+ children: data.visible ? /*#__PURE__*/_jsx(Visible, {
751
747
  color: "success"
752
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_adminIcons.Invisible, {
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__*/(0, _jsxRuntime.jsx)(AdditionalItemContextMenuItems, {
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__*/(0, _jsxRuntime.jsx)(AdditionalItemContent, {
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__*/(0, _jsxRuntime.jsx)(_BlockAdminComponentButton.BlockAdminComponentButton, {
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__*/(0, _jsxRuntime.jsxs)(LargeAddButtonContent, {
812
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(LargeAddButtonIcon, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, {
813
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
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__*/(0, _jsxRuntime.jsx)(_AdminComponentStickyFooter.AdminComponentStickyFooter, {
820
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_BlockAdminComponentButton.BlockAdminComponentButton, {
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__*/(0, _jsxRuntime.jsx)(_adminIcons.Add, {}),
827
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
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__*/(0, _jsxRuntime.jsx)(_AddBlockDrawer.AddBlockDrawer, {
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__*/(0, _jsxRuntime.jsx)(_admin.StackPage, {
844
+ }), /*#__PURE__*/_jsx(StackPage, {
849
845
  name: "blocks",
850
846
  title: "Block bearbeiten",
851
847
  children: function children(id) {
852
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_admin.StackSwitchApiContext.Consumer, {
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__*/(0, _jsxRuntime.jsx)(_admin.StackPageTitle, {
862
+ return /*#__PURE__*/_jsx(StackPageTitle, {
867
863
  title: block.displayName,
868
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(block.AdminComponent, {
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__*/(0, _jsxRuntime.jsx)(_CannotPasteBlockDialog.CannotPasteBlockDialog, {
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__*/(0, _jsxRuntime.jsx)(_reactIntl.FormattedMessage, {
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__*/(0, _styles.styled)("div", process.env.NODE_ENV === "production" ? {
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__*/(0, _styles.styled)("div", process.env.NODE_ENV === "production" ? {
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__*/(0, _styles.styled)(_material.FormControlLabel, process.env.NODE_ENV === "production" ? {
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__*/(0, _styles.styled)("span", process.env.NODE_ENV === "production" ? {
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__*/(0, _styles.styled)(_adminIcons.Add, process.env.NODE_ENV === "production" ? {
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__*/(0, _styles.styled)("div", process.env.NODE_ENV === "production" ? {
1001
+ var Separator = /*#__PURE__*/styled("div", process.env.NODE_ENV === "production" ? {
1006
1002
  target: "e1dbbzf50"
1007
1003
  } : {
1008
1004
  target: "e1dbbzf50",