@cannyminds/dms-file-viewers 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-BYCREULH.js → chunk-4JX2MJLJ.js} +108 -59
- package/dist/chunk-4JX2MJLJ.js.map +1 -0
- package/dist/{chunk-UFPC67AQ.mjs → chunk-PCLERVB7.mjs} +108 -59
- package/dist/chunk-PCLERVB7.mjs.map +1 -0
- package/dist/components/viewers/PDFViewer.js +2 -2
- package/dist/components/viewers/PDFViewer.mjs +1 -1
- package/dist/index.js +2 -2
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-BYCREULH.js.map +0 -1
- package/dist/chunk-UFPC67AQ.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/viewers/PDFViewer.tsx","../src/components/viewers/pdf/StablePDFViewer.tsx","../src/components/viewers/pdf/PDFToolbar.tsx","../src/components/viewers/pdf/PDFHeader.tsx","../src/components/viewers/pdf/SearchSidebar.tsx","../src/components/viewers/pdf/PasswordDialog.tsx"],"sourcesContent":["import React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from \"react\";\r\nimport { FileViewerProps } from \"../../types\";\r\nimport { getFileExtension } from \"../../utils/fileUtils\";\r\nimport { mergeToolbarConfig } from \"../../utils/toolbarUtils\";\r\nimport {\r\n StablePDFViewer,\r\n PDFToolbar,\r\n PDFHeader,\r\n SearchSidebar,\r\n PasswordDialog,\r\n toolbarStyles,\r\n type CannyMindsPDFViewerRef,\r\n} from \"./pdf\";\r\n\r\ntype LoadingState = \"idle\" | \"loading\" | \"ready\" | \"error\";\r\n\r\n/**\r\n * IMPORTANT: The @cannyminds/pdf-viewer navigation API is not fully implemented.\r\n * Methods like getCurrentPage(), getTotalPages(), goToPage() return hardcoded values.\r\n * This component implements custom page tracking using DOM inspection and search detection.\r\n */\r\n\r\ninterface PDFViewerContentProps extends FileViewerProps {\r\n sourceDescription: string;\r\n}\r\n\r\nexport interface PDFViewerMethods {\r\n zoomIn: () => void;\r\n zoomOut: () => void;\r\n setZoom: (level: number) => void;\r\n resetZoom: () => void;\r\n getZoom: () => number;\r\n goToPage: (page: number) => void;\r\n getCurrentPage: () => number;\r\n getTotalPages: () => number;\r\n nextPage: () => void;\r\n previousPage: () => void;\r\n goToFirstPage: () => void;\r\n goToLastPage: () => void;\r\n searchText: (keyword: string) => Promise<any>;\r\n nextResult: () => number;\r\n previousResult: () => number;\r\n goToResult: (index: number) => number;\r\n stopSearch: () => void;\r\n getSearchState: () => any;\r\n getSelectedText: () => Promise<string>;\r\n clearSelection: () => void;\r\n copy: () => void;\r\n rotateForward: () => void;\r\n rotateBackward: () => void;\r\n getRotation: () => number;\r\n print: () => void;\r\n printWithAnnotations: () => Promise<void>;\r\n printWithoutAnnotations: () => Promise<void>;\r\n downloadWithAnnotations: (filename?: string) => Promise<void>;\r\n downloadWithoutAnnotations: (filename?: string) => Promise<void>;\r\n annotation?: {\r\n activateHighlighter: () => void;\r\n deactivateHighlighter: () => void;\r\n activateStamp: (dataUrl: string) => Promise<void>;\r\n deactivateStamp: () => void;\r\n deleteSelectedAnnotation: () => boolean;\r\n getSelectedAnnotation: () => any;\r\n getAllAnnotations: () => any[];\r\n exportAnnotationsAsJSON: () => string;\r\n onAnnotationEvent?: (callback: (event: { type: 'create' | 'update' | 'delete'; annotation: any }) => void) => (() => void) | undefined;\r\n };\r\n}\r\n\r\nconst PDFViewerContent = forwardRef<PDFViewerMethods, PDFViewerContentProps>(\r\n (props, ref) => {\r\n const {\r\n file,\r\n onLoad,\r\n onError,\r\n fileName,\r\n showPageCount = true,\r\n showPageNavigation = true,\r\n showZoomControls = true,\r\n showRotation = true,\r\n showDownload = true,\r\n showPrint = true,\r\n showSearch = true,\r\n showMetadata = true,\r\n showProperties = true,\r\n showTags = true,\r\n showHistory = true,\r\n onMetadataClick,\r\n onPropertiesClick,\r\n onTagsClick,\r\n onHistoryClick,\r\n onDownloadClick,\r\n onDownloadWithAnnotations,\r\n onDownloadWithoutAnnotations,\r\n onPrintClick,\r\n initialSearchText,\r\n initialSearchPages,\r\n showAnnotations,\r\n userDetails,\r\n annotationSelectionMenu,\r\n isHighlighterActive,\r\n isStampActive,\r\n onHighlighterClick,\r\n onStampClick,\r\n onSignatureClick,\r\n // New granular toolbar props\r\n showAnnotate,\r\n disabledAnnotate,\r\n showPrintOriginal,\r\n showPrintWithAnnotations,\r\n showDownloadOriginal,\r\n showDownloadWithAnnotations,\r\n // Annotation save props\r\n hasUnsavedAnnotations,\r\n isSavingAnnotations,\r\n canSaveAnnotations,\r\n onSaveAnnotations,\r\n loading,\r\n } = props;\r\n const [pdfBuffer, setPdfBuffer] = useState<ArrayBuffer | null>(null);\r\n const [state, setState] = useState<LoadingState>(\"idle\");\r\n const [error, setError] = useState<string | null>(null);\r\n const pdfViewerRef = useRef<CannyMindsPDFViewerRef>(null);\r\n const [isInternalReady, setIsInternalReady] = useState(false);\r\n\r\n // Internal annotation state (when not controlled by parent)\r\n const [internalHighlighterActive, setInternalHighlighterActive] = useState(false);\r\n const [internalStampActive, setInternalStampActive] = useState(false);\r\n\r\n // Use controlled state if provided, otherwise use internal state\r\n const highlighterActive = isHighlighterActive !== undefined ? isHighlighterActive : internalHighlighterActive;\r\n const stampActive = isStampActive !== undefined ? isStampActive : internalStampActive;\r\n\r\n // File info\r\n const resolvedFileName = useMemo(() => {\r\n if (fileName) return fileName;\r\n if (file instanceof File) return file.name;\r\n if (typeof file === \"string\") {\r\n const urlParts = file.split(\"/\");\r\n return urlParts[urlParts.length - 1] || \"document.pdf\";\r\n }\r\n return \"document.pdf\";\r\n }, [file, fileName]);\r\n\r\n const fileExtension = useMemo(\r\n () => getFileExtension(resolvedFileName),\r\n [resolvedFileName]\r\n );\r\n\r\n // Toolbar state\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [totalPages, setTotalPages] = useState(0);\r\n const [zoom, setZoom] = useState(100);\r\n const [searchQuery, setSearchQuery] = useState(\"\");\r\n const [isSearching, setIsSearching] = useState(false);\r\n const [pdfContainer, setPdfContainer] = useState<HTMLElement | null>(null);\r\n const [isSidebarOpen, setIsSidebarOpen] = useState(false);\r\n const [searchResults, setSearchResults] = useState<any[]>([]);\r\n const [currentSearchResultIndex, setCurrentSearchResultIndex] = useState(0);\r\n const [totalSearchResults, setTotalSearchResults] = useState(0);\r\n const [autoExecuteSearch, setAutoExecuteSearch] = useState(\r\n !!initialSearchText\r\n );\r\n const [isFullScreen, setIsFullScreen] = useState(false);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n // Password dialog state\r\n const [isPasswordDialogOpen, setIsPasswordDialogOpen] = useState(false);\r\n const [passwordError, setPasswordError] = useState<string>(\"\");\r\n const [isVerifyingPassword, setIsVerifyingPassword] = useState(false);\r\n const [passwordResolve, setPasswordResolve] = useState<\r\n ((password: string | null) => void) | null\r\n >(null);\r\n const passwordTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const hasExecutedInitialSearch = useRef(false);\r\n\r\n const handleToggleFullScreen = useCallback(() => {\r\n if (!isFullScreen && containerRef.current?.requestFullscreen) {\r\n containerRef.current.requestFullscreen();\r\n setIsFullScreen(true);\r\n } else if (isFullScreen && document.exitFullscreen) {\r\n document.exitFullscreen();\r\n setIsFullScreen(false);\r\n }\r\n }, [isFullScreen]);\r\n\r\n // Listen for fullscreen changes (e.g., when user presses ESC)\r\n useEffect(() => {\r\n const handleFullscreenChange = () => {\r\n const isCurrentlyFullscreen = !!document.fullscreenElement;\r\n setIsFullScreen(isCurrentlyFullscreen);\r\n };\r\n\r\n document.addEventListener('fullscreenchange', handleFullscreenChange);\r\n return () => {\r\n document.removeEventListener('fullscreenchange', handleFullscreenChange);\r\n };\r\n }, []);\r\n\r\n // Handle sidebar close - clear all search state and highlighting\r\n const handleSidebarClose = useCallback(() => {\r\n setIsSidebarOpen(false);\r\n setSearchQuery(\"\");\r\n setSearchResults([]);\r\n setTotalSearchResults(0);\r\n setCurrentSearchResultIndex(0);\r\n pdfViewerRef.current?.search.stopSearch(); // Stop search to remove highlighting\r\n }, []);\r\n\r\n const toolbar = mergeToolbarConfig({\r\n showDownload,\r\n showPrint,\r\n showMetadata,\r\n showProperties,\r\n showTags,\r\n showHistory,\r\n showRotation,\r\n onDownloadClick,\r\n onPrintClick,\r\n onMetadataClick,\r\n onPropertiesClick,\r\n onTagsClick,\r\n onHistoryClick,\r\n toolbarActions: props.toolbarActions,\r\n });\r\n\r\n // Create stable callback handlers to prevent re-renders\r\n const toolbarHandlers = useMemo(\r\n () => ({\r\n handleZoomIn: () => {\r\n pdfViewerRef.current?.zoom.zoomIn();\r\n requestAnimationFrame(() => {\r\n const zoomValue = pdfViewerRef.current?.zoom.getZoom();\r\n if (typeof zoomValue === \"number\") {\r\n setZoom(Math.round(zoomValue * 100));\r\n }\r\n });\r\n },\r\n handleZoomOut: () => {\r\n pdfViewerRef.current?.zoom.zoomOut();\r\n requestAnimationFrame(() => {\r\n const zoomValue = pdfViewerRef.current?.zoom.getZoom();\r\n if (typeof zoomValue === \"number\") {\r\n setZoom(Math.round(zoomValue * 100));\r\n }\r\n });\r\n },\r\n handleFitToWidth: () => {\r\n pdfViewerRef.current?.zoom.fitToWidth();\r\n requestAnimationFrame(() => {\r\n const zoomValue = pdfViewerRef.current?.zoom.getZoom();\r\n if (typeof zoomValue === \"number\") {\r\n setZoom(Math.round(zoomValue * 100));\r\n }\r\n });\r\n },\r\n handleFitToPage: () => {\r\n pdfViewerRef.current?.zoom.fitToPage();\r\n requestAnimationFrame(() => {\r\n const zoomValue = pdfViewerRef.current?.zoom.getZoom();\r\n if (typeof zoomValue === \"number\") {\r\n setZoom(Math.round(zoomValue * 100));\r\n }\r\n });\r\n },\r\n handlePreviousPage: () => {\r\n pdfViewerRef.current?.navigation.previousPage();\r\n requestAnimationFrame(() => {\r\n const current =\r\n pdfViewerRef.current?.navigation.getCurrentPage() || 1;\r\n setCurrentPage(current);\r\n });\r\n },\r\n handleNextPage: () => {\r\n pdfViewerRef.current?.navigation.nextPage();\r\n requestAnimationFrame(() => {\r\n const current =\r\n pdfViewerRef.current?.navigation.getCurrentPage() || 1;\r\n setCurrentPage(current);\r\n });\r\n },\r\n handleFirstPage: () => {\r\n pdfViewerRef.current?.navigation.goToFirstPage();\r\n requestAnimationFrame(() => {\r\n const current =\r\n pdfViewerRef.current?.navigation.getCurrentPage() || 1;\r\n setCurrentPage(current);\r\n });\r\n },\r\n handleLastPage: () => {\r\n pdfViewerRef.current?.navigation.goToLastPage();\r\n requestAnimationFrame(() => {\r\n const current =\r\n pdfViewerRef.current?.navigation.getCurrentPage() || 1;\r\n setCurrentPage(current);\r\n });\r\n },\r\n toggleSidebar: () => {\r\n if (isSidebarOpen) {\r\n // Closing sidebar - clear search state\r\n handleSidebarClose();\r\n } else {\r\n // Opening sidebar\r\n setIsSidebarOpen(true);\r\n }\r\n },\r\n handlePageInput: (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value;\r\n if (/^\\d*$/.test(value)) {\r\n return;\r\n }\r\n const page = parseInt(value, 10);\r\n if (\r\n !isNaN(page) &&\r\n page >= 1 &&\r\n (totalPages === 0 || page <= totalPages)\r\n ) {\r\n pdfViewerRef.current?.navigation.goToPage(page);\r\n setCurrentPage(page);\r\n }\r\n },\r\n handlePageInputKeyPress: (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"Enter\") {\r\n const value = (e.target as HTMLInputElement).value;\r\n const page = parseInt(value, 10);\r\n if (\r\n !isNaN(page) &&\r\n page >= 1 &&\r\n (totalPages === 0 || page <= totalPages)\r\n ) {\r\n pdfViewerRef.current?.navigation.goToPage(page);\r\n setCurrentPage(page);\r\n }\r\n }\r\n },\r\n handleRotateLeft: () => {\r\n pdfViewerRef.current?.rotate?.rotateBackward();\r\n },\r\n handleRotateRight: () => {\r\n pdfViewerRef.current?.rotate?.rotateForward();\r\n },\r\n handlePrint: () => {\r\n pdfViewerRef.current?.print?.print();\r\n },\r\n handlePrintWithAnnotations: async () => {\r\n await (pdfViewerRef.current?.print as any)?.printWithAnnotations?.();\r\n },\r\n handlePrintWithoutAnnotations: async () => {\r\n await (pdfViewerRef.current?.print as any)?.printWithoutAnnotations?.();\r\n },\r\n handleDownloadWithAnnotations: async () => {\r\n if (onDownloadWithAnnotations) {\r\n onDownloadWithAnnotations();\r\n } else {\r\n await (pdfViewerRef.current as any)?.download?.downloadWithAnnotations?.(resolvedFileName);\r\n }\r\n },\r\n handleDownloadWithoutAnnotations: async () => {\r\n if (onDownloadWithoutAnnotations) {\r\n onDownloadWithoutAnnotations();\r\n } else {\r\n await (pdfViewerRef.current as any)?.download?.downloadWithoutAnnotations?.(resolvedFileName);\r\n }\r\n },\r\n handleHighlighterClick: () => {\r\n if (highlighterActive) {\r\n pdfViewerRef.current?.annotation?.deactivateHighlighter();\r\n setInternalHighlighterActive(false);\r\n } else {\r\n if (stampActive) {\r\n pdfViewerRef.current?.annotation?.deactivateStamp();\r\n setInternalStampActive(false);\r\n }\r\n pdfViewerRef.current?.annotation?.activateHighlighter();\r\n setInternalHighlighterActive(true);\r\n }\r\n },\r\n handleStampClick: () => {\r\n if (stampActive) {\r\n pdfViewerRef.current?.annotation?.deactivateStamp();\r\n setInternalStampActive(false);\r\n } else {\r\n if (highlighterActive) {\r\n pdfViewerRef.current?.annotation?.deactivateHighlighter();\r\n setInternalHighlighterActive(false);\r\n }\r\n pdfViewerRef.current?.annotation?.activateStamp('');\r\n setInternalStampActive(true);\r\n }\r\n },\r\n handleSignatureClick: () => {\r\n // Signature typically opens a dialog, so just notify via callback\r\n // The parent should handle the signature dialog\r\n },\r\n handleCopy: () => {\r\n pdfViewerRef.current?.selection.copy();\r\n },\r\n handleToggleFullScreen,\r\n }),\r\n [isSidebarOpen, totalPages, handleToggleFullScreen, highlighterActive, stampActive, onDownloadWithAnnotations, onDownloadWithoutAnnotations]\r\n );\r\n\r\n // Auto-execute initial search when PDF is ready\r\n useEffect(() => {\r\n // Skip if no search text or already executed\r\n if (!initialSearchText || hasExecutedInitialSearch.current) return;\r\n\r\n // Validate all prerequisites are met\r\n const isPDFReady = state === \"ready\";\r\n const isPagesInitialized = totalPages > 0;\r\n const isViewerAvailable = !!pdfViewerRef.current;\r\n const isSearchAPIReady = !!pdfViewerRef.current?.search?.searchText;\r\n\r\n const canExecuteSearch =\r\n isPDFReady &&\r\n isPagesInitialized &&\r\n isViewerAvailable &&\r\n isSearchAPIReady;\r\n\r\n if (!canExecuteSearch) return;\r\n\r\n // Mark as executed to prevent duplicate runs\r\n hasExecutedInitialSearch.current = true;\r\n\r\n // Small delay to ensure render completes and search index is stable\r\n const SEARCH_INITIALIZATION_DELAY = 100;\r\n\r\n setTimeout(() => {\r\n // Safety check: Verify search API is still available\r\n if (!pdfViewerRef.current?.search?.searchText) {\r\n hasExecutedInitialSearch.current = false;\r\n return;\r\n }\r\n\r\n // Execute search after render completes\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n setIsSidebarOpen(true);\r\n handleSidebarSearch(initialSearchText, initialSearchPages);\r\n setAutoExecuteSearch(false);\r\n });\r\n });\r\n }, SEARCH_INITIALIZATION_DELAY);\r\n }, [\r\n state,\r\n totalPages,\r\n pdfViewerRef.current,\r\n initialSearchText,\r\n initialSearchPages,\r\n ]);\r\n\r\n // Reset all state when file changes\r\n useEffect(() => {\r\n // Reset search state\r\n setSearchQuery(\"\");\r\n setSearchResults([]);\r\n setCurrentSearchResultIndex(0);\r\n setTotalSearchResults(0);\r\n setIsSearching(false);\r\n setIsSidebarOpen(false);\r\n hasExecutedInitialSearch.current = false;\r\n\r\n // Reset page state\r\n setCurrentPage(1);\r\n setTotalPages(0);\r\n setZoom(100);\r\n\r\n // Reset PDF state\r\n setState(\"idle\");\r\n setError(null);\r\n setPdfBuffer(null);\r\n }, [file]);\r\n\r\n // Track the PDF container for page detection using MutationObserver\r\n useEffect(() => {\r\n if (state !== \"ready\") return;\r\n\r\n const container = document.querySelector(\r\n '[data-pdf-viewer], .embedpdf-viewport, [role=\"document\"]'\r\n ) as HTMLElement;\r\n if (container) {\r\n setPdfContainer(container);\r\n return;\r\n }\r\n\r\n // Use MutationObserver to wait for container to appear in DOM\r\n const observer = new MutationObserver(() => {\r\n const foundContainer = document.querySelector(\r\n '[data-pdf-viewer], .embedpdf-viewport, [role=\"document\"]'\r\n ) as HTMLElement;\r\n if (foundContainer) {\r\n setPdfContainer(foundContainer);\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n observer.observe(document.body, { childList: true, subtree: true });\r\n return () => observer.disconnect();\r\n }, [state]);\r\n\r\n // Initialize page count after PDF loads - using async polling with exponential backoff\r\n useEffect(() => {\r\n // Logic for internal readiness check\r\n if (state !== \"ready\") return;\r\n\r\n const checkInternalReadiness = async () => {\r\n if (!pdfViewerRef.current) return;\r\n\r\n // Check if navigation API gives us pages (indicating internal viewer is ready)\r\n try {\r\n const count = pdfViewerRef.current.navigation?.getTotalPages?.();\r\n if (count && count > 0) {\r\n setTotalPages(count);\r\n setIsInternalReady(true);\r\n return;\r\n }\r\n\r\n // Also check document info as fallback\r\n const docInfo = (pdfViewerRef.current as any)?.document?.getDocumentInfo?.();\r\n if (docInfo && docInfo.totalPages > 0) {\r\n setTotalPages(docInfo.totalPages);\r\n setIsInternalReady(true);\r\n return;\r\n }\r\n } catch (e) {\r\n // Ignore errors during init\r\n }\r\n };\r\n\r\n const pollInterval = setInterval(checkInternalReadiness, 100);\r\n return () => clearInterval(pollInterval);\r\n }, [state]);\r\n\r\n // Initialize page count after PDF loads - using async polling with exponential backoff\r\n useEffect(() => {\r\n if (state !== \"ready\" || totalPages > 0) return;\r\n\r\n const initializePageCount = async () => {\r\n // Wait for viewer ref with exponential backoff\r\n const waitForViewer = async (\r\n maxAttempts = 10\r\n ): Promise<typeof pdfViewerRef.current> => {\r\n for (let i = 0; i < maxAttempts; i++) {\r\n if (pdfViewerRef.current) return pdfViewerRef.current;\r\n await new Promise((resolve) =>\r\n requestAnimationFrame(() =>\r\n setTimeout(resolve, Math.min(100 * Math.pow(2, i), 1000))\r\n )\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const viewer = await waitForViewer();\r\n if (!viewer) return;\r\n\r\n // Wait for pages to render using requestAnimationFrame\r\n await new Promise((resolve) => requestAnimationFrame(resolve));\r\n\r\n // Try navigation API - returns 0 if page count not yet available\r\n try {\r\n const count = viewer.navigation?.getTotalPages?.();\r\n if (count && count > 0) {\r\n setTotalPages(count);\r\n // Also set internal readiness here\r\n setIsInternalReady(true);\r\n return;\r\n }\r\n } catch (e) {\r\n // Navigation API not ready yet\r\n }\r\n\r\n // Don't set fallback value - let the periodic polling handle it\r\n // The polling effect will keep trying until it gets a valid count\r\n };\r\n\r\n initializePageCount();\r\n }, [state, totalPages]);\r\n\r\n // Auto-execute search when initialSearchText is provided via props\r\n // useEffect(() => {\r\n // if (state !== 'ready' || !autoExecuteSearch || !initialSearchText) return;\r\n\r\n // // Use requestIdleCallback for better performance, fallback to rAF\r\n // const scheduleSearch = (callback: () => void) => {\r\n // if ('requestIdleCallback' in window) {\r\n // requestIdleCallback(callback, { timeout: 2000 });\r\n // } else {\r\n // requestAnimationFrame(() => setTimeout(callback, 0));\r\n // }\r\n // };\r\n\r\n // scheduleSearch(() => {\r\n // if (!pdfViewerRef.current) return;\r\n\r\n // setIsSidebarOpen(true);\r\n // setSearchQuery(initialSearchText);\r\n // handleSidebarSearch(initialSearchText, initialSearchPages);\r\n // setAutoExecuteSearch(false);\r\n // });\r\n // }, [state, autoExecuteSearch, initialSearchText, initialSearchPages]);\r\n\r\n // Update page info and search state periodically\r\n // Poll more aggressively when page count is not yet known\r\n useEffect(() => {\r\n if (state === \"ready\") {\r\n const updateInfo = () => {\r\n if (!pdfViewerRef.current) return;\r\n\r\n const current =\r\n pdfViewerRef.current?.navigation.getCurrentPage() || 1;\r\n\r\n // Try document.getDocumentInfo() first (contains verified totalPages)\r\n const docInfo = (pdfViewerRef.current as any)?.document?.getDocumentInfo?.();\r\n const navTotal = pdfViewerRef.current?.navigation?.getTotalPages?.();\r\n\r\n let total = 0;\r\n if (docInfo && docInfo.totalPages > 0) {\r\n total = docInfo.totalPages;\r\n } else if (typeof navTotal === 'number' && navTotal > 0) {\r\n total = navTotal;\r\n }\r\n\r\n const zoomValue = pdfViewerRef.current?.zoom.getZoom();\r\n const currentSearchState =\r\n pdfViewerRef.current?.search.getSearchState();\r\n\r\n setCurrentPage(current);\r\n\r\n // Update total pages if we got a valid count\r\n if (total > 0 && total !== totalPages) {\r\n setTotalPages(total);\r\n }\r\n\r\n if (typeof zoomValue === \"number\") {\r\n setZoom(Math.round(zoomValue * 100));\r\n }\r\n };\r\n\r\n updateInfo();\r\n // Poll faster (50ms) when page count unknown, slower (300ms) when known\r\n const pollInterval = totalPages === 0 ? 50 : 300;\r\n const interval = setInterval(updateInfo, pollInterval);\r\n return () => clearInterval(interval);\r\n }\r\n }, [state, totalPages]);\r\n\r\n // Expose methods through ref\r\n useImperativeHandle(\r\n ref,\r\n () => ({\r\n zoomIn: () => {\r\n pdfViewerRef.current?.zoom.zoomIn();\r\n updateZoomDisplay();\r\n },\r\n zoomOut: () => {\r\n pdfViewerRef.current?.zoom.zoomOut();\r\n updateZoomDisplay();\r\n },\r\n setZoom: (level: number) => {\r\n pdfViewerRef.current?.zoom.setZoom(level);\r\n updateZoomDisplay();\r\n },\r\n resetZoom: () => {\r\n pdfViewerRef.current?.zoom.resetZoom();\r\n updateZoomDisplay();\r\n },\r\n getZoom: () => {\r\n const zoom = pdfViewerRef.current?.zoom.getZoom();\r\n return typeof zoom === \"number\" ? zoom : 1.0;\r\n },\r\n goToPage: (page: number) => {\r\n pdfViewerRef.current?.navigation.goToPage(page);\r\n setCurrentPage(page);\r\n },\r\n getCurrentPage: () =>\r\n pdfViewerRef.current?.navigation.getCurrentPage() || 1,\r\n getTotalPages: () =>\r\n pdfViewerRef.current?.navigation.getTotalPages() || 0,\r\n nextPage: () => {\r\n pdfViewerRef.current?.navigation.nextPage();\r\n updatePageDisplay();\r\n },\r\n previousPage: () => {\r\n pdfViewerRef.current?.navigation.previousPage();\r\n updatePageDisplay();\r\n },\r\n goToFirstPage: () => {\r\n pdfViewerRef.current?.navigation.goToFirstPage();\r\n updatePageDisplay();\r\n },\r\n goToLastPage: () => {\r\n pdfViewerRef.current?.navigation.goToLastPage();\r\n updatePageDisplay();\r\n },\r\n searchText: async (keyword: string) => {\r\n setIsSearching(true);\r\n const results = await pdfViewerRef.current?.search.searchText(\r\n keyword\r\n );\r\n setIsSearching(false);\r\n setSearchQuery(keyword);\r\n // Search state will be updated by the interval\r\n return results;\r\n },\r\n nextResult: () => {\r\n const index = pdfViewerRef.current?.search.nextResult() || -1;\r\n return index;\r\n },\r\n previousResult: () => {\r\n const index = pdfViewerRef.current?.search.previousResult() || -1;\r\n return index;\r\n },\r\n goToResult: (index: number) =>\r\n pdfViewerRef.current?.search.goToResult(index) || -1,\r\n stopSearch: () => {\r\n pdfViewerRef.current?.search.stopSearch();\r\n setSearchQuery(\"\");\r\n },\r\n getSearchState: () =>\r\n pdfViewerRef.current?.search.getSearchState() || null,\r\n getSelectedText: async () => {\r\n return await pdfViewerRef.current?.selection.getSelectedText() || \"\";\r\n },\r\n clearSelection: () => pdfViewerRef.current?.selection.clearSelection(),\r\n copy: () => pdfViewerRef.current?.selection.copy(),\r\n rotateForward: () => pdfViewerRef.current?.rotate?.rotateForward(),\r\n rotateBackward: () => pdfViewerRef.current?.rotate?.rotateBackward(),\r\n getRotation: () => pdfViewerRef.current?.rotate?.getRotation() || 0,\r\n print: () => pdfViewerRef.current?.print?.print(),\r\n printWithAnnotations: async () => {\r\n await (pdfViewerRef.current?.print as any)?.printWithAnnotations?.();\r\n },\r\n printWithoutAnnotations: async () => {\r\n await (pdfViewerRef.current?.print as any)?.printWithoutAnnotations?.();\r\n },\r\n downloadWithAnnotations: async (filename?: string) => {\r\n await (pdfViewerRef.current as any)?.download?.downloadWithAnnotations?.(filename);\r\n },\r\n downloadWithoutAnnotations: async (filename?: string) => {\r\n await (pdfViewerRef.current as any)?.download?.downloadWithoutAnnotations?.(filename);\r\n },\r\n get annotation() {\r\n return pdfViewerRef.current?.annotation;\r\n },\r\n get download() {\r\n return (pdfViewerRef.current as any)?.download;\r\n },\r\n }),\r\n []\r\n );\r\n\r\n const updatePageDisplay = () => {\r\n requestAnimationFrame(() => {\r\n const current = pdfViewerRef.current?.navigation.getCurrentPage() || 1;\r\n setCurrentPage(current);\r\n });\r\n };\r\n\r\n const updateZoomDisplay = () => {\r\n requestAnimationFrame(() => {\r\n const zoomValue = pdfViewerRef.current?.zoom.getZoom();\r\n if (typeof zoomValue === \"number\") {\r\n setZoom(Math.round(zoomValue * 100));\r\n }\r\n });\r\n };\r\n\r\n const handleSearch = async () => {\r\n if (!searchQuery.trim()) return;\r\n\r\n setIsSearching(true);\r\n const results = await pdfViewerRef.current?.search.searchText(\r\n searchQuery\r\n );\r\n setIsSearching(false);\r\n\r\n // Validate and format results\r\n if (\r\n results?.results &&\r\n Array.isArray(results.results) &&\r\n results.results.length > 0\r\n ) {\r\n const formattedResults = formatSearchResults(results.results);\r\n updateSearchState(formattedResults);\r\n } else {\r\n clearSearchResults();\r\n }\r\n };\r\n\r\n const handleSearchKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"Enter\") {\r\n handleSearch();\r\n }\r\n };\r\n\r\n const handleSidebarSearch = async (\r\n keyword: string,\r\n pageNumbers?: number[]\r\n ) => {\r\n setSearchQuery(keyword);\r\n\r\n // Handle empty search - clear results\r\n if (!keyword.trim()) {\r\n setSearchResults([]);\r\n setTotalSearchResults(0);\r\n setCurrentSearchResultIndex(0);\r\n pdfViewerRef.current?.search.stopSearch();\r\n return;\r\n }\r\n\r\n // Verify search API is available\r\n if (!pdfViewerRef.current?.search?.searchText) {\r\n console.warn(\"Search functionality not yet available\");\r\n return;\r\n }\r\n\r\n setIsSearching(true);\r\n\r\n try {\r\n // Execute PDF text search\r\n const results = await pdfViewerRef.current.search.searchText(keyword);\r\n setIsSearching(false);\r\n\r\n // Validate search results\r\n const hasValidResults =\r\n results?.results &&\r\n Array.isArray(results.results) &&\r\n results.results.length > 0;\r\n\r\n if (hasValidResults) {\r\n // Format and display PDF search results\r\n const formattedResults = formatSearchResults(results.results);\r\n updateSearchState(formattedResults);\r\n navigateToFirstResult(formattedResults);\r\n } else if (pageNumbers && pageNumbers.length > 0) {\r\n // Fallback: Use OCR-provided page numbers\r\n const fallbackResults = createFallbackResults(pageNumbers, keyword);\r\n updateSearchState(fallbackResults);\r\n navigateToPage(pageNumbers[0]);\r\n } else {\r\n // No results found\r\n clearSearchResults();\r\n }\r\n } catch (error) {\r\n console.error(\"Search failed:\", error);\r\n setIsSearching(false);\r\n clearSearchResults();\r\n }\r\n };\r\n\r\n // Helper: Format raw search results into displayable format\r\n const formatSearchResults = (results: any[]) => {\r\n return results.map((result: any, index: number) => {\r\n let textContent = \"\";\r\n let contextContent = \"\";\r\n\r\n // Extract text based on result structure\r\n if (result.context && typeof result.context === \"object\") {\r\n const { before = \"\", match = \"\", after = \"\" } = result.context;\r\n textContent = match;\r\n contextContent = `${before}${match}${after}`;\r\n } else if (typeof result === \"string\") {\r\n textContent = result;\r\n contextContent = result;\r\n } else {\r\n textContent = String(result.match || result.text || \"\");\r\n contextContent = textContent;\r\n }\r\n\r\n return {\r\n pageNumber: (result.pageIndex ?? result.pageNumber ?? 0) + 1,\r\n text: textContent,\r\n context: contextContent,\r\n index: index,\r\n };\r\n });\r\n };\r\n\r\n // Helper: Create fallback results from OCR page numbers\r\n const createFallbackResults = (pageNumbers: number[], keyword: string) => {\r\n return pageNumbers.map((pageNum, index) => ({\r\n pageNumber: pageNum,\r\n text: keyword,\r\n context: `\"${keyword}\" found on this page ${pageNum}`,\r\n index: index,\r\n }));\r\n };\r\n\r\n // Helper: Update search state with results\r\n const updateSearchState = (results: any[]) => {\r\n setSearchResults(results);\r\n setTotalSearchResults(results.length);\r\n setCurrentSearchResultIndex(0);\r\n };\r\n\r\n // Helper: Clear search results\r\n const clearSearchResults = () => {\r\n setSearchResults([]);\r\n setTotalSearchResults(0);\r\n setCurrentSearchResultIndex(0);\r\n };\r\n\r\n // Helper: Navigate to first search result\r\n const navigateToFirstResult = (results: any[]) => {\r\n if (results.length > 0) {\r\n navigateToPage(results[0].pageNumber);\r\n }\r\n };\r\n\r\n // Helper: Navigate to specific page\r\n const navigateToPage = (pageNumber: number) => {\r\n requestAnimationFrame(() => {\r\n pdfViewerRef.current?.navigation.goToPage(pageNumber);\r\n setCurrentPage(pageNumber);\r\n });\r\n };\r\n\r\n const handleSearchResultClick = (\r\n pageNumber: number,\r\n resultIndex: number\r\n ) => {\r\n // Navigate to the page first\r\n pdfViewerRef.current?.navigation.goToPage(pageNumber);\r\n setCurrentSearchResultIndex(resultIndex);\r\n setCurrentPage(pageNumber);\r\n\r\n // Then go to the specific result\r\n pdfViewerRef.current?.search.goToResult(resultIndex);\r\n };\r\n\r\n const handleNextSearchResult = () => {\r\n if (currentSearchResultIndex < totalSearchResults - 1) {\r\n const nextIndex = currentSearchResultIndex + 1;\r\n setCurrentSearchResultIndex(nextIndex);\r\n\r\n pdfViewerRef.current?.search.nextResult();\r\n\r\n // Navigate to the page of the next result\r\n if (searchResults[nextIndex]) {\r\n const pageNumber = searchResults[nextIndex].pageNumber;\r\n pdfViewerRef.current?.navigation.goToPage(pageNumber);\r\n setCurrentPage(pageNumber);\r\n }\r\n }\r\n };\r\n\r\n const handlePreviousSearchResult = () => {\r\n if (currentSearchResultIndex > 0) {\r\n const prevIndex = currentSearchResultIndex - 1;\r\n setCurrentSearchResultIndex(prevIndex);\r\n\r\n pdfViewerRef.current?.search.previousResult();\r\n\r\n // Navigate to the page of the previous result\r\n if (searchResults[prevIndex]) {\r\n const pageNumber = searchResults[prevIndex].pageNumber;\r\n pdfViewerRef.current?.navigation.goToPage(pageNumber);\r\n setCurrentPage(pageNumber);\r\n }\r\n }\r\n };\r\n\r\n // Load PDF from file\r\n useEffect(() => {\r\n if (!file) {\r\n setState(\"error\");\r\n setError(\"No file provided\");\r\n return;\r\n }\r\n\r\n const loadPDF = async () => {\r\n try {\r\n setState(\"loading\");\r\n setError(null);\r\n\r\n let arrayBuffer: ArrayBuffer;\r\n\r\n if (file instanceof File) {\r\n arrayBuffer = await file.arrayBuffer();\r\n } else if (typeof file === \"string\") {\r\n // Load from URL\r\n const response = await fetch(file);\r\n if (!response.ok) {\r\n throw new Error(`Failed to load PDF: ${response.statusText}`);\r\n }\r\n arrayBuffer = await response.arrayBuffer();\r\n } else if (file instanceof ArrayBuffer) {\r\n arrayBuffer = file;\r\n } else {\r\n throw new Error(\"Unsupported file type\");\r\n }\r\n\r\n setPdfBuffer(arrayBuffer);\r\n setState(\"ready\");\r\n onLoad?.();\r\n } catch (err: any) {\r\n const errorMessage = err.message || \"Failed to load PDF\";\r\n setState(\"error\");\r\n setError(errorMessage);\r\n onError?.(err);\r\n }\r\n };\r\n\r\n loadPDF();\r\n }, [file, onLoad, onError]);\r\n\r\n // Handle password request for encrypted PDFs\r\n const handlePasswordRequest = useCallback(\r\n async (fileName?: string, isRetry?: boolean): Promise<string | null> => {\r\n return new Promise((resolve) => {\r\n setPasswordResolve(() => resolve);\r\n if (isRetry) {\r\n setPasswordError(\"Incorrect password. Please try again.\");\r\n } else {\r\n setPasswordError(\"\");\r\n }\r\n setIsPasswordDialogOpen(true);\r\n });\r\n },\r\n []\r\n );\r\n\r\n const handlePasswordSubmit = useCallback(\r\n (password: string) => {\r\n if (passwordResolve) {\r\n passwordResolve(password);\r\n }\r\n // Close dialog - if password is wrong, handlePasswordRequest will be called again with isRetry=true\r\n setIsPasswordDialogOpen(false);\r\n setPasswordResolve(null);\r\n setPasswordError(\"\");\r\n },\r\n [passwordResolve]\r\n );\r\n\r\n const handlePasswordCancel = useCallback(() => {\r\n if (passwordResolve) {\r\n passwordResolve(null);\r\n setPasswordResolve(null);\r\n setIsPasswordDialogOpen(false);\r\n setPasswordError(\"\");\r\n }\r\n }, [passwordResolve]);\r\n\r\n // Consolidated Loading Spinner\r\n const LoadingSpinner = ({ fileName }: { fileName?: string }) => (\r\n <div style={{\r\n position: \"absolute\",\r\n inset: 0,\r\n zIndex: 50,\r\n backgroundColor: \"#fff\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}>\r\n <div className=\"dms-loading-spinner\" style={{\r\n width: '40px',\r\n height: '40px',\r\n border: '3px solid #f3f3f3',\r\n borderTop: '3px solid #3498db',\r\n borderRadius: '50%',\r\n animation: 'spin 1s linear infinite'\r\n }} />\r\n {fileName && <p style={{ marginTop: '16px', color: '#666', fontSize: '14px' }}>Loading {fileName}...</p>}\r\n <style>{`@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }`}</style>\r\n </div>\r\n );\r\n\r\n if (state === \"error\" || error) {\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n height: \"100%\",\r\n padding: \"24px\",\r\n }}\r\n >\r\n <div\r\n style={{\r\n maxWidth: \"400px\",\r\n padding: \"16px\",\r\n backgroundColor: \"#fee\",\r\n border: \"1px solid #fcc\",\r\n borderRadius: \"4px\",\r\n }}\r\n >\r\n <h3 style={{ marginTop: 0 }}>Failed to Load PDF</h3>\r\n <p>{error || \"Unknown error occurred\"}</p>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Loading/Preparing handled by overlay below\r\n\r\n const isReady = pdfBuffer && state === \"ready\";\r\n // Show overlay if:\r\n // 1. Parent explicitly sets loading=true (e.g., DMS-Client-Drive showing its own loader)\r\n // 2. PDF not ready OR internal viewer not ready\r\n const showOverlay = loading || !isReady || !isInternalReady;\r\n\r\n return (\r\n <div ref={containerRef} className=\"pdf-viewer-container\" style={{ position: 'relative', height: '100%', width: '100%' }}>\r\n <style>{toolbarStyles}</style>\r\n {showOverlay && <LoadingSpinner fileName={resolvedFileName} />}\r\n <div style={{ opacity: !showOverlay ? 1 : 0, height: '100%', display: 'flex', flexDirection: 'column' }}>\r\n\r\n {/* Header - File Info */}\r\n <PDFHeader fileName={resolvedFileName} fileExtension={fileExtension} />\r\n\r\n {/* Toolbar */}\r\n <PDFToolbar\r\n currentPage={currentPage}\r\n totalPages={totalPages}\r\n zoom={zoom}\r\n isSidebarOpen={isSidebarOpen}\r\n showPageNavigation={showPageNavigation}\r\n showPageCount={showPageCount}\r\n showZoomControls={showZoomControls}\r\n showSearch={showSearch}\r\n showRotation={!toolbar.isHidden(\"rotation\")}\r\n showMetadata={!toolbar.isHidden(\"metadata\")}\r\n showProperties={!toolbar.isHidden(\"properties\")}\r\n showDownload={!toolbar.isHidden(\"download\")}\r\n showPrint={!toolbar.isHidden(\"print\")}\r\n showTags={!toolbar.isHidden(\"tags\")}\r\n showHistory={!toolbar.isHidden(\"history\")}\r\n disabledRotateLeft={toolbar.isDisabled(\"rotateLeft\")}\r\n disabledRotateRight={false}\r\n disabledMetadata={toolbar.isDisabled(\"metadata\")}\r\n disabledTags={toolbar.isDisabled(\"tags\")}\r\n disabledProperties={toolbar.isDisabled(\"properties\")}\r\n disabledHistory={toolbar.isDisabled(\"history\")}\r\n disabledDownload={toolbar.isDisabled(\"download\")}\r\n disabledPrint={toolbar.isDisabled(\"print\")}\r\n onFirstPage={toolbarHandlers.handleFirstPage}\r\n onPreviousPage={toolbarHandlers.handlePreviousPage}\r\n onNextPage={toolbarHandlers.handleNextPage}\r\n onLastPage={toolbarHandlers.handleLastPage}\r\n onPageInput={toolbarHandlers.handlePageInput}\r\n onPageInputKeyPress={toolbarHandlers.handlePageInputKeyPress}\r\n onZoomIn={toolbarHandlers.handleZoomIn}\r\n onZoomOut={toolbarHandlers.handleZoomOut}\r\n onFitToWidth={toolbarHandlers.handleFitToWidth}\r\n onFitToPage={toolbarHandlers.handleFitToPage}\r\n onToggleSidebar={toolbarHandlers.toggleSidebar}\r\n onToggleFullScreen={toolbarHandlers.handleToggleFullScreen}\r\n onRotateLeft={toolbarHandlers.handleRotateLeft}\r\n onRotateRight={toolbarHandlers.handleRotateRight}\r\n onDownloadClick={toolbar.getHandler(\"download\", onDownloadClick)}\r\n onDownloadWithAnnotations={toolbarHandlers.handleDownloadWithAnnotations}\r\n onDownloadWithoutAnnotations={toolbarHandlers.handleDownloadWithoutAnnotations}\r\n onPrintClick={toolbar.getHandler(\"print\", onPrintClick || toolbarHandlers.handlePrint)}\r\n onPrintWithAnnotations={toolbarHandlers.handlePrintWithAnnotations}\r\n onPrintWithoutAnnotations={toolbarHandlers.handlePrintWithoutAnnotations}\r\n onCopyClick={toolbarHandlers.handleCopy}\r\n onMetadataClick={toolbar.getHandler(\"metadata\", onMetadataClick)}\r\n onPropertiesClick={toolbar.getHandler(\r\n \"properties\",\r\n onPropertiesClick\r\n )}\r\n onTagsClick={toolbar.getHandler(\"tags\", onTagsClick)}\r\n onHistoryClick={toolbar.getHandler(\"history\", onHistoryClick)}\r\n showAnnotations={showAnnotations}\r\n isHighlighterActive={highlighterActive}\r\n isStampActive={stampActive}\r\n disabledHighlighter={toolbar.isDisabled(\"highlighter\")}\r\n disabledStamp={toolbar.isDisabled(\"stamp\")}\r\n disabledSignature={toolbar.isDisabled(\"signature\")}\r\n onHighlighterClick={toolbar.getHandler(\"highlighter\", onHighlighterClick || toolbarHandlers.handleHighlighterClick)}\r\n onStampClick={toolbar.getHandler(\"stamp\", onStampClick || toolbarHandlers.handleStampClick)}\r\n onSignatureClick={toolbar.getHandler(\"signature\", onSignatureClick || toolbarHandlers.handleSignatureClick)}\r\n // New granular toolbar props\r\n showAnnotate={showAnnotate}\r\n disabledAnnotate={disabledAnnotate}\r\n showPrintOriginal={showPrintOriginal}\r\n showPrintWithAnnotations={showPrintWithAnnotations}\r\n showDownloadOriginal={showDownloadOriginal}\r\n showDownloadWithAnnotations={showDownloadWithAnnotations}\r\n // Save functionality\r\n hasUnsavedAnnotations={hasUnsavedAnnotations}\r\n isSavingAnnotations={isSavingAnnotations}\r\n canSaveAnnotations={canSaveAnnotations}\r\n onSaveAnnotations={onSaveAnnotations}\r\n />\r\n\r\n {/* Main Content Area with Sidebar */}\r\n <div className=\"pdf-viewer-main\">\r\n {/* PDF Viewer */}\r\n <div className=\"pdf-viewer-viewer-area\">\r\n <StablePDFViewer\r\n pdfBuffer={pdfBuffer || new ArrayBuffer(0)}\r\n onPasswordRequest={handlePasswordRequest}\r\n pdfViewerRef={pdfViewerRef}\r\n hideInternalLoading={true}\r\n showAnnotations={showAnnotations}\r\n userDetails={userDetails}\r\n annotationSelectionMenu={annotationSelectionMenu}\r\n isHighlighterActive={highlighterActive}\r\n isStampActive={stampActive}\r\n onHighlighterClick={onHighlighterClick || toolbarHandlers.handleHighlighterClick}\r\n onStampClick={onStampClick || toolbarHandlers.handleStampClick}\r\n onSignatureClick={onSignatureClick || toolbarHandlers.handleSignatureClick}\r\n permissions={props.permissions}\r\n />\r\n </div>\r\n\r\n {/* Search Sidebar */}\r\n <SearchSidebar\r\n isOpen={isSidebarOpen}\r\n onClose={handleSidebarClose}\r\n onSearch={handleSidebarSearch}\r\n onSearchResultClick={handleSearchResultClick}\r\n onNextResult={handleNextSearchResult}\r\n onPreviousResult={handlePreviousSearchResult}\r\n currentResultIndex={currentSearchResultIndex}\r\n totalResults={totalSearchResults}\r\n searchKeyword={searchQuery}\r\n searchResults={searchResults}\r\n isSearching={isSearching}\r\n />\r\n </div>\r\n\r\n {/* Password Dialog */}\r\n <PasswordDialog\r\n open={isPasswordDialogOpen}\r\n fileName={resolvedFileName}\r\n onSubmit={handlePasswordSubmit}\r\n onCancel={handlePasswordCancel}\r\n error={passwordError}\r\n isLoading={isVerifyingPassword}\r\n />\r\n\r\n\r\n </div>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nPDFViewerContent.displayName = \"PDFViewerContent\";\r\n\r\nexport const PDFViewer = forwardRef<PDFViewerMethods, FileViewerProps>(\r\n (props, ref) => {\r\n return (\r\n <PDFViewerContent {...props} sourceDescription=\"doc.pdf\" ref={ref} />\r\n );\r\n }\r\n);\r\n\r\nPDFViewer.displayName = \"PDFViewer\";\r\n","import React from 'react';\r\nimport { PDFViewer as HeadlessPDFViewerImport } from '@cannyminds/pdf-viewer';\r\n\r\n// Ensure we have a valid component\r\nconst HeadlessPDFViewer: any = HeadlessPDFViewerImport;\r\n\r\ninterface CannyMindsPDFViewerRef {\r\n zoom: {\r\n zoomIn: () => void;\r\n zoomOut: () => void;\r\n setZoom: (level: number) => void;\r\n resetZoom: () => void;\r\n getZoom: () => number | any;\r\n fitToWidth: () => void;\r\n fitToPage: () => void;\r\n };\r\n navigation: {\r\n goToPage: (page: number) => void;\r\n getCurrentPage: () => number;\r\n getTotalPages: () => number;\r\n nextPage: () => void;\r\n previousPage: () => void;\r\n goToFirstPage: () => void;\r\n goToLastPage: () => void;\r\n };\r\n selection: {\r\n clearSelection: () => void;\r\n getSelectedText: () => Promise<string>;\r\n copy: () => void;\r\n };\r\n search: {\r\n searchText: (keyword: string) => Promise<any>;\r\n nextResult: () => number;\r\n previousResult: () => number;\r\n goToResult: (index: number) => number;\r\n stopSearch: () => void;\r\n startSearch: () => void;\r\n getSearchState: () => any;\r\n setShowAllResults: (show: boolean) => void;\r\n };\r\n rotate?: {\r\n rotateForward: () => void;\r\n rotateBackward: () => void;\r\n setRotation: (rotation: number) => void;\r\n getRotation: () => number;\r\n };\r\n document?: {\r\n isReady: () => boolean;\r\n isLoading: () => boolean;\r\n hasPassword: () => boolean;\r\n getDocumentInfo: () => any;\r\n };\r\n scroll?: {\r\n scrollToPage: (page: number) => void;\r\n };\r\n annotation?: {\r\n activateHighlighter: () => void;\r\n deactivateHighlighter: () => void;\r\n activateStamp: (dataUrl: string) => Promise<void>;\r\n deactivateStamp: () => void;\r\n deleteSelectedAnnotation: () => boolean;\r\n getSelectedAnnotation: () => any;\r\n getAllAnnotations: () => any[];\r\n exportAnnotationsAsJSON: () => string;\r\n onAnnotationEvent?: (callback: (event: { type: 'create' | 'update' | 'delete'; annotation: any }) => void) => (() => void) | undefined;\r\n };\r\n print?: {\r\n print: () => void;\r\n };\r\n}\r\n\r\ninterface StablePDFViewerProps {\r\n pdfBuffer: ArrayBuffer;\r\n onPasswordRequest: (fileName?: string) => Promise<string | null>;\r\n pdfViewerRef: React.RefObject<CannyMindsPDFViewerRef | null>;\r\n\r\n // Annotation props\r\n showAnnotations?: boolean;\r\n userDetails?: { name: string; email: string; id: string };\r\n annotationSelectionMenu?: React.ComponentType<any>;\r\n isHighlighterActive?: boolean;\r\n isStampActive?: boolean;\r\n onHighlighterClick?: () => void;\r\n onStampClick?: () => void;\r\n onSignatureClick?: () => void;\r\n permissions?: any;\r\n hideInternalLoading?: boolean;\r\n}\r\n\r\n// Stable PDF Viewer Component - only re-renders when PDF data changes\r\nexport const StablePDFViewer = React.memo<StablePDFViewerProps>(({\r\n pdfBuffer,\r\n onPasswordRequest,\r\n pdfViewerRef,\r\n showAnnotations,\r\n userDetails,\r\n annotationSelectionMenu,\r\n isHighlighterActive,\r\n isStampActive,\r\n onHighlighterClick,\r\n onStampClick,\r\n onSignatureClick,\r\n permissions,\r\n hideInternalLoading,\r\n}) => {\r\n return (\r\n <HeadlessPDFViewer\r\n ref={pdfViewerRef}\r\n pdfBuffer={pdfBuffer}\r\n onPasswordRequest={onPasswordRequest}\r\n showAnnotations={showAnnotations}\r\n userDetails={userDetails}\r\n annotationSelectionMenu={annotationSelectionMenu || []}\r\n isHighlighterActive={isHighlighterActive}\r\n isStampActive={isStampActive}\r\n onHighlighterClick={onHighlighterClick}\r\n onStampClick={onStampClick}\r\n onSignatureClick={onSignatureClick}\r\n permissions={permissions}\r\n hideInternalLoading={hideInternalLoading}\r\n />\r\n );\r\n});\r\n\r\nStablePDFViewer.displayName = 'StablePDFViewer';\r\n\r\nexport type { CannyMindsPDFViewerRef };","import React, { useState, useRef, useEffect } from \"react\";\r\nimport { Tooltip } from \"@mui/material\";\r\nimport FirstPageIcon from \"@mui/icons-material/FirstPage\";\r\nimport LastPageIcon from \"@mui/icons-material/LastPage\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\r\nimport RemoveIcon from \"@mui/icons-material/Remove\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport FitScreenIcon from \"@mui/icons-material/FitScreen\";\r\nimport AspectRatioIcon from \"@mui/icons-material/AspectRatio\";\r\nimport TuneIcon from '@mui/icons-material/Tune';\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport FullscreenIcon from \"@mui/icons-material/Fullscreen\";\r\nimport DownloadIcon from \"@mui/icons-material/Download\";\r\nimport PrintIcon from \"@mui/icons-material/Print\";\r\nimport InfoIcon from \"@mui/icons-material/Info\";\r\nimport DescriptionIcon from \"@mui/icons-material/Description\";\r\nimport RotateLeftIcon from \"@mui/icons-material/RotateLeft\";\r\nimport RotateRightIcon from \"@mui/icons-material/RotateRight\";\r\nimport HistoryIcon from \"@mui/icons-material/History\";\r\nimport { LocalOffer } from \"@mui/icons-material\";\r\nimport HighlightIcon from \"@mui/icons-material/Highlight\";\r\nimport ImageIcon from \"@mui/icons-material/Image\";\r\nimport DrawIcon from \"@mui/icons-material/Draw\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport ApprovalIcon from \"@mui/icons-material/Approval\";\r\nimport KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport PortraitIcon from \"@mui/icons-material/Portrait\";\r\nimport MenuBookIcon from \"@mui/icons-material/MenuBook\";\r\nimport SwapVertIcon from \"@mui/icons-material/SwapVert\";\r\nimport SwapHorizIcon from \"@mui/icons-material/SwapHoriz\";\r\nimport AutoFixHighIcon from \"@mui/icons-material/AutoFixHigh\";\r\nimport ContentCopyIcon from \"@mui/icons-material/ContentCopy\";\r\n\r\ninterface PDFToolbarProps {\r\n currentPage: number;\r\n totalPages: number;\r\n zoom: number;\r\n isSidebarOpen: boolean;\r\n showPageNavigation: boolean;\r\n showPageCount: boolean;\r\n showZoomControls: boolean;\r\n showSearch: boolean;\r\n showMetadata: boolean;\r\n showProperties: boolean;\r\n showTags: boolean;\r\n showHistory: boolean;\r\n showDownload: boolean;\r\n showPrint: boolean;\r\n showRotation?: boolean;\r\n showAnnotations?: boolean;\r\n // New props for granular control\r\n showAnnotate?: boolean;\r\n disabledAnnotate?: boolean;\r\n showPrintOriginal?: boolean;\r\n showPrintWithAnnotations?: boolean;\r\n showDownloadOriginal?: boolean;\r\n showDownloadWithAnnotations?: boolean;\r\n isHighlighterActive?: boolean;\r\n isStampActive?: boolean;\r\n disabledRotateLeft?: boolean;\r\n disabledRotateRight?: boolean;\r\n disabledMetadata?: boolean;\r\n disabledProperties?: boolean;\r\n disabledTags?: boolean;\r\n disabledHistory?: boolean;\r\n disabledDownload?: boolean;\r\n disabledPrint?: boolean;\r\n disabledCopy?: boolean;\r\n disabledHighlighter?: boolean;\r\n disabledStamp?: boolean;\r\n disabledSignature?: boolean;\r\n onFirstPage: () => void;\r\n onPreviousPage: () => void;\r\n onNextPage: () => void;\r\n onLastPage: () => void;\r\n onPageInput: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n onPageInputKeyPress: (e: React.KeyboardEvent<HTMLInputElement>) => void;\r\n onZoomIn: () => void;\r\n onZoomOut: () => void;\r\n onFitToWidth: () => void;\r\n onFitToPage: () => void;\r\n onToggleSidebar: () => void;\r\n onToggleFullScreen: () => void;\r\n onRotateLeft?: () => void;\r\n onRotateRight?: () => void;\r\n onDownloadClick?: () => void;\r\n onDownloadWithAnnotations?: () => void;\r\n onDownloadWithoutAnnotations?: () => void;\r\n onPrintClick?: () => void;\r\n onPrintWithAnnotations?: () => void;\r\n onPrintWithoutAnnotations?: () => void;\r\n onCopyClick?: () => void;\r\n onMetadataClick?: () => void;\r\n onPropertiesClick?: () => void;\r\n onTagsClick?: () => void;\r\n onHistoryClick?: () => void;\r\n onHighlighterClick?: () => void;\r\n onStampClick?: () => void;\r\n onSignatureClick?: () => void;\r\n // Save functionality\r\n hasUnsavedAnnotations?: boolean;\r\n isSavingAnnotations?: boolean;\r\n canSaveAnnotations?: boolean;\r\n onSaveAnnotations?: () => void;\r\n}\r\n\r\nexport const PDFToolbar = React.memo<PDFToolbarProps>(\r\n ({\r\n currentPage,\r\n totalPages,\r\n zoom,\r\n isSidebarOpen,\r\n showPageNavigation,\r\n showPageCount,\r\n showZoomControls,\r\n showSearch,\r\n showMetadata,\r\n showProperties,\r\n showTags,\r\n showHistory,\r\n showDownload,\r\n showPrint,\r\n showRotation,\r\n showAnnotations,\r\n // Destructure new props with defaults\r\n showAnnotate = true,\r\n disabledAnnotate = false,\r\n showPrintOriginal = true,\r\n showPrintWithAnnotations = true,\r\n showDownloadOriginal = true,\r\n showDownloadWithAnnotations = true,\r\n isHighlighterActive,\r\n isStampActive,\r\n disabledRotateLeft,\r\n disabledRotateRight,\r\n disabledMetadata,\r\n disabledProperties,\r\n disabledTags,\r\n disabledHistory,\r\n disabledDownload,\r\n disabledPrint,\r\n disabledCopy,\r\n disabledHighlighter,\r\n disabledStamp,\r\n disabledSignature,\r\n onFirstPage,\r\n onPreviousPage,\r\n onNextPage,\r\n onLastPage,\r\n onPageInput,\r\n onPageInputKeyPress,\r\n onZoomIn,\r\n onZoomOut,\r\n onFitToWidth,\r\n onFitToPage,\r\n onToggleSidebar,\r\n onToggleFullScreen,\r\n onRotateLeft,\r\n onRotateRight,\r\n onDownloadClick,\r\n onDownloadWithAnnotations,\r\n onDownloadWithoutAnnotations,\r\n onPrintClick,\r\n onPrintWithAnnotations,\r\n onPrintWithoutAnnotations,\r\n onCopyClick,\r\n onMetadataClick,\r\n onPropertiesClick,\r\n onTagsClick,\r\n onHistoryClick,\r\n onHighlighterClick,\r\n onStampClick,\r\n onSignatureClick,\r\n // Save functionality\r\n hasUnsavedAnnotations,\r\n isSavingAnnotations,\r\n canSaveAnnotations,\r\n onSaveAnnotations,\r\n }) => {\r\n const [isPrintMenuOpen, setIsPrintMenuOpen] = useState(false);\r\n const [isDownloadMenuOpen, setIsDownloadMenuOpen] = useState(false);\r\n const [isAnnotationMenuOpen, setIsAnnotationMenuOpen] = useState(false);\r\n const [isViewMenuOpen, setIsViewMenuOpen] = useState(false);\r\n const printMenuRef = useRef<HTMLDivElement>(null);\r\n const downloadMenuRef = useRef<HTMLDivElement>(null);\r\n const annotationMenuRef = useRef<HTMLDivElement>(null);\r\n const viewMenuRef = useRef<HTMLDivElement>(null);\r\n\r\n // Close dropdown when clicking outside\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (printMenuRef.current && !printMenuRef.current.contains(event.target as Node)) {\r\n setIsPrintMenuOpen(false);\r\n }\r\n if (downloadMenuRef.current && !downloadMenuRef.current.contains(event.target as Node)) {\r\n setIsDownloadMenuOpen(false);\r\n }\r\n if (annotationMenuRef.current && !annotationMenuRef.current.contains(event.target as Node)) {\r\n setIsAnnotationMenuOpen(false);\r\n }\r\n if (viewMenuRef.current && !viewMenuRef.current.contains(event.target as Node)) {\r\n setIsViewMenuOpen(false);\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n const handlePrintWithAnnotations = () => {\r\n setIsPrintMenuOpen(false);\r\n onPrintWithAnnotations?.();\r\n };\r\n\r\n const handlePrintWithoutAnnotations = () => {\r\n setIsPrintMenuOpen(false);\r\n onPrintWithoutAnnotations?.();\r\n };\r\n\r\n const handleDownloadWithAnnotations = () => {\r\n setIsDownloadMenuOpen(false);\r\n onDownloadWithAnnotations?.();\r\n };\r\n\r\n const handleDownloadWithoutAnnotations = () => {\r\n setIsDownloadMenuOpen(false);\r\n onDownloadWithoutAnnotations?.();\r\n };\r\n\r\n const [activeMode, setActiveMode] = useState<'view' | 'annotate' | 'redact'>('view');\r\n\r\n return (\r\n <div className=\"pdf-viewer-toolbar-container\">\r\n {/* Main Toolbar */}\r\n <div className=\"pdf-viewer-toolbar\">\r\n {/* Left section: Navigation & Zoom */}\r\n <div className=\"toolbar-left\">\r\n {/* Page Navigation */}\r\n {showPageNavigation && (\r\n <div className=\"toolbar-section\">\r\n <Tooltip title=\"First Page\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onFirstPage}\r\n disabled={currentPage <= 1}\r\n >\r\n <FirstPageIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n <Tooltip title=\"Previous Page\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onPreviousPage}\r\n disabled={currentPage <= 1}\r\n >\r\n <ChevronLeftIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n <span className=\"page-info\" style={{ display: 'flex', alignItems: 'center', margin: '0 8px', fontSize: '14px', fontWeight: 500 }}>\r\n {currentPage} {showPageCount && <span style={{ color: '#6b7280', marginLeft: '4px' }}>/ {totalPages || \"...\"}</span>}\r\n </span>\r\n <Tooltip title=\"Next Page\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onNextPage}\r\n disabled={currentPage >= totalPages}\r\n >\r\n <ChevronRightIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n <Tooltip title=\"Last Page\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onLastPage}\r\n disabled={currentPage >= totalPages}\r\n >\r\n <LastPageIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n </div>\r\n )}\r\n\r\n {/* Zoom Controls */}\r\n {showZoomControls && (\r\n <>\r\n <div className=\"toolbar-separator\" />\r\n <div className=\"toolbar-section\">\r\n <Tooltip title=\"Zoom Out\">\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onZoomOut}\r\n >\r\n <RemoveIcon fontSize=\"small\" />\r\n </button>\r\n </Tooltip>\r\n <span className=\"zoom-display\">{zoom}%</span>\r\n <Tooltip title=\"Zoom In\">\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onZoomIn}\r\n >\r\n <AddIcon fontSize=\"small\" />\r\n </button>\r\n </Tooltip>\r\n </div>\r\n </>\r\n )}\r\n\r\n {/* View Dropdown - Fit to Width, Fit to Page, Rotate */}\r\n {(showZoomControls || showRotation) && (\r\n <>\r\n <div className=\"toolbar-separator\" />\r\n <div className=\"toolbar-section\">\r\n <div className=\"toolbar-dropdown-container\" ref={viewMenuRef}>\r\n <Tooltip title=\"View Options\">\r\n <button\r\n className={`toolbar-button toolbar-dropdown-button ${isViewMenuOpen ? \"toolbar-button-active\" : \"\"}`}\r\n onClick={() => setIsViewMenuOpen(!isViewMenuOpen)}\r\n >\r\n <TuneIcon fontSize=\"small\" />\r\n <KeyboardArrowDownIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </button>\r\n </Tooltip>\r\n {isViewMenuOpen && (\r\n <div className=\"toolbar-dropdown-menu\" style={{ width: '240px' }}>\r\n\r\n {/* SPREAD MODE */}\r\n <div className=\"toolbar-dropdown-header\">SPREAD MODE</div>\r\n <button className=\"toolbar-dropdown-item toolbar-dropdown-item-active\" onClick={() => setIsViewMenuOpen(false)}>\r\n <PortraitIcon fontSize=\"small\" />\r\n <span>Single Page</span>\r\n </button>\r\n\r\n <div className=\"toolbar-dropdown-divider\" />\r\n\r\n {/* SCROLL LAYOUT */}\r\n <div className=\"toolbar-dropdown-header\">SCROLL LAYOUT</div>\r\n <button className=\"toolbar-dropdown-item toolbar-dropdown-item-active\" onClick={() => setIsViewMenuOpen(false)}>\r\n <SwapVertIcon fontSize=\"small\" />\r\n <span>Vertical</span>\r\n </button>\r\n\r\n <div className=\"toolbar-dropdown-divider\" />\r\n\r\n {/* ZOOM / FIT */}\r\n <button className=\"toolbar-dropdown-item\" onClick={() => { setIsViewMenuOpen(false); onFitToWidth?.(); }}>\r\n <AspectRatioIcon fontSize=\"small\" />\r\n <span>Fit to Width</span>\r\n </button>\r\n <button className=\"toolbar-dropdown-item\" onClick={() => { setIsViewMenuOpen(false); onFitToPage?.(); }}>\r\n <FitScreenIcon fontSize=\"small\" />\r\n <span>Fit to Page</span>\r\n </button>\r\n\r\n <div className=\"toolbar-dropdown-divider\" />\r\n\r\n {/* PAGE ROTATION */}\r\n {showRotation && (\r\n <>\r\n <div className=\"toolbar-dropdown-header\">PAGE ROTATION</div>\r\n <button\r\n className=\"toolbar-dropdown-item\"\r\n onClick={() => {\r\n setIsViewMenuOpen(false);\r\n onRotateRight?.();\r\n }}\r\n disabled={false}\r\n >\r\n <RotateRightIcon fontSize=\"small\" />\r\n <span>Rotate Clockwise</span>\r\n </button>\r\n <button\r\n className=\"toolbar-dropdown-item\"\r\n onClick={() => {\r\n setIsViewMenuOpen(false);\r\n onRotateLeft?.();\r\n }}\r\n disabled={disabledRotateLeft}\r\n >\r\n <RotateLeftIcon fontSize=\"small\" />\r\n <span>Rotate Counter-Clockwise</span>\r\n </button>\r\n </>\r\n )}\r\n\r\n <div className=\"toolbar-dropdown-divider\" />\r\n\r\n <button\r\n className=\"toolbar-dropdown-item\"\r\n onClick={() => {\r\n setIsViewMenuOpen(false);\r\n onToggleFullScreen();\r\n }}\r\n >\r\n <FullscreenIcon fontSize=\"small\" />\r\n <span>Fullscreen</span>\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n\r\n {/* Search */}\r\n {showSearch && (\r\n <>\r\n <div className=\"toolbar-separator\" />\r\n <div className=\"toolbar-section\">\r\n <Tooltip title=\"Search\">\r\n <button\r\n className={`toolbar-button ${isSidebarOpen ? \"toolbar-button-active\" : \"\"}`}\r\n onClick={onToggleSidebar}\r\n >\r\n <SearchIcon fontSize=\"small\" />\r\n </button>\r\n </Tooltip>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n\r\n {/* Center Section: Mode Tabs */}\r\n <div className=\"toolbar-center\">\r\n <button\r\n className={`toolbar-tab ${activeMode === 'view' ? 'toolbar-tab-active' : ''}`}\r\n onClick={() => setActiveMode('view')}\r\n >\r\n View\r\n </button>\r\n {showAnnotate && (\r\n <button\r\n className={`toolbar-tab ${activeMode === 'annotate' ? 'toolbar-tab-active' : ''}`}\r\n onClick={() => !disabledAnnotate && setActiveMode('annotate')}\r\n style={{\r\n position: 'relative',\r\n opacity: disabledAnnotate ? 0.5 : 1,\r\n cursor: disabledAnnotate ? 'not-allowed' : 'pointer'\r\n }}\r\n >\r\n Annotate\r\n {hasUnsavedAnnotations && (\r\n <span style={{\r\n position: 'absolute',\r\n top: '4px',\r\n right: '4px',\r\n width: '6px',\r\n height: '6px',\r\n backgroundColor: '#ef4444',\r\n borderRadius: '50%'\r\n }} />\r\n )}\r\n </button>\r\n )}\r\n {/* <button\r\n className={`toolbar-tab ${activeMode === 'redact' ? 'toolbar-tab-active' : ''}`}\r\n onClick={() => setActiveMode('redact')}\r\n >\r\n Redact\r\n </button> */}\r\n </div>\r\n\r\n {/* Right section: Actions */}\r\n <div className=\"toolbar-right\">\r\n\r\n {(hasUnsavedAnnotations || showDownload || showPrint || showMetadata || showProperties || showTags || showHistory) && (\r\n <>\r\n <div className=\"toolbar-separator\" />\r\n <div className=\"toolbar-section\">\r\n {/* Save Button */}\r\n {/* Save Button Removed from here */}\r\n\r\n {/* Copy Button - Removed, using native Ctrl+C and right-click menu instead */}\r\n\r\n {showDownload && (\r\n <div className=\"toolbar-dropdown-container\" ref={downloadMenuRef}>\r\n {(showDownloadOriginal && showDownloadWithAnnotations) ? (\r\n // RENDER DROPDOWN if BOTH are enabled\r\n <>\r\n <Tooltip title=\"Download\">\r\n <span>\r\n <button\r\n className={`toolbar-button toolbar-dropdown-button ${isDownloadMenuOpen ? \"toolbar-button-active\" : \"\"}`}\r\n onClick={() => setIsDownloadMenuOpen(!isDownloadMenuOpen)}\r\n disabled={disabledDownload}\r\n >\r\n <DownloadIcon fontSize=\"small\" />\r\n <KeyboardArrowDownIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n {isDownloadMenuOpen && (\r\n <div className=\"toolbar-dropdown-menu toolbar-dropdown-menu-right\">\r\n <button\r\n className=\"toolbar-dropdown-item\"\r\n onClick={handleDownloadWithoutAnnotations}\r\n >\r\n <span>Download Document Only</span>\r\n </button>\r\n <button\r\n className=\"toolbar-dropdown-item\"\r\n onClick={handleDownloadWithAnnotations}\r\n >\r\n <span>Download with Annotations</span>\r\n </button>\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n // RENDER SINGLE BUTTON if ONLY ONE is enabled\r\n (showDownloadOriginal || showDownloadWithAnnotations) && (\r\n <Tooltip title=\"Download\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={showDownloadOriginal ? handleDownloadWithoutAnnotations : handleDownloadWithAnnotations}\r\n disabled={disabledDownload}\r\n >\r\n <DownloadIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n )\r\n )}\r\n </div>\r\n )}\r\n\r\n {showPrint && (\r\n <div className=\"toolbar-dropdown-container\" ref={printMenuRef}>\r\n {(showPrintOriginal && showPrintWithAnnotations) ? (\r\n // RENDER DROPDOWN if BOTH are enabled\r\n <>\r\n <Tooltip title=\"Print\">\r\n <span>\r\n <button\r\n className={`toolbar-button toolbar-dropdown-button ${isPrintMenuOpen ? \"toolbar-button-active\" : \"\"}`}\r\n onClick={() => setIsPrintMenuOpen(!isPrintMenuOpen)}\r\n disabled={disabledPrint}\r\n >\r\n <PrintIcon fontSize=\"small\" />\r\n <KeyboardArrowDownIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n {isPrintMenuOpen && (\r\n <div className=\"toolbar-dropdown-menu toolbar-dropdown-menu-right\">\r\n <button\r\n className=\"toolbar-dropdown-item\"\r\n onClick={handlePrintWithoutAnnotations}\r\n >\r\n <span>Print Document Only</span>\r\n </button>\r\n <button\r\n className=\"toolbar-dropdown-item\"\r\n onClick={handlePrintWithAnnotations}\r\n >\r\n <span>Print with Annotations</span>\r\n </button>\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n // RENDER SINGLE BUTTON if ONLY ONE is enabled\r\n (showPrintOriginal || showPrintWithAnnotations) && (\r\n <Tooltip title=\"Print\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={showPrintOriginal ? handlePrintWithoutAnnotations : handlePrintWithAnnotations}\r\n disabled={disabledPrint}\r\n >\r\n <PrintIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n )\r\n )}\r\n </div>\r\n )}\r\n\r\n {showMetadata && (\r\n <Tooltip title=\"Metadata\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onMetadataClick}\r\n disabled={disabledMetadata}\r\n >\r\n <DescriptionIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n )}\r\n\r\n {showProperties && (\r\n <Tooltip title=\"Properties\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onPropertiesClick}\r\n disabled={disabledProperties}\r\n >\r\n <InfoIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n )}\r\n\r\n {showTags && (\r\n <Tooltip title=\"Tags\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onTagsClick}\r\n disabled={disabledTags}\r\n >\r\n <LocalOffer fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n )}\r\n\r\n {showHistory && (\r\n <Tooltip title=\"Version History\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onHistoryClick}\r\n disabled={disabledHistory}\r\n >\r\n <HistoryIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Secondary Toolbar (Annotation Tools) */}\r\n {activeMode === 'annotate' && showAnnotations && (\r\n <div className=\"pdf-viewer-secondary-toolbar\">\r\n <Tooltip title=\"Highlight\">\r\n <span>\r\n <button\r\n className={`toolbar-button ${isHighlighterActive ? \"toolbar-button-active\" : \"\"}`}\r\n onClick={onHighlighterClick}\r\n disabled={disabledHighlighter}\r\n >\r\n <HighlightIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n <Tooltip title=\"Stamp\">\r\n <span>\r\n <button\r\n className={`toolbar-button ${isStampActive ? \"toolbar-button-active\" : \"\"}`}\r\n onClick={onStampClick}\r\n disabled={disabledStamp}\r\n >\r\n <ApprovalIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n <Tooltip title=\"Signature\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onSignatureClick}\r\n disabled={disabledSignature}\r\n >\r\n <DrawIcon fontSize=\"small\" />\r\n </button>\r\n </span>\r\n </Tooltip>\r\n\r\n {/* Save Button */}\r\n {hasUnsavedAnnotations && canSaveAnnotations !== false && onSaveAnnotations && (\r\n <>\r\n <div style={{ width: 1, height: 24, backgroundColor: '#e5e7eb', margin: '0 8px' }} />\r\n <Tooltip title=\"Save Annotations\">\r\n <span>\r\n <button\r\n className=\"toolbar-button\"\r\n onClick={onSaveAnnotations}\r\n disabled={isSavingAnnotations}\r\n style={{\r\n color: hasUnsavedAnnotations ? '#2563eb' : 'inherit',\r\n padding: '6px 16px',\r\n border: hasUnsavedAnnotations ? '1px solid #2563eb' : '1px solid transparent',\r\n borderRadius: '6px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px',\r\n backgroundColor: hasUnsavedAnnotations ? '#eff6ff' : 'transparent',\r\n fontSize: '14px',\r\n fontWeight: 500,\r\n width: 'auto',\r\n cursor: isSavingAnnotations ? 'not-allowed' : 'pointer'\r\n }}\r\n >\r\n {isSavingAnnotations ? (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" style={{ animation: 'spin 1s linear infinite' }}>\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"3\" fill=\"none\" strokeDasharray=\"31.4\" strokeDashoffset=\"10\" />\r\n </svg>\r\n ) : (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\" />\r\n <polyline points=\"17 21 17 13 7 13 7 21\" />\r\n <polyline points=\"7 3 7 8 15 8\" />\r\n </svg>\r\n )}\r\n <span>{isSavingAnnotations ? 'Saving...' : 'Save'}</span>\r\n </button>\r\n </span>\r\n </Tooltip>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Secondary Toolbar (Redact Tools) */}\r\n {activeMode === 'redact' && showAnnotations && (\r\n <div className=\"pdf-viewer-secondary-toolbar\">\r\n <Tooltip title=\"Redact Text\">\r\n <button className=\"toolbar-button\">\r\n <AutoFixHighIcon fontSize=\"small\" />\r\n </button>\r\n </Tooltip>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nPDFToolbar.displayName = \"PDFToolbar\";\r\n","import React from 'react';\nimport FileIcon from '../../FileIcon';\n\ninterface PDFHeaderProps {\n fileName: string;\n fileExtension: string;\n}\n\nexport const PDFHeader = React.memo<PDFHeaderProps>(({ fileName, fileExtension }) => {\n return (\n <div className=\"pdf-viewer-header\">\n <FileIcon ext={fileExtension} size={26} />\n <div className=\"header-file-name\" title={fileName}>\n {fileName}\n </div>\n </div>\n );\n});\n\nPDFHeader.displayName = 'PDFHeader';","import React, { useState, useLayoutEffect, useEffect, useRef } from 'react';\r\nimport {\r\n Box,\r\n Typography,\r\n TextField,\r\n IconButton,\r\n InputAdornment,\r\n Divider,\r\n CircularProgress\r\n} from '@mui/material';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\r\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\r\nimport ClearIcon from '@mui/icons-material/Clear';\r\nimport FindInPageIcon from '@mui/icons-material/FindInPage';\r\n\r\ninterface SearchResult {\r\n pageNumber: number;\r\n text: string;\r\n context: string;\r\n index: number;\r\n}\r\n\r\ninterface SearchSidebarProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n onSearch: (keyword: string) => void;\r\n onSearchResultClick: (pageNumber: number, resultIndex: number) => void;\r\n onNextResult: () => void;\r\n onPreviousResult: () => void;\r\n currentResultIndex: number;\r\n totalResults: number;\r\n searchKeyword: string;\r\n searchResults?: SearchResult[];\r\n isSearching?: boolean;\r\n isSyntheticResults?: boolean; // Indicates results are from OCR/document analysis\r\n}\r\n\r\nexport const SearchSidebar: React.FC<SearchSidebarProps> = ({\r\n isOpen,\r\n onClose,\r\n onSearch,\r\n onSearchResultClick,\r\n onNextResult,\r\n onPreviousResult,\r\n currentResultIndex,\r\n totalResults,\r\n searchKeyword,\r\n searchResults = [],\r\n isSearching = false,\r\n isSyntheticResults = false\r\n}) => {\r\n const [searchTerm, setSearchTerm] = useState(searchKeyword || '');\r\n const [hasSearched, setHasSearched] = useState(false);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n\r\n // Sync local search term with prop changes (for URL-based auto-search)\r\n useEffect(() => {\r\n if (searchKeyword && searchKeyword !== searchTerm) {\r\n setSearchTerm(searchKeyword);\r\n }\r\n }, [searchKeyword]);\r\n\r\n // Scrollbar hover handler\r\n useLayoutEffect(() => {\r\n const element = contentRef.current;\r\n if (!element) return;\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const rect = element.getBoundingClientRect();\r\n const distanceFromRight = rect.right - e.clientX;\r\n const distanceFromBottom = rect.bottom - e.clientY;\r\n\r\n if (distanceFromRight <= 15 || distanceFromBottom <= 15) {\r\n element.classList.add('scrollbar-hover');\r\n } else {\r\n element.classList.remove('scrollbar-hover');\r\n }\r\n };\r\n\r\n const handleMouseLeave = () => element.classList.remove('scrollbar-hover');\r\n\r\n element.addEventListener('mousemove', handleMouseMove);\r\n element.addEventListener('mouseleave', handleMouseLeave);\r\n\r\n return () => {\r\n element.removeEventListener('mousemove', handleMouseMove);\r\n element.removeEventListener('mouseleave', handleMouseLeave);\r\n };\r\n }, []);\r\n\r\n // Inject scrollbar styles\r\n useLayoutEffect(() => {\r\n const style = document.createElement('style');\r\n style.id = 'search-sidebar-scrollbar';\r\n style.textContent = `\r\n @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Tamil:wght@400;600&family=Noto+Sans+Devanagari:wght@400;600&display=swap');\r\n \r\n .search-sidebar-content::-webkit-scrollbar {\r\n width: 12px;\r\n height: 12px;\r\n }\r\n .search-sidebar-content::-webkit-scrollbar-track {\r\n background-color: transparent;\r\n }\r\n .search-sidebar-content::-webkit-scrollbar-thumb {\r\n background-color: rgba(128, 128, 128, 0.3);\r\n border-radius: 8px;\r\n border: 4px solid transparent;\r\n background-clip: padding-box;\r\n transition: all 0.15s ease;\r\n }\r\n .search-sidebar-content.scrollbar-hover::-webkit-scrollbar-thumb {\r\n background-color: rgba(128, 128, 128, 0.5);\r\n border: 2px solid transparent;\r\n }\r\n .search-sidebar-content::-webkit-scrollbar-thumb:active {\r\n background-color: rgba(25, 118, 210, 0.8);\r\n border: 1px solid transparent;\r\n }\r\n\r\n @media (prefers-color-scheme: dark) {\r\n .search-sidebar-content::-webkit-scrollbar-thumb {\r\n background-color: rgba(255, 255, 255, 0.2);\r\n }\r\n .search-sidebar-content.scrollbar-hover::-webkit-scrollbar-thumb {\r\n background-color: rgba(255, 255, 255, 0.35);\r\n }\r\n }\r\n \r\n /* Tamil font support for search results */\r\n .search-result-text {\r\n font-family: 'Noto Sans Tamil', 'Noto Sans Devanagari', Arial, sans-serif !important;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n return () => {\r\n const el = document.getElementById('search-sidebar-scrollbar');\r\n if (el) el.remove();\r\n };\r\n }, []);\r\n\r\n useLayoutEffect(() => {\r\n setSearchTerm(searchKeyword || '');\r\n if (searchKeyword || searchResults.length > 0) {\r\n setHasSearched(true);\r\n }\r\n }, [searchKeyword, searchResults]);\r\n\r\n const handleSearchSubmit = (e?: React.FormEvent) => {\r\n if (e) e.preventDefault();\r\n\r\n if (searchTerm.trim()) {\r\n setHasSearched(true);\r\n onSearch(searchTerm.trim());\r\n }\r\n };\r\n\r\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value;\r\n setSearchTerm(value);\r\n\r\n if (!value.trim()) {\r\n setHasSearched(false);\r\n onSearch('');\r\n }\r\n };\r\n\r\n const handleClearSearch = () => {\r\n setSearchTerm('');\r\n setHasSearched(false);\r\n onSearch('');\r\n };\r\n\r\n // Group results by page\r\n const resultsByPage = searchResults.reduce((acc, result) => {\r\n if (!acc[result.pageNumber]) {\r\n acc[result.pageNumber] = [];\r\n }\r\n acc[result.pageNumber].push(result);\r\n return acc;\r\n }, {} as Record<number, SearchResult[]>);\r\n\r\n const highlightText = (text: any, keyword: string) => {\r\n if (!keyword) return text;\r\n\r\n const textString = typeof text === 'string' ? text : String(text || '');\r\n if (!textString) return text;\r\n\r\n try {\r\n const escapedKeyword = keyword.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n const regex = new RegExp(`(${escapedKeyword})`, 'gi');\r\n const parts = textString.split(regex);\r\n\r\n return parts.map((part, index) =>\r\n regex.test(part) ? (\r\n <Box\r\n component=\"span\"\r\n key={index}\r\n sx={{\r\n color: 'primary.main',\r\n fontWeight: 600,\r\n fontSize: 'inherit'\r\n }}\r\n >\r\n {part}\r\n </Box>\r\n ) : (\r\n part\r\n )\r\n );\r\n } catch (error) {\r\n // Return plain text if highlighting fails\r\n return textString;\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100%',\r\n width: '320px',\r\n backgroundColor: 'background.paper',\r\n borderLeft: '1px solid',\r\n borderColor: 'divider',\r\n overflow: 'hidden'\r\n }}\r\n >\r\n {/* Header */}\r\n <Box sx={{ px: 3, py: 2.5, backgroundColor: 'background.default' }}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 2 }}>\r\n <Typography variant=\"h6\" sx={{ fontSize: '1.125rem', fontWeight: 600, color: 'text.primary' }}>\r\n Search\r\n </Typography>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onClose}\r\n sx={{\r\n color: 'text.secondary',\r\n padding: '6px'\r\n }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Search Input */}\r\n <form onSubmit={handleSearchSubmit}>\r\n <TextField\r\n fullWidth\r\n size=\"medium\"\r\n placeholder=\"Search in document...\"\r\n value={searchTerm}\r\n onChange={handleSearchChange}\r\n autoComplete=\"off\"\r\n InputProps={{\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <SearchIcon sx={{ color: 'text.disabled', fontSize: 20 }} />\r\n </InputAdornment>\r\n ),\r\n endAdornment: searchTerm && (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n size=\"small\"\r\n onClick={handleClearSearch}\r\n sx={{\r\n color: 'text.secondary',\r\n padding: '4px',\r\n '&:hover': {\r\n backgroundColor: 'action.hover'\r\n }\r\n }}\r\n >\r\n <ClearIcon sx={{ fontSize: 18 }} />\r\n </IconButton>\r\n </InputAdornment>\r\n )\r\n }}\r\n sx={{\r\n '& .MuiOutlinedInput-root': {\r\n fontSize: '0.9375rem',\r\n backgroundColor: 'background.paper',\r\n borderRadius: '8px',\r\n '& fieldset': {\r\n borderColor: 'divider'\r\n },\r\n '&.Mui-focused fieldset': {\r\n borderColor: 'primary.main',\r\n borderWidth: '2px'\r\n }\r\n },\r\n '& .MuiInputBase-input': {\r\n padding: '10px 14px'\r\n }\r\n }}\r\n />\r\n </form>\r\n\r\n {/* Results Summary and Navigation */}\r\n {totalResults > 0 && (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n mt: 2,\r\n pt: 2,\r\n borderTop: '1px solid',\r\n borderColor: 'divider'\r\n }}\r\n >\r\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', fontSize: '0.875rem', fontWeight: 500 }}>\r\n {currentResultIndex + 1} of {totalResults} results\r\n </Typography>\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onPreviousResult}\r\n disabled={currentResultIndex <= 0}\r\n sx={{\r\n color: currentResultIndex <= 0 ? 'text.disabled' : 'primary.main',\r\n padding: '6px',\r\n borderRadius: '6px',\r\n border: '1px solid',\r\n borderColor: currentResultIndex <= 0 ? 'divider' : 'primary.main'\r\n }}\r\n >\r\n <KeyboardArrowUpIcon sx={{ fontSize: 20 }} />\r\n </IconButton>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onNextResult}\r\n disabled={currentResultIndex >= totalResults - 1}\r\n sx={{\r\n color: currentResultIndex >= totalResults - 1 ? 'text.disabled' : 'primary.main',\r\n padding: '6px',\r\n borderRadius: '6px',\r\n border: '1px solid',\r\n borderColor: currentResultIndex >= totalResults - 1 ? 'divider' : 'primary.main'\r\n }}\r\n >\r\n <KeyboardArrowDownIcon sx={{ fontSize: 20 }} />\r\n </IconButton>\r\n </Box>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n <Divider />\r\n\r\n {/* Search Results */}\r\n <Box ref={contentRef} className=\"search-sidebar-content\" sx={{\r\n flex: 1,\r\n overflow: 'auto',\r\n backgroundColor: 'background.default'\r\n }}>\r\n {!searchTerm && !hasSearched && (\r\n <Box sx={{ p: 4, textAlign: 'center', mt: 6 }}>\r\n <Box\r\n sx={{\r\n width: 80,\r\n height: 80,\r\n borderRadius: '50%',\r\n backgroundColor: 'action.hover',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto',\r\n mb: 3\r\n }}\r\n >\r\n <SearchIcon sx={{ fontSize: 40, color: 'text.disabled' }} />\r\n </Box>\r\n <Typography variant=\"body1\" sx={{ color: 'text.primary', fontWeight: 500, mb: 1 }}>\r\n Search in Document\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', lineHeight: 1.6 }}>\r\n Enter keywords to find text within the PDF document\r\n </Typography>\r\n </Box>\r\n )}\r\n\r\n {searchTerm && !hasSearched && !isSearching && (\r\n <Box sx={{ p: 4, textAlign: 'center', mt: 6 }}>\r\n <Box\r\n sx={{\r\n width: 80,\r\n height: 80,\r\n borderRadius: '50%',\r\n backgroundColor: 'primary.light',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto',\r\n mb: 3,\r\n opacity: 0.2\r\n }}\r\n >\r\n <FindInPageIcon sx={{ fontSize: 40, color: 'primary.main' }} />\r\n </Box>\r\n <Typography variant=\"body1\" sx={{ color: 'text.primary', fontWeight: 500, mb: 1 }}>\r\n Ready to Search\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', mb: 2, lineHeight: 1.6 }}>\r\n Press Enter to find\r\n </Typography>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{\r\n color: 'white',\r\n fontWeight: 600,\r\n backgroundColor: (theme) => theme.palette.mode === 'dark'\r\n ? 'rgba(144, 202, 249, 0.16)'\r\n : 'primary.light',\r\n padding: '6px 16px',\r\n borderRadius: '16px',\r\n display: 'inline-block',\r\n opacity: 0.9\r\n }}\r\n >\r\n \"{searchTerm}\"\r\n </Typography>\r\n </Box>\r\n )}\r\n\r\n {isSearching && (\r\n <Box sx={{ p: 4, textAlign: 'center', mt: 6 }}>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto',\r\n mb: 3\r\n }}\r\n >\r\n <CircularProgress size={60} thickness={4} />\r\n </Box>\r\n <Typography variant=\"body1\" sx={{ color: 'text.primary', fontWeight: 500, mb: 1 }}>\r\n Searching...\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', lineHeight: 1.6 }}>\r\n Finding matches for \"{searchTerm}\"\r\n </Typography>\r\n </Box>\r\n )}\r\n\r\n {hasSearched && totalResults === 0 && !isSearching && (\r\n <Box sx={{ p: 4, textAlign: 'center', mt: 6 }}>\r\n <Box\r\n sx={{\r\n width: 80,\r\n height: 80,\r\n borderRadius: '50%',\r\n backgroundColor: (theme) => theme.palette.mode === 'dark'\r\n ? 'rgba(255, 152, 0, 0.12)'\r\n : 'warning.light',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto',\r\n mb: 3,\r\n opacity: 0.6\r\n }}\r\n >\r\n <SearchIcon sx={{ fontSize: 40, color: 'warning.main' }} />\r\n </Box>\r\n <Typography variant=\"body1\" sx={{ color: 'text.primary', fontWeight: 500, mb: 1 }}>\r\n No Results Found\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', lineHeight: 1.6 }}>\r\n No matches found for <strong>\"{searchTerm}\"</strong>\r\n </Typography>\r\n </Box>\r\n )}\r\n\r\n {totalResults > 0 && (\r\n <Box sx={{ p: 2 }}>\r\n {Object.keys(resultsByPage)\r\n .sort((a, b) => parseInt(a) - parseInt(b))\r\n .map((pageNum) => {\r\n const pageNumber = parseInt(pageNum);\r\n const pageResults = resultsByPage[pageNumber];\r\n\r\n return (\r\n <Box key={pageNumber} sx={{ mb: 3 }}>\r\n {/* Page Header */}\r\n <Typography\r\n variant=\"subtitle2\"\r\n sx={{\r\n color: 'text.secondary',\r\n mb: 1.5,\r\n px: 1,\r\n fontSize: '0.8125rem',\r\n fontWeight: 600,\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.5px'\r\n }}\r\n >\r\n Page {pageNumber}\r\n </Typography>\r\n\r\n {/* Results for this page */}\r\n {pageResults.map((result: SearchResult, index: number) => (\r\n <Box\r\n key={index}\r\n onClick={() => onSearchResultClick(result.pageNumber, result.index)}\r\n sx={{\r\n p: 2,\r\n mx: 1,\r\n mb: 1.5,\r\n borderRadius: '8px',\r\n border: '2px solid',\r\n borderColor: result.index === currentResultIndex ? 'primary.main' : 'divider',\r\n backgroundColor: 'background.paper',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s ease',\r\n boxShadow: (theme) => theme.palette.mode === 'dark'\r\n ? '0 1px 3px rgba(0, 0, 0, 0.3)'\r\n : '0 1px 3px rgba(0, 0, 0, 0.05)',\r\n '&:hover': {\r\n borderColor: 'primary.main',\r\n boxShadow: (theme) => theme.palette.mode === 'dark'\r\n ? '0 2px 8px rgba(255, 255, 255, 0.15)'\r\n : '0 2px 8px rgba(0, 0, 0, 0.1)',\r\n transform: 'translateY(-1px)'\r\n }\r\n }}\r\n >\r\n <Typography\r\n variant=\"body2\"\r\n className=\"search-result-text\"\r\n sx={{\r\n fontSize: '0.875rem',\r\n lineHeight: 1.6,\r\n color: result.index === currentResultIndex ? 'text.primary' : 'text.secondary'\r\n }}\r\n >\r\n {highlightText(result.context, searchTerm)}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n TextField,\r\n Button,\r\n Typography,\r\n InputAdornment,\r\n Box,\r\n Alert,\r\n IconButton,\r\n CircularProgress\r\n} from '@mui/material';\r\nimport LockIcon from '@mui/icons-material/Lock';\r\nimport VisibilityIcon from '@mui/icons-material/Visibility';\r\nimport VisibilityOffIcon from '@mui/icons-material/VisibilityOff';\r\n\r\ninterface PasswordDialogProps {\r\n open: boolean;\r\n fileName?: string;\r\n onSubmit: (password: string) => void;\r\n onCancel: () => void;\r\n error?: string;\r\n isLoading?: boolean;\r\n}\r\n\r\nexport const PasswordDialog: React.FC<PasswordDialogProps> = ({\r\n open,\r\n fileName,\r\n onSubmit,\r\n onCancel,\r\n error,\r\n isLoading = false\r\n}) => {\r\n const [password, setPassword] = useState('');\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n // Reset password when dialog opens or when error appears (wrong password)\r\n useEffect(() => {\r\n if (open && !isLoading) {\r\n // Only reset if opening fresh or after error (not while loading)\r\n if (error) {\r\n setPassword(''); // Clear password after wrong attempt\r\n }\r\n }\r\n }, [open, error, isLoading]);\r\n\r\n // Reset when dialog first opens\r\n useEffect(() => {\r\n if (open) {\r\n setShowPassword(false);\r\n if (!error) {\r\n setPassword('');\r\n }\r\n }\r\n }, [open]);\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (password.trim() && !isLoading) {\r\n onSubmit(password);\r\n }\r\n };\r\n\r\n const handleTogglePasswordVisibility = () => {\r\n setShowPassword(!showPassword);\r\n };\r\n\r\n const handleKeyPress = (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter' && password.trim() && !isLoading) {\r\n handleSubmit(e as any);\r\n }\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={open}\r\n disableEscapeKeyDown\r\n onClose={(event, reason) => {\r\n // Prevent closing on backdrop click\r\n if (reason === 'backdropClick') return;\r\n }}\r\n maxWidth=\"sm\"\r\n fullWidth\r\n slotProps={{\r\n backdrop: {\r\n sx: {\r\n backdropFilter: 'blur(8px)',\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n }\r\n }\r\n }}\r\n PaperProps={{\r\n sx: {\r\n borderRadius: 2\r\n }\r\n }}\r\n >\r\n <DialogTitle sx={{ pb: 1 }}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>\r\n <Box\r\n sx={{\r\n width: 40,\r\n height: 40,\r\n borderRadius: '50%',\r\n backgroundColor: 'primary.light',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n opacity: 0.9\r\n }}\r\n >\r\n <LockIcon sx={{ color: 'white', fontSize: 20 }} />\r\n </Box>\r\n <Typography variant=\"h6\" component=\"div\" sx={{ fontWeight: 600 }}>\r\n Password Protected\r\n </Typography>\r\n </Box>\r\n </DialogTitle>\r\n\r\n <DialogContent sx={{ pt: 2 }}>\r\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', mb: 3 }}>\r\n This PDF is password protected. Please enter the password to view{' '}\r\n {fileName && <strong>\"{fileName}\"</strong>}\r\n </Typography>\r\n\r\n {error && (\r\n <Alert severity=\"error\" sx={{ mb: 2 }}>\r\n {error}\r\n </Alert>\r\n )}\r\n\r\n <form onSubmit={handleSubmit}>\r\n <TextField\r\n fullWidth\r\n autoFocus\r\n type={showPassword ? 'text' : 'password'}\r\n label=\"Password\"\r\n placeholder=\"Enter password\"\r\n value={password}\r\n onChange={(e) => setPassword(e.target.value)}\r\n onKeyPress={handleKeyPress}\r\n error={Boolean(error)}\r\n disabled={isLoading}\r\n InputProps={{\r\n endAdornment: (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n onClick={handleTogglePasswordVisibility}\r\n edge=\"end\"\r\n size=\"small\"\r\n aria-label={showPassword ? 'Hide password' : 'Show password'}\r\n disabled={isLoading}\r\n >\r\n {showPassword ? <VisibilityOffIcon /> : <VisibilityIcon />}\r\n </IconButton>\r\n </InputAdornment>\r\n )\r\n }}\r\n sx={{\r\n '& .MuiOutlinedInput-root': {\r\n borderRadius: 2\r\n }\r\n }}\r\n />\r\n </form>\r\n </DialogContent>\r\n\r\n <DialogActions sx={{ px: 3, pb: 3, pt: 2 }}>\r\n <Button\r\n onClick={handleSubmit}\r\n variant=\"contained\"\r\n disabled={!password.trim() || isLoading}\r\n sx={{\r\n borderRadius: 2,\r\n textTransform: 'none',\r\n px: 3,\r\n boxShadow: 2,\r\n minWidth: 120\r\n }}\r\n >\r\n {isLoading ? (\r\n <>\r\n <CircularProgress size={16} color=\"inherit\" sx={{ mr: 1 }} />\r\n Verifying...\r\n </>\r\n ) : (\r\n 'Unlock PDF'\r\n )}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};"],"mappings":";;;;;;;;;;;;;AAAA;AAAA,EACE;AAAA,EACA,aAAAA;AAAA,EACA;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACRP,OAAO,WAAW;AAClB,SAAS,aAAa,+BAA+B;AAyGjD;AAtGJ,IAAM,oBAAyB;AAsFxB,IAAM,kBAAkB,MAAM,KAA2B,CAAC;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,yBAAyB,2BAA2B,CAAC;AAAA,MACrD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ,CAAC;AAED,gBAAgB,cAAc;;;AC5H9B,OAAOC,UAAS,UAAU,QAAQ,iBAAiB;AACnD,SAAS,eAAe;AACxB,OAAO,mBAAmB;AAC1B,OAAO,kBAAkB;AACzB,OAAO,qBAAqB;AAC5B,OAAO,sBAAsB;AAC7B,OAAO,gBAAgB;AACvB,OAAO,aAAa;AACpB,OAAO,mBAAmB;AAC1B,OAAO,qBAAqB;AAC5B,OAAO,cAAc;AACrB,OAAO,gBAAgB;AACvB,OAAO,oBAAoB;AAC3B,OAAO,kBAAkB;AACzB,OAAO,eAAe;AACtB,OAAO,cAAc;AACrB,OAAO,qBAAqB;AAC5B,OAAO,oBAAoB;AAC3B,OAAO,qBAAqB;AAC5B,OAAO,iBAAiB;AACxB,SAAS,kBAAkB;AAC3B,OAAO,mBAAmB;AAE1B,OAAO,cAAc;AAErB,OAAO,kBAAkB;AACzB,OAAO,2BAA2B;AAClC,OAAO,kBAAkB;AAEzB,OAAO,kBAAkB;AAEzB,OAAO,qBAAqB;AAwNN,SA6CR,UA7CQ,OAAAC,MAgB4B,YAhB5B;AA5If,IAAM,aAAaD,OAAM;AAAA,EAC9B,CAAC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB,8BAA8B;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAM;AACJ,UAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,KAAK;AAC5D,UAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAAS,KAAK;AAClE,UAAM,CAAC,sBAAsB,uBAAuB,IAAI,SAAS,KAAK;AACtE,UAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAC1D,UAAM,eAAe,OAAuB,IAAI;AAChD,UAAM,kBAAkB,OAAuB,IAAI;AACnD,UAAM,oBAAoB,OAAuB,IAAI;AACrD,UAAM,cAAc,OAAuB,IAAI;AAG/C,cAAU,MAAM;AACd,YAAM,qBAAqB,CAAC,UAAsB;AAChD,YAAI,aAAa,WAAW,CAAC,aAAa,QAAQ,SAAS,MAAM,MAAc,GAAG;AAChF,6BAAmB,KAAK;AAAA,QAC1B;AACA,YAAI,gBAAgB,WAAW,CAAC,gBAAgB,QAAQ,SAAS,MAAM,MAAc,GAAG;AACtF,gCAAsB,KAAK;AAAA,QAC7B;AACA,YAAI,kBAAkB,WAAW,CAAC,kBAAkB,QAAQ,SAAS,MAAM,MAAc,GAAG;AAC1F,kCAAwB,KAAK;AAAA,QAC/B;AACA,YAAI,YAAY,WAAW,CAAC,YAAY,QAAQ,SAAS,MAAM,MAAc,GAAG;AAC9E,4BAAkB,KAAK;AAAA,QACzB;AAAA,MACF;AACA,eAAS,iBAAiB,aAAa,kBAAkB;AACzD,aAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,IAC3E,GAAG,CAAC,CAAC;AAEL,UAAM,6BAA6B,MAAM;AACvC,yBAAmB,KAAK;AACxB,+BAAyB;AAAA,IAC3B;AAEA,UAAM,gCAAgC,MAAM;AAC1C,yBAAmB,KAAK;AACxB,kCAA4B;AAAA,IAC9B;AAEA,UAAM,gCAAgC,MAAM;AAC1C,4BAAsB,KAAK;AAC3B,kCAA4B;AAAA,IAC9B;AAEA,UAAM,mCAAmC,MAAM;AAC7C,4BAAsB,KAAK;AAC3B,qCAA+B;AAAA,IACjC;AAEA,UAAM,CAAC,YAAY,aAAa,IAAI,SAAyC,MAAM;AAEnF,WACE,qBAAC,SAAI,WAAU,gCAEb;AAAA,2BAAC,SAAI,WAAU,sBAEb;AAAA,6BAAC,SAAI,WAAU,gBAEZ;AAAA,gCACC,qBAAC,SAAI,WAAU,mBACb;AAAA,4BAAAC,KAAC,WAAQ,OAAM,cACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,UAAU,eAAe;AAAA,gBAEzB,0BAAAA,KAAC,iBAAc,UAAS,SAAQ;AAAA;AAAA,YAClC,GACF,GACF;AAAA,YACA,gBAAAA,KAAC,WAAQ,OAAM,iBACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,UAAU,eAAe;AAAA,gBAEzB,0BAAAA,KAAC,mBAAgB,UAAS,SAAQ;AAAA;AAAA,YACpC,GACF,GACF;AAAA,YACA,qBAAC,UAAK,WAAU,aAAY,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,QAAQ,SAAS,UAAU,QAAQ,YAAY,IAAI,GAC5H;AAAA;AAAA,cAAY;AAAA,cAAE,iBAAiB,qBAAC,UAAK,OAAO,EAAE,OAAO,WAAW,YAAY,MAAM,GAAG;AAAA;AAAA,gBAAG,cAAc;AAAA,iBAAM;AAAA,eAC/G;AAAA,YACA,gBAAAA,KAAC,WAAQ,OAAM,aACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,UAAU,eAAe;AAAA,gBAEzB,0BAAAA,KAAC,oBAAiB,UAAS,SAAQ;AAAA;AAAA,YACrC,GACF,GACF;AAAA,YACA,gBAAAA,KAAC,WAAQ,OAAM,aACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,UAAU,eAAe;AAAA,gBAEzB,0BAAAA,KAAC,gBAAa,UAAS,SAAQ;AAAA;AAAA,YACjC,GACF,GACF;AAAA,aACF;AAAA,UAID,oBACC,iCACE;AAAA,4BAAAA,KAAC,SAAI,WAAU,qBAAoB;AAAA,YACnC,qBAAC,SAAI,WAAU,mBACb;AAAA,8BAAAA,KAAC,WAAQ,OAAM,YACb,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,SAAS;AAAA,kBAET,0BAAAA,KAAC,cAAW,UAAS,SAAQ;AAAA;AAAA,cAC/B,GACF;AAAA,cACA,qBAAC,UAAK,WAAU,gBAAgB;AAAA;AAAA,gBAAK;AAAA,iBAAC;AAAA,cACtC,gBAAAA,KAAC,WAAQ,OAAM,WACb,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,SAAS;AAAA,kBAET,0BAAAA,KAAC,WAAQ,UAAS,SAAQ;AAAA;AAAA,cAC5B,GACF;AAAA,eACF;AAAA,aACF;AAAA,WAIA,oBAAoB,iBACpB,iCACE;AAAA,4BAAAA,KAAC,SAAI,WAAU,qBAAoB;AAAA,YACnC,gBAAAA,KAAC,SAAI,WAAU,mBACb,+BAAC,SAAI,WAAU,8BAA6B,KAAK,aAC/C;AAAA,8BAAAA,KAAC,WAAQ,OAAM,gBACb;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,0CAA0C,iBAAiB,0BAA0B,EAAE;AAAA,kBAClG,SAAS,MAAM,kBAAkB,CAAC,cAAc;AAAA,kBAEhD;AAAA,oCAAAA,KAAC,YAAS,UAAS,SAAQ;AAAA,oBAC3B,gBAAAA,KAAC,yBAAsB,UAAS,SAAQ,OAAO,EAAE,YAAY,GAAG,GAAG;AAAA;AAAA;AAAA,cACrE,GACF;AAAA,cACC,kBACC,qBAAC,SAAI,WAAU,yBAAwB,OAAO,EAAE,OAAO,QAAQ,GAG7D;AAAA,gCAAAA,KAAC,SAAI,WAAU,2BAA0B,yBAAW;AAAA,gBACpD,qBAAC,YAAO,WAAU,sDAAqD,SAAS,MAAM,kBAAkB,KAAK,GAC3G;AAAA,kCAAAA,KAAC,gBAAa,UAAS,SAAQ;AAAA,kBAC/B,gBAAAA,KAAC,UAAK,yBAAW;AAAA,mBACnB;AAAA,gBAEA,gBAAAA,KAAC,SAAI,WAAU,4BAA2B;AAAA,gBAG1C,gBAAAA,KAAC,SAAI,WAAU,2BAA0B,2BAAa;AAAA,gBACtD,qBAAC,YAAO,WAAU,sDAAqD,SAAS,MAAM,kBAAkB,KAAK,GAC3G;AAAA,kCAAAA,KAAC,gBAAa,UAAS,SAAQ;AAAA,kBAC/B,gBAAAA,KAAC,UAAK,sBAAQ;AAAA,mBAChB;AAAA,gBAEA,gBAAAA,KAAC,SAAI,WAAU,4BAA2B;AAAA,gBAG1C,qBAAC,YAAO,WAAU,yBAAwB,SAAS,MAAM;AAAE,oCAAkB,KAAK;AAAG,iCAAe;AAAA,gBAAG,GACrG;AAAA,kCAAAA,KAAC,mBAAgB,UAAS,SAAQ;AAAA,kBAClC,gBAAAA,KAAC,UAAK,0BAAY;AAAA,mBACpB;AAAA,gBACA,qBAAC,YAAO,WAAU,yBAAwB,SAAS,MAAM;AAAE,oCAAkB,KAAK;AAAG,gCAAc;AAAA,gBAAG,GACpG;AAAA,kCAAAA,KAAC,iBAAc,UAAS,SAAQ;AAAA,kBAChC,gBAAAA,KAAC,UAAK,yBAAW;AAAA,mBACnB;AAAA,gBAEA,gBAAAA,KAAC,SAAI,WAAU,4BAA2B;AAAA,gBAGzC,gBACC,iCACE;AAAA,kCAAAA,KAAC,SAAI,WAAU,2BAA0B,2BAAa;AAAA,kBACtD;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS,MAAM;AACb,0CAAkB,KAAK;AACvB,wCAAgB;AAAA,sBAClB;AAAA,sBACA,UAAU;AAAA,sBAEV;AAAA,wCAAAA,KAAC,mBAAgB,UAAS,SAAQ;AAAA,wBAClC,gBAAAA,KAAC,UAAK,8BAAgB;AAAA;AAAA;AAAA,kBACxB;AAAA,kBACA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS,MAAM;AACb,0CAAkB,KAAK;AACvB,uCAAe;AAAA,sBACjB;AAAA,sBACA,UAAU;AAAA,sBAEV;AAAA,wCAAAA,KAAC,kBAAe,UAAS,SAAQ;AAAA,wBACjC,gBAAAA,KAAC,UAAK,sCAAwB;AAAA;AAAA;AAAA,kBAChC;AAAA,mBACF;AAAA,gBAGF,gBAAAA,KAAC,SAAI,WAAU,4BAA2B;AAAA,gBAE1C;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,SAAS,MAAM;AACb,wCAAkB,KAAK;AACvB,yCAAmB;AAAA,oBACrB;AAAA,oBAEA;AAAA,sCAAAA,KAAC,kBAAe,UAAS,SAAQ;AAAA,sBACjC,gBAAAA,KAAC,UAAK,wBAAU;AAAA;AAAA;AAAA,gBAClB;AAAA,iBACF;AAAA,eAEJ,GACF;AAAA,aACF;AAAA,UAID,cACC,iCACE;AAAA,4BAAAA,KAAC,SAAI,WAAU,qBAAoB;AAAA,YACnC,gBAAAA,KAAC,SAAI,WAAU,mBACb,0BAAAA,KAAC,WAAQ,OAAM,UACb,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,kBAAkB,gBAAgB,0BAA0B,EAAE;AAAA,gBACzE,SAAS;AAAA,gBAET,0BAAAA,KAAC,cAAW,UAAS,SAAQ;AAAA;AAAA,YAC/B,GACF,GACF;AAAA,aACF;AAAA,WAEJ;AAAA,QAGA,qBAAC,SAAI,WAAU,kBACb;AAAA,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,eAAe,eAAe,SAAS,uBAAuB,EAAE;AAAA,cAC3E,SAAS,MAAM,cAAc,MAAM;AAAA,cACpC;AAAA;AAAA,UAED;AAAA,UACC,gBACC;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,eAAe,eAAe,aAAa,uBAAuB,EAAE;AAAA,cAC/E,SAAS,MAAM,CAAC,oBAAoB,cAAc,UAAU;AAAA,cAC5D,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,SAAS,mBAAmB,MAAM;AAAA,gBAClC,QAAQ,mBAAmB,gBAAgB;AAAA,cAC7C;AAAA,cACD;AAAA;AAAA,gBAEE,yBACC,gBAAAA,KAAC,UAAK,OAAO;AAAA,kBACX,UAAU;AAAA,kBACV,KAAK;AAAA,kBACL,OAAO;AAAA,kBACP,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,iBAAiB;AAAA,kBACjB,cAAc;AAAA,gBAChB,GAAG;AAAA;AAAA;AAAA,UAEP;AAAA,WAQJ;AAAA,QAGA,gBAAAA,KAAC,SAAI,WAAU,iBAEX,oCAAyB,gBAAgB,aAAa,gBAAgB,kBAAkB,YAAY,gBACpG,iCACE;AAAA,0BAAAA,KAAC,SAAI,WAAU,qBAAoB;AAAA,UACnC,qBAAC,SAAI,WAAU,mBAMZ;AAAA,4BACC,gBAAAA,KAAC,SAAI,WAAU,8BAA6B,KAAK,iBAC7C,kCAAwB;AAAA;AAAA,cAExB,iCACE;AAAA,gCAAAA,KAAC,WAAQ,OAAM,YACb,0BAAAA,KAAC,UACC;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAW,0CAA0C,qBAAqB,0BAA0B,EAAE;AAAA,oBACtG,SAAS,MAAM,sBAAsB,CAAC,kBAAkB;AAAA,oBACxD,UAAU;AAAA,oBAEV;AAAA,sCAAAA,KAAC,gBAAa,UAAS,SAAQ;AAAA,sBAC/B,gBAAAA,KAAC,yBAAsB,UAAS,SAAQ,OAAO,EAAE,YAAY,GAAG,GAAG;AAAA;AAAA;AAAA,gBACrE,GACF,GACF;AAAA,gBACC,sBACC,qBAAC,SAAI,WAAU,qDACb;AAAA,kCAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS;AAAA,sBAET,0BAAAA,KAAC,UAAK,oCAAsB;AAAA;AAAA,kBAC9B;AAAA,kBACA,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS;AAAA,sBAET,0BAAAA,KAAC,UAAK,uCAAyB;AAAA;AAAA,kBACjC;AAAA,mBACF;AAAA,iBAEJ;AAAA;AAAA;AAAA,eAGC,wBAAwB,gCACvB,gBAAAA,KAAC,WAAQ,OAAM,YACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,SAAS,uBAAuB,mCAAmC;AAAA,kBACnE,UAAU;AAAA,kBAEV,0BAAAA,KAAC,gBAAa,UAAS,SAAQ;AAAA;AAAA,cACjC,GACF,GACF;AAAA,eAGN;AAAA,YAGD,aACC,gBAAAA,KAAC,SAAI,WAAU,8BAA6B,KAAK,cAC7C,+BAAqB;AAAA;AAAA,cAErB,iCACE;AAAA,gCAAAA,KAAC,WAAQ,OAAM,SACb,0BAAAA,KAAC,UACC;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAW,0CAA0C,kBAAkB,0BAA0B,EAAE;AAAA,oBACnG,SAAS,MAAM,mBAAmB,CAAC,eAAe;AAAA,oBAClD,UAAU;AAAA,oBAEV;AAAA,sCAAAA,KAAC,aAAU,UAAS,SAAQ;AAAA,sBAC5B,gBAAAA,KAAC,yBAAsB,UAAS,SAAQ,OAAO,EAAE,YAAY,GAAG,GAAG;AAAA;AAAA;AAAA,gBACrE,GACF,GACF;AAAA,gBACC,mBACC,qBAAC,SAAI,WAAU,qDACb;AAAA,kCAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS;AAAA,sBAET,0BAAAA,KAAC,UAAK,iCAAmB;AAAA;AAAA,kBAC3B;AAAA,kBACA,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS;AAAA,sBAET,0BAAAA,KAAC,UAAK,oCAAsB;AAAA;AAAA,kBAC9B;AAAA,mBACF;AAAA,iBAEJ;AAAA;AAAA;AAAA,eAGC,qBAAqB,6BACpB,gBAAAA,KAAC,WAAQ,OAAM,SACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,SAAS,oBAAoB,gCAAgC;AAAA,kBAC7D,UAAU;AAAA,kBAEV,0BAAAA,KAAC,aAAU,UAAS,SAAQ;AAAA;AAAA,cAC9B,GACF,GACF;AAAA,eAGN;AAAA,YAGD,gBACC,gBAAAA,KAAC,WAAQ,OAAM,YACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,UAAU;AAAA,gBAEV,0BAAAA,KAAC,mBAAgB,UAAS,SAAQ;AAAA;AAAA,YACpC,GACF,GACF;AAAA,YAGD,kBACC,gBAAAA,KAAC,WAAQ,OAAM,cACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,UAAU;AAAA,gBAEV,0BAAAA,KAAC,YAAS,UAAS,SAAQ;AAAA;AAAA,YAC7B,GACF,GACF;AAAA,YAGD,YACC,gBAAAA,KAAC,WAAQ,OAAM,QACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,UAAU;AAAA,gBAEV,0BAAAA,KAAC,cAAW,UAAS,SAAQ;AAAA;AAAA,YAC/B,GACF,GACF;AAAA,YAGD,eACC,gBAAAA,KAAC,WAAQ,OAAM,mBACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,UAAU;AAAA,gBAEV,0BAAAA,KAAC,eAAY,UAAS,SAAQ;AAAA;AAAA,YAChC,GACF,GACF;AAAA,aAEJ;AAAA,WACF,GAEJ;AAAA,SACF;AAAA,MAGC,eAAe,cAAc,mBAC5B,qBAAC,SAAI,WAAU,gCACb;AAAA,wBAAAA,KAAC,WAAQ,OAAM,aACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,kBAAkB,sBAAsB,0BAA0B,EAAE;AAAA,YAC/E,SAAS;AAAA,YACT,UAAU;AAAA,YAEV,0BAAAA,KAAC,iBAAc,UAAS,SAAQ;AAAA;AAAA,QAClC,GACF,GACF;AAAA,QACA,gBAAAA,KAAC,WAAQ,OAAM,SACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,kBAAkB,gBAAgB,0BAA0B,EAAE;AAAA,YACzE,SAAS;AAAA,YACT,UAAU;AAAA,YAEV,0BAAAA,KAAC,gBAAa,UAAS,SAAQ;AAAA;AAAA,QACjC,GACF,GACF;AAAA,QACA,gBAAAA,KAAC,WAAQ,OAAM,aACb,0BAAAA,KAAC,UACC,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS;AAAA,YACT,UAAU;AAAA,YAEV,0BAAAA,KAAC,YAAS,UAAS,SAAQ;AAAA;AAAA,QAC7B,GACF,GACF;AAAA,QAGC,yBAAyB,uBAAuB,SAAS,qBACxD,iCACE;AAAA,0BAAAA,KAAC,SAAI,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAI,iBAAiB,WAAW,QAAQ,QAAQ,GAAG;AAAA,UACnF,gBAAAA,KAAC,WAAQ,OAAM,oBACb,0BAAAA,KAAC,UACC;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS;AAAA,cACT,UAAU;AAAA,cACV,OAAO;AAAA,gBACL,OAAO,wBAAwB,YAAY;AAAA,gBAC3C,SAAS;AAAA,gBACT,QAAQ,wBAAwB,sBAAsB;AAAA,gBACtD,cAAc;AAAA,gBACd,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,KAAK;AAAA,gBACL,iBAAiB,wBAAwB,YAAY;AAAA,gBACrD,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,OAAO;AAAA,gBACP,QAAQ,sBAAsB,gBAAgB;AAAA,cAChD;AAAA,cAEC;AAAA,sCACC,gBAAAA,KAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,OAAO,EAAE,WAAW,0BAA0B,GAC5F,0BAAAA,KAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK,QAAO,gBAAe,aAAY,KAAI,MAAK,QAAO,iBAAgB,QAAO,kBAAiB,MAAK,GAChI,IAEA,qBAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SACrI;AAAA,kCAAAA,KAAC,UAAK,GAAE,mEAAkE;AAAA,kBAC1E,gBAAAA,KAAC,cAAS,QAAO,yBAAwB;AAAA,kBACzC,gBAAAA,KAAC,cAAS,QAAO,gBAAe;AAAA,mBAClC;AAAA,gBAEF,gBAAAA,KAAC,UAAM,gCAAsB,cAAc,QAAO;AAAA;AAAA;AAAA,UACpD,GACF,GACF;AAAA,WACF;AAAA,SAEJ;AAAA,MAID,eAAe,YAAY,mBAC1B,gBAAAA,KAAC,SAAI,WAAU,gCACb,0BAAAA,KAAC,WAAQ,OAAM,eACb,0BAAAA,KAAC,YAAO,WAAU,kBAChB,0BAAAA,KAAC,mBAAgB,UAAS,SAAQ,GACpC,GACF,GACF;AAAA,OAEJ;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;;;AC1uBzB,OAAOC,YAAW;AAUd,SACE,OAAAC,MADF,QAAAC,aAAA;AAFG,IAAM,YAAYC,OAAM,KAAqB,CAAC,EAAE,UAAU,cAAc,MAAM;AACnF,SACE,gBAAAD,MAAC,SAAI,WAAU,qBACb;AAAA,oBAAAD,KAAC,oBAAS,KAAK,eAAe,MAAM,IAAI;AAAA,IACxC,gBAAAA,KAAC,SAAI,WAAU,oBAAmB,OAAO,UACtC,oBACH;AAAA,KACF;AAEJ,CAAC;AAED,UAAU,cAAc;;;ACnBxB,SAAgB,YAAAG,WAAU,iBAAiB,aAAAC,YAAW,UAAAC,eAAc;AACpE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAOC,iBAAgB;AACvB,OAAO,eAAe;AACtB,OAAO,yBAAyB;AAChC,OAAOC,4BAA2B;AAClC,OAAO,eAAe;AACtB,OAAO,oBAAoB;AAsLjB,gBAAAC,MAsCF,QAAAC,aAtCE;AA9JH,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,cAAc;AAAA,EACd,qBAAqB;AACvB,MAAM;AACJ,QAAM,CAAC,YAAY,aAAa,IAAIN,UAAS,iBAAiB,EAAE;AAChE,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AACpD,QAAM,aAAaE,QAAuB,IAAI;AAG9C,EAAAD,WAAU,MAAM;AACd,QAAI,iBAAiB,kBAAkB,YAAY;AACjD,oBAAc,aAAa;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,aAAa,CAAC;AAGlB,kBAAgB,MAAM;AACpB,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC,QAAS;AAEd,UAAM,kBAAkB,CAAC,MAAkB;AACzC,YAAM,OAAO,QAAQ,sBAAsB;AAC3C,YAAM,oBAAoB,KAAK,QAAQ,EAAE;AACzC,YAAM,qBAAqB,KAAK,SAAS,EAAE;AAE3C,UAAI,qBAAqB,MAAM,sBAAsB,IAAI;AACvD,gBAAQ,UAAU,IAAI,iBAAiB;AAAA,MACzC,OAAO;AACL,gBAAQ,UAAU,OAAO,iBAAiB;AAAA,MAC5C;AAAA,IACF;AAEA,UAAM,mBAAmB,MAAM,QAAQ,UAAU,OAAO,iBAAiB;AAEzE,YAAQ,iBAAiB,aAAa,eAAe;AACrD,YAAQ,iBAAiB,cAAc,gBAAgB;AAEvD,WAAO,MAAM;AACX,cAAQ,oBAAoB,aAAa,eAAe;AACxD,cAAQ,oBAAoB,cAAc,gBAAgB;AAAA,IAC5D;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,kBAAgB,MAAM;AACpB,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,KAAK;AACX,UAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCpB,aAAS,KAAK,YAAY,KAAK;AAC/B,WAAO,MAAM;AACX,YAAM,KAAK,SAAS,eAAe,0BAA0B;AAC7D,UAAI,GAAI,IAAG,OAAO;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,kBAAgB,MAAM;AACpB,kBAAc,iBAAiB,EAAE;AACjC,QAAI,iBAAiB,cAAc,SAAS,GAAG;AAC7C,qBAAe,IAAI;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,eAAe,aAAa,CAAC;AAEjC,QAAM,qBAAqB,CAAC,MAAwB;AAClD,QAAI,EAAG,GAAE,eAAe;AAExB,QAAI,WAAW,KAAK,GAAG;AACrB,qBAAe,IAAI;AACnB,eAAS,WAAW,KAAK,CAAC;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,qBAAqB,CAAC,MAA2C;AACrE,UAAM,QAAQ,EAAE,OAAO;AACvB,kBAAc,KAAK;AAEnB,QAAI,CAAC,MAAM,KAAK,GAAG;AACjB,qBAAe,KAAK;AACpB,eAAS,EAAE;AAAA,IACb;AAAA,EACF;AAEA,QAAM,oBAAoB,MAAM;AAC9B,kBAAc,EAAE;AAChB,mBAAe,KAAK;AACpB,aAAS,EAAE;AAAA,EACb;AAGA,QAAM,gBAAgB,cAAc,OAAO,CAAC,KAAK,WAAW;AAC1D,QAAI,CAAC,IAAI,OAAO,UAAU,GAAG;AAC3B,UAAI,OAAO,UAAU,IAAI,CAAC;AAAA,IAC5B;AACA,QAAI,OAAO,UAAU,EAAE,KAAK,MAAM;AAClC,WAAO;AAAA,EACT,GAAG,CAAC,CAAmC;AAEvC,QAAM,gBAAgB,CAAC,MAAW,YAAoB;AACpD,QAAI,CAAC,QAAS,QAAO;AAErB,UAAM,aAAa,OAAO,SAAS,WAAW,OAAO,OAAO,QAAQ,EAAE;AACtE,QAAI,CAAC,WAAY,QAAO;AAExB,QAAI;AACF,YAAM,iBAAiB,QAAQ,QAAQ,uBAAuB,MAAM;AACpE,YAAM,QAAQ,IAAI,OAAO,IAAI,cAAc,KAAK,IAAI;AACpD,YAAM,QAAQ,WAAW,MAAM,KAAK;AAEpC,aAAO,MAAM;AAAA,QAAI,CAAC,MAAM,UACtB,MAAM,KAAK,IAAI,IACb,gBAAAI;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YAEV,IAAI;AAAA,cACF,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ;AAAA,YAEC;AAAA;AAAA,UAPI;AAAA,QAQP,IAEA;AAAA,MAEJ;AAAA,IACF,SAAS,OAAO;AAEd,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,CAAC,OAAQ,QAAO;AAEpB,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,IAAI;AAAA,QACF,SAAS;AAAA,QACT,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,MAGA;AAAA,wBAAAA,MAAC,OAAI,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,iBAAiB,qBAAqB,GAC/D;AAAA,0BAAAA,MAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,iBAAiB,IAAI,EAAE,GACvF;AAAA,4BAAAD,KAAC,cAAW,SAAQ,MAAK,IAAI,EAAE,UAAU,YAAY,YAAY,KAAK,OAAO,eAAe,GAAG,oBAE/F;AAAA,YACA,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,IAAI;AAAA,kBACF,OAAO;AAAA,kBACP,SAAS;AAAA,gBACX;AAAA,gBAEA,0BAAAA,KAAC,aAAU,UAAS,SAAQ;AAAA;AAAA,YAC9B;AAAA,aACF;AAAA,UAGA,gBAAAA,KAAC,UAAK,UAAU,oBACd,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAS;AAAA,cACT,MAAK;AAAA,cACL,aAAY;AAAA,cACZ,OAAO;AAAA,cACP,UAAU;AAAA,cACV,cAAa;AAAA,cACb,YAAY;AAAA,gBACV,gBACE,gBAAAA,KAAC,kBAAe,UAAS,SACvB,0BAAAA,KAACF,aAAA,EAAW,IAAI,EAAE,OAAO,iBAAiB,UAAU,GAAG,GAAG,GAC5D;AAAA,gBAEF,cAAc,cACZ,gBAAAE,KAAC,kBAAe,UAAS,OACvB,0BAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS;AAAA,oBACT,IAAI;AAAA,sBACF,OAAO;AAAA,sBACP,SAAS;AAAA,sBACT,WAAW;AAAA,wBACT,iBAAiB;AAAA,sBACnB;AAAA,oBACF;AAAA,oBAEA,0BAAAA,KAAC,aAAU,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,gBACnC,GACF;AAAA,cAEJ;AAAA,cACA,IAAI;AAAA,gBACF,4BAA4B;AAAA,kBAC1B,UAAU;AAAA,kBACV,iBAAiB;AAAA,kBACjB,cAAc;AAAA,kBACd,cAAc;AAAA,oBACZ,aAAa;AAAA,kBACf;AAAA,kBACA,0BAA0B;AAAA,oBACxB,aAAa;AAAA,oBACb,aAAa;AAAA,kBACf;AAAA,gBACF;AAAA,gBACA,yBAAyB;AAAA,kBACvB,SAAS;AAAA,gBACX;AAAA,cACF;AAAA;AAAA,UACF,GACF;AAAA,UAGC,eAAe,KACd,gBAAAC;AAAA,YAAC;AAAA;AAAA,cACC,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,gBAAgB;AAAA,gBAChB,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,WAAW;AAAA,gBACX,aAAa;AAAA,cACf;AAAA,cAEA;AAAA,gCAAAA,MAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,kBAAkB,UAAU,YAAY,YAAY,IAAI,GAC9F;AAAA,uCAAqB;AAAA,kBAAE;AAAA,kBAAK;AAAA,kBAAa;AAAA,mBAC5C;AAAA,gBACA,gBAAAA,MAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GACzD;AAAA,kCAAAD;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAAS;AAAA,sBACT,UAAU,sBAAsB;AAAA,sBAChC,IAAI;AAAA,wBACF,OAAO,sBAAsB,IAAI,kBAAkB;AAAA,wBACnD,SAAS;AAAA,wBACT,cAAc;AAAA,wBACd,QAAQ;AAAA,wBACR,aAAa,sBAAsB,IAAI,YAAY;AAAA,sBACrD;AAAA,sBAEA,0BAAAA,KAAC,uBAAoB,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,kBAC7C;AAAA,kBACA,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAAS;AAAA,sBACT,UAAU,sBAAsB,eAAe;AAAA,sBAC/C,IAAI;AAAA,wBACF,OAAO,sBAAsB,eAAe,IAAI,kBAAkB;AAAA,wBAClE,SAAS;AAAA,wBACT,cAAc;AAAA,wBACd,QAAQ;AAAA,wBACR,aAAa,sBAAsB,eAAe,IAAI,YAAY;AAAA,sBACpE;AAAA,sBAEA,0BAAAA,KAACD,wBAAA,EAAsB,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,kBAC/C;AAAA,mBACF;AAAA;AAAA;AAAA,UACF;AAAA,WAEJ;AAAA,QAEA,gBAAAC,KAAC,WAAQ;AAAA,QAGT,gBAAAC,MAAC,OAAI,KAAK,YAAY,WAAU,0BAAyB,IAAI;AAAA,UAC3D,MAAM;AAAA,UACN,UAAU;AAAA,UACV,iBAAiB;AAAA,QACnB,GACG;AAAA,WAAC,cAAc,CAAC,eACf,gBAAAA,MAAC,OAAI,IAAI,EAAE,GAAG,GAAG,WAAW,UAAU,IAAI,EAAE,GAC1C;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI;AAAA,kBACF,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,iBAAiB;AAAA,kBACjB,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,QAAQ;AAAA,kBACR,IAAI;AAAA,gBACN;AAAA,gBAEA,0BAAAA,KAACF,aAAA,EAAW,IAAI,EAAE,UAAU,IAAI,OAAO,gBAAgB,GAAG;AAAA;AAAA,YAC5D;AAAA,YACA,gBAAAE,KAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,gBAAgB,YAAY,KAAK,IAAI,EAAE,GAAG,gCAEnF;AAAA,YACA,gBAAAA,KAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,kBAAkB,YAAY,IAAI,GAAG,iEAE9E;AAAA,aACF;AAAA,UAGD,cAAc,CAAC,eAAe,CAAC,eAC9B,gBAAAC,MAAC,OAAI,IAAI,EAAE,GAAG,GAAG,WAAW,UAAU,IAAI,EAAE,GAC1C;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI;AAAA,kBACF,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,iBAAiB;AAAA,kBACjB,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,QAAQ;AAAA,kBACR,IAAI;AAAA,kBACJ,SAAS;AAAA,gBACX;AAAA,gBAEA,0BAAAA,KAAC,kBAAe,IAAI,EAAE,UAAU,IAAI,OAAO,eAAe,GAAG;AAAA;AAAA,YAC/D;AAAA,YACA,gBAAAA,KAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,gBAAgB,YAAY,KAAK,IAAI,EAAE,GAAG,6BAEnF;AAAA,YACA,gBAAAA,KAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,kBAAkB,IAAI,GAAG,YAAY,IAAI,GAAG,iCAErF;AAAA,YACA,gBAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,IAAI;AAAA,kBACF,OAAO;AAAA,kBACP,YAAY;AAAA,kBACZ,iBAAiB,CAAC,UAAU,MAAM,QAAQ,SAAS,SAC/C,8BACA;AAAA,kBACJ,SAAS;AAAA,kBACT,cAAc;AAAA,kBACd,SAAS;AAAA,kBACT,SAAS;AAAA,gBACX;AAAA,gBACD;AAAA;AAAA,kBACG;AAAA,kBAAW;AAAA;AAAA;AAAA,YACf;AAAA,aACF;AAAA,UAGD,eACC,gBAAAA,MAAC,OAAI,IAAI,EAAE,GAAG,GAAG,WAAW,UAAU,IAAI,EAAE,GAC1C;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,QAAQ;AAAA,kBACR,IAAI;AAAA,gBACN;AAAA,gBAEA,0BAAAA,KAAC,oBAAiB,MAAM,IAAI,WAAW,GAAG;AAAA;AAAA,YAC5C;AAAA,YACA,gBAAAA,KAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,gBAAgB,YAAY,KAAK,IAAI,EAAE,GAAG,0BAEnF;AAAA,YACA,gBAAAC,MAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,kBAAkB,YAAY,IAAI,GAAG;AAAA;AAAA,cACtD;AAAA,cAAW;AAAA,eACnC;AAAA,aACF;AAAA,UAGD,eAAe,iBAAiB,KAAK,CAAC,eACrC,gBAAAA,MAAC,OAAI,IAAI,EAAE,GAAG,GAAG,WAAW,UAAU,IAAI,EAAE,GAC1C;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI;AAAA,kBACF,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,iBAAiB,CAAC,UAAU,MAAM,QAAQ,SAAS,SAC/C,4BACA;AAAA,kBACJ,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,QAAQ;AAAA,kBACR,IAAI;AAAA,kBACJ,SAAS;AAAA,gBACX;AAAA,gBAEA,0BAAAA,KAACF,aAAA,EAAW,IAAI,EAAE,UAAU,IAAI,OAAO,eAAe,GAAG;AAAA;AAAA,YAC3D;AAAA,YACA,gBAAAE,KAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,gBAAgB,YAAY,KAAK,IAAI,EAAE,GAAG,8BAEnF;AAAA,YACA,gBAAAC,MAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,kBAAkB,YAAY,IAAI,GAAG;AAAA;AAAA,cACvD,gBAAAA,MAAC,YAAO;AAAA;AAAA,gBAAE;AAAA,gBAAW;AAAA,iBAAC;AAAA,eAC7C;AAAA,aACF;AAAA,UAGD,eAAe,KACd,gBAAAD,KAAC,OAAI,IAAI,EAAE,GAAG,EAAE,GACb,iBAAO,KAAK,aAAa,EACvB,KAAK,CAAC,GAAG,MAAM,SAAS,CAAC,IAAI,SAAS,CAAC,CAAC,EACxC,IAAI,CAAC,YAAY;AAChB,kBAAM,aAAa,SAAS,OAAO;AACnC,kBAAM,cAAc,cAAc,UAAU;AAE5C,mBACE,gBAAAC,MAAC,OAAqB,IAAI,EAAE,IAAI,EAAE,GAEhC;AAAA,8BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,IAAI;AAAA,oBACF,OAAO;AAAA,oBACP,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,eAAe;AAAA,oBACf,eAAe;AAAA,kBACjB;AAAA,kBACD;AAAA;AAAA,oBACO;AAAA;AAAA;AAAA,cACR;AAAA,cAGC,YAAY,IAAI,CAAC,QAAsB,UACtC,gBAAAD;AAAA,gBAAC;AAAA;AAAA,kBAEC,SAAS,MAAM,oBAAoB,OAAO,YAAY,OAAO,KAAK;AAAA,kBAClE,IAAI;AAAA,oBACF,GAAG;AAAA,oBACH,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,cAAc;AAAA,oBACd,QAAQ;AAAA,oBACR,aAAa,OAAO,UAAU,qBAAqB,iBAAiB;AAAA,oBACpE,iBAAiB;AAAA,oBACjB,QAAQ;AAAA,oBACR,YAAY;AAAA,oBACZ,WAAW,CAAC,UAAU,MAAM,QAAQ,SAAS,SACzC,iCACA;AAAA,oBACJ,WAAW;AAAA,sBACT,aAAa;AAAA,sBACb,WAAW,CAAC,UAAU,MAAM,QAAQ,SAAS,SACzC,wCACA;AAAA,sBACJ,WAAW;AAAA,oBACb;AAAA,kBACF;AAAA,kBAEA,0BAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,WAAU;AAAA,sBACV,IAAI;AAAA,wBACF,UAAU;AAAA,wBACV,YAAY;AAAA,wBACZ,OAAO,OAAO,UAAU,qBAAqB,iBAAiB;AAAA,sBAChE;AAAA,sBAEC,wBAAc,OAAO,SAAS,UAAU;AAAA;AAAA,kBAC3C;AAAA;AAAA,gBAlCK;AAAA,cAmCP,CACD;AAAA,iBAxDO,UAyDV;AAAA,UAEJ,CAAC,GACL;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC5iBA,SAAgB,YAAAE,WAAU,aAAAC,kBAAiB;AAC3C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,OAAAC;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EACA,oBAAAC;AAAA,OACK;AACP,OAAO,cAAc;AACrB,OAAO,oBAAoB;AAC3B,OAAO,uBAAuB;AAoFtB,SAmFI,YAAAC,WAtEA,OAAAC,MAbJ,QAAAC,aAAA;AAzED,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAIV,UAAS,EAAE;AAC3C,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AAGtD,EAAAC,WAAU,MAAM;AACd,QAAI,QAAQ,CAAC,WAAW;AAEtB,UAAI,OAAO;AACT,oBAAY,EAAE;AAAA,MAChB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,SAAS,CAAC;AAG3B,EAAAA,WAAU,MAAM;AACd,QAAI,MAAM;AACR,sBAAgB,KAAK;AACrB,UAAI,CAAC,OAAO;AACV,oBAAY,EAAE;AAAA,MAChB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,eAAe,CAAC,MAAuB;AAC3C,MAAE,eAAe;AACjB,QAAI,SAAS,KAAK,KAAK,CAAC,WAAW;AACjC,eAAS,QAAQ;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,iCAAiC,MAAM;AAC3C,oBAAgB,CAAC,YAAY;AAAA,EAC/B;AAEA,QAAM,iBAAiB,CAAC,MAA2B;AACjD,QAAI,EAAE,QAAQ,WAAW,SAAS,KAAK,KAAK,CAAC,WAAW;AACtD,mBAAa,CAAQ;AAAA,IACvB;AAAA,EACF;AAEA,SACE,gBAAAS;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,sBAAoB;AAAA,MACpB,SAAS,CAAC,OAAO,WAAW;AAE1B,YAAI,WAAW,gBAAiB;AAAA,MAClC;AAAA,MACA,UAAS;AAAA,MACT,WAAS;AAAA,MACT,WAAW;AAAA,QACT,UAAU;AAAA,UACR,IAAI;AAAA,YACF,gBAAgB;AAAA,YAChB,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY;AAAA,QACV,IAAI;AAAA,UACF,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,MAEA;AAAA,wBAAAD,KAAC,eAAY,IAAI,EAAE,IAAI,EAAE,GACvB,0BAAAC,MAACL,MAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,GACzD;AAAA,0BAAAI;AAAA,YAACJ;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,iBAAiB;AAAA,gBACjB,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,gBAAgB;AAAA,gBAChB,SAAS;AAAA,cACX;AAAA,cAEA,0BAAAI,KAAC,YAAS,IAAI,EAAE,OAAO,SAAS,UAAU,GAAG,GAAG;AAAA;AAAA,UAClD;AAAA,UACA,gBAAAA,KAACN,aAAA,EAAW,SAAQ,MAAK,WAAU,OAAM,IAAI,EAAE,YAAY,IAAI,GAAG,gCAElE;AAAA,WACF,GACF;AAAA,QAEA,gBAAAO,MAAC,iBAAc,IAAI,EAAE,IAAI,EAAE,GACzB;AAAA,0BAAAA,MAACP,aAAA,EAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,kBAAkB,IAAI,EAAE,GAAG;AAAA;AAAA,YACA;AAAA,YACjE,YAAY,gBAAAO,MAAC,YAAO;AAAA;AAAA,cAAE;AAAA,cAAS;AAAA,eAAC;AAAA,aACnC;AAAA,UAEC,SACC,gBAAAD,KAAC,SAAM,UAAS,SAAQ,IAAI,EAAE,IAAI,EAAE,GACjC,iBACH;AAAA,UAGF,gBAAAA,KAAC,UAAK,UAAU,cACd,0BAAAA;AAAA,YAACP;AAAA,YAAA;AAAA,cACC,WAAS;AAAA,cACT,WAAS;AAAA,cACT,MAAM,eAAe,SAAS;AAAA,cAC9B,OAAM;AAAA,cACN,aAAY;AAAA,cACZ,OAAO;AAAA,cACP,UAAU,CAAC,MAAM,YAAY,EAAE,OAAO,KAAK;AAAA,cAC3C,YAAY;AAAA,cACZ,OAAO,QAAQ,KAAK;AAAA,cACpB,UAAU;AAAA,cACV,YAAY;AAAA,gBACV,cACE,gBAAAO,KAACL,iBAAA,EAAe,UAAS,OACvB,0BAAAK;AAAA,kBAACH;AAAA,kBAAA;AAAA,oBACC,SAAS;AAAA,oBACT,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,cAAY,eAAe,kBAAkB;AAAA,oBAC7C,UAAU;AAAA,oBAET,yBAAe,gBAAAG,KAAC,qBAAkB,IAAK,gBAAAA,KAAC,kBAAe;AAAA;AAAA,gBAC1D,GACF;AAAA,cAEJ;AAAA,cACA,IAAI;AAAA,gBACF,4BAA4B;AAAA,kBAC1B,cAAc;AAAA,gBAChB;AAAA,cACF;AAAA;AAAA,UACF,GACF;AAAA,WACF;AAAA,QAEA,gBAAAA,KAAC,iBAAc,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,GACvC,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,SAAQ;AAAA,YACR,UAAU,CAAC,SAAS,KAAK,KAAK;AAAA,YAC9B,IAAI;AAAA,cACF,cAAc;AAAA,cACd,eAAe;AAAA,cACf,IAAI;AAAA,cACJ,WAAW;AAAA,cACX,UAAU;AAAA,YACZ;AAAA,YAEC,sBACC,gBAAAC,MAAAF,WAAA,EACE;AAAA,8BAAAC,KAACF,mBAAA,EAAiB,MAAM,IAAI,OAAM,WAAU,IAAI,EAAE,IAAI,EAAE,GAAG;AAAA,cAAE;AAAA,eAE/D,IAEA;AAAA;AAAA,QAEJ,GACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;ALs2BQ,gBAAAI,MAQa,QAAAC,aARb;AA59BR,IAAM,mBAAmB;AAAA,EACvB,CAAC,OAAO,QAAQ;AACd,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,MACrB,mBAAmB;AAAA,MACnB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX,cAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,UAAM,CAAC,WAAW,YAAY,IAAIC,UAA6B,IAAI;AACnE,UAAM,CAAC,OAAO,QAAQ,IAAIA,UAAuB,MAAM;AACvD,UAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,UAAM,eAAeC,QAA+B,IAAI;AACxD,UAAM,CAAC,iBAAiB,kBAAkB,IAAID,UAAS,KAAK;AAG5D,UAAM,CAAC,2BAA2B,4BAA4B,IAAIA,UAAS,KAAK;AAChF,UAAM,CAAC,qBAAqB,sBAAsB,IAAIA,UAAS,KAAK;AAGpE,UAAM,oBAAoB,wBAAwB,SAAY,sBAAsB;AACpF,UAAM,cAAc,kBAAkB,SAAY,gBAAgB;AAGlE,UAAM,mBAAmB,QAAQ,MAAM;AACrC,UAAI,SAAU,QAAO;AACrB,UAAI,gBAAgB,KAAM,QAAO,KAAK;AACtC,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,WAAW,KAAK,MAAM,GAAG;AAC/B,eAAO,SAAS,SAAS,SAAS,CAAC,KAAK;AAAA,MAC1C;AACA,aAAO;AAAA,IACT,GAAG,CAAC,MAAM,QAAQ,CAAC;AAEnB,UAAM,gBAAgB;AAAA,MACpB,MAAM,iBAAiB,gBAAgB;AAAA,MACvC,CAAC,gBAAgB;AAAA,IACnB;AAGA,UAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,CAAC;AAChD,UAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,CAAC;AAC9C,UAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,GAAG;AACpC,UAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,EAAE;AACjD,UAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AACpD,UAAM,CAAC,cAAc,eAAe,IAAIA,UAA6B,IAAI;AACzE,UAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,KAAK;AACxD,UAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAgB,CAAC,CAAC;AAC5D,UAAM,CAAC,0BAA0B,2BAA2B,IAAIA,UAAS,CAAC;AAC1E,UAAM,CAAC,oBAAoB,qBAAqB,IAAIA,UAAS,CAAC;AAC9D,UAAM,CAAC,mBAAmB,oBAAoB,IAAIA;AAAA,MAChD,CAAC,CAAC;AAAA,IACJ;AACA,UAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AACtD,UAAM,eAAeC,QAAuB,IAAI;AAEhD,UAAM,CAAC,sBAAsB,uBAAuB,IAAID,UAAS,KAAK;AACtE,UAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAiB,EAAE;AAC7D,UAAM,CAAC,qBAAqB,sBAAsB,IAAIA,UAAS,KAAK;AACpE,UAAM,CAAC,iBAAiB,kBAAkB,IAAIA,UAE5C,IAAI;AACN,UAAM,qBAAqBC,QAA6C,IAAI;AAE5E,UAAM,2BAA2BA,QAAO,KAAK;AAE7C,UAAM,yBAAyB,YAAY,MAAM;AAC/C,UAAI,CAAC,gBAAgB,aAAa,SAAS,mBAAmB;AAC5D,qBAAa,QAAQ,kBAAkB;AACvC,wBAAgB,IAAI;AAAA,MACtB,WAAW,gBAAgB,SAAS,gBAAgB;AAClD,iBAAS,eAAe;AACxB,wBAAgB,KAAK;AAAA,MACvB;AAAA,IACF,GAAG,CAAC,YAAY,CAAC;AAGjB,IAAAC,WAAU,MAAM;AACd,YAAM,yBAAyB,MAAM;AACnC,cAAM,wBAAwB,CAAC,CAAC,SAAS;AACzC,wBAAgB,qBAAqB;AAAA,MACvC;AAEA,eAAS,iBAAiB,oBAAoB,sBAAsB;AACpE,aAAO,MAAM;AACX,iBAAS,oBAAoB,oBAAoB,sBAAsB;AAAA,MACzE;AAAA,IACF,GAAG,CAAC,CAAC;AAGL,UAAM,qBAAqB,YAAY,MAAM;AAC3C,uBAAiB,KAAK;AACtB,qBAAe,EAAE;AACjB,uBAAiB,CAAC,CAAC;AACnB,4BAAsB,CAAC;AACvB,kCAA4B,CAAC;AAC7B,mBAAa,SAAS,OAAO,WAAW;AAAA,IAC1C,GAAG,CAAC,CAAC;AAEL,UAAM,UAAU,mBAAmB;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,MAAM;AAAA,IACxB,CAAC;AAGD,UAAM,kBAAkB;AAAA,MACtB,OAAO;AAAA,QACL,cAAc,MAAM;AAClB,uBAAa,SAAS,KAAK,OAAO;AAClC,gCAAsB,MAAM;AAC1B,kBAAM,YAAY,aAAa,SAAS,KAAK,QAAQ;AACrD,gBAAI,OAAO,cAAc,UAAU;AACjC,sBAAQ,KAAK,MAAM,YAAY,GAAG,CAAC;AAAA,YACrC;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,eAAe,MAAM;AACnB,uBAAa,SAAS,KAAK,QAAQ;AACnC,gCAAsB,MAAM;AAC1B,kBAAM,YAAY,aAAa,SAAS,KAAK,QAAQ;AACrD,gBAAI,OAAO,cAAc,UAAU;AACjC,sBAAQ,KAAK,MAAM,YAAY,GAAG,CAAC;AAAA,YACrC;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,kBAAkB,MAAM;AACtB,uBAAa,SAAS,KAAK,WAAW;AACtC,gCAAsB,MAAM;AAC1B,kBAAM,YAAY,aAAa,SAAS,KAAK,QAAQ;AACrD,gBAAI,OAAO,cAAc,UAAU;AACjC,sBAAQ,KAAK,MAAM,YAAY,GAAG,CAAC;AAAA,YACrC;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,iBAAiB,MAAM;AACrB,uBAAa,SAAS,KAAK,UAAU;AACrC,gCAAsB,MAAM;AAC1B,kBAAM,YAAY,aAAa,SAAS,KAAK,QAAQ;AACrD,gBAAI,OAAO,cAAc,UAAU;AACjC,sBAAQ,KAAK,MAAM,YAAY,GAAG,CAAC;AAAA,YACrC;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,oBAAoB,MAAM;AACxB,uBAAa,SAAS,WAAW,aAAa;AAC9C,gCAAsB,MAAM;AAC1B,kBAAM,UACJ,aAAa,SAAS,WAAW,eAAe,KAAK;AACvD,2BAAe,OAAO;AAAA,UACxB,CAAC;AAAA,QACH;AAAA,QACA,gBAAgB,MAAM;AACpB,uBAAa,SAAS,WAAW,SAAS;AAC1C,gCAAsB,MAAM;AAC1B,kBAAM,UACJ,aAAa,SAAS,WAAW,eAAe,KAAK;AACvD,2BAAe,OAAO;AAAA,UACxB,CAAC;AAAA,QACH;AAAA,QACA,iBAAiB,MAAM;AACrB,uBAAa,SAAS,WAAW,cAAc;AAC/C,gCAAsB,MAAM;AAC1B,kBAAM,UACJ,aAAa,SAAS,WAAW,eAAe,KAAK;AACvD,2BAAe,OAAO;AAAA,UACxB,CAAC;AAAA,QACH;AAAA,QACA,gBAAgB,MAAM;AACpB,uBAAa,SAAS,WAAW,aAAa;AAC9C,gCAAsB,MAAM;AAC1B,kBAAM,UACJ,aAAa,SAAS,WAAW,eAAe,KAAK;AACvD,2BAAe,OAAO;AAAA,UACxB,CAAC;AAAA,QACH;AAAA,QACA,eAAe,MAAM;AACnB,cAAI,eAAe;AAEjB,+BAAmB;AAAA,UACrB,OAAO;AAEL,6BAAiB,IAAI;AAAA,UACvB;AAAA,QACF;AAAA,QACA,iBAAiB,CAAC,MAA2C;AAC3D,gBAAM,QAAQ,EAAE,OAAO;AACvB,cAAI,QAAQ,KAAK,KAAK,GAAG;AACvB;AAAA,UACF;AACA,gBAAM,OAAO,SAAS,OAAO,EAAE;AAC/B,cACE,CAAC,MAAM,IAAI,KACX,QAAQ,MACP,eAAe,KAAK,QAAQ,aAC7B;AACA,yBAAa,SAAS,WAAW,SAAS,IAAI;AAC9C,2BAAe,IAAI;AAAA,UACrB;AAAA,QACF;AAAA,QACA,yBAAyB,CAAC,MAA6C;AACrE,cAAI,EAAE,QAAQ,SAAS;AACrB,kBAAM,QAAS,EAAE,OAA4B;AAC7C,kBAAM,OAAO,SAAS,OAAO,EAAE;AAC/B,gBACE,CAAC,MAAM,IAAI,KACX,QAAQ,MACP,eAAe,KAAK,QAAQ,aAC7B;AACA,2BAAa,SAAS,WAAW,SAAS,IAAI;AAC9C,6BAAe,IAAI;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAAA,QACA,kBAAkB,MAAM;AACtB,uBAAa,SAAS,QAAQ,eAAe;AAAA,QAC/C;AAAA,QACA,mBAAmB,MAAM;AACvB,uBAAa,SAAS,QAAQ,cAAc;AAAA,QAC9C;AAAA,QACA,aAAa,MAAM;AACjB,uBAAa,SAAS,OAAO,MAAM;AAAA,QACrC;AAAA,QACA,4BAA4B,YAAY;AACtC,gBAAO,aAAa,SAAS,OAAe,uBAAuB;AAAA,QACrE;AAAA,QACA,+BAA+B,YAAY;AACzC,gBAAO,aAAa,SAAS,OAAe,0BAA0B;AAAA,QACxE;AAAA,QACA,+BAA+B,YAAY;AACzC,cAAI,2BAA2B;AAC7B,sCAA0B;AAAA,UAC5B,OAAO;AACL,kBAAO,aAAa,SAAiB,UAAU,0BAA0B,gBAAgB;AAAA,UAC3F;AAAA,QACF;AAAA,QACA,kCAAkC,YAAY;AAC5C,cAAI,8BAA8B;AAChC,yCAA6B;AAAA,UAC/B,OAAO;AACL,kBAAO,aAAa,SAAiB,UAAU,6BAA6B,gBAAgB;AAAA,UAC9F;AAAA,QACF;AAAA,QACA,wBAAwB,MAAM;AAC5B,cAAI,mBAAmB;AACrB,yBAAa,SAAS,YAAY,sBAAsB;AACxD,yCAA6B,KAAK;AAAA,UACpC,OAAO;AACL,gBAAI,aAAa;AACf,2BAAa,SAAS,YAAY,gBAAgB;AAClD,qCAAuB,KAAK;AAAA,YAC9B;AACA,yBAAa,SAAS,YAAY,oBAAoB;AACtD,yCAA6B,IAAI;AAAA,UACnC;AAAA,QACF;AAAA,QACA,kBAAkB,MAAM;AACtB,cAAI,aAAa;AACf,yBAAa,SAAS,YAAY,gBAAgB;AAClD,mCAAuB,KAAK;AAAA,UAC9B,OAAO;AACL,gBAAI,mBAAmB;AACrB,2BAAa,SAAS,YAAY,sBAAsB;AACxD,2CAA6B,KAAK;AAAA,YACpC;AACA,yBAAa,SAAS,YAAY,cAAc,EAAE;AAClD,mCAAuB,IAAI;AAAA,UAC7B;AAAA,QACF;AAAA,QACA,sBAAsB,MAAM;AAAA,QAG5B;AAAA,QACA,YAAY,MAAM;AAChB,uBAAa,SAAS,UAAU,KAAK;AAAA,QACvC;AAAA,QACA;AAAA,MACF;AAAA,MACA,CAAC,eAAe,YAAY,wBAAwB,mBAAmB,aAAa,2BAA2B,4BAA4B;AAAA,IAC7I;AAGA,IAAAA,WAAU,MAAM;AAEd,UAAI,CAAC,qBAAqB,yBAAyB,QAAS;AAG5D,YAAM,aAAa,UAAU;AAC7B,YAAM,qBAAqB,aAAa;AACxC,YAAM,oBAAoB,CAAC,CAAC,aAAa;AACzC,YAAM,mBAAmB,CAAC,CAAC,aAAa,SAAS,QAAQ;AAEzD,YAAM,mBACJ,cACA,sBACA,qBACA;AAEF,UAAI,CAAC,iBAAkB;AAGvB,+BAAyB,UAAU;AAGnC,YAAM,8BAA8B;AAEpC,iBAAW,MAAM;AAEf,YAAI,CAAC,aAAa,SAAS,QAAQ,YAAY;AAC7C,mCAAyB,UAAU;AACnC;AAAA,QACF;AAGA,8BAAsB,MAAM;AAC1B,gCAAsB,MAAM;AAC1B,6BAAiB,IAAI;AACrB,gCAAoB,mBAAmB,kBAAkB;AACzD,iCAAqB,KAAK;AAAA,UAC5B,CAAC;AAAA,QACH,CAAC;AAAA,MACH,GAAG,2BAA2B;AAAA,IAChC,GAAG;AAAA,MACD;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA;AAAA,IACF,CAAC;AAGD,IAAAA,WAAU,MAAM;AAEd,qBAAe,EAAE;AACjB,uBAAiB,CAAC,CAAC;AACnB,kCAA4B,CAAC;AAC7B,4BAAsB,CAAC;AACvB,qBAAe,KAAK;AACpB,uBAAiB,KAAK;AACtB,+BAAyB,UAAU;AAGnC,qBAAe,CAAC;AAChB,oBAAc,CAAC;AACf,cAAQ,GAAG;AAGX,eAAS,MAAM;AACf,eAAS,IAAI;AACb,mBAAa,IAAI;AAAA,IACnB,GAAG,CAAC,IAAI,CAAC;AAGT,IAAAA,WAAU,MAAM;AACd,UAAI,UAAU,QAAS;AAEvB,YAAM,YAAY,SAAS;AAAA,QACzB;AAAA,MACF;AACA,UAAI,WAAW;AACb,wBAAgB,SAAS;AACzB;AAAA,MACF;AAGA,YAAM,WAAW,IAAI,iBAAiB,MAAM;AAC1C,cAAM,iBAAiB,SAAS;AAAA,UAC9B;AAAA,QACF;AACA,YAAI,gBAAgB;AAClB,0BAAgB,cAAc;AAC9B,mBAAS,WAAW;AAAA,QACtB;AAAA,MACF,CAAC;AAED,eAAS,QAAQ,SAAS,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAClE,aAAO,MAAM,SAAS,WAAW;AAAA,IACnC,GAAG,CAAC,KAAK,CAAC;AAGV,IAAAA,WAAU,MAAM;AAEd,UAAI,UAAU,QAAS;AAEvB,YAAM,yBAAyB,YAAY;AACzC,YAAI,CAAC,aAAa,QAAS;AAG3B,YAAI;AACF,gBAAM,QAAQ,aAAa,QAAQ,YAAY,gBAAgB;AAC/D,cAAI,SAAS,QAAQ,GAAG;AACtB,0BAAc,KAAK;AACnB,+BAAmB,IAAI;AACvB;AAAA,UACF;AAGA,gBAAM,UAAW,aAAa,SAAiB,UAAU,kBAAkB;AAC3E,cAAI,WAAW,QAAQ,aAAa,GAAG;AACrC,0BAAc,QAAQ,UAAU;AAChC,+BAAmB,IAAI;AACvB;AAAA,UACF;AAAA,QACF,SAAS,GAAG;AAAA,QAEZ;AAAA,MACF;AAEA,YAAM,eAAe,YAAY,wBAAwB,GAAG;AAC5D,aAAO,MAAM,cAAc,YAAY;AAAA,IACzC,GAAG,CAAC,KAAK,CAAC;AAGV,IAAAA,WAAU,MAAM;AACd,UAAI,UAAU,WAAW,aAAa,EAAG;AAEzC,YAAM,sBAAsB,YAAY;AAEtC,cAAM,gBAAgB,OACpB,cAAc,OAC2B;AACzC,mBAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,gBAAI,aAAa,QAAS,QAAO,aAAa;AAC9C,kBAAM,IAAI;AAAA,cAAQ,CAAC,YACjB;AAAA,gBAAsB,MACpB,WAAW,SAAS,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG,CAAC,GAAG,GAAI,CAAC;AAAA,cAC1D;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAEA,cAAM,SAAS,MAAM,cAAc;AACnC,YAAI,CAAC,OAAQ;AAGb,cAAM,IAAI,QAAQ,CAAC,YAAY,sBAAsB,OAAO,CAAC;AAG7D,YAAI;AACF,gBAAM,QAAQ,OAAO,YAAY,gBAAgB;AACjD,cAAI,SAAS,QAAQ,GAAG;AACtB,0BAAc,KAAK;AAEnB,+BAAmB,IAAI;AACvB;AAAA,UACF;AAAA,QACF,SAAS,GAAG;AAAA,QAEZ;AAAA,MAIF;AAEA,0BAAoB;AAAA,IACtB,GAAG,CAAC,OAAO,UAAU,CAAC;AA2BtB,IAAAA,WAAU,MAAM;AACd,UAAI,UAAU,SAAS;AACrB,cAAM,aAAa,MAAM;AACvB,cAAI,CAAC,aAAa,QAAS;AAE3B,gBAAM,UACJ,aAAa,SAAS,WAAW,eAAe,KAAK;AAGvD,gBAAM,UAAW,aAAa,SAAiB,UAAU,kBAAkB;AAC3E,gBAAM,WAAW,aAAa,SAAS,YAAY,gBAAgB;AAEnE,cAAI,QAAQ;AACZ,cAAI,WAAW,QAAQ,aAAa,GAAG;AACrC,oBAAQ,QAAQ;AAAA,UAClB,WAAW,OAAO,aAAa,YAAY,WAAW,GAAG;AACvD,oBAAQ;AAAA,UACV;AAEA,gBAAM,YAAY,aAAa,SAAS,KAAK,QAAQ;AACrD,gBAAM,qBACJ,aAAa,SAAS,OAAO,eAAe;AAE9C,yBAAe,OAAO;AAGtB,cAAI,QAAQ,KAAK,UAAU,YAAY;AACrC,0BAAc,KAAK;AAAA,UACrB;AAEA,cAAI,OAAO,cAAc,UAAU;AACjC,oBAAQ,KAAK,MAAM,YAAY,GAAG,CAAC;AAAA,UACrC;AAAA,QACF;AAEA,mBAAW;AAEX,cAAM,eAAe,eAAe,IAAI,KAAK;AAC7C,cAAM,WAAW,YAAY,YAAY,YAAY;AACrD,eAAO,MAAM,cAAc,QAAQ;AAAA,MACrC;AAAA,IACF,GAAG,CAAC,OAAO,UAAU,CAAC;AAGtB;AAAA,MACE;AAAA,MACA,OAAO;AAAA,QACL,QAAQ,MAAM;AACZ,uBAAa,SAAS,KAAK,OAAO;AAClC,4BAAkB;AAAA,QACpB;AAAA,QACA,SAAS,MAAM;AACb,uBAAa,SAAS,KAAK,QAAQ;AACnC,4BAAkB;AAAA,QACpB;AAAA,QACA,SAAS,CAAC,UAAkB;AAC1B,uBAAa,SAAS,KAAK,QAAQ,KAAK;AACxC,4BAAkB;AAAA,QACpB;AAAA,QACA,WAAW,MAAM;AACf,uBAAa,SAAS,KAAK,UAAU;AACrC,4BAAkB;AAAA,QACpB;AAAA,QACA,SAAS,MAAM;AACb,gBAAMC,QAAO,aAAa,SAAS,KAAK,QAAQ;AAChD,iBAAO,OAAOA,UAAS,WAAWA,QAAO;AAAA,QAC3C;AAAA,QACA,UAAU,CAAC,SAAiB;AAC1B,uBAAa,SAAS,WAAW,SAAS,IAAI;AAC9C,yBAAe,IAAI;AAAA,QACrB;AAAA,QACA,gBAAgB,MACd,aAAa,SAAS,WAAW,eAAe,KAAK;AAAA,QACvD,eAAe,MACb,aAAa,SAAS,WAAW,cAAc,KAAK;AAAA,QACtD,UAAU,MAAM;AACd,uBAAa,SAAS,WAAW,SAAS;AAC1C,4BAAkB;AAAA,QACpB;AAAA,QACA,cAAc,MAAM;AAClB,uBAAa,SAAS,WAAW,aAAa;AAC9C,4BAAkB;AAAA,QACpB;AAAA,QACA,eAAe,MAAM;AACnB,uBAAa,SAAS,WAAW,cAAc;AAC/C,4BAAkB;AAAA,QACpB;AAAA,QACA,cAAc,MAAM;AAClB,uBAAa,SAAS,WAAW,aAAa;AAC9C,4BAAkB;AAAA,QACpB;AAAA,QACA,YAAY,OAAO,YAAoB;AACrC,yBAAe,IAAI;AACnB,gBAAM,UAAU,MAAM,aAAa,SAAS,OAAO;AAAA,YACjD;AAAA,UACF;AACA,yBAAe,KAAK;AACpB,yBAAe,OAAO;AAEtB,iBAAO;AAAA,QACT;AAAA,QACA,YAAY,MAAM;AAChB,gBAAM,QAAQ,aAAa,SAAS,OAAO,WAAW,KAAK;AAC3D,iBAAO;AAAA,QACT;AAAA,QACA,gBAAgB,MAAM;AACpB,gBAAM,QAAQ,aAAa,SAAS,OAAO,eAAe,KAAK;AAC/D,iBAAO;AAAA,QACT;AAAA,QACA,YAAY,CAAC,UACX,aAAa,SAAS,OAAO,WAAW,KAAK,KAAK;AAAA,QACpD,YAAY,MAAM;AAChB,uBAAa,SAAS,OAAO,WAAW;AACxC,yBAAe,EAAE;AAAA,QACnB;AAAA,QACA,gBAAgB,MACd,aAAa,SAAS,OAAO,eAAe,KAAK;AAAA,QACnD,iBAAiB,YAAY;AAC3B,iBAAO,MAAM,aAAa,SAAS,UAAU,gBAAgB,KAAK;AAAA,QACpE;AAAA,QACA,gBAAgB,MAAM,aAAa,SAAS,UAAU,eAAe;AAAA,QACrE,MAAM,MAAM,aAAa,SAAS,UAAU,KAAK;AAAA,QACjD,eAAe,MAAM,aAAa,SAAS,QAAQ,cAAc;AAAA,QACjE,gBAAgB,MAAM,aAAa,SAAS,QAAQ,eAAe;AAAA,QACnE,aAAa,MAAM,aAAa,SAAS,QAAQ,YAAY,KAAK;AAAA,QAClE,OAAO,MAAM,aAAa,SAAS,OAAO,MAAM;AAAA,QAChD,sBAAsB,YAAY;AAChC,gBAAO,aAAa,SAAS,OAAe,uBAAuB;AAAA,QACrE;AAAA,QACA,yBAAyB,YAAY;AACnC,gBAAO,aAAa,SAAS,OAAe,0BAA0B;AAAA,QACxE;AAAA,QACA,yBAAyB,OAAO,aAAsB;AACpD,gBAAO,aAAa,SAAiB,UAAU,0BAA0B,QAAQ;AAAA,QACnF;AAAA,QACA,4BAA4B,OAAO,aAAsB;AACvD,gBAAO,aAAa,SAAiB,UAAU,6BAA6B,QAAQ;AAAA,QACtF;AAAA,QACA,IAAI,aAAa;AACf,iBAAO,aAAa,SAAS;AAAA,QAC/B;AAAA,QACA,IAAI,WAAW;AACb,iBAAQ,aAAa,SAAiB;AAAA,QACxC;AAAA,MACF;AAAA,MACA,CAAC;AAAA,IACH;AAEA,UAAM,oBAAoB,MAAM;AAC9B,4BAAsB,MAAM;AAC1B,cAAM,UAAU,aAAa,SAAS,WAAW,eAAe,KAAK;AACrE,uBAAe,OAAO;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,UAAM,oBAAoB,MAAM;AAC9B,4BAAsB,MAAM;AAC1B,cAAM,YAAY,aAAa,SAAS,KAAK,QAAQ;AACrD,YAAI,OAAO,cAAc,UAAU;AACjC,kBAAQ,KAAK,MAAM,YAAY,GAAG,CAAC;AAAA,QACrC;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,eAAe,YAAY;AAC/B,UAAI,CAAC,YAAY,KAAK,EAAG;AAEzB,qBAAe,IAAI;AACnB,YAAM,UAAU,MAAM,aAAa,SAAS,OAAO;AAAA,QACjD;AAAA,MACF;AACA,qBAAe,KAAK;AAGpB,UACE,SAAS,WACT,MAAM,QAAQ,QAAQ,OAAO,KAC7B,QAAQ,QAAQ,SAAS,GACzB;AACA,cAAM,mBAAmB,oBAAoB,QAAQ,OAAO;AAC5D,0BAAkB,gBAAgB;AAAA,MACpC,OAAO;AACL,2BAAmB;AAAA,MACrB;AAAA,IACF;AAEA,UAAM,uBAAuB,CAAC,MAA6C;AACzE,UAAI,EAAE,QAAQ,SAAS;AACrB,qBAAa;AAAA,MACf;AAAA,IACF;AAEA,UAAM,sBAAsB,OAC1B,SACA,gBACG;AACH,qBAAe,OAAO;AAGtB,UAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,yBAAiB,CAAC,CAAC;AACnB,8BAAsB,CAAC;AACvB,oCAA4B,CAAC;AAC7B,qBAAa,SAAS,OAAO,WAAW;AACxC;AAAA,MACF;AAGA,UAAI,CAAC,aAAa,SAAS,QAAQ,YAAY;AAC7C,gBAAQ,KAAK,wCAAwC;AACrD;AAAA,MACF;AAEA,qBAAe,IAAI;AAEnB,UAAI;AAEF,cAAM,UAAU,MAAM,aAAa,QAAQ,OAAO,WAAW,OAAO;AACpE,uBAAe,KAAK;AAGpB,cAAM,kBACJ,SAAS,WACT,MAAM,QAAQ,QAAQ,OAAO,KAC7B,QAAQ,QAAQ,SAAS;AAE3B,YAAI,iBAAiB;AAEnB,gBAAM,mBAAmB,oBAAoB,QAAQ,OAAO;AAC5D,4BAAkB,gBAAgB;AAClC,gCAAsB,gBAAgB;AAAA,QACxC,WAAW,eAAe,YAAY,SAAS,GAAG;AAEhD,gBAAM,kBAAkB,sBAAsB,aAAa,OAAO;AAClE,4BAAkB,eAAe;AACjC,yBAAe,YAAY,CAAC,CAAC;AAAA,QAC/B,OAAO;AAEL,6BAAmB;AAAA,QACrB;AAAA,MACF,SAASC,QAAO;AACd,gBAAQ,MAAM,kBAAkBA,MAAK;AACrC,uBAAe,KAAK;AACpB,2BAAmB;AAAA,MACrB;AAAA,IACF;AAGA,UAAM,sBAAsB,CAAC,YAAmB;AAC9C,aAAO,QAAQ,IAAI,CAAC,QAAa,UAAkB;AACjD,YAAI,cAAc;AAClB,YAAI,iBAAiB;AAGrB,YAAI,OAAO,WAAW,OAAO,OAAO,YAAY,UAAU;AACxD,gBAAM,EAAE,SAAS,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,OAAO;AACvD,wBAAc;AACd,2BAAiB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK;AAAA,QAC5C,WAAW,OAAO,WAAW,UAAU;AACrC,wBAAc;AACd,2BAAiB;AAAA,QACnB,OAAO;AACL,wBAAc,OAAO,OAAO,SAAS,OAAO,QAAQ,EAAE;AACtD,2BAAiB;AAAA,QACnB;AAEA,eAAO;AAAA,UACL,aAAa,OAAO,aAAa,OAAO,cAAc,KAAK;AAAA,UAC3D,MAAM;AAAA,UACN,SAAS;AAAA,UACT;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAGA,UAAM,wBAAwB,CAAC,aAAuB,YAAoB;AACxE,aAAO,YAAY,IAAI,CAAC,SAAS,WAAW;AAAA,QAC1C,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,IAAI,OAAO,wBAAwB,OAAO;AAAA,QACnD;AAAA,MACF,EAAE;AAAA,IACJ;AAGA,UAAM,oBAAoB,CAAC,YAAmB;AAC5C,uBAAiB,OAAO;AACxB,4BAAsB,QAAQ,MAAM;AACpC,kCAA4B,CAAC;AAAA,IAC/B;AAGA,UAAM,qBAAqB,MAAM;AAC/B,uBAAiB,CAAC,CAAC;AACnB,4BAAsB,CAAC;AACvB,kCAA4B,CAAC;AAAA,IAC/B;AAGA,UAAM,wBAAwB,CAAC,YAAmB;AAChD,UAAI,QAAQ,SAAS,GAAG;AACtB,uBAAe,QAAQ,CAAC,EAAE,UAAU;AAAA,MACtC;AAAA,IACF;AAGA,UAAM,iBAAiB,CAAC,eAAuB;AAC7C,4BAAsB,MAAM;AAC1B,qBAAa,SAAS,WAAW,SAAS,UAAU;AACpD,uBAAe,UAAU;AAAA,MAC3B,CAAC;AAAA,IACH;AAEA,UAAM,0BAA0B,CAC9B,YACA,gBACG;AAEH,mBAAa,SAAS,WAAW,SAAS,UAAU;AACpD,kCAA4B,WAAW;AACvC,qBAAe,UAAU;AAGzB,mBAAa,SAAS,OAAO,WAAW,WAAW;AAAA,IACrD;AAEA,UAAM,yBAAyB,MAAM;AACnC,UAAI,2BAA2B,qBAAqB,GAAG;AACrD,cAAM,YAAY,2BAA2B;AAC7C,oCAA4B,SAAS;AAErC,qBAAa,SAAS,OAAO,WAAW;AAGxC,YAAI,cAAc,SAAS,GAAG;AAC5B,gBAAM,aAAa,cAAc,SAAS,EAAE;AAC5C,uBAAa,SAAS,WAAW,SAAS,UAAU;AACpD,yBAAe,UAAU;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,6BAA6B,MAAM;AACvC,UAAI,2BAA2B,GAAG;AAChC,cAAM,YAAY,2BAA2B;AAC7C,oCAA4B,SAAS;AAErC,qBAAa,SAAS,OAAO,eAAe;AAG5C,YAAI,cAAc,SAAS,GAAG;AAC5B,gBAAM,aAAa,cAAc,SAAS,EAAE;AAC5C,uBAAa,SAAS,WAAW,SAAS,UAAU;AACpD,yBAAe,UAAU;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAGA,IAAAF,WAAU,MAAM;AACd,UAAI,CAAC,MAAM;AACT,iBAAS,OAAO;AAChB,iBAAS,kBAAkB;AAC3B;AAAA,MACF;AAEA,YAAM,UAAU,YAAY;AAC1B,YAAI;AACF,mBAAS,SAAS;AAClB,mBAAS,IAAI;AAEb,cAAI;AAEJ,cAAI,gBAAgB,MAAM;AACxB,0BAAc,MAAM,KAAK,YAAY;AAAA,UACvC,WAAW,OAAO,SAAS,UAAU;AAEnC,kBAAM,WAAW,MAAM,MAAM,IAAI;AACjC,gBAAI,CAAC,SAAS,IAAI;AAChB,oBAAM,IAAI,MAAM,uBAAuB,SAAS,UAAU,EAAE;AAAA,YAC9D;AACA,0BAAc,MAAM,SAAS,YAAY;AAAA,UAC3C,WAAW,gBAAgB,aAAa;AACtC,0BAAc;AAAA,UAChB,OAAO;AACL,kBAAM,IAAI,MAAM,uBAAuB;AAAA,UACzC;AAEA,uBAAa,WAAW;AACxB,mBAAS,OAAO;AAChB,mBAAS;AAAA,QACX,SAAS,KAAU;AACjB,gBAAM,eAAe,IAAI,WAAW;AACpC,mBAAS,OAAO;AAChB,mBAAS,YAAY;AACrB,oBAAU,GAAG;AAAA,QACf;AAAA,MACF;AAEA,cAAQ;AAAA,IACV,GAAG,CAAC,MAAM,QAAQ,OAAO,CAAC;AAG1B,UAAM,wBAAwB;AAAA,MAC5B,OAAOG,WAAmB,YAA8C;AACtE,eAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,6BAAmB,MAAM,OAAO;AAChC,cAAI,SAAS;AACX,6BAAiB,uCAAuC;AAAA,UAC1D,OAAO;AACL,6BAAiB,EAAE;AAAA,UACrB;AACA,kCAAwB,IAAI;AAAA,QAC9B,CAAC;AAAA,MACH;AAAA,MACA,CAAC;AAAA,IACH;AAEA,UAAM,uBAAuB;AAAA,MAC3B,CAAC,aAAqB;AACpB,YAAI,iBAAiB;AACnB,0BAAgB,QAAQ;AAAA,QAC1B;AAEA,gCAAwB,KAAK;AAC7B,2BAAmB,IAAI;AACvB,yBAAiB,EAAE;AAAA,MACrB;AAAA,MACA,CAAC,eAAe;AAAA,IAClB;AAEA,UAAM,uBAAuB,YAAY,MAAM;AAC7C,UAAI,iBAAiB;AACnB,wBAAgB,IAAI;AACpB,2BAAmB,IAAI;AACvB,gCAAwB,KAAK;AAC7B,yBAAiB,EAAE;AAAA,MACrB;AAAA,IACF,GAAG,CAAC,eAAe,CAAC;AAGpB,UAAM,iBAAiB,CAAC,EAAE,UAAAA,UAAS,MACjC,gBAAAN,MAAC,SAAI,OAAO;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAClB,GACE;AAAA,sBAAAD,KAAC,SAAI,WAAU,uBAAsB,OAAO;AAAA,QAC1C,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,cAAc;AAAA,QACd,WAAW;AAAA,MACb,GAAG;AAAA,MACFO,aAAY,gBAAAN,MAAC,OAAE,OAAO,EAAE,WAAW,QAAQ,OAAO,QAAQ,UAAU,OAAO,GAAG;AAAA;AAAA,QAASM;AAAA,QAAS;AAAA,SAAG;AAAA,MACpG,gBAAAP,KAAC,WAAO,qGAA0F;AAAA,OACpG;AAGF,QAAI,UAAU,WAAW,OAAO;AAC9B,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,SAAS;AAAA,YACT,eAAe;AAAA,YACf,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,QAAQ;AAAA,YACR,SAAS;AAAA,UACX;AAAA,UAEA,0BAAAC;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,SAAS;AAAA,gBACT,iBAAiB;AAAA,gBACjB,QAAQ;AAAA,gBACR,cAAc;AAAA,cAChB;AAAA,cAEA;AAAA,gCAAAD,KAAC,QAAG,OAAO,EAAE,WAAW,EAAE,GAAG,gCAAkB;AAAA,gBAC/C,gBAAAA,KAAC,OAAG,mBAAS,0BAAyB;AAAA;AAAA;AAAA,UACxC;AAAA;AAAA,MACF;AAAA,IAEJ;AAIA,UAAM,UAAU,aAAa,UAAU;AAIvC,UAAM,cAAc,WAAW,CAAC,WAAW,CAAC;AAE5C,WACE,gBAAAC,MAAC,SAAI,KAAK,cAAc,WAAU,wBAAuB,OAAO,EAAE,UAAU,YAAY,QAAQ,QAAQ,OAAO,OAAO,GACpH;AAAA,sBAAAD,KAAC,WAAO,yBAAc;AAAA,MACrB,eAAe,gBAAAA,KAAC,kBAAe,UAAU,kBAAkB;AAAA,MAC5D,gBAAAC,MAAC,SAAI,OAAO,EAAE,SAAS,CAAC,cAAc,IAAI,GAAG,QAAQ,QAAQ,SAAS,QAAQ,eAAe,SAAS,GAGpG;AAAA,wBAAAD,KAAC,aAAU,UAAU,kBAAkB,eAA8B;AAAA,QAGrE,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,cAAc,CAAC,QAAQ,SAAS,UAAU;AAAA,YAC1C,cAAc,CAAC,QAAQ,SAAS,UAAU;AAAA,YAC1C,gBAAgB,CAAC,QAAQ,SAAS,YAAY;AAAA,YAC9C,cAAc,CAAC,QAAQ,SAAS,UAAU;AAAA,YAC1C,WAAW,CAAC,QAAQ,SAAS,OAAO;AAAA,YACpC,UAAU,CAAC,QAAQ,SAAS,MAAM;AAAA,YAClC,aAAa,CAAC,QAAQ,SAAS,SAAS;AAAA,YACxC,oBAAoB,QAAQ,WAAW,YAAY;AAAA,YACnD,qBAAqB;AAAA,YACrB,kBAAkB,QAAQ,WAAW,UAAU;AAAA,YAC/C,cAAc,QAAQ,WAAW,MAAM;AAAA,YACvC,oBAAoB,QAAQ,WAAW,YAAY;AAAA,YACnD,iBAAiB,QAAQ,WAAW,SAAS;AAAA,YAC7C,kBAAkB,QAAQ,WAAW,UAAU;AAAA,YAC/C,eAAe,QAAQ,WAAW,OAAO;AAAA,YACzC,aAAa,gBAAgB;AAAA,YAC7B,gBAAgB,gBAAgB;AAAA,YAChC,YAAY,gBAAgB;AAAA,YAC5B,YAAY,gBAAgB;AAAA,YAC5B,aAAa,gBAAgB;AAAA,YAC7B,qBAAqB,gBAAgB;AAAA,YACrC,UAAU,gBAAgB;AAAA,YAC1B,WAAW,gBAAgB;AAAA,YAC3B,cAAc,gBAAgB;AAAA,YAC9B,aAAa,gBAAgB;AAAA,YAC7B,iBAAiB,gBAAgB;AAAA,YACjC,oBAAoB,gBAAgB;AAAA,YACpC,cAAc,gBAAgB;AAAA,YAC9B,eAAe,gBAAgB;AAAA,YAC/B,iBAAiB,QAAQ,WAAW,YAAY,eAAe;AAAA,YAC/D,2BAA2B,gBAAgB;AAAA,YAC3C,8BAA8B,gBAAgB;AAAA,YAC9C,cAAc,QAAQ,WAAW,SAAS,gBAAgB,gBAAgB,WAAW;AAAA,YACrF,wBAAwB,gBAAgB;AAAA,YACxC,2BAA2B,gBAAgB;AAAA,YAC3C,aAAa,gBAAgB;AAAA,YAC7B,iBAAiB,QAAQ,WAAW,YAAY,eAAe;AAAA,YAC/D,mBAAmB,QAAQ;AAAA,cACzB;AAAA,cACA;AAAA,YACF;AAAA,YACA,aAAa,QAAQ,WAAW,QAAQ,WAAW;AAAA,YACnD,gBAAgB,QAAQ,WAAW,WAAW,cAAc;AAAA,YAC5D;AAAA,YACA,qBAAqB;AAAA,YACrB,eAAe;AAAA,YACf,qBAAqB,QAAQ,WAAW,aAAa;AAAA,YACrD,eAAe,QAAQ,WAAW,OAAO;AAAA,YACzC,mBAAmB,QAAQ,WAAW,WAAW;AAAA,YACjD,oBAAoB,QAAQ,WAAW,eAAe,sBAAsB,gBAAgB,sBAAsB;AAAA,YAClH,cAAc,QAAQ,WAAW,SAAS,gBAAgB,gBAAgB,gBAAgB;AAAA,YAC1F,kBAAkB,QAAQ,WAAW,aAAa,oBAAoB,gBAAgB,oBAAoB;AAAA,YAE1G;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YAEA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QAGA,gBAAAC,MAAC,SAAI,WAAU,mBAEb;AAAA,0BAAAD,KAAC,SAAI,WAAU,0BACb,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,aAAa,IAAI,YAAY,CAAC;AAAA,cACzC,mBAAmB;AAAA,cACnB;AAAA,cACA,qBAAqB;AAAA,cACrB;AAAA,cACA;AAAA,cACA;AAAA,cACA,qBAAqB;AAAA,cACrB,eAAe;AAAA,cACf,oBAAoB,sBAAsB,gBAAgB;AAAA,cAC1D,cAAc,gBAAgB,gBAAgB;AAAA,cAC9C,kBAAkB,oBAAoB,gBAAgB;AAAA,cACtD,aAAa,MAAM;AAAA;AAAA,UACrB,GACF;AAAA,UAGA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,UAAU;AAAA,cACV,qBAAqB;AAAA,cACrB,cAAc;AAAA,cACd,kBAAkB;AAAA,cAClB,oBAAoB;AAAA,cACpB,cAAc;AAAA,cACd,eAAe;AAAA,cACf;AAAA,cACA;AAAA;AAAA,UACF;AAAA,WACF;AAAA,QAGA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA;AAAA,QACb;AAAA,SAGF;AAAA,OACF;AAAA,EAEJ;AACF;AAEA,iBAAiB,cAAc;AAExB,IAAM,YAAY;AAAA,EACvB,CAAC,OAAO,QAAQ;AACd,WACE,gBAAAA,KAAC,oBAAkB,GAAG,OAAO,mBAAkB,WAAU,KAAU;AAAA,EAEvE;AACF;AAEA,UAAU,cAAc;","names":["useEffect","useRef","useState","React","jsx","React","jsx","jsxs","React","useState","useEffect","useRef","SearchIcon","KeyboardArrowDownIcon","jsx","jsxs","useState","useEffect","TextField","Typography","InputAdornment","Box","IconButton","CircularProgress","Fragment","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","zoom","error","fileName"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunk4JX2MJLJjs = require('../../chunk-4JX2MJLJ.js');
|
|
5
5
|
require('../../chunk-5ECHDPQZ.js');
|
|
6
6
|
require('../../chunk-YEPEMLM3.js');
|
|
7
7
|
require('../../chunk-EEIQAW55.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
exports.PDFViewer =
|
|
10
|
+
exports.PDFViewer = _chunk4JX2MJLJjs.PDFViewer;
|
|
11
11
|
//# sourceMappingURL=PDFViewer.js.map
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ var _chunkAUNFO5WZjs = require('./chunk-AUNFO5WZ.js');
|
|
|
10
10
|
var _chunkAVQCUOWMjs = require('./chunk-AVQCUOWM.js');
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunk4JX2MJLJjs = require('./chunk-4JX2MJLJ.js');
|
|
14
14
|
require('./chunk-5ECHDPQZ.js');
|
|
15
15
|
|
|
16
16
|
|
|
@@ -291,5 +291,5 @@ var FileViewer = ({
|
|
|
291
291
|
|
|
292
292
|
|
|
293
293
|
|
|
294
|
-
exports.AudioViewer = _chunkYGQ6UYNQjs.AudioViewer; exports.DefaultViewer = _chunkAUNFO5WZjs.DefaultViewer; exports.FileIcon = _chunkEEIQAW55js.FileIcon_default; exports.FileViewer = FileViewer; exports.ImageViewer = _chunkAVQCUOWMjs.ImageViewer; exports.PDFViewer =
|
|
294
|
+
exports.AudioViewer = _chunkYGQ6UYNQjs.AudioViewer; exports.DefaultViewer = _chunkAUNFO5WZjs.DefaultViewer; exports.FileIcon = _chunkEEIQAW55js.FileIcon_default; exports.FileViewer = FileViewer; exports.ImageViewer = _chunkAVQCUOWMjs.ImageViewer; exports.PDFViewer = _chunk4JX2MJLJjs.PDFViewer; exports.TIFFViewer = _chunk7S4B534Ejs.TIFFViewer; exports.TextViewer = _chunkCIAMJ46Fjs.TextViewer; exports.VideoViewer = _chunkLOXGEZRZjs.VideoViewer; exports.dynamicViewerRegistry = dynamicViewerRegistry; exports.getFileExtension = _chunkYEPEMLM3js.getFileExtension; exports.getMimeTypeFromExtension = _chunkYEPEMLM3js.getMimeTypeFromExtension; exports.getViewerComponent = getViewerComponent; exports.getViewerInfo = getViewerInfo;
|
|
295
295
|
//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-BYCREULH.js"],"names":[],"mappings":"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AA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,oBAAA;AACA,sCAAA;AACA,sCAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,0BAAA;AACA,0BAAA;AACA,YAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oCAAA;AACA,oCAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gCAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gCAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oCAAA;AACA,oCAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gCAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gCAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,kCAAA;AACA,kCAAA;AACA,kCAAA;AACA,gBAAA;AACA,gCAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,oBAAA;AACA,oBAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,0BAAA;AACA,4BAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,wBAAA;AACA,sBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gCAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gCAAA;AACA,kCAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,kCAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,UAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,4BAAA;AACA,4BAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,4BAAA;AACA,4BAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,4BAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,4BAAA;AACA,4BAAA;AACA,cAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,8BAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA,EAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,wBAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,QAAA;AACA,wBAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,kBAAA;AACA,kBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gBAAA;AACA,kBAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,8BAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,sBAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,4BAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,8BAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,4BAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,8BAAA;AACA,cAAA;AACA,YAAA;AACA,4BAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,4BAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,8BAAA;AACA,cAAA;AACA,YAAA;AACA,4BAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,gBAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,wBAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,wBAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,sBAAA;AACA,MAAA;AACA,MAAA;AACA,sBAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,wBAAA;AACA,QAAA;AACA,UAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,wBAAA;AACA,QAAA;AACA,UAAA;AACA,0BAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,0BAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,0BAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,UAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,IAAA;AACA,sBAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACA,MAAA;AACA,sBAAA;AACA,IAAA;AACA,IAAA;AACA,MAAA;AACA,QAAA;AACA,QAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,cAAA;AACA,cAAA;AACA,gCAAA;AACA,gCAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,sBAAA;AACA,MAAA;AACA,sBAAA;AACA,wBAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,0BAAA;AACA,YAAA;AACA,YAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,cAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,wBAAA;AACA,UAAA;AACA,UAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACA,QAAA;AACA,MAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA,EAAA;AACA,IAAA;AACA,EAAA;AACA;AACA;AACA;AACA;AACA;AACA","file":"D:\\Projects\\DMS-File-Viewers\\packages\\lib\\dist\\chunk-BYCREULH.js","sourcesContent":[null]}
|