{"version":3,"file":"direct-engine-DmLThNRw.cjs","sources":["../../pdfium/dist/index.browser.js","../src/lib/pdfium/helper.ts","../src/lib/pdfium/types/branded.ts","../src/lib/pdfium/cache.ts","../src/lib/pdfium/constants/limits.ts","../src/lib/pdfium/core/memory-manager.ts","../src/lib/pdfium/engine.ts","../src/lib/pdfium/web/direct-engine.ts"],"sourcesContent":["var createPdfium = (() => {\n  var _scriptName = import.meta.url;\n\n  return async function (moduleArg = {}) {\n    var moduleRtn;\n\n    // include: shell.js\n    // The Module object: Our interface to the outside world. We import\n    // and export values on it. There are various ways Module can be used:\n    // 1. Not defined. We create it here\n    // 2. A function parameter, function(moduleArg) => Promise<Module>\n    // 3. pre-run appended it, var Module = {}; ..generated code..\n    // 4. External script tag defines var Module.\n    // We need to check if Module already exists (e.g. case 3 above).\n    // Substitution will be replaced with actual code on later stage of the build,\n    // this way Closure Compiler will not mangle it (e.g. case 4. above).\n    // Note that if you want to run closure, and also to use Module\n    // after the generated code, you will need to define   var Module = {};\n    // before the code. Then that object will be used in the code, and you\n    // can continue to use Module afterwards as well.\n    var Module = moduleArg;\n\n    // Set up the promise that indicates the Module is initialized\n    var readyPromiseResolve, readyPromiseReject;\n    var readyPromise = new Promise((resolve, reject) => {\n      readyPromiseResolve = resolve;\n      readyPromiseReject = reject;\n    });\n    [\n      '_EPDF_GetMetaKeyCount',\n      '_EPDF_GetMetaKeyName',\n      '_EPDF_GetMetaTrapped',\n      '_EPDF_GetPageRotationByIndex',\n      '_EPDF_HasMetaText',\n      '_EPDF_PNG_EncodeRGBA',\n      '_EPDF_RenderAnnotBitmap',\n      '_EPDF_SetMetaText',\n      '_EPDF_SetMetaTrapped',\n      '_EPDFAction_CreateGoTo',\n      '_EPDFAction_CreateGoToNamed',\n      '_EPDFAction_CreateLaunch',\n      '_EPDFAction_CreateRemoteGoToByName',\n      '_EPDFAction_CreateRemoteGoToDest',\n      '_EPDFAction_CreateURI',\n      '_EPDFAnnot_ClearColor',\n      '_EPDFAnnot_GenerateAppearance',\n      '_EPDFAnnot_GenerateAppearanceWithBlend',\n      '_EPDFAnnot_GetBlendMode',\n      '_EPDFAnnot_GetBorderDashPattern',\n      '_EPDFAnnot_GetBorderDashPatternCount',\n      '_EPDFAnnot_GetBorderEffect',\n      '_EPDFAnnot_GetBorderStyle',\n      '_EPDFAnnot_GetColor',\n      '_EPDFAnnot_GetDefaultAppearance',\n      '_EPDFAnnot_GetIcon',\n      '_EPDFAnnot_GetIntent',\n      '_EPDFAnnot_GetLineEndings',\n      '_EPDFAnnot_GetOpacity',\n      '_EPDFAnnot_GetRectangleDifferences',\n      '_EPDFAnnot_GetRichContent',\n      '_EPDFAnnot_GetTextAlignment',\n      '_EPDFAnnot_GetVerticalAlignment',\n      '_EPDFAnnot_SetBorderDashPattern',\n      '_EPDFAnnot_SetBorderStyle',\n      '_EPDFAnnot_SetColor',\n      '_EPDFAnnot_SetDefaultAppearance',\n      '_EPDFAnnot_SetIcon',\n      '_EPDFAnnot_SetIntent',\n      '_EPDFAnnot_SetLine',\n      '_EPDFAnnot_SetLineEndings',\n      '_EPDFAnnot_SetLinkedAnnot',\n      '_EPDFAnnot_SetOpacity',\n      '_EPDFAnnot_SetTextAlignment',\n      '_EPDFAnnot_SetVerticalAlignment',\n      '_EPDFAnnot_SetVertices',\n      '_EPDFAnnot_UpdateAppearanceToRect',\n      '_EPDFAttachment_GetDescription',\n      '_EPDFAttachment_GetIntegerValue',\n      '_EPDFAttachment_SetDescription',\n      '_EPDFAttachment_SetSubtype',\n      '_EPDFBookmark_AppendChild',\n      '_EPDFBookmark_Clear',\n      '_EPDFBookmark_ClearTarget',\n      '_EPDFBookmark_Create',\n      '_EPDFBookmark_Delete',\n      '_EPDFBookmark_InsertAfter',\n      '_EPDFBookmark_SetAction',\n      '_EPDFBookmark_SetDest',\n      '_EPDFBookmark_SetTitle',\n      '_EPDFCatalog_GetLanguage',\n      '_EPDFDest_CreateRemoteView',\n      '_EPDFDest_CreateRemoteXYZ',\n      '_EPDFDest_CreateView',\n      '_EPDFDest_CreateXYZ',\n      '_EPDFNamedDest_Remove',\n      '_EPDFNamedDest_SetDest',\n      '_EPDFPage_CreateAnnot',\n      '_EPDFPage_GetAnnotByName',\n      '_EPDFPage_GetAnnotCountRaw',\n      '_EPDFPage_GetAnnotRaw',\n      '_EPDFPage_RemoveAnnotByName',\n      '_EPDFPage_RemoveAnnotRaw',\n      '_EPDFText_RedactInQuads',\n      '_EPDFText_RedactInRect',\n      '_FORM_CanRedo',\n      '_FORM_CanUndo',\n      '_FORM_DoDocumentAAction',\n      '_FORM_DoDocumentJSAction',\n      '_FORM_DoDocumentOpenAction',\n      '_FORM_DoPageAAction',\n      '_FORM_ForceToKillFocus',\n      '_FORM_GetFocusedAnnot',\n      '_FORM_GetFocusedText',\n      '_FORM_GetSelectedText',\n      '_FORM_IsIndexSelected',\n      '_FORM_OnAfterLoadPage',\n      '_FORM_OnBeforeClosePage',\n      '_FORM_OnChar',\n      '_FORM_OnFocus',\n      '_FORM_OnKeyDown',\n      '_FORM_OnKeyUp',\n      '_FORM_OnLButtonDoubleClick',\n      '_FORM_OnLButtonDown',\n      '_FORM_OnLButtonUp',\n      '_FORM_OnMouseMove',\n      '_FORM_OnMouseWheel',\n      '_FORM_OnRButtonDown',\n      '_FORM_OnRButtonUp',\n      '_FORM_Redo',\n      '_FORM_ReplaceAndKeepSelection',\n      '_FORM_ReplaceSelection',\n      '_FORM_SelectAllText',\n      '_FORM_SetFocusedAnnot',\n      '_FORM_SetIndexSelected',\n      '_FORM_Undo',\n      '_FPDF_AddInstalledFont',\n      '_FPDF_CloseDocument',\n      '_FPDF_ClosePage',\n      '_FPDF_CloseXObject',\n      '_FPDF_CopyViewerPreferences',\n      '_FPDF_CountNamedDests',\n      '_FPDF_CreateClipPath',\n      '_FPDF_CreateNewDocument',\n      '_FPDF_DestroyClipPath',\n      '_FPDF_DestroyLibrary',\n      '_FPDF_DeviceToPage',\n      '_FPDF_DocumentHasValidCrossReferenceTable',\n      '_FPDF_FFLDraw',\n      '_FPDF_FreeDefaultSystemFontInfo',\n      '_FPDF_GetDefaultSystemFontInfo',\n      '_FPDF_GetDefaultTTFMap',\n      '_FPDF_GetDefaultTTFMapCount',\n      '_FPDF_GetDefaultTTFMapEntry',\n      '_FPDF_GetDocPermissions',\n      '_FPDF_GetDocUserPermissions',\n      '_FPDF_GetFileIdentifier',\n      '_FPDF_GetFileVersion',\n      '_FPDF_GetFormType',\n      '_FPDF_GetLastError',\n      '_FPDF_GetMetaText',\n      '_FPDF_GetNamedDest',\n      '_FPDF_GetNamedDestByName',\n      '_FPDF_GetPageAAction',\n      '_FPDF_GetPageBoundingBox',\n      '_FPDF_GetPageCount',\n      '_FPDF_GetPageHeight',\n      '_FPDF_GetPageHeightF',\n      '_FPDF_GetPageLabel',\n      '_FPDF_GetPageSizeByIndex',\n      '_FPDF_GetPageSizeByIndexF',\n      '_FPDF_GetPageWidth',\n      '_FPDF_GetPageWidthF',\n      '_FPDF_GetSecurityHandlerRevision',\n      '_FPDF_GetSignatureCount',\n      '_FPDF_GetSignatureObject',\n      '_FPDF_GetTrailerEnds',\n      '_FPDF_GetXFAPacketContent',\n      '_FPDF_GetXFAPacketCount',\n      '_FPDF_GetXFAPacketName',\n      '_FPDF_ImportNPagesToOne',\n      '_FPDF_ImportPages',\n      '_FPDF_ImportPagesByIndex',\n      '_FPDF_InitLibrary',\n      '_FPDF_InitLibraryWithConfig',\n      '_FPDF_LoadCustomDocument',\n      '_FPDF_LoadDocument',\n      '_FPDF_LoadMemDocument',\n      '_FPDF_LoadMemDocument64',\n      '_FPDF_LoadPage',\n      '_FPDF_LoadXFA',\n      '_FPDF_MovePages',\n      '_FPDF_NewFormObjectFromXObject',\n      '_FPDF_NewXObjectFromPage',\n      '_FPDF_PageToDevice',\n      '_FPDF_RemoveFormFieldHighlight',\n      '_FPDF_RenderPage_Close',\n      '_FPDF_RenderPage_Continue',\n      '_FPDF_RenderPageBitmap',\n      '_FPDF_RenderPageBitmap_Start',\n      '_FPDF_RenderPageBitmapWithColorScheme_Start',\n      '_FPDF_RenderPageBitmapWithMatrix',\n      '_FPDF_SaveAsCopy',\n      '_FPDF_SaveWithVersion',\n      '_FPDF_SetFormFieldHighlightAlpha',\n      '_FPDF_SetFormFieldHighlightColor',\n      '_FPDF_SetSandBoxPolicy',\n      '_FPDF_SetSystemFontInfo',\n      '_FPDF_StructElement_Attr_CountChildren',\n      '_FPDF_StructElement_Attr_GetBlobValue',\n      '_FPDF_StructElement_Attr_GetBooleanValue',\n      '_FPDF_StructElement_Attr_GetChildAtIndex',\n      '_FPDF_StructElement_Attr_GetCount',\n      '_FPDF_StructElement_Attr_GetName',\n      '_FPDF_StructElement_Attr_GetNumberValue',\n      '_FPDF_StructElement_Attr_GetStringValue',\n      '_FPDF_StructElement_Attr_GetType',\n      '_FPDF_StructElement_Attr_GetValue',\n      '_FPDF_StructElement_CountChildren',\n      '_FPDF_StructElement_GetActualText',\n      '_FPDF_StructElement_GetAltText',\n      '_FPDF_StructElement_GetAttributeAtIndex',\n      '_FPDF_StructElement_GetAttributeCount',\n      '_FPDF_StructElement_GetChildAtIndex',\n      '_FPDF_StructElement_GetChildMarkedContentID',\n      '_FPDF_StructElement_GetID',\n      '_FPDF_StructElement_GetLang',\n      '_FPDF_StructElement_GetMarkedContentID',\n      '_FPDF_StructElement_GetMarkedContentIdAtIndex',\n      '_FPDF_StructElement_GetMarkedContentIdCount',\n      '_FPDF_StructElement_GetObjType',\n      '_FPDF_StructElement_GetParent',\n      '_FPDF_StructElement_GetStringAttribute',\n      '_FPDF_StructElement_GetTitle',\n      '_FPDF_StructElement_GetType',\n      '_FPDF_StructTree_Close',\n      '_FPDF_StructTree_CountChildren',\n      '_FPDF_StructTree_GetChildAtIndex',\n      '_FPDF_StructTree_GetForPage',\n      '_FPDF_VIEWERREF_GetDuplex',\n      '_FPDF_VIEWERREF_GetName',\n      '_FPDF_VIEWERREF_GetNumCopies',\n      '_FPDF_VIEWERREF_GetPrintPageRange',\n      '_FPDF_VIEWERREF_GetPrintPageRangeCount',\n      '_FPDF_VIEWERREF_GetPrintPageRangeElement',\n      '_FPDF_VIEWERREF_GetPrintScaling',\n      '_FPDFAction_GetDest',\n      '_FPDFAction_GetFilePath',\n      '_FPDFAction_GetType',\n      '_FPDFAction_GetURIPath',\n      '_FPDFAnnot_AddFileAttachment',\n      '_FPDFAnnot_AddInkStroke',\n      '_FPDFAnnot_AppendAttachmentPoints',\n      '_FPDFAnnot_AppendObject',\n      '_FPDFAnnot_CountAttachmentPoints',\n      '_FPDFAnnot_GetAP',\n      '_FPDFAnnot_GetAttachmentPoints',\n      '_FPDFAnnot_GetBorder',\n      '_FPDFAnnot_GetColor',\n      '_FPDFAnnot_GetFileAttachment',\n      '_FPDFAnnot_GetFlags',\n      '_FPDFAnnot_GetFocusableSubtypes',\n      '_FPDFAnnot_GetFocusableSubtypesCount',\n      '_FPDFAnnot_GetFontColor',\n      '_FPDFAnnot_GetFontSize',\n      '_FPDFAnnot_GetFormAdditionalActionJavaScript',\n      '_FPDFAnnot_GetFormControlCount',\n      '_FPDFAnnot_GetFormControlIndex',\n      '_FPDFAnnot_GetFormFieldAlternateName',\n      '_FPDFAnnot_GetFormFieldAtPoint',\n      '_FPDFAnnot_GetFormFieldExportValue',\n      '_FPDFAnnot_GetFormFieldFlags',\n      '_FPDFAnnot_GetFormFieldName',\n      '_FPDFAnnot_GetFormFieldType',\n      '_FPDFAnnot_GetFormFieldValue',\n      '_FPDFAnnot_GetInkListCount',\n      '_FPDFAnnot_GetInkListPath',\n      '_FPDFAnnot_GetLine',\n      '_FPDFAnnot_GetLink',\n      '_FPDFAnnot_GetLinkedAnnot',\n      '_FPDFAnnot_GetNumberValue',\n      '_FPDFAnnot_GetObject',\n      '_FPDFAnnot_GetObjectCount',\n      '_FPDFAnnot_GetOptionCount',\n      '_FPDFAnnot_GetOptionLabel',\n      '_FPDFAnnot_GetRect',\n      '_FPDFAnnot_GetStringValue',\n      '_FPDFAnnot_GetSubtype',\n      '_FPDFAnnot_GetValueType',\n      '_FPDFAnnot_GetVertices',\n      '_FPDFAnnot_HasAttachmentPoints',\n      '_FPDFAnnot_HasKey',\n      '_FPDFAnnot_IsChecked',\n      '_FPDFAnnot_IsObjectSupportedSubtype',\n      '_FPDFAnnot_IsOptionSelected',\n      '_FPDFAnnot_IsSupportedSubtype',\n      '_FPDFAnnot_RemoveInkList',\n      '_FPDFAnnot_RemoveObject',\n      '_FPDFAnnot_SetAP',\n      '_FPDFAnnot_SetAttachmentPoints',\n      '_FPDFAnnot_SetBorder',\n      '_FPDFAnnot_SetColor',\n      '_FPDFAnnot_SetFlags',\n      '_FPDFAnnot_SetFocusableSubtypes',\n      '_FPDFAnnot_SetFontColor',\n      '_FPDFAnnot_SetFormFieldFlags',\n      '_FPDFAnnot_SetRect',\n      '_FPDFAnnot_SetStringValue',\n      '_FPDFAnnot_SetURI',\n      '_FPDFAnnot_UpdateObject',\n      '_FPDFAttachment_GetFile',\n      '_FPDFAttachment_GetName',\n      '_FPDFAttachment_GetStringValue',\n      '_FPDFAttachment_GetSubtype',\n      '_FPDFAttachment_GetValueType',\n      '_FPDFAttachment_HasKey',\n      '_FPDFAttachment_SetFile',\n      '_FPDFAttachment_SetStringValue',\n      '_FPDFAvail_Create',\n      '_FPDFAvail_Destroy',\n      '_FPDFAvail_GetDocument',\n      '_FPDFAvail_GetFirstPageNum',\n      '_FPDFAvail_IsDocAvail',\n      '_FPDFAvail_IsFormAvail',\n      '_FPDFAvail_IsLinearized',\n      '_FPDFAvail_IsPageAvail',\n      '_FPDFBitmap_Create',\n      '_FPDFBitmap_CreateEx',\n      '_FPDFBitmap_Destroy',\n      '_FPDFBitmap_FillRect',\n      '_FPDFBitmap_GetBuffer',\n      '_FPDFBitmap_GetFormat',\n      '_FPDFBitmap_GetHeight',\n      '_FPDFBitmap_GetStride',\n      '_FPDFBitmap_GetWidth',\n      '_FPDFBookmark_Find',\n      '_FPDFBookmark_GetAction',\n      '_FPDFBookmark_GetCount',\n      '_FPDFBookmark_GetDest',\n      '_FPDFBookmark_GetFirstChild',\n      '_FPDFBookmark_GetNextSibling',\n      '_FPDFBookmark_GetTitle',\n      '_FPDFCatalog_IsTagged',\n      '_FPDFCatalog_SetLanguage',\n      '_FPDFClipPath_CountPaths',\n      '_FPDFClipPath_CountPathSegments',\n      '_FPDFClipPath_GetPathSegment',\n      '_FPDFDest_GetDestPageIndex',\n      '_FPDFDest_GetLocationInPage',\n      '_FPDFDest_GetView',\n      '_FPDFDoc_AddAttachment',\n      '_FPDFDoc_CloseJavaScriptAction',\n      '_FPDFDoc_DeleteAttachment',\n      '_FPDFDOC_ExitFormFillEnvironment',\n      '_FPDFDoc_GetAttachment',\n      '_FPDFDoc_GetAttachmentCount',\n      '_FPDFDoc_GetJavaScriptAction',\n      '_FPDFDoc_GetJavaScriptActionCount',\n      '_FPDFDoc_GetPageMode',\n      '_FPDFDOC_InitFormFillEnvironment',\n      '_FPDFFont_Close',\n      '_FPDFFont_GetAscent',\n      '_FPDFFont_GetBaseFontName',\n      '_FPDFFont_GetDescent',\n      '_FPDFFont_GetFamilyName',\n      '_FPDFFont_GetFlags',\n      '_FPDFFont_GetFontData',\n      '_FPDFFont_GetGlyphPath',\n      '_FPDFFont_GetGlyphWidth',\n      '_FPDFFont_GetIsEmbedded',\n      '_FPDFFont_GetItalicAngle',\n      '_FPDFFont_GetWeight',\n      '_FPDFFormObj_CountObjects',\n      '_FPDFFormObj_GetObject',\n      '_FPDFFormObj_RemoveObject',\n      '_FPDFGlyphPath_CountGlyphSegments',\n      '_FPDFGlyphPath_GetGlyphPathSegment',\n      '_FPDFImageObj_GetBitmap',\n      '_FPDFImageObj_GetIccProfileDataDecoded',\n      '_FPDFImageObj_GetImageDataDecoded',\n      '_FPDFImageObj_GetImageDataRaw',\n      '_FPDFImageObj_GetImageFilter',\n      '_FPDFImageObj_GetImageFilterCount',\n      '_FPDFImageObj_GetImageMetadata',\n      '_FPDFImageObj_GetImagePixelSize',\n      '_FPDFImageObj_GetRenderedBitmap',\n      '_FPDFImageObj_LoadJpegFile',\n      '_FPDFImageObj_LoadJpegFileInline',\n      '_FPDFImageObj_SetBitmap',\n      '_FPDFImageObj_SetMatrix',\n      '_FPDFJavaScriptAction_GetName',\n      '_FPDFJavaScriptAction_GetScript',\n      '_FPDFLink_CloseWebLinks',\n      '_FPDFLink_CountQuadPoints',\n      '_FPDFLink_CountRects',\n      '_FPDFLink_CountWebLinks',\n      '_FPDFLink_Enumerate',\n      '_FPDFLink_GetAction',\n      '_FPDFLink_GetAnnot',\n      '_FPDFLink_GetAnnotRect',\n      '_FPDFLink_GetDest',\n      '_FPDFLink_GetLinkAtPoint',\n      '_FPDFLink_GetLinkZOrderAtPoint',\n      '_FPDFLink_GetQuadPoints',\n      '_FPDFLink_GetRect',\n      '_FPDFLink_GetTextRange',\n      '_FPDFLink_GetURL',\n      '_FPDFLink_LoadWebLinks',\n      '_FPDFPage_CloseAnnot',\n      '_FPDFPage_CountObjects',\n      '_FPDFPage_CreateAnnot',\n      '_FPDFPage_Delete',\n      '_FPDFPage_Flatten',\n      '_FPDFPage_FormFieldZOrderAtPoint',\n      '_FPDFPage_GenerateContent',\n      '_FPDFPage_GetAnnot',\n      '_FPDFPage_GetAnnotCount',\n      '_FPDFPage_GetAnnotIndex',\n      '_FPDFPage_GetArtBox',\n      '_FPDFPage_GetBleedBox',\n      '_FPDFPage_GetCropBox',\n      '_FPDFPage_GetDecodedThumbnailData',\n      '_FPDFPage_GetMediaBox',\n      '_FPDFPage_GetObject',\n      '_FPDFPage_GetRawThumbnailData',\n      '_FPDFPage_GetRotation',\n      '_FPDFPage_GetThumbnailAsBitmap',\n      '_FPDFPage_GetTrimBox',\n      '_FPDFPage_HasFormFieldAtPoint',\n      '_FPDFPage_HasTransparency',\n      '_FPDFPage_InsertClipPath',\n      '_FPDFPage_InsertObject',\n      '_FPDFPage_InsertObjectAtIndex',\n      '_FPDFPage_New',\n      '_FPDFPage_RemoveAnnot',\n      '_FPDFPage_RemoveObject',\n      '_FPDFPage_SetArtBox',\n      '_FPDFPage_SetBleedBox',\n      '_FPDFPage_SetCropBox',\n      '_FPDFPage_SetMediaBox',\n      '_FPDFPage_SetRotation',\n      '_FPDFPage_SetTrimBox',\n      '_FPDFPage_TransformAnnots',\n      '_FPDFPage_TransFormWithClip',\n      '_FPDFPageObj_AddMark',\n      '_FPDFPageObj_CountMarks',\n      '_FPDFPageObj_CreateNewPath',\n      '_FPDFPageObj_CreateNewRect',\n      '_FPDFPageObj_CreateTextObj',\n      '_FPDFPageObj_Destroy',\n      '_FPDFPageObj_GetBounds',\n      '_FPDFPageObj_GetClipPath',\n      '_FPDFPageObj_GetDashArray',\n      '_FPDFPageObj_GetDashCount',\n      '_FPDFPageObj_GetDashPhase',\n      '_FPDFPageObj_GetFillColor',\n      '_FPDFPageObj_GetIsActive',\n      '_FPDFPageObj_GetLineCap',\n      '_FPDFPageObj_GetLineJoin',\n      '_FPDFPageObj_GetMark',\n      '_FPDFPageObj_GetMarkedContentID',\n      '_FPDFPageObj_GetMatrix',\n      '_FPDFPageObj_GetRotatedBounds',\n      '_FPDFPageObj_GetStrokeColor',\n      '_FPDFPageObj_GetStrokeWidth',\n      '_FPDFPageObj_GetType',\n      '_FPDFPageObj_HasTransparency',\n      '_FPDFPageObj_NewImageObj',\n      '_FPDFPageObj_NewTextObj',\n      '_FPDFPageObj_RemoveMark',\n      '_FPDFPageObj_SetBlendMode',\n      '_FPDFPageObj_SetDashArray',\n      '_FPDFPageObj_SetDashPhase',\n      '_FPDFPageObj_SetFillColor',\n      '_FPDFPageObj_SetIsActive',\n      '_FPDFPageObj_SetLineCap',\n      '_FPDFPageObj_SetLineJoin',\n      '_FPDFPageObj_SetMatrix',\n      '_FPDFPageObj_SetStrokeColor',\n      '_FPDFPageObj_SetStrokeWidth',\n      '_FPDFPageObj_Transform',\n      '_FPDFPageObj_TransformClipPath',\n      '_FPDFPageObj_TransformF',\n      '_FPDFPageObjMark_CountParams',\n      '_FPDFPageObjMark_GetName',\n      '_FPDFPageObjMark_GetParamBlobValue',\n      '_FPDFPageObjMark_GetParamIntValue',\n      '_FPDFPageObjMark_GetParamKey',\n      '_FPDFPageObjMark_GetParamStringValue',\n      '_FPDFPageObjMark_GetParamValueType',\n      '_FPDFPageObjMark_RemoveParam',\n      '_FPDFPageObjMark_SetBlobParam',\n      '_FPDFPageObjMark_SetIntParam',\n      '_FPDFPageObjMark_SetStringParam',\n      '_FPDFPath_BezierTo',\n      '_FPDFPath_Close',\n      '_FPDFPath_CountSegments',\n      '_FPDFPath_GetDrawMode',\n      '_FPDFPath_GetPathSegment',\n      '_FPDFPath_LineTo',\n      '_FPDFPath_MoveTo',\n      '_FPDFPath_SetDrawMode',\n      '_FPDFPathSegment_GetClose',\n      '_FPDFPathSegment_GetPoint',\n      '_FPDFPathSegment_GetType',\n      '_FPDFSignatureObj_GetByteRange',\n      '_FPDFSignatureObj_GetContents',\n      '_FPDFSignatureObj_GetDocMDPPermission',\n      '_FPDFSignatureObj_GetReason',\n      '_FPDFSignatureObj_GetSubFilter',\n      '_FPDFSignatureObj_GetTime',\n      '_FPDFText_ClosePage',\n      '_FPDFText_CountChars',\n      '_FPDFText_CountRects',\n      '_FPDFText_FindClose',\n      '_FPDFText_FindNext',\n      '_FPDFText_FindPrev',\n      '_FPDFText_FindStart',\n      '_FPDFText_GetBoundedText',\n      '_FPDFText_GetCharAngle',\n      '_FPDFText_GetCharBox',\n      '_FPDFText_GetCharIndexAtPos',\n      '_FPDFText_GetCharIndexFromTextIndex',\n      '_FPDFText_GetCharOrigin',\n      '_FPDFText_GetFillColor',\n      '_FPDFText_GetFontInfo',\n      '_FPDFText_GetFontSize',\n      '_FPDFText_GetFontWeight',\n      '_FPDFText_GetLooseCharBox',\n      '_FPDFText_GetMatrix',\n      '_FPDFText_GetRect',\n      '_FPDFText_GetSchCount',\n      '_FPDFText_GetSchResultIndex',\n      '_FPDFText_GetStrokeColor',\n      '_FPDFText_GetText',\n      '_FPDFText_GetTextIndexFromCharIndex',\n      '_FPDFText_GetTextObject',\n      '_FPDFText_GetUnicode',\n      '_FPDFText_HasUnicodeMapError',\n      '_FPDFText_IsGenerated',\n      '_FPDFText_IsHyphen',\n      '_FPDFText_LoadCidType2Font',\n      '_FPDFText_LoadFont',\n      '_FPDFText_LoadPage',\n      '_FPDFText_LoadStandardFont',\n      '_FPDFText_SetCharcodes',\n      '_FPDFText_SetText',\n      '_FPDFTextObj_GetFont',\n      '_FPDFTextObj_GetFontSize',\n      '_FPDFTextObj_GetRenderedBitmap',\n      '_FPDFTextObj_GetText',\n      '_FPDFTextObj_GetTextRenderMode',\n      '_FPDFTextObj_SetTextRenderMode',\n      '_PDFiumExt_CloseFileWriter',\n      '_PDFiumExt_CloseFormFillInfo',\n      '_PDFiumExt_ExitFormFillEnvironment',\n      '_PDFiumExt_GetFileWriterData',\n      '_PDFiumExt_GetFileWriterSize',\n      '_PDFiumExt_Init',\n      '_PDFiumExt_InitFormFillEnvironment',\n      '_PDFiumExt_OpenFileWriter',\n      '_PDFiumExt_OpenFormFillInfo',\n      '_PDFiumExt_SaveAsCopy',\n      '_malloc',\n      '_free',\n      '_memory',\n      '___indirect_function_table',\n      'onRuntimeInitialized',\n    ].forEach((prop) => {\n      if (!Object.getOwnPropertyDescriptor(readyPromise, prop)) {\n        Object.defineProperty(readyPromise, prop, {\n          get: () =>\n            abort(\n              'You are getting ' +\n                prop +\n                ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js',\n            ),\n          set: () =>\n            abort(\n              'You are setting ' +\n                prop +\n                ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js',\n            ),\n        });\n      }\n    });\n\n    // Determine the runtime environment we are in. You can customize this by\n    // setting the ENVIRONMENT setting at compile time (see settings.js).\n\n    // Attempt to auto-detect the environment\n    var ENVIRONMENT_IS_WEB = typeof window == 'object';\n    var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function';\n    // N.b. Electron.js environment is simultaneously a NODE-environment, but\n    // also a web environment.\n    typeof process == 'object' &&\n      typeof process.versions == 'object' &&\n      typeof process.versions.node == 'string' &&\n      process.type != 'renderer';\n    var ENVIRONMENT_IS_SHELL =\n      !ENVIRONMENT_IS_WEB && !false && !ENVIRONMENT_IS_WORKER;\n\n    var require; \n\n    // --pre-jses are emitted after the Module integration code, so that they can\n    // refer to Module (if they choose; they can also define Module)\n\n    // Sometimes an existing Module object exists with properties\n    // meant to overwrite the default module functionality. Here\n    // we collect those properties and reapply _after_ we configure\n    // the current environment's defaults to avoid having to be so\n    // defensive during initialization.\n    var moduleOverrides = Object.assign({}, Module);\n    var thisProgram = './this.program';\n\n    // `/` should be present at the end if `scriptDirectory` is not empty\n    var scriptDirectory = '';\n    function locateFile(path) {\n      if (Module['locateFile']) {\n        return Module['locateFile'](path, scriptDirectory);\n      }\n      return scriptDirectory + path;\n    }\n\n    // Hooks that are implemented differently in different runtime environments.\n    var readAsync, readBinary;\n\n    if (ENVIRONMENT_IS_SHELL) {\n      if (\n        (typeof process == 'object' && typeof require === 'function') ||\n        typeof window == 'object' ||\n        typeof importScripts == 'function'\n      )\n        throw new Error(\n          'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)',\n        );\n\n      readBinary = (f) => {\n        if (typeof readbuffer == 'function') {\n          return new Uint8Array(readbuffer(f));\n        }\n        let data = read(f, 'binary');\n        assert(typeof data == 'object');\n        return data;\n      };\n\n      readAsync = (f) => {\n        return new Promise((resolve, reject) => {\n          setTimeout(() => resolve(readBinary(f)));\n        });\n      };\n\n      globalThis.clearTimeout ??= (id) => {};\n\n      // spidermonkey lacks setTimeout but we use it above in readAsync.\n      globalThis.setTimeout ??= (f) => (typeof f == 'function' ? f() : abort());\n\n      if (typeof print != 'undefined') {\n        // Prefer to use print/printErr where they exist, as they usually work better.\n        globalThis.console ??= /** @type{!Console} */ ({});\n        console.log = /** @type{!function(this:Console, ...*): undefined} */ (print);\n        console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (\n          globalThis.printErr ?? print\n        );\n      }\n    } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n      // Note that this includes Node.js workers when relevant (pthreads is enabled).\n      // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and\n      // ENVIRONMENT_IS_NODE.\n      if (ENVIRONMENT_IS_WORKER) {\n        // Check worker, not web, since window could be polyfilled\n        scriptDirectory = self.location.href;\n      } else if (typeof document != 'undefined' && document.currentScript) {\n        // web\n        scriptDirectory = document.currentScript.src;\n      }\n      // When MODULARIZE, this JS may be executed later, after document.currentScript\n      // is gone, so we saved it, and we use it here instead of any other info.\n      if (_scriptName) {\n        scriptDirectory = _scriptName;\n      }\n      // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\n      // otherwise, slice off the final part of the url to find the script directory.\n      // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\n      // and scriptDirectory will correctly be replaced with an empty string.\n      // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #),\n      // they are removed because they could contain a slash.\n      if (scriptDirectory.startsWith('blob:')) {\n        scriptDirectory = '';\n      } else {\n        scriptDirectory = scriptDirectory.substr(\n          0,\n          scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/') + 1,\n        );\n      }\n\n      if (!(typeof window == 'object' || typeof importScripts == 'function'))\n        throw new Error(\n          'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)',\n        );\n\n      {\n        // include: web_or_worker_shell_read.js\n        if (ENVIRONMENT_IS_WORKER) {\n          readBinary = (url) => {\n            var xhr = new XMLHttpRequest();\n            xhr.open('GET', url, false);\n            xhr.responseType = 'arraybuffer';\n            xhr.send(null);\n            return new Uint8Array(/** @type{!ArrayBuffer} */ (xhr.response));\n          };\n        }\n\n        readAsync = (url) => {\n          assert(!isFileURI(url), 'readAsync does not work with file:// URLs');\n          return fetch(url, { credentials: 'same-origin' }).then((response) => {\n            if (response.ok) {\n              return response.arrayBuffer();\n            }\n            return Promise.reject(new Error(response.status + ' : ' + response.url));\n          });\n        };\n        // end include: web_or_worker_shell_read.js\n      }\n    } else {\n      throw new Error('environment detection error');\n    }\n\n    var out = Module['print'] || console.log.bind(console);\n    var err = Module['printErr'] || console.error.bind(console);\n\n    // Merge back in the overrides\n    Object.assign(Module, moduleOverrides);\n    // Free the object hierarchy contained in the overrides, this lets the GC\n    // reclaim data used.\n    moduleOverrides = null;\n    checkIncomingModuleAPI();\n\n    // Emit code to handle expected values on the Module object. This applies Module.x\n    // to the proper local x. This has two benefits: first, we only emit it if it is\n    // expected to arrive, and second, by using a local everywhere else that can be\n    // minified.\n\n    if (Module['arguments']) Module['arguments'];\n    legacyModuleProp('arguments', 'arguments_');\n\n    if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n    legacyModuleProp('thisProgram', 'thisProgram');\n\n    // perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\n    // Assertions on removed incoming Module JS APIs.\n    assert(\n      typeof Module['memoryInitializerPrefixURL'] == 'undefined',\n      'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(\n      typeof Module['pthreadMainPrefixURL'] == 'undefined',\n      'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(\n      typeof Module['cdInitializerPrefixURL'] == 'undefined',\n      'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(\n      typeof Module['filePackagePrefixURL'] == 'undefined',\n      'Module.filePackagePrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(typeof Module['read'] == 'undefined', 'Module.read option was removed');\n    assert(\n      typeof Module['readAsync'] == 'undefined',\n      'Module.readAsync option was removed (modify readAsync in JS)',\n    );\n    assert(\n      typeof Module['readBinary'] == 'undefined',\n      'Module.readBinary option was removed (modify readBinary in JS)',\n    );\n    assert(\n      typeof Module['setWindowTitle'] == 'undefined',\n      'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)',\n    );\n    assert(\n      typeof Module['TOTAL_MEMORY'] == 'undefined',\n      'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY',\n    );\n    legacyModuleProp('asm', 'wasmExports');\n    legacyModuleProp('readAsync', 'readAsync');\n    legacyModuleProp('readBinary', 'readBinary');\n    legacyModuleProp('setWindowTitle', 'setWindowTitle');\n\n    // end include: shell.js\n\n    // include: preamble.js\n    // === Preamble library stuff ===\n\n    // Documentation for the public APIs defined in this file must be updated in:\n    //    site/source/docs/api_reference/preamble.js.rst\n    // A prebuilt local version of the documentation is available at:\n    //    site/build/text/docs/api_reference/preamble.js.txt\n    // You can also build docs locally as HTML or other formats in site/\n    // An online HTML version (which may be of a different version of Emscripten)\n    //    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\n\n    var wasmBinary = Module['wasmBinary'];\n    legacyModuleProp('wasmBinary', 'wasmBinary');\n\n    if (typeof WebAssembly != 'object') {\n      err('no native wasm support detected');\n    }\n\n    // Wasm globals\n\n    var wasmMemory;\n\n    //========================================\n    // Runtime essentials\n    //========================================\n\n    // whether we are quitting the application. no code should run after this.\n    // set in exit() and abort()\n    var ABORT = false;\n\n    // In STRICT mode, we only define assert() when ASSERTIONS is set.  i.e. we\n    // don't define it at all in release modes.  This matches the behaviour of\n    // MINIMAL_RUNTIME.\n    // TODO(sbc): Make this the default even without STRICT enabled.\n    /** @type {function(*, string=)} */\n    function assert(condition, text) {\n      if (!condition) {\n        abort('Assertion failed' + (text ? ': ' + text : ''));\n      }\n    }\n\n    // We used to include malloc/free by default in the past. Show a helpful error in\n    // builds with assertions.\n\n    // Memory management\n\n    var /** @type {!Int8Array} */\n      HEAP8,\n      /** @type {!Uint8Array} */\n      HEAPU8,\n      /** @type {!Int16Array} */\n      HEAP16,\n      /** @type {!Uint16Array} */\n      HEAPU16,\n      /** @type {!Int32Array} */\n      HEAP32,\n      /** @type {!Uint32Array} */\n      HEAPU32,\n      /** @type {!Float32Array} */\n      HEAPF32,\n      /** @type {!Float64Array} */\n      HEAPF64;\n\n    // include: runtime_shared.js\n    function updateMemoryViews() {\n      var b = wasmMemory.buffer;\n      Module['HEAP8'] = HEAP8 = new Int8Array(b);\n      Module['HEAP16'] = HEAP16 = new Int16Array(b);\n      Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);\n      Module['HEAPU16'] = HEAPU16 = new Uint16Array(b);\n      Module['HEAP32'] = HEAP32 = new Int32Array(b);\n      Module['HEAPU32'] = HEAPU32 = new Uint32Array(b);\n      Module['HEAPF32'] = HEAPF32 = new Float32Array(b);\n      Module['HEAPF64'] = HEAPF64 = new Float64Array(b);\n    }\n\n    // end include: runtime_shared.js\n    assert(\n      !Module['STACK_SIZE'],\n      'STACK_SIZE can no longer be set at runtime.  Use -sSTACK_SIZE at link time',\n    );\n\n    assert(\n      typeof Int32Array != 'undefined' &&\n        typeof Float64Array !== 'undefined' &&\n        Int32Array.prototype.subarray != undefined &&\n        Int32Array.prototype.set != undefined,\n      'JS engine does not provide full typed array support',\n    );\n\n    // If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY\n    assert(\n      !Module['wasmMemory'],\n      'Use of `wasmMemory` detected.  Use -sIMPORTED_MEMORY to define wasmMemory externally',\n    );\n    assert(\n      !Module['INITIAL_MEMORY'],\n      'Detected runtime INITIAL_MEMORY setting.  Use -sIMPORTED_MEMORY to define wasmMemory dynamically',\n    );\n\n    // include: runtime_stack_check.js\n    // Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.\n    function writeStackCookie() {\n      var max = _emscripten_stack_get_end();\n      assert((max & 3) == 0);\n      // If the stack ends at address zero we write our cookies 4 bytes into the\n      // stack.  This prevents interference with SAFE_HEAP and ASAN which also\n      // monitor writes to address zero.\n      if (max == 0) {\n        max += 4;\n      }\n      // The stack grow downwards towards _emscripten_stack_get_end.\n      // We write cookies to the final two words in the stack and detect if they are\n      // ever overwritten.\n      HEAPU32[max >> 2] = 0x02135467;\n      HEAPU32[(max + 4) >> 2] = 0x89bacdfe;\n      // Also test the global address 0 for integrity.\n      HEAPU32[0 >> 2] = 1668509029;\n    }\n\n    function checkStackCookie() {\n      if (ABORT) return;\n      var max = _emscripten_stack_get_end();\n      // See writeStackCookie().\n      if (max == 0) {\n        max += 4;\n      }\n      var cookie1 = HEAPU32[max >> 2];\n      var cookie2 = HEAPU32[(max + 4) >> 2];\n      if (cookie1 != 0x02135467 || cookie2 != 0x89bacdfe) {\n        abort(\n          `Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`,\n        );\n      }\n      // Also test the global address 0 for integrity.\n      if (HEAPU32[0 >> 2] != 0x63736d65 /* 'emsc' */) {\n        abort('Runtime error: The application has corrupted its heap memory area (address zero)!');\n      }\n    }\n    // end include: runtime_stack_check.js\n    var __ATPRERUN__ = []; // functions called before the runtime is initialized\n    var __ATINIT__ = []; // functions called during startup\n    var __ATPOSTRUN__ = []; // functions called after the main() is called\n\n    var runtimeInitialized = false;\n\n    function preRun() {\n      var preRuns = Module['preRun'];\n      if (preRuns) {\n        if (typeof preRuns == 'function') preRuns = [preRuns];\n        preRuns.forEach(addOnPreRun);\n      }\n      callRuntimeCallbacks(__ATPRERUN__);\n    }\n\n    function initRuntime() {\n      assert(!runtimeInitialized);\n      runtimeInitialized = true;\n\n      checkStackCookie();\n\n      if (!Module['noFSInit'] && !FS.initialized) FS.init();\n      FS.ignorePermissions = false;\n      callRuntimeCallbacks(__ATINIT__);\n    }\n\n    function postRun() {\n      checkStackCookie();\n\n      var postRuns = Module['postRun'];\n      if (postRuns) {\n        if (typeof postRuns == 'function') postRuns = [postRuns];\n        postRuns.forEach(addOnPostRun);\n      }\n\n      callRuntimeCallbacks(__ATPOSTRUN__);\n    }\n\n    function addOnPreRun(cb) {\n      __ATPRERUN__.unshift(cb);\n    }\n\n    function addOnInit(cb) {\n      __ATINIT__.unshift(cb);\n    }\n\n    function addOnPostRun(cb) {\n      __ATPOSTRUN__.unshift(cb);\n    }\n\n    // include: runtime_math.js\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc\n\n    assert(\n      Math.imul,\n      'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    assert(\n      Math.fround,\n      'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    assert(\n      Math.clz32,\n      'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    assert(\n      Math.trunc,\n      'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    // end include: runtime_math.js\n    // A counter of dependencies for calling run(). If we need to\n    // do asynchronous work before running, increment this and\n    // decrement it. Incrementing must happen in a place like\n    // Module.preRun (used by emcc to add file preloading).\n    // Note that you can add dependencies in preRun, even though\n    // it happens right before run - run will be postponed until\n    // the dependencies are met.\n    var runDependencies = 0;\n    var runDependencyWatcher = null;\n    var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\n    var runDependencyTracking = {};\n\n    function getUniqueRunDependency(id) {\n      var orig = id;\n      while (1) {\n        if (!runDependencyTracking[id]) return id;\n        id = orig + Math.random();\n      }\n    }\n\n    function addRunDependency(id) {\n      runDependencies++;\n\n      Module['monitorRunDependencies']?.(runDependencies);\n\n      if (id) {\n        assert(!runDependencyTracking[id]);\n        runDependencyTracking[id] = 1;\n        if (runDependencyWatcher === null && typeof setInterval != 'undefined') {\n          // Check for missing dependencies every few seconds\n          runDependencyWatcher = setInterval(() => {\n            if (ABORT) {\n              clearInterval(runDependencyWatcher);\n              runDependencyWatcher = null;\n              return;\n            }\n            var shown = false;\n            for (var dep in runDependencyTracking) {\n              if (!shown) {\n                shown = true;\n                err('still waiting on run dependencies:');\n              }\n              err(`dependency: ${dep}`);\n            }\n            if (shown) {\n              err('(end of list)');\n            }\n          }, 10000);\n        }\n      } else {\n        err('warning: run dependency added without ID');\n      }\n    }\n\n    function removeRunDependency(id) {\n      runDependencies--;\n\n      Module['monitorRunDependencies']?.(runDependencies);\n\n      if (id) {\n        assert(runDependencyTracking[id]);\n        delete runDependencyTracking[id];\n      } else {\n        err('warning: run dependency removed without ID');\n      }\n      if (runDependencies == 0) {\n        if (runDependencyWatcher !== null) {\n          clearInterval(runDependencyWatcher);\n          runDependencyWatcher = null;\n        }\n        if (dependenciesFulfilled) {\n          var callback = dependenciesFulfilled;\n          dependenciesFulfilled = null;\n          callback(); // can add another dependenciesFulfilled\n        }\n      }\n    }\n\n    /** @param {string|number=} what */\n    function abort(what) {\n      Module['onAbort']?.(what);\n\n      what = 'Aborted(' + what + ')';\n      // TODO(sbc): Should we remove printing and leave it up to whoever\n      // catches the exception?\n      err(what);\n\n      ABORT = true;\n\n      // Use a wasm runtime error, because a JS error might be seen as a foreign\n      // exception, which means we'd run destructors on it. We need the error to\n      // simply make the program stop.\n      // FIXME This approach does not work in Wasm EH because it currently does not assume\n      // all RuntimeErrors are from traps; it decides whether a RuntimeError is from\n      // a trap or not based on a hidden field within the object. So at the moment\n      // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that\n      // allows this in the wasm spec.\n\n      // Suppress closure compiler warning here. Closure compiler's builtin extern\n      // definition for WebAssembly.RuntimeError claims it takes no arguments even\n      // though it can.\n      // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.\n      /** @suppress {checkTypes} */\n      var e = new WebAssembly.RuntimeError(what);\n\n      readyPromiseReject(e);\n      // Throw the error whether or not MODULARIZE is set because abort is used\n      // in code paths apart from instantiation where an exception is expected\n      // to be thrown when abort is called.\n      throw e;\n    }\n\n    // include: memoryprofiler.js\n    // end include: memoryprofiler.js\n    // include: URIUtils.js\n    // Prefix of data URIs emitted by SINGLE_FILE and related options.\n    var dataURIPrefix = 'data:application/octet-stream;base64,';\n\n    /**\n     * Indicates whether filename is a base64 data URI.\n     * @noinline\n     */\n    var isDataURI = (filename) => filename.startsWith(dataURIPrefix);\n\n    /**\n     * Indicates whether filename is delivered via file protocol (as opposed to http/https)\n     * @noinline\n     */\n    var isFileURI = (filename) => filename.startsWith('file://');\n    // end include: URIUtils.js\n    function createExportWrapper(name, nargs) {\n      return (...args) => {\n        assert(\n          runtimeInitialized,\n          `native function \\`${name}\\` called before runtime initialization`,\n        );\n        var f = wasmExports[name];\n        assert(f, `exported native function \\`${name}\\` not found`);\n        // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled.\n        assert(\n          args.length <= nargs,\n          `native function \\`${name}\\` called with ${args.length} args but expects ${nargs}`,\n        );\n        return f(...args);\n      };\n    }\n\n    // include: runtime_exceptions.js\n    // end include: runtime_exceptions.js\n    function findWasmBinary() {\n      if (Module['locateFile']) {\n        var f = 'pdfium.wasm';\n        if (!isDataURI(f)) {\n          return locateFile(f);\n        }\n        return f;\n      }\n      if (ENVIRONMENT_IS_SHELL) return 'pdfium.wasm';\n      // Use bundler-friendly `new URL(..., import.meta.url)` pattern; works in browsers too.\n      return new URL('pdfium.wasm', import.meta.url).href;\n    }\n\n    var wasmBinaryFile;\n\n    function getBinarySync(file) {\n      if (file == wasmBinaryFile && wasmBinary) {\n        return new Uint8Array(wasmBinary);\n      }\n      if (readBinary) {\n        return readBinary(file);\n      }\n      throw 'both async and sync fetching of the wasm failed';\n    }\n\n    function getBinaryPromise(binaryFile) {\n      // If we don't have the binary yet, load it asynchronously using readAsync.\n      if (!wasmBinary) {\n        // Fetch the binary using readAsync\n        return readAsync(binaryFile).then(\n          (response) => new Uint8Array(/** @type{!ArrayBuffer} */ (response)),\n          // Fall back to getBinarySync if readAsync fails\n          () => getBinarySync(binaryFile),\n        );\n      }\n\n      // Otherwise, getBinarySync should be able to get it synchronously\n      return Promise.resolve().then(() => getBinarySync(binaryFile));\n    }\n\n    function instantiateArrayBuffer(binaryFile, imports, receiver) {\n      return getBinaryPromise(binaryFile)\n        .then((binary) => {\n          return WebAssembly.instantiate(binary, imports);\n        })\n        .then(receiver, (reason) => {\n          err(`failed to asynchronously prepare wasm: ${reason}`);\n\n          // Warn on some common problems.\n          if (isFileURI(wasmBinaryFile)) {\n            err(\n              `warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`,\n            );\n          }\n          abort(reason);\n        });\n    }\n\n    function instantiateAsync(binary, binaryFile, imports, callback) {\n      if (\n        !binary &&\n        typeof WebAssembly.instantiateStreaming == 'function' &&\n        !isDataURI(binaryFile) &&\n        // Avoid instantiateStreaming() on Node.js environment for now, as while\n        // Node.js v18.1.0 implements it, it does not have a full fetch()\n        // implementation yet.\n        //\n        // Reference:\n        //   https://github.com/emscripten-core/emscripten/pull/16917\n        !false &&\n        typeof fetch == 'function'\n      ) {\n        return fetch(binaryFile, { credentials: 'same-origin' }).then((response) => {\n          // Suppress closure warning here since the upstream definition for\n          // instantiateStreaming only allows Promise<Repsponse> rather than\n          // an actual Response.\n          // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed.\n          /** @suppress {checkTypes} */\n          var result = WebAssembly.instantiateStreaming(response, imports);\n\n          return result.then(callback, function (reason) {\n            // We expect the most common failure cause to be a bad MIME type for the binary,\n            // in which case falling back to ArrayBuffer instantiation should work.\n            err(`wasm streaming compile failed: ${reason}`);\n            err('falling back to ArrayBuffer instantiation');\n            return instantiateArrayBuffer(binaryFile, imports, callback);\n          });\n        });\n      }\n      return instantiateArrayBuffer(binaryFile, imports, callback);\n    }\n\n    function getWasmImports() {\n      // prepare imports\n      return {\n        env: wasmImports,\n        wasi_snapshot_preview1: wasmImports,\n      };\n    }\n\n    // Create the wasm instance.\n    // Receives the wasm imports, returns the exports.\n    function createWasm() {\n      var info = getWasmImports();\n      // Load the wasm module and create an instance of using native support in the JS engine.\n      // handle a generated wasm instance, receiving its exports and\n      // performing other necessary setup\n      /** @param {WebAssembly.Module=} module*/\n      function receiveInstance(instance, module) {\n        wasmExports = instance.exports;\n\n        Module['wasmExports'] = wasmExports;\n\n        wasmMemory = wasmExports['memory'];\n\n        assert(wasmMemory, 'memory not found in wasm exports');\n        updateMemoryViews();\n\n        wasmTable = wasmExports['__indirect_function_table'];\n\n        assert(wasmTable, 'table not found in wasm exports');\n\n        addOnInit(wasmExports['__wasm_call_ctors']);\n\n        removeRunDependency('wasm-instantiate');\n        return wasmExports;\n      }\n      // wait for the pthread pool (if any)\n      addRunDependency('wasm-instantiate');\n\n      // Prefer streaming instantiation if available.\n      // Async compilation can be confusing when an error on the page overwrites Module\n      // (for example, if the order of elements is wrong, and the one defining Module is\n      // later), so we save Module and check it later.\n      var trueModule = Module;\n      function receiveInstantiationResult(result) {\n        // 'result' is a ResultObject object which has both the module and instance.\n        // receiveInstance() will swap in the exports (to Module.asm) so they can be called\n        assert(\n          Module === trueModule,\n          'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?',\n        );\n        trueModule = null;\n        // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\n        // When the regression is fixed, can restore the above PTHREADS-enabled path.\n        receiveInstance(result['instance']);\n      }\n\n      // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\n      // to manually instantiate the Wasm module themselves. This allows pages to\n      // run the instantiation parallel to any other async startup actions they are\n      // performing.\n      // Also pthreads and wasm workers initialize the wasm instance through this\n      // path.\n      if (Module['instantiateWasm']) {\n        try {\n          return Module['instantiateWasm'](info, receiveInstance);\n        } catch (e) {\n          err(`Module.instantiateWasm callback failed with error: ${e}`);\n          // If instantiation fails, reject the module ready promise.\n          readyPromiseReject(e);\n        }\n      }\n\n      wasmBinaryFile ??= findWasmBinary();\n\n      // If instantiation fails, reject the module ready promise.\n      instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult).catch(\n        readyPromiseReject,\n      );\n      return {}; // no exports yet; we'll fill them in later\n    }\n\n    // Globals used by JS i64 conversions (see makeSetValue)\n    var tempDouble;\n    var tempI64;\n\n    // include: runtime_debug.js\n    // Endianness check\n    (() => {\n      var h16 = new Int16Array(1);\n      var h8 = new Int8Array(h16.buffer);\n      h16[0] = 0x6373;\n      if (h8[0] !== 0x73 || h8[1] !== 0x63)\n        throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)';\n    })();\n\n    if (Module['ENVIRONMENT']) {\n      throw new Error(\n        'Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)',\n      );\n    }\n\n    function legacyModuleProp(prop, newName, incoming = true) {\n      if (!Object.getOwnPropertyDescriptor(Module, prop)) {\n        Object.defineProperty(Module, prop, {\n          configurable: true,\n          get() {\n            let extra = incoming\n              ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)'\n              : '';\n            abort(`\\`Module.${prop}\\` has been replaced by \\`${newName}\\`` + extra);\n          },\n        });\n      }\n    }\n\n    function ignoredModuleProp(prop) {\n      if (Object.getOwnPropertyDescriptor(Module, prop)) {\n        abort(\n          `\\`Module.${prop}\\` was supplied but \\`${prop}\\` not included in INCOMING_MODULE_JS_API`,\n        );\n      }\n    }\n\n    // forcing the filesystem exports a few things by default\n    function isExportedByForceFilesystem(name) {\n      return (\n        name === 'FS_createPath' ||\n        name === 'FS_createDataFile' ||\n        name === 'FS_createPreloadedFile' ||\n        name === 'FS_unlink' ||\n        name === 'addRunDependency' ||\n        // The old FS has some functionality that WasmFS lacks.\n        name === 'FS_createLazyFile' ||\n        name === 'FS_createDevice' ||\n        name === 'removeRunDependency'\n      );\n    }\n\n    /**\n     * Intercept access to a global symbol.  This enables us to give informative\n     * warnings/errors when folks attempt to use symbols they did not include in\n     * their build, or no symbols that no longer exist.\n     */\n    function hookGlobalSymbolAccess(sym, func) {\n      if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) {\n        Object.defineProperty(globalThis, sym, {\n          configurable: true,\n          get() {\n            func();\n            return undefined;\n          },\n        });\n      }\n    }\n\n    function missingGlobal(sym, msg) {\n      hookGlobalSymbolAccess(sym, () => {\n        warnOnce(`\\`${sym}\\` is not longer defined by emscripten. ${msg}`);\n      });\n    }\n\n    missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer');\n    missingGlobal('asm', 'Please use wasmExports instead');\n\n    function missingLibrarySymbol(sym) {\n      hookGlobalSymbolAccess(sym, () => {\n        // Can't `abort()` here because it would break code that does runtime\n        // checks.  e.g. `if (typeof SDL === 'undefined')`.\n        var msg = `\\`${sym}\\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`;\n        // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in\n        // library.js, which means $name for a JS name with no prefix, or name\n        // for a JS name like _name.\n        var librarySymbol = sym;\n        if (!librarySymbol.startsWith('_')) {\n          librarySymbol = '$' + sym;\n        }\n        msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`;\n        if (isExportedByForceFilesystem(sym)) {\n          msg +=\n            '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';\n        }\n        warnOnce(msg);\n      });\n\n      // Any symbol that is not included from the JS library is also (by definition)\n      // not exported on the Module object.\n      unexportedRuntimeSymbol(sym);\n    }\n\n    function unexportedRuntimeSymbol(sym) {\n      if (!Object.getOwnPropertyDescriptor(Module, sym)) {\n        Object.defineProperty(Module, sym, {\n          configurable: true,\n          get() {\n            var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;\n            if (isExportedByForceFilesystem(sym)) {\n              msg +=\n                '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';\n            }\n            abort(msg);\n          },\n        });\n      }\n    }\n\n    var callRuntimeCallbacks = (callbacks) => {\n      // Pass the module as the first argument.\n      callbacks.forEach((f) => f(Module));\n    };\n\n    /**\n     * @param {number} ptr\n     * @param {string} type\n     */\n    function getValue(ptr, type = 'i8') {\n      if (type.endsWith('*')) type = '*';\n      switch (type) {\n        case 'i1':\n          return HEAP8[ptr];\n        case 'i8':\n          return HEAP8[ptr];\n        case 'i16':\n          return HEAP16[ptr >> 1];\n        case 'i32':\n          return HEAP32[ptr >> 2];\n        case 'i64':\n          abort('to do getValue(i64) use WASM_BIGINT');\n        case 'float':\n          return HEAPF32[ptr >> 2];\n        case 'double':\n          return HEAPF64[ptr >> 3];\n        case '*':\n          return HEAPU32[ptr >> 2];\n        default:\n          abort(`invalid type for getValue: ${type}`);\n      }\n    }\n\n    Module['noExitRuntime'] || true;\n\n    var ptrToString = (ptr) => {\n      assert(typeof ptr === 'number');\n      // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.\n      ptr >>>= 0;\n      return '0x' + ptr.toString(16).padStart(8, '0');\n    };\n\n    /**\n     * @param {number} ptr\n     * @param {number} value\n     * @param {string} type\n     */\n    function setValue(ptr, value, type = 'i8') {\n      if (type.endsWith('*')) type = '*';\n      switch (type) {\n        case 'i1':\n          HEAP8[ptr] = value;\n          break;\n        case 'i8':\n          HEAP8[ptr] = value;\n          break;\n        case 'i16':\n          HEAP16[ptr >> 1] = value;\n          break;\n        case 'i32':\n          HEAP32[ptr >> 2] = value;\n          break;\n        case 'i64':\n          abort('to do setValue(i64) use WASM_BIGINT');\n        case 'float':\n          HEAPF32[ptr >> 2] = value;\n          break;\n        case 'double':\n          HEAPF64[ptr >> 3] = value;\n          break;\n        case '*':\n          HEAPU32[ptr >> 2] = value;\n          break;\n        default:\n          abort(`invalid type for setValue: ${type}`);\n      }\n    }\n\n    var stackRestore = (val) => __emscripten_stack_restore(val);\n\n    var stackSave = () => _emscripten_stack_get_current();\n\n    var warnOnce = (text) => {\n      warnOnce.shown ||= {};\n      if (!warnOnce.shown[text]) {\n        warnOnce.shown[text] = 1;\n        err(text);\n      }\n    };\n\n    var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined;\n\n    /**\n     * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given\n     * array that contains uint8 values, returns a copy of that string as a\n     * Javascript String object.\n     * heapOrArray is either a regular array, or a JavaScript typed array view.\n     * @param {number=} idx\n     * @param {number=} maxBytesToRead\n     * @return {string}\n     */\n    var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => {\n      var endIdx = idx + maxBytesToRead;\n      var endPtr = idx;\n      // TextDecoder needs to know the byte length in advance, it doesn't stop on\n      // null terminator by itself.  Also, use the length info to avoid running tiny\n      // strings through TextDecoder, since .subarray() allocates garbage.\n      // (As a tiny code save trick, compare endPtr against endIdx using a negation,\n      // so that undefined/NaN means Infinity)\n      while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n\n      if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n        return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n      }\n      var str = '';\n      // If building with TextDecoder, we have already computed the string length\n      // above, so test loop end condition against that\n      while (idx < endPtr) {\n        // For UTF8 byte structure, see:\n        // http://en.wikipedia.org/wiki/UTF-8#Description\n        // https://www.ietf.org/rfc/rfc2279.txt\n        // https://tools.ietf.org/html/rfc3629\n        var u0 = heapOrArray[idx++];\n        if (!(u0 & 0x80)) {\n          str += String.fromCharCode(u0);\n          continue;\n        }\n        var u1 = heapOrArray[idx++] & 63;\n        if ((u0 & 0xe0) == 0xc0) {\n          str += String.fromCharCode(((u0 & 31) << 6) | u1);\n          continue;\n        }\n        var u2 = heapOrArray[idx++] & 63;\n        if ((u0 & 0xf0) == 0xe0) {\n          u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n        } else {\n          if ((u0 & 0xf8) != 0xf0)\n            warnOnce(\n              'Invalid UTF-8 leading byte ' +\n                ptrToString(u0) +\n                ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!',\n            );\n          u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n        }\n\n        if (u0 < 0x10000) {\n          str += String.fromCharCode(u0);\n        } else {\n          var ch = u0 - 0x10000;\n          str += String.fromCharCode(0xd800 | (ch >> 10), 0xdc00 | (ch & 0x3ff));\n        }\n      }\n      return str;\n    };\n\n    /**\n     * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the\n     * emscripten HEAP, returns a copy of that string as a Javascript String object.\n     *\n     * @param {number} ptr\n     * @param {number=} maxBytesToRead - An optional length that specifies the\n     *   maximum number of bytes to read. You can omit this parameter to scan the\n     *   string until the first 0 byte. If maxBytesToRead is passed, and the string\n     *   at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the\n     *   string will cut short at that byte index (i.e. maxBytesToRead will not\n     *   produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing\n     *   frequent uses of UTF8ToString() with and without maxBytesToRead may throw\n     *   JS JIT optimizations off, so it is worth to consider consistently using one\n     * @return {string}\n     */\n    var UTF8ToString = (ptr, maxBytesToRead) => {\n      assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`);\n      return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\n    };\n    var ___assert_fail = (condition, filename, line, func) => {\n      abort(\n        `Assertion failed: ${UTF8ToString(condition)}, at: ` +\n          [\n            filename ? UTF8ToString(filename) : 'unknown filename',\n            line,\n            func ? UTF8ToString(func) : 'unknown function',\n          ],\n      );\n    };\n\n    /** @suppress {duplicate } */\n    function syscallGetVarargI() {\n      assert(SYSCALLS.varargs != undefined);\n      // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.\n      var ret = HEAP32[+SYSCALLS.varargs >> 2];\n      SYSCALLS.varargs += 4;\n      return ret;\n    }\n    var syscallGetVarargP = syscallGetVarargI;\n\n    var PATH = {\n      isAbs: (path) => path.charAt(0) === '/',\n      splitPath: (filename) => {\n        var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n        return splitPathRe.exec(filename).slice(1);\n      },\n      normalizeArray: (parts, allowAboveRoot) => {\n        // if the path tries to go above the root, `up` ends up > 0\n        var up = 0;\n        for (var i = parts.length - 1; i >= 0; i--) {\n          var last = parts[i];\n          if (last === '.') {\n            parts.splice(i, 1);\n          } else if (last === '..') {\n            parts.splice(i, 1);\n            up++;\n          } else if (up) {\n            parts.splice(i, 1);\n            up--;\n          }\n        }\n        // if the path is allowed to go above the root, restore leading ..s\n        if (allowAboveRoot) {\n          for (; up; up--) {\n            parts.unshift('..');\n          }\n        }\n        return parts;\n      },\n      normalize: (path) => {\n        var isAbsolute = PATH.isAbs(path),\n          trailingSlash = path.substr(-1) === '/';\n        // Normalize the path\n        path = PATH.normalizeArray(\n          path.split('/').filter((p) => !!p),\n          !isAbsolute,\n        ).join('/');\n        if (!path && !isAbsolute) {\n          path = '.';\n        }\n        if (path && trailingSlash) {\n          path += '/';\n        }\n        return (isAbsolute ? '/' : '') + path;\n      },\n      dirname: (path) => {\n        var result = PATH.splitPath(path),\n          root = result[0],\n          dir = result[1];\n        if (!root && !dir) {\n          // No dirname whatsoever\n          return '.';\n        }\n        if (dir) {\n          // It has a dirname, strip trailing slash\n          dir = dir.substr(0, dir.length - 1);\n        }\n        return root + dir;\n      },\n      basename: (path) => {\n        // EMSCRIPTEN return '/'' for '/', not an empty string\n        if (path === '/') return '/';\n        path = PATH.normalize(path);\n        path = path.replace(/\\/$/, '');\n        var lastSlash = path.lastIndexOf('/');\n        if (lastSlash === -1) return path;\n        return path.substr(lastSlash + 1);\n      },\n      join: (...paths) => PATH.normalize(paths.join('/')),\n      join2: (l, r) => PATH.normalize(l + '/' + r),\n    };\n\n    var initRandomFill = () => {\n      if (typeof crypto == 'object' && typeof crypto['getRandomValues'] == 'function') {\n        // for modern web browsers\n        return (view) => crypto.getRandomValues(view);\n      }\n      // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096\n      abort(\n        'no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: (array) => { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };',\n      );\n    };\n    var randomFill = (view) => {\n      // Lazily init on the first invocation.\n      return (randomFill = initRandomFill())(view);\n    };\n\n    var PATH_FS = {\n      resolve: (...args) => {\n        var resolvedPath = '',\n          resolvedAbsolute = false;\n        for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n          var path = i >= 0 ? args[i] : FS.cwd();\n          // Skip empty and invalid entries\n          if (typeof path != 'string') {\n            throw new TypeError('Arguments to path.resolve must be strings');\n          } else if (!path) {\n            return ''; // an invalid portion invalidates the whole thing\n          }\n          resolvedPath = path + '/' + resolvedPath;\n          resolvedAbsolute = PATH.isAbs(path);\n        }\n        // At this point the path should be resolved to a full absolute path, but\n        // handle relative paths to be safe (might happen when process.cwd() fails)\n        resolvedPath = PATH.normalizeArray(\n          resolvedPath.split('/').filter((p) => !!p),\n          !resolvedAbsolute,\n        ).join('/');\n        return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n      },\n      relative: (from, to) => {\n        from = PATH_FS.resolve(from).substr(1);\n        to = PATH_FS.resolve(to).substr(1);\n        function trim(arr) {\n          var start = 0;\n          for (; start < arr.length; start++) {\n            if (arr[start] !== '') break;\n          }\n          var end = arr.length - 1;\n          for (; end >= 0; end--) {\n            if (arr[end] !== '') break;\n          }\n          if (start > end) return [];\n          return arr.slice(start, end - start + 1);\n        }\n        var fromParts = trim(from.split('/'));\n        var toParts = trim(to.split('/'));\n        var length = Math.min(fromParts.length, toParts.length);\n        var samePartsLength = length;\n        for (var i = 0; i < length; i++) {\n          if (fromParts[i] !== toParts[i]) {\n            samePartsLength = i;\n            break;\n          }\n        }\n        var outputParts = [];\n        for (var i = samePartsLength; i < fromParts.length; i++) {\n          outputParts.push('..');\n        }\n        outputParts = outputParts.concat(toParts.slice(samePartsLength));\n        return outputParts.join('/');\n      },\n    };\n\n    var FS_stdin_getChar_buffer = [];\n\n    var lengthBytesUTF8 = (str) => {\n      var len = 0;\n      for (var i = 0; i < str.length; ++i) {\n        // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code\n        // unit, not a Unicode code point of the character! So decode\n        // UTF16->UTF32->UTF8.\n        // See http://unicode.org/faq/utf_bom.html#utf16-3\n        var c = str.charCodeAt(i); // possibly a lead surrogate\n        if (c <= 0x7f) {\n          len++;\n        } else if (c <= 0x7ff) {\n          len += 2;\n        } else if (c >= 0xd800 && c <= 0xdfff) {\n          len += 4;\n          ++i;\n        } else {\n          len += 3;\n        }\n      }\n      return len;\n    };\n\n    var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n      assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`);\n      // Parameter maxBytesToWrite is not optional. Negative values, 0, null,\n      // undefined and false each don't write out any bytes.\n      if (!(maxBytesToWrite > 0)) return 0;\n\n      var startIdx = outIdx;\n      var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\n      for (var i = 0; i < str.length; ++i) {\n        // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code\n        // unit, not a Unicode code point of the character! So decode\n        // UTF16->UTF32->UTF8.\n        // See http://unicode.org/faq/utf_bom.html#utf16-3\n        // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description\n        // and https://www.ietf.org/rfc/rfc2279.txt\n        // and https://tools.ietf.org/html/rfc3629\n        var u = str.charCodeAt(i); // possibly a lead surrogate\n        if (u >= 0xd800 && u <= 0xdfff) {\n          var u1 = str.charCodeAt(++i);\n          u = (0x10000 + ((u & 0x3ff) << 10)) | (u1 & 0x3ff);\n        }\n        if (u <= 0x7f) {\n          if (outIdx >= endIdx) break;\n          heap[outIdx++] = u;\n        } else if (u <= 0x7ff) {\n          if (outIdx + 1 >= endIdx) break;\n          heap[outIdx++] = 0xc0 | (u >> 6);\n          heap[outIdx++] = 0x80 | (u & 63);\n        } else if (u <= 0xffff) {\n          if (outIdx + 2 >= endIdx) break;\n          heap[outIdx++] = 0xe0 | (u >> 12);\n          heap[outIdx++] = 0x80 | ((u >> 6) & 63);\n          heap[outIdx++] = 0x80 | (u & 63);\n        } else {\n          if (outIdx + 3 >= endIdx) break;\n          if (u > 0x10ffff)\n            warnOnce(\n              'Invalid Unicode code point ' +\n                ptrToString(u) +\n                ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).',\n            );\n          heap[outIdx++] = 0xf0 | (u >> 18);\n          heap[outIdx++] = 0x80 | ((u >> 12) & 63);\n          heap[outIdx++] = 0x80 | ((u >> 6) & 63);\n          heap[outIdx++] = 0x80 | (u & 63);\n        }\n      }\n      // Null-terminate the pointer to the buffer.\n      heap[outIdx] = 0;\n      return outIdx - startIdx;\n    };\n    /** @type {function(string, boolean=, number=)} */\n    function intArrayFromString(stringy, dontAddNull, length) {\n      var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;\n      var u8array = new Array(len);\n      var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n      if (dontAddNull) u8array.length = numBytesWritten;\n      return u8array;\n    }\n    var FS_stdin_getChar = () => {\n      if (!FS_stdin_getChar_buffer.length) {\n        var result = null;\n        if (typeof window != 'undefined' && typeof window.prompt == 'function') {\n          // Browser.\n          result = window.prompt('Input: '); // returns null on cancel\n          if (result !== null) {\n            result += '\\n';\n          }\n        } else if (typeof readline == 'function') {\n          // Command line.\n          result = readline();\n          if (result) {\n            result += '\\n';\n          }\n        } else ;\n        if (!result) {\n          return null;\n        }\n        FS_stdin_getChar_buffer = intArrayFromString(result, true);\n      }\n      return FS_stdin_getChar_buffer.shift();\n    };\n    var TTY = {\n      ttys: [],\n      init() {\n        // https://github.com/emscripten-core/emscripten/pull/1555\n        // if (false) {\n        //   // currently, FS.init does not distinguish if process.stdin is a file or TTY\n        //   // device, it always assumes it's a TTY device. because of this, we're forcing\n        //   // process.stdin to UTF8 encoding to at least make stdin reading compatible\n        //   // with text files until FS.init can be refactored.\n        //   process.stdin.setEncoding('utf8');\n        // }\n      },\n      shutdown() {\n        // https://github.com/emscripten-core/emscripten/pull/1555\n        // if (false) {\n        //   // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?\n        //   // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation\n        //   // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?\n        //   // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle\n        //   // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call\n        //   process.stdin.pause();\n        // }\n      },\n      register(dev, ops) {\n        TTY.ttys[dev] = { input: [], output: [], ops: ops };\n        FS.registerDevice(dev, TTY.stream_ops);\n      },\n      stream_ops: {\n        open(stream) {\n          var tty = TTY.ttys[stream.node.rdev];\n          if (!tty) {\n            throw new FS.ErrnoError(43);\n          }\n          stream.tty = tty;\n          stream.seekable = false;\n        },\n        close(stream) {\n          // flush any pending line data\n          stream.tty.ops.fsync(stream.tty);\n        },\n        fsync(stream) {\n          stream.tty.ops.fsync(stream.tty);\n        },\n        read(stream, buffer, offset, length, pos /* ignored */) {\n          if (!stream.tty || !stream.tty.ops.get_char) {\n            throw new FS.ErrnoError(60);\n          }\n          var bytesRead = 0;\n          for (var i = 0; i < length; i++) {\n            var result;\n            try {\n              result = stream.tty.ops.get_char(stream.tty);\n            } catch (e) {\n              throw new FS.ErrnoError(29);\n            }\n            if (result === undefined && bytesRead === 0) {\n              throw new FS.ErrnoError(6);\n            }\n            if (result === null || result === undefined) break;\n            bytesRead++;\n            buffer[offset + i] = result;\n          }\n          if (bytesRead) {\n            stream.node.timestamp = Date.now();\n          }\n          return bytesRead;\n        },\n        write(stream, buffer, offset, length, pos) {\n          if (!stream.tty || !stream.tty.ops.put_char) {\n            throw new FS.ErrnoError(60);\n          }\n          try {\n            for (var i = 0; i < length; i++) {\n              stream.tty.ops.put_char(stream.tty, buffer[offset + i]);\n            }\n          } catch (e) {\n            throw new FS.ErrnoError(29);\n          }\n          if (length) {\n            stream.node.timestamp = Date.now();\n          }\n          return i;\n        },\n      },\n      default_tty_ops: {\n        get_char(tty) {\n          return FS_stdin_getChar();\n        },\n        put_char(tty, val) {\n          if (val === null || val === 10) {\n            out(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          } else {\n            if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle.\n          }\n        },\n        fsync(tty) {\n          if (tty.output && tty.output.length > 0) {\n            out(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          }\n        },\n        ioctl_tcgets(tty) {\n          // typical setting\n          return {\n            c_iflag: 25856,\n            c_oflag: 5,\n            c_cflag: 191,\n            c_lflag: 35387,\n            c_cc: [\n              0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, 0x12, 0x0f,\n              0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n              0x00, 0x00, 0x00, 0x00,\n            ],\n          };\n        },\n        ioctl_tcsets(tty, optional_actions, data) {\n          // currently just ignore\n          return 0;\n        },\n        ioctl_tiocgwinsz(tty) {\n          return [24, 80];\n        },\n      },\n      default_tty1_ops: {\n        put_char(tty, val) {\n          if (val === null || val === 10) {\n            err(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          } else {\n            if (val != 0) tty.output.push(val);\n          }\n        },\n        fsync(tty) {\n          if (tty.output && tty.output.length > 0) {\n            err(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          }\n        },\n      },\n    };\n\n    var zeroMemory = (address, size) => {\n      HEAPU8.fill(0, address, address + size);\n    };\n\n    var alignMemory = (size, alignment) => {\n      assert(alignment, 'alignment argument is required');\n      return Math.ceil(size / alignment) * alignment;\n    };\n    var mmapAlloc = (size) => {\n      size = alignMemory(size, 65536);\n      var ptr = _emscripten_builtin_memalign(65536, size);\n      if (ptr) zeroMemory(ptr, size);\n      return ptr;\n    };\n    var MEMFS = {\n      ops_table: null,\n      mount(mount) {\n        return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);\n      },\n      createNode(parent, name, mode, dev) {\n        if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n          // no supported\n          throw new FS.ErrnoError(63);\n        }\n        MEMFS.ops_table ||= {\n          dir: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n              lookup: MEMFS.node_ops.lookup,\n              mknod: MEMFS.node_ops.mknod,\n              rename: MEMFS.node_ops.rename,\n              unlink: MEMFS.node_ops.unlink,\n              rmdir: MEMFS.node_ops.rmdir,\n              readdir: MEMFS.node_ops.readdir,\n              symlink: MEMFS.node_ops.symlink,\n            },\n            stream: {\n              llseek: MEMFS.stream_ops.llseek,\n            },\n          },\n          file: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n            },\n            stream: {\n              llseek: MEMFS.stream_ops.llseek,\n              read: MEMFS.stream_ops.read,\n              write: MEMFS.stream_ops.write,\n              allocate: MEMFS.stream_ops.allocate,\n              mmap: MEMFS.stream_ops.mmap,\n              msync: MEMFS.stream_ops.msync,\n            },\n          },\n          link: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n              readlink: MEMFS.node_ops.readlink,\n            },\n            stream: {},\n          },\n          chrdev: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n            },\n            stream: FS.chrdev_stream_ops,\n          },\n        };\n        var node = FS.createNode(parent, name, mode, dev);\n        if (FS.isDir(node.mode)) {\n          node.node_ops = MEMFS.ops_table.dir.node;\n          node.stream_ops = MEMFS.ops_table.dir.stream;\n          node.contents = {};\n        } else if (FS.isFile(node.mode)) {\n          node.node_ops = MEMFS.ops_table.file.node;\n          node.stream_ops = MEMFS.ops_table.file.stream;\n          node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity.\n          // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred\n          // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size\n          // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme.\n          node.contents = null;\n        } else if (FS.isLink(node.mode)) {\n          node.node_ops = MEMFS.ops_table.link.node;\n          node.stream_ops = MEMFS.ops_table.link.stream;\n        } else if (FS.isChrdev(node.mode)) {\n          node.node_ops = MEMFS.ops_table.chrdev.node;\n          node.stream_ops = MEMFS.ops_table.chrdev.stream;\n        }\n        node.timestamp = Date.now();\n        // add the new node to the parent\n        if (parent) {\n          parent.contents[name] = node;\n          parent.timestamp = node.timestamp;\n        }\n        return node;\n      },\n      getFileDataAsTypedArray(node) {\n        if (!node.contents) return new Uint8Array(0);\n        if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes.\n        return new Uint8Array(node.contents);\n      },\n      expandFileStorage(node, newCapacity) {\n        var prevCapacity = node.contents ? node.contents.length : 0;\n        if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough.\n        // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.\n        // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to\n        // avoid overshooting the allocation cap by a very large margin.\n        var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n        newCapacity = Math.max(\n          newCapacity,\n          (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0,\n        );\n        if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding.\n        var oldContents = node.contents;\n        node.contents = new Uint8Array(newCapacity); // Allocate new storage.\n        if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage.\n      },\n      resizeFileStorage(node, newSize) {\n        if (node.usedBytes == newSize) return;\n        if (newSize == 0) {\n          node.contents = null; // Fully decommit when requesting a resize to zero.\n          node.usedBytes = 0;\n        } else {\n          var oldContents = node.contents;\n          node.contents = new Uint8Array(newSize); // Allocate new storage.\n          if (oldContents) {\n            node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage.\n          }\n          node.usedBytes = newSize;\n        }\n      },\n      node_ops: {\n        getattr(node) {\n          var attr = {};\n          // device numbers reuse inode numbers.\n          attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n          attr.ino = node.id;\n          attr.mode = node.mode;\n          attr.nlink = 1;\n          attr.uid = 0;\n          attr.gid = 0;\n          attr.rdev = node.rdev;\n          if (FS.isDir(node.mode)) {\n            attr.size = 4096;\n          } else if (FS.isFile(node.mode)) {\n            attr.size = node.usedBytes;\n          } else if (FS.isLink(node.mode)) {\n            attr.size = node.link.length;\n          } else {\n            attr.size = 0;\n          }\n          attr.atime = new Date(node.timestamp);\n          attr.mtime = new Date(node.timestamp);\n          attr.ctime = new Date(node.timestamp);\n          // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),\n          //       but this is not required by the standard.\n          attr.blksize = 4096;\n          attr.blocks = Math.ceil(attr.size / attr.blksize);\n          return attr;\n        },\n        setattr(node, attr) {\n          if (attr.mode !== undefined) {\n            node.mode = attr.mode;\n          }\n          if (attr.timestamp !== undefined) {\n            node.timestamp = attr.timestamp;\n          }\n          if (attr.size !== undefined) {\n            MEMFS.resizeFileStorage(node, attr.size);\n          }\n        },\n        lookup(parent, name) {\n          throw FS.genericErrors[44];\n        },\n        mknod(parent, name, mode, dev) {\n          return MEMFS.createNode(parent, name, mode, dev);\n        },\n        rename(old_node, new_dir, new_name) {\n          // if we're overwriting a directory at new_name, make sure it's empty.\n          if (FS.isDir(old_node.mode)) {\n            var new_node;\n            try {\n              new_node = FS.lookupNode(new_dir, new_name);\n            } catch (e) {}\n            if (new_node) {\n              for (var i in new_node.contents) {\n                throw new FS.ErrnoError(55);\n              }\n            }\n          }\n          // do the internal rewiring\n          delete old_node.parent.contents[old_node.name];\n          old_node.parent.timestamp = Date.now();\n          old_node.name = new_name;\n          new_dir.contents[new_name] = old_node;\n          new_dir.timestamp = old_node.parent.timestamp;\n        },\n        unlink(parent, name) {\n          delete parent.contents[name];\n          parent.timestamp = Date.now();\n        },\n        rmdir(parent, name) {\n          var node = FS.lookupNode(parent, name);\n          for (var i in node.contents) {\n            throw new FS.ErrnoError(55);\n          }\n          delete parent.contents[name];\n          parent.timestamp = Date.now();\n        },\n        readdir(node) {\n          var entries = ['.', '..'];\n          for (var key of Object.keys(node.contents)) {\n            entries.push(key);\n          }\n          return entries;\n        },\n        symlink(parent, newname, oldpath) {\n          var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);\n          node.link = oldpath;\n          return node;\n        },\n        readlink(node) {\n          if (!FS.isLink(node.mode)) {\n            throw new FS.ErrnoError(28);\n          }\n          return node.link;\n        },\n      },\n      stream_ops: {\n        read(stream, buffer, offset, length, position) {\n          var contents = stream.node.contents;\n          if (position >= stream.node.usedBytes) return 0;\n          var size = Math.min(stream.node.usedBytes - position, length);\n          assert(size >= 0);\n          if (size > 8 && contents.subarray) {\n            // non-trivial, and typed array\n            buffer.set(contents.subarray(position, position + size), offset);\n          } else {\n            for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];\n          }\n          return size;\n        },\n        write(stream, buffer, offset, length, position, canOwn) {\n          // The data buffer should be a typed array view\n          assert(!(buffer instanceof ArrayBuffer));\n          // If the buffer is located in main memory (HEAP), and if\n          // memory can grow, we can't hold on to references of the\n          // memory buffer, as they may get invalidated. That means we\n          // need to do copy its contents.\n          if (buffer.buffer === HEAP8.buffer) {\n            canOwn = false;\n          }\n\n          if (!length) return 0;\n          var node = stream.node;\n          node.timestamp = Date.now();\n\n          if (buffer.subarray && (!node.contents || node.contents.subarray)) {\n            // This write is from a typed array to a typed array?\n            if (canOwn) {\n              assert(position === 0, 'canOwn must imply no weird position inside the file');\n              node.contents = buffer.subarray(offset, offset + length);\n              node.usedBytes = length;\n              return length;\n            } else if (node.usedBytes === 0 && position === 0) {\n              // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.\n              node.contents = buffer.slice(offset, offset + length);\n              node.usedBytes = length;\n              return length;\n            } else if (position + length <= node.usedBytes) {\n              // Writing to an already allocated and used subrange of the file?\n              node.contents.set(buffer.subarray(offset, offset + length), position);\n              return length;\n            }\n          }\n\n          // Appending to an existing file and we need to reallocate, or source data did not come as a typed array.\n          MEMFS.expandFileStorage(node, position + length);\n          if (node.contents.subarray && buffer.subarray) {\n            // Use typed array write which is available.\n            node.contents.set(buffer.subarray(offset, offset + length), position);\n          } else {\n            for (var i = 0; i < length; i++) {\n              node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not.\n            }\n          }\n          node.usedBytes = Math.max(node.usedBytes, position + length);\n          return length;\n        },\n        llseek(stream, offset, whence) {\n          var position = offset;\n          if (whence === 1) {\n            position += stream.position;\n          } else if (whence === 2) {\n            if (FS.isFile(stream.node.mode)) {\n              position += stream.node.usedBytes;\n            }\n          }\n          if (position < 0) {\n            throw new FS.ErrnoError(28);\n          }\n          return position;\n        },\n        allocate(stream, offset, length) {\n          MEMFS.expandFileStorage(stream.node, offset + length);\n          stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length);\n        },\n        mmap(stream, length, position, prot, flags) {\n          if (!FS.isFile(stream.node.mode)) {\n            throw new FS.ErrnoError(43);\n          }\n          var ptr;\n          var allocated;\n          var contents = stream.node.contents;\n          // Only make a new copy when MAP_PRIVATE is specified.\n          if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {\n            // We can't emulate MAP_SHARED when the file is not backed by the\n            // buffer we're mapping to (e.g. the HEAP buffer).\n            allocated = false;\n            ptr = contents.byteOffset;\n          } else {\n            allocated = true;\n            ptr = mmapAlloc(length);\n            if (!ptr) {\n              throw new FS.ErrnoError(48);\n            }\n            if (contents) {\n              // Try to avoid unnecessary slices.\n              if (position > 0 || position + length < contents.length) {\n                if (contents.subarray) {\n                  contents = contents.subarray(position, position + length);\n                } else {\n                  contents = Array.prototype.slice.call(contents, position, position + length);\n                }\n              }\n              HEAP8.set(contents, ptr);\n            }\n          }\n          return { ptr, allocated };\n        },\n        msync(stream, buffer, offset, length, mmapFlags) {\n          MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n          // should we check if bytesWritten and length are the same?\n          return 0;\n        },\n      },\n    };\n\n    /** @param {boolean=} noRunDep */\n    var asyncLoad = (url, onload, onerror, noRunDep) => {\n      var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : '';\n      readAsync(url).then(\n        (arrayBuffer) => {\n          assert(arrayBuffer, `Loading data file \"${url}\" failed (no arrayBuffer).`);\n          onload(new Uint8Array(arrayBuffer));\n          if (dep) removeRunDependency(dep);\n        },\n        (err) => {\n          if (onerror) {\n            onerror();\n          } else {\n            throw `Loading data file \"${url}\" failed.`;\n          }\n        },\n      );\n      if (dep) addRunDependency(dep);\n    };\n\n    var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => {\n      FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn);\n    };\n\n    var preloadPlugins = Module['preloadPlugins'] || [];\n    var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => {\n      // Ensure plugins are ready.\n      if (typeof Browser != 'undefined') Browser.init();\n\n      var handled = false;\n      preloadPlugins.forEach((plugin) => {\n        if (handled) return;\n        if (plugin['canHandle'](fullname)) {\n          plugin['handle'](byteArray, fullname, finish, onerror);\n          handled = true;\n        }\n      });\n      return handled;\n    };\n    var FS_createPreloadedFile = (\n      parent,\n      name,\n      url,\n      canRead,\n      canWrite,\n      onload,\n      onerror,\n      dontCreateFile,\n      canOwn,\n      preFinish,\n    ) => {\n      // TODO we should allow people to just pass in a complete filename instead\n      // of parent and name being that we just join them anyways\n      var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n      var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname\n      function processData(byteArray) {\n        function finish(byteArray) {\n          preFinish?.();\n          if (!dontCreateFile) {\n            FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n          }\n          onload?.();\n          removeRunDependency(dep);\n        }\n        if (\n          FS_handledByPreloadPlugin(byteArray, fullname, finish, () => {\n            onerror?.();\n            removeRunDependency(dep);\n          })\n        ) {\n          return;\n        }\n        finish(byteArray);\n      }\n      addRunDependency(dep);\n      if (typeof url == 'string') {\n        asyncLoad(url, processData, onerror);\n      } else {\n        processData(url);\n      }\n    };\n\n    var FS_modeStringToFlags = (str) => {\n      var flagModes = {\n        r: 0,\n        'r+': 2,\n        w: 512 | 64 | 1,\n        'w+': 512 | 64 | 2,\n        a: 1024 | 64 | 1,\n        'a+': 1024 | 64 | 2,\n      };\n      var flags = flagModes[str];\n      if (typeof flags == 'undefined') {\n        throw new Error(`Unknown file open mode: ${str}`);\n      }\n      return flags;\n    };\n\n    var FS_getMode = (canRead, canWrite) => {\n      var mode = 0;\n      if (canRead) mode |= 292 | 73;\n      if (canWrite) mode |= 146;\n      return mode;\n    };\n\n    var strError = (errno) => {\n      return UTF8ToString(_strerror(errno));\n    };\n\n    var ERRNO_CODES = {\n      EPERM: 63,\n      ENOENT: 44,\n      ESRCH: 71,\n      EINTR: 27,\n      EIO: 29,\n      ENXIO: 60,\n      E2BIG: 1,\n      ENOEXEC: 45,\n      EBADF: 8,\n      ECHILD: 12,\n      EAGAIN: 6,\n      EWOULDBLOCK: 6,\n      ENOMEM: 48,\n      EACCES: 2,\n      EFAULT: 21,\n      ENOTBLK: 105,\n      EBUSY: 10,\n      EEXIST: 20,\n      EXDEV: 75,\n      ENODEV: 43,\n      ENOTDIR: 54,\n      EISDIR: 31,\n      EINVAL: 28,\n      ENFILE: 41,\n      EMFILE: 33,\n      ENOTTY: 59,\n      ETXTBSY: 74,\n      EFBIG: 22,\n      ENOSPC: 51,\n      ESPIPE: 70,\n      EROFS: 69,\n      EMLINK: 34,\n      EPIPE: 64,\n      EDOM: 18,\n      ERANGE: 68,\n      ENOMSG: 49,\n      EIDRM: 24,\n      ECHRNG: 106,\n      EL2NSYNC: 156,\n      EL3HLT: 107,\n      EL3RST: 108,\n      ELNRNG: 109,\n      EUNATCH: 110,\n      ENOCSI: 111,\n      EL2HLT: 112,\n      EDEADLK: 16,\n      ENOLCK: 46,\n      EBADE: 113,\n      EBADR: 114,\n      EXFULL: 115,\n      ENOANO: 104,\n      EBADRQC: 103,\n      EBADSLT: 102,\n      EDEADLOCK: 16,\n      EBFONT: 101,\n      ENOSTR: 100,\n      ENODATA: 116,\n      ETIME: 117,\n      ENOSR: 118,\n      ENONET: 119,\n      ENOPKG: 120,\n      EREMOTE: 121,\n      ENOLINK: 47,\n      EADV: 122,\n      ESRMNT: 123,\n      ECOMM: 124,\n      EPROTO: 65,\n      EMULTIHOP: 36,\n      EDOTDOT: 125,\n      EBADMSG: 9,\n      ENOTUNIQ: 126,\n      EBADFD: 127,\n      EREMCHG: 128,\n      ELIBACC: 129,\n      ELIBBAD: 130,\n      ELIBSCN: 131,\n      ELIBMAX: 132,\n      ELIBEXEC: 133,\n      ENOSYS: 52,\n      ENOTEMPTY: 55,\n      ENAMETOOLONG: 37,\n      ELOOP: 32,\n      EOPNOTSUPP: 138,\n      EPFNOSUPPORT: 139,\n      ECONNRESET: 15,\n      ENOBUFS: 42,\n      EAFNOSUPPORT: 5,\n      EPROTOTYPE: 67,\n      ENOTSOCK: 57,\n      ENOPROTOOPT: 50,\n      ESHUTDOWN: 140,\n      ECONNREFUSED: 14,\n      EADDRINUSE: 3,\n      ECONNABORTED: 13,\n      ENETUNREACH: 40,\n      ENETDOWN: 38,\n      ETIMEDOUT: 73,\n      EHOSTDOWN: 142,\n      EHOSTUNREACH: 23,\n      EINPROGRESS: 26,\n      EALREADY: 7,\n      EDESTADDRREQ: 17,\n      EMSGSIZE: 35,\n      EPROTONOSUPPORT: 66,\n      ESOCKTNOSUPPORT: 137,\n      EADDRNOTAVAIL: 4,\n      ENETRESET: 39,\n      EISCONN: 30,\n      ENOTCONN: 53,\n      ETOOMANYREFS: 141,\n      EUSERS: 136,\n      EDQUOT: 19,\n      ESTALE: 72,\n      ENOTSUP: 138,\n      ENOMEDIUM: 148,\n      EILSEQ: 25,\n      EOVERFLOW: 61,\n      ECANCELED: 11,\n      ENOTRECOVERABLE: 56,\n      EOWNERDEAD: 62,\n      ESTRPIPE: 135,\n    };\n    var FS = {\n      root: null,\n      mounts: [],\n      devices: {},\n      streams: [],\n      nextInode: 1,\n      nameTable: null,\n      currentPath: '/',\n      initialized: false,\n      ignorePermissions: true,\n      ErrnoError: class extends Error {\n        // We set the `name` property to be able to identify `FS.ErrnoError`\n        // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway.\n        // - when using PROXYFS, an error can come from an underlying FS\n        // as different FS objects have their own FS.ErrnoError each,\n        // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs.\n        // we'll use the reliable test `err.name == \"ErrnoError\"` instead\n        constructor(errno) {\n          super(runtimeInitialized ? strError(errno) : '');\n          // TODO(sbc): Use the inline member declaration syntax once we\n          // support it in acorn and closure.\n          this.name = 'ErrnoError';\n          this.errno = errno;\n          for (var key in ERRNO_CODES) {\n            if (ERRNO_CODES[key] === errno) {\n              this.code = key;\n              break;\n            }\n          }\n        }\n      },\n      genericErrors: {},\n      filesystems: null,\n      syncFSRequests: 0,\n      readFiles: {},\n      FSStream: class {\n        constructor() {\n          // TODO(https://github.com/emscripten-core/emscripten/issues/21414):\n          // Use inline field declarations.\n          this.shared = {};\n        }\n        get object() {\n          return this.node;\n        }\n        set object(val) {\n          this.node = val;\n        }\n        get isRead() {\n          return (this.flags & 2097155) !== 1;\n        }\n        get isWrite() {\n          return (this.flags & 2097155) !== 0;\n        }\n        get isAppend() {\n          return this.flags & 1024;\n        }\n        get flags() {\n          return this.shared.flags;\n        }\n        set flags(val) {\n          this.shared.flags = val;\n        }\n        get position() {\n          return this.shared.position;\n        }\n        set position(val) {\n          this.shared.position = val;\n        }\n      },\n      FSNode: class {\n        constructor(parent, name, mode, rdev) {\n          if (!parent) {\n            parent = this; // root node sets parent to itself\n          }\n          this.parent = parent;\n          this.mount = parent.mount;\n          this.mounted = null;\n          this.id = FS.nextInode++;\n          this.name = name;\n          this.mode = mode;\n          this.node_ops = {};\n          this.stream_ops = {};\n          this.rdev = rdev;\n          this.readMode = 292 | 73;\n          this.writeMode = 146;\n        }\n        get read() {\n          return (this.mode & this.readMode) === this.readMode;\n        }\n        set read(val) {\n          val ? (this.mode |= this.readMode) : (this.mode &= ~this.readMode);\n        }\n        get write() {\n          return (this.mode & this.writeMode) === this.writeMode;\n        }\n        set write(val) {\n          val ? (this.mode |= this.writeMode) : (this.mode &= ~this.writeMode);\n        }\n        get isFolder() {\n          return FS.isDir(this.mode);\n        }\n        get isDevice() {\n          return FS.isChrdev(this.mode);\n        }\n      },\n      lookupPath(path, opts = {}) {\n        path = PATH_FS.resolve(path);\n\n        if (!path) return { path: '', node: null };\n\n        var defaults = {\n          follow_mount: true,\n          recurse_count: 0,\n        };\n        opts = Object.assign(defaults, opts);\n\n        if (opts.recurse_count > 8) {\n          // max recursive lookup of 8\n          throw new FS.ErrnoError(32);\n        }\n\n        // split the absolute path\n        var parts = path.split('/').filter((p) => !!p);\n\n        // start at the root\n        var current = FS.root;\n        var current_path = '/';\n\n        for (var i = 0; i < parts.length; i++) {\n          var islast = i === parts.length - 1;\n          if (islast && opts.parent) {\n            // stop resolving\n            break;\n          }\n\n          current = FS.lookupNode(current, parts[i]);\n          current_path = PATH.join2(current_path, parts[i]);\n\n          // jump to the mount's root node if this is a mountpoint\n          if (FS.isMountpoint(current)) {\n            if (!islast || (islast && opts.follow_mount)) {\n              current = current.mounted.root;\n            }\n          }\n\n          // by default, lookupPath will not follow a symlink if it is the final path component.\n          // setting opts.follow = true will override this behavior.\n          if (!islast || opts.follow) {\n            var count = 0;\n            while (FS.isLink(current.mode)) {\n              var link = FS.readlink(current_path);\n              current_path = PATH_FS.resolve(PATH.dirname(current_path), link);\n\n              var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count + 1 });\n              current = lookup.node;\n\n              if (count++ > 40) {\n                // limit max consecutive symlinks to 40 (SYMLOOP_MAX).\n                throw new FS.ErrnoError(32);\n              }\n            }\n          }\n        }\n\n        return { path: current_path, node: current };\n      },\n      getPath(node) {\n        var path;\n        while (true) {\n          if (FS.isRoot(node)) {\n            var mount = node.mount.mountpoint;\n            if (!path) return mount;\n            return mount[mount.length - 1] !== '/' ? `${mount}/${path}` : mount + path;\n          }\n          path = path ? `${node.name}/${path}` : node.name;\n          node = node.parent;\n        }\n      },\n      hashName(parentid, name) {\n        var hash = 0;\n\n        for (var i = 0; i < name.length; i++) {\n          hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n        }\n        return ((parentid + hash) >>> 0) % FS.nameTable.length;\n      },\n      hashAddNode(node) {\n        var hash = FS.hashName(node.parent.id, node.name);\n        node.name_next = FS.nameTable[hash];\n        FS.nameTable[hash] = node;\n      },\n      hashRemoveNode(node) {\n        var hash = FS.hashName(node.parent.id, node.name);\n        if (FS.nameTable[hash] === node) {\n          FS.nameTable[hash] = node.name_next;\n        } else {\n          var current = FS.nameTable[hash];\n          while (current) {\n            if (current.name_next === node) {\n              current.name_next = node.name_next;\n              break;\n            }\n            current = current.name_next;\n          }\n        }\n      },\n      lookupNode(parent, name) {\n        var errCode = FS.mayLookup(parent);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        var hash = FS.hashName(parent.id, name);\n        for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n          var nodeName = node.name;\n          if (node.parent.id === parent.id && nodeName === name) {\n            return node;\n          }\n        }\n        // if we failed to find it in the cache, call into the VFS\n        return FS.lookup(parent, name);\n      },\n      createNode(parent, name, mode, rdev) {\n        assert(typeof parent == 'object');\n        var node = new FS.FSNode(parent, name, mode, rdev);\n\n        FS.hashAddNode(node);\n\n        return node;\n      },\n      destroyNode(node) {\n        FS.hashRemoveNode(node);\n      },\n      isRoot(node) {\n        return node === node.parent;\n      },\n      isMountpoint(node) {\n        return !!node.mounted;\n      },\n      isFile(mode) {\n        return (mode & 61440) === 32768;\n      },\n      isDir(mode) {\n        return (mode & 61440) === 16384;\n      },\n      isLink(mode) {\n        return (mode & 61440) === 40960;\n      },\n      isChrdev(mode) {\n        return (mode & 61440) === 8192;\n      },\n      isBlkdev(mode) {\n        return (mode & 61440) === 24576;\n      },\n      isFIFO(mode) {\n        return (mode & 61440) === 4096;\n      },\n      isSocket(mode) {\n        return (mode & 49152) === 49152;\n      },\n      flagsToPermissionString(flag) {\n        var perms = ['r', 'w', 'rw'][flag & 3];\n        if (flag & 512) {\n          perms += 'w';\n        }\n        return perms;\n      },\n      nodePermissions(node, perms) {\n        if (FS.ignorePermissions) {\n          return 0;\n        }\n        // return 0 if any user, group or owner bits are set.\n        if (perms.includes('r') && !(node.mode & 292)) {\n          return 2;\n        } else if (perms.includes('w') && !(node.mode & 146)) {\n          return 2;\n        } else if (perms.includes('x') && !(node.mode & 73)) {\n          return 2;\n        }\n        return 0;\n      },\n      mayLookup(dir) {\n        if (!FS.isDir(dir.mode)) return 54;\n        var errCode = FS.nodePermissions(dir, 'x');\n        if (errCode) return errCode;\n        if (!dir.node_ops.lookup) return 2;\n        return 0;\n      },\n      mayCreate(dir, name) {\n        try {\n          var node = FS.lookupNode(dir, name);\n          return 20;\n        } catch (e) {}\n        return FS.nodePermissions(dir, 'wx');\n      },\n      mayDelete(dir, name, isdir) {\n        var node;\n        try {\n          node = FS.lookupNode(dir, name);\n        } catch (e) {\n          return e.errno;\n        }\n        var errCode = FS.nodePermissions(dir, 'wx');\n        if (errCode) {\n          return errCode;\n        }\n        if (isdir) {\n          if (!FS.isDir(node.mode)) {\n            return 54;\n          }\n          if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n            return 10;\n          }\n        } else {\n          if (FS.isDir(node.mode)) {\n            return 31;\n          }\n        }\n        return 0;\n      },\n      mayOpen(node, flags) {\n        if (!node) {\n          return 44;\n        }\n        if (FS.isLink(node.mode)) {\n          return 32;\n        } else if (FS.isDir(node.mode)) {\n          if (\n            FS.flagsToPermissionString(flags) !== 'r' || // opening for write\n            flags & 512\n          ) {\n            // TODO: check for O_SEARCH? (== search for dir only)\n            return 31;\n          }\n        }\n        return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n      },\n      MAX_OPEN_FDS: 4096,\n      nextfd() {\n        for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n          if (!FS.streams[fd]) {\n            return fd;\n          }\n        }\n        throw new FS.ErrnoError(33);\n      },\n      getStreamChecked(fd) {\n        var stream = FS.getStream(fd);\n        if (!stream) {\n          throw new FS.ErrnoError(8);\n        }\n        return stream;\n      },\n      getStream: (fd) => FS.streams[fd],\n      createStream(stream, fd = -1) {\n        assert(fd >= -1);\n\n        // clone it, so we can return an instance of FSStream\n        stream = Object.assign(new FS.FSStream(), stream);\n        if (fd == -1) {\n          fd = FS.nextfd();\n        }\n        stream.fd = fd;\n        FS.streams[fd] = stream;\n        return stream;\n      },\n      closeStream(fd) {\n        FS.streams[fd] = null;\n      },\n      dupStream(origStream, fd = -1) {\n        var stream = FS.createStream(origStream, fd);\n        stream.stream_ops?.dup?.(stream);\n        return stream;\n      },\n      chrdev_stream_ops: {\n        open(stream) {\n          var device = FS.getDevice(stream.node.rdev);\n          // override node's stream ops with the device's\n          stream.stream_ops = device.stream_ops;\n          // forward the open call\n          stream.stream_ops.open?.(stream);\n        },\n        llseek() {\n          throw new FS.ErrnoError(70);\n        },\n      },\n      major: (dev) => dev >> 8,\n      minor: (dev) => dev & 0xff,\n      makedev: (ma, mi) => (ma << 8) | mi,\n      registerDevice(dev, ops) {\n        FS.devices[dev] = { stream_ops: ops };\n      },\n      getDevice: (dev) => FS.devices[dev],\n      getMounts(mount) {\n        var mounts = [];\n        var check = [mount];\n\n        while (check.length) {\n          var m = check.pop();\n\n          mounts.push(m);\n\n          check.push(...m.mounts);\n        }\n\n        return mounts;\n      },\n      syncfs(populate, callback) {\n        if (typeof populate == 'function') {\n          callback = populate;\n          populate = false;\n        }\n\n        FS.syncFSRequests++;\n\n        if (FS.syncFSRequests > 1) {\n          err(\n            `warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`,\n          );\n        }\n\n        var mounts = FS.getMounts(FS.root.mount);\n        var completed = 0;\n\n        function doCallback(errCode) {\n          assert(FS.syncFSRequests > 0);\n          FS.syncFSRequests--;\n          return callback(errCode);\n        }\n\n        function done(errCode) {\n          if (errCode) {\n            if (!done.errored) {\n              done.errored = true;\n              return doCallback(errCode);\n            }\n            return;\n          }\n          if (++completed >= mounts.length) {\n            doCallback(null);\n          }\n        }\n\n        // sync all mounts\n        mounts.forEach((mount) => {\n          if (!mount.type.syncfs) {\n            return done(null);\n          }\n          mount.type.syncfs(mount, populate, done);\n        });\n      },\n      mount(type, opts, mountpoint) {\n        if (typeof type == 'string') {\n          // The filesystem was not included, and instead we have an error\n          // message stored in the variable.\n          throw type;\n        }\n        var root = mountpoint === '/';\n        var pseudo = !mountpoint;\n        var node;\n\n        if (root && FS.root) {\n          throw new FS.ErrnoError(10);\n        } else if (!root && !pseudo) {\n          var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n\n          mountpoint = lookup.path; // use the absolute path\n          node = lookup.node;\n\n          if (FS.isMountpoint(node)) {\n            throw new FS.ErrnoError(10);\n          }\n\n          if (!FS.isDir(node.mode)) {\n            throw new FS.ErrnoError(54);\n          }\n        }\n\n        var mount = {\n          type,\n          opts,\n          mountpoint,\n          mounts: [],\n        };\n\n        // create a root node for the fs\n        var mountRoot = type.mount(mount);\n        mountRoot.mount = mount;\n        mount.root = mountRoot;\n\n        if (root) {\n          FS.root = mountRoot;\n        } else if (node) {\n          // set as a mountpoint\n          node.mounted = mount;\n\n          // add the new mount to the current mount's children\n          if (node.mount) {\n            node.mount.mounts.push(mount);\n          }\n        }\n\n        return mountRoot;\n      },\n      unmount(mountpoint) {\n        var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n\n        if (!FS.isMountpoint(lookup.node)) {\n          throw new FS.ErrnoError(28);\n        }\n\n        // destroy the nodes for this mount, and all its child mounts\n        var node = lookup.node;\n        var mount = node.mounted;\n        var mounts = FS.getMounts(mount);\n\n        Object.keys(FS.nameTable).forEach((hash) => {\n          var current = FS.nameTable[hash];\n\n          while (current) {\n            var next = current.name_next;\n\n            if (mounts.includes(current.mount)) {\n              FS.destroyNode(current);\n            }\n\n            current = next;\n          }\n        });\n\n        // no longer a mountpoint\n        node.mounted = null;\n\n        // remove this mount from the child mounts\n        var idx = node.mount.mounts.indexOf(mount);\n        assert(idx !== -1);\n        node.mount.mounts.splice(idx, 1);\n      },\n      lookup(parent, name) {\n        return parent.node_ops.lookup(parent, name);\n      },\n      mknod(path, mode, dev) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        var name = PATH.basename(path);\n        if (!name || name === '.' || name === '..') {\n          throw new FS.ErrnoError(28);\n        }\n        var errCode = FS.mayCreate(parent, name);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.mknod) {\n          throw new FS.ErrnoError(63);\n        }\n        return parent.node_ops.mknod(parent, name, mode, dev);\n      },\n      create(path, mode) {\n        mode = mode !== undefined ? mode : 438 /* 0666 */;\n        mode &= 4095;\n        mode |= 32768;\n        return FS.mknod(path, mode, 0);\n      },\n      mkdir(path, mode) {\n        mode = mode !== undefined ? mode : 511 /* 0777 */;\n        mode &= 511 | 512;\n        mode |= 16384;\n        return FS.mknod(path, mode, 0);\n      },\n      mkdirTree(path, mode) {\n        var dirs = path.split('/');\n        var d = '';\n        for (var i = 0; i < dirs.length; ++i) {\n          if (!dirs[i]) continue;\n          d += '/' + dirs[i];\n          try {\n            FS.mkdir(d, mode);\n          } catch (e) {\n            if (e.errno != 20) throw e;\n          }\n        }\n      },\n      mkdev(path, mode, dev) {\n        if (typeof dev == 'undefined') {\n          dev = mode;\n          mode = 438 /* 0666 */;\n        }\n        mode |= 8192;\n        return FS.mknod(path, mode, dev);\n      },\n      symlink(oldpath, newpath) {\n        if (!PATH_FS.resolve(oldpath)) {\n          throw new FS.ErrnoError(44);\n        }\n        var lookup = FS.lookupPath(newpath, { parent: true });\n        var parent = lookup.node;\n        if (!parent) {\n          throw new FS.ErrnoError(44);\n        }\n        var newname = PATH.basename(newpath);\n        var errCode = FS.mayCreate(parent, newname);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.symlink) {\n          throw new FS.ErrnoError(63);\n        }\n        return parent.node_ops.symlink(parent, newname, oldpath);\n      },\n      rename(old_path, new_path) {\n        var old_dirname = PATH.dirname(old_path);\n        var new_dirname = PATH.dirname(new_path);\n        var old_name = PATH.basename(old_path);\n        var new_name = PATH.basename(new_path);\n        // parents must exist\n        var lookup, old_dir, new_dir;\n\n        // let the errors from non existent directories percolate up\n        lookup = FS.lookupPath(old_path, { parent: true });\n        old_dir = lookup.node;\n        lookup = FS.lookupPath(new_path, { parent: true });\n        new_dir = lookup.node;\n\n        if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n        // need to be part of the same mount\n        if (old_dir.mount !== new_dir.mount) {\n          throw new FS.ErrnoError(75);\n        }\n        // source must exist\n        var old_node = FS.lookupNode(old_dir, old_name);\n        // old path should not be an ancestor of the new path\n        var relative = PATH_FS.relative(old_path, new_dirname);\n        if (relative.charAt(0) !== '.') {\n          throw new FS.ErrnoError(28);\n        }\n        // new path should not be an ancestor of the old path\n        relative = PATH_FS.relative(new_path, old_dirname);\n        if (relative.charAt(0) !== '.') {\n          throw new FS.ErrnoError(55);\n        }\n        // see if the new path already exists\n        var new_node;\n        try {\n          new_node = FS.lookupNode(new_dir, new_name);\n        } catch (e) {\n          // not fatal\n        }\n        // early out if nothing needs to change\n        if (old_node === new_node) {\n          return;\n        }\n        // we'll need to delete the old entry\n        var isdir = FS.isDir(old_node.mode);\n        var errCode = FS.mayDelete(old_dir, old_name, isdir);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        // need delete permissions if we'll be overwriting.\n        // need create permissions if new doesn't already exist.\n        errCode = new_node\n          ? FS.mayDelete(new_dir, new_name, isdir)\n          : FS.mayCreate(new_dir, new_name);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!old_dir.node_ops.rename) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {\n          throw new FS.ErrnoError(10);\n        }\n        // if we are going to change the parent, check write permissions\n        if (new_dir !== old_dir) {\n          errCode = FS.nodePermissions(old_dir, 'w');\n          if (errCode) {\n            throw new FS.ErrnoError(errCode);\n          }\n        }\n        // remove the node from the lookup hash\n        FS.hashRemoveNode(old_node);\n        // do the underlying fs rename\n        try {\n          old_dir.node_ops.rename(old_node, new_dir, new_name);\n          // update old node (we do this here to avoid each backend\n          // needing to)\n          old_node.parent = new_dir;\n        } catch (e) {\n          throw e;\n        } finally {\n          // add the node back to the hash (in case node_ops.rename\n          // changed its name)\n          FS.hashAddNode(old_node);\n        }\n      },\n      rmdir(path) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        var name = PATH.basename(path);\n        var node = FS.lookupNode(parent, name);\n        var errCode = FS.mayDelete(parent, name, true);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.rmdir) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(node)) {\n          throw new FS.ErrnoError(10);\n        }\n        parent.node_ops.rmdir(parent, name);\n        FS.destroyNode(node);\n      },\n      readdir(path) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        var node = lookup.node;\n        if (!node.node_ops.readdir) {\n          throw new FS.ErrnoError(54);\n        }\n        return node.node_ops.readdir(node);\n      },\n      unlink(path) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        if (!parent) {\n          throw new FS.ErrnoError(44);\n        }\n        var name = PATH.basename(path);\n        var node = FS.lookupNode(parent, name);\n        var errCode = FS.mayDelete(parent, name, false);\n        if (errCode) {\n          // According to POSIX, we should map EISDIR to EPERM, but\n          // we instead do what Linux does (and we must, as we use\n          // the musl linux libc).\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.unlink) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(node)) {\n          throw new FS.ErrnoError(10);\n        }\n        parent.node_ops.unlink(parent, name);\n        FS.destroyNode(node);\n      },\n      readlink(path) {\n        var lookup = FS.lookupPath(path);\n        var link = lookup.node;\n        if (!link) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!link.node_ops.readlink) {\n          throw new FS.ErrnoError(28);\n        }\n        return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link));\n      },\n      stat(path, dontFollow) {\n        var lookup = FS.lookupPath(path, { follow: !dontFollow });\n        var node = lookup.node;\n        if (!node) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!node.node_ops.getattr) {\n          throw new FS.ErrnoError(63);\n        }\n        return node.node_ops.getattr(node);\n      },\n      lstat(path) {\n        return FS.stat(path, true);\n      },\n      chmod(path, mode, dontFollow) {\n        var node;\n        if (typeof path == 'string') {\n          var lookup = FS.lookupPath(path, { follow: !dontFollow });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        node.node_ops.setattr(node, {\n          mode: (mode & 4095) | (node.mode & ~4095),\n          timestamp: Date.now(),\n        });\n      },\n      lchmod(path, mode) {\n        FS.chmod(path, mode, true);\n      },\n      fchmod(fd, mode) {\n        var stream = FS.getStreamChecked(fd);\n        FS.chmod(stream.node, mode);\n      },\n      chown(path, uid, gid, dontFollow) {\n        var node;\n        if (typeof path == 'string') {\n          var lookup = FS.lookupPath(path, { follow: !dontFollow });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        node.node_ops.setattr(node, {\n          timestamp: Date.now(),\n          // we ignore the uid / gid for now\n        });\n      },\n      lchown(path, uid, gid) {\n        FS.chown(path, uid, gid, true);\n      },\n      fchown(fd, uid, gid) {\n        var stream = FS.getStreamChecked(fd);\n        FS.chown(stream.node, uid, gid);\n      },\n      truncate(path, len) {\n        if (len < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        var node;\n        if (typeof path == 'string') {\n          var lookup = FS.lookupPath(path, { follow: true });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isDir(node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!FS.isFile(node.mode)) {\n          throw new FS.ErrnoError(28);\n        }\n        var errCode = FS.nodePermissions(node, 'w');\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        node.node_ops.setattr(node, {\n          size: len,\n          timestamp: Date.now(),\n        });\n      },\n      ftruncate(fd, len) {\n        var stream = FS.getStreamChecked(fd);\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(28);\n        }\n        FS.truncate(stream.node, len);\n      },\n      utime(path, atime, mtime) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        var node = lookup.node;\n        node.node_ops.setattr(node, {\n          timestamp: Math.max(atime, mtime),\n        });\n      },\n      open(path, flags, mode) {\n        if (path === '') {\n          throw new FS.ErrnoError(44);\n        }\n        flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;\n        if (flags & 64) {\n          mode = typeof mode == 'undefined' ? 438 /* 0666 */ : mode;\n          mode = (mode & 4095) | 32768;\n        } else {\n          mode = 0;\n        }\n        var node;\n        if (typeof path == 'object') {\n          node = path;\n        } else {\n          path = PATH.normalize(path);\n          try {\n            var lookup = FS.lookupPath(path, {\n              follow: !(flags & 131072),\n            });\n            node = lookup.node;\n          } catch (e) {\n            // ignore\n          }\n        }\n        // perhaps we need to create the node\n        var created = false;\n        if (flags & 64) {\n          if (node) {\n            // if O_CREAT and O_EXCL are set, error out if the node already exists\n            if (flags & 128) {\n              throw new FS.ErrnoError(20);\n            }\n          } else {\n            // node doesn't exist, try to create it\n            node = FS.mknod(path, mode, 0);\n            created = true;\n          }\n        }\n        if (!node) {\n          throw new FS.ErrnoError(44);\n        }\n        // can't truncate a device\n        if (FS.isChrdev(node.mode)) {\n          flags &= ~512;\n        }\n        // if asked only for a directory, then this must be one\n        if (flags & 65536 && !FS.isDir(node.mode)) {\n          throw new FS.ErrnoError(54);\n        }\n        // check permissions, if this is not a file we just created now (it is ok to\n        // create and write to a file with read-only permissions; it is read-only\n        // for later use)\n        if (!created) {\n          var errCode = FS.mayOpen(node, flags);\n          if (errCode) {\n            throw new FS.ErrnoError(errCode);\n          }\n        }\n        // do truncation if necessary\n        if (flags & 512 && !created) {\n          FS.truncate(node, 0);\n        }\n        // we've already handled these, don't pass down to the underlying vfs\n        flags &= ~(128 | 512 | 131072);\n\n        // register the stream with the filesystem\n        var stream = FS.createStream({\n          node,\n          path: FS.getPath(node), // we want the absolute path to the node\n          flags,\n          seekable: true,\n          position: 0,\n          stream_ops: node.stream_ops,\n          // used by the file family libc calls (fopen, fwrite, ferror, etc.)\n          ungotten: [],\n          error: false,\n        });\n        // call the new stream's open function\n        if (stream.stream_ops.open) {\n          stream.stream_ops.open(stream);\n        }\n        if (Module['logReadFiles'] && !(flags & 1)) {\n          if (!(path in FS.readFiles)) {\n            FS.readFiles[path] = 1;\n          }\n        }\n        return stream;\n      },\n      close(stream) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (stream.getdents) stream.getdents = null; // free readdir state\n        try {\n          if (stream.stream_ops.close) {\n            stream.stream_ops.close(stream);\n          }\n        } catch (e) {\n          throw e;\n        } finally {\n          FS.closeStream(stream.fd);\n        }\n        stream.fd = null;\n      },\n      isClosed(stream) {\n        return stream.fd === null;\n      },\n      llseek(stream, offset, whence) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (!stream.seekable || !stream.stream_ops.llseek) {\n          throw new FS.ErrnoError(70);\n        }\n        if (whence != 0 && whence != 1 && whence != 2) {\n          throw new FS.ErrnoError(28);\n        }\n        stream.position = stream.stream_ops.llseek(stream, offset, whence);\n        stream.ungotten = [];\n        return stream.position;\n      },\n      read(stream, buffer, offset, length, position) {\n        assert(offset >= 0);\n        if (length < 0 || position < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if ((stream.flags & 2097155) === 1) {\n          throw new FS.ErrnoError(8);\n        }\n        if (FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!stream.stream_ops.read) {\n          throw new FS.ErrnoError(28);\n        }\n        var seeking = typeof position != 'undefined';\n        if (!seeking) {\n          position = stream.position;\n        } else if (!stream.seekable) {\n          throw new FS.ErrnoError(70);\n        }\n        var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);\n        if (!seeking) stream.position += bytesRead;\n        return bytesRead;\n      },\n      write(stream, buffer, offset, length, position, canOwn) {\n        assert(offset >= 0);\n        if (length < 0 || position < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(8);\n        }\n        if (FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!stream.stream_ops.write) {\n          throw new FS.ErrnoError(28);\n        }\n        if (stream.seekable && stream.flags & 1024) {\n          // seek to the end before writing in append mode\n          FS.llseek(stream, 0, 2);\n        }\n        var seeking = typeof position != 'undefined';\n        if (!seeking) {\n          position = stream.position;\n        } else if (!stream.seekable) {\n          throw new FS.ErrnoError(70);\n        }\n        var bytesWritten = stream.stream_ops.write(\n          stream,\n          buffer,\n          offset,\n          length,\n          position,\n          canOwn,\n        );\n        if (!seeking) stream.position += bytesWritten;\n        return bytesWritten;\n      },\n      allocate(stream, offset, length) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (offset < 0 || length <= 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(8);\n        }\n        if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(43);\n        }\n        if (!stream.stream_ops.allocate) {\n          throw new FS.ErrnoError(138);\n        }\n        stream.stream_ops.allocate(stream, offset, length);\n      },\n      mmap(stream, length, position, prot, flags) {\n        // User requests writing to file (prot & PROT_WRITE != 0).\n        // Checking if we have permissions to write to the file unless\n        // MAP_PRIVATE flag is set. According to POSIX spec it is possible\n        // to write to file opened in read-only mode with MAP_PRIVATE flag,\n        // as all modifications will be visible only in the memory of\n        // the current process.\n        if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {\n          throw new FS.ErrnoError(2);\n        }\n        if ((stream.flags & 2097155) === 1) {\n          throw new FS.ErrnoError(2);\n        }\n        if (!stream.stream_ops.mmap) {\n          throw new FS.ErrnoError(43);\n        }\n        if (!length) {\n          throw new FS.ErrnoError(28);\n        }\n        return stream.stream_ops.mmap(stream, length, position, prot, flags);\n      },\n      msync(stream, buffer, offset, length, mmapFlags) {\n        assert(offset >= 0);\n        if (!stream.stream_ops.msync) {\n          return 0;\n        }\n        return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n      },\n      ioctl(stream, cmd, arg) {\n        if (!stream.stream_ops.ioctl) {\n          throw new FS.ErrnoError(59);\n        }\n        return stream.stream_ops.ioctl(stream, cmd, arg);\n      },\n      readFile(path, opts = {}) {\n        opts.flags = opts.flags || 0;\n        opts.encoding = opts.encoding || 'binary';\n        if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n          throw new Error(`Invalid encoding type \"${opts.encoding}\"`);\n        }\n        var ret;\n        var stream = FS.open(path, opts.flags);\n        var stat = FS.stat(path);\n        var length = stat.size;\n        var buf = new Uint8Array(length);\n        FS.read(stream, buf, 0, length, 0);\n        if (opts.encoding === 'utf8') {\n          ret = UTF8ArrayToString(buf);\n        } else if (opts.encoding === 'binary') {\n          ret = buf;\n        }\n        FS.close(stream);\n        return ret;\n      },\n      writeFile(path, data, opts = {}) {\n        opts.flags = opts.flags || 577;\n        var stream = FS.open(path, opts.flags, opts.mode);\n        if (typeof data == 'string') {\n          var buf = new Uint8Array(lengthBytesUTF8(data) + 1);\n          var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);\n          FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn);\n        } else if (ArrayBuffer.isView(data)) {\n          FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);\n        } else {\n          throw new Error('Unsupported data type');\n        }\n        FS.close(stream);\n      },\n      cwd: () => FS.currentPath,\n      chdir(path) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        if (lookup.node === null) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!FS.isDir(lookup.node.mode)) {\n          throw new FS.ErrnoError(54);\n        }\n        var errCode = FS.nodePermissions(lookup.node, 'x');\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        FS.currentPath = lookup.path;\n      },\n      createDefaultDirectories() {\n        FS.mkdir('/tmp');\n        FS.mkdir('/home');\n        FS.mkdir('/home/web_user');\n      },\n      createDefaultDevices() {\n        // create /dev\n        FS.mkdir('/dev');\n        // setup /dev/null\n        FS.registerDevice(FS.makedev(1, 3), {\n          read: () => 0,\n          write: (stream, buffer, offset, length, pos) => length,\n        });\n        FS.mkdev('/dev/null', FS.makedev(1, 3));\n        // setup /dev/tty and /dev/tty1\n        // stderr needs to print output using err() rather than out()\n        // so we register a second tty just for it.\n        TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n        TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n        FS.mkdev('/dev/tty', FS.makedev(5, 0));\n        FS.mkdev('/dev/tty1', FS.makedev(6, 0));\n        // setup /dev/[u]random\n        // use a buffer to avoid overhead of individual crypto calls per byte\n        var randomBuffer = new Uint8Array(1024),\n          randomLeft = 0;\n        var randomByte = () => {\n          if (randomLeft === 0) {\n            randomLeft = randomFill(randomBuffer).byteLength;\n          }\n          return randomBuffer[--randomLeft];\n        };\n        FS.createDevice('/dev', 'random', randomByte);\n        FS.createDevice('/dev', 'urandom', randomByte);\n        // we're not going to emulate the actual shm device,\n        // just create the tmp dirs that reside in it commonly\n        FS.mkdir('/dev/shm');\n        FS.mkdir('/dev/shm/tmp');\n      },\n      createSpecialDirectories() {\n        // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the\n        // name of the stream for fd 6 (see test_unistd_ttyname)\n        FS.mkdir('/proc');\n        var proc_self = FS.mkdir('/proc/self');\n        FS.mkdir('/proc/self/fd');\n        FS.mount(\n          {\n            mount() {\n              var node = FS.createNode(proc_self, 'fd', 16384 | 511 /* 0777 */, 73);\n              node.node_ops = {\n                lookup(parent, name) {\n                  var fd = +name;\n                  var stream = FS.getStreamChecked(fd);\n                  var ret = {\n                    parent: null,\n                    mount: { mountpoint: 'fake' },\n                    node_ops: { readlink: () => stream.path },\n                  };\n                  ret.parent = ret; // make it look like a simple root node\n                  return ret;\n                },\n              };\n              return node;\n            },\n          },\n          {},\n          '/proc/self/fd',\n        );\n      },\n      createStandardStreams(input, output, error) {\n        // TODO deprecate the old functionality of a single\n        // input / output callback and that utilizes FS.createDevice\n        // and instead require a unique set of stream ops\n\n        // by default, we symlink the standard streams to the\n        // default tty devices. however, if the standard streams\n        // have been overwritten we create a unique device for\n        // them instead.\n        if (input) {\n          FS.createDevice('/dev', 'stdin', input);\n        } else {\n          FS.symlink('/dev/tty', '/dev/stdin');\n        }\n        if (output) {\n          FS.createDevice('/dev', 'stdout', null, output);\n        } else {\n          FS.symlink('/dev/tty', '/dev/stdout');\n        }\n        if (error) {\n          FS.createDevice('/dev', 'stderr', null, error);\n        } else {\n          FS.symlink('/dev/tty1', '/dev/stderr');\n        }\n\n        // open default streams for the stdin, stdout and stderr devices\n        var stdin = FS.open('/dev/stdin', 0);\n        var stdout = FS.open('/dev/stdout', 1);\n        var stderr = FS.open('/dev/stderr', 1);\n        assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`);\n        assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`);\n        assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`);\n      },\n      staticInit() {\n        // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)\n        [44].forEach((code) => {\n          FS.genericErrors[code] = new FS.ErrnoError(code);\n          FS.genericErrors[code].stack = '<generic error, no stack>';\n        });\n\n        FS.nameTable = new Array(4096);\n\n        FS.mount(MEMFS, {}, '/');\n\n        FS.createDefaultDirectories();\n        FS.createDefaultDevices();\n        FS.createSpecialDirectories();\n\n        FS.filesystems = {\n          MEMFS: MEMFS,\n        };\n      },\n      init(input, output, error) {\n        assert(\n          !FS.initialized,\n          'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)',\n        );\n        FS.initialized = true;\n\n        // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here\n        input ??= Module['stdin'];\n        output ??= Module['stdout'];\n        error ??= Module['stderr'];\n\n        FS.createStandardStreams(input, output, error);\n      },\n      quit() {\n        FS.initialized = false;\n        // force-flush all streams, so we get musl std streams printed out\n        _fflush(0);\n        // close all of our streams\n        for (var i = 0; i < FS.streams.length; i++) {\n          var stream = FS.streams[i];\n          if (!stream) {\n            continue;\n          }\n          FS.close(stream);\n        }\n      },\n      findObject(path, dontResolveLastLink) {\n        var ret = FS.analyzePath(path, dontResolveLastLink);\n        if (!ret.exists) {\n          return null;\n        }\n        return ret.object;\n      },\n      analyzePath(path, dontResolveLastLink) {\n        // operate from within the context of the symlink's target\n        try {\n          var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n          path = lookup.path;\n        } catch (e) {}\n        var ret = {\n          isRoot: false,\n          exists: false,\n          error: 0,\n          name: null,\n          path: null,\n          object: null,\n          parentExists: false,\n          parentPath: null,\n          parentObject: null,\n        };\n        try {\n          var lookup = FS.lookupPath(path, { parent: true });\n          ret.parentExists = true;\n          ret.parentPath = lookup.path;\n          ret.parentObject = lookup.node;\n          ret.name = PATH.basename(path);\n          lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n          ret.exists = true;\n          ret.path = lookup.path;\n          ret.object = lookup.node;\n          ret.name = lookup.node.name;\n          ret.isRoot = lookup.path === '/';\n        } catch (e) {\n          ret.error = e.errno;\n        }\n        return ret;\n      },\n      createPath(parent, path, canRead, canWrite) {\n        parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n        var parts = path.split('/').reverse();\n        while (parts.length) {\n          var part = parts.pop();\n          if (!part) continue;\n          var current = PATH.join2(parent, part);\n          try {\n            FS.mkdir(current);\n          } catch (e) {\n            // ignore EEXIST\n          }\n          parent = current;\n        }\n        return current;\n      },\n      createFile(parent, name, properties, canRead, canWrite) {\n        var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);\n        var mode = FS_getMode(canRead, canWrite);\n        return FS.create(path, mode);\n      },\n      createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n        var path = name;\n        if (parent) {\n          parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n          path = name ? PATH.join2(parent, name) : parent;\n        }\n        var mode = FS_getMode(canRead, canWrite);\n        var node = FS.create(path, mode);\n        if (data) {\n          if (typeof data == 'string') {\n            var arr = new Array(data.length);\n            for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);\n            data = arr;\n          }\n          // make sure we can write to the file\n          FS.chmod(node, mode | 146);\n          var stream = FS.open(node, 577);\n          FS.write(stream, data, 0, data.length, 0, canOwn);\n          FS.close(stream);\n          FS.chmod(node, mode);\n        }\n      },\n      createDevice(parent, name, input, output) {\n        var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);\n        var mode = FS_getMode(!!input, !!output);\n        FS.createDevice.major ??= 64;\n        var dev = FS.makedev(FS.createDevice.major++, 0);\n        // Create a fake device that a set of stream ops to emulate\n        // the old behavior.\n        FS.registerDevice(dev, {\n          open(stream) {\n            stream.seekable = false;\n          },\n          close(stream) {\n            // flush any pending line data\n            if (output?.buffer?.length) {\n              output(10);\n            }\n          },\n          read(stream, buffer, offset, length, pos /* ignored */) {\n            var bytesRead = 0;\n            for (var i = 0; i < length; i++) {\n              var result;\n              try {\n                result = input();\n              } catch (e) {\n                throw new FS.ErrnoError(29);\n              }\n              if (result === undefined && bytesRead === 0) {\n                throw new FS.ErrnoError(6);\n              }\n              if (result === null || result === undefined) break;\n              bytesRead++;\n              buffer[offset + i] = result;\n            }\n            if (bytesRead) {\n              stream.node.timestamp = Date.now();\n            }\n            return bytesRead;\n          },\n          write(stream, buffer, offset, length, pos) {\n            for (var i = 0; i < length; i++) {\n              try {\n                output(buffer[offset + i]);\n              } catch (e) {\n                throw new FS.ErrnoError(29);\n              }\n            }\n            if (length) {\n              stream.node.timestamp = Date.now();\n            }\n            return i;\n          },\n        });\n        return FS.mkdev(path, mode, dev);\n      },\n      forceLoadFile(obj) {\n        if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n        if (typeof XMLHttpRequest != 'undefined') {\n          throw new Error(\n            'Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.',\n          );\n        } else {\n          // Command-line.\n          try {\n            obj.contents = readBinary(obj.url);\n            obj.usedBytes = obj.contents.length;\n          } catch (e) {\n            throw new FS.ErrnoError(29);\n          }\n        }\n      },\n      createLazyFile(parent, name, url, canRead, canWrite) {\n        // Lazy chunked Uint8Array (implements get and length from Uint8Array).\n        // Actual getting is abstracted away for eventual reuse.\n        class LazyUint8Array {\n          constructor() {\n            this.lengthKnown = false;\n            this.chunks = []; // Loaded chunks. Index is the chunk number\n          }\n          get(idx) {\n            if (idx > this.length - 1 || idx < 0) {\n              return undefined;\n            }\n            var chunkOffset = idx % this.chunkSize;\n            var chunkNum = (idx / this.chunkSize) | 0;\n            return this.getter(chunkNum)[chunkOffset];\n          }\n          setDataGetter(getter) {\n            this.getter = getter;\n          }\n          cacheLength() {\n            // Find length\n            var xhr = new XMLHttpRequest();\n            xhr.open('HEAD', url, false);\n            xhr.send(null);\n            if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n              throw new Error(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n            var datalength = Number(xhr.getResponseHeader('Content-length'));\n            var header;\n            var hasByteServing =\n              (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes';\n            var usesGzip =\n              (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip';\n\n            var chunkSize = 1024 * 1024; // Chunk size in bytes\n\n            if (!hasByteServing) chunkSize = datalength;\n\n            // Function to get a range from the remote URL.\n            var doXHR = (from, to) => {\n              if (from > to)\n                throw new Error('invalid range (' + from + ', ' + to + ') or no bytes requested!');\n              if (to > datalength - 1)\n                throw new Error('only ' + datalength + ' bytes available! programmer error!');\n\n              // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.\n              var xhr = new XMLHttpRequest();\n              xhr.open('GET', url, false);\n              if (datalength !== chunkSize)\n                xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);\n\n              // Some hints to the browser that we want binary data.\n              xhr.responseType = 'arraybuffer';\n              if (xhr.overrideMimeType) {\n                xhr.overrideMimeType('text/plain; charset=x-user-defined');\n              }\n\n              xhr.send(null);\n              if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n                throw new Error(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n              if (xhr.response !== undefined) {\n                return new Uint8Array(/** @type{Array<number>} */ (xhr.response || []));\n              }\n              return intArrayFromString(xhr.responseText || '', true);\n            };\n            var lazyArray = this;\n            lazyArray.setDataGetter((chunkNum) => {\n              var start = chunkNum * chunkSize;\n              var end = (chunkNum + 1) * chunkSize - 1; // including this byte\n              end = Math.min(end, datalength - 1); // if datalength-1 is selected, this is the last block\n              if (typeof lazyArray.chunks[chunkNum] == 'undefined') {\n                lazyArray.chunks[chunkNum] = doXHR(start, end);\n              }\n              if (typeof lazyArray.chunks[chunkNum] == 'undefined')\n                throw new Error('doXHR failed!');\n              return lazyArray.chunks[chunkNum];\n            });\n\n            if (usesGzip || !datalength) {\n              // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length\n              chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file\n              datalength = this.getter(0).length;\n              chunkSize = datalength;\n              out('LazyFiles on gzip forces download of the whole file when length is accessed');\n            }\n\n            this._length = datalength;\n            this._chunkSize = chunkSize;\n            this.lengthKnown = true;\n          }\n          get length() {\n            if (!this.lengthKnown) {\n              this.cacheLength();\n            }\n            return this._length;\n          }\n          get chunkSize() {\n            if (!this.lengthKnown) {\n              this.cacheLength();\n            }\n            return this._chunkSize;\n          }\n        }\n\n        if (typeof XMLHttpRequest != 'undefined') {\n          if (!ENVIRONMENT_IS_WORKER)\n            throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';\n          var lazyArray = new LazyUint8Array();\n          var properties = { isDevice: false, contents: lazyArray };\n        } else {\n          var properties = { isDevice: false, url: url };\n        }\n\n        var node = FS.createFile(parent, name, properties, canRead, canWrite);\n        // This is a total hack, but I want to get this lazy file code out of the\n        // core of MEMFS. If we want to keep this lazy file concept I feel it should\n        // be its own thin LAZYFS proxying calls to MEMFS.\n        if (properties.contents) {\n          node.contents = properties.contents;\n        } else if (properties.url) {\n          node.contents = null;\n          node.url = properties.url;\n        }\n        // Add a function that defers querying the file size until it is asked the first time.\n        Object.defineProperties(node, {\n          usedBytes: {\n            get: function () {\n              return this.contents.length;\n            },\n          },\n        });\n        // override each stream op with one that tries to force load the lazy file first\n        var stream_ops = {};\n        var keys = Object.keys(node.stream_ops);\n        keys.forEach((key) => {\n          var fn = node.stream_ops[key];\n          stream_ops[key] = (...args) => {\n            FS.forceLoadFile(node);\n            return fn(...args);\n          };\n        });\n        function writeChunks(stream, buffer, offset, length, position) {\n          var contents = stream.node.contents;\n          if (position >= contents.length) return 0;\n          var size = Math.min(contents.length - position, length);\n          assert(size >= 0);\n          if (contents.slice) {\n            // normal array\n            for (var i = 0; i < size; i++) {\n              buffer[offset + i] = contents[position + i];\n            }\n          } else {\n            for (var i = 0; i < size; i++) {\n              // LazyUint8Array from sync binary XHR\n              buffer[offset + i] = contents.get(position + i);\n            }\n          }\n          return size;\n        }\n        // use a custom read function\n        stream_ops.read = (stream, buffer, offset, length, position) => {\n          FS.forceLoadFile(node);\n          return writeChunks(stream, buffer, offset, length, position);\n        };\n        // use a custom mmap function\n        stream_ops.mmap = (stream, length, position, prot, flags) => {\n          FS.forceLoadFile(node);\n          var ptr = mmapAlloc(length);\n          if (!ptr) {\n            throw new FS.ErrnoError(48);\n          }\n          writeChunks(stream, HEAP8, ptr, length, position);\n          return { ptr, allocated: true };\n        };\n        node.stream_ops = stream_ops;\n        return node;\n      },\n      absolutePath() {\n        abort('FS.absolutePath has been removed; use PATH_FS.resolve instead');\n      },\n      createFolder() {\n        abort('FS.createFolder has been removed; use FS.mkdir instead');\n      },\n      createLink() {\n        abort('FS.createLink has been removed; use FS.symlink instead');\n      },\n      joinPath() {\n        abort('FS.joinPath has been removed; use PATH.join instead');\n      },\n      mmapAlloc() {\n        abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc');\n      },\n      standardizePath() {\n        abort('FS.standardizePath has been removed; use PATH.normalize instead');\n      },\n    };\n\n    var SYSCALLS = {\n      DEFAULT_POLLMASK: 5,\n      calculateAt(dirfd, path, allowEmpty) {\n        if (PATH.isAbs(path)) {\n          return path;\n        }\n        // relative path\n        var dir;\n        if (dirfd === -100) {\n          dir = FS.cwd();\n        } else {\n          var dirstream = SYSCALLS.getStreamFromFD(dirfd);\n          dir = dirstream.path;\n        }\n        if (path.length == 0) {\n          if (!allowEmpty) {\n            throw new FS.ErrnoError(44);\n          }\n          return dir;\n        }\n        return PATH.join2(dir, path);\n      },\n      doStat(func, path, buf) {\n        var stat = func(path);\n        HEAP32[buf >> 2] = stat.dev;\n        HEAP32[(buf + 4) >> 2] = stat.mode;\n        HEAPU32[(buf + 8) >> 2] = stat.nlink;\n        HEAP32[(buf + 12) >> 2] = stat.uid;\n        HEAP32[(buf + 16) >> 2] = stat.gid;\n        HEAP32[(buf + 20) >> 2] = stat.rdev;\n        (tempI64 = [\n          stat.size >>> 0,\n          ((tempDouble = stat.size),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 24) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 28) >> 2] = tempI64[1]);\n        HEAP32[(buf + 32) >> 2] = 4096;\n        HEAP32[(buf + 36) >> 2] = stat.blocks;\n        var atime = stat.atime.getTime();\n        var mtime = stat.mtime.getTime();\n        var ctime = stat.ctime.getTime();\n        (tempI64 = [\n          Math.floor(atime / 1000) >>> 0,\n          ((tempDouble = Math.floor(atime / 1000)),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 40) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 44) >> 2] = tempI64[1]);\n        HEAPU32[(buf + 48) >> 2] = (atime % 1000) * 1000 * 1000;\n        (tempI64 = [\n          Math.floor(mtime / 1000) >>> 0,\n          ((tempDouble = Math.floor(mtime / 1000)),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 56) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 60) >> 2] = tempI64[1]);\n        HEAPU32[(buf + 64) >> 2] = (mtime % 1000) * 1000 * 1000;\n        (tempI64 = [\n          Math.floor(ctime / 1000) >>> 0,\n          ((tempDouble = Math.floor(ctime / 1000)),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 72) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 76) >> 2] = tempI64[1]);\n        HEAPU32[(buf + 80) >> 2] = (ctime % 1000) * 1000 * 1000;\n        (tempI64 = [\n          stat.ino >>> 0,\n          ((tempDouble = stat.ino),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 88) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 92) >> 2] = tempI64[1]);\n        return 0;\n      },\n      doMsync(addr, stream, len, flags, offset) {\n        if (!FS.isFile(stream.node.mode)) {\n          throw new FS.ErrnoError(43);\n        }\n        if (flags & 2) {\n          // MAP_PRIVATE calls need not to be synced back to underlying fs\n          return 0;\n        }\n        var buffer = HEAPU8.slice(addr, addr + len);\n        FS.msync(stream, buffer, offset, len, flags);\n      },\n      getStreamFromFD(fd) {\n        var stream = FS.getStreamChecked(fd);\n        return stream;\n      },\n      varargs: undefined,\n      getStr(ptr) {\n        var ret = UTF8ToString(ptr);\n        return ret;\n      },\n    };\n    function ___syscall_fcntl64(fd, cmd, varargs) {\n      SYSCALLS.varargs = varargs;\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        switch (cmd) {\n          case 0: {\n            var arg = syscallGetVarargI();\n            if (arg < 0) {\n              return -28;\n            }\n            while (FS.streams[arg]) {\n              arg++;\n            }\n            var newStream;\n            newStream = FS.dupStream(stream, arg);\n            return newStream.fd;\n          }\n          case 1:\n          case 2:\n            return 0; // FD_CLOEXEC makes no sense for a single process.\n          case 3:\n            return stream.flags;\n          case 4: {\n            var arg = syscallGetVarargI();\n            stream.flags |= arg;\n            return 0;\n          }\n          case 12: {\n            var arg = syscallGetVarargP();\n            var offset = 0;\n            // We're always unlocked.\n            HEAP16[(arg + offset) >> 1] = 2;\n            return 0;\n          }\n          case 13:\n          case 14:\n            return 0; // Pretend that the locking is successful.\n        }\n        return -28;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_fstat64(fd, buf) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        return SYSCALLS.doStat(FS.stat, stream.path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    var convertI32PairToI53Checked = (lo, hi) => {\n      assert(lo == lo >>> 0 || lo == (lo | 0)); // lo should either be a i32 or a u32\n      assert(hi === (hi | 0)); // hi should be a i32\n      return (hi + 0x200000) >>> 0 < 0x400001 - !!lo ? (lo >>> 0) + hi * 4294967296 : NaN;\n    };\n    function ___syscall_ftruncate64(fd, length_low, length_high) {\n      var length = convertI32PairToI53Checked(length_low, length_high);\n\n      try {\n        if (isNaN(length)) return 61;\n        FS.ftruncate(fd, length);\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    var stringToUTF8 = (str, outPtr, maxBytesToWrite) => {\n      assert(\n        typeof maxBytesToWrite == 'number',\n        'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!',\n      );\n      return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n    };\n\n    function ___syscall_getdents64(fd, dirp, count) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        stream.getdents ||= FS.readdir(stream.path);\n\n        var struct_size = 280;\n        var pos = 0;\n        var off = FS.llseek(stream, 0, 1);\n\n        var idx = Math.floor(off / struct_size);\n\n        while (idx < stream.getdents.length && pos + struct_size <= count) {\n          var id;\n          var type;\n          var name = stream.getdents[idx];\n          if (name === '.') {\n            id = stream.node.id;\n            type = 4; // DT_DIR\n          } else if (name === '..') {\n            var lookup = FS.lookupPath(stream.path, { parent: true });\n            id = lookup.node.id;\n            type = 4; // DT_DIR\n          } else {\n            var child = FS.lookupNode(stream.node, name);\n            id = child.id;\n            type = FS.isChrdev(child.mode)\n              ? 2 // DT_CHR, character device.\n              : FS.isDir(child.mode)\n                ? 4 // DT_DIR, directory.\n                : FS.isLink(child.mode)\n                  ? 10 // DT_LNK, symbolic link.\n                  : 8; // DT_REG, regular file.\n          }\n          assert(id);\n          (tempI64 = [\n            id >>> 0,\n            ((tempDouble = id),\n            +Math.abs(tempDouble) >= 1.0\n              ? tempDouble > 0.0\n                ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n                : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n              : 0),\n          ]),\n            (HEAP32[(dirp + pos) >> 2] = tempI64[0]),\n            (HEAP32[(dirp + pos + 4) >> 2] = tempI64[1]);\n          (tempI64 = [\n            ((idx + 1) * struct_size) >>> 0,\n            ((tempDouble = (idx + 1) * struct_size),\n            +Math.abs(tempDouble) >= 1.0\n              ? tempDouble > 0.0\n                ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n                : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n              : 0),\n          ]),\n            (HEAP32[(dirp + pos + 8) >> 2] = tempI64[0]),\n            (HEAP32[(dirp + pos + 12) >> 2] = tempI64[1]);\n          HEAP16[(dirp + pos + 16) >> 1] = 280;\n          HEAP8[dirp + pos + 18] = type;\n          stringToUTF8(name, dirp + pos + 19, 256);\n          pos += struct_size;\n          idx += 1;\n        }\n        FS.llseek(stream, idx * struct_size, 0);\n        return pos;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_ioctl(fd, op, varargs) {\n      SYSCALLS.varargs = varargs;\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        switch (op) {\n          case 21509: {\n            if (!stream.tty) return -59;\n            return 0;\n          }\n          case 21505: {\n            if (!stream.tty) return -59;\n            if (stream.tty.ops.ioctl_tcgets) {\n              var termios = stream.tty.ops.ioctl_tcgets(stream);\n              var argp = syscallGetVarargP();\n              HEAP32[argp >> 2] = termios.c_iflag || 0;\n              HEAP32[(argp + 4) >> 2] = termios.c_oflag || 0;\n              HEAP32[(argp + 8) >> 2] = termios.c_cflag || 0;\n              HEAP32[(argp + 12) >> 2] = termios.c_lflag || 0;\n              for (var i = 0; i < 32; i++) {\n                HEAP8[argp + i + 17] = termios.c_cc[i] || 0;\n              }\n              return 0;\n            }\n            return 0;\n          }\n          case 21510:\n          case 21511:\n          case 21512: {\n            if (!stream.tty) return -59;\n            return 0; // no-op, not actually adjusting terminal settings\n          }\n          case 21506:\n          case 21507:\n          case 21508: {\n            if (!stream.tty) return -59;\n            if (stream.tty.ops.ioctl_tcsets) {\n              var argp = syscallGetVarargP();\n              var c_iflag = HEAP32[argp >> 2];\n              var c_oflag = HEAP32[(argp + 4) >> 2];\n              var c_cflag = HEAP32[(argp + 8) >> 2];\n              var c_lflag = HEAP32[(argp + 12) >> 2];\n              var c_cc = [];\n              for (var i = 0; i < 32; i++) {\n                c_cc.push(HEAP8[argp + i + 17]);\n              }\n              return stream.tty.ops.ioctl_tcsets(stream.tty, op, {\n                c_iflag,\n                c_oflag,\n                c_cflag,\n                c_lflag,\n                c_cc,\n              });\n            }\n            return 0; // no-op, not actually adjusting terminal settings\n          }\n          case 21519: {\n            if (!stream.tty) return -59;\n            var argp = syscallGetVarargP();\n            HEAP32[argp >> 2] = 0;\n            return 0;\n          }\n          case 21520: {\n            if (!stream.tty) return -59;\n            return -28; // not supported\n          }\n          case 21531: {\n            var argp = syscallGetVarargP();\n            return FS.ioctl(stream, op, argp);\n          }\n          case 21523: {\n            // TODO: in theory we should write to the winsize struct that gets\n            // passed in, but for now musl doesn't read anything on it\n            if (!stream.tty) return -59;\n            if (stream.tty.ops.ioctl_tiocgwinsz) {\n              var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);\n              var argp = syscallGetVarargP();\n              HEAP16[argp >> 1] = winsize[0];\n              HEAP16[(argp + 2) >> 1] = winsize[1];\n            }\n            return 0;\n          }\n          case 21524: {\n            // TODO: technically, this ioctl call should change the window size.\n            // but, since emscripten doesn't have any concept of a terminal window\n            // yet, we'll just silently throw it away as we do TIOCGWINSZ\n            if (!stream.tty) return -59;\n            return 0;\n          }\n          case 21515: {\n            if (!stream.tty) return -59;\n            return 0;\n          }\n          default:\n            return -28; // not supported\n        }\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_lstat64(path, buf) {\n      try {\n        path = SYSCALLS.getStr(path);\n        return SYSCALLS.doStat(FS.lstat, path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_newfstatat(dirfd, path, buf, flags) {\n      try {\n        path = SYSCALLS.getStr(path);\n        var nofollow = flags & 256;\n        var allowEmpty = flags & 4096;\n        flags = flags & ~6400;\n        assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`);\n        path = SYSCALLS.calculateAt(dirfd, path, allowEmpty);\n        return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_openat(dirfd, path, flags, varargs) {\n      SYSCALLS.varargs = varargs;\n      try {\n        path = SYSCALLS.getStr(path);\n        path = SYSCALLS.calculateAt(dirfd, path);\n        var mode = varargs ? syscallGetVarargI() : 0;\n        return FS.open(path, flags, mode).fd;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_rmdir(path) {\n      try {\n        path = SYSCALLS.getStr(path);\n        FS.rmdir(path);\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_stat64(path, buf) {\n      try {\n        path = SYSCALLS.getStr(path);\n        return SYSCALLS.doStat(FS.stat, path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_unlinkat(dirfd, path, flags) {\n      try {\n        path = SYSCALLS.getStr(path);\n        path = SYSCALLS.calculateAt(dirfd, path);\n        if (flags === 0) {\n          FS.unlink(path);\n        } else if (flags === 512) {\n          FS.rmdir(path);\n        } else {\n          abort('Invalid flags passed to unlinkat');\n        }\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    var __abort_js = () => {\n      abort('native code called abort()');\n    };\n\n    var __emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num);\n\n    var __emscripten_throw_longjmp = () => {\n      throw Infinity;\n    };\n\n    function __gmtime_js(time_low, time_high, tmPtr) {\n      var time = convertI32PairToI53Checked(time_low, time_high);\n\n      var date = new Date(time * 1000);\n      HEAP32[tmPtr >> 2] = date.getUTCSeconds();\n      HEAP32[(tmPtr + 4) >> 2] = date.getUTCMinutes();\n      HEAP32[(tmPtr + 8) >> 2] = date.getUTCHours();\n      HEAP32[(tmPtr + 12) >> 2] = date.getUTCDate();\n      HEAP32[(tmPtr + 16) >> 2] = date.getUTCMonth();\n      HEAP32[(tmPtr + 20) >> 2] = date.getUTCFullYear() - 1900;\n      HEAP32[(tmPtr + 24) >> 2] = date.getUTCDay();\n      var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);\n      var yday = ((date.getTime() - start) / (1000 * 60 * 60 * 24)) | 0;\n      HEAP32[(tmPtr + 28) >> 2] = yday;\n    }\n\n    var isLeapYear = (year) => year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n\n    var MONTH_DAYS_LEAP_CUMULATIVE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\n    var MONTH_DAYS_REGULAR_CUMULATIVE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n    var ydayFromDate = (date) => {\n      var leap = isLeapYear(date.getFullYear());\n      var monthDaysCumulative = leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE;\n      var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1\n\n      return yday;\n    };\n\n    function __localtime_js(time_low, time_high, tmPtr) {\n      var time = convertI32PairToI53Checked(time_low, time_high);\n\n      var date = new Date(time * 1000);\n      HEAP32[tmPtr >> 2] = date.getSeconds();\n      HEAP32[(tmPtr + 4) >> 2] = date.getMinutes();\n      HEAP32[(tmPtr + 8) >> 2] = date.getHours();\n      HEAP32[(tmPtr + 12) >> 2] = date.getDate();\n      HEAP32[(tmPtr + 16) >> 2] = date.getMonth();\n      HEAP32[(tmPtr + 20) >> 2] = date.getFullYear() - 1900;\n      HEAP32[(tmPtr + 24) >> 2] = date.getDay();\n\n      var yday = ydayFromDate(date) | 0;\n      HEAP32[(tmPtr + 28) >> 2] = yday;\n      HEAP32[(tmPtr + 36) >> 2] = -(date.getTimezoneOffset() * 60);\n\n      // Attention: DST is in December in South, and some regions don't have DST at all.\n      var start = new Date(date.getFullYear(), 0, 1);\n      var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();\n      var winterOffset = start.getTimezoneOffset();\n      var dst =\n        (summerOffset != winterOffset &&\n          date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0;\n      HEAP32[(tmPtr + 32) >> 2] = dst;\n    }\n\n    var __tzset_js = (timezone, daylight, std_name, dst_name) => {\n      // TODO: Use (malleable) environment variables instead of system settings.\n      var currentYear = new Date().getFullYear();\n      var winter = new Date(currentYear, 0, 1);\n      var summer = new Date(currentYear, 6, 1);\n      var winterOffset = winter.getTimezoneOffset();\n      var summerOffset = summer.getTimezoneOffset();\n\n      // Local standard timezone offset. Local standard time is not adjusted for\n      // daylight savings.  This code uses the fact that getTimezoneOffset returns\n      // a greater value during Standard Time versus Daylight Saving Time (DST).\n      // Thus it determines the expected output during Standard Time, and it\n      // compares whether the output of the given date the same (Standard) or less\n      // (DST).\n      var stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n\n      // timezone is specified as seconds west of UTC (\"The external variable\n      // `timezone` shall be set to the difference, in seconds, between\n      // Coordinated Universal Time (UTC) and local standard time.\"), the same\n      // as returned by stdTimezoneOffset.\n      // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html\n      HEAPU32[timezone >> 2] = stdTimezoneOffset * 60;\n\n      HEAP32[daylight >> 2] = Number(winterOffset != summerOffset);\n\n      var extractZone = (timezoneOffset) => {\n        // Why inverse sign?\n        // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n        var sign = timezoneOffset >= 0 ? '-' : '+';\n\n        var absOffset = Math.abs(timezoneOffset);\n        var hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n        var minutes = String(absOffset % 60).padStart(2, '0');\n\n        return `UTC${sign}${hours}${minutes}`;\n      };\n\n      var winterName = extractZone(winterOffset);\n      var summerName = extractZone(summerOffset);\n      assert(winterName);\n      assert(summerName);\n      assert(\n        lengthBytesUTF8(winterName) <= 16,\n        `timezone name truncated to fit in TZNAME_MAX (${winterName})`,\n      );\n      assert(\n        lengthBytesUTF8(summerName) <= 16,\n        `timezone name truncated to fit in TZNAME_MAX (${summerName})`,\n      );\n      if (summerOffset < winterOffset) {\n        // Northern hemisphere\n        stringToUTF8(winterName, std_name, 17);\n        stringToUTF8(summerName, dst_name, 17);\n      } else {\n        stringToUTF8(winterName, dst_name, 17);\n        stringToUTF8(summerName, std_name, 17);\n      }\n    };\n\n    var _emscripten_date_now = () => Date.now();\n\n    var getHeapMax = () =>\n      // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate\n      // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side\n      // for any code that deals with heap sizes, which would require special\n      // casing all heap size related code to treat 0 specially.\n      2147483648;\n\n    var growMemory = (size) => {\n      var b = wasmMemory.buffer;\n      var pages = ((size - b.byteLength + 65535) / 65536) | 0;\n      try {\n        // round size grow request up to wasm page size (fixed 64KB per spec)\n        wasmMemory.grow(pages); // .grow() takes a delta compared to the previous size\n        updateMemoryViews();\n        return 1 /*success*/;\n      } catch (e) {\n        err(\n          `growMemory: Attempted to grow heap from ${b.byteLength} bytes to ${size} bytes, but got error: ${e}`,\n        );\n      }\n      // implicit 0 return to save code size (caller will cast \"undefined\" into 0\n      // anyhow)\n    };\n    var _emscripten_resize_heap = (requestedSize) => {\n      var oldSize = HEAPU8.length;\n      // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.\n      requestedSize >>>= 0;\n      // With multithreaded builds, races can happen (another thread might increase the size\n      // in between), so return a failure, and let the caller retry.\n      assert(requestedSize > oldSize);\n\n      // Memory resize rules:\n      // 1.  Always increase heap size to at least the requested size, rounded up\n      //     to next page multiple.\n      // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap\n      //     geometrically: increase the heap size according to\n      //     MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most\n      //     overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB).\n      // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap\n      //     linearly: increase the heap size by at least\n      //     MEMORY_GROWTH_LINEAR_STEP bytes.\n      // 3.  Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by\n      //     MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest\n      // 4.  If we were unable to allocate as much memory, it may be due to\n      //     over-eager decision to excessively reserve due to (3) above.\n      //     Hence if an allocation fails, cut down on the amount of excess\n      //     growth, in an attempt to succeed to perform a smaller allocation.\n\n      // A limit is set for how much we can grow. We should not exceed that\n      // (the wasm binary specifies it, so if we tried, we'd fail anyhow).\n      var maxHeapSize = getHeapMax();\n      if (requestedSize > maxHeapSize) {\n        err(\n          `Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`,\n        );\n        return false;\n      }\n\n      // Loop through potential heap size increases. If we attempt a too eager\n      // reservation that fails, cut down on the attempted size and reserve a\n      // smaller bump instead. (max 3 times, chosen somewhat arbitrarily)\n      for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n        var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth\n        // but limit overreserving (default to capping at +96MB overgrowth at most)\n        overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n\n        var newSize = Math.min(\n          maxHeapSize,\n          alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536),\n        );\n\n        var replacement = growMemory(newSize);\n        if (replacement) {\n          return true;\n        }\n      }\n      err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);\n      return false;\n    };\n\n    var ENV = {};\n\n    var getExecutableName = () => {\n      return thisProgram || './this.program';\n    };\n    var getEnvStrings = () => {\n      if (!getEnvStrings.strings) {\n        // Default values.\n        // Browser language detection #8751\n        var lang =\n          (\n            (typeof navigator == 'object' && navigator.languages && navigator.languages[0]) ||\n            'C'\n          ).replace('-', '_') + '.UTF-8';\n        var env = {\n          USER: 'web_user',\n          LOGNAME: 'web_user',\n          PATH: '/',\n          PWD: '/',\n          HOME: '/home/web_user',\n          LANG: lang,\n          _: getExecutableName(),\n        };\n        // Apply the user-provided values, if any.\n        for (var x in ENV) {\n          // x is a key in ENV; if ENV[x] is undefined, that means it was\n          // explicitly set to be so. We allow user code to do that to\n          // force variables with default values to remain unset.\n          if (ENV[x] === undefined) delete env[x];\n          else env[x] = ENV[x];\n        }\n        var strings = [];\n        for (var x in env) {\n          strings.push(`${x}=${env[x]}`);\n        }\n        getEnvStrings.strings = strings;\n      }\n      return getEnvStrings.strings;\n    };\n\n    var stringToAscii = (str, buffer) => {\n      for (var i = 0; i < str.length; ++i) {\n        assert(str.charCodeAt(i) === (str.charCodeAt(i) & 0xff));\n        HEAP8[buffer++] = str.charCodeAt(i);\n      }\n      // Null-terminate the string\n      HEAP8[buffer] = 0;\n    };\n    var _environ_get = (__environ, environ_buf) => {\n      var bufSize = 0;\n      getEnvStrings().forEach((string, i) => {\n        var ptr = environ_buf + bufSize;\n        HEAPU32[(__environ + i * 4) >> 2] = ptr;\n        stringToAscii(string, ptr);\n        bufSize += string.length + 1;\n      });\n      return 0;\n    };\n\n    var _environ_sizes_get = (penviron_count, penviron_buf_size) => {\n      var strings = getEnvStrings();\n      HEAPU32[penviron_count >> 2] = strings.length;\n      var bufSize = 0;\n      strings.forEach((string) => (bufSize += string.length + 1));\n      HEAPU32[penviron_buf_size >> 2] = bufSize;\n      return 0;\n    };\n\n    function _fd_close(fd) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        FS.close(stream);\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    /** @param {number=} offset */\n    var doReadv = (stream, iov, iovcnt, offset) => {\n      var ret = 0;\n      for (var i = 0; i < iovcnt; i++) {\n        var ptr = HEAPU32[iov >> 2];\n        var len = HEAPU32[(iov + 4) >> 2];\n        iov += 8;\n        var curr = FS.read(stream, HEAP8, ptr, len, offset);\n        if (curr < 0) return -1;\n        ret += curr;\n        if (curr < len) break; // nothing more to read\n        if (typeof offset != 'undefined') {\n          offset += curr;\n        }\n      }\n      return ret;\n    };\n\n    function _fd_read(fd, iov, iovcnt, pnum) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        var num = doReadv(stream, iov, iovcnt);\n        HEAPU32[pnum >> 2] = num;\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {\n      var offset = convertI32PairToI53Checked(offset_low, offset_high);\n\n      try {\n        if (isNaN(offset)) return 61;\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        FS.llseek(stream, offset, whence);\n        (tempI64 = [\n          stream.position >>> 0,\n          ((tempDouble = stream.position),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[newOffset >> 2] = tempI64[0]),\n          (HEAP32[(newOffset + 4) >> 2] = tempI64[1]);\n        if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    function _fd_sync(fd) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        if (stream.stream_ops?.fsync) {\n          return stream.stream_ops.fsync(stream);\n        }\n        return 0; // we can't do anything synchronously; the in-memory FS is already synced to\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    /** @param {number=} offset */\n    var doWritev = (stream, iov, iovcnt, offset) => {\n      var ret = 0;\n      for (var i = 0; i < iovcnt; i++) {\n        var ptr = HEAPU32[iov >> 2];\n        var len = HEAPU32[(iov + 4) >> 2];\n        iov += 8;\n        var curr = FS.write(stream, HEAP8, ptr, len, offset);\n        if (curr < 0) return -1;\n        ret += curr;\n        if (curr < len) {\n          // No more space to write.\n          break;\n        }\n        if (typeof offset != 'undefined') {\n          offset += curr;\n        }\n      }\n      return ret;\n    };\n\n    function _fd_write(fd, iov, iovcnt, pnum) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        var num = doWritev(stream, iov, iovcnt);\n        HEAPU32[pnum >> 2] = num;\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    var wasmTableMirror = [];\n\n    /** @type {WebAssembly.Table} */\n    var wasmTable;\n    var getWasmTableEntry = (funcPtr) => {\n      var func = wasmTableMirror[funcPtr];\n      if (!func) {\n        if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1;\n        wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr);\n      }\n      assert(\n        wasmTable.get(funcPtr) == func,\n        'JavaScript-side Wasm function table mirror is out of date!',\n      );\n      return func;\n    };\n\n    var UTF16Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf-16le') : undefined;\n    var UTF16ToString = (ptr, maxBytesToRead) => {\n      assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!');\n      var endPtr = ptr;\n      // TextDecoder needs to know the byte length in advance, it doesn't stop on\n      // null terminator by itself.\n      // Also, use the length info to avoid running tiny strings through\n      // TextDecoder, since .subarray() allocates garbage.\n      var idx = endPtr >> 1;\n      var maxIdx = idx + maxBytesToRead / 2;\n      // If maxBytesToRead is not passed explicitly, it will be undefined, and this\n      // will always evaluate to true. This saves on code size.\n      while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx;\n      endPtr = idx << 1;\n\n      if (endPtr - ptr > 32 && UTF16Decoder)\n        return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\n\n      // Fallback: decode without UTF16Decoder\n      var str = '';\n\n      // If maxBytesToRead is not passed explicitly, it will be undefined, and the\n      // for-loop's condition will always evaluate to true. The loop is then\n      // terminated on the first null char.\n      for (var i = 0; !(i >= maxBytesToRead / 2); ++i) {\n        var codeUnit = HEAP16[(ptr + i * 2) >> 1];\n        if (codeUnit == 0) break;\n        // fromCharCode constructs a character from a UTF-16 code unit, so we can\n        // pass the UTF16 string right through.\n        str += String.fromCharCode(codeUnit);\n      }\n\n      return str;\n    };\n\n    var uleb128Encode = (n, target) => {\n      assert(n < 16384);\n      if (n < 128) {\n        target.push(n);\n      } else {\n        target.push(n % 128 | 128, n >> 7);\n      }\n    };\n\n    var sigToWasmTypes = (sig) => {\n      assert(\n        !sig.includes('j'),\n        'i64 not permitted in function signatures when WASM_BIGINT is disabled',\n      );\n      var typeNames = {\n        i: 'i32',\n        j: 'i64',\n        f: 'f32',\n        d: 'f64',\n        e: 'externref',\n        p: 'i32',\n      };\n      var type = {\n        parameters: [],\n        results: sig[0] == 'v' ? [] : [typeNames[sig[0]]],\n      };\n      for (var i = 1; i < sig.length; ++i) {\n        assert(sig[i] in typeNames, 'invalid signature char: ' + sig[i]);\n        type.parameters.push(typeNames[sig[i]]);\n      }\n      return type;\n    };\n\n    var generateFuncType = (sig, target) => {\n      var sigRet = sig.slice(0, 1);\n      var sigParam = sig.slice(1);\n      var typeCodes = {\n        i: 0x7f, // i32\n        p: 0x7f, // i32\n        j: 0x7e, // i64\n        f: 0x7d, // f32\n        d: 0x7c, // f64\n        e: 0x6f, // externref\n      };\n\n      // Parameters, length + signatures\n      target.push(0x60 /* form: func */);\n      uleb128Encode(sigParam.length, target);\n      for (var i = 0; i < sigParam.length; ++i) {\n        assert(sigParam[i] in typeCodes, 'invalid signature char: ' + sigParam[i]);\n        target.push(typeCodes[sigParam[i]]);\n      }\n\n      // Return values, length + signatures\n      // With no multi-return in MVP, either 0 (void) or 1 (anything else)\n      if (sigRet == 'v') {\n        target.push(0x00);\n      } else {\n        target.push(0x01, typeCodes[sigRet]);\n      }\n    };\n    var convertJsFunctionToWasm = (func, sig) => {\n      assert(\n        !sig.includes('j'),\n        'i64 not permitted in function signatures when WASM_BIGINT is disabled',\n      );\n\n      // If the type reflection proposal is available, use the new\n      // \"WebAssembly.Function\" constructor.\n      // Otherwise, construct a minimal wasm module importing the JS function and\n      // re-exporting it.\n      if (typeof WebAssembly.Function == 'function') {\n        return new WebAssembly.Function(sigToWasmTypes(sig), func);\n      }\n\n      // The module is static, with the exception of the type section, which is\n      // generated based on the signature passed in.\n      var typeSectionBody = [\n        0x01, // count: 1\n      ];\n      generateFuncType(sig, typeSectionBody);\n\n      // Rest of the module is static\n      var bytes = [\n        0x00,\n        0x61,\n        0x73,\n        0x6d, // magic (\"\\0asm\")\n        0x01,\n        0x00,\n        0x00,\n        0x00, // version: 1\n        0x01, // Type section code\n      ];\n      // Write the overall length of the type section followed by the body\n      uleb128Encode(typeSectionBody.length, bytes);\n      bytes.push(...typeSectionBody);\n\n      // The rest of the module is static\n      bytes.push(\n        0x02,\n        0x07, // import section\n        // (import \"e\" \"f\" (func 0 (type 0)))\n        0x01,\n        0x01,\n        0x65,\n        0x01,\n        0x66,\n        0x00,\n        0x00,\n        0x07,\n        0x05, // export section\n        // (export \"f\" (func 0 (type 0)))\n        0x01,\n        0x01,\n        0x66,\n        0x00,\n        0x00,\n      );\n\n      // We can compile this wasm module synchronously because it is very small.\n      // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\n      var module = new WebAssembly.Module(new Uint8Array(bytes));\n      var instance = new WebAssembly.Instance(module, { e: { f: func } });\n      var wrappedFunc = instance.exports['f'];\n      return wrappedFunc;\n    };\n\n    var updateTableMap = (offset, count) => {\n      if (functionsInTableMap) {\n        for (var i = offset; i < offset + count; i++) {\n          var item = getWasmTableEntry(i);\n          // Ignore null values.\n          if (item) {\n            functionsInTableMap.set(item, i);\n          }\n        }\n      }\n    };\n\n    var functionsInTableMap;\n\n    var getFunctionAddress = (func) => {\n      // First, create the map if this is the first use.\n      if (!functionsInTableMap) {\n        functionsInTableMap = new WeakMap();\n        updateTableMap(0, wasmTable.length);\n      }\n      return functionsInTableMap.get(func) || 0;\n    };\n\n    var freeTableIndexes = [];\n\n    var getEmptyTableSlot = () => {\n      // Reuse a free index if there is one, otherwise grow.\n      if (freeTableIndexes.length) {\n        return freeTableIndexes.pop();\n      }\n      // Grow the table\n      try {\n        wasmTable.grow(1);\n      } catch (err) {\n        if (!(err instanceof RangeError)) {\n          throw err;\n        }\n        throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.';\n      }\n      return wasmTable.length - 1;\n    };\n\n    var setWasmTableEntry = (idx, func) => {\n      wasmTable.set(idx, func);\n      // With ABORT_ON_WASM_EXCEPTIONS wasmTable.get is overridden to return wrapped\n      // functions so we need to call it here to retrieve the potential wrapper correctly\n      // instead of just storing 'func' directly into wasmTableMirror\n      wasmTableMirror[idx] = wasmTable.get(idx);\n    };\n\n    /** @param {string=} sig */\n    var addFunction = (func, sig) => {\n      assert(typeof func != 'undefined');\n      // Check if the function is already in the table, to ensure each function\n      // gets a unique index.\n      var rtn = getFunctionAddress(func);\n      if (rtn) {\n        return rtn;\n      }\n\n      // It's not in the table, add it now.\n\n      var ret = getEmptyTableSlot();\n\n      // Set the new value.\n      try {\n        // Attempting to call this with JS function will cause of table.set() to fail\n        setWasmTableEntry(ret, func);\n      } catch (err) {\n        if (!(err instanceof TypeError)) {\n          throw err;\n        }\n        assert(typeof sig != 'undefined', 'Missing signature argument to addFunction: ' + func);\n        var wrapped = convertJsFunctionToWasm(func, sig);\n        setWasmTableEntry(ret, wrapped);\n      }\n\n      functionsInTableMap.set(func, ret);\n\n      return ret;\n    };\n\n    var getCFunc = (ident) => {\n      var func = Module['_' + ident]; // closure exported function\n      assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\n      return func;\n    };\n\n    var writeArrayToMemory = (array, buffer) => {\n      assert(\n        array.length >= 0,\n        'writeArrayToMemory array must have a length (should be an array or typed array)',\n      );\n      HEAP8.set(array, buffer);\n    };\n\n    var stackAlloc = (sz) => __emscripten_stack_alloc(sz);\n    var stringToUTF8OnStack = (str) => {\n      var size = lengthBytesUTF8(str) + 1;\n      var ret = stackAlloc(size);\n      stringToUTF8(str, ret, size);\n      return ret;\n    };\n\n    /**\n     * @param {string|null=} returnType\n     * @param {Array=} argTypes\n     * @param {Arguments|Array=} args\n     * @param {Object=} opts\n     */\n    var ccall = (ident, returnType, argTypes, args, opts) => {\n      // For fast lookup of conversion functions\n      var toC = {\n        string: (str) => {\n          var ret = 0;\n          if (str !== null && str !== undefined && str !== 0) {\n            // null string\n            ret = stringToUTF8OnStack(str);\n          }\n          return ret;\n        },\n        array: (arr) => {\n          var ret = stackAlloc(arr.length);\n          writeArrayToMemory(arr, ret);\n          return ret;\n        },\n      };\n\n      function convertReturnValue(ret) {\n        if (returnType === 'string') {\n          return UTF8ToString(ret);\n        }\n        if (returnType === 'boolean') return Boolean(ret);\n        return ret;\n      }\n\n      var func = getCFunc(ident);\n      var cArgs = [];\n      var stack = 0;\n      assert(returnType !== 'array', 'Return type should not be \"array\".');\n      if (args) {\n        for (var i = 0; i < args.length; i++) {\n          var converter = toC[argTypes[i]];\n          if (converter) {\n            if (stack === 0) stack = stackSave();\n            cArgs[i] = converter(args[i]);\n          } else {\n            cArgs[i] = args[i];\n          }\n        }\n      }\n      var ret = func(...cArgs);\n      function onDone(ret) {\n        if (stack !== 0) stackRestore(stack);\n        return convertReturnValue(ret);\n      }\n\n      ret = onDone(ret);\n      return ret;\n    };\n\n    /**\n     * @param {string=} returnType\n     * @param {Array=} argTypes\n     * @param {Object=} opts\n     */\n    var cwrap = (ident, returnType, argTypes, opts) => {\n      return (...args) => ccall(ident, returnType, argTypes, args);\n    };\n\n    var removeFunction = (index) => {\n      functionsInTableMap.delete(getWasmTableEntry(index));\n      setWasmTableEntry(index, null);\n      freeTableIndexes.push(index);\n    };\n\n    var stringToUTF16 = (str, outPtr, maxBytesToWrite) => {\n      assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!');\n      assert(\n        typeof maxBytesToWrite == 'number',\n        'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!',\n      );\n      // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\n      maxBytesToWrite ??= 0x7fffffff;\n      if (maxBytesToWrite < 2) return 0;\n      maxBytesToWrite -= 2; // Null terminator.\n      var startPtr = outPtr;\n      var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length;\n      for (var i = 0; i < numCharsToWrite; ++i) {\n        // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\n        var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\n        HEAP16[outPtr >> 1] = codeUnit;\n        outPtr += 2;\n      }\n      // Null-terminate the pointer to the HEAP.\n      HEAP16[outPtr >> 1] = 0;\n      return outPtr - startPtr;\n    };\n\n    FS.createPreloadedFile = FS_createPreloadedFile;\n    FS.staticInit();\n    // Set module methods based on EXPORTED_RUNTIME_METHODS\n    function checkIncomingModuleAPI() {\n      ignoredModuleProp('fetchSettings');\n    }\n    var wasmImports = {\n      /** @export */\n      __assert_fail: ___assert_fail,\n      /** @export */\n      __syscall_fcntl64: ___syscall_fcntl64,\n      /** @export */\n      __syscall_fstat64: ___syscall_fstat64,\n      /** @export */\n      __syscall_ftruncate64: ___syscall_ftruncate64,\n      /** @export */\n      __syscall_getdents64: ___syscall_getdents64,\n      /** @export */\n      __syscall_ioctl: ___syscall_ioctl,\n      /** @export */\n      __syscall_lstat64: ___syscall_lstat64,\n      /** @export */\n      __syscall_newfstatat: ___syscall_newfstatat,\n      /** @export */\n      __syscall_openat: ___syscall_openat,\n      /** @export */\n      __syscall_rmdir: ___syscall_rmdir,\n      /** @export */\n      __syscall_stat64: ___syscall_stat64,\n      /** @export */\n      __syscall_unlinkat: ___syscall_unlinkat,\n      /** @export */\n      _abort_js: __abort_js,\n      /** @export */\n      _emscripten_memcpy_js: __emscripten_memcpy_js,\n      /** @export */\n      _emscripten_throw_longjmp: __emscripten_throw_longjmp,\n      /** @export */\n      _gmtime_js: __gmtime_js,\n      /** @export */\n      _localtime_js: __localtime_js,\n      /** @export */\n      _tzset_js: __tzset_js,\n      /** @export */\n      emscripten_date_now: _emscripten_date_now,\n      /** @export */\n      emscripten_resize_heap: _emscripten_resize_heap,\n      /** @export */\n      environ_get: _environ_get,\n      /** @export */\n      environ_sizes_get: _environ_sizes_get,\n      /** @export */\n      fd_close: _fd_close,\n      /** @export */\n      fd_read: _fd_read,\n      /** @export */\n      fd_seek: _fd_seek,\n      /** @export */\n      fd_sync: _fd_sync,\n      /** @export */\n      fd_write: _fd_write,\n      /** @export */\n      invoke_ii,\n      /** @export */\n      invoke_iii,\n      /** @export */\n      invoke_iiii,\n      /** @export */\n      invoke_iiiii,\n      /** @export */\n      invoke_v,\n      /** @export */\n      invoke_vii,\n      /** @export */\n      invoke_viii,\n      /** @export */\n      invoke_viiii,\n      /** @export */\n      invoke_viiiiiiiii,\n    };\n    var wasmExports = createWasm();\n    (Module['_PDFiumExt_Init'] = createExportWrapper('PDFiumExt_Init', 0));\n    (Module['_FPDF_InitLibraryWithConfig'] = createExportWrapper(\n      'FPDF_InitLibraryWithConfig',\n      1,\n    ));\n    (Module['_PDFiumExt_OpenFileWriter'] = createExportWrapper(\n      'PDFiumExt_OpenFileWriter',\n      0,\n    ));\n    (Module['_PDFiumExt_GetFileWriterSize'] =\n      createExportWrapper('PDFiumExt_GetFileWriterSize', 1));\n    (Module['_PDFiumExt_GetFileWriterData'] =\n      createExportWrapper('PDFiumExt_GetFileWriterData', 3));\n    (Module['_PDFiumExt_CloseFileWriter'] = createExportWrapper(\n      'PDFiumExt_CloseFileWriter',\n      1,\n    ));\n    (Module['_PDFiumExt_SaveAsCopy'] = createExportWrapper(\n      'PDFiumExt_SaveAsCopy',\n      2,\n    ));\n    (Module['_FPDF_SaveAsCopy'] = createExportWrapper('FPDF_SaveAsCopy', 3));\n    (Module['_PDFiumExt_OpenFormFillInfo'] = createExportWrapper(\n      'PDFiumExt_OpenFormFillInfo',\n      0,\n    ));\n    (Module['_PDFiumExt_CloseFormFillInfo'] =\n      createExportWrapper('PDFiumExt_CloseFormFillInfo', 1));\n    (Module['_PDFiumExt_InitFormFillEnvironment'] =\n      createExportWrapper('PDFiumExt_InitFormFillEnvironment', 2));\n    (Module['_FPDFDOC_InitFormFillEnvironment'] =\n      createExportWrapper('FPDFDOC_InitFormFillEnvironment', 2));\n    (Module['_PDFiumExt_ExitFormFillEnvironment'] =\n      createExportWrapper('PDFiumExt_ExitFormFillEnvironment', 1));\n    (Module['_FPDFDOC_ExitFormFillEnvironment'] =\n      createExportWrapper('FPDFDOC_ExitFormFillEnvironment', 1));\n    (Module['_EPDFNamedDest_SetDest'] = createExportWrapper(\n      'EPDFNamedDest_SetDest',\n      3,\n    ));\n    (Module['_EPDFNamedDest_Remove'] = createExportWrapper(\n      'EPDFNamedDest_Remove',\n      2,\n    ));\n    (Module['_EPDFDest_CreateView'] = createExportWrapper(\n      'EPDFDest_CreateView',\n      4,\n    ));\n    (Module['_EPDFDest_CreateXYZ'] = createExportWrapper(\n      'EPDFDest_CreateXYZ',\n      7,\n    ));\n    (Module['_EPDFDest_CreateRemoteView'] = createExportWrapper(\n      'EPDFDest_CreateRemoteView',\n      5,\n    ));\n    (Module['_EPDFDest_CreateRemoteXYZ'] = createExportWrapper(\n      'EPDFDest_CreateRemoteXYZ',\n      8,\n    ));\n    (Module['_EPDFAction_CreateGoTo'] = createExportWrapper(\n      'EPDFAction_CreateGoTo',\n      2,\n    ));\n    (Module['_EPDFAction_CreateGoToNamed'] = createExportWrapper(\n      'EPDFAction_CreateGoToNamed',\n      2,\n    ));\n    (Module['_EPDFAction_CreateLaunch'] = createExportWrapper(\n      'EPDFAction_CreateLaunch',\n      2,\n    ));\n    (Module['_EPDFAction_CreateRemoteGoToByName'] =\n      createExportWrapper('EPDFAction_CreateRemoteGoToByName', 3));\n    (Module['_EPDFAction_CreateRemoteGoToDest'] =\n      createExportWrapper('EPDFAction_CreateRemoteGoToDest', 3));\n    (Module['_EPDFAction_CreateURI'] = createExportWrapper(\n      'EPDFAction_CreateURI',\n      2,\n    ));\n    (Module['_EPDFBookmark_Create'] = createExportWrapper(\n      'EPDFBookmark_Create',\n      2,\n    ));\n    (Module['_EPDFBookmark_Delete'] = createExportWrapper(\n      'EPDFBookmark_Delete',\n      2,\n    ));\n    (Module['_EPDFBookmark_AppendChild'] = createExportWrapper(\n      'EPDFBookmark_AppendChild',\n      3,\n    ));\n    (Module['_EPDFBookmark_InsertAfter'] = createExportWrapper(\n      'EPDFBookmark_InsertAfter',\n      4,\n    ));\n    (Module['_EPDFBookmark_Clear'] = createExportWrapper(\n      'EPDFBookmark_Clear',\n      1,\n    ));\n    (Module['_EPDFBookmark_SetTitle'] = createExportWrapper(\n      'EPDFBookmark_SetTitle',\n      2,\n    ));\n    (Module['_EPDFBookmark_SetDest'] = createExportWrapper(\n      'EPDFBookmark_SetDest',\n      3,\n    ));\n    (Module['_EPDFBookmark_SetAction'] = createExportWrapper(\n      'EPDFBookmark_SetAction',\n      3,\n    ));\n    (Module['_EPDFBookmark_ClearTarget'] = createExportWrapper(\n      'EPDFBookmark_ClearTarget',\n      1,\n    ));\n    (Module['_EPDF_PNG_EncodeRGBA'] = createExportWrapper(\n      'EPDF_PNG_EncodeRGBA',\n      6,\n    ));\n    (Module['_FPDFAnnot_IsSupportedSubtype'] =\n      createExportWrapper('FPDFAnnot_IsSupportedSubtype', 1));\n    (Module['_FPDFPage_CreateAnnot'] = createExportWrapper(\n      'FPDFPage_CreateAnnot',\n      2,\n    ));\n    (Module['_FPDFPage_GetAnnotCount'] = createExportWrapper(\n      'FPDFPage_GetAnnotCount',\n      1,\n    ));\n    (Module['_FPDFPage_GetAnnot'] = createExportWrapper(\n      'FPDFPage_GetAnnot',\n      2,\n    ));\n    (Module['_FPDFPage_GetAnnotIndex'] = createExportWrapper(\n      'FPDFPage_GetAnnotIndex',\n      2,\n    ));\n    (Module['_FPDFPage_CloseAnnot'] = createExportWrapper(\n      'FPDFPage_CloseAnnot',\n      1,\n    ));\n    (Module['_FPDFPage_RemoveAnnot'] = createExportWrapper(\n      'FPDFPage_RemoveAnnot',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetSubtype'] = createExportWrapper(\n      'FPDFAnnot_GetSubtype',\n      1,\n    ));\n    (Module['_FPDFAnnot_IsObjectSupportedSubtype'] =\n      createExportWrapper('FPDFAnnot_IsObjectSupportedSubtype', 1));\n    (Module['_FPDFAnnot_UpdateObject'] = createExportWrapper(\n      'FPDFAnnot_UpdateObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_AddInkStroke'] = createExportWrapper(\n      'FPDFAnnot_AddInkStroke',\n      3,\n    ));\n    (Module['_FPDFAnnot_RemoveInkList'] = createExportWrapper(\n      'FPDFAnnot_RemoveInkList',\n      1,\n    ));\n    (Module['_FPDFAnnot_AppendObject'] = createExportWrapper(\n      'FPDFAnnot_AppendObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetObjectCount'] = createExportWrapper(\n      'FPDFAnnot_GetObjectCount',\n      1,\n    ));\n    (Module['_FPDFAnnot_GetObject'] = createExportWrapper(\n      'FPDFAnnot_GetObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_RemoveObject'] = createExportWrapper(\n      'FPDFAnnot_RemoveObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_SetColor'] = createExportWrapper(\n      'FPDFAnnot_SetColor',\n      6,\n    ));\n    (Module['_FPDFAnnot_GetColor'] = createExportWrapper(\n      'FPDFAnnot_GetColor',\n      6,\n    ));\n    (Module['_FPDFAnnot_HasAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_HasAttachmentPoints', 1));\n    (Module['_FPDFAnnot_SetAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_SetAttachmentPoints', 3));\n    (Module['_FPDFAnnot_AppendAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_AppendAttachmentPoints', 2));\n    (Module['_FPDFAnnot_CountAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_CountAttachmentPoints', 1));\n    (Module['_FPDFAnnot_GetAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_GetAttachmentPoints', 3));\n    (Module['_FPDFAnnot_SetRect'] = createExportWrapper(\n      'FPDFAnnot_SetRect',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetRect'] = createExportWrapper(\n      'FPDFAnnot_GetRect',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetVertices'] = createExportWrapper(\n      'FPDFAnnot_GetVertices',\n      3,\n    ));\n    (Module['_FPDFAnnot_GetInkListCount'] = createExportWrapper(\n      'FPDFAnnot_GetInkListCount',\n      1,\n    ));\n    (Module['_FPDFAnnot_GetInkListPath'] = createExportWrapper(\n      'FPDFAnnot_GetInkListPath',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetLine'] = createExportWrapper(\n      'FPDFAnnot_GetLine',\n      3,\n    ));\n    (Module['_FPDFAnnot_SetBorder'] = createExportWrapper(\n      'FPDFAnnot_SetBorder',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetBorder'] = createExportWrapper(\n      'FPDFAnnot_GetBorder',\n      4,\n    ));\n    (Module['_FPDFAnnot_HasKey'] = createExportWrapper(\n      'FPDFAnnot_HasKey',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetValueType'] = createExportWrapper(\n      'FPDFAnnot_GetValueType',\n      2,\n    ));\n    (Module['_FPDFAnnot_SetStringValue'] = createExportWrapper(\n      'FPDFAnnot_SetStringValue',\n      3,\n    ));\n    (Module['_FPDFAnnot_GetStringValue'] = createExportWrapper(\n      'FPDFAnnot_GetStringValue',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetNumberValue'] = createExportWrapper(\n      'FPDFAnnot_GetNumberValue',\n      3,\n    ));\n    (Module['_FPDFAnnot_SetAP'] = createExportWrapper('FPDFAnnot_SetAP', 3));\n    (Module['_FPDFAnnot_GetAP'] = createExportWrapper('FPDFAnnot_GetAP', 4));\n    (Module['_FPDFAnnot_GetLinkedAnnot'] = createExportWrapper(\n      'FPDFAnnot_GetLinkedAnnot',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetFlags'] = createExportWrapper(\n      'FPDFAnnot_GetFlags',\n      1,\n    ));\n    (Module['_FPDFAnnot_SetFlags'] = createExportWrapper(\n      'FPDFAnnot_SetFlags',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetFormFieldFlags'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldFlags', 2));\n    (Module['_FPDFAnnot_SetFormFieldFlags'] =\n      createExportWrapper('FPDFAnnot_SetFormFieldFlags', 3));\n    (Module['_FPDFAnnot_GetFormFieldAtPoint'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldAtPoint', 3));\n    (Module['_FPDFAnnot_GetFormFieldName'] = createExportWrapper(\n      'FPDFAnnot_GetFormFieldName',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetFormFieldType'] = createExportWrapper(\n      'FPDFAnnot_GetFormFieldType',\n      2,\n    ));\n    (Module[\n      '_FPDFAnnot_GetFormAdditionalActionJavaScript'\n    ] = createExportWrapper('FPDFAnnot_GetFormAdditionalActionJavaScript', 5));\n    (Module['_FPDFAnnot_GetFormFieldAlternateName'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldAlternateName', 4));\n    (Module['_FPDFAnnot_GetFormFieldValue'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldValue', 4));\n    (Module['_FPDFAnnot_GetOptionCount'] = createExportWrapper(\n      'FPDFAnnot_GetOptionCount',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetOptionLabel'] = createExportWrapper(\n      'FPDFAnnot_GetOptionLabel',\n      5,\n    ));\n    (Module['_FPDFAnnot_IsOptionSelected'] = createExportWrapper(\n      'FPDFAnnot_IsOptionSelected',\n      3,\n    ));\n    (Module['_FPDFAnnot_GetFontSize'] = createExportWrapper(\n      'FPDFAnnot_GetFontSize',\n      3,\n    ));\n    (Module['_FPDFAnnot_SetFontColor'] = createExportWrapper(\n      'FPDFAnnot_SetFontColor',\n      5,\n    ));\n    (Module['_FPDFAnnot_GetFontColor'] = createExportWrapper(\n      'FPDFAnnot_GetFontColor',\n      5,\n    ));\n    (Module['_FPDFAnnot_IsChecked'] = createExportWrapper(\n      'FPDFAnnot_IsChecked',\n      2,\n    ));\n    (Module['_FPDFAnnot_SetFocusableSubtypes'] =\n      createExportWrapper('FPDFAnnot_SetFocusableSubtypes', 3));\n    (Module['_FPDFAnnot_GetFocusableSubtypesCount'] =\n      createExportWrapper('FPDFAnnot_GetFocusableSubtypesCount', 1));\n    (Module['_FPDFAnnot_GetFocusableSubtypes'] =\n      createExportWrapper('FPDFAnnot_GetFocusableSubtypes', 3));\n    (Module['_FPDFAnnot_GetLink'] = createExportWrapper(\n      'FPDFAnnot_GetLink',\n      1,\n    ));\n    (Module['_FPDFAnnot_GetFormControlCount'] =\n      createExportWrapper('FPDFAnnot_GetFormControlCount', 2));\n    (Module['_FPDFAnnot_GetFormControlIndex'] =\n      createExportWrapper('FPDFAnnot_GetFormControlIndex', 2));\n    (Module['_FPDFAnnot_GetFormFieldExportValue'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldExportValue', 4));\n    (Module['_FPDFAnnot_SetURI'] = createExportWrapper(\n      'FPDFAnnot_SetURI',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetFileAttachment'] =\n      createExportWrapper('FPDFAnnot_GetFileAttachment', 1));\n    (Module['_FPDFAnnot_AddFileAttachment'] =\n      createExportWrapper('FPDFAnnot_AddFileAttachment', 2));\n    (Module['_EPDFAnnot_SetColor'] = createExportWrapper(\n      'EPDFAnnot_SetColor',\n      5,\n    ));\n    (Module['_EPDFAnnot_GetColor'] = createExportWrapper(\n      'EPDFAnnot_GetColor',\n      5,\n    ));\n    (Module['_EPDFAnnot_ClearColor'] = createExportWrapper(\n      'EPDFAnnot_ClearColor',\n      2,\n    ));\n    (Module['_EPDFAnnot_SetOpacity'] = createExportWrapper(\n      'EPDFAnnot_SetOpacity',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetOpacity'] = createExportWrapper(\n      'EPDFAnnot_GetOpacity',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetBorderEffect'] = createExportWrapper(\n      'EPDFAnnot_GetBorderEffect',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetRectangleDifferences'] =\n      createExportWrapper('EPDFAnnot_GetRectangleDifferences', 5));\n    (Module['_EPDFAnnot_GetBorderDashPatternCount'] =\n      createExportWrapper('EPDFAnnot_GetBorderDashPatternCount', 1));\n    (Module['_EPDFAnnot_GetBorderDashPattern'] =\n      createExportWrapper('EPDFAnnot_GetBorderDashPattern', 3));\n    (Module['_EPDFAnnot_SetBorderDashPattern'] =\n      createExportWrapper('EPDFAnnot_SetBorderDashPattern', 3));\n    (Module['_EPDFAnnot_GetBorderStyle'] = createExportWrapper(\n      'EPDFAnnot_GetBorderStyle',\n      2,\n    ));\n    (Module['_EPDFAnnot_SetBorderStyle'] = createExportWrapper(\n      'EPDFAnnot_SetBorderStyle',\n      3,\n    ));\n    (Module['_EPDFAnnot_GenerateAppearance'] =\n      createExportWrapper('EPDFAnnot_GenerateAppearance', 1));\n    (Module['_EPDFAnnot_GenerateAppearanceWithBlend'] =\n      createExportWrapper('EPDFAnnot_GenerateAppearanceWithBlend', 2));\n    (Module['_EPDFAnnot_GetBlendMode'] = createExportWrapper(\n      'EPDFAnnot_GetBlendMode',\n      1,\n    ));\n    (Module['_EPDFAnnot_SetIntent'] = createExportWrapper(\n      'EPDFAnnot_SetIntent',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetIntent'] = createExportWrapper(\n      'EPDFAnnot_GetIntent',\n      3,\n    ));\n    (Module['_EPDFAnnot_GetRichContent'] = createExportWrapper(\n      'EPDFAnnot_GetRichContent',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetLineEndings'] = createExportWrapper(\n      'EPDFAnnot_SetLineEndings',\n      3,\n    ));\n    (Module['_EPDFAnnot_GetLineEndings'] = createExportWrapper(\n      'EPDFAnnot_GetLineEndings',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetVertices'] = createExportWrapper(\n      'EPDFAnnot_SetVertices',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetLine'] = createExportWrapper(\n      'EPDFAnnot_SetLine',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetDefaultAppearance'] =\n      createExportWrapper('EPDFAnnot_SetDefaultAppearance', 6));\n    (Module['_EPDFAnnot_GetDefaultAppearance'] =\n      createExportWrapper('EPDFAnnot_GetDefaultAppearance', 6));\n    (Module['_EPDFAnnot_SetTextAlignment'] = createExportWrapper(\n      'EPDFAnnot_SetTextAlignment',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetTextAlignment'] = createExportWrapper(\n      'EPDFAnnot_GetTextAlignment',\n      1,\n    ));\n    (Module['_EPDFAnnot_SetVerticalAlignment'] =\n      createExportWrapper('EPDFAnnot_SetVerticalAlignment', 2));\n    (Module['_EPDFAnnot_GetVerticalAlignment'] =\n      createExportWrapper('EPDFAnnot_GetVerticalAlignment', 1));\n    (Module['_EPDFPage_GetAnnotByName'] = createExportWrapper(\n      'EPDFPage_GetAnnotByName',\n      2,\n    ));\n    (Module['_EPDFPage_RemoveAnnotByName'] = createExportWrapper(\n      'EPDFPage_RemoveAnnotByName',\n      2,\n    ));\n    (Module['_EPDFAnnot_SetLinkedAnnot'] = createExportWrapper(\n      'EPDFAnnot_SetLinkedAnnot',\n      3,\n    ));\n    (Module['_EPDFPage_GetAnnotCountRaw'] = createExportWrapper(\n      'EPDFPage_GetAnnotCountRaw',\n      2,\n    ));\n    (Module['_EPDFPage_GetAnnotRaw'] = createExportWrapper(\n      'EPDFPage_GetAnnotRaw',\n      3,\n    ));\n    (Module['_EPDFPage_RemoveAnnotRaw'] = createExportWrapper(\n      'EPDFPage_RemoveAnnotRaw',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetIcon'] = createExportWrapper(\n      'EPDFAnnot_SetIcon',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetIcon'] = createExportWrapper(\n      'EPDFAnnot_GetIcon',\n      1,\n    ));\n    (Module['_EPDFAnnot_UpdateAppearanceToRect'] =\n      createExportWrapper('EPDFAnnot_UpdateAppearanceToRect', 2));\n    (Module['_EPDFPage_CreateAnnot'] = createExportWrapper(\n      'EPDFPage_CreateAnnot',\n      2,\n    ));\n    (Module['_FPDFDoc_GetAttachmentCount'] = createExportWrapper(\n      'FPDFDoc_GetAttachmentCount',\n      1,\n    ));\n    (Module['_FPDFDoc_AddAttachment'] = createExportWrapper(\n      'FPDFDoc_AddAttachment',\n      2,\n    ));\n    (Module['_FPDFDoc_GetAttachment'] = createExportWrapper(\n      'FPDFDoc_GetAttachment',\n      2,\n    ));\n    (Module['_FPDFDoc_DeleteAttachment'] = createExportWrapper(\n      'FPDFDoc_DeleteAttachment',\n      2,\n    ));\n    (Module['_FPDFAttachment_GetName'] = createExportWrapper(\n      'FPDFAttachment_GetName',\n      3,\n    ));\n    (Module['_FPDFAttachment_HasKey'] = createExportWrapper(\n      'FPDFAttachment_HasKey',\n      2,\n    ));\n    (Module['_FPDFAttachment_GetValueType'] =\n      createExportWrapper('FPDFAttachment_GetValueType', 2));\n    (Module['_FPDFAttachment_SetStringValue'] =\n      createExportWrapper('FPDFAttachment_SetStringValue', 3));\n    (Module['_FPDFAttachment_GetStringValue'] =\n      createExportWrapper('FPDFAttachment_GetStringValue', 4));\n    (Module['_FPDFAttachment_SetFile'] = createExportWrapper(\n      'FPDFAttachment_SetFile',\n      4,\n    ));\n    (Module['_FPDFAttachment_GetFile'] = createExportWrapper(\n      'FPDFAttachment_GetFile',\n      4,\n    ));\n    (Module['_FPDFAttachment_GetSubtype'] = createExportWrapper(\n      'FPDFAttachment_GetSubtype',\n      3,\n    ));\n    (Module['_EPDFAttachment_SetSubtype'] = createExportWrapper(\n      'EPDFAttachment_SetSubtype',\n      2,\n    ));\n    (Module['_EPDFAttachment_SetDescription'] =\n      createExportWrapper('EPDFAttachment_SetDescription', 2));\n    (Module['_EPDFAttachment_GetDescription'] =\n      createExportWrapper('EPDFAttachment_GetDescription', 3));\n    (Module['_EPDFAttachment_GetIntegerValue'] =\n      createExportWrapper('EPDFAttachment_GetIntegerValue', 3));\n    (Module['_FPDFCatalog_IsTagged'] = createExportWrapper(\n      'FPDFCatalog_IsTagged',\n      1,\n    ));\n    (Module['_FPDFCatalog_SetLanguage'] = createExportWrapper(\n      'FPDFCatalog_SetLanguage',\n      2,\n    ));\n    (Module['_EPDFCatalog_GetLanguage'] = createExportWrapper(\n      'EPDFCatalog_GetLanguage',\n      3,\n    ));\n    (Module['_FPDFAvail_Create'] = createExportWrapper(\n      'FPDFAvail_Create',\n      2,\n    ));\n    (Module['_FPDFAvail_Destroy'] = createExportWrapper(\n      'FPDFAvail_Destroy',\n      1,\n    ));\n    (Module['_FPDFAvail_IsDocAvail'] = createExportWrapper(\n      'FPDFAvail_IsDocAvail',\n      2,\n    ));\n    (Module['_FPDFAvail_GetDocument'] = createExportWrapper(\n      'FPDFAvail_GetDocument',\n      2,\n    ));\n    (Module['_FPDFAvail_GetFirstPageNum'] = createExportWrapper(\n      'FPDFAvail_GetFirstPageNum',\n      1,\n    ));\n    (Module['_FPDFAvail_IsPageAvail'] = createExportWrapper(\n      'FPDFAvail_IsPageAvail',\n      3,\n    ));\n    (Module['_FPDFAvail_IsFormAvail'] = createExportWrapper(\n      'FPDFAvail_IsFormAvail',\n      2,\n    ));\n    (Module['_FPDFAvail_IsLinearized'] = createExportWrapper(\n      'FPDFAvail_IsLinearized',\n      1,\n    ));\n    (Module['_FPDFBookmark_GetFirstChild'] = createExportWrapper(\n      'FPDFBookmark_GetFirstChild',\n      2,\n    ));\n    (Module['_FPDFBookmark_GetNextSibling'] =\n      createExportWrapper('FPDFBookmark_GetNextSibling', 2));\n    (Module['_FPDFBookmark_GetTitle'] = createExportWrapper(\n      'FPDFBookmark_GetTitle',\n      3,\n    ));\n    (Module['_FPDFBookmark_GetCount'] = createExportWrapper(\n      'FPDFBookmark_GetCount',\n      1,\n    ));\n    (Module['_FPDFBookmark_Find'] = createExportWrapper(\n      'FPDFBookmark_Find',\n      2,\n    ));\n    (Module['_FPDFBookmark_GetDest'] = createExportWrapper(\n      'FPDFBookmark_GetDest',\n      2,\n    ));\n    (Module['_FPDFBookmark_GetAction'] = createExportWrapper(\n      'FPDFBookmark_GetAction',\n      1,\n    ));\n    (Module['_FPDFAction_GetType'] = createExportWrapper(\n      'FPDFAction_GetType',\n      1,\n    ));\n    (Module['_FPDFAction_GetDest'] = createExportWrapper(\n      'FPDFAction_GetDest',\n      2,\n    ));\n    (Module['_FPDFAction_GetFilePath'] = createExportWrapper(\n      'FPDFAction_GetFilePath',\n      3,\n    ));\n    (Module['_FPDFAction_GetURIPath'] = createExportWrapper(\n      'FPDFAction_GetURIPath',\n      4,\n    ));\n    (Module['_FPDFDest_GetDestPageIndex'] = createExportWrapper(\n      'FPDFDest_GetDestPageIndex',\n      2,\n    ));\n    (Module['_FPDFDest_GetView'] = createExportWrapper(\n      'FPDFDest_GetView',\n      3,\n    ));\n    (Module['_FPDFDest_GetLocationInPage'] = createExportWrapper(\n      'FPDFDest_GetLocationInPage',\n      7,\n    ));\n    (Module['_FPDFLink_GetLinkAtPoint'] = createExportWrapper(\n      'FPDFLink_GetLinkAtPoint',\n      3,\n    ));\n    (Module['_FPDFLink_GetLinkZOrderAtPoint'] =\n      createExportWrapper('FPDFLink_GetLinkZOrderAtPoint', 3));\n    (Module['_FPDFLink_GetDest'] = createExportWrapper(\n      'FPDFLink_GetDest',\n      2,\n    ));\n    (Module['_FPDFLink_GetAction'] = createExportWrapper(\n      'FPDFLink_GetAction',\n      1,\n    ));\n    (Module['_FPDFLink_Enumerate'] = createExportWrapper(\n      'FPDFLink_Enumerate',\n      3,\n    ));\n    (Module['_FPDFLink_GetAnnot'] = createExportWrapper(\n      'FPDFLink_GetAnnot',\n      2,\n    ));\n    (Module['_FPDFLink_GetAnnotRect'] = createExportWrapper(\n      'FPDFLink_GetAnnotRect',\n      2,\n    ));\n    (Module['_FPDFLink_CountQuadPoints'] = createExportWrapper(\n      'FPDFLink_CountQuadPoints',\n      1,\n    ));\n    (Module['_FPDFLink_GetQuadPoints'] = createExportWrapper(\n      'FPDFLink_GetQuadPoints',\n      3,\n    ));\n    (Module['_FPDF_GetPageAAction'] = createExportWrapper(\n      'FPDF_GetPageAAction',\n      2,\n    ));\n    (Module['_FPDF_GetFileIdentifier'] = createExportWrapper(\n      'FPDF_GetFileIdentifier',\n      4,\n    ));\n    (Module['_FPDF_GetMetaText'] = createExportWrapper(\n      'FPDF_GetMetaText',\n      4,\n    ));\n    (Module['_FPDF_GetPageLabel'] = createExportWrapper(\n      'FPDF_GetPageLabel',\n      4,\n    ));\n    (Module['_EPDF_SetMetaText'] = createExportWrapper(\n      'EPDF_SetMetaText',\n      3,\n    ));\n    (Module['_EPDF_HasMetaText'] = createExportWrapper(\n      'EPDF_HasMetaText',\n      2,\n    ));\n    (Module['_EPDF_GetMetaTrapped'] = createExportWrapper(\n      'EPDF_GetMetaTrapped',\n      1,\n    ));\n    (Module['_EPDF_SetMetaTrapped'] = createExportWrapper(\n      'EPDF_SetMetaTrapped',\n      2,\n    ));\n    (Module['_EPDF_GetMetaKeyCount'] = createExportWrapper(\n      'EPDF_GetMetaKeyCount',\n      2,\n    ));\n    (Module['_EPDF_GetMetaKeyName'] = createExportWrapper(\n      'EPDF_GetMetaKeyName',\n      5,\n    ));\n    (Module['_FPDFPageObj_NewImageObj'] = createExportWrapper(\n      'FPDFPageObj_NewImageObj',\n      1,\n    ));\n    (Module['_FPDFImageObj_LoadJpegFile'] = createExportWrapper(\n      'FPDFImageObj_LoadJpegFile',\n      4,\n    ));\n    (Module['_FPDFImageObj_LoadJpegFileInline'] =\n      createExportWrapper('FPDFImageObj_LoadJpegFileInline', 4));\n    (Module['_FPDFImageObj_SetMatrix'] = createExportWrapper(\n      'FPDFImageObj_SetMatrix',\n      7,\n    ));\n    (Module['_FPDFImageObj_SetBitmap'] = createExportWrapper(\n      'FPDFImageObj_SetBitmap',\n      4,\n    ));\n    (Module['_FPDFImageObj_GetBitmap'] = createExportWrapper(\n      'FPDFImageObj_GetBitmap',\n      1,\n    ));\n    (Module['_FPDFImageObj_GetRenderedBitmap'] =\n      createExportWrapper('FPDFImageObj_GetRenderedBitmap', 3));\n    (Module['_FPDFImageObj_GetImageDataDecoded'] =\n      createExportWrapper('FPDFImageObj_GetImageDataDecoded', 3));\n    (Module['_FPDFImageObj_GetImageDataRaw'] =\n      createExportWrapper('FPDFImageObj_GetImageDataRaw', 3));\n    (Module['_FPDFImageObj_GetImageFilterCount'] =\n      createExportWrapper('FPDFImageObj_GetImageFilterCount', 1));\n    (Module['_FPDFImageObj_GetImageFilter'] =\n      createExportWrapper('FPDFImageObj_GetImageFilter', 4));\n    (Module['_FPDFImageObj_GetImageMetadata'] =\n      createExportWrapper('FPDFImageObj_GetImageMetadata', 3));\n    (Module['_FPDFImageObj_GetImagePixelSize'] =\n      createExportWrapper('FPDFImageObj_GetImagePixelSize', 3));\n    (Module['_FPDFImageObj_GetIccProfileDataDecoded'] =\n      createExportWrapper('FPDFImageObj_GetIccProfileDataDecoded', 5));\n    (Module['_FPDF_CreateNewDocument'] = createExportWrapper(\n      'FPDF_CreateNewDocument',\n      0,\n    ));\n    (Module['_FPDFPage_Delete'] = createExportWrapper('FPDFPage_Delete', 2));\n    (Module['_FPDF_MovePages'] = createExportWrapper('FPDF_MovePages', 4));\n    (Module['_FPDFPage_New'] = createExportWrapper('FPDFPage_New', 4));\n    (Module['_FPDFPage_GetRotation'] = createExportWrapper(\n      'FPDFPage_GetRotation',\n      1,\n    ));\n    (Module['_FPDFPage_InsertObject'] = createExportWrapper(\n      'FPDFPage_InsertObject',\n      2,\n    ));\n    (Module['_FPDFPage_InsertObjectAtIndex'] =\n      createExportWrapper('FPDFPage_InsertObjectAtIndex', 3));\n    (Module['_FPDFPage_RemoveObject'] = createExportWrapper(\n      'FPDFPage_RemoveObject',\n      2,\n    ));\n    (Module['_FPDFPage_CountObjects'] = createExportWrapper(\n      'FPDFPage_CountObjects',\n      1,\n    ));\n    (Module['_FPDFPage_GetObject'] = createExportWrapper(\n      'FPDFPage_GetObject',\n      2,\n    ));\n    (Module['_FPDFPage_HasTransparency'] = createExportWrapper(\n      'FPDFPage_HasTransparency',\n      1,\n    ));\n    (Module['_FPDFPageObj_Destroy'] = createExportWrapper(\n      'FPDFPageObj_Destroy',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetMarkedContentID'] =\n      createExportWrapper('FPDFPageObj_GetMarkedContentID', 1));\n    (Module['_FPDFPageObj_CountMarks'] = createExportWrapper(\n      'FPDFPageObj_CountMarks',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetMark'] = createExportWrapper(\n      'FPDFPageObj_GetMark',\n      2,\n    ));\n    (Module['_FPDFPageObj_AddMark'] = createExportWrapper(\n      'FPDFPageObj_AddMark',\n      2,\n    ));\n    (Module['_FPDFPageObj_RemoveMark'] = createExportWrapper(\n      'FPDFPageObj_RemoveMark',\n      2,\n    ));\n    (Module['_FPDFPageObjMark_GetName'] = createExportWrapper(\n      'FPDFPageObjMark_GetName',\n      4,\n    ));\n    (Module['_FPDFPageObjMark_CountParams'] =\n      createExportWrapper('FPDFPageObjMark_CountParams', 1));\n    (Module['_FPDFPageObjMark_GetParamKey'] =\n      createExportWrapper('FPDFPageObjMark_GetParamKey', 5));\n    (Module['_FPDFPageObjMark_GetParamValueType'] =\n      createExportWrapper('FPDFPageObjMark_GetParamValueType', 2));\n    (Module['_FPDFPageObjMark_GetParamIntValue'] =\n      createExportWrapper('FPDFPageObjMark_GetParamIntValue', 3));\n    (Module['_FPDFPageObjMark_GetParamStringValue'] =\n      createExportWrapper('FPDFPageObjMark_GetParamStringValue', 5));\n    (Module['_FPDFPageObjMark_GetParamBlobValue'] =\n      createExportWrapper('FPDFPageObjMark_GetParamBlobValue', 5));\n    (Module['_FPDFPageObj_HasTransparency'] =\n      createExportWrapper('FPDFPageObj_HasTransparency', 1));\n    (Module['_FPDFPageObjMark_SetIntParam'] =\n      createExportWrapper('FPDFPageObjMark_SetIntParam', 5));\n    (Module['_FPDFPageObjMark_SetStringParam'] =\n      createExportWrapper('FPDFPageObjMark_SetStringParam', 5));\n    (Module['_FPDFPageObjMark_SetBlobParam'] =\n      createExportWrapper('FPDFPageObjMark_SetBlobParam', 6));\n    (Module['_FPDFPageObjMark_RemoveParam'] =\n      createExportWrapper('FPDFPageObjMark_RemoveParam', 3));\n    (Module['_FPDFPageObj_GetType'] = createExportWrapper(\n      'FPDFPageObj_GetType',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetIsActive'] = createExportWrapper(\n      'FPDFPageObj_GetIsActive',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetIsActive'] = createExportWrapper(\n      'FPDFPageObj_SetIsActive',\n      2,\n    ));\n    (Module['_FPDFPage_GenerateContent'] = createExportWrapper(\n      'FPDFPage_GenerateContent',\n      1,\n    ));\n    (Module['_FPDFPageObj_Transform'] = createExportWrapper(\n      'FPDFPageObj_Transform',\n      7,\n    ));\n    (Module['_FPDFPageObj_TransformF'] = createExportWrapper(\n      'FPDFPageObj_TransformF',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetMatrix'] = createExportWrapper(\n      'FPDFPageObj_GetMatrix',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetMatrix'] = createExportWrapper(\n      'FPDFPageObj_SetMatrix',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetBlendMode'] = createExportWrapper(\n      'FPDFPageObj_SetBlendMode',\n      2,\n    ));\n    (Module['_FPDFPage_TransformAnnots'] = createExportWrapper(\n      'FPDFPage_TransformAnnots',\n      7,\n    ));\n    (Module['_FPDFPage_SetRotation'] = createExportWrapper(\n      'FPDFPage_SetRotation',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetFillColor'] = createExportWrapper(\n      'FPDFPageObj_SetFillColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetFillColor'] = createExportWrapper(\n      'FPDFPageObj_GetFillColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetBounds'] = createExportWrapper(\n      'FPDFPageObj_GetBounds',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetRotatedBounds'] =\n      createExportWrapper('FPDFPageObj_GetRotatedBounds', 2));\n    (Module['_FPDFPageObj_SetStrokeColor'] = createExportWrapper(\n      'FPDFPageObj_SetStrokeColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetStrokeColor'] = createExportWrapper(\n      'FPDFPageObj_GetStrokeColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_SetStrokeWidth'] = createExportWrapper(\n      'FPDFPageObj_SetStrokeWidth',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetStrokeWidth'] = createExportWrapper(\n      'FPDFPageObj_GetStrokeWidth',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetLineJoin'] = createExportWrapper(\n      'FPDFPageObj_GetLineJoin',\n      1,\n    ));\n    (Module['_FPDFPageObj_SetLineJoin'] = createExportWrapper(\n      'FPDFPageObj_SetLineJoin',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetLineCap'] = createExportWrapper(\n      'FPDFPageObj_GetLineCap',\n      1,\n    ));\n    (Module['_FPDFPageObj_SetLineCap'] = createExportWrapper(\n      'FPDFPageObj_SetLineCap',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetDashPhase'] = createExportWrapper(\n      'FPDFPageObj_GetDashPhase',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetDashPhase'] = createExportWrapper(\n      'FPDFPageObj_SetDashPhase',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetDashCount'] = createExportWrapper(\n      'FPDFPageObj_GetDashCount',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetDashArray'] = createExportWrapper(\n      'FPDFPageObj_GetDashArray',\n      3,\n    ));\n    (Module['_FPDFPageObj_SetDashArray'] = createExportWrapper(\n      'FPDFPageObj_SetDashArray',\n      4,\n    ));\n    (Module['_FPDFFormObj_CountObjects'] = createExportWrapper(\n      'FPDFFormObj_CountObjects',\n      1,\n    ));\n    (Module['_FPDFFormObj_GetObject'] = createExportWrapper(\n      'FPDFFormObj_GetObject',\n      2,\n    ));\n    (Module['_FPDFFormObj_RemoveObject'] = createExportWrapper(\n      'FPDFFormObj_RemoveObject',\n      2,\n    ));\n    (Module['_FPDFPageObj_CreateNewPath'] = createExportWrapper(\n      'FPDFPageObj_CreateNewPath',\n      2,\n    ));\n    (Module['_FPDFPageObj_CreateNewRect'] = createExportWrapper(\n      'FPDFPageObj_CreateNewRect',\n      4,\n    ));\n    (Module['_FPDFPath_CountSegments'] = createExportWrapper(\n      'FPDFPath_CountSegments',\n      1,\n    ));\n    (Module['_FPDFPath_GetPathSegment'] = createExportWrapper(\n      'FPDFPath_GetPathSegment',\n      2,\n    ));\n    (Module['_FPDFPath_MoveTo'] = createExportWrapper('FPDFPath_MoveTo', 3));\n    (Module['_FPDFPath_LineTo'] = createExportWrapper('FPDFPath_LineTo', 3));\n    (Module['_FPDFPath_BezierTo'] = createExportWrapper(\n      'FPDFPath_BezierTo',\n      7,\n    ));\n    (Module['_FPDFPath_Close'] = createExportWrapper('FPDFPath_Close', 1));\n    (Module['_FPDFPath_SetDrawMode'] = createExportWrapper(\n      'FPDFPath_SetDrawMode',\n      3,\n    ));\n    (Module['_FPDFPath_GetDrawMode'] = createExportWrapper(\n      'FPDFPath_GetDrawMode',\n      3,\n    ));\n    (Module['_FPDFPathSegment_GetPoint'] = createExportWrapper(\n      'FPDFPathSegment_GetPoint',\n      3,\n    ));\n    (Module['_FPDFPathSegment_GetType'] = createExportWrapper(\n      'FPDFPathSegment_GetType',\n      1,\n    ));\n    (Module['_FPDFPathSegment_GetClose'] = createExportWrapper(\n      'FPDFPathSegment_GetClose',\n      1,\n    ));\n    (Module['_FPDFPageObj_NewTextObj'] = createExportWrapper(\n      'FPDFPageObj_NewTextObj',\n      3,\n    ));\n    (Module['_FPDFText_SetText'] = createExportWrapper(\n      'FPDFText_SetText',\n      2,\n    ));\n    (Module['_FPDFText_SetCharcodes'] = createExportWrapper(\n      'FPDFText_SetCharcodes',\n      3,\n    ));\n    (Module['_FPDFText_LoadFont'] = createExportWrapper(\n      'FPDFText_LoadFont',\n      5,\n    ));\n    (Module['_FPDFText_LoadStandardFont'] = createExportWrapper(\n      'FPDFText_LoadStandardFont',\n      2,\n    ));\n    (Module['_FPDFText_LoadCidType2Font'] = createExportWrapper(\n      'FPDFText_LoadCidType2Font',\n      6,\n    ));\n    (Module['_FPDFTextObj_GetFontSize'] = createExportWrapper(\n      'FPDFTextObj_GetFontSize',\n      2,\n    ));\n    (Module['_FPDFTextObj_GetText'] = createExportWrapper(\n      'FPDFTextObj_GetText',\n      4,\n    ));\n    (Module['_FPDFTextObj_GetRenderedBitmap'] =\n      createExportWrapper('FPDFTextObj_GetRenderedBitmap', 4));\n    (Module['_FPDFFont_Close'] = createExportWrapper('FPDFFont_Close', 1));\n    (Module['_FPDFPageObj_CreateTextObj'] = createExportWrapper(\n      'FPDFPageObj_CreateTextObj',\n      3,\n    ));\n    (Module['_FPDFTextObj_GetTextRenderMode'] =\n      createExportWrapper('FPDFTextObj_GetTextRenderMode', 1));\n    (Module['_FPDFTextObj_SetTextRenderMode'] =\n      createExportWrapper('FPDFTextObj_SetTextRenderMode', 2));\n    (Module['_FPDFTextObj_GetFont'] = createExportWrapper(\n      'FPDFTextObj_GetFont',\n      1,\n    ));\n    (Module['_FPDFFont_GetBaseFontName'] = createExportWrapper(\n      'FPDFFont_GetBaseFontName',\n      3,\n    ));\n    (Module['_FPDFFont_GetFamilyName'] = createExportWrapper(\n      'FPDFFont_GetFamilyName',\n      3,\n    ));\n    (Module['_FPDFFont_GetFontData'] = createExportWrapper(\n      'FPDFFont_GetFontData',\n      4,\n    ));\n    (Module['_FPDFFont_GetIsEmbedded'] = createExportWrapper(\n      'FPDFFont_GetIsEmbedded',\n      1,\n    ));\n    (Module['_FPDFFont_GetFlags'] = createExportWrapper(\n      'FPDFFont_GetFlags',\n      1,\n    ));\n    (Module['_FPDFFont_GetWeight'] = createExportWrapper(\n      'FPDFFont_GetWeight',\n      1,\n    ));\n    (Module['_FPDFFont_GetItalicAngle'] = createExportWrapper(\n      'FPDFFont_GetItalicAngle',\n      2,\n    ));\n    (Module['_FPDFFont_GetAscent'] = createExportWrapper(\n      'FPDFFont_GetAscent',\n      3,\n    ));\n    (Module['_FPDFFont_GetDescent'] = createExportWrapper(\n      'FPDFFont_GetDescent',\n      3,\n    ));\n    (Module['_FPDFFont_GetGlyphWidth'] = createExportWrapper(\n      'FPDFFont_GetGlyphWidth',\n      4,\n    ));\n    (Module['_FPDFFont_GetGlyphPath'] = createExportWrapper(\n      'FPDFFont_GetGlyphPath',\n      3,\n    ));\n    (Module['_FPDFGlyphPath_CountGlyphSegments'] =\n      createExportWrapper('FPDFGlyphPath_CountGlyphSegments', 1));\n    (Module['_FPDFGlyphPath_GetGlyphPathSegment'] =\n      createExportWrapper('FPDFGlyphPath_GetGlyphPathSegment', 2));\n    (Module['_EPDFText_RedactInRect'] = createExportWrapper(\n      'EPDFText_RedactInRect',\n      4,\n    ));\n    (Module['_EPDFText_RedactInQuads'] = createExportWrapper(\n      'EPDFText_RedactInQuads',\n      5,\n    ));\n    (Module['_FPDFDoc_GetPageMode'] = createExportWrapper(\n      'FPDFDoc_GetPageMode',\n      1,\n    ));\n    (Module['_FPDFPage_Flatten'] = createExportWrapper(\n      'FPDFPage_Flatten',\n      2,\n    ));\n    (Module['_FPDFPage_HasFormFieldAtPoint'] =\n      createExportWrapper('FPDFPage_HasFormFieldAtPoint', 4));\n    (Module['_FPDFPage_FormFieldZOrderAtPoint'] =\n      createExportWrapper('FPDFPage_FormFieldZOrderAtPoint', 4));\n    (Module['_malloc'] = createExportWrapper('malloc', 1));\n    (Module['_free'] = createExportWrapper('free', 1));\n    (Module['_FORM_OnMouseMove'] = createExportWrapper(\n      'FORM_OnMouseMove',\n      5,\n    ));\n    (Module['_FORM_OnMouseWheel'] = createExportWrapper(\n      'FORM_OnMouseWheel',\n      6,\n    ));\n    (Module['_FORM_OnFocus'] = createExportWrapper('FORM_OnFocus', 5));\n    (Module['_FORM_OnLButtonDown'] = createExportWrapper(\n      'FORM_OnLButtonDown',\n      5,\n    ));\n    (Module['_FORM_OnLButtonUp'] = createExportWrapper(\n      'FORM_OnLButtonUp',\n      5,\n    ));\n    (Module['_FORM_OnLButtonDoubleClick'] = createExportWrapper(\n      'FORM_OnLButtonDoubleClick',\n      5,\n    ));\n    (Module['_FORM_OnRButtonDown'] = createExportWrapper(\n      'FORM_OnRButtonDown',\n      5,\n    ));\n    (Module['_FORM_OnRButtonUp'] = createExportWrapper(\n      'FORM_OnRButtonUp',\n      5,\n    ));\n    (Module['_FORM_OnKeyDown'] = createExportWrapper('FORM_OnKeyDown', 4));\n    (Module['_FORM_OnKeyUp'] = createExportWrapper('FORM_OnKeyUp', 4));\n    (Module['_FORM_OnChar'] = createExportWrapper('FORM_OnChar', 4));\n    (Module['_FORM_GetFocusedText'] = createExportWrapper(\n      'FORM_GetFocusedText',\n      4,\n    ));\n    (Module['_FORM_GetSelectedText'] = createExportWrapper(\n      'FORM_GetSelectedText',\n      4,\n    ));\n    (Module['_FORM_ReplaceAndKeepSelection'] =\n      createExportWrapper('FORM_ReplaceAndKeepSelection', 3));\n    (Module['_FORM_ReplaceSelection'] = createExportWrapper(\n      'FORM_ReplaceSelection',\n      3,\n    ));\n    (Module['_FORM_SelectAllText'] = createExportWrapper(\n      'FORM_SelectAllText',\n      2,\n    ));\n    (Module['_FORM_CanUndo'] = createExportWrapper('FORM_CanUndo', 2));\n    (Module['_FORM_CanRedo'] = createExportWrapper('FORM_CanRedo', 2));\n    (Module['_FORM_Undo'] = createExportWrapper('FORM_Undo', 2));\n    (Module['_FORM_Redo'] = createExportWrapper('FORM_Redo', 2));\n    (Module['_FORM_ForceToKillFocus'] = createExportWrapper(\n      'FORM_ForceToKillFocus',\n      1,\n    ));\n    (Module['_FORM_GetFocusedAnnot'] = createExportWrapper(\n      'FORM_GetFocusedAnnot',\n      3,\n    ));\n    (Module['_FORM_SetFocusedAnnot'] = createExportWrapper(\n      'FORM_SetFocusedAnnot',\n      2,\n    ));\n    (Module['_FPDF_FFLDraw'] = createExportWrapper('FPDF_FFLDraw', 9));\n    (Module['_FPDF_SetFormFieldHighlightColor'] =\n      createExportWrapper('FPDF_SetFormFieldHighlightColor', 3));\n    (Module['_FPDF_SetFormFieldHighlightAlpha'] =\n      createExportWrapper('FPDF_SetFormFieldHighlightAlpha', 2));\n    (Module['_FPDF_RemoveFormFieldHighlight'] =\n      createExportWrapper('FPDF_RemoveFormFieldHighlight', 1));\n    (Module['_FORM_OnAfterLoadPage'] = createExportWrapper(\n      'FORM_OnAfterLoadPage',\n      2,\n    ));\n    (Module['_FORM_OnBeforeClosePage'] = createExportWrapper(\n      'FORM_OnBeforeClosePage',\n      2,\n    ));\n    (Module['_FORM_DoDocumentJSAction'] = createExportWrapper(\n      'FORM_DoDocumentJSAction',\n      1,\n    ));\n    (Module['_FORM_DoDocumentOpenAction'] = createExportWrapper(\n      'FORM_DoDocumentOpenAction',\n      1,\n    ));\n    (Module['_FORM_DoDocumentAAction'] = createExportWrapper(\n      'FORM_DoDocumentAAction',\n      2,\n    ));\n    (Module['_FORM_DoPageAAction'] = createExportWrapper(\n      'FORM_DoPageAAction',\n      3,\n    ));\n    (Module['_FORM_SetIndexSelected'] = createExportWrapper(\n      'FORM_SetIndexSelected',\n      4,\n    ));\n    (Module['_FORM_IsIndexSelected'] = createExportWrapper(\n      'FORM_IsIndexSelected',\n      3,\n    ));\n    (Module['_FPDFDoc_GetJavaScriptActionCount'] =\n      createExportWrapper('FPDFDoc_GetJavaScriptActionCount', 1));\n    (Module['_FPDFDoc_GetJavaScriptAction'] =\n      createExportWrapper('FPDFDoc_GetJavaScriptAction', 2));\n    (Module['_FPDFDoc_CloseJavaScriptAction'] =\n      createExportWrapper('FPDFDoc_CloseJavaScriptAction', 1));\n    (Module['_FPDFJavaScriptAction_GetName'] =\n      createExportWrapper('FPDFJavaScriptAction_GetName', 3));\n    (Module['_FPDFJavaScriptAction_GetScript'] =\n      createExportWrapper('FPDFJavaScriptAction_GetScript', 3));\n    (Module['_FPDF_ImportPagesByIndex'] = createExportWrapper(\n      'FPDF_ImportPagesByIndex',\n      5,\n    ));\n    (Module['_FPDF_ImportPages'] = createExportWrapper(\n      'FPDF_ImportPages',\n      4,\n    ));\n    (Module['_FPDF_ImportNPagesToOne'] = createExportWrapper(\n      'FPDF_ImportNPagesToOne',\n      5,\n    ));\n    (Module['_FPDF_NewXObjectFromPage'] = createExportWrapper(\n      'FPDF_NewXObjectFromPage',\n      3,\n    ));\n    (Module['_FPDF_CloseXObject'] = createExportWrapper(\n      'FPDF_CloseXObject',\n      1,\n    ));\n    (Module['_FPDF_NewFormObjectFromXObject'] =\n      createExportWrapper('FPDF_NewFormObjectFromXObject', 1));\n    (Module['_FPDF_CopyViewerPreferences'] = createExportWrapper(\n      'FPDF_CopyViewerPreferences',\n      2,\n    ));\n    (Module[\n      '_FPDF_RenderPageBitmapWithColorScheme_Start'\n    ] = createExportWrapper('FPDF_RenderPageBitmapWithColorScheme_Start', 10));\n    (Module['_FPDF_RenderPageBitmap_Start'] =\n      createExportWrapper('FPDF_RenderPageBitmap_Start', 9));\n    (Module['_FPDF_RenderPage_Continue'] = createExportWrapper(\n      'FPDF_RenderPage_Continue',\n      2,\n    ));\n    (Module['_FPDF_RenderPage_Close'] = createExportWrapper(\n      'FPDF_RenderPage_Close',\n      1,\n    ));\n    (Module['_FPDF_SaveWithVersion'] = createExportWrapper(\n      'FPDF_SaveWithVersion',\n      4,\n    ));\n    (Module['_FPDFText_GetCharIndexFromTextIndex'] =\n      createExportWrapper('FPDFText_GetCharIndexFromTextIndex', 2));\n    (Module['_FPDFText_GetTextIndexFromCharIndex'] =\n      createExportWrapper('FPDFText_GetTextIndexFromCharIndex', 2));\n    (Module['_FPDF_GetSignatureCount'] = createExportWrapper(\n      'FPDF_GetSignatureCount',\n      1,\n    ));\n    (Module['_FPDF_GetSignatureObject'] = createExportWrapper(\n      'FPDF_GetSignatureObject',\n      2,\n    ));\n    (Module['_FPDFSignatureObj_GetContents'] =\n      createExportWrapper('FPDFSignatureObj_GetContents', 3));\n    (Module['_FPDFSignatureObj_GetByteRange'] =\n      createExportWrapper('FPDFSignatureObj_GetByteRange', 3));\n    (Module['_FPDFSignatureObj_GetSubFilter'] =\n      createExportWrapper('FPDFSignatureObj_GetSubFilter', 3));\n    (Module['_FPDFSignatureObj_GetReason'] = createExportWrapper(\n      'FPDFSignatureObj_GetReason',\n      3,\n    ));\n    (Module['_FPDFSignatureObj_GetTime'] = createExportWrapper(\n      'FPDFSignatureObj_GetTime',\n      3,\n    ));\n    (Module['_FPDFSignatureObj_GetDocMDPPermission'] =\n      createExportWrapper('FPDFSignatureObj_GetDocMDPPermission', 1));\n    (Module['_FPDF_StructTree_GetForPage'] = createExportWrapper(\n      'FPDF_StructTree_GetForPage',\n      1,\n    ));\n    (Module['_FPDF_StructTree_Close'] = createExportWrapper(\n      'FPDF_StructTree_Close',\n      1,\n    ));\n    (Module['_FPDF_StructTree_CountChildren'] =\n      createExportWrapper('FPDF_StructTree_CountChildren', 1));\n    (Module['_FPDF_StructTree_GetChildAtIndex'] =\n      createExportWrapper('FPDF_StructTree_GetChildAtIndex', 2));\n    (Module['_FPDF_StructElement_GetAltText'] =\n      createExportWrapper('FPDF_StructElement_GetAltText', 3));\n    (Module['_FPDF_StructElement_GetActualText'] =\n      createExportWrapper('FPDF_StructElement_GetActualText', 3));\n    (Module['_FPDF_StructElement_GetID'] = createExportWrapper(\n      'FPDF_StructElement_GetID',\n      3,\n    ));\n    (Module['_FPDF_StructElement_GetLang'] = createExportWrapper(\n      'FPDF_StructElement_GetLang',\n      3,\n    ));\n    (Module['_FPDF_StructElement_GetAttributeCount'] =\n      createExportWrapper('FPDF_StructElement_GetAttributeCount', 1));\n    (Module[\n      '_FPDF_StructElement_GetAttributeAtIndex'\n    ] = createExportWrapper('FPDF_StructElement_GetAttributeAtIndex', 2));\n    (Module['_FPDF_StructElement_GetStringAttribute'] =\n      createExportWrapper('FPDF_StructElement_GetStringAttribute', 4));\n    (Module['_FPDF_StructElement_GetMarkedContentID'] =\n      createExportWrapper('FPDF_StructElement_GetMarkedContentID', 1));\n    (Module['_FPDF_StructElement_GetType'] = createExportWrapper(\n      'FPDF_StructElement_GetType',\n      3,\n    ));\n    (Module['_FPDF_StructElement_GetObjType'] =\n      createExportWrapper('FPDF_StructElement_GetObjType', 3));\n    (Module['_FPDF_StructElement_GetTitle'] =\n      createExportWrapper('FPDF_StructElement_GetTitle', 3));\n    (Module['_FPDF_StructElement_CountChildren'] =\n      createExportWrapper('FPDF_StructElement_CountChildren', 1));\n    (Module['_FPDF_StructElement_GetChildAtIndex'] =\n      createExportWrapper('FPDF_StructElement_GetChildAtIndex', 2));\n    (Module[\n      '_FPDF_StructElement_GetChildMarkedContentID'\n    ] = createExportWrapper('FPDF_StructElement_GetChildMarkedContentID', 2));\n    (Module['_FPDF_StructElement_GetParent'] =\n      createExportWrapper('FPDF_StructElement_GetParent', 1));\n    (Module['_FPDF_StructElement_Attr_GetCount'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetCount', 1));\n    (Module['_FPDF_StructElement_Attr_GetName'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetName', 5));\n    (Module['_FPDF_StructElement_Attr_GetValue'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetValue', 2));\n    (Module['_FPDF_StructElement_Attr_GetType'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetType', 1));\n    (Module[\n      '_FPDF_StructElement_Attr_GetBooleanValue'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetBooleanValue', 2));\n    (Module[\n      '_FPDF_StructElement_Attr_GetNumberValue'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetNumberValue', 2));\n    (Module[\n      '_FPDF_StructElement_Attr_GetStringValue'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetStringValue', 4));\n    (Module['_FPDF_StructElement_Attr_GetBlobValue'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetBlobValue', 4));\n    (Module['_FPDF_StructElement_Attr_CountChildren'] =\n      createExportWrapper('FPDF_StructElement_Attr_CountChildren', 1));\n    (Module[\n      '_FPDF_StructElement_Attr_GetChildAtIndex'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetChildAtIndex', 2));\n    (Module[\n      '_FPDF_StructElement_GetMarkedContentIdCount'\n    ] = createExportWrapper('FPDF_StructElement_GetMarkedContentIdCount', 1));\n    (Module[\n      '_FPDF_StructElement_GetMarkedContentIdAtIndex'\n    ] = createExportWrapper('FPDF_StructElement_GetMarkedContentIdAtIndex', 2));\n    (Module['_FPDF_AddInstalledFont'] = createExportWrapper(\n      'FPDF_AddInstalledFont',\n      3,\n    ));\n    (Module['_FPDF_SetSystemFontInfo'] = createExportWrapper(\n      'FPDF_SetSystemFontInfo',\n      1,\n    ));\n    (Module['_FPDF_GetDefaultTTFMap'] = createExportWrapper(\n      'FPDF_GetDefaultTTFMap',\n      0,\n    ));\n    (Module['_FPDF_GetDefaultTTFMapCount'] = createExportWrapper(\n      'FPDF_GetDefaultTTFMapCount',\n      0,\n    ));\n    (Module['_FPDF_GetDefaultTTFMapEntry'] = createExportWrapper(\n      'FPDF_GetDefaultTTFMapEntry',\n      1,\n    ));\n    (Module['_FPDF_GetDefaultSystemFontInfo'] =\n      createExportWrapper('FPDF_GetDefaultSystemFontInfo', 0));\n    (Module['_FPDF_FreeDefaultSystemFontInfo'] =\n      createExportWrapper('FPDF_FreeDefaultSystemFontInfo', 1));\n    (Module['_FPDFText_LoadPage'] = createExportWrapper(\n      'FPDFText_LoadPage',\n      1,\n    ));\n    (Module['_FPDFText_ClosePage'] = createExportWrapper(\n      'FPDFText_ClosePage',\n      1,\n    ));\n    (Module['_FPDFText_CountChars'] = createExportWrapper(\n      'FPDFText_CountChars',\n      1,\n    ));\n    (Module['_FPDFText_GetUnicode'] = createExportWrapper(\n      'FPDFText_GetUnicode',\n      2,\n    ));\n    (Module['_FPDFText_GetTextObject'] = createExportWrapper(\n      'FPDFText_GetTextObject',\n      2,\n    ));\n    (Module['_FPDFText_IsGenerated'] = createExportWrapper(\n      'FPDFText_IsGenerated',\n      2,\n    ));\n    (Module['_FPDFText_IsHyphen'] = createExportWrapper(\n      'FPDFText_IsHyphen',\n      2,\n    ));\n    (Module['_FPDFText_HasUnicodeMapError'] =\n      createExportWrapper('FPDFText_HasUnicodeMapError', 2));\n    (Module['_FPDFText_GetFontSize'] = createExportWrapper(\n      'FPDFText_GetFontSize',\n      2,\n    ));\n    (Module['_FPDFText_GetFontInfo'] = createExportWrapper(\n      'FPDFText_GetFontInfo',\n      5,\n    ));\n    (Module['_FPDFText_GetFontWeight'] = createExportWrapper(\n      'FPDFText_GetFontWeight',\n      2,\n    ));\n    (Module['_FPDFText_GetFillColor'] = createExportWrapper(\n      'FPDFText_GetFillColor',\n      6,\n    ));\n    (Module['_FPDFText_GetStrokeColor'] = createExportWrapper(\n      'FPDFText_GetStrokeColor',\n      6,\n    ));\n    (Module['_FPDFText_GetCharAngle'] = createExportWrapper(\n      'FPDFText_GetCharAngle',\n      2,\n    ));\n    (Module['_FPDFText_GetCharBox'] = createExportWrapper(\n      'FPDFText_GetCharBox',\n      6,\n    ));\n    (Module['_FPDFText_GetLooseCharBox'] = createExportWrapper(\n      'FPDFText_GetLooseCharBox',\n      3,\n    ));\n    (Module['_FPDFText_GetMatrix'] = createExportWrapper(\n      'FPDFText_GetMatrix',\n      3,\n    ));\n    (Module['_FPDFText_GetCharOrigin'] = createExportWrapper(\n      'FPDFText_GetCharOrigin',\n      4,\n    ));\n    (Module['_FPDFText_GetCharIndexAtPos'] = createExportWrapper(\n      'FPDFText_GetCharIndexAtPos',\n      5,\n    ));\n    (Module['_FPDFText_GetText'] = createExportWrapper(\n      'FPDFText_GetText',\n      4,\n    ));\n    (Module['_FPDFText_CountRects'] = createExportWrapper(\n      'FPDFText_CountRects',\n      3,\n    ));\n    (Module['_FPDFText_GetRect'] = createExportWrapper(\n      'FPDFText_GetRect',\n      6,\n    ));\n    (Module['_FPDFText_GetBoundedText'] = createExportWrapper(\n      'FPDFText_GetBoundedText',\n      7,\n    ));\n    (Module['_FPDFText_FindStart'] = createExportWrapper(\n      'FPDFText_FindStart',\n      4,\n    ));\n    (Module['_FPDFText_FindNext'] = createExportWrapper(\n      'FPDFText_FindNext',\n      1,\n    ));\n    (Module['_FPDFText_FindPrev'] = createExportWrapper(\n      'FPDFText_FindPrev',\n      1,\n    ));\n    (Module['_FPDFText_GetSchResultIndex'] = createExportWrapper(\n      'FPDFText_GetSchResultIndex',\n      1,\n    ));\n    (Module['_FPDFText_GetSchCount'] = createExportWrapper(\n      'FPDFText_GetSchCount',\n      1,\n    ));\n    (Module['_FPDFText_FindClose'] = createExportWrapper(\n      'FPDFText_FindClose',\n      1,\n    ));\n    (Module['_FPDFLink_LoadWebLinks'] = createExportWrapper(\n      'FPDFLink_LoadWebLinks',\n      1,\n    ));\n    (Module['_FPDFLink_CountWebLinks'] = createExportWrapper(\n      'FPDFLink_CountWebLinks',\n      1,\n    ));\n    (Module['_FPDFLink_GetURL'] = createExportWrapper('FPDFLink_GetURL', 4));\n    (Module['_FPDFLink_CountRects'] = createExportWrapper(\n      'FPDFLink_CountRects',\n      2,\n    ));\n    (Module['_FPDFLink_GetRect'] = createExportWrapper(\n      'FPDFLink_GetRect',\n      7,\n    ));\n    (Module['_FPDFLink_GetTextRange'] = createExportWrapper(\n      'FPDFLink_GetTextRange',\n      4,\n    ));\n    (Module['_FPDFLink_CloseWebLinks'] = createExportWrapper(\n      'FPDFLink_CloseWebLinks',\n      1,\n    ));\n    (Module['_FPDFPage_GetDecodedThumbnailData'] =\n      createExportWrapper('FPDFPage_GetDecodedThumbnailData', 3));\n    (Module['_FPDFPage_GetRawThumbnailData'] =\n      createExportWrapper('FPDFPage_GetRawThumbnailData', 3));\n    (Module['_FPDFPage_GetThumbnailAsBitmap'] =\n      createExportWrapper('FPDFPage_GetThumbnailAsBitmap', 1));\n    (Module['_FPDFPage_SetMediaBox'] = createExportWrapper(\n      'FPDFPage_SetMediaBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetCropBox'] = createExportWrapper(\n      'FPDFPage_SetCropBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetBleedBox'] = createExportWrapper(\n      'FPDFPage_SetBleedBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetTrimBox'] = createExportWrapper(\n      'FPDFPage_SetTrimBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetArtBox'] = createExportWrapper(\n      'FPDFPage_SetArtBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetMediaBox'] = createExportWrapper(\n      'FPDFPage_GetMediaBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetCropBox'] = createExportWrapper(\n      'FPDFPage_GetCropBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetBleedBox'] = createExportWrapper(\n      'FPDFPage_GetBleedBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetTrimBox'] = createExportWrapper(\n      'FPDFPage_GetTrimBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetArtBox'] = createExportWrapper(\n      'FPDFPage_GetArtBox',\n      5,\n    ));\n    (Module['_FPDFPage_TransFormWithClip'] = createExportWrapper(\n      'FPDFPage_TransFormWithClip',\n      3,\n    ));\n    (Module['_FPDFPageObj_TransformClipPath'] =\n      createExportWrapper('FPDFPageObj_TransformClipPath', 7));\n    (Module['_FPDFPageObj_GetClipPath'] = createExportWrapper(\n      'FPDFPageObj_GetClipPath',\n      1,\n    ));\n    (Module['_FPDFClipPath_CountPaths'] = createExportWrapper(\n      'FPDFClipPath_CountPaths',\n      1,\n    ));\n    (Module['_FPDFClipPath_CountPathSegments'] =\n      createExportWrapper('FPDFClipPath_CountPathSegments', 2));\n    (Module['_FPDFClipPath_GetPathSegment'] =\n      createExportWrapper('FPDFClipPath_GetPathSegment', 3));\n    (Module['_FPDF_CreateClipPath'] = createExportWrapper(\n      'FPDF_CreateClipPath',\n      4,\n    ));\n    (Module['_FPDF_DestroyClipPath'] = createExportWrapper(\n      'FPDF_DestroyClipPath',\n      1,\n    ));\n    (Module['_FPDFPage_InsertClipPath'] = createExportWrapper(\n      'FPDFPage_InsertClipPath',\n      2,\n    ));\n    (Module['_FPDF_InitLibrary'] = createExportWrapper(\n      'FPDF_InitLibrary',\n      0,\n    ));\n    (Module['_FPDF_DestroyLibrary'] = createExportWrapper(\n      'FPDF_DestroyLibrary',\n      0,\n    ));\n    (Module['_FPDF_SetSandBoxPolicy'] = createExportWrapper(\n      'FPDF_SetSandBoxPolicy',\n      2,\n    ));\n    (Module['_FPDF_LoadDocument'] = createExportWrapper(\n      'FPDF_LoadDocument',\n      2,\n    ));\n    (Module['_FPDF_GetFormType'] = createExportWrapper(\n      'FPDF_GetFormType',\n      1,\n    ));\n    (Module['_FPDF_LoadXFA'] = createExportWrapper('FPDF_LoadXFA', 1));\n    (Module['_FPDF_LoadMemDocument'] = createExportWrapper(\n      'FPDF_LoadMemDocument',\n      3,\n    ));\n    (Module['_FPDF_LoadMemDocument64'] = createExportWrapper(\n      'FPDF_LoadMemDocument64',\n      3,\n    ));\n    (Module['_FPDF_LoadCustomDocument'] = createExportWrapper(\n      'FPDF_LoadCustomDocument',\n      2,\n    ));\n    (Module['_FPDF_GetFileVersion'] = createExportWrapper(\n      'FPDF_GetFileVersion',\n      2,\n    ));\n    (Module[\n      '_FPDF_DocumentHasValidCrossReferenceTable'\n    ] = createExportWrapper('FPDF_DocumentHasValidCrossReferenceTable', 1));\n    (Module['_FPDF_GetDocPermissions'] = createExportWrapper(\n      'FPDF_GetDocPermissions',\n      1,\n    ));\n    (Module['_FPDF_GetDocUserPermissions'] = createExportWrapper(\n      'FPDF_GetDocUserPermissions',\n      1,\n    ));\n    (Module['_FPDF_GetSecurityHandlerRevision'] =\n      createExportWrapper('FPDF_GetSecurityHandlerRevision', 1));\n    (Module['_FPDF_GetPageCount'] = createExportWrapper(\n      'FPDF_GetPageCount',\n      1,\n    ));\n    (Module['_FPDF_LoadPage'] = createExportWrapper('FPDF_LoadPage', 2));\n    (Module['_FPDF_GetPageWidthF'] = createExportWrapper(\n      'FPDF_GetPageWidthF',\n      1,\n    ));\n    (Module['_FPDF_GetPageWidth'] = createExportWrapper(\n      'FPDF_GetPageWidth',\n      1,\n    ));\n    (Module['_FPDF_GetPageHeightF'] = createExportWrapper(\n      'FPDF_GetPageHeightF',\n      1,\n    ));\n    (Module['_FPDF_GetPageHeight'] = createExportWrapper(\n      'FPDF_GetPageHeight',\n      1,\n    ));\n    (Module['_FPDF_GetPageBoundingBox'] = createExportWrapper(\n      'FPDF_GetPageBoundingBox',\n      2,\n    ));\n    (Module['_FPDF_RenderPageBitmap'] = createExportWrapper(\n      'FPDF_RenderPageBitmap',\n      8,\n    ));\n    (Module['_FPDF_RenderPageBitmapWithMatrix'] =\n      createExportWrapper('FPDF_RenderPageBitmapWithMatrix', 5));\n    (Module['_EPDF_RenderAnnotBitmap'] = createExportWrapper(\n      'EPDF_RenderAnnotBitmap',\n      6,\n    ));\n    (Module['_FPDF_ClosePage'] = createExportWrapper('FPDF_ClosePage', 1));\n    (Module['_FPDF_CloseDocument'] = createExportWrapper(\n      'FPDF_CloseDocument',\n      1,\n    ));\n    (Module['_FPDF_GetLastError'] = createExportWrapper(\n      'FPDF_GetLastError',\n      0,\n    ));\n    (Module['_FPDF_DeviceToPage'] = createExportWrapper(\n      'FPDF_DeviceToPage',\n      10,\n    ));\n    (Module['_FPDF_PageToDevice'] = createExportWrapper(\n      'FPDF_PageToDevice',\n      10,\n    ));\n    (Module['_FPDFBitmap_Create'] = createExportWrapper(\n      'FPDFBitmap_Create',\n      3,\n    ));\n    (Module['_FPDFBitmap_CreateEx'] = createExportWrapper(\n      'FPDFBitmap_CreateEx',\n      5,\n    ));\n    (Module['_FPDFBitmap_GetFormat'] = createExportWrapper(\n      'FPDFBitmap_GetFormat',\n      1,\n    ));\n    (Module['_FPDFBitmap_FillRect'] = createExportWrapper(\n      'FPDFBitmap_FillRect',\n      6,\n    ));\n    (Module['_FPDFBitmap_GetBuffer'] = createExportWrapper(\n      'FPDFBitmap_GetBuffer',\n      1,\n    ));\n    (Module['_FPDFBitmap_GetWidth'] = createExportWrapper(\n      'FPDFBitmap_GetWidth',\n      1,\n    ));\n    (Module['_FPDFBitmap_GetHeight'] = createExportWrapper(\n      'FPDFBitmap_GetHeight',\n      1,\n    ));\n    (Module['_FPDFBitmap_GetStride'] = createExportWrapper(\n      'FPDFBitmap_GetStride',\n      1,\n    ));\n    (Module['_FPDFBitmap_Destroy'] = createExportWrapper(\n      'FPDFBitmap_Destroy',\n      1,\n    ));\n    (Module['_FPDF_GetPageSizeByIndexF'] = createExportWrapper(\n      'FPDF_GetPageSizeByIndexF',\n      3,\n    ));\n    (Module['_EPDF_GetPageRotationByIndex'] =\n      createExportWrapper('EPDF_GetPageRotationByIndex', 2));\n    (Module['_FPDF_GetPageSizeByIndex'] = createExportWrapper(\n      'FPDF_GetPageSizeByIndex',\n      4,\n    ));\n    (Module['_FPDF_VIEWERREF_GetPrintScaling'] =\n      createExportWrapper('FPDF_VIEWERREF_GetPrintScaling', 1));\n    (Module['_FPDF_VIEWERREF_GetNumCopies'] =\n      createExportWrapper('FPDF_VIEWERREF_GetNumCopies', 1));\n    (Module['_FPDF_VIEWERREF_GetPrintPageRange'] =\n      createExportWrapper('FPDF_VIEWERREF_GetPrintPageRange', 1));\n    (Module['_FPDF_VIEWERREF_GetPrintPageRangeCount'] =\n      createExportWrapper('FPDF_VIEWERREF_GetPrintPageRangeCount', 1));\n    (Module[\n      '_FPDF_VIEWERREF_GetPrintPageRangeElement'\n    ] = createExportWrapper('FPDF_VIEWERREF_GetPrintPageRangeElement', 2));\n    (Module['_FPDF_VIEWERREF_GetDuplex'] = createExportWrapper(\n      'FPDF_VIEWERREF_GetDuplex',\n      1,\n    ));\n    (Module['_FPDF_VIEWERREF_GetName'] = createExportWrapper(\n      'FPDF_VIEWERREF_GetName',\n      4,\n    ));\n    (Module['_FPDF_CountNamedDests'] = createExportWrapper(\n      'FPDF_CountNamedDests',\n      1,\n    ));\n    (Module['_FPDF_GetNamedDestByName'] = createExportWrapper(\n      'FPDF_GetNamedDestByName',\n      2,\n    ));\n    (Module['_FPDF_GetNamedDest'] = createExportWrapper(\n      'FPDF_GetNamedDest',\n      4,\n    ));\n    (Module['_FPDF_GetXFAPacketCount'] = createExportWrapper(\n      'FPDF_GetXFAPacketCount',\n      1,\n    ));\n    (Module['_FPDF_GetXFAPacketName'] = createExportWrapper(\n      'FPDF_GetXFAPacketName',\n      4,\n    ));\n    (Module['_FPDF_GetXFAPacketContent'] = createExportWrapper(\n      'FPDF_GetXFAPacketContent',\n      5,\n    ));\n    (Module['_FPDF_GetTrailerEnds'] = createExportWrapper(\n      'FPDF_GetTrailerEnds',\n      3,\n    ));\n    var _fflush = createExportWrapper('fflush', 1);\n    var _emscripten_builtin_memalign = createExportWrapper('emscripten_builtin_memalign', 2);\n    var _strerror = createExportWrapper('strerror', 1);\n    var _setThrew = createExportWrapper('setThrew', 2);\n    var _emscripten_stack_init = () =>\n      (_emscripten_stack_init = wasmExports['emscripten_stack_init'])();\n    var _emscripten_stack_get_end = () =>\n      (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])();\n    var __emscripten_stack_restore = (a0) =>\n      (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0);\n    var __emscripten_stack_alloc = (a0) =>\n      (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0);\n    var _emscripten_stack_get_current = () =>\n      (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])();\n    (Module['dynCall_ji'] = createExportWrapper('dynCall_ji', 2));\n    (Module['dynCall_jij'] = createExportWrapper('dynCall_jij', 4));\n    (Module['dynCall_iiij'] = createExportWrapper('dynCall_iiij', 5));\n    (Module['dynCall_iij'] = createExportWrapper('dynCall_iij', 4));\n    (Module['dynCall_j'] = createExportWrapper('dynCall_j', 1));\n    (Module['dynCall_jji'] = createExportWrapper('dynCall_jji', 4));\n    (Module['dynCall_iji'] = createExportWrapper('dynCall_iji', 4));\n    (Module['dynCall_viijii'] = createExportWrapper('dynCall_viijii', 7));\n    (Module['dynCall_iiji'] = createExportWrapper('dynCall_iiji', 5));\n    (Module['dynCall_jiji'] = createExportWrapper('dynCall_jiji', 5));\n    (Module['dynCall_iiiiij'] = createExportWrapper('dynCall_iiiiij', 7));\n    (Module['dynCall_iiiiijj'] = createExportWrapper('dynCall_iiiiijj', 9));\n    (Module['dynCall_iiiiiijj'] = createExportWrapper(\n      'dynCall_iiiiiijj',\n      10,\n    ));\n    (Module['dynCall_viji'] = createExportWrapper('dynCall_viji', 5));\n\n    function invoke_viii(index, a1, a2, a3) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2, a3);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_ii(index, a1) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_iii(index, a1, a2) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1, a2);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_iiii(index, a1, a2, a3) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1, a2, a3);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_viiii(index, a1, a2, a3, a4) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2, a3, a4);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_iiiii(index, a1, a2, a3, a4) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1, a2, a3, a4);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_v(index) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)();\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_vii(index, a1, a2) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_viiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    // include: postamble.js\n    // === Auto-generated postamble setup entry stuff ===\n\n    Module['wasmExports'] = wasmExports;\n    Module['ccall'] = ccall;\n    Module['cwrap'] = cwrap;\n    Module['addFunction'] = addFunction;\n    Module['removeFunction'] = removeFunction;\n    Module['setValue'] = setValue;\n    Module['getValue'] = getValue;\n    Module['UTF8ToString'] = UTF8ToString;\n    Module['stringToUTF8'] = stringToUTF8;\n    Module['UTF16ToString'] = UTF16ToString;\n    Module['stringToUTF16'] = stringToUTF16;\n    var missingLibrarySymbols = [\n      'writeI53ToI64',\n      'writeI53ToI64Clamped',\n      'writeI53ToI64Signaling',\n      'writeI53ToU64Clamped',\n      'writeI53ToU64Signaling',\n      'readI53FromI64',\n      'readI53FromU64',\n      'convertI32PairToI53',\n      'convertU32PairToI53',\n      'getTempRet0',\n      'setTempRet0',\n      'exitJS',\n      'inetPton4',\n      'inetNtop4',\n      'inetPton6',\n      'inetNtop6',\n      'readSockaddr',\n      'writeSockaddr',\n      'emscriptenLog',\n      'readEmAsmArgs',\n      'jstoi_q',\n      'listenOnce',\n      'autoResumeAudioContext',\n      'dynCallLegacy',\n      'getDynCaller',\n      'dynCall',\n      'handleException',\n      'keepRuntimeAlive',\n      'runtimeKeepalivePush',\n      'runtimeKeepalivePop',\n      'callUserCallback',\n      'maybeExit',\n      'asmjsMangle',\n      'HandleAllocator',\n      'getNativeTypeSize',\n      'STACK_SIZE',\n      'STACK_ALIGN',\n      'POINTER_SIZE',\n      'ASSERTIONS',\n      'reallyNegative',\n      'unSign',\n      'strLen',\n      'reSign',\n      'formatString',\n      'intArrayToString',\n      'AsciiToString',\n      'lengthBytesUTF16',\n      'UTF32ToString',\n      'stringToUTF32',\n      'lengthBytesUTF32',\n      'stringToNewUTF8',\n      'registerKeyEventCallback',\n      'maybeCStringToJsString',\n      'findEventTarget',\n      'getBoundingClientRect',\n      'fillMouseEventData',\n      'registerMouseEventCallback',\n      'registerWheelEventCallback',\n      'registerUiEventCallback',\n      'registerFocusEventCallback',\n      'fillDeviceOrientationEventData',\n      'registerDeviceOrientationEventCallback',\n      'fillDeviceMotionEventData',\n      'registerDeviceMotionEventCallback',\n      'screenOrientation',\n      'fillOrientationChangeEventData',\n      'registerOrientationChangeEventCallback',\n      'fillFullscreenChangeEventData',\n      'registerFullscreenChangeEventCallback',\n      'JSEvents_requestFullscreen',\n      'JSEvents_resizeCanvasForFullscreen',\n      'registerRestoreOldStyle',\n      'hideEverythingExceptGivenElement',\n      'restoreHiddenElements',\n      'setLetterbox',\n      'softFullscreenResizeWebGLRenderTarget',\n      'doRequestFullscreen',\n      'fillPointerlockChangeEventData',\n      'registerPointerlockChangeEventCallback',\n      'registerPointerlockErrorEventCallback',\n      'requestPointerLock',\n      'fillVisibilityChangeEventData',\n      'registerVisibilityChangeEventCallback',\n      'registerTouchEventCallback',\n      'fillGamepadEventData',\n      'registerGamepadEventCallback',\n      'registerBeforeUnloadEventCallback',\n      'fillBatteryEventData',\n      'battery',\n      'registerBatteryEventCallback',\n      'setCanvasElementSize',\n      'getCanvasElementSize',\n      'jsStackTrace',\n      'getCallstack',\n      'convertPCtoSourceLocation',\n      'checkWasiClock',\n      'wasiRightsToMuslOFlags',\n      'wasiOFlagsToMuslOFlags',\n      'createDyncallWrapper',\n      'safeSetTimeout',\n      'setImmediateWrapped',\n      'clearImmediateWrapped',\n      'polyfillSetImmediate',\n      'registerPostMainLoop',\n      'registerPreMainLoop',\n      'getPromise',\n      'makePromise',\n      'idsToPromises',\n      'makePromiseCallback',\n      'ExceptionInfo',\n      'findMatchingCatch',\n      'Browser_asyncPrepareDataCounter',\n      'safeRequestAnimationFrame',\n      'arraySum',\n      'addDays',\n      'getSocketFromFD',\n      'getSocketAddress',\n      'FS_unlink',\n      'FS_mkdirTree',\n      '_setNetworkCallback',\n      'heapObjectForWebGLType',\n      'toTypedArrayIndex',\n      'webgl_enable_ANGLE_instanced_arrays',\n      'webgl_enable_OES_vertex_array_object',\n      'webgl_enable_WEBGL_draw_buffers',\n      'webgl_enable_WEBGL_multi_draw',\n      'webgl_enable_EXT_polygon_offset_clamp',\n      'webgl_enable_EXT_clip_control',\n      'webgl_enable_WEBGL_polygon_mode',\n      'emscriptenWebGLGet',\n      'computeUnpackAlignedImageSize',\n      'colorChannelsInGlTextureFormat',\n      'emscriptenWebGLGetTexPixelData',\n      'emscriptenWebGLGetUniform',\n      'webglGetUniformLocation',\n      'webglPrepareUniformLocationsBeforeFirstUse',\n      'webglGetLeftBracePos',\n      'emscriptenWebGLGetVertexAttrib',\n      '__glGetActiveAttribOrUniform',\n      'writeGLArray',\n      'registerWebGlEventCallback',\n      'runAndAbortIfError',\n      'ALLOC_NORMAL',\n      'ALLOC_STACK',\n      'allocate',\n      'writeStringToMemory',\n      'writeAsciiToMemory',\n      'setErrNo',\n      'demangle',\n      'stackTrace',\n    ];\n    missingLibrarySymbols.forEach(missingLibrarySymbol);\n\n    var unexportedSymbols = [\n      'run',\n      'addOnPreRun',\n      'addOnInit',\n      'addOnPreMain',\n      'addOnExit',\n      'addOnPostRun',\n      'addRunDependency',\n      'removeRunDependency',\n      'out',\n      'err',\n      'callMain',\n      'abort',\n      'wasmMemory',\n      'writeStackCookie',\n      'checkStackCookie',\n      'convertI32PairToI53Checked',\n      'stackSave',\n      'stackRestore',\n      'stackAlloc',\n      'ptrToString',\n      'zeroMemory',\n      'getHeapMax',\n      'growMemory',\n      'ENV',\n      'ERRNO_CODES',\n      'strError',\n      'DNS',\n      'Protocols',\n      'Sockets',\n      'initRandomFill',\n      'randomFill',\n      'timers',\n      'warnOnce',\n      'readEmAsmArgsArray',\n      'jstoi_s',\n      'getExecutableName',\n      'asyncLoad',\n      'alignMemory',\n      'mmapAlloc',\n      'wasmTable',\n      'noExitRuntime',\n      'getCFunc',\n      'uleb128Encode',\n      'sigToWasmTypes',\n      'generateFuncType',\n      'convertJsFunctionToWasm',\n      'freeTableIndexes',\n      'functionsInTableMap',\n      'getEmptyTableSlot',\n      'updateTableMap',\n      'getFunctionAddress',\n      'PATH',\n      'PATH_FS',\n      'UTF8Decoder',\n      'UTF8ArrayToString',\n      'stringToUTF8Array',\n      'lengthBytesUTF8',\n      'intArrayFromString',\n      'stringToAscii',\n      'UTF16Decoder',\n      'stringToUTF8OnStack',\n      'writeArrayToMemory',\n      'JSEvents',\n      'specialHTMLTargets',\n      'findCanvasEventTarget',\n      'currentFullscreenStrategy',\n      'restoreOldWindowedStyle',\n      'UNWIND_CACHE',\n      'ExitStatus',\n      'getEnvStrings',\n      'doReadv',\n      'doWritev',\n      'promiseMap',\n      'uncaughtExceptionCount',\n      'exceptionLast',\n      'exceptionCaught',\n      'Browser',\n      'getPreloadedImageData__data',\n      'wget',\n      'MONTH_DAYS_REGULAR',\n      'MONTH_DAYS_LEAP',\n      'MONTH_DAYS_REGULAR_CUMULATIVE',\n      'MONTH_DAYS_LEAP_CUMULATIVE',\n      'isLeapYear',\n      'ydayFromDate',\n      'SYSCALLS',\n      'preloadPlugins',\n      'FS_createPreloadedFile',\n      'FS_modeStringToFlags',\n      'FS_getMode',\n      'FS_stdin_getChar_buffer',\n      'FS_stdin_getChar',\n      'FS_createPath',\n      'FS_createDevice',\n      'FS_readFile',\n      'FS',\n      'FS_createDataFile',\n      'FS_createLazyFile',\n      'MEMFS',\n      'TTY',\n      'PIPEFS',\n      'SOCKFS',\n      'tempFixedLengthArray',\n      'miniTempWebGLFloatBuffers',\n      'miniTempWebGLIntBuffers',\n      'GL',\n      'AL',\n      'GLUT',\n      'EGL',\n      'GLEW',\n      'IDBStore',\n      'SDL',\n      'SDL_gfx',\n      'allocateUTF8',\n      'allocateUTF8OnStack',\n      'print',\n      'printErr',\n    ];\n    unexportedSymbols.forEach(unexportedRuntimeSymbol);\n\n    var calledRun;\n    var calledPrerun;\n\n    dependenciesFulfilled = function runCaller() {\n      // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\n      if (!calledRun) run();\n      if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\n    };\n\n    function stackCheckInit() {\n      // This is normally called automatically during __wasm_call_ctors but need to\n      // get these values before even running any of the ctors so we call it redundantly\n      // here.\n      _emscripten_stack_init();\n      // TODO(sbc): Move writeStackCookie to native to to avoid this.\n      writeStackCookie();\n    }\n\n    function run() {\n      if (runDependencies > 0) {\n        return;\n      }\n\n      stackCheckInit();\n\n      if (!calledPrerun) {\n        calledPrerun = 1;\n        preRun();\n\n        // a preRun added a dependency, run will be called later\n        if (runDependencies > 0) {\n          return;\n        }\n      }\n\n      function doRun() {\n        // run may have just been called through dependencies being fulfilled just in this very frame,\n        // or while the async setStatus time below was happening\n        if (calledRun) return;\n        calledRun = 1;\n        Module['calledRun'] = 1;\n\n        if (ABORT) return;\n\n        initRuntime();\n\n        readyPromiseResolve(Module);\n        Module['onRuntimeInitialized']?.();\n\n        assert(\n          !Module['_main'],\n          'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]',\n        );\n\n        postRun();\n      }\n\n      if (Module['setStatus']) {\n        Module['setStatus']('Running...');\n        setTimeout(() => {\n          setTimeout(() => Module['setStatus'](''), 1);\n          doRun();\n        }, 1);\n      } else {\n        doRun();\n      }\n      checkStackCookie();\n    }\n\n    if (Module['preInit']) {\n      if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\n      while (Module['preInit'].length > 0) {\n        Module['preInit'].pop()();\n      }\n    }\n\n    run();\n\n    // end include: postamble.js\n\n    // include: postamble_modularize.js\n    // In MODULARIZE mode we wrap the generated code in a factory function\n    // and return either the Module itself, or a promise of the module.\n    //\n    // We assign to the `moduleRtn` global here and configure closure to see\n    // this as and extern so it won't get minified.\n\n    moduleRtn = readyPromise;\n\n    // Assertion for attempting to access module properties on the incoming\n    // moduleArg.  In the past we used this object as the prototype of the module\n    // and assigned properties to it, but now we return a distinct object.  This\n    // keeps the instance private until it is ready (i.e the promise has been\n    // resolved).\n    for (const prop of Object.keys(Module)) {\n      if (!(prop in moduleArg)) {\n        Object.defineProperty(moduleArg, prop, {\n          configurable: true,\n          get() {\n            abort(\n              `Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`,\n            );\n          },\n        });\n      }\n    }\n    // end include: postamble_modularize.js\n\n    return moduleRtn;\n  };\n})();\n\n/* AUTO-GENERATED — DO NOT EDIT BY HAND */\nconst functions = {\n    EPDF_GetMetaKeyCount: [['number', 'boolean'], 'number'],\n    EPDF_GetMetaKeyName: [\n        ['number', 'number', 'boolean', 'number', 'number'],\n        'number',\n    ],\n    EPDF_GetMetaTrapped: [['number'], 'number'],\n    EPDF_GetPageRotationByIndex: [['number', 'number'], 'number'],\n    EPDF_HasMetaText: [['number', 'string'], 'boolean'],\n    EPDF_PNG_EncodeRGBA: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    EPDF_RenderAnnotBitmap: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDF_SetMetaText: [['number', 'string', 'number'], 'boolean'],\n    EPDF_SetMetaTrapped: [['number', 'number'], 'boolean'],\n    EPDFAction_CreateGoTo: [['number', 'number'], 'number'],\n    EPDFAction_CreateGoToNamed: [['number', 'string'], 'number'],\n    EPDFAction_CreateLaunch: [['number', 'number'], 'number'],\n    EPDFAction_CreateRemoteGoToByName: [['number', 'number', 'number'], 'number'],\n    EPDFAction_CreateRemoteGoToDest: [['number', 'number', 'number'], 'number'],\n    EPDFAction_CreateURI: [['number', 'string'], 'number'],\n    EPDFAnnot_ClearColor: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GenerateAppearance: [['number'], 'boolean'],\n    EPDFAnnot_GenerateAppearanceWithBlend: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GetBlendMode: [['number'], 'number'],\n    EPDFAnnot_GetBorderDashPattern: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_GetBorderDashPatternCount: [['number'], 'number'],\n    EPDFAnnot_GetBorderEffect: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GetBorderStyle: [['number', 'number'], 'number'],\n    EPDFAnnot_GetColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_GetDefaultAppearance: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_GetIcon: [['number'], 'number'],\n    EPDFAnnot_GetIntent: [['number', 'number', 'number'], 'number'],\n    EPDFAnnot_GetLineEndings: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_GetOpacity: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GetRectangleDifferences: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_GetRichContent: [['number', 'number', 'number'], 'number'],\n    EPDFAnnot_GetTextAlignment: [['number'], 'number'],\n    EPDFAnnot_GetVerticalAlignment: [['number'], 'number'],\n    EPDFAnnot_SetBorderDashPattern: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetBorderStyle: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_SetDefaultAppearance: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_SetIcon: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetIntent: [['number', 'string'], 'boolean'],\n    EPDFAnnot_SetLine: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetLineEndings: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetLinkedAnnot: [['number', 'string', 'number'], 'boolean'],\n    EPDFAnnot_SetOpacity: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetTextAlignment: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetVerticalAlignment: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetVertices: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_UpdateAppearanceToRect: [['number', 'number'], 'boolean'],\n    EPDFAttachment_GetDescription: [['number', 'number', 'number'], 'number'],\n    EPDFAttachment_GetIntegerValue: [['number', 'string', 'number'], 'boolean'],\n    EPDFAttachment_SetDescription: [['number', 'number'], 'boolean'],\n    EPDFAttachment_SetSubtype: [['number', 'string'], 'boolean'],\n    EPDFBookmark_AppendChild: [['number', 'number', 'number'], 'number'],\n    EPDFBookmark_Clear: [['number'], 'boolean'],\n    EPDFBookmark_ClearTarget: [['number'], 'boolean'],\n    EPDFBookmark_Create: [['number', 'number'], 'number'],\n    EPDFBookmark_Delete: [['number', 'number'], 'boolean'],\n    EPDFBookmark_InsertAfter: [['number', 'number', 'number', 'number'], 'number'],\n    EPDFBookmark_SetAction: [['number', 'number', 'number'], 'boolean'],\n    EPDFBookmark_SetDest: [['number', 'number', 'number'], 'boolean'],\n    EPDFBookmark_SetTitle: [['number', 'number'], 'boolean'],\n    EPDFCatalog_GetLanguage: [['number', 'number', 'number'], 'number'],\n    EPDFDest_CreateRemoteView: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    EPDFDest_CreateRemoteXYZ: [\n        ['number', 'number', 'boolean', 'number', 'boolean', 'number', 'boolean', 'number'],\n        'number',\n    ],\n    EPDFDest_CreateView: [['number', 'number', 'number', 'number'], 'number'],\n    EPDFDest_CreateXYZ: [\n        ['number', 'boolean', 'number', 'boolean', 'number', 'boolean', 'number'],\n        'number',\n    ],\n    EPDFNamedDest_Remove: [['number', 'string'], 'boolean'],\n    EPDFNamedDest_SetDest: [['number', 'string', 'number'], 'boolean'],\n    EPDFPage_CreateAnnot: [['number', 'number'], 'number'],\n    EPDFPage_GetAnnotByName: [['number', 'number'], 'number'],\n    EPDFPage_GetAnnotCountRaw: [['number', 'number'], 'number'],\n    EPDFPage_GetAnnotRaw: [['number', 'number', 'number'], 'number'],\n    EPDFPage_RemoveAnnotByName: [['number', 'number'], 'boolean'],\n    EPDFPage_RemoveAnnotRaw: [['number', 'number', 'number'], 'boolean'],\n    EPDFText_RedactInQuads: [\n        ['number', 'number', 'number', 'boolean', 'boolean'],\n        'boolean',\n    ],\n    EPDFText_RedactInRect: [['number', 'number', 'boolean', 'boolean'], 'boolean'],\n    FORM_CanRedo: [['number', 'number'], 'boolean'],\n    FORM_CanUndo: [['number', 'number'], 'boolean'],\n    FORM_DoDocumentAAction: [['number', 'number'], null],\n    FORM_DoDocumentJSAction: [['number'], null],\n    FORM_DoDocumentOpenAction: [['number'], null],\n    FORM_DoPageAAction: [['number', 'number', 'number'], null],\n    FORM_ForceToKillFocus: [['number'], 'boolean'],\n    FORM_GetFocusedAnnot: [['number', 'number', 'number'], 'boolean'],\n    FORM_GetFocusedText: [['number', 'number', 'number', 'number'], 'number'],\n    FORM_GetSelectedText: [['number', 'number', 'number', 'number'], 'number'],\n    FORM_IsIndexSelected: [['number', 'number', 'number'], 'boolean'],\n    FORM_OnAfterLoadPage: [['number', 'number'], null],\n    FORM_OnBeforeClosePage: [['number', 'number'], null],\n    FORM_OnChar: [['number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnFocus: [['number', 'number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnKeyDown: [['number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnKeyUp: [['number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnLButtonDoubleClick: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnLButtonDown: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnLButtonUp: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnMouseMove: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnMouseWheel: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnRButtonDown: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnRButtonUp: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_Redo: [['number', 'number'], 'boolean'],\n    FORM_ReplaceAndKeepSelection: [['number', 'number', 'number'], null],\n    FORM_ReplaceSelection: [['number', 'number', 'number'], null],\n    FORM_SelectAllText: [['number', 'number'], 'boolean'],\n    FORM_SetFocusedAnnot: [['number', 'number'], 'boolean'],\n    FORM_SetIndexSelected: [['number', 'number', 'number', 'boolean'], 'boolean'],\n    FORM_Undo: [['number', 'number'], 'boolean'],\n    FPDF_AddInstalledFont: [['number', 'number', 'number'], null],\n    FPDF_CloseDocument: [['number'], null],\n    FPDF_ClosePage: [['number'], null],\n    FPDF_CloseXObject: [['number'], null],\n    FPDF_CopyViewerPreferences: [['number', 'number'], 'boolean'],\n    FPDF_CountNamedDests: [['number'], 'number'],\n    FPDF_CreateClipPath: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_CreateNewDocument: [[], 'number'],\n    FPDF_DestroyClipPath: [['number'], null],\n    FPDF_DestroyLibrary: [[], null],\n    FPDF_DeviceToPage: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'boolean',\n    ],\n    FPDF_DocumentHasValidCrossReferenceTable: [['number'], 'boolean'],\n    FPDF_FFLDraw: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        null,\n    ],\n    FPDF_FreeDefaultSystemFontInfo: [['number'], null],\n    FPDF_GetDefaultSystemFontInfo: [[], 'number'],\n    FPDF_GetDefaultTTFMap: [[], 'number'],\n    FPDF_GetDefaultTTFMapCount: [[], 'number'],\n    FPDF_GetDefaultTTFMapEntry: [['number'], 'number'],\n    FPDF_GetDocPermissions: [['number'], 'number'],\n    FPDF_GetDocUserPermissions: [['number'], 'number'],\n    FPDF_GetFileIdentifier: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetFileVersion: [['number', 'number'], 'boolean'],\n    FPDF_GetFormType: [['number'], 'number'],\n    FPDF_GetLastError: [[], 'number'],\n    FPDF_GetMetaText: [['number', 'string', 'number', 'number'], 'number'],\n    FPDF_GetNamedDest: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetNamedDestByName: [['number', 'string'], 'number'],\n    FPDF_GetPageAAction: [['number', 'number'], 'number'],\n    FPDF_GetPageBoundingBox: [['number', 'number'], 'boolean'],\n    FPDF_GetPageCount: [['number'], 'number'],\n    FPDF_GetPageHeight: [['number'], 'number'],\n    FPDF_GetPageHeightF: [['number'], 'number'],\n    FPDF_GetPageLabel: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetPageSizeByIndex: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetPageSizeByIndexF: [['number', 'number', 'number'], 'boolean'],\n    FPDF_GetPageWidth: [['number'], 'number'],\n    FPDF_GetPageWidthF: [['number'], 'number'],\n    FPDF_GetSecurityHandlerRevision: [['number'], 'number'],\n    FPDF_GetSignatureCount: [['number'], 'number'],\n    FPDF_GetSignatureObject: [['number', 'number'], 'number'],\n    FPDF_GetTrailerEnds: [['number', 'number', 'number'], 'number'],\n    FPDF_GetXFAPacketContent: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_GetXFAPacketCount: [['number'], 'number'],\n    FPDF_GetXFAPacketName: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_ImportNPagesToOne: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDF_ImportPages: [['number', 'number', 'string', 'number'], 'boolean'],\n    FPDF_ImportPagesByIndex: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_InitLibrary: [[], null],\n    FPDF_InitLibraryWithConfig: [['number'], null],\n    FPDF_LoadCustomDocument: [['number', 'string'], 'number'],\n    FPDF_LoadDocument: [['number', 'string'], 'number'],\n    FPDF_LoadMemDocument: [['number', 'number', 'string'], 'number'],\n    FPDF_LoadMemDocument64: [['number', 'number', 'string'], 'number'],\n    FPDF_LoadPage: [['number', 'number'], 'number'],\n    FPDF_LoadXFA: [['number'], 'boolean'],\n    FPDF_MovePages: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDF_NewFormObjectFromXObject: [['number'], 'number'],\n    FPDF_NewXObjectFromPage: [['number', 'number', 'number'], 'number'],\n    FPDF_PageToDevice: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'boolean',\n    ],\n    FPDF_RemoveFormFieldHighlight: [['number'], null],\n    FPDF_RenderPage_Close: [['number'], null],\n    FPDF_RenderPage_Continue: [['number', 'number'], 'number'],\n    FPDF_RenderPageBitmap: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDF_RenderPageBitmap_Start: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'number',\n    ],\n    FPDF_RenderPageBitmapWithColorScheme_Start: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'number',\n    ],\n    FPDF_RenderPageBitmapWithMatrix: [\n        ['number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDF_SaveAsCopy: [['number', 'number', 'number'], 'boolean'],\n    FPDF_SaveWithVersion: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDF_SetFormFieldHighlightAlpha: [['number', 'number'], null],\n    FPDF_SetFormFieldHighlightColor: [['number', 'number', 'number'], null],\n    FPDF_SetSandBoxPolicy: [['number', 'boolean'], null],\n    FPDF_SetSystemFontInfo: [['number'], null],\n    FPDF_StructElement_Attr_CountChildren: [['number'], 'number'],\n    FPDF_StructElement_Attr_GetBlobValue: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_StructElement_Attr_GetBooleanValue: [['number', 'number'], 'boolean'],\n    FPDF_StructElement_Attr_GetChildAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_Attr_GetCount: [['number'], 'number'],\n    FPDF_StructElement_Attr_GetName: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_StructElement_Attr_GetNumberValue: [['number', 'number'], 'boolean'],\n    FPDF_StructElement_Attr_GetStringValue: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_StructElement_Attr_GetType: [['number'], 'number'],\n    FPDF_StructElement_Attr_GetValue: [['number', 'string'], 'number'],\n    FPDF_StructElement_CountChildren: [['number'], 'number'],\n    FPDF_StructElement_GetActualText: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetAltText: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetAttributeAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetAttributeCount: [['number'], 'number'],\n    FPDF_StructElement_GetChildAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetChildMarkedContentID: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetID: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetLang: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetMarkedContentID: [['number'], 'number'],\n    FPDF_StructElement_GetMarkedContentIdAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetMarkedContentIdCount: [['number'], 'number'],\n    FPDF_StructElement_GetObjType: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetParent: [['number'], 'number'],\n    FPDF_StructElement_GetStringAttribute: [\n        ['number', 'string', 'number', 'number'],\n        'number',\n    ],\n    FPDF_StructElement_GetTitle: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetType: [['number', 'number', 'number'], 'number'],\n    FPDF_StructTree_Close: [['number'], null],\n    FPDF_StructTree_CountChildren: [['number'], 'number'],\n    FPDF_StructTree_GetChildAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructTree_GetForPage: [['number'], 'number'],\n    FPDF_VIEWERREF_GetDuplex: [['number'], 'number'],\n    FPDF_VIEWERREF_GetName: [['number', 'string', 'number', 'number'], 'number'],\n    FPDF_VIEWERREF_GetNumCopies: [['number'], 'number'],\n    FPDF_VIEWERREF_GetPrintPageRange: [['number'], 'number'],\n    FPDF_VIEWERREF_GetPrintPageRangeCount: [['number'], 'number'],\n    FPDF_VIEWERREF_GetPrintPageRangeElement: [['number', 'number'], 'number'],\n    FPDF_VIEWERREF_GetPrintScaling: [['number'], 'boolean'],\n    FPDFAction_GetDest: [['number', 'number'], 'number'],\n    FPDFAction_GetFilePath: [['number', 'number', 'number'], 'number'],\n    FPDFAction_GetType: [['number'], 'number'],\n    FPDFAction_GetURIPath: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFAnnot_AddFileAttachment: [['number', 'number'], 'number'],\n    FPDFAnnot_AddInkStroke: [['number', 'number', 'number'], 'number'],\n    FPDFAnnot_AppendAttachmentPoints: [['number', 'number'], 'boolean'],\n    FPDFAnnot_AppendObject: [['number', 'number'], 'boolean'],\n    FPDFAnnot_CountAttachmentPoints: [['number'], 'number'],\n    FPDFAnnot_GetAP: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFAnnot_GetAttachmentPoints: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetBorder: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_GetFileAttachment: [['number'], 'number'],\n    FPDFAnnot_GetFlags: [['number'], 'number'],\n    FPDFAnnot_GetFocusableSubtypes: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetFocusableSubtypesCount: [['number'], 'number'],\n    FPDFAnnot_GetFontColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_GetFontSize: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetFormAdditionalActionJavaScript: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormControlCount: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormControlIndex: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldAlternateName: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormFieldAtPoint: [['number', 'number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldExportValue: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormFieldFlags: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldName: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormFieldType: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldValue: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetInkListCount: [['number'], 'number'],\n    FPDFAnnot_GetInkListPath: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFAnnot_GetLine: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetLink: [['number'], 'number'],\n    FPDFAnnot_GetLinkedAnnot: [['number', 'string'], 'number'],\n    FPDFAnnot_GetNumberValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFAnnot_GetObject: [['number', 'number'], 'number'],\n    FPDFAnnot_GetObjectCount: [['number'], 'number'],\n    FPDFAnnot_GetOptionCount: [['number', 'number'], 'number'],\n    FPDFAnnot_GetOptionLabel: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetRect: [['number', 'number'], 'boolean'],\n    FPDFAnnot_GetStringValue: [['number', 'string', 'number', 'number'], 'number'],\n    FPDFAnnot_GetSubtype: [['number'], 'number'],\n    FPDFAnnot_GetValueType: [['number', 'string'], 'number'],\n    FPDFAnnot_GetVertices: [['number', 'number', 'number'], 'number'],\n    FPDFAnnot_HasAttachmentPoints: [['number'], 'boolean'],\n    FPDFAnnot_HasKey: [['number', 'string'], 'boolean'],\n    FPDFAnnot_IsChecked: [['number', 'number'], 'boolean'],\n    FPDFAnnot_IsObjectSupportedSubtype: [['number'], 'boolean'],\n    FPDFAnnot_IsOptionSelected: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_IsSupportedSubtype: [['number'], 'boolean'],\n    FPDFAnnot_RemoveInkList: [['number'], 'boolean'],\n    FPDFAnnot_RemoveObject: [['number', 'number'], 'boolean'],\n    FPDFAnnot_SetAP: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetAttachmentPoints: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetBorder: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_SetFlags: [['number', 'number'], 'boolean'],\n    FPDFAnnot_SetFocusableSubtypes: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetFontColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_SetFormFieldFlags: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetRect: [['number', 'number'], 'boolean'],\n    FPDFAnnot_SetStringValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFAnnot_SetURI: [['number', 'number'], 'boolean'],\n    FPDFAnnot_UpdateObject: [['number', 'number'], 'boolean'],\n    FPDFAttachment_GetFile: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAttachment_GetName: [['number', 'number', 'number'], 'number'],\n    FPDFAttachment_GetStringValue: [\n        ['number', 'string', 'number', 'number'],\n        'number',\n    ],\n    FPDFAttachment_GetSubtype: [['number', 'number', 'number'], 'number'],\n    FPDFAttachment_GetValueType: [['number', 'string'], 'number'],\n    FPDFAttachment_HasKey: [['number', 'string'], 'boolean'],\n    FPDFAttachment_SetFile: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAttachment_SetStringValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFAvail_Create: [['number', 'number'], 'number'],\n    FPDFAvail_Destroy: [['number'], null],\n    FPDFAvail_GetDocument: [['number', 'string'], 'number'],\n    FPDFAvail_GetFirstPageNum: [['number'], 'number'],\n    FPDFAvail_IsDocAvail: [['number', 'number'], 'number'],\n    FPDFAvail_IsFormAvail: [['number', 'number'], 'number'],\n    FPDFAvail_IsLinearized: [['number'], 'number'],\n    FPDFAvail_IsPageAvail: [['number', 'number', 'number'], 'number'],\n    FPDFBitmap_Create: [['number', 'number', 'number'], 'number'],\n    FPDFBitmap_CreateEx: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFBitmap_Destroy: [['number'], null],\n    FPDFBitmap_FillRect: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFBitmap_GetBuffer: [['number'], 'number'],\n    FPDFBitmap_GetFormat: [['number'], 'number'],\n    FPDFBitmap_GetHeight: [['number'], 'number'],\n    FPDFBitmap_GetStride: [['number'], 'number'],\n    FPDFBitmap_GetWidth: [['number'], 'number'],\n    FPDFBookmark_Find: [['number', 'number'], 'number'],\n    FPDFBookmark_GetAction: [['number'], 'number'],\n    FPDFBookmark_GetCount: [['number'], 'number'],\n    FPDFBookmark_GetDest: [['number', 'number'], 'number'],\n    FPDFBookmark_GetFirstChild: [['number', 'number'], 'number'],\n    FPDFBookmark_GetNextSibling: [['number', 'number'], 'number'],\n    FPDFBookmark_GetTitle: [['number', 'number', 'number'], 'number'],\n    FPDFCatalog_IsTagged: [['number'], 'boolean'],\n    FPDFCatalog_SetLanguage: [['number', 'string'], 'boolean'],\n    FPDFClipPath_CountPaths: [['number'], 'number'],\n    FPDFClipPath_CountPathSegments: [['number', 'number'], 'number'],\n    FPDFClipPath_GetPathSegment: [['number', 'number', 'number'], 'number'],\n    FPDFDest_GetDestPageIndex: [['number', 'number'], 'number'],\n    FPDFDest_GetLocationInPage: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFDest_GetView: [['number', 'number', 'number'], 'number'],\n    FPDFDoc_AddAttachment: [['number', 'number'], 'number'],\n    FPDFDoc_CloseJavaScriptAction: [['number'], null],\n    FPDFDoc_DeleteAttachment: [['number', 'number'], 'boolean'],\n    FPDFDOC_ExitFormFillEnvironment: [['number'], null],\n    FPDFDoc_GetAttachment: [['number', 'number'], 'number'],\n    FPDFDoc_GetAttachmentCount: [['number'], 'number'],\n    FPDFDoc_GetJavaScriptAction: [['number', 'number'], 'number'],\n    FPDFDoc_GetJavaScriptActionCount: [['number'], 'number'],\n    FPDFDoc_GetPageMode: [['number'], 'number'],\n    FPDFDOC_InitFormFillEnvironment: [['number', 'number'], 'number'],\n    FPDFFont_Close: [['number'], null],\n    FPDFFont_GetAscent: [['number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetBaseFontName: [['number', 'number', 'number'], 'number'],\n    FPDFFont_GetDescent: [['number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetFamilyName: [['number', 'number', 'number'], 'number'],\n    FPDFFont_GetFlags: [['number'], 'number'],\n    FPDFFont_GetFontData: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetGlyphPath: [['number', 'number', 'number'], 'number'],\n    FPDFFont_GetGlyphWidth: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetIsEmbedded: [['number'], 'number'],\n    FPDFFont_GetItalicAngle: [['number', 'number'], 'boolean'],\n    FPDFFont_GetWeight: [['number'], 'number'],\n    FPDFFormObj_CountObjects: [['number'], 'number'],\n    FPDFFormObj_GetObject: [['number', 'number'], 'number'],\n    FPDFFormObj_RemoveObject: [['number', 'number'], 'boolean'],\n    FPDFGlyphPath_CountGlyphSegments: [['number'], 'number'],\n    FPDFGlyphPath_GetGlyphPathSegment: [['number', 'number'], 'number'],\n    FPDFImageObj_GetBitmap: [['number'], 'number'],\n    FPDFImageObj_GetIccProfileDataDecoded: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFImageObj_GetImageDataDecoded: [['number', 'number', 'number'], 'number'],\n    FPDFImageObj_GetImageDataRaw: [['number', 'number', 'number'], 'number'],\n    FPDFImageObj_GetImageFilter: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFImageObj_GetImageFilterCount: [['number'], 'number'],\n    FPDFImageObj_GetImageMetadata: [['number', 'number', 'number'], 'boolean'],\n    FPDFImageObj_GetImagePixelSize: [['number', 'number', 'number'], 'boolean'],\n    FPDFImageObj_GetRenderedBitmap: [['number', 'number', 'number'], 'number'],\n    FPDFImageObj_LoadJpegFile: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFImageObj_LoadJpegFileInline: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFImageObj_SetBitmap: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFImageObj_SetMatrix: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFJavaScriptAction_GetName: [['number', 'number', 'number'], 'number'],\n    FPDFJavaScriptAction_GetScript: [['number', 'number', 'number'], 'number'],\n    FPDFLink_CloseWebLinks: [['number'], null],\n    FPDFLink_CountQuadPoints: [['number'], 'number'],\n    FPDFLink_CountRects: [['number', 'number'], 'number'],\n    FPDFLink_CountWebLinks: [['number'], 'number'],\n    FPDFLink_Enumerate: [['number', 'number', 'number'], 'boolean'],\n    FPDFLink_GetAction: [['number'], 'number'],\n    FPDFLink_GetAnnot: [['number', 'number'], 'number'],\n    FPDFLink_GetAnnotRect: [['number', 'number'], 'boolean'],\n    FPDFLink_GetDest: [['number', 'number'], 'number'],\n    FPDFLink_GetLinkAtPoint: [['number', 'number', 'number'], 'number'],\n    FPDFLink_GetLinkZOrderAtPoint: [['number', 'number', 'number'], 'number'],\n    FPDFLink_GetQuadPoints: [['number', 'number', 'number'], 'boolean'],\n    FPDFLink_GetRect: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFLink_GetTextRange: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFLink_GetURL: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFLink_LoadWebLinks: [['number'], 'number'],\n    FPDFPage_CloseAnnot: [['number'], null],\n    FPDFPage_CountObjects: [['number'], 'number'],\n    FPDFPage_CreateAnnot: [['number', 'number'], 'number'],\n    FPDFPage_Delete: [['number', 'number'], null],\n    FPDFPage_Flatten: [['number', 'number'], 'number'],\n    FPDFPage_FormFieldZOrderAtPoint: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFPage_GenerateContent: [['number'], 'boolean'],\n    FPDFPage_GetAnnot: [['number', 'number'], 'number'],\n    FPDFPage_GetAnnotCount: [['number'], 'number'],\n    FPDFPage_GetAnnotIndex: [['number', 'number'], 'number'],\n    FPDFPage_GetArtBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetBleedBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetCropBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetDecodedThumbnailData: [['number', 'number', 'number'], 'number'],\n    FPDFPage_GetMediaBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetObject: [['number', 'number'], 'number'],\n    FPDFPage_GetRawThumbnailData: [['number', 'number', 'number'], 'number'],\n    FPDFPage_GetRotation: [['number'], 'number'],\n    FPDFPage_GetThumbnailAsBitmap: [['number'], 'number'],\n    FPDFPage_GetTrimBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_HasFormFieldAtPoint: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFPage_HasTransparency: [['number'], 'boolean'],\n    FPDFPage_InsertClipPath: [['number', 'number'], null],\n    FPDFPage_InsertObject: [['number', 'number'], null],\n    FPDFPage_InsertObjectAtIndex: [['number', 'number', 'number'], 'boolean'],\n    FPDFPage_New: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFPage_RemoveAnnot: [['number', 'number'], 'boolean'],\n    FPDFPage_RemoveObject: [['number', 'number'], 'boolean'],\n    FPDFPage_SetArtBox: [['number', 'number', 'number', 'number', 'number'], null],\n    FPDFPage_SetBleedBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPage_SetCropBox: [['number', 'number', 'number', 'number', 'number'], null],\n    FPDFPage_SetMediaBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPage_SetRotation: [['number', 'number'], null],\n    FPDFPage_SetTrimBox: [['number', 'number', 'number', 'number', 'number'], null],\n    FPDFPage_TransformAnnots: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPage_TransFormWithClip: [['number', 'number', 'number'], 'boolean'],\n    FPDFPageObj_AddMark: [['number', 'string'], 'number'],\n    FPDFPageObj_CountMarks: [['number'], 'number'],\n    FPDFPageObj_CreateNewPath: [['number', 'number'], 'number'],\n    FPDFPageObj_CreateNewRect: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFPageObj_CreateTextObj: [['number', 'number', 'number'], 'number'],\n    FPDFPageObj_Destroy: [['number'], null],\n    FPDFPageObj_GetBounds: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_GetClipPath: [['number'], 'number'],\n    FPDFPageObj_GetDashArray: [['number', 'number', 'number'], 'boolean'],\n    FPDFPageObj_GetDashCount: [['number'], 'number'],\n    FPDFPageObj_GetDashPhase: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetFillColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_GetIsActive: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetLineCap: [['number'], 'number'],\n    FPDFPageObj_GetLineJoin: [['number'], 'number'],\n    FPDFPageObj_GetMark: [['number', 'number'], 'number'],\n    FPDFPageObj_GetMarkedContentID: [['number'], 'number'],\n    FPDFPageObj_GetMatrix: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetRotatedBounds: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetStrokeColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_GetStrokeWidth: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetType: [['number'], 'number'],\n    FPDFPageObj_HasTransparency: [['number'], 'boolean'],\n    FPDFPageObj_NewImageObj: [['number'], 'number'],\n    FPDFPageObj_NewTextObj: [['number', 'string', 'number'], 'number'],\n    FPDFPageObj_RemoveMark: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetBlendMode: [['number', 'string'], null],\n    FPDFPageObj_SetDashArray: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFPageObj_SetDashPhase: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetFillColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_SetIsActive: [['number', 'boolean'], 'boolean'],\n    FPDFPageObj_SetLineCap: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetLineJoin: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetMatrix: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetStrokeColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_SetStrokeWidth: [['number', 'number'], 'boolean'],\n    FPDFPageObj_Transform: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPageObj_TransformClipPath: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPageObj_TransformF: [['number', 'number'], 'boolean'],\n    FPDFPageObjMark_CountParams: [['number'], 'number'],\n    FPDFPageObjMark_GetName: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFPageObjMark_GetParamBlobValue: [\n        ['number', 'string', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_GetParamIntValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFPageObjMark_GetParamKey: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_GetParamStringValue: [\n        ['number', 'string', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_GetParamValueType: [['number', 'string'], 'number'],\n    FPDFPageObjMark_RemoveParam: [['number', 'number', 'string'], 'boolean'],\n    FPDFPageObjMark_SetBlobParam: [\n        ['number', 'number', 'number', 'string', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_SetIntParam: [\n        ['number', 'number', 'number', 'string', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_SetStringParam: [\n        ['number', 'number', 'number', 'string', 'string'],\n        'boolean',\n    ],\n    FPDFPath_BezierTo: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPath_Close: [['number'], 'boolean'],\n    FPDFPath_CountSegments: [['number'], 'number'],\n    FPDFPath_GetDrawMode: [['number', 'number', 'number'], 'boolean'],\n    FPDFPath_GetPathSegment: [['number', 'number'], 'number'],\n    FPDFPath_LineTo: [['number', 'number', 'number'], 'boolean'],\n    FPDFPath_MoveTo: [['number', 'number', 'number'], 'boolean'],\n    FPDFPath_SetDrawMode: [['number', 'number', 'boolean'], 'boolean'],\n    FPDFPathSegment_GetClose: [['number'], 'boolean'],\n    FPDFPathSegment_GetPoint: [['number', 'number', 'number'], 'boolean'],\n    FPDFPathSegment_GetType: [['number'], 'number'],\n    FPDFSignatureObj_GetByteRange: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetContents: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetDocMDPPermission: [['number'], 'number'],\n    FPDFSignatureObj_GetReason: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetSubFilter: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetTime: [['number', 'number', 'number'], 'number'],\n    FPDFText_ClosePage: [['number'], null],\n    FPDFText_CountChars: [['number'], 'number'],\n    FPDFText_CountRects: [['number', 'number', 'number'], 'number'],\n    FPDFText_FindClose: [['number'], null],\n    FPDFText_FindNext: [['number'], 'boolean'],\n    FPDFText_FindPrev: [['number'], 'boolean'],\n    FPDFText_FindStart: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFText_GetBoundedText: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_GetCharAngle: [['number', 'number'], 'number'],\n    FPDFText_GetCharBox: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetCharIndexAtPos: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_GetCharIndexFromTextIndex: [['number', 'number'], 'number'],\n    FPDFText_GetCharOrigin: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFText_GetFillColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetFontInfo: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_GetFontSize: [['number', 'number'], 'number'],\n    FPDFText_GetFontWeight: [['number', 'number'], 'number'],\n    FPDFText_GetLooseCharBox: [['number', 'number', 'number'], 'boolean'],\n    FPDFText_GetMatrix: [['number', 'number', 'number'], 'boolean'],\n    FPDFText_GetRect: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetSchCount: [['number'], 'number'],\n    FPDFText_GetSchResultIndex: [['number'], 'number'],\n    FPDFText_GetStrokeColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetText: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFText_GetTextIndexFromCharIndex: [['number', 'number'], 'number'],\n    FPDFText_GetTextObject: [['number', 'number'], 'number'],\n    FPDFText_GetUnicode: [['number', 'number'], 'number'],\n    FPDFText_HasUnicodeMapError: [['number', 'number'], 'number'],\n    FPDFText_IsGenerated: [['number', 'number'], 'number'],\n    FPDFText_IsHyphen: [['number', 'number'], 'number'],\n    FPDFText_LoadCidType2Font: [\n        ['number', 'number', 'number', 'string', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_LoadFont: [\n        ['number', 'number', 'number', 'number', 'boolean'],\n        'number',\n    ],\n    FPDFText_LoadPage: [['number'], 'number'],\n    FPDFText_LoadStandardFont: [['number', 'string'], 'number'],\n    FPDFText_SetCharcodes: [['number', 'number', 'number'], 'boolean'],\n    FPDFText_SetText: [['number', 'number'], 'boolean'],\n    FPDFTextObj_GetFont: [['number'], 'number'],\n    FPDFTextObj_GetFontSize: [['number', 'number'], 'boolean'],\n    FPDFTextObj_GetRenderedBitmap: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFTextObj_GetText: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFTextObj_GetTextRenderMode: [['number'], 'number'],\n    FPDFTextObj_SetTextRenderMode: [['number', 'number'], 'boolean'],\n    PDFiumExt_CloseFileWriter: [['number'], null],\n    PDFiumExt_CloseFormFillInfo: [['number'], null],\n    PDFiumExt_ExitFormFillEnvironment: [['number'], null],\n    PDFiumExt_GetFileWriterData: [['number', 'number', 'number'], 'number'],\n    PDFiumExt_GetFileWriterSize: [['number'], 'number'],\n    PDFiumExt_Init: [[], null],\n    PDFiumExt_InitFormFillEnvironment: [['number', 'number'], 'number'],\n    PDFiumExt_OpenFileWriter: [[], 'number'],\n    PDFiumExt_OpenFormFillInfo: [[], 'number'],\n    PDFiumExt_SaveAsCopy: [['number', 'number'], 'number'],\n};\n\nconst DEFAULT_PDFIUM_WASM_URL = 'https://cdn.jsdelivr.net/npm/@kopjra/embedpdf-pdfium@2.0.0-next.1/dist/pdfium.wasm';\nasync function createWrappedModule(pdfium) {\n    const module = {\n        pdfium,\n    };\n    for (const key in functions) {\n        const ident = key;\n        const args = functions[ident][0];\n        const ret = functions[ident][1];\n        // @ts-ignore\n        module[ident] = pdfium.cwrap(key, ret, args);\n    }\n    return module;\n}\n\nasync function init(moduleOverrides) {\n    const pdfium = await createPdfium(moduleOverrides);\n    return createWrappedModule(pdfium);\n}\n\nexport { DEFAULT_PDFIUM_WASM_URL, init };\n//# sourceMappingURL=index.browser.js.map\n","import { Matrix, Rotation, Rect, Size } from '@kopjra/embedpdf-models';\nimport { PdfiumRuntimeMethods, PdfiumModule } from '@kopjra/embedpdf-pdfium';\n\n/**\n * Read string from WASM heap\n * @param wasmModule - pdfium wasm module instance\n * @param readChars - function to read chars\n * @param parseChars - function to parse chars\n * @param defaultLength - default length of chars that needs to read\n * @returns string from the heap\n *\n * @public\n */\nexport function readString(\n  wasmModule: PdfiumRuntimeMethods & PdfiumModule,\n  readChars: (buffer: number, bufferLength: number) => number,\n  parseChars: (buffer: number) => string,\n  defaultLength: number = 100,\n): string {\n  let buffer = wasmModule.wasmExports.malloc(defaultLength);\n  for (let i = 0; i < defaultLength; i++) {\n    wasmModule.HEAP8[buffer + i] = 0;\n  }\n  const actualLength = readChars(buffer, defaultLength);\n  let str: string;\n  if (actualLength > defaultLength) {\n    wasmModule.wasmExports.free(buffer);\n    buffer = wasmModule.wasmExports.malloc(actualLength);\n    for (let i = 0; i < actualLength; i++) {\n      wasmModule.HEAP8[buffer + i] = 0;\n    }\n    readChars(buffer, actualLength);\n    str = parseChars(buffer);\n  } else {\n    str = parseChars(buffer);\n  }\n  wasmModule.wasmExports.free(buffer);\n\n  return str;\n}\n/**\n * Read arraybyffer from WASM heap\n * @param wasmModule - pdfium wasm module instance\n * @param readChars - function to read chars\n * @returns arraybuffer from the heap\n *\n * @public\n */\nexport function readArrayBuffer(\n  wasmModule: PdfiumRuntimeMethods & PdfiumModule,\n  readChars: (buffer: number, bufferLength: number) => number,\n): ArrayBuffer {\n  const bufferSize = readChars(0, 0);\n\n  const bufferPtr = wasmModule.wasmExports.malloc(bufferSize);\n\n  readChars(bufferPtr, bufferSize);\n\n  const arrayBuffer = new ArrayBuffer(bufferSize);\n  const view = new DataView(arrayBuffer);\n\n  for (let i = 0; i < bufferSize; i++) {\n    view.setInt8(i, wasmModule.getValue(bufferPtr + i, 'i8'));\n  }\n\n  wasmModule.wasmExports.free(bufferPtr);\n\n  return arrayBuffer;\n}\n\nconst RESERVED_INFO_KEYS = new Set([\n  'Title',\n  'Author',\n  'Subject',\n  'Keywords',\n  'Producer',\n  'Creator',\n  'CreationDate',\n  'ModDate',\n  'Trapped',\n]);\n\nexport function isValidCustomKey(key: string): boolean {\n  // PDF Name object rules are looser than strings here, but keep it sane:\n  // - non-empty ASCII, no embedded NULs, avoid leading slash\n  if (!key || key.length > 127) return false;\n  if (RESERVED_INFO_KEYS.has(key)) return false;\n  if (key[0] === '/') return false;\n  // Keep ASCII-ish to avoid surprises; relax if you need.\n  for (let i = 0; i < key.length; i++) {\n    const c = key.charCodeAt(i);\n    if (c < 0x20 || c > 0x7e) return false;\n  }\n  return true;\n}\n\ninterface FormDrawParams {\n  startX: number;\n  startY: number;\n  formsWidth: number;\n  formsHeight: number;\n  scaleX: number;\n  scaleY: number;\n}\n\nexport function computeFormDrawParams(\n  matrix: Matrix,\n  rect: Rect,\n  pageSize: Size,\n  rotation: Rotation,\n): FormDrawParams {\n  const rectLeft = rect.origin.x;\n  const rectBottom = rect.origin.y;\n  const rectRight = rectLeft + rect.size.width;\n  const rectTop = rectBottom + rect.size.height;\n  const pageWidth = pageSize.width;\n  const pageHeight = pageSize.height;\n\n  // Extract the per-axis scale that the render matrix applies.\n  const scaleX = Math.hypot(matrix.a, matrix.b);\n  const scaleY = Math.hypot(matrix.c, matrix.d);\n  const swap = (rotation & 1) === 1;\n\n  const formsWidth = swap\n    ? Math.max(1, Math.round(pageHeight * scaleX))\n    : Math.max(1, Math.round(pageWidth * scaleX));\n  const formsHeight = swap\n    ? Math.max(1, Math.round(pageWidth * scaleY))\n    : Math.max(1, Math.round(pageHeight * scaleY));\n\n  let startX: number;\n  let startY: number;\n  switch (rotation) {\n    case Rotation.Degree0:\n      startX = -Math.round(rectLeft * scaleX);\n      startY = -Math.round(rectBottom * scaleY);\n      break;\n    case Rotation.Degree90:\n      startX = Math.round((rectTop - pageHeight) * scaleX);\n      startY = -Math.round(rectLeft * scaleY);\n      break;\n    case Rotation.Degree180:\n      startX = Math.round((rectRight - pageWidth) * scaleX);\n      startY = Math.round((rectTop - pageHeight) * scaleY);\n      break;\n    case Rotation.Degree270:\n      startX = -Math.round(rectBottom * scaleX);\n      startY = Math.round((rectRight - pageWidth) * scaleY);\n      break;\n    default:\n      startX = -Math.round(rectLeft * scaleX);\n      startY = -Math.round(rectBottom * scaleY);\n      break;\n  }\n\n  return { startX, startY, formsWidth, formsHeight, scaleX, scaleY };\n}\n","/**\n * Branded types for better type safety\n * @public\n */\n\ndeclare const PointerBrand: unique symbol;\n\nexport type WasmPointer = number & { [PointerBrand]: never };\n\n// Helper functions to create branded types\nexport const WasmPointer = (ptr: number): WasmPointer => ptr as WasmPointer;\n","import { WrappedPdfiumModule } from '@kopjra/embedpdf-pdfium';\nimport { MemoryManager } from './core/memory-manager';\nimport { WasmPointer } from './types/branded';\n\nexport interface CacheConfig {\n  /** Time-to-live for pages in milliseconds (default: 5000ms) */\n  pageTtl?: number;\n  /** Maximum number of pages to keep in cache per document (default: 50) */\n  maxPagesPerDocument?: number;\n}\n\nconst DEFAULT_CONFIG: Required<CacheConfig> = {\n  pageTtl: 5000, // 5 seconds\n  maxPagesPerDocument: 10,\n};\n\nexport class PdfCache {\n  private readonly docs = new Map<string, DocumentContext>();\n  private readonly config: Required<CacheConfig>;\n\n  constructor(\n    private readonly pdfium: WrappedPdfiumModule,\n    private readonly memoryManager: MemoryManager,\n    config: CacheConfig = {},\n  ) {\n    this.config = { ...DEFAULT_CONFIG, ...config };\n  }\n\n  /** Open (or re-use) a document */\n  setDocument(id: string, filePtr: number, docPtr: number) {\n    let ctx = this.docs.get(id);\n    if (!ctx) {\n      ctx = new DocumentContext(filePtr, docPtr, this.pdfium, this.memoryManager, this.config);\n      this.docs.set(id, ctx);\n    }\n  }\n\n  /** Retrieve the DocumentContext for a given PdfDocumentObject */\n  getContext(docId: string): DocumentContext | undefined {\n    return this.docs.get(docId);\n  }\n\n  /** Close & fully release a document and all its pages */\n  closeDocument(docId: string): boolean {\n    const ctx = this.docs.get(docId);\n    if (!ctx) return false;\n    ctx.dispose(); // tears down pages first, then FPDF_CloseDocument, free()\n    this.docs.delete(docId);\n    return true;\n  }\n\n  /** Close all documents */\n  closeAllDocuments(): void {\n    for (const ctx of this.docs.values()) {\n      ctx.dispose();\n    }\n    this.docs.clear();\n  }\n\n  /** Update cache configuration for all existing documents */\n  updateConfig(newConfig: CacheConfig): void {\n    Object.assign(this.config, newConfig);\n    // Update config for all existing document contexts\n    for (const ctx of this.docs.values()) {\n      ctx.updateConfig(this.config);\n    }\n  }\n\n  /** Get current cache statistics */\n  getCacheStats(): {\n    documents: number;\n    totalPages: number;\n    pagesByDocument: Record<string, number>;\n  } {\n    const pagesByDocument: Record<string, number> = {};\n    let totalPages = 0;\n\n    for (const [docId, ctx] of this.docs.entries()) {\n      const pageCount = ctx.getCacheSize();\n      pagesByDocument[docId] = pageCount;\n      totalPages += pageCount;\n    }\n\n    return {\n      documents: this.docs.size,\n      totalPages,\n      pagesByDocument,\n    };\n  }\n}\n\nexport class DocumentContext {\n  private readonly pageCache: PageCache;\n\n  constructor(\n    public readonly filePtr: number,\n    public readonly docPtr: number,\n    pdfium: WrappedPdfiumModule,\n    private readonly memoryManager: MemoryManager,\n    config: Required<CacheConfig>,\n  ) {\n    this.pageCache = new PageCache(pdfium, docPtr, config);\n  }\n\n  /** Main accessor for pages */\n  acquirePage(pageIdx: number): PageContext {\n    return this.pageCache.acquire(pageIdx);\n  }\n\n  /** Scoped accessor for one-off / bulk operations */\n  borrowPage<T>(pageIdx: number, fn: (ctx: PageContext) => T): T {\n    return this.pageCache.borrowPage(pageIdx, fn);\n  }\n\n  /** Update cache configuration */\n  updateConfig(config: Required<CacheConfig>): void {\n    this.pageCache.updateConfig(config);\n  }\n\n  /** Get number of pages currently in cache */\n  getCacheSize(): number {\n    return this.pageCache.size();\n  }\n\n  /** Tear down all pages + this document */\n  dispose(): void {\n    // 1️⃣ release all pages (with their TTL or immediate)\n    this.pageCache.forceReleaseAll();\n\n    // 2️⃣ close the PDFium document\n    this.pageCache.pdf.FPDF_CloseDocument(this.docPtr);\n\n    // 3️⃣ free the file handle through memory manager for proper tracking\n    this.memoryManager.free(WasmPointer(this.filePtr));\n  }\n}\n\nexport class PageCache {\n  private readonly cache = new Map<number, PageContext>();\n  private readonly accessOrder: number[] = []; // LRU tracking\n  private config: Required<CacheConfig>;\n\n  constructor(\n    public readonly pdf: WrappedPdfiumModule,\n    private readonly docPtr: number,\n    config: Required<CacheConfig>,\n  ) {\n    this.config = config;\n  }\n\n  acquire(pageIdx: number): PageContext {\n    let ctx = this.cache.get(pageIdx);\n\n    if (!ctx) {\n      // Ensure we don't exceed max cache size\n      this.evictIfNeeded();\n\n      const pagePtr = this.pdf.FPDF_LoadPage(this.docPtr, pageIdx);\n      ctx = new PageContext(this.pdf, this.docPtr, pageIdx, pagePtr, this.config.pageTtl, () => {\n        this.cache.delete(pageIdx);\n        this.removeFromAccessOrder(pageIdx);\n      });\n      this.cache.set(pageIdx, ctx);\n    }\n\n    // Update LRU order\n    this.updateAccessOrder(pageIdx);\n\n    ctx.clearExpiryTimer(); // cancel any pending teardown\n    ctx.bumpRefCount(); // bump ref‐count\n    return ctx;\n  }\n\n  /** Helper: run a function \"scoped\" to a page.\n   *    – if the page was already cached  → .release() (keeps TTL logic)\n   *    – if the page was loaded just now → .disposeImmediate() (free right away)\n   */\n  borrowPage<T>(pageIdx: number, fn: (ctx: PageContext) => T): T {\n    const existed = this.cache.has(pageIdx);\n    const ctx = this.acquire(pageIdx);\n    try {\n      return fn(ctx);\n    } finally {\n      existed ? ctx.release() : ctx.disposeImmediate();\n    }\n  }\n\n  forceReleaseAll(): void {\n    for (const ctx of this.cache.values()) {\n      ctx.disposeImmediate();\n    }\n    this.cache.clear();\n    this.accessOrder.length = 0;\n  }\n\n  /** Update cache configuration */\n  updateConfig(config: Required<CacheConfig>): void {\n    this.config = config;\n\n    // Update TTL for all existing pages\n    for (const ctx of this.cache.values()) {\n      ctx.updateTtl(config.pageTtl);\n    }\n\n    // Evict pages if new max size is smaller\n    this.evictIfNeeded();\n  }\n\n  /** Get current cache size */\n  size(): number {\n    return this.cache.size;\n  }\n\n  /** Evict least recently used pages if cache exceeds max size */\n  private evictIfNeeded(): void {\n    while (this.cache.size >= this.config.maxPagesPerDocument) {\n      const lruPageIdx = this.accessOrder[0];\n      if (lruPageIdx !== undefined) {\n        const ctx = this.cache.get(lruPageIdx);\n        if (ctx) {\n          // Only evict if not currently in use (refCount === 0)\n          if (ctx.getRefCount() === 0) {\n            ctx.disposeImmediate();\n            // onFinalDispose callback will remove from cache and accessOrder\n          } else {\n            // If the LRU page is in use, we can't evict it\n            // Move to a different strategy or break to avoid infinite loop\n            break;\n          }\n        } else {\n          // Page not in cache but in access order - clean up\n          this.removeFromAccessOrder(lruPageIdx);\n        }\n      } else {\n        break;\n      }\n    }\n  }\n\n  /** Update the access order for LRU tracking */\n  private updateAccessOrder(pageIdx: number): void {\n    // Remove from current position\n    this.removeFromAccessOrder(pageIdx);\n    // Add to end (most recently used)\n    this.accessOrder.push(pageIdx);\n  }\n\n  /** Remove a page from the access order array */\n  private removeFromAccessOrder(pageIdx: number): void {\n    const index = this.accessOrder.indexOf(pageIdx);\n    if (index > -1) {\n      this.accessOrder.splice(index, 1);\n    }\n  }\n}\n\nexport class PageContext {\n  private refCount = 0;\n  private expiryTimer?: ReturnType<typeof setTimeout>;\n  private disposed = false;\n  private ttl: number;\n\n  // lazy helpers\n  private textPagePtr?: number;\n  private formInfoPtr?: number;\n  private formHandle?: number;\n\n  constructor(\n    private readonly pdf: WrappedPdfiumModule,\n    public readonly docPtr: number,\n    public readonly pageIdx: number,\n    public readonly pagePtr: number,\n    ttl: number,\n    private readonly onFinalDispose: () => void,\n  ) {\n    this.ttl = ttl;\n  }\n\n  /** Called by PageCache.acquire() */\n  bumpRefCount() {\n    if (this.disposed) throw new Error('Context already disposed');\n    this.refCount++;\n  }\n\n  /** Get current reference count */\n  getRefCount(): number {\n    return this.refCount;\n  }\n\n  /** Called by PageCache.acquire() */\n  clearExpiryTimer() {\n    if (this.expiryTimer) {\n      clearTimeout(this.expiryTimer);\n      this.expiryTimer = undefined;\n    }\n  }\n\n  /** Update TTL configuration */\n  updateTtl(newTtl: number): void {\n    this.ttl = newTtl;\n    // If there's an active timer and ref count is 0, restart with new TTL\n    if (this.expiryTimer && this.refCount === 0) {\n      this.clearExpiryTimer();\n      this.expiryTimer = setTimeout(() => this.disposeImmediate(), this.ttl);\n    }\n  }\n\n  /** Called by PageCache.release() internally */\n  release() {\n    if (this.disposed) return;\n    this.refCount--;\n    if (this.refCount === 0) {\n      // schedule the one-and-only timer for the page\n      this.expiryTimer = setTimeout(() => this.disposeImmediate(), this.ttl);\n    }\n  }\n\n  /** Tear down _all_ sub-pointers & the page. */\n  disposeImmediate() {\n    if (this.disposed) return;\n    this.disposed = true;\n\n    // Clear any pending timer\n    this.clearExpiryTimer();\n\n    // 2️⃣ close text-page if opened\n    if (this.textPagePtr !== undefined) {\n      this.pdf.FPDFText_ClosePage(this.textPagePtr);\n    }\n\n    // 3️⃣ close form-fill if opened\n    if (this.formHandle !== undefined) {\n      this.pdf.FORM_OnBeforeClosePage(this.pagePtr, this.formHandle);\n      this.pdf.PDFiumExt_ExitFormFillEnvironment(this.formHandle);\n    }\n    if (this.formInfoPtr !== undefined) {\n      this.pdf.PDFiumExt_CloseFormFillInfo(this.formInfoPtr);\n    }\n\n    // 4️⃣ finally close the page itself\n    this.pdf.FPDF_ClosePage(this.pagePtr);\n\n    // 5️⃣ remove from the cache\n    this.onFinalDispose();\n  }\n\n  // ── public helpers ──\n\n  /** Always safe: opens (once) and returns the text-page ptr. */\n  getTextPage(): number {\n    this.ensureAlive();\n    if (this.textPagePtr === undefined) {\n      this.textPagePtr = this.pdf.FPDFText_LoadPage(this.pagePtr);\n    }\n    return this.textPagePtr;\n  }\n\n  /** Always safe: opens (once) and returns the form-fill handle. */\n  getFormHandle(): number {\n    this.ensureAlive();\n    if (this.formHandle === undefined) {\n      this.formInfoPtr = this.pdf.PDFiumExt_OpenFormFillInfo();\n      this.formHandle = this.pdf.PDFiumExt_InitFormFillEnvironment(this.docPtr, this.formInfoPtr);\n      this.pdf.FORM_OnAfterLoadPage(this.pagePtr, this.formHandle);\n    }\n    return this.formHandle;\n  }\n\n  /**\n   * Safely execute `fn` with an annotation pointer.\n   * Pointer is ALWAYS closed afterwards.\n   */\n  withAnnotation<T>(annotIdx: number, fn: (annotPtr: number) => T): T {\n    this.ensureAlive();\n    const annotPtr = this.pdf.FPDFPage_GetAnnot(this.pagePtr, annotIdx);\n    try {\n      return fn(annotPtr);\n    } finally {\n      this.pdf.FPDFPage_CloseAnnot(annotPtr);\n    }\n  }\n\n  private ensureAlive() {\n    if (this.disposed) throw new Error('PageContext already disposed');\n  }\n}\n","/**\n * System limits and safety thresholds for PDFium engine operations\n *\n * These limits are designed to prevent:\n * - Memory exhaustion\n * - Browser crashes\n * - DoS attacks\n * - WASM heap overflow\n * - Unreasonable resource usage\n *\n * @module constants/limits\n */\n\n/**\n * Memory allocation limits\n */\nexport const MEMORY_LIMITS = {\n  /** Maximum total memory that can be allocated (2GB) */\n  MAX_TOTAL_MEMORY: 2 * 1024 * 1024 * 1024,\n} as const;\n\n/**\n * All limits combined for easy access\n */\nexport const LIMITS = {\n  MEMORY: MEMORY_LIMITS,\n} as const;\n\nexport type Limits = typeof LIMITS;\n","import { WasmPointer } from '../types/branded';\nimport { LIMITS } from '../constants/limits';\nimport type { WrappedPdfiumModule } from '@kopjra/embedpdf-pdfium';\nimport { Logger } from '@kopjra/embedpdf-models';\n\nconst LOG_SOURCE = 'PDFiumEngine';\nconst LOG_CATEGORY = 'MemoryManager';\n\ninterface Allocation {\n  ptr: WasmPointer;\n  size: number;\n  timestamp: number;\n  stack?: string;\n}\n\nexport class MemoryManager {\n  private allocations = new Map<number, Allocation>();\n  private totalAllocated = 0;\n\n  constructor(\n    private pdfiumModule: WrappedPdfiumModule,\n    private logger: Logger,\n  ) {}\n\n  /**\n   * Allocate memory with tracking and validation\n   */\n  malloc(size: number): WasmPointer {\n    // Check total memory usage\n    if (this.totalAllocated + size > LIMITS.MEMORY.MAX_TOTAL_MEMORY) {\n      throw new Error(\n        `Total memory usage would exceed limit: ` +\n          `${this.totalAllocated + size} > ${LIMITS.MEMORY.MAX_TOTAL_MEMORY}`,\n      );\n    }\n\n    const ptr = this.pdfiumModule.pdfium.wasmExports.malloc(size);\n\n    if (!ptr) {\n      throw new Error(`Failed to allocate ${size} bytes`);\n    }\n\n    // Track allocation\n    const allocation: Allocation = {\n      ptr: WasmPointer(ptr),\n      size,\n      timestamp: Date.now(),\n      stack: this.logger.isEnabled('debug') ? new Error().stack : undefined,\n    };\n\n    this.allocations.set(ptr, allocation);\n    this.totalAllocated += size;\n\n    return WasmPointer(ptr);\n  }\n\n  /**\n   * Free memory with validation\n   */\n  free(ptr: WasmPointer): void {\n    const allocation = this.allocations.get(ptr);\n    if (!allocation) {\n      this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `Freeing untracked pointer: ${ptr}`);\n    } else {\n      this.totalAllocated -= allocation.size;\n      this.allocations.delete(ptr);\n    }\n\n    this.pdfiumModule.pdfium.wasmExports.free(ptr);\n  }\n\n  /**\n   * Get memory statistics\n   */\n  getStats() {\n    return {\n      totalAllocated: this.totalAllocated,\n      allocationCount: this.allocations.size,\n      allocations: this.logger.isEnabled('debug') ? Array.from(this.allocations.values()) : [],\n    };\n  }\n\n  /**\n   * Check for memory leaks\n   */\n  checkLeaks(): void {\n    if (this.allocations.size > 0) {\n      this.logger.warn(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `Potential memory leak: ${this.allocations.size} unfreed allocations`,\n      );\n\n      for (const [ptr, alloc] of this.allocations) {\n        this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `  - ${ptr}: ${alloc.size} bytes`, alloc.stack);\n      }\n    }\n  }\n}\n","import {\n  PdfActionObject,\n  PdfAnnotationObject,\n  PdfTextRectObject,\n  PdfAnnotationSubtype,\n  PdfLinkAnnoObject,\n  PdfWidgetAnnoObject,\n  PdfLinkTarget,\n  PdfZoomMode,\n  Logger,\n  NoopLogger,\n  SearchResult,\n  SearchTarget,\n  MatchFlag,\n  PdfDestinationObject,\n  PdfBookmarkObject,\n  PdfDocumentObject,\n  PdfEngine,\n  PdfPageObject,\n  PdfActionType,\n  Rotation,\n  PDF_FORM_FIELD_FLAG,\n  PDF_FORM_FIELD_TYPE,\n  PdfWidgetAnnoOption,\n  PdfFileAttachmentAnnoObject,\n  Rect,\n  Size,\n  PdfAttachmentObject,\n  PdfUnsupportedAnnoObject,\n  PdfTextAnnoObject,\n  PdfSignatureObject,\n  PdfInkAnnoObject,\n  PdfInkListObject,\n  Position,\n  PdfStampAnnoObject,\n  PdfCircleAnnoObject,\n  PdfSquareAnnoObject,\n  PdfFreeTextAnnoObject,\n  PdfCaretAnnoObject,\n  PdfSquigglyAnnoObject,\n  PdfStrikeOutAnnoObject,\n  PdfUnderlineAnnoObject,\n  PdfFile,\n  PdfSegmentObject,\n  AppearanceMode,\n  PdfImageObject,\n  PdfPageObjectType,\n  PdfPathObject,\n  PdfFormObject,\n  PdfPolygonAnnoObject,\n  PdfPolylineAnnoObject,\n  PdfLineAnnoObject,\n  PdfHighlightAnnoObject,\n  PdfStampAnnoObjectContents,\n  PdfWidgetAnnoField,\n  PdfTransformMatrix,\n  FormFieldValue,\n  PdfErrorCode,\n  PdfTaskHelper,\n  PdfPageFlattenFlag,\n  PdfPageFlattenResult,\n  PdfTask,\n  PdfFileLoader,\n  transformRect,\n  SearchAllPagesResult,\n  PdfOpenDocumentUrlOptions,\n  PdfOpenDocumentBufferOptions,\n  PdfFileUrl,\n  Task,\n  PdfErrorReason,\n  TextContext,\n  PdfGlyphObject,\n  PdfPageGeometry,\n  PdfRun,\n  toIntRect,\n  Quad,\n  PdfAnnotationState,\n  PdfAnnotationStateModel,\n  quadToRect,\n  ImageConversionTypes,\n  PageTextSlice,\n  stripPdfUnwantedMarkers,\n  rectToQuad,\n  dateToPdfDate,\n  pdfDateToDate,\n  PdfAnnotationColorType,\n  PdfAnnotationBorderStyle,\n  flagsToNames,\n  PdfAnnotationFlagName,\n  namesToFlags,\n  PdfAnnotationLineEnding,\n  LinePoints,\n  LineEndings,\n  WebColor,\n  webColorToPdfColor,\n  PdfColor,\n  pdfColorToWebColor,\n  pdfAlphaToWebOpacity,\n  webOpacityToPdfAlpha,\n  PdfStandardFont,\n  PdfTextAlignment,\n  PdfVerticalAlignment,\n  AnnotationCreateContext,\n  ignore,\n  isUuidV4,\n  uuidV4,\n  PdfAnnotationIcon,\n  PdfPageSearchProgress,\n  PdfSearchAllPagesOptions,\n  PdfRenderPageAnnotationOptions,\n  PdfRedactTextOptions,\n  PdfFlattenPageOptions,\n  PdfRenderThumbnailOptions,\n  PdfRenderPageOptions,\n  PdfAnnotationsProgress,\n  ConvertToBlobOptions,\n  buildUserToDeviceMatrix,\n  Matrix,\n  PdfMetadataObject,\n  PdfPrintOptions,\n  PdfTrappedStatus,\n  PdfStampFit,\n  PdfAddAttachmentParams,\n} from '@kopjra/embedpdf-models';\nimport { computeFormDrawParams, isValidCustomKey, readArrayBuffer, readString } from './helper';\nimport { WrappedPdfiumModule } from '@kopjra/embedpdf-pdfium';\nimport { DocumentContext, PageContext, PdfCache } from './cache';\nimport { ImageDataConverter, LazyImageData } from '../converters/types';\nimport { MemoryManager } from './core/memory-manager';\nimport { WasmPointer } from './types/branded';\n\n/**\n * Format of bitmap\n */\nexport enum BitmapFormat {\n  Bitmap_Gray = 1,\n  Bitmap_BGR = 2,\n  Bitmap_BGRx = 3,\n  Bitmap_BGRA = 4,\n}\n\n/**\n * Pdf rendering flag\n */\nexport enum RenderFlag {\n  ANNOT = 0x01, // Set if annotations are to be rendered.\n  LCD_TEXT = 0x02, // Set if using text rendering optimized for LCD display.\n  NO_NATIVETEXT = 0x04, // Don't use the native text output available on some platforms\n  GRAYSCALE = 0x08, // Grayscale output.\n  DEBUG_INFO = 0x80, // Set if you want to get some debug info. Please discuss with Foxit first if you need to collect debug info.\n  NO_CATCH = 0x100, // Set if you don't want to catch exception.\n  RENDER_LIMITEDIMAGECACHE = 0x200, // Limit image cache size.\n  RENDER_FORCEHALFTONE = 0x400, // Always use halftone for image stretching.\n  PRINTING = 0x800, // Render for printing.\n  REVERSE_BYTE_ORDER = 0x10, // Set whether render in a reverse Byte order, this flag only.\n}\n\nconst LOG_SOURCE = 'PDFiumEngine';\nconst LOG_CATEGORY = 'Engine';\n\n/**\n * Context used for searching\n */\nexport interface SearchContext {\n  /**\n   * search target\n   */\n  target: SearchTarget;\n  /**\n   * current page index\n   */\n  currPageIndex: number;\n  /**\n   * index of text in the current pdf page,  -1 means reach the end\n   */\n  startIndex: number;\n}\n\n/**\n * Error code of pdfium library\n */\nexport enum PdfiumErrorCode {\n  Success = 0,\n  Unknown = 1,\n  File = 2,\n  Format = 3,\n  Password = 4,\n  Security = 5,\n  Page = 6,\n  XFALoad = 7,\n  XFALayout = 8,\n}\n\ninterface PdfiumEngineOptions<T> {\n  logger?: Logger;\n  imageDataConverter?: ImageDataConverter<T>;\n}\n\nexport class OffscreenCanvasError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'OffscreenCanvasError';\n  }\n}\n\nexport const browserImageDataToBlobConverter: ImageDataConverter<Blob> = (\n  getImageData: LazyImageData,\n  imageType: ImageConversionTypes = 'image/webp',\n  quality?: number,\n): Promise<Blob> => {\n  // Check if we're in a browser environment\n  if (typeof OffscreenCanvas === 'undefined') {\n    return Promise.reject(\n      new OffscreenCanvasError(\n        'OffscreenCanvas is not available in this environment. ' +\n          'This converter is intended for browser use only. ' +\n          'Falling back to WASM-based image encoding.',\n      ),\n    );\n  }\n\n  const pdfImage = getImageData();\n  const imageData = new ImageData(pdfImage.data, pdfImage.width, pdfImage.height);\n  const off = new OffscreenCanvas(imageData.width, imageData.height);\n  off.getContext('2d')!.putImageData(imageData, 0, 0);\n  return off.convertToBlob({ type: imageType, quality });\n};\n\n/**\n * Pdf engine that based on pdfium wasm\n */\nexport class PdfiumEngine<T = Blob> implements PdfEngine<T> {\n  /**\n   * pdf documents that opened\n   */\n  private readonly cache: PdfCache;\n\n  /**\n   * memory manager instance\n   */\n  private readonly memoryManager: MemoryManager;\n\n  /**\n   * interval to check memory leaks\n   */\n  private memoryLeakCheckInterval: number | null = null;\n\n  /**\n   * logger instance\n   */\n  private logger: Logger;\n\n  /**\n   * function to convert ImageData to Blob\n   */\n  private readonly imageDataConverter: ImageDataConverter<T>;\n\n  /**\n   * Create an instance of PdfiumEngine\n   * @param wasmModule - pdfium wasm module\n   * @param logger - logger instance\n   * @param imageDataToBlobConverter - function to convert ImageData to Blob\n   */\n  constructor(\n    private pdfiumModule: WrappedPdfiumModule,\n    options: PdfiumEngineOptions<T> = {},\n  ) {\n    const {\n      logger = new NoopLogger(),\n      imageDataConverter = browserImageDataToBlobConverter as ImageDataConverter<T>,\n    } = options;\n\n    this.logger = logger;\n    this.imageDataConverter = imageDataConverter;\n    this.memoryManager = new MemoryManager(this.pdfiumModule, this.logger);\n    this.cache = new PdfCache(this.pdfiumModule, this.memoryManager);\n\n    if (this.logger.isEnabled('debug')) {\n      this.memoryLeakCheckInterval = setInterval(() => {\n        this.memoryManager.checkLeaks();\n      }, 10000) as unknown as number;\n    }\n  }\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.initialize}\n   *\n   * @public\n   */\n  initialize() {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'initialize');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Initialize`, 'Begin', 'General');\n    this.pdfiumModule.PDFiumExt_Init();\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Initialize`, 'End', 'General');\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.destroy}\n   *\n   * @public\n   */\n  destroy() {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'destroy');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Destroy`, 'Begin', 'General');\n    this.pdfiumModule.FPDF_DestroyLibrary();\n    if (this.memoryLeakCheckInterval) {\n      clearInterval(this.memoryLeakCheckInterval);\n      this.memoryLeakCheckInterval = null;\n    }\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Destroy`, 'End', 'General');\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /** Write a UTF-16LE (WIDESTRING) to wasm, call `fn(ptr)`, then free. */\n  private withWString<T>(value: string, fn: (ptr: number) => T): T {\n    // bytes = (len + 1) * 2\n    const length = (value.length + 1) * 2;\n    const ptr = this.memoryManager.malloc(length);\n    try {\n      // emscripten runtime exposes stringToUTF16\n      this.pdfiumModule.pdfium.stringToUTF16(value, ptr, length);\n      return fn(ptr);\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n  }\n\n  /** Write a float[] to wasm, call `fn(ptr, count)`, then free. */\n  private withFloatArray<T>(\n    values: number[] | undefined,\n    fn: (ptr: number, count: number) => T,\n  ): T {\n    const arr = values ?? [];\n    const bytes = arr.length * 4;\n    const ptr = bytes ? this.memoryManager.malloc(bytes) : WasmPointer(0);\n    try {\n      if (bytes) {\n        for (let i = 0; i < arr.length; i++) {\n          this.pdfiumModule.pdfium.setValue(ptr + i * 4, arr[i], 'float');\n        }\n      }\n      return fn(ptr, arr.length);\n    } finally {\n      if (bytes) this.memoryManager.free(ptr);\n    }\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.openDocumentUrl}\n   *\n   * @public\n   */\n  public openDocumentUrl(file: PdfFileUrl, options?: PdfOpenDocumentUrlOptions) {\n    const mode = options?.mode ?? 'auto';\n    const password = options?.password ?? '';\n    const requestOptions = options?.requestOptions;\n\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentUrl called', file.url, mode);\n\n    // We'll create a task to wrap asynchronous steps\n    const task = PdfTaskHelper.create<PdfDocumentObject>();\n\n    // Start an async procedure\n    (async () => {\n      try {\n        const fetchFullTask = await this.fetchFullAndOpen(file, password, requestOptions);\n        fetchFullTask.wait(\n          (doc) => task.resolve(doc),\n          (err) => task.reject(err.reason),\n        );\n      } catch (err) {\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'openDocumentUrl error', err);\n        task.reject({\n          code: PdfErrorCode.Unknown,\n          message: String(err),\n        });\n      }\n    })();\n\n    return task;\n  }\n\n  /**\n   * Check if the server supports range requests:\n   * Sends a HEAD request and sees if 'Accept-Ranges: bytes'.\n   */\n  private async checkRangeSupport(\n    url: string,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ): Promise<{ supportsRanges: boolean; fileLength: number; content: ArrayBuffer | null }> {\n    try {\n      this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'checkRangeSupport', url);\n\n      // First try HEAD request\n      const headResponse = await fetch(url, {\n        method: 'HEAD',\n        headers: requestOptions?.headers,\n        credentials: requestOptions?.credentials,\n      });\n      const fileLength = headResponse.headers.get('Content-Length');\n      const acceptRanges = headResponse.headers.get('Accept-Ranges');\n\n      // If server explicitly supports ranges, we're done\n      if (acceptRanges === 'bytes') {\n        return {\n          supportsRanges: true,\n          fileLength: parseInt(fileLength ?? '0'),\n          content: null,\n        };\n      }\n\n      // Test actual range request support\n      const testResponse = await fetch(url, {\n        headers: { ...requestOptions?.headers, Range: 'bytes=0-1' },\n        credentials: requestOptions?.credentials,\n      });\n\n      // If we get 200 instead of 206, server doesn't support ranges\n      // Return the full content since we'll need it anyway\n      if (testResponse.status === 200) {\n        const content = await testResponse.arrayBuffer();\n        return {\n          supportsRanges: false,\n          fileLength: parseInt(fileLength ?? '0'),\n          content: content,\n        };\n      }\n\n      // 206 Partial Content indicates range support\n      return {\n        supportsRanges: testResponse.status === 206,\n        fileLength: parseInt(fileLength ?? '0'),\n        content: null,\n      };\n    } catch (e) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'checkRangeSupport failed', e);\n      throw new Error('Failed to check range support: ' + e);\n    }\n  }\n\n  /**\n   * Fully fetch the file (using fetch) into an ArrayBuffer,\n   * then call openDocumentFromBuffer.\n   */\n  private async fetchFullAndOpen(\n    file: PdfFileUrl,\n    password: string,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'fetchFullAndOpen', file.url);\n\n    // 1. fetch entire PDF as array buffer\n    const response = await fetch(file.url, {\n      headers: requestOptions?.headers,\n      credentials: requestOptions?.credentials,\n    });\n    if (!response.ok) {\n      throw new Error(`Could not fetch PDF: ${response.statusText}`);\n    }\n    const arrayBuf = await response.arrayBuffer();\n\n    // 2. create a PdfFile object\n    const pdfFile: PdfFile = {\n      id: file.id,\n      content: arrayBuf,\n    };\n\n    // 3. call openDocumentFromBuffer (the method you already have)\n    //    that returns a PdfTask, but let's wrap it in a Promise\n    return this.openDocumentBuffer(pdfFile, { password });\n  }\n\n  /**\n   * Use your synchronous partial-loading approach:\n   * - In your snippet, it's done via `openDocumentFromLoader`.\n   * - We'll do a synchronous XHR read callback that pulls\n   *   the desired byte ranges.\n   */\n  private async openDocumentWithRangeRequest(\n    file: PdfFileUrl,\n    password: string,\n    knownFileLength?: number,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentWithRangeRequest', file.url);\n\n    // We first do a HEAD or a partial fetch to get the fileLength:\n    const fileLength =\n      knownFileLength ?? (await this.retrieveFileLength(file.url, requestOptions)).fileLength;\n\n    // 2. define the callback function used by openDocumentFromLoader\n    const callback = (offset: number, length: number) => {\n      // Perform synchronous XHR:\n      const xhr = new XMLHttpRequest();\n      xhr.open('GET', file.url, false); // note: block in the Worker\n      xhr.overrideMimeType('text/plain; charset=x-user-defined');\n\n      // Set Range header\n      xhr.setRequestHeader('Range', `bytes=${offset}-${offset + length - 1}`);\n\n      // Set custom headers if provided\n      if (requestOptions?.headers) {\n        Object.entries(requestOptions.headers).forEach(([key, value]) => {\n          xhr.setRequestHeader(key, value);\n        });\n      }\n\n      // Set credentials for cookies\n      if (requestOptions?.credentials) {\n        xhr.withCredentials = requestOptions.credentials === 'include';\n      }\n\n      xhr.send(null);\n\n      if (xhr.status === 206 || xhr.status === 200) {\n        return this.convertResponseToUint8Array(xhr.responseText);\n      }\n      throw new Error(`Range request failed with status ${xhr.status}`);\n    };\n\n    // 3. call `openDocumentFromLoader`\n    return this.openDocumentFromLoader(\n      {\n        id: file.id,\n        fileLength,\n        callback,\n      },\n      password,\n    );\n  }\n\n  /**\n   * Helper to do a HEAD request or partial GET to find file length.\n   */\n  private async retrieveFileLength(\n    url: string,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ): Promise<{ fileLength: number }> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'retrieveFileLength', url);\n\n    // We'll do a HEAD request to get Content-Length\n    const resp = await fetch(url, {\n      method: 'HEAD',\n      headers: requestOptions?.headers,\n      credentials: requestOptions?.credentials,\n    });\n    if (!resp.ok) {\n      throw new Error(`Failed HEAD request for file length: ${resp.statusText}`);\n    }\n    const lenStr = resp.headers.get('Content-Length') || '0';\n    const fileLength = parseInt(lenStr, 10) || 0;\n    if (!fileLength) {\n      throw new Error(`Content-Length not found or zero.`);\n    }\n    return { fileLength };\n  }\n\n  /**\n   * Convert response text (x-user-defined) to a Uint8Array\n   * for partial data.\n   */\n  private convertResponseToUint8Array(text: string): Uint8Array {\n    const array = new Uint8Array(text.length);\n    for (let i = 0; i < text.length; i++) {\n      // & 0xff ensures we only get the lower 8 bits\n      array[i] = text.charCodeAt(i) & 0xff;\n    }\n    return array;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.openDocument}\n   *\n   * @public\n   */\n  openDocumentBuffer(file: PdfFile, options?: PdfOpenDocumentBufferOptions) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentBuffer', file, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'Begin', file.id);\n    const array = new Uint8Array(file.content);\n    const length = array.length;\n    const filePtr = this.memoryManager.malloc(length);\n    this.pdfiumModule.pdfium.HEAPU8.set(array, filePtr);\n\n    const docPtr = this.pdfiumModule.FPDF_LoadMemDocument(filePtr, length, options?.password ?? '');\n\n    if (!docPtr) {\n      const lastError = this.pdfiumModule.FPDF_GetLastError();\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, `FPDF_LoadMemDocument failed with ${lastError}`);\n      this.memoryManager.free(filePtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'End', file.id);\n\n      return PdfTaskHelper.reject<PdfDocumentObject>({\n        code: lastError,\n        message: `FPDF_LoadMemDocument failed`,\n      });\n    }\n\n    const pageCount = this.pdfiumModule.FPDF_GetPageCount(docPtr);\n\n    const pages: PdfPageObject[] = [];\n    const sizePtr = this.memoryManager.malloc(8);\n    for (let index = 0; index < pageCount; index++) {\n      const result = this.pdfiumModule.FPDF_GetPageSizeByIndexF(docPtr, index, sizePtr);\n      if (!result) {\n        const lastError = this.pdfiumModule.FPDF_GetLastError();\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDF_GetPageSizeByIndexF failed with ${lastError}`,\n        );\n        this.memoryManager.free(sizePtr);\n        this.pdfiumModule.FPDF_CloseDocument(docPtr);\n        this.memoryManager.free(filePtr);\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'End', file.id);\n        return PdfTaskHelper.reject<PdfDocumentObject>({\n          code: lastError,\n          message: `FPDF_GetPageSizeByIndexF failed`,\n        });\n      }\n\n      const rotation = this.pdfiumModule.EPDF_GetPageRotationByIndex(docPtr, index) as Rotation;\n\n      const page = {\n        index,\n        size: {\n          width: this.pdfiumModule.pdfium.getValue(sizePtr, 'float'),\n          height: this.pdfiumModule.pdfium.getValue(sizePtr + 4, 'float'),\n        },\n        rotation,\n      };\n\n      pages.push(page);\n    }\n    this.memoryManager.free(sizePtr);\n\n    const pdfDoc: PdfDocumentObject = {\n      id: file.id,\n      pageCount,\n      pages,\n    };\n\n    this.cache.setDocument(file.id, filePtr, docPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'End', file.id);\n\n    return PdfTaskHelper.resolve(pdfDoc);\n  }\n\n  openDocumentFromLoader(fileLoader: PdfFileLoader, password: string = '') {\n    const { fileLength, callback, ...file } = fileLoader;\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentFromLoader', file, password);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'Begin', file.id);\n\n    const readBlock = (\n      _pThis: number, // Pointer to the FPDF_FILEACCESS structure\n      offset: number, // Pointer to a buffer to receive the data\n      pBuf: number, // Offset position from the beginning of the file\n      length: number, // Number of bytes to read\n    ): number => {\n      try {\n        this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'readBlock', offset, length, pBuf);\n\n        if (offset < 0 || offset >= fileLength) {\n          this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'Offset out of bounds:', offset);\n          return 0;\n        }\n\n        // Get data chunk using the callback\n        const data = callback(offset, length);\n\n        // Copy the data to PDFium's buffer\n        const dest = new Uint8Array(this.pdfiumModule.pdfium.HEAPU8.buffer, pBuf, data.length);\n        dest.set(data);\n\n        return data.length;\n      } catch (error) {\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'ReadBlock error:', error);\n        return 0;\n      }\n    };\n\n    const callbackPtr = this.pdfiumModule.pdfium.addFunction(readBlock, 'iiiii');\n\n    // Create FPDF_FILEACCESS struct\n    const structSize = 12;\n    const fileAccessPtr = this.memoryManager.malloc(structSize);\n\n    // Set up struct fields\n    this.pdfiumModule.pdfium.setValue(fileAccessPtr, fileLength, 'i32');\n    this.pdfiumModule.pdfium.setValue(fileAccessPtr + 4, callbackPtr, 'i32');\n    this.pdfiumModule.pdfium.setValue(fileAccessPtr + 8, 0, 'i32');\n\n    // Load document\n    const docPtr = this.pdfiumModule.FPDF_LoadCustomDocument(fileAccessPtr, password);\n\n    if (!docPtr) {\n      const lastError = this.pdfiumModule.FPDF_GetLastError();\n      this.logger.error(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `FPDF_LoadCustomDocument failed with ${lastError}`,\n      );\n      this.memoryManager.free(fileAccessPtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'End', file.id);\n\n      return PdfTaskHelper.reject<PdfDocumentObject>({\n        code: lastError,\n        message: `FPDF_LoadCustomDocument failed`,\n      });\n    }\n\n    const pageCount = this.pdfiumModule.FPDF_GetPageCount(docPtr);\n\n    const pages: PdfPageObject[] = [];\n    const sizePtr = this.memoryManager.malloc(8);\n    for (let index = 0; index < pageCount; index++) {\n      const result = this.pdfiumModule.FPDF_GetPageSizeByIndexF(docPtr, index, sizePtr);\n      if (!result) {\n        const lastError = this.pdfiumModule.FPDF_GetLastError();\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDF_GetPageSizeByIndexF failed with ${lastError}`,\n        );\n        this.memoryManager.free(sizePtr);\n        this.pdfiumModule.FPDF_CloseDocument(docPtr);\n        this.memoryManager.free(fileAccessPtr);\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'End', file.id);\n        return PdfTaskHelper.reject<PdfDocumentObject>({\n          code: lastError,\n          message: `FPDF_GetPageSizeByIndexF failed`,\n        });\n      }\n\n      const rotation = this.pdfiumModule.EPDF_GetPageRotationByIndex(docPtr, index) as Rotation;\n\n      const page = {\n        index,\n        size: {\n          width: this.pdfiumModule.pdfium.getValue(sizePtr, 'float'),\n          height: this.pdfiumModule.pdfium.getValue(sizePtr + 4, 'float'),\n        },\n        rotation,\n      };\n\n      pages.push(page);\n    }\n    this.memoryManager.free(sizePtr);\n\n    const pdfDoc: PdfDocumentObject = {\n      id: file.id,\n      pageCount,\n      pages,\n    };\n    this.cache.setDocument(file.id, fileAccessPtr, docPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'End', file.id);\n\n    return PdfTaskHelper.resolve(pdfDoc);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getMetadata}\n   *\n   * @public\n   */\n  getMetadata(doc: PdfDocumentObject): PdfTask<PdfMetadataObject, PdfErrorReason> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getMetadata', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetMetadata`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetMetadata`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const creationRaw = this.readMetaText(ctx.docPtr, 'CreationDate');\n    const modRaw = this.readMetaText(ctx.docPtr, 'ModDate');\n\n    const metadata: PdfMetadataObject = {\n      title: this.readMetaText(ctx.docPtr, 'Title'),\n      author: this.readMetaText(ctx.docPtr, 'Author'),\n      subject: this.readMetaText(ctx.docPtr, 'Subject'),\n      keywords: this.readMetaText(ctx.docPtr, 'Keywords'),\n      producer: this.readMetaText(ctx.docPtr, 'Producer'),\n      creator: this.readMetaText(ctx.docPtr, 'Creator'),\n      creationDate: creationRaw ? (pdfDateToDate(creationRaw) ?? null) : null,\n      modificationDate: modRaw ? (pdfDateToDate(modRaw) ?? null) : null,\n      trapped: this.getMetaTrapped(ctx.docPtr),\n      custom: this.readAllMeta(ctx.docPtr, true),\n    };\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetMetadata`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(metadata);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.setMetadata}\n   *\n   * @public\n   */\n  setMetadata(doc: PdfDocumentObject, meta: Partial<PdfMetadataObject>) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setMetadata', doc, meta);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SetMetadata', 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SetMetadata', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // Field -> PDF Info key\n    const strMap: Array<[keyof PdfMetadataObject, string]> = [\n      ['title', 'Title'],\n      ['author', 'Author'],\n      ['subject', 'Subject'],\n      ['keywords', 'Keywords'],\n      ['producer', 'Producer'],\n      ['creator', 'Creator'],\n    ];\n\n    let ok = true;\n\n    // Write string fields (string|null|undefined)\n    for (const [field, key] of strMap) {\n      const v = meta[field];\n      if (v === undefined) continue;\n      const s = v === null ? null : (v as string);\n      if (!this.setMetaText(ctx.docPtr, key, s)) ok = false;\n    }\n\n    // Write date fields (Date|null|undefined)\n    const writeDate = (\n      field: 'creationDate' | 'modificationDate',\n      key: 'CreationDate' | 'ModDate',\n    ) => {\n      const v = meta[field];\n      if (v === undefined) return;\n      if (v === null) {\n        if (!this.setMetaText(ctx.docPtr, key, null)) ok = false;\n        return;\n      }\n      const d = v as Date;\n      const raw = dateToPdfDate(d);\n      if (!this.setMetaText(ctx.docPtr, key, raw)) ok = false;\n    };\n\n    writeDate('creationDate', 'CreationDate');\n    writeDate('modificationDate', 'ModDate');\n\n    if (meta.trapped !== undefined) {\n      if (!this.setMetaTrapped(ctx.docPtr, meta.trapped ?? null)) ok = false;\n    }\n\n    if (meta.custom !== undefined) {\n      for (const [key, value] of Object.entries(meta.custom)) {\n        if (!isValidCustomKey(key)) {\n          this.logger.warn(LOG_SOURCE, LOG_CATEGORY, 'Invalid custom metadata key skipped', key);\n          continue;\n        }\n        if (!this.setMetaText(ctx.docPtr, key, value ?? null)) ok = false;\n      }\n    }\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SetMetadata', 'End', doc.id);\n\n    return ok\n      ? PdfTaskHelper.resolve(true)\n      : PdfTaskHelper.reject({\n          code: PdfErrorCode.Unknown,\n          message: 'one or more metadata fields could not be written',\n        });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getDocPermissions}\n   *\n   * @public\n   */\n  getDocPermissions(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocPermissions', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocPermissions`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocPermissions`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const permissions = this.pdfiumModule.FPDF_GetDocPermissions(ctx.docPtr);\n\n    return PdfTaskHelper.resolve(permissions);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getDocUserPermissions}\n   *\n   * @public\n   */\n  getDocUserPermissions(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocUserPermissions', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocUserPermissions`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocUserPermissions`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const permissions = this.pdfiumModule.FPDF_GetDocUserPermissions(ctx.docPtr);\n\n    return PdfTaskHelper.resolve(permissions);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getSignatures}\n   *\n   * @public\n   */\n  getSignatures(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getSignatures', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetSignatures`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetSignatures`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const signatures: PdfSignatureObject[] = [];\n\n    const count = this.pdfiumModule.FPDF_GetSignatureCount(ctx.docPtr);\n    for (let i = 0; i < count; i++) {\n      const signatureObjPtr = this.pdfiumModule.FPDF_GetSignatureObject(ctx.docPtr, i);\n\n      const contents = readArrayBuffer(this.pdfiumModule.pdfium, (buffer, bufferSize) => {\n        return this.pdfiumModule.FPDFSignatureObj_GetContents(signatureObjPtr, buffer, bufferSize);\n      });\n\n      const byteRange = readArrayBuffer(this.pdfiumModule.pdfium, (buffer, bufferSize) => {\n        return (\n          this.pdfiumModule.FPDFSignatureObj_GetByteRange(signatureObjPtr, buffer, bufferSize) * 4\n        );\n      });\n\n      const subFilter = readArrayBuffer(this.pdfiumModule.pdfium, (buffer, bufferSize) => {\n        return this.pdfiumModule.FPDFSignatureObj_GetSubFilter(signatureObjPtr, buffer, bufferSize);\n      });\n\n      const reason = readString(\n        this.pdfiumModule.pdfium,\n        (buffer, bufferLength) => {\n          return this.pdfiumModule.FPDFSignatureObj_GetReason(\n            signatureObjPtr,\n            buffer,\n            bufferLength,\n          );\n        },\n        this.pdfiumModule.pdfium.UTF16ToString,\n      );\n\n      const time = readString(\n        this.pdfiumModule.pdfium,\n        (buffer, bufferLength) => {\n          return this.pdfiumModule.FPDFSignatureObj_GetTime(signatureObjPtr, buffer, bufferLength);\n        },\n        this.pdfiumModule.pdfium.UTF8ToString,\n      );\n\n      const docMDP = this.pdfiumModule.FPDFSignatureObj_GetDocMDPPermission(signatureObjPtr);\n\n      signatures.push({\n        contents,\n        byteRange,\n        subFilter,\n        reason,\n        time,\n        docMDP,\n      });\n    }\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetSignatures`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(signatures);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getBookmarks}\n   *\n   * @public\n   */\n  getBookmarks(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getBookmarks', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetBookmarks`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const bookmarks = this.readPdfBookmarks(ctx.docPtr, 0);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetBookmarks`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve({\n      bookmarks,\n    });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.setBookmarks}\n   *\n   * @public\n   */\n  setBookmarks(doc: PdfDocumentObject, list: PdfBookmarkObject[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setBookmarks', doc, list);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // Clear any existing outlines\n    if (!this.pdfiumModule.EPDFBookmark_Clear(ctx.docPtr)) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'failed to clear existing bookmarks',\n      });\n    }\n\n    // Recursive builder\n    const build = (parentPtr: number, items: PdfBookmarkObject[]): boolean => {\n      let prevChild = 0;\n      for (const item of items) {\n        // Create\n        const bmPtr = this.withWString(item.title ?? '', (wptr) =>\n          this.pdfiumModule.EPDFBookmark_AppendChild(ctx.docPtr, parentPtr, wptr),\n        );\n        if (!bmPtr) return false;\n\n        // Target (optional)\n        if (item.target) {\n          const ok = this.applyBookmarkTarget(ctx.docPtr, bmPtr, item.target);\n          if (!ok) return false;\n        }\n\n        // Children\n        if (item.children?.length) {\n          const ok = build(bmPtr, item.children);\n          if (!ok) return false;\n        }\n\n        prevChild = bmPtr;\n      }\n      return true;\n    };\n\n    const ok = build(/*top-level*/ 0, list);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'End', doc.id);\n\n    if (!ok) {\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'failed to build bookmark tree',\n      });\n    }\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.deleteBookmarks}\n   *\n   * @public\n   */\n  deleteBookmarks(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'deleteBookmarks', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteBookmarks`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const ok = this.pdfiumModule.EPDFBookmark_Clear(ctx.docPtr);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteBookmarks`, 'End', doc.id);\n\n    return ok\n      ? PdfTaskHelper.resolve(true)\n      : PdfTaskHelper.reject({\n          code: PdfErrorCode.Unknown,\n          message: 'failed to clear bookmarks',\n        });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderPage}\n   *\n   * @public\n   */\n  renderPage(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    options?: PdfRenderPageOptions,\n  ): PdfTask<T> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPage', doc, page, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderPage`, 'Begin', `${doc.id}-${page.index}`);\n\n    const rect = { origin: { x: 0, y: 0 }, size: page.size };\n    const task = this.renderRectEncoded(doc, page, rect, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderPage`, 'End', `${doc.id}-${page.index}`);\n\n    return task;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderPageRect}\n   *\n   * @public\n   */\n  renderPageRect(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    rect: Rect,\n    options?: PdfRenderPageOptions,\n  ): PdfTask<T> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPageRect', doc, page, rect, options);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RenderPageRect`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const task = this.renderRectEncoded(doc, page, rect, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderPageRect`, 'End', `${doc.id}-${page.index}`);\n\n    return task;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getAllAnnotations}\n   *\n   * @public\n   */\n  getAllAnnotations(\n    doc: PdfDocumentObject,\n  ): PdfTask<Record<number, PdfAnnotationObject[]>, PdfAnnotationsProgress> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAllAnnotations-with-progress', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'Begin', doc.id);\n\n    /* 1 ── create an async task wrapper ─────────────────────────────── */\n    const task = PdfTaskHelper.create<\n      Record<number, PdfAnnotationObject[]>,\n      PdfAnnotationsProgress\n    >();\n\n    let cancelled = false;\n    task.wait(ignore, (err) => {\n      if (err.type === 'abort') cancelled = true;\n    });\n\n    /* 2 ── sanity-check: document must be open ──────────────────────── */\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'End', doc.id);\n      task.reject({ code: PdfErrorCode.DocNotOpen, message: 'document does not open' });\n      return task;\n    }\n\n    /* 3 ── chunked walk so we yield less often, but still breathe ───── */\n    const CHUNK_SIZE = 100; // ← tweak here\n    const out: Record<number, PdfAnnotationObject[]> = {};\n\n    const processChunk = (startIdx: number): void => {\n      if (cancelled) return;\n\n      const endIdx = Math.min(startIdx + CHUNK_SIZE, doc.pageCount);\n      for (let pageIdx = startIdx; pageIdx < endIdx && !cancelled; ++pageIdx) {\n        this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'Begin', doc.id, pageIdx);\n\n        /* read this page’s annotations */\n        const annots = this.readPageAnnotationsRaw(ctx, doc.pages[pageIdx]);\n        out[pageIdx] = annots;\n\n        this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'End', doc.id, pageIdx);\n        task.progress({ page: pageIdx, annotations: annots });\n      }\n\n      /* all done? */\n      if (cancelled) return;\n      if (endIdx >= doc.pageCount) {\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'End', doc.id);\n        task.resolve(out);\n        return;\n      }\n\n      /* let the browser breathe, then continue with next chunk */\n      setTimeout(() => processChunk(endIdx), 0);\n    };\n\n    /* kick-off */\n    processChunk(0);\n    return task;\n  }\n\n  private readAllAnnotations(\n    doc: PdfDocumentObject,\n    ctx: DocumentContext,\n  ): Record<number, PdfAnnotationObject[]> {\n    const annotationsByPage: Record<number, PdfAnnotationObject[]> = {};\n\n    for (let i = 0; i < doc.pageCount; i++) {\n      const pageAnnotations = this.readPageAnnotations(ctx, doc.pages[i]);\n      annotationsByPage[i] = pageAnnotations;\n    }\n\n    return annotationsByPage;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getPageAnnotations}\n   *\n   * @public\n   */\n  getPageAnnotations(doc: PdfDocumentObject, page: PdfPageObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageAnnotations', doc, page);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageAnnotations`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `GetPageAnnotations`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const annotations = this.readPageAnnotations(ctx, page);\n\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageAnnotations`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n\n    this.logger.debug(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageAnnotations`,\n      `${doc.id}-${page.index}`,\n      annotations,\n    );\n\n    return PdfTaskHelper.resolve(annotations);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.createPageAnnotation}\n   *\n   * @public\n   */\n  createPageAnnotation<A extends PdfAnnotationObject>(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: A,\n    context?: AnnotationCreateContext<A>,\n  ): PdfTask<string> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'createPageAnnotation', doc, page, annotation);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `CreatePageAnnotation`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const annotationPtr = this.pdfiumModule.EPDFPage_CreateAnnot(pageCtx.pagePtr, annotation.type);\n    if (!annotationPtr) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      pageCtx.release();\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateAnnot,\n        message: 'can not create annotation with specified type',\n      });\n    }\n\n    if (!isUuidV4(annotation.id)) {\n      annotation.id = uuidV4();\n    }\n\n    if (!this.setAnnotString(annotationPtr, 'NM', annotation.id)) {\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n      pageCtx.release();\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotString,\n        message: 'can not set the name of the annotation',\n      });\n    }\n\n    if (!this.setPageAnnoRect(page, annotationPtr, annotation.rect)) {\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotRect,\n        message: 'can not set the rect of the annotation',\n      });\n    }\n\n    let isSucceed = false;\n    switch (annotation.type) {\n      case PdfAnnotationSubtype.INK:\n        isSucceed = this.addInkStroke(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.STAMP:\n        isSucceed = this.addStampContent(\n          ctx.docPtr,\n          page,\n          pageCtx.pagePtr,\n          annotationPtr,\n          annotation,\n          context?.imageData,\n        );\n        break;\n      case PdfAnnotationSubtype.TEXT:\n        isSucceed = this.addTextContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.FREETEXT:\n        isSucceed = this.addFreeTextContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.LINE:\n        isSucceed = this.addLineContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.POLYLINE:\n      case PdfAnnotationSubtype.POLYGON:\n        isSucceed = this.addPolyContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.CIRCLE:\n      case PdfAnnotationSubtype.SQUARE:\n        isSucceed = this.addShapeContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.UNDERLINE:\n      case PdfAnnotationSubtype.STRIKEOUT:\n      case PdfAnnotationSubtype.SQUIGGLY:\n      case PdfAnnotationSubtype.HIGHLIGHT:\n        isSucceed = this.addTextMarkupContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n    }\n\n    if (!isSucceed) {\n      this.pdfiumModule.FPDFPage_RemoveAnnot(pageCtx.pagePtr, annotationPtr);\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotContent,\n        message: 'can not add content of the annotation',\n      });\n    }\n\n    if (annotation.blendMode !== undefined) {\n      this.pdfiumModule.EPDFAnnot_GenerateAppearanceWithBlend(annotationPtr, annotation.blendMode);\n    } else {\n      this.pdfiumModule.EPDFAnnot_GenerateAppearance(annotationPtr);\n    }\n\n    this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n\n    this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n    pageCtx.release();\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `CreatePageAnnotation`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n\n    return PdfTaskHelper.resolve<string>(annotation.id);\n  }\n\n  /**\n   * Update an existing page annotation in-place\n   *\n   *  • Locates the annot by page-local index (`annotation.id`)\n   *  • Re-writes its /Rect and type-specific payload\n   *  • Calls FPDFPage_GenerateContent so the new appearance is rendered\n   *\n   * @returns PdfTask<boolean>  –  true on success\n   */\n  updatePageAnnotation(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfAnnotationObject,\n  ): PdfTask<boolean> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'updatePageAnnotation', doc, page, annotation);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      'UpdatePageAnnotation',\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'UpdatePageAnnotation',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const annotPtr = this.getAnnotationByName(pageCtx.pagePtr, annotation.id);\n    if (!annotPtr) {\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'UpdatePageAnnotation',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({ code: PdfErrorCode.NotFound, message: 'annotation not found' });\n    }\n\n    /* 1 ── (re)set bounding-box ────────────────────────────────────────────── */\n    if (!this.setPageAnnoRect(page, annotPtr, annotation.rect)) {\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'UpdatePageAnnotation',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotRect,\n        message: 'failed to move annotation',\n      });\n    }\n\n    /* 2 ── wipe previous payload and rebuild fresh one ─────────────────────── */\n    let ok = false;\n    switch (annotation.type) {\n      /* ── Ink ─────────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.INK: {\n        /* clear every existing stroke first */\n        if (!this.pdfiumModule.FPDFAnnot_RemoveInkList(annotPtr)) break;\n        ok = this.addInkStroke(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Stamp ───────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.STAMP: {\n        ok = this.addStampContent(ctx.docPtr, page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      case PdfAnnotationSubtype.TEXT: {\n        ok = this.addTextContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Free text ────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.FREETEXT: {\n        ok = this.addFreeTextContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Shape ───────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.CIRCLE:\n      case PdfAnnotationSubtype.SQUARE: {\n        ok = this.addShapeContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Line ─────────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.LINE: {\n        ok = this.addLineContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Polygon / Polyline ───────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.POLYGON:\n      case PdfAnnotationSubtype.POLYLINE: {\n        ok = this.addPolyContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Text-markup family ──────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.HIGHLIGHT:\n      case PdfAnnotationSubtype.UNDERLINE:\n      case PdfAnnotationSubtype.STRIKEOUT:\n      case PdfAnnotationSubtype.SQUIGGLY: {\n        /* replace quad-points / colour / strings in one go */\n        ok = this.addTextMarkupContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Unsupported edits – fall through to error ───────────────────────── */\n      default:\n        ok = false;\n    }\n\n    /* 3 ── regenerate appearance if payload was changed ───────────────────── */\n    if (ok) {\n      if (annotation.blendMode !== undefined) {\n        this.pdfiumModule.EPDFAnnot_GenerateAppearanceWithBlend(annotPtr, annotation.blendMode);\n      } else {\n        this.pdfiumModule.EPDFAnnot_GenerateAppearance(annotPtr);\n      }\n      this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n    }\n\n    /* 4 ── tidy-up native handles ──────────────────────────────────────────── */\n    this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n    pageCtx.release();\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      'UpdatePageAnnotation',\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n\n    return ok\n      ? PdfTaskHelper.resolve<boolean>(true)\n      : PdfTaskHelper.reject<boolean>({\n          code: PdfErrorCode.CantSetAnnotContent,\n          message: 'failed to update annotation',\n        });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.removePageAnnotation}\n   *\n   * @public\n   */\n  removePageAnnotation(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfAnnotationObject,\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'removePageAnnotation', doc, page, annotation);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RemovePageAnnotation`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RemovePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    let result = false;\n    result = this.removeAnnotationByName(pageCtx.pagePtr, annotation.id);\n    if (!result) {\n      this.logger.error(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `FPDFPage_RemoveAnnot Failed`,\n        `${doc.id}-${page.index}`,\n      );\n    } else {\n      result = this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n      if (!result) {\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDFPage_GenerateContent Failed`,\n          `${doc.id}-${page.index}`,\n        );\n      }\n    }\n\n    pageCtx.release();\n\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RemovePageAnnotation`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n    return PdfTaskHelper.resolve(result);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getPageTextRects}\n   *\n   * @public\n   */\n  getPageTextRects(doc: PdfDocumentObject, page: PdfPageObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageTextRects', doc, page);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageTextRects`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `GetPageTextRects`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const textPagePtr = this.pdfiumModule.FPDFText_LoadPage(pageCtx.pagePtr);\n\n    const textRects = this.readPageTextRects(page, pageCtx.docPtr, pageCtx.pagePtr, textPagePtr);\n\n    this.pdfiumModule.FPDFText_ClosePage(textPagePtr);\n    pageCtx.release();\n\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageTextRects`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n    return PdfTaskHelper.resolve(textRects);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderThumbnail}\n   *\n   * @public\n   */\n  renderThumbnail(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    options?: PdfRenderThumbnailOptions,\n  ): PdfTask<T> {\n    const { scaleFactor = 1, ...rest } = options ?? {};\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderThumbnail', doc, page, options);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RenderThumbnail`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderThumbnail`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const result = this.renderPage(doc, page, {\n      scaleFactor: Math.max(scaleFactor, 0.5),\n      ...rest,\n    });\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderThumbnail`, 'End', `${doc.id}-${page.index}`);\n\n    return result;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getAttachments}\n   *\n   * @public\n   */\n  getAttachments(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAttachments', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetAttachments`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetAttachments`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const attachments: PdfAttachmentObject[] = [];\n\n    const count = this.pdfiumModule.FPDFDoc_GetAttachmentCount(ctx.docPtr);\n    for (let i = 0; i < count; i++) {\n      const attachment = this.readPdfAttachment(ctx.docPtr, i);\n      attachments.push(attachment);\n    }\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetAttachments`, 'End', doc.id);\n    return PdfTaskHelper.resolve(attachments);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.addAttachment}\n   *\n   * @public\n   */\n  addAttachment(doc: PdfDocumentObject, params: PdfAddAttachmentParams): PdfTask<boolean> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'addAttachment', doc, params?.name);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const { name, description, mimeType, data } = params ?? {};\n    if (!name) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.NotFound,\n        message: 'attachment name is required',\n      });\n    }\n    if (!data || (data instanceof Uint8Array ? data.byteLength === 0 : data.byteLength === 0)) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.NotFound,\n        message: 'attachment data is empty',\n      });\n    }\n\n    // 1) Create the attachment handle (also inserts into the EmbeddedFiles name tree).\n    const attachmentPtr = this.withWString(name, (wNamePtr) =>\n      this.pdfiumModule.FPDFDoc_AddAttachment(ctx.docPtr, wNamePtr),\n    );\n\n    if (!attachmentPtr) {\n      // Most likely: duplicate name in the name tree.\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: `An attachment named \"${name}\" already exists`,\n      });\n    }\n\n    this.withWString(description, (wDescriptionPtr) =>\n      this.pdfiumModule.EPDFAttachment_SetDescription(attachmentPtr, wDescriptionPtr),\n    );\n\n    this.pdfiumModule.EPDFAttachment_SetSubtype(attachmentPtr, mimeType);\n\n    // 3) Copy data into WASM memory and call SetFile (this stores bytes and fills Size/CreationDate/CheckSum)\n    const u8 = data instanceof Uint8Array ? data : new Uint8Array(data);\n    const len = u8.byteLength;\n\n    const contentPtr = this.memoryManager.malloc(len);\n    try {\n      this.pdfiumModule.pdfium.HEAPU8.set(u8, contentPtr);\n      const ok = this.pdfiumModule.FPDFAttachment_SetFile(\n        attachmentPtr,\n        ctx.docPtr,\n        contentPtr,\n        len,\n      );\n      if (!ok) {\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n        return PdfTaskHelper.reject({\n          code: PdfErrorCode.Unknown,\n          message: 'failed to write attachment bytes',\n        });\n      }\n    } finally {\n      this.memoryManager.free(contentPtr);\n    }\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n    return PdfTaskHelper.resolve<boolean>(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.removeAttachment}\n   *\n   * @public\n   */\n  removeAttachment(doc: PdfDocumentObject, attachment: PdfAttachmentObject): PdfTask<boolean> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'deleteAttachment', doc, attachment);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const count = this.pdfiumModule.FPDFDoc_GetAttachmentCount(ctx.docPtr);\n    if (attachment.index < 0 || attachment.index >= count) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: `attachment index ${attachment.index} out of range`,\n      });\n    }\n\n    const ok = this.pdfiumModule.FPDFDoc_DeleteAttachment(ctx.docPtr, attachment.index);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'End', doc.id);\n\n    if (!ok) {\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'failed to delete attachment',\n      });\n    }\n    return PdfTaskHelper.resolve<boolean>(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.readAttachmentContent}\n   *\n   * @public\n   */\n  readAttachmentContent(doc: PdfDocumentObject, attachment: PdfAttachmentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'readAttachmentContent', doc, attachment);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const attachmentPtr = this.pdfiumModule.FPDFDoc_GetAttachment(ctx.docPtr, attachment.index);\n    const sizePtr = this.memoryManager.malloc(4);\n    if (!this.pdfiumModule.FPDFAttachment_GetFile(attachmentPtr, 0, 0, sizePtr)) {\n      this.memoryManager.free(sizePtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantReadAttachmentSize,\n        message: 'can not read attachment size',\n      });\n    }\n    const size = this.pdfiumModule.pdfium.getValue(sizePtr, 'i32') >>> 0;\n\n    const contentPtr = this.memoryManager.malloc(size);\n    if (!this.pdfiumModule.FPDFAttachment_GetFile(attachmentPtr, contentPtr, size, sizePtr)) {\n      this.memoryManager.free(sizePtr);\n      this.memoryManager.free(contentPtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantReadAttachmentContent,\n        message: 'can not read attachment content',\n      });\n    }\n\n    const buffer = new ArrayBuffer(size);\n    const view = new DataView(buffer);\n    for (let i = 0; i < size; i++) {\n      view.setInt8(i, this.pdfiumModule.pdfium.getValue(contentPtr + i, 'i8'));\n    }\n\n    this.memoryManager.free(sizePtr);\n    this.memoryManager.free(contentPtr);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(buffer);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.setFormFieldValue}\n   *\n   * @public\n   */\n  setFormFieldValue(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfWidgetAnnoObject,\n    value: FormFieldValue,\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'SetFormFieldValue', doc, annotation, value);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `SetFormFieldValue`,\n      'Begin',\n      `${doc.id}-${annotation.id}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'SetFormFieldValue', 'document is not opened');\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `SetFormFieldValue`,\n        'End',\n        `${doc.id}-${annotation.id}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const formFillInfoPtr = this.pdfiumModule.PDFiumExt_OpenFormFillInfo();\n    const formHandle = this.pdfiumModule.PDFiumExt_InitFormFillEnvironment(\n      ctx.docPtr,\n      formFillInfoPtr,\n    );\n\n    const pageCtx = ctx.acquirePage(page.index);\n\n    this.pdfiumModule.FORM_OnAfterLoadPage(pageCtx.pagePtr, formHandle);\n\n    const annotationPtr = this.getAnnotationByName(pageCtx.pagePtr, annotation.id);\n\n    if (!annotationPtr) {\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'SetFormFieldValue',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({ code: PdfErrorCode.NotFound, message: 'annotation not found' });\n    }\n\n    if (!this.pdfiumModule.FORM_SetFocusedAnnot(formHandle, annotationPtr)) {\n      this.logger.debug(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'SetFormFieldValue',\n        'failed to set focused annotation',\n      );\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `SetFormFieldValue`,\n        'End',\n        `${doc.id}-${annotation.id}`,\n      );\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n      this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n      pageCtx.release();\n      this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n      this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantFocusAnnot,\n        message: 'failed to set focused annotation',\n      });\n    }\n\n    switch (value.kind) {\n      case 'text':\n        {\n          if (!this.pdfiumModule.FORM_SelectAllText(formHandle, pageCtx.pagePtr)) {\n            this.logger.debug(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              'SetFormFieldValue',\n              'failed to select all text',\n            );\n            this.logger.perf(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `SetFormFieldValue`,\n              'End',\n              `${doc.id}-${annotation.id}`,\n            );\n            this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n            this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n            this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n            pageCtx.release();\n            this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n            this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n            return PdfTaskHelper.reject({\n              code: PdfErrorCode.CantSelectText,\n              message: 'failed to select all text',\n            });\n          }\n          const length = 2 * (value.text.length + 1);\n          const textPtr = this.memoryManager.malloc(length);\n          this.pdfiumModule.pdfium.stringToUTF16(value.text, textPtr, length);\n          this.pdfiumModule.FORM_ReplaceSelection(formHandle, pageCtx.pagePtr, textPtr);\n          this.memoryManager.free(textPtr);\n        }\n        break;\n      case 'selection':\n        {\n          if (\n            !this.pdfiumModule.FORM_SetIndexSelected(\n              formHandle,\n              pageCtx.pagePtr,\n              value.index,\n              value.isSelected,\n            )\n          ) {\n            this.logger.debug(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              'SetFormFieldValue',\n              'failed to set index selected',\n            );\n            this.logger.perf(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `SetFormFieldValue`,\n              'End',\n              `${doc.id}-${annotation.id}`,\n            );\n            this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n            this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n            this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n            pageCtx.release();\n            this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n            this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n            return PdfTaskHelper.reject({\n              code: PdfErrorCode.CantSelectOption,\n              message: 'failed to set index selected',\n            });\n          }\n        }\n        break;\n      case 'checked':\n        {\n          const kReturn = 0x0d;\n          if (!this.pdfiumModule.FORM_OnChar(formHandle, pageCtx.pagePtr, kReturn, 0)) {\n            this.logger.debug(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              'SetFormFieldValue',\n              'failed to set field checked',\n            );\n            this.logger.perf(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `SetFormFieldValue`,\n              'End',\n              `${doc.id}-${annotation.id}`,\n            );\n            this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n            this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n            this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n            pageCtx.release();\n            this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n            this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n            return PdfTaskHelper.reject({\n              code: PdfErrorCode.CantCheckField,\n              message: 'failed to set field checked',\n            });\n          }\n        }\n        break;\n    }\n\n    this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n\n    this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n    this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n    pageCtx.release();\n\n    this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n    this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n    return PdfTaskHelper.resolve<boolean>(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.flattenPage}\n   *\n   * @public\n   */\n  flattenPage(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    options?: PdfFlattenPageOptions,\n  ): PdfTask<PdfPageFlattenResult> {\n    const { flag = PdfPageFlattenFlag.Display } = options ?? {};\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'flattenPage', doc, page, flag);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `flattenPage`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `flattenPage`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const result = this.pdfiumModule.FPDFPage_Flatten(pageCtx.pagePtr, flag);\n    pageCtx.release();\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `flattenPage`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(result);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.extractPages}\n   *\n   * @public\n   */\n  extractPages(doc: PdfDocumentObject, pageIndexes: number[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractPages', doc, pageIndexes);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const newDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!newDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'can not create new document',\n      });\n    }\n\n    const pageIndexesPtr = this.memoryManager.malloc(pageIndexes.length * 4);\n    for (let i = 0; i < pageIndexes.length; i++) {\n      this.pdfiumModule.pdfium.setValue(pageIndexesPtr + i * 4, pageIndexes[i], 'i32');\n    }\n\n    if (\n      !this.pdfiumModule.FPDF_ImportPagesByIndex(\n        newDocPtr,\n        ctx.docPtr,\n        pageIndexesPtr,\n        pageIndexes.length,\n        0,\n      )\n    ) {\n      this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantImportPages,\n        message: 'can not import pages to new document',\n      });\n    }\n\n    const buffer = this.saveDocument(newDocPtr);\n\n    this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n    return PdfTaskHelper.resolve(buffer);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.extractText}\n   *\n   * @public\n   */\n  extractText(doc: PdfDocumentObject, pageIndexes: number[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractText', doc, pageIndexes);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractText`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractText`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const strings: string[] = [];\n    for (let i = 0; i < pageIndexes.length; i++) {\n      const pageCtx = ctx.acquirePage(pageIndexes[i]);\n      const textPagePtr = this.pdfiumModule.FPDFText_LoadPage(pageCtx.pagePtr);\n      const charCount = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n      const bufferPtr = this.memoryManager.malloc((charCount + 1) * 2);\n      this.pdfiumModule.FPDFText_GetText(textPagePtr, 0, charCount, bufferPtr);\n      const text = this.pdfiumModule.pdfium.UTF16ToString(bufferPtr);\n      this.memoryManager.free(bufferPtr);\n      strings.push(text);\n      this.pdfiumModule.FPDFText_ClosePage(textPagePtr);\n      pageCtx.release();\n    }\n\n    const text = strings.join('\\n\\n');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractText`, 'End', doc.id);\n    return PdfTaskHelper.resolve(text);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getTextSlices}\n   *\n   * @public\n   */\n  getTextSlices(doc: PdfDocumentObject, slices: PageTextSlice[]): PdfTask<string[]> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getTextSlices', doc, slices);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'Begin', doc.id);\n\n    /* ⚠︎ 1 — trivial case */\n    if (slices.length === 0) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.resolve<string[]>([]);\n    }\n\n    /* ⚠︎ 2 — document must be open */\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    try {\n      /* keep caller order */\n      const out = new Array<string>(slices.length);\n\n      /* group → open each page once */\n      const byPage = new Map<number, { slice: PageTextSlice; pos: number }[]>();\n      slices.forEach((s, i) => {\n        (byPage.get(s.pageIndex) ?? byPage.set(s.pageIndex, []).get(s.pageIndex))!.push({\n          slice: s,\n          pos: i,\n        });\n      });\n\n      for (const [pageIdx, list] of byPage) {\n        const pageCtx = ctx.acquirePage(pageIdx);\n        const textPagePtr = pageCtx.getTextPage();\n\n        for (const { slice, pos } of list) {\n          const bufPtr = this.memoryManager.malloc(2 * (slice.charCount + 1)); // UTF-16 + NIL\n          this.pdfiumModule.FPDFText_GetText(textPagePtr, slice.charIndex, slice.charCount, bufPtr);\n          out[pos] = stripPdfUnwantedMarkers(this.pdfiumModule.pdfium.UTF16ToString(bufPtr));\n          this.memoryManager.free(bufPtr);\n        }\n        pageCtx.release();\n      }\n\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.resolve(out);\n    } catch (e) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'getTextSlices error', e);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: String(e),\n      });\n    }\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.merge}\n   *\n   * @public\n   */\n  merge(files: PdfFile[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'merge', files);\n    const fileIds = files.map((file) => file.id).join('.');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'Begin', fileIds);\n\n    const newDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!newDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'can not create new document',\n      });\n    }\n\n    const ptrs: { docPtr: number; filePtr: WasmPointer }[] = [];\n    for (const file of files.reverse()) {\n      const array = new Uint8Array(file.content);\n      const length = array.length;\n      const filePtr = this.memoryManager.malloc(length);\n      this.pdfiumModule.pdfium.HEAPU8.set(array, filePtr);\n\n      const docPtr = this.pdfiumModule.FPDF_LoadMemDocument(filePtr, length, '');\n      if (!docPtr) {\n        const lastError = this.pdfiumModule.FPDF_GetLastError();\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDF_LoadMemDocument failed with ${lastError}`,\n        );\n        this.memoryManager.free(filePtr);\n\n        for (const ptr of ptrs) {\n          this.pdfiumModule.FPDF_CloseDocument(ptr.docPtr);\n          this.memoryManager.free(ptr.filePtr);\n        }\n\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n        return PdfTaskHelper.reject<PdfFile>({\n          code: lastError,\n          message: `FPDF_LoadMemDocument failed`,\n        });\n      }\n      ptrs.push({ filePtr, docPtr });\n\n      if (!this.pdfiumModule.FPDF_ImportPages(newDocPtr, docPtr, '', 0)) {\n        this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n\n        for (const ptr of ptrs) {\n          this.pdfiumModule.FPDF_CloseDocument(ptr.docPtr);\n          this.memoryManager.free(ptr.filePtr);\n        }\n\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n        return PdfTaskHelper.reject({\n          code: PdfErrorCode.CantImportPages,\n          message: 'can not import pages to new document',\n        });\n      }\n    }\n    const buffer = this.saveDocument(newDocPtr);\n\n    this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n\n    for (const ptr of ptrs) {\n      this.pdfiumModule.FPDF_CloseDocument(ptr.docPtr);\n      this.memoryManager.free(ptr.filePtr);\n    }\n\n    const file: PdfFile = {\n      id: `${Math.random()}`,\n      content: buffer,\n    };\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n    return PdfTaskHelper.resolve(file);\n  }\n\n  /**\n   * Merges specific pages from multiple PDF documents in a custom order\n   *\n   * @param mergeConfigs Array of configurations specifying which pages to merge from which documents\n   * @returns A PdfTask that resolves with the merged PDF file\n   * @public\n   */\n  mergePages(mergeConfigs: Array<{ docId: string; pageIndices: number[] }>) {\n    const configIds = mergeConfigs\n      .map((config) => `${config.docId}:${config.pageIndices.join(',')}`)\n      .join('|');\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'mergePages', mergeConfigs);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'Begin', configIds);\n\n    // Create a new document to import pages into\n    const newDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!newDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'End', configIds);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'Cannot create new document',\n      });\n    }\n\n    try {\n      // Process each merge configuration in reverse order (since we're inserting at position 0)\n      // This ensures the final document has pages in the order specified by the user\n      for (const config of [...mergeConfigs].reverse()) {\n        // Check if the document is open\n        const ctx = this.cache.getContext(config.docId);\n\n        if (!ctx) {\n          this.logger.warn(\n            LOG_SOURCE,\n            LOG_CATEGORY,\n            `Document ${config.docId} is not open, skipping`,\n          );\n          continue;\n        }\n\n        // Get the page count for this document\n        const pageCount = this.pdfiumModule.FPDF_GetPageCount(ctx.docPtr);\n\n        // Filter out invalid page indices\n        const validPageIndices = config.pageIndices.filter(\n          (index) => index >= 0 && index < pageCount,\n        );\n\n        if (validPageIndices.length === 0) {\n          continue; // No valid pages to import\n        }\n\n        // Convert 0-based indices to 1-based for PDFium and join with commas\n        const pageString = validPageIndices.map((index) => index + 1).join(',');\n\n        try {\n          // Import all specified pages at once from this document\n          if (\n            !this.pdfiumModule.FPDF_ImportPages(\n              newDocPtr,\n              ctx.docPtr,\n              pageString,\n              0, // Insert at the beginning\n            )\n          ) {\n            throw new Error(`Failed to import pages ${pageString} from document ${config.docId}`);\n          }\n        } finally {\n        }\n      }\n\n      // Save the new document to buffer\n      const buffer = this.saveDocument(newDocPtr);\n\n      const file: PdfFile = {\n        id: `${Math.random()}`,\n        content: buffer,\n      };\n\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'End', configIds);\n      return PdfTaskHelper.resolve(file);\n    } catch (error) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'mergePages failed', error);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'End', configIds);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantImportPages,\n        message: error instanceof Error ? error.message : 'Failed to merge pages',\n      });\n    } finally {\n      // Clean up the new document\n      if (newDocPtr) {\n        this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n      }\n    }\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.saveAsCopy}\n   *\n   * @public\n   */\n  saveAsCopy(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'saveAsCopy', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SaveAsCopy`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SaveAsCopy`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const buffer = this.saveDocument(ctx.docPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SaveAsCopy`, 'End', doc.id);\n    return PdfTaskHelper.resolve(buffer);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.closeDocument}\n   *\n   * @public\n   */\n  closeDocument(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeDocument', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseDocument`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) return PdfTaskHelper.resolve(true);\n\n    ctx.dispose();\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseDocument`, 'End', doc.id);\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.closeAllDocuments}\n   *\n   * @public\n   */\n  closeAllDocuments() {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeAllDocuments');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseAllDocuments`, 'Begin');\n    this.cache.closeAllDocuments();\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseAllDocuments`, 'End');\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * Add text content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to text annotation\n   * @param annotation - text annotation\n   * @returns whether text content is added to annotation\n   *\n   * @private\n   */\n  private addTextContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfTextAnnoObject,\n  ) {\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (\n      annotation.inReplyToId &&\n      !this.setInReplyToId(pagePtr, annotationPtr, annotation.inReplyToId)\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationIcon(annotationPtr, annotation.icon || PdfAnnotationIcon.Comment)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationFlags(annotationPtr, annotation.flags || ['print', 'noZoom', 'noRotate'])\n    ) {\n      return false;\n    }\n    if (annotation.state && !this.setAnnotString(annotationPtr, 'State', annotation.state)) {\n      return false;\n    }\n    if (\n      annotation.stateModel &&\n      !this.setAnnotString(annotationPtr, 'StateModel', annotation.stateModel)\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Add free text content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to free text annotation\n   * @param annotation - free text annotation\n   * @returns whether free text content is added to annotation\n   *\n   * @private\n   */\n  private addFreeTextContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfFreeTextAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, PdfAnnotationBorderStyle.SOLID, 0)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (!this.setAnnotationTextAlignment(annotationPtr, annotation.textAlign)) {\n      return false;\n    }\n    if (!this.setAnnotationVerticalAlignment(annotationPtr, annotation.verticalAlign)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationDefaultAppearance(\n        annotationPtr,\n        annotation.fontFamily,\n        annotation.fontSize,\n        annotation.fontColor,\n      )\n    ) {\n      return false;\n    }\n    if (annotation.intent && !this.setAnnotIntent(annotationPtr, annotation.intent)) {\n      return false;\n    }\n    if (!annotation.backgroundColor || annotation.backgroundColor === 'transparent') {\n      if (!this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.Color)) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.backgroundColor ?? '#FFFFFF',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Set the rect of specified annotation\n   * @param page - page info that the annotation is belonged to\n   * @param pagePtr - pointer of page object\n   * @param annotationPtr - pointer to annotation object\n   * @param inkList - ink lists that added to the annotation\n   * @returns whether the ink lists is setted\n   *\n   * @private\n   */\n  private addInkStroke(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfInkAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (\n      !this.setBorderStyle(annotationPtr, PdfAnnotationBorderStyle.SOLID, annotation.strokeWidth)\n    ) {\n      return false;\n    }\n    if (!this.setInkList(page, annotationPtr, annotation.inkList)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add line content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to line annotation\n   * @param annotation - line annotation\n   * @returns whether line content is added to annotation\n   *\n   * @private\n   */\n  private addLineContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfLineAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (\n      !this.setLinePoints(\n        page,\n        annotationPtr,\n        annotation.linePoints.start,\n        annotation.linePoints.end,\n      )\n    ) {\n      return false;\n    }\n    if (\n      !this.setLineEndings(\n        annotationPtr,\n        annotation.lineEndings?.start ?? PdfAnnotationLineEnding.None,\n        annotation.lineEndings?.end ?? PdfAnnotationLineEnding.None,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, annotation.strokeStyle, annotation.strokeWidth)) {\n      return false;\n    }\n    if (!this.setBorderDashPattern(annotationPtr, annotation.strokeDashArray ?? [])) {\n      return false;\n    }\n    if (annotation.intent && !this.setAnnotIntent(annotationPtr, annotation.intent)) {\n      return false;\n    }\n    if (!annotation.color || annotation.color === 'transparent') {\n      if (\n        !this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.InteriorColor)\n      ) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.InteriorColor,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.strokeColor ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Add polygon or polyline content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to polygon or polyline annotation\n   * @param annotation - polygon or polyline annotation\n   * @returns whether polygon or polyline content is added to annotation\n   *\n   * @private\n   */\n  private addPolyContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfPolygonAnnoObject | PdfPolylineAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (\n      annotation.type === PdfAnnotationSubtype.POLYLINE &&\n      !this.setLineEndings(\n        annotationPtr,\n        annotation.lineEndings?.start ?? PdfAnnotationLineEnding.None,\n        annotation.lineEndings?.end ?? PdfAnnotationLineEnding.None,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setPdfAnnoVertices(page, annotationPtr, annotation.vertices)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, annotation.strokeStyle, annotation.strokeWidth)) {\n      return false;\n    }\n    if (!this.setBorderDashPattern(annotationPtr, annotation.strokeDashArray ?? [])) {\n      return false;\n    }\n    if (annotation.intent && !this.setAnnotIntent(annotationPtr, annotation.intent)) {\n      return false;\n    }\n    if (!annotation.color || annotation.color === 'transparent') {\n      if (\n        !this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.InteriorColor)\n      ) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.InteriorColor,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.strokeColor ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add shape content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to shape annotation\n   * @param annotation - shape annotation\n   * @returns whether shape content is added to annotation\n   *\n   * @private\n   */\n  addShapeContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfCircleAnnoObject | PdfSquareAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, annotation.strokeStyle, annotation.strokeWidth)) {\n      return false;\n    }\n    if (!this.setBorderDashPattern(annotationPtr, annotation.strokeDashArray ?? [])) {\n      return false;\n    }\n    if (!this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (!annotation.color || annotation.color === 'transparent') {\n      if (\n        !this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.InteriorColor)\n      ) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.InteriorColor,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.strokeColor ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add highlight content to annotation\n   * @param page - page info\n   * @param annotationPtr - pointer to highlight annotation\n   * @param annotation - highlight annotation\n   * @returns whether highlight content is added to annotation\n   *\n   * @private\n   */\n  addTextMarkupContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation:\n      | PdfHighlightAnnoObject\n      | PdfUnderlineAnnoObject\n      | PdfStrikeOutAnnoObject\n      | PdfSquigglyAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.custom && !this.setAnnotCustom(annotationPtr, annotation.custom)) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.syncQuadPointsAnno(page, annotationPtr, annotation.segmentRects)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add contents to stamp annotation\n   * @param docPtr - pointer to pdf document object\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to stamp annotation\n   * @param rect - rect of stamp annotation\n   * @param contents - contents of stamp annotation\n   * @returns whether contents is added to annotation\n   *\n   * @private\n   */\n  addStampContent(\n    docPtr: number,\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfStampAnnoObject,\n    imageData?: ImageData,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (annotation.icon && !this.setAnnotationIcon(annotationPtr, annotation.icon)) {\n      return false;\n    }\n    if (annotation.subject && !this.setAnnotString(annotationPtr, 'Subj', annotation.subject)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (imageData) {\n      for (let i = this.pdfiumModule.FPDFAnnot_GetObjectCount(annotationPtr) - 1; i >= 0; i--) {\n        this.pdfiumModule.FPDFAnnot_RemoveObject(annotationPtr, i);\n      }\n\n      if (!this.addImageObject(docPtr, page, pagePtr, annotationPtr, annotation.rect, imageData)) {\n        return false;\n      }\n    }\n    if (!this.pdfiumModule.EPDFAnnot_UpdateAppearanceToRect(annotationPtr, PdfStampFit.Cover)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add image object to annotation\n   * @param docPtr - pointer to pdf document object\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to stamp annotation\n   * @param position - position of image\n   * @param imageData - data of image\n   * @returns whether image is added to annotation\n   *\n   * @private\n   */\n  addImageObject(\n    docPtr: number,\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    rect: Rect,\n    imageData: ImageData,\n  ) {\n    const bytesPerPixel = 4;\n    const pixelCount = imageData.width * imageData.height;\n\n    const bitmapBufferPtr = this.memoryManager.malloc(bytesPerPixel * pixelCount);\n    if (!bitmapBufferPtr) {\n      return false;\n    }\n\n    for (let i = 0; i < pixelCount; i++) {\n      const red = imageData.data[i * bytesPerPixel];\n      const green = imageData.data[i * bytesPerPixel + 1];\n      const blue = imageData.data[i * bytesPerPixel + 2];\n      const alpha = imageData.data[i * bytesPerPixel + 3];\n\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel, blue, 'i8');\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel + 1, green, 'i8');\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel + 2, red, 'i8');\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel + 3, alpha, 'i8');\n    }\n\n    const format = BitmapFormat.Bitmap_BGRA;\n    const bitmapPtr = this.pdfiumModule.FPDFBitmap_CreateEx(\n      imageData.width,\n      imageData.height,\n      format,\n      bitmapBufferPtr,\n      0,\n    );\n    if (!bitmapPtr) {\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    const imageObjectPtr = this.pdfiumModule.FPDFPageObj_NewImageObj(docPtr);\n    if (!imageObjectPtr) {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    if (!this.pdfiumModule.FPDFImageObj_SetBitmap(pagePtr, 0, imageObjectPtr, bitmapPtr)) {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.pdfiumModule.FPDFPageObj_Destroy(imageObjectPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    const matrixPtr = this.memoryManager.malloc(6 * 4);\n    this.pdfiumModule.pdfium.setValue(matrixPtr, imageData.width, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 4, 0, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 8, 0, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 12, imageData.height, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 16, 0, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 20, 0, 'float');\n    if (!this.pdfiumModule.FPDFPageObj_SetMatrix(imageObjectPtr, matrixPtr)) {\n      this.memoryManager.free(matrixPtr);\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.pdfiumModule.FPDFPageObj_Destroy(imageObjectPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n    this.memoryManager.free(matrixPtr);\n\n    const pagePos = this.convertDevicePointToPagePoint(page, {\n      x: rect.origin.x,\n      y: rect.origin.y + imageData.height, // shift down by the image height\n    });\n    this.pdfiumModule.FPDFPageObj_Transform(imageObjectPtr, 1, 0, 0, 1, pagePos.x, pagePos.y);\n\n    if (!this.pdfiumModule.FPDFAnnot_AppendObject(annotationPtr, imageObjectPtr)) {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.pdfiumModule.FPDFPageObj_Destroy(imageObjectPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n    this.memoryManager.free(bitmapBufferPtr);\n\n    return true;\n  }\n\n  /**\n   * Save document to array buffer\n   * @param docPtr - pointer to pdf document\n   * @returns array buffer contains the pdf content\n   *\n   * @private\n   */\n  saveDocument(docPtr: number) {\n    const writerPtr = this.pdfiumModule.PDFiumExt_OpenFileWriter();\n    this.pdfiumModule.PDFiumExt_SaveAsCopy(docPtr, writerPtr);\n    const size = this.pdfiumModule.PDFiumExt_GetFileWriterSize(writerPtr);\n    const dataPtr = this.memoryManager.malloc(size);\n    this.pdfiumModule.PDFiumExt_GetFileWriterData(writerPtr, dataPtr, size);\n    const buffer = new ArrayBuffer(size);\n    const view = new DataView(buffer);\n    for (let i = 0; i < size; i++) {\n      view.setInt8(i, this.pdfiumModule.pdfium.getValue(dataPtr + i, 'i8'));\n    }\n    this.memoryManager.free(dataPtr);\n    this.pdfiumModule.PDFiumExt_CloseFileWriter(writerPtr);\n\n    return buffer;\n  }\n\n  /**\n   * Read Catalog /Lang via EPDFCatalog_GetLanguage (UTF-16LE → JS string).\n   * Returns:\n   *   null  -> /Lang not present (getter returned 0) OR doc not open,\n   *   ''    -> /Lang exists but is explicitly empty,\n   *   'en', 'en-US', ... -> normal tag.\n   *\n   * Note: EPDFCatalog_GetLanguage lengths are BYTES (incl. trailing NUL).\n   *\n   * @private\n   */\n  private readCatalogLanguage(docPtr: number): string | null {\n    // Probe required length in BYTES (includes UTF-16LE trailing NUL).\n    const byteLen = this.pdfiumModule.EPDFCatalog_GetLanguage(docPtr, 0, 0) >>> 0;\n\n    // 0 => /Lang missing (or invalid doc/root) → expose as null\n    if (byteLen === 0) return null;\n\n    // 2 => empty UTF-16LE string (just the NUL) → explicitly empty\n    if (byteLen === 2) return '';\n\n    // Read exact buffer to avoid extra allocs.\n    return readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) =>\n        this.pdfiumModule.EPDFCatalog_GetLanguage(docPtr, buffer, bufferLength),\n      this.pdfiumModule.pdfium.UTF16ToString,\n      byteLen,\n    );\n  }\n\n  /**\n   * Read metadata from pdf document\n   * @param docPtr - pointer to pdf document\n   * @param key - key of metadata field\n   * @returns metadata value\n   *\n   * @private\n   */\n  private readMetaText(docPtr: number, key: string): string | null {\n    const exists = !!this.pdfiumModule.EPDF_HasMetaText(docPtr, key);\n    if (!exists) return null;\n\n    const len = this.pdfiumModule.FPDF_GetMetaText(docPtr, key, 0, 0);\n    if (len === 2) return '';\n\n    // Read with an exact buffer to avoid extra allocations.\n    return readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) =>\n        this.pdfiumModule.FPDF_GetMetaText(docPtr, key, buffer, bufferLength),\n      this.pdfiumModule.pdfium.UTF16ToString,\n      len,\n    );\n  }\n\n  /**\n   * Write metadata into the PDF's Info dictionary.\n   * If `value` is null or empty string, the key is removed.\n   * @param docPtr - pointer to pdf document\n   * @param key - key of metadata field\n   * @param value - value of metadata field\n   * @returns whether metadata is written to the pdf document\n   *\n   * @private\n   */\n  private setMetaText(docPtr: number, key: string, value: string | null | undefined): boolean {\n    // Remove key if value is null/undefined/empty\n    if (value == null || value.length === 0) {\n      // Pass nullptr for value → removal in our C++ implementation\n      const ok = this.pdfiumModule.EPDF_SetMetaText(docPtr, key, 0);\n      return !!ok;\n    }\n\n    // UTF-16LE buffer (+2 bytes for NUL)\n    const bytes = 2 * (value.length + 1);\n    const ptr = this.memoryManager.malloc(bytes);\n    try {\n      this.pdfiumModule.pdfium.stringToUTF16(value, ptr, bytes);\n      const ok = this.pdfiumModule.EPDF_SetMetaText(docPtr, key, ptr);\n      return !!ok;\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n  }\n\n  /**\n   * Read the document's trapped status via PDFium.\n   * Falls back to `Unknown` on unexpected values.\n   *\n   * @private\n   */\n  private getMetaTrapped(docPtr: number): PdfTrappedStatus {\n    const raw = Number(this.pdfiumModule.EPDF_GetMetaTrapped(docPtr));\n    switch (raw) {\n      case PdfTrappedStatus.NotSet:\n      case PdfTrappedStatus.True:\n      case PdfTrappedStatus.False:\n      case PdfTrappedStatus.Unknown:\n        return raw;\n      default:\n        return PdfTrappedStatus.Unknown;\n    }\n  }\n\n  /**\n   * Write (or clear) the document's trapped status via PDFium.\n   * Pass `null`/`undefined` to remove the `/Trapped` key.\n   *\n   * @private\n   */\n  private setMetaTrapped(docPtr: number, status: PdfTrappedStatus | null | undefined): boolean {\n    // Treat null/undefined as “remove key” — the C++ side handles NotSet by\n    // deleting /Trapped from the Info dictionary.\n    const toSet = status == null || status === undefined ? PdfTrappedStatus.NotSet : status;\n\n    // Guard against unexpected values.\n    const valid =\n      toSet === PdfTrappedStatus.NotSet ||\n      toSet === PdfTrappedStatus.True ||\n      toSet === PdfTrappedStatus.False ||\n      toSet === PdfTrappedStatus.Unknown;\n\n    if (!valid) return false;\n\n    return !!this.pdfiumModule.EPDF_SetMetaTrapped(docPtr, toSet);\n  }\n\n  /**\n   * Get the number of keys in the document's Info dictionary.\n   * @param docPtr - pointer to pdf document\n   * @param customOnly - if true, only count non-reserved (custom) keys; if false, count all keys.\n   * @returns the number of keys (possibly 0). On error, returns 0.\n   *\n   * @private\n   */\n  private getMetaKeyCount(docPtr: number, customOnly: boolean): number {\n    return Number(this.pdfiumModule.EPDF_GetMetaKeyCount(docPtr, customOnly)) | 0;\n  }\n\n  /**\n   * Get the name of the Info dictionary key at |index|.\n   * @param docPtr - pointer to pdf document\n   * @param index - 0-based key index in the order returned by PDFium.\n   * @param customOnly - if true, indexes only over non-reserved (custom) keys; if false, indexes over all keys.\n   * @returns the name of the key, or null if the key is not found.\n   *\n   * @private\n   */\n  private getMetaKeyName(docPtr: number, index: number, customOnly: boolean): string | null {\n    const len = this.pdfiumModule.EPDF_GetMetaKeyName(docPtr, index, customOnly, 0, 0);\n    if (!len) return null;\n    return readString(\n      this.pdfiumModule.pdfium,\n      (buffer, buflen) =>\n        this.pdfiumModule.EPDF_GetMetaKeyName(docPtr, index, customOnly, buffer, buflen),\n      this.pdfiumModule.pdfium.UTF8ToString,\n      len,\n    );\n  }\n\n  /**\n   * Read all metadata from the document's Info dictionary.\n   * @param docPtr - pointer to pdf document\n   * @param customOnly - if true, only read non-reserved (custom) keys; if false, read all keys.\n   * @returns all metadata\n   *\n   * @private\n   */\n  private readAllMeta(docPtr: number, customOnly: boolean = true): Record<string, string | null> {\n    const n = this.getMetaKeyCount(docPtr, customOnly);\n    const out: Record<string, string | null> = {};\n    for (let i = 0; i < n; i++) {\n      const key = this.getMetaKeyName(docPtr, i, customOnly);\n      if (!key) continue;\n      out[key] = this.readMetaText(docPtr, key); // returns null if not present\n    }\n    return out;\n  }\n\n  /**\n   * Read bookmarks in the pdf document\n   * @param docPtr - pointer to pdf document\n   * @param rootBookmarkPtr - pointer to root bookmark\n   * @returns bookmarks in the pdf document\n   *\n   * @private\n   */\n  readPdfBookmarks(docPtr: number, rootBookmarkPtr = 0) {\n    let bookmarkPtr = this.pdfiumModule.FPDFBookmark_GetFirstChild(docPtr, rootBookmarkPtr);\n\n    const bookmarks: PdfBookmarkObject[] = [];\n    while (bookmarkPtr) {\n      const bookmark = this.readPdfBookmark(docPtr, bookmarkPtr);\n      bookmarks.push(bookmark);\n\n      const nextBookmarkPtr = this.pdfiumModule.FPDFBookmark_GetNextSibling(docPtr, bookmarkPtr);\n\n      bookmarkPtr = nextBookmarkPtr;\n    }\n\n    return bookmarks;\n  }\n\n  /**\n   * Read bookmark in the pdf document\n   * @param docPtr - pointer to pdf document\n   * @param bookmarkPtr - pointer to bookmark object\n   * @returns pdf bookmark object\n   *\n   * @private\n   */\n  private readPdfBookmark(docPtr: number, bookmarkPtr: number): PdfBookmarkObject {\n    const title = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFBookmark_GetTitle(bookmarkPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const bookmarks = this.readPdfBookmarks(docPtr, bookmarkPtr);\n\n    const target = this.readPdfBookmarkTarget(\n      docPtr,\n      () => {\n        return this.pdfiumModule.FPDFBookmark_GetAction(bookmarkPtr);\n      },\n      () => {\n        return this.pdfiumModule.FPDFBookmark_GetDest(docPtr, bookmarkPtr);\n      },\n    );\n\n    return {\n      title,\n      target,\n      children: bookmarks,\n    };\n  }\n\n  /**\n   * Read text rects in pdf page\n   * @param page - pdf page info\n   * @param docPtr - pointer to pdf document\n   * @param pagePtr - pointer to pdf page\n   * @param textPagePtr - pointer to pdf text page\n   * @returns text rects in the pdf page\n   *\n   * @public\n   */\n  private readPageTextRects(\n    page: PdfPageObject,\n    docPtr: number,\n    pagePtr: number,\n    textPagePtr: number,\n  ) {\n    const rectsCount = this.pdfiumModule.FPDFText_CountRects(textPagePtr, 0, -1);\n\n    const textRects: PdfTextRectObject[] = [];\n    for (let i = 0; i < rectsCount; i++) {\n      const topPtr = this.memoryManager.malloc(8);\n      const leftPtr = this.memoryManager.malloc(8);\n      const rightPtr = this.memoryManager.malloc(8);\n      const bottomPtr = this.memoryManager.malloc(8);\n      const isSucceed = this.pdfiumModule.FPDFText_GetRect(\n        textPagePtr,\n        i,\n        leftPtr,\n        topPtr,\n        rightPtr,\n        bottomPtr,\n      );\n      if (!isSucceed) {\n        this.memoryManager.free(leftPtr);\n        this.memoryManager.free(topPtr);\n        this.memoryManager.free(rightPtr);\n        this.memoryManager.free(bottomPtr);\n        continue;\n      }\n\n      const left = this.pdfiumModule.pdfium.getValue(leftPtr, 'double');\n      const top = this.pdfiumModule.pdfium.getValue(topPtr, 'double');\n      const right = this.pdfiumModule.pdfium.getValue(rightPtr, 'double');\n      const bottom = this.pdfiumModule.pdfium.getValue(bottomPtr, 'double');\n\n      this.memoryManager.free(leftPtr);\n      this.memoryManager.free(topPtr);\n      this.memoryManager.free(rightPtr);\n      this.memoryManager.free(bottomPtr);\n\n      const deviceXPtr = this.memoryManager.malloc(4);\n      const deviceYPtr = this.memoryManager.malloc(4);\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        0,\n        left,\n        top,\n        deviceXPtr,\n        deviceYPtr,\n      );\n      const x = this.pdfiumModule.pdfium.getValue(deviceXPtr, 'i32');\n      const y = this.pdfiumModule.pdfium.getValue(deviceYPtr, 'i32');\n      this.memoryManager.free(deviceXPtr);\n      this.memoryManager.free(deviceYPtr);\n\n      const rect = {\n        origin: {\n          x,\n          y,\n        },\n        size: {\n          width: Math.ceil(Math.abs(right - left)),\n          height: Math.ceil(Math.abs(top - bottom)),\n        },\n      };\n\n      const utf16Length = this.pdfiumModule.FPDFText_GetBoundedText(\n        textPagePtr,\n        left,\n        top,\n        right,\n        bottom,\n        0,\n        0,\n      );\n      const bytesCount = (utf16Length + 1) * 2; // include NIL\n      const textBuffer = this.memoryManager.malloc(bytesCount);\n      this.pdfiumModule.FPDFText_GetBoundedText(\n        textPagePtr,\n        left,\n        top,\n        right,\n        bottom,\n        textBuffer,\n        utf16Length,\n      );\n      const content = this.pdfiumModule.pdfium.UTF16ToString(textBuffer);\n      this.memoryManager.free(textBuffer);\n\n      const charIndex = this.pdfiumModule.FPDFText_GetCharIndexAtPos(textPagePtr, left, top, 2, 2);\n      let fontFamily = '';\n      let fontSize = rect.size.height;\n      if (charIndex >= 0) {\n        fontSize = this.pdfiumModule.FPDFText_GetFontSize(textPagePtr, charIndex);\n\n        const fontNameLength = this.pdfiumModule.FPDFText_GetFontInfo(\n          textPagePtr,\n          charIndex,\n          0,\n          0,\n          0,\n        );\n\n        const bytesCount = fontNameLength + 1; // include NIL\n        const textBufferPtr = this.memoryManager.malloc(bytesCount);\n        const flagsPtr = this.memoryManager.malloc(4);\n        this.pdfiumModule.FPDFText_GetFontInfo(\n          textPagePtr,\n          charIndex,\n          textBufferPtr,\n          bytesCount,\n          flagsPtr,\n        );\n        fontFamily = this.pdfiumModule.pdfium.UTF8ToString(textBufferPtr);\n        this.memoryManager.free(textBufferPtr);\n        this.memoryManager.free(flagsPtr);\n      }\n\n      const textRect: PdfTextRectObject = {\n        content,\n        rect,\n        font: {\n          family: fontFamily,\n          size: fontSize,\n        },\n      };\n\n      textRects.push(textRect);\n    }\n\n    return textRects;\n  }\n\n  /**\n   * Return geometric + logical text layout for one page\n   * (glyph-only implementation, no FPDFText_GetRect).\n   *\n   * @public\n   */\n  getPageGeometry(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfPageGeometry> {\n    const label = 'getPageGeometry';\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, label, 'Begin', doc.id);\n\n    /* ── guards ───────────────────────────────────────────── */\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, label, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    /* ── native handles ──────────────────────────────────── */\n    const pageCtx = ctx.acquirePage(page.index);\n    const textPagePtr = pageCtx.getTextPage();\n\n    /* ── 1. read ALL glyphs in logical order ─────────────── */\n    const glyphCount = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n    const glyphs: PdfGlyphObject[] = [];\n\n    for (let i = 0; i < glyphCount; i++) {\n      const g = this.readGlyphInfo(page, pageCtx.pagePtr, textPagePtr, i);\n      glyphs.push(g);\n    }\n\n    /* ── 2. build visual runs from glyph stream ───────────── */\n    const runs: PdfRun[] = this.buildRunsFromGlyphs(glyphs, textPagePtr);\n\n    /* ── 3. cleanup & resolve task ───────────────────────── */\n    pageCtx.release();\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, label, 'End', doc.id);\n    return PdfTaskHelper.resolve({ runs });\n  }\n\n  /**\n   * Group consecutive glyphs that belong to the same CPDF_TextObject\n   * using FPDFText_GetTextObject(), and calculate rotation from glyph positions.\n   */\n  private buildRunsFromGlyphs(glyphs: PdfGlyphObject[], textPagePtr: number): PdfRun[] {\n    const runs: PdfRun[] = [];\n    let current: PdfRun | null = null;\n    let curObjPtr: number | null = null;\n    let bounds: { minX: number; minY: number; maxX: number; maxY: number } | null = null;\n\n    /** ── main loop ──────────────────────────────────────────── */\n    for (let i = 0; i < glyphs.length; i++) {\n      const g = glyphs[i];\n\n      /* 1 — find the CPDF_TextObject this glyph belongs to */\n      const objPtr = this.pdfiumModule.FPDFText_GetTextObject(textPagePtr, i) as number;\n\n      /* 2 — start a new run when the text object changes */\n      if (objPtr !== curObjPtr) {\n        curObjPtr = objPtr;\n        current = {\n          rect: {\n            x: g.origin.x,\n            y: g.origin.y,\n            width: g.size.width,\n            height: g.size.height,\n          },\n          charStart: i,\n          glyphs: [],\n        };\n        bounds = {\n          minX: g.origin.x,\n          minY: g.origin.y,\n          maxX: g.origin.x + g.size.width,\n          maxY: g.origin.y + g.size.height,\n        };\n        runs.push(current);\n      }\n\n      /* 3 — append the slim glyph record */\n      current!.glyphs.push({\n        x: g.origin.x,\n        y: g.origin.y,\n        width: g.size.width,\n        height: g.size.height,\n        flags: g.isEmpty ? 2 : g.isSpace ? 1 : 0,\n      });\n\n      /* 4 — expand the run's bounding rect */\n      if (g.isEmpty) {\n        continue;\n      }\n\n      const right = g.origin.x + g.size.width;\n      const bottom = g.origin.y + g.size.height;\n\n      // Update bounds\n      bounds!.minX = Math.min(bounds!.minX, g.origin.x);\n      bounds!.minY = Math.min(bounds!.minY, g.origin.y);\n      bounds!.maxX = Math.max(bounds!.maxX, right);\n      bounds!.maxY = Math.max(bounds!.maxY, bottom);\n\n      // Calculate final rect from bounds\n      current!.rect.x = bounds!.minX;\n      current!.rect.y = bounds!.minY;\n      current!.rect.width = bounds!.maxX - bounds!.minX;\n      current!.rect.height = bounds!.maxY - bounds!.minY;\n    }\n\n    return runs;\n  }\n\n  /**\n   * Extract glyph geometry + metadata for `charIndex`\n   *\n   * Returns device–space coordinates:\n   *   x,y  → **top-left** corner (integer-pixels)\n   *   w,h  → width / height (integer-pixels, ≥ 1)\n   *\n   * And two flags:\n   *   isSpace → true if the glyph's Unicode code-point is U+0020\n   */\n  private readGlyphInfo(\n    page: PdfPageObject,\n    pagePtr: number,\n    textPagePtr: number,\n    charIndex: number,\n  ): PdfGlyphObject {\n    // ── native stack temp pointers ──────────────────────────────\n    const dx1Ptr = this.memoryManager.malloc(4);\n    const dy1Ptr = this.memoryManager.malloc(4);\n    const dx2Ptr = this.memoryManager.malloc(4);\n    const dy2Ptr = this.memoryManager.malloc(4);\n    const rectPtr = this.memoryManager.malloc(16); // 4 floats = 16 bytes\n\n    let x = 0,\n      y = 0,\n      width = 0,\n      height = 0,\n      isSpace = false;\n\n    // ── 1) raw glyph bbox in                      page-user-space\n    if (this.pdfiumModule.FPDFText_GetLooseCharBox(textPagePtr, charIndex, rectPtr)) {\n      const left = this.pdfiumModule.pdfium.getValue(rectPtr, 'float');\n      const top = this.pdfiumModule.pdfium.getValue(rectPtr + 4, 'float');\n      const right = this.pdfiumModule.pdfium.getValue(rectPtr + 8, 'float');\n      const bottom = this.pdfiumModule.pdfium.getValue(rectPtr + 12, 'float');\n\n      if (left === right || top === bottom) {\n        [rectPtr, dx1Ptr, dy1Ptr, dx2Ptr, dy2Ptr].forEach((p) => this.memoryManager.free(p));\n\n        return {\n          origin: { x: 0, y: 0 },\n          size: { width: 0, height: 0 },\n          isEmpty: true,\n        };\n      }\n\n      // ── 2) map 2 opposite corners to            device-space\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        /*rotate=*/ 0,\n        left,\n        top,\n        dx1Ptr,\n        dy1Ptr,\n      );\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        /*rotate=*/ 0,\n        right,\n        bottom,\n        dx2Ptr,\n        dy2Ptr,\n      );\n\n      const x1 = this.pdfiumModule.pdfium.getValue(dx1Ptr, 'i32');\n      const y1 = this.pdfiumModule.pdfium.getValue(dy1Ptr, 'i32');\n      const x2 = this.pdfiumModule.pdfium.getValue(dx2Ptr, 'i32');\n      const y2 = this.pdfiumModule.pdfium.getValue(dy2Ptr, 'i32');\n\n      x = Math.min(x1, x2);\n      y = Math.min(y1, y2);\n      width = Math.max(1, Math.abs(x2 - x1));\n      height = Math.max(1, Math.abs(y2 - y1));\n\n      // ── 3) extra flags ───────────────────────────────────────\n      const uc = this.pdfiumModule.FPDFText_GetUnicode(textPagePtr, charIndex);\n      isSpace = uc === 32;\n    }\n\n    // ── free tmps ───────────────────────────────────────────────\n    [rectPtr, dx1Ptr, dy1Ptr, dx2Ptr, dy2Ptr].forEach((p) => this.memoryManager.free(p));\n\n    return {\n      origin: { x, y },\n      size: { width, height },\n      ...(isSpace && { isSpace }),\n    };\n  }\n\n  /**\n   * Geometry-only text extraction\n   * ------------------------------------------\n   * Returns every glyph on the requested page\n   * in the logical order delivered by PDFium.\n   *\n   * The promise resolves to an array of objects:\n   *   {\n   *     idx:     number;            // glyph index on the page (0…n-1)\n   *     origin:  { x: number; y: number };\n   *     size:    { width: number;  height: number };\n   *     angle:   number;            // degrees, counter-clock-wise\n   *     isSpace: boolean;           // true  → U+0020\n   *   }\n   *\n   * No Unicode is included; front-end decides whether to hydrate it.\n   */\n  public getPageGlyphs(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfGlyphObject[]> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', doc, page);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', 'Begin', doc.id);\n\n    // ── 1) safety: document handle must be alive ───────────────\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // ── 2) load page + text page handles ───────────────────────\n    const pageCtx = ctx.acquirePage(page.index);\n    const textPagePtr = pageCtx.getTextPage();\n\n    // ── 3) iterate all glyphs in logical order ─────────────────\n    const total = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n    const glyphs = new Array(total);\n\n    for (let i = 0; i < total; i++) {\n      const g = this.readGlyphInfo(page, pageCtx.pagePtr, textPagePtr, i);\n\n      if (g.isEmpty) {\n        continue;\n      }\n\n      glyphs[i] = { ...g };\n    }\n\n    // ── 4) clean-up native handles ─────────────────────────────\n    pageCtx.release();\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', 'End', doc.id);\n\n    return PdfTaskHelper.resolve(glyphs);\n  }\n\n  private readCharBox(\n    page: PdfPageObject,\n    pagePtr: number,\n    textPagePtr: number,\n    charIndex: number,\n  ): Rect {\n    const topPtr = this.memoryManager.malloc(8);\n    const leftPtr = this.memoryManager.malloc(8);\n    const bottomPtr = this.memoryManager.malloc(8);\n    const rightPtr = this.memoryManager.malloc(8);\n    let x = 0;\n    let y = 0;\n    let width = 0;\n    let height = 0;\n    if (\n      this.pdfiumModule.FPDFText_GetCharBox(\n        textPagePtr,\n        charIndex,\n        leftPtr,\n        rightPtr,\n        bottomPtr,\n        topPtr,\n      )\n    ) {\n      const top = this.pdfiumModule.pdfium.getValue(topPtr, 'double');\n      const left = this.pdfiumModule.pdfium.getValue(leftPtr, 'double');\n      const bottom = this.pdfiumModule.pdfium.getValue(bottomPtr, 'double');\n      const right = this.pdfiumModule.pdfium.getValue(rightPtr, 'double');\n\n      const deviceXPtr = this.memoryManager.malloc(4);\n      const deviceYPtr = this.memoryManager.malloc(4);\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        0,\n        left,\n        top,\n        deviceXPtr,\n        deviceYPtr,\n      );\n      x = this.pdfiumModule.pdfium.getValue(deviceXPtr, 'i32');\n      y = this.pdfiumModule.pdfium.getValue(deviceYPtr, 'i32');\n      this.memoryManager.free(deviceXPtr);\n      this.memoryManager.free(deviceYPtr);\n\n      width = Math.ceil(Math.abs(right - left));\n      height = Math.ceil(Math.abs(top - bottom));\n    }\n    this.memoryManager.free(topPtr);\n    this.memoryManager.free(leftPtr);\n    this.memoryManager.free(bottomPtr);\n    this.memoryManager.free(rightPtr);\n\n    return {\n      origin: {\n        x,\n        y,\n      },\n      size: {\n        width,\n        height,\n      },\n    };\n  }\n\n  /**\n   * Read page annotations\n   *\n   * @param ctx - document context\n   * @param page - page info\n   * @returns annotations on the pdf page\n   *\n   * @private\n   */\n  private readPageAnnotations(ctx: DocumentContext, page: PdfPageObject) {\n    return ctx.borrowPage(page.index, (pageCtx) => {\n      const annotationCount = this.pdfiumModule.FPDFPage_GetAnnotCount(pageCtx.pagePtr);\n\n      const annotations: PdfAnnotationObject[] = [];\n      for (let i = 0; i < annotationCount; i++) {\n        pageCtx.withAnnotation(i, (annotPtr) => {\n          const anno = this.readPageAnnotation(ctx.docPtr, page, annotPtr, pageCtx);\n          if (anno) annotations.push(anno);\n        });\n      }\n      return annotations;\n    });\n  }\n\n  /**\n   * Read page annotations\n   *\n   * @param ctx - document context\n   * @param page - page info\n   * @returns annotations on the pdf page\n   *\n   * @private\n   */\n  private readPageAnnotationsRaw(ctx: DocumentContext, page: PdfPageObject): PdfAnnotationObject[] {\n    const count = this.pdfiumModule.EPDFPage_GetAnnotCountRaw(ctx.docPtr, page.index);\n    if (count <= 0) return [];\n\n    const out: PdfAnnotationObject[] = [];\n\n    const pageCtx = ctx.acquirePage(page.index);\n\n    for (let i = 0; i < count; ++i) {\n      const annotPtr = this.pdfiumModule.EPDFPage_GetAnnotRaw(ctx.docPtr, page.index, i);\n      if (!annotPtr) continue;\n\n      try {\n        const anno = this.readPageAnnotation(ctx.docPtr, page, annotPtr, pageCtx);\n        if (anno) out.push(anno);\n      } finally {\n        this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n      }\n    }\n    return out;\n  }\n\n  /**\n   * Read pdf annotation from pdf document\n   *\n   * @param docPtr - pointer to pdf document\n   * @param page - page info\n   * @param annotationPtr - pointer to pdf annotation\n   * @param pageCtx - page context\n   * @returns pdf annotation\n   *\n   * @private\n   */\n  private readPageAnnotation(\n    docPtr: number,\n    page: PdfPageObject,\n    annotationPtr: number,\n    pageCtx?: PageContext,\n  ) {\n    let index = this.getAnnotString(annotationPtr, 'NM');\n    if (!index || !isUuidV4(index)) {\n      index = uuidV4();\n      this.setAnnotString(annotationPtr, 'NM', index);\n    }\n    const subType = this.pdfiumModule.FPDFAnnot_GetSubtype(\n      annotationPtr,\n    ) as PdfAnnotationObject['type'];\n    let annotation: PdfAnnotationObject | undefined;\n    switch (subType) {\n      case PdfAnnotationSubtype.TEXT:\n        {\n          annotation = this.readPdfTextAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.FREETEXT:\n        {\n          annotation = this.readPdfFreeTextAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.LINK:\n        {\n          annotation = this.readPdfLinkAnno(page, docPtr, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.WIDGET:\n        if (pageCtx) {\n          return this.readPdfWidgetAnno(page, annotationPtr, pageCtx.getFormHandle(), index);\n        }\n      case PdfAnnotationSubtype.FILEATTACHMENT:\n        {\n          annotation = this.readPdfFileAttachmentAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.INK:\n        {\n          annotation = this.readPdfInkAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.POLYGON:\n        {\n          annotation = this.readPdfPolygonAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.POLYLINE:\n        {\n          annotation = this.readPdfPolylineAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.LINE:\n        {\n          annotation = this.readPdfLineAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.HIGHLIGHT:\n        annotation = this.readPdfHighlightAnno(page, annotationPtr, index);\n        break;\n      case PdfAnnotationSubtype.STAMP:\n        {\n          annotation = this.readPdfStampAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.SQUARE:\n        {\n          annotation = this.readPdfSquareAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.CIRCLE:\n        {\n          annotation = this.readPdfCircleAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.UNDERLINE:\n        {\n          annotation = this.readPdfUnderlineAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.SQUIGGLY:\n        {\n          annotation = this.readPdfSquigglyAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.STRIKEOUT:\n        {\n          annotation = this.readPdfStrikeOutAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.CARET:\n        {\n          annotation = this.readPdfCaretAnno(page, annotationPtr, index);\n        }\n        break;\n      default:\n        {\n          annotation = this.readPdfAnno(page, subType, annotationPtr, index);\n        }\n        break;\n    }\n\n    return annotation;\n  }\n\n  /**\n   * Return the colour stored directly in the annotation dictionary's `/C` entry.\n   *\n   * Most PDFs created by Acrobat, Microsoft Office, LaTeX, etc. include this entry.\n   * When the key is absent (common in macOS Preview, Chrome, Drawboard) the call\n   * fails and the function returns `undefined`.\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @returns An RGBA tuple (0-255 channels) or `undefined` if no `/C` entry exists\n   *\n   * @private\n   */\n  private readAnnotationColor(\n    annotationPtr: number,\n    colorType: PdfAnnotationColorType = PdfAnnotationColorType.Color,\n  ): PdfColor | undefined {\n    const rPtr = this.memoryManager.malloc(4);\n    const gPtr = this.memoryManager.malloc(4);\n    const bPtr = this.memoryManager.malloc(4);\n\n    // colourType 0 = \"colour\" (stroke/fill); other types are interior/border\n    const ok = this.pdfiumModule.EPDFAnnot_GetColor(annotationPtr, colorType, rPtr, gPtr, bPtr);\n\n    let colour: PdfColor | undefined;\n\n    if (ok) {\n      colour = {\n        red: this.pdfiumModule.pdfium.getValue(rPtr, 'i32') & 0xff,\n        green: this.pdfiumModule.pdfium.getValue(gPtr, 'i32') & 0xff,\n        blue: this.pdfiumModule.pdfium.getValue(bPtr, 'i32') & 0xff,\n      };\n    }\n\n    this.memoryManager.free(rPtr);\n    this.memoryManager.free(gPtr);\n    this.memoryManager.free(bPtr);\n\n    return colour;\n  }\n\n  /**\n   * Get the fill/stroke colour annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose colour is being set\n   * @param colorType - which colour to get (0 = fill, 1 = stroke)\n   * @returns WebColor with hex color\n   *\n   * @private\n   */\n  private getAnnotationColor(\n    annotationPtr: number,\n    colorType: PdfAnnotationColorType = PdfAnnotationColorType.Color,\n  ): WebColor | undefined {\n    const annotationColor = this.readAnnotationColor(annotationPtr, colorType);\n\n    return annotationColor ? pdfColorToWebColor(annotationColor) : undefined;\n  }\n\n  /**\n   * Set the fill/stroke colour for a **Highlight / Underline / StrikeOut / Squiggly** markup annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose colour is being set\n   * @param webAlphaColor - WebAlphaColor with hex color and opacity (0-1)\n   * @param shouldClearAP - whether to clear the /AP entry\n   * @param which - which colour to set (0 = fill, 1 = stroke)\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private setAnnotationColor(\n    annotationPtr: number,\n    webColor: WebColor,\n    colorType: PdfAnnotationColorType = PdfAnnotationColorType.Color,\n  ): boolean {\n    const pdfColor = webColorToPdfColor(webColor);\n\n    return this.pdfiumModule.EPDFAnnot_SetColor(\n      annotationPtr,\n      colorType,\n      pdfColor.red & 0xff,\n      pdfColor.green & 0xff,\n      pdfColor.blue & 0xff,\n    );\n  }\n\n  /**\n   * Get the opacity of the annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose opacity is being set\n   * @returns opacity (0-1)\n   *\n   * @private\n   */\n  private getAnnotationOpacity(annotationPtr: number): number {\n    const opacityPtr = this.memoryManager.malloc(4);\n    const ok = this.pdfiumModule.EPDFAnnot_GetOpacity(annotationPtr, opacityPtr);\n    const opacity = ok ? this.pdfiumModule.pdfium.getValue(opacityPtr, 'i32') : 255;\n    this.memoryManager.free(opacityPtr);\n    return pdfAlphaToWebOpacity(opacity);\n  }\n\n  /**\n   * Set the opacity of the annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose opacity is being set\n   * @param opacity - opacity (0-1)\n   * @returns true on success\n   *\n   * @private\n   */\n  private setAnnotationOpacity(annotationPtr: number, opacity: number): boolean {\n    const pdfOpacity = webOpacityToPdfAlpha(opacity);\n    return this.pdfiumModule.EPDFAnnot_SetOpacity(annotationPtr, pdfOpacity & 0xff);\n  }\n\n  /**\n   * Fetch the `/Q` text-alignment value from a **FreeText** annotation.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @returns `PdfTextAlignment`\n   */\n  private getAnnotationTextAlignment(annotationPtr: number): PdfTextAlignment {\n    return this.pdfiumModule.EPDFAnnot_GetTextAlignment(annotationPtr);\n  }\n\n  /**\n   * Write the `/Q` text-alignment value into a **FreeText** annotation\n   * and clear the existing appearance stream so it can be regenerated.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @param alignment     `PdfTextAlignment`\n   * @returns `true` on success\n   */\n  private setAnnotationTextAlignment(annotationPtr: number, alignment: PdfTextAlignment): boolean {\n    return !!this.pdfiumModule.EPDFAnnot_SetTextAlignment(annotationPtr, alignment);\n  }\n\n  /**\n   * Fetch the `/EPDF:VerticalAlignment` vertical-alignment value from a **FreeText** annotation.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @returns `PdfVerticalAlignment`\n   */\n  private getAnnotationVerticalAlignment(annotationPtr: number): PdfVerticalAlignment {\n    return this.pdfiumModule.EPDFAnnot_GetVerticalAlignment(annotationPtr);\n  }\n\n  /**\n   * Write the `/EPDF:VerticalAlignment` vertical-alignment value into a **FreeText** annotation\n   * and clear the existing appearance stream so it can be regenerated.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @param alignment     `PdfVerticalAlignment`\n   * @returns `true` on success\n   */\n  private setAnnotationVerticalAlignment(\n    annotationPtr: number,\n    alignment: PdfVerticalAlignment,\n  ): boolean {\n    return !!this.pdfiumModule.EPDFAnnot_SetVerticalAlignment(annotationPtr, alignment);\n  }\n\n  /**\n   * Return the **default appearance** (font, size, colour) declared in the\n   * `/DA` string of a **FreeText** annotation.\n   *\n   * @param annotationPtr  pointer to `FPDF_ANNOTATION`\n   * @returns `{ font, fontSize, color }` or `undefined` when PDFium returns false\n   *\n   * NOTE – `font` is the raw `FPDF_STANDARD_FONT` enum value that PDFium uses\n   *        (same range as the C API: 0 = Courier, 12 = ZapfDingbats, …).\n   */\n  private getAnnotationDefaultAppearance(\n    annotationPtr: number,\n  ): { fontFamily: PdfStandardFont; fontSize: number; fontColor: WebColor } | undefined {\n    const fontPtr = this.memoryManager.malloc(4);\n    const sizePtr = this.memoryManager.malloc(4);\n    const rPtr = this.memoryManager.malloc(4);\n    const gPtr = this.memoryManager.malloc(4);\n    const bPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetDefaultAppearance(\n      annotationPtr,\n      fontPtr,\n      sizePtr,\n      rPtr,\n      gPtr,\n      bPtr,\n    );\n\n    if (!ok) {\n      [fontPtr, sizePtr, rPtr, gPtr, bPtr].forEach((p) => this.memoryManager.free(p));\n      return; // undefined – caller decides what to do\n    }\n\n    const pdf = this.pdfiumModule.pdfium;\n    const font = pdf.getValue(fontPtr, 'i32');\n    const fontSize = pdf.getValue(sizePtr, 'float');\n    const red = pdf.getValue(rPtr, 'i32') & 0xff;\n    const green = pdf.getValue(gPtr, 'i32') & 0xff;\n    const blue = pdf.getValue(bPtr, 'i32') & 0xff;\n\n    [fontPtr, sizePtr, rPtr, gPtr, bPtr].forEach((p) => this.memoryManager.free(p));\n\n    return {\n      fontFamily: font,\n      fontSize,\n      fontColor: pdfColorToWebColor({ red, green, blue }),\n    };\n  }\n\n  /**\n   * Write a **default appearance** (`/DA`) into a FreeText annotation.\n   *\n   * @param annotationPtr pointer to `FPDF_ANNOTATION`\n   * @param font          `FPDF_STANDARD_FONT` enum value\n   * @param fontSize      size in points (≥ 0)\n   * @param color         CSS-style `#rrggbb` string (alpha ignored)\n   * @returns `true` on success\n   */\n  private setAnnotationDefaultAppearance(\n    annotationPtr: number,\n    font: PdfStandardFont,\n    fontSize: number,\n    color: WebColor,\n  ): boolean {\n    const { red, green, blue } = webColorToPdfColor(color); // 0-255 ints\n\n    return !!this.pdfiumModule.EPDFAnnot_SetDefaultAppearance(\n      annotationPtr,\n      font,\n      fontSize,\n      red & 0xff,\n      green & 0xff,\n      blue & 0xff,\n    );\n  }\n\n  /**\n   * Border‐style + width helper\n   *\n   * Tries the new PDFium helper `EPDFAnnot_GetBorderStyle()` (patch series\n   * 9 July 2025).\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, style, width }`\n   *          • `ok`     – `true` when the call succeeded\n   *          • `style`  – `PdfAnnotationBorderStyle` enum\n   *          • `width`  – stroke-width in points (defaults to 0 pt)\n   */\n  private getBorderStyle(annotationPtr: number): {\n    ok: boolean;\n    style: PdfAnnotationBorderStyle;\n    width: number;\n  } {\n    /* 1 ── allocate tmp storage for the returned width ─────────────── */\n    const widthPtr = this.memoryManager.malloc(4);\n    let width = 0;\n    let style: PdfAnnotationBorderStyle = PdfAnnotationBorderStyle.UNKNOWN;\n    let ok = false;\n\n    style = this.pdfiumModule.EPDFAnnot_GetBorderStyle(annotationPtr, widthPtr);\n    width = this.pdfiumModule.pdfium.getValue(widthPtr, 'float');\n    ok = style !== PdfAnnotationBorderStyle.UNKNOWN;\n    this.memoryManager.free(widthPtr);\n    return { ok, style, width };\n  }\n\n  private setBorderStyle(\n    annotationPtr: number,\n    style: PdfAnnotationBorderStyle,\n    width: number,\n  ): boolean {\n    return this.pdfiumModule.EPDFAnnot_SetBorderStyle(annotationPtr, style, width);\n  }\n\n  /**\n   * Get the icon of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @returns `PdfAnnotationIcon`\n   */\n  private getAnnotationIcon(annotationPtr: number): PdfAnnotationIcon {\n    return this.pdfiumModule.EPDFAnnot_GetIcon(annotationPtr);\n  }\n\n  /**\n   * Set the icon of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param icon - `PdfAnnotationIcon`\n   * @returns `true` on success\n   */\n  private setAnnotationIcon(annotationPtr: number, icon: PdfAnnotationIcon): boolean {\n    return this.pdfiumModule.EPDFAnnot_SetIcon(annotationPtr, icon);\n  }\n\n  /**\n   * Border-effect (“cloudy”) helper\n   *\n   * Calls the new PDFium function `EPDFAnnot_GetBorderEffect()` (July 2025).\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, intensity }`\n   *          • `ok`        – `true` when the annotation *does* have a\n   *                          valid cloudy-border effect\n   *          • `intensity` – radius/intensity value (0 when `ok` is false)\n   */\n  private getBorderEffect(annotationPtr: number): { ok: boolean; intensity: number } {\n    const intensityPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetBorderEffect(annotationPtr, intensityPtr);\n\n    const intensity = ok ? this.pdfiumModule.pdfium.getValue(intensityPtr, 'float') : 0;\n\n    this.memoryManager.free(intensityPtr);\n    return { ok, intensity };\n  }\n\n  /**\n   * Rectangle-differences helper ( /RD array on Square / Circle annots )\n   *\n   * Calls `EPDFAnnot_GetRectangleDifferences()` introduced in July 2025.\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, left, top, right, bottom }`\n   *          • `ok`     – `true` when the annotation *has* an /RD entry\n   *          • the four floats are 0 when `ok` is false\n   */\n  private getRectangleDifferences(annotationPtr: number): {\n    ok: boolean;\n    left: number;\n    top: number;\n    right: number;\n    bottom: number;\n  } {\n    /* tmp storage ─────────────────────────────────────────── */\n    const lPtr = this.memoryManager.malloc(4);\n    const tPtr = this.memoryManager.malloc(4);\n    const rPtr = this.memoryManager.malloc(4);\n    const bPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetRectangleDifferences(\n      annotationPtr,\n      lPtr,\n      tPtr,\n      rPtr,\n      bPtr,\n    );\n\n    const pdf = this.pdfiumModule.pdfium;\n    const left = pdf.getValue(lPtr, 'float');\n    const top = pdf.getValue(tPtr, 'float');\n    const right = pdf.getValue(rPtr, 'float');\n    const bottom = pdf.getValue(bPtr, 'float');\n\n    /* cleanup ─────────────────────────────────────────────── */\n    this.memoryManager.free(lPtr);\n    this.memoryManager.free(tPtr);\n    this.memoryManager.free(rPtr);\n    this.memoryManager.free(bPtr);\n\n    return { ok, left, top, right, bottom };\n  }\n\n  /**\n   * Get the date of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param key - 'M' for modified date, 'CreationDate' for creation date\n   * @returns `Date` or `undefined` when PDFium can't read the date\n   */\n  private getAnnotationDate(annotationPtr: number, key: 'M' | 'CreationDate'): Date | undefined {\n    const raw = this.getAnnotString(annotationPtr, key);\n    return raw ? pdfDateToDate(raw) : undefined;\n  }\n\n  /**\n   * Set the date of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param key - 'M' for modified date, 'CreationDate' for creation date\n   * @param date - `Date` to set\n   * @returns `true` on success\n   */\n  private setAnnotationDate(annotationPtr: number, key: 'M' | 'CreationDate', date: Date): boolean {\n    const raw = dateToPdfDate(date);\n    return this.setAnnotString(annotationPtr, key, raw);\n  }\n\n  /**\n   * Get the date of the attachment\n   *\n   * @param attachmentPtr - pointer to an `FPDF_ATTACHMENT`\n   * @param key - 'ModDate' for modified date, 'CreationDate' for creation date\n   * @returns `Date` or `undefined` when PDFium can't read the date\n   */\n  private getAttachmentDate(\n    attachmentPtr: number,\n    key: 'ModDate' | 'CreationDate',\n  ): Date | undefined {\n    const raw = this.getAttachmentString(attachmentPtr, key);\n    return raw ? pdfDateToDate(raw) : undefined;\n  }\n\n  /**\n   * Set the date of the attachment\n   *\n   * @param attachmentPtr - pointer to an `FPDF_ATTACHMENT`\n   * @param key - 'ModDate' for modified date, 'CreationDate' for creation date\n   * @param date - `Date` to set\n   * @returns `true` on success\n   */\n  private setAttachmentDate(\n    attachmentPtr: number,\n    key: 'ModDate' | 'CreationDate',\n    date: Date,\n  ): boolean {\n    const raw = dateToPdfDate(date);\n    return this.setAttachmentString(attachmentPtr, key, raw);\n  }\n\n  /**\n   * Dash-pattern helper ( /BS → /D array, dashed borders only )\n   *\n   * Uses the two new PDFium helpers:\n   *   • `EPDFAnnot_GetBorderDashPatternCount`\n   *   • `EPDFAnnot_GetBorderDashPattern`\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, pattern }`\n   *          • `ok`       – `true` when the annot is dashed *and* the array\n   *                          was retrieved successfully\n   *          • `pattern`  – numeric array of dash/space lengths (empty when `ok` is false)\n   */\n  private getBorderDashPattern(annotationPtr: number): { ok: boolean; pattern: number[] } {\n    const count = this.pdfiumModule.EPDFAnnot_GetBorderDashPatternCount(annotationPtr);\n    if (count === 0) {\n      return { ok: false, pattern: [] };\n    }\n\n    /* allocate `count` floats on the WASM heap */\n    const arrPtr = this.memoryManager.malloc(4 * count);\n    const okNative = !!this.pdfiumModule.EPDFAnnot_GetBorderDashPattern(\n      annotationPtr,\n      arrPtr,\n      count,\n    );\n\n    /* copy out */\n    const pattern: number[] = [];\n    if (okNative) {\n      const pdf = this.pdfiumModule.pdfium;\n      for (let i = 0; i < count; i++) {\n        pattern.push(pdf.getValue(arrPtr + 4 * i, 'float'));\n      }\n    }\n\n    this.memoryManager.free(arrPtr);\n    return { ok: okNative, pattern };\n  }\n\n  /**\n   * Write the /BS /D dash pattern array for an annotation border.\n   *\n   * @param annotationPtr Pointer to FPDF_ANNOTATION\n   * @param pattern       Array of dash/space lengths in *points* (e.g. [3, 2])\n   *                      Empty array clears the pattern (solid line).\n   * @returns true on success\n   *\n   * @private\n   */\n  private setBorderDashPattern(annotationPtr: number, pattern: number[]): boolean {\n    // Empty → clear the pattern (PDF spec: no /D = solid)\n    if (!pattern || pattern.length === 0) {\n      return this.pdfiumModule.EPDFAnnot_SetBorderDashPattern(annotationPtr, 0, 0);\n    }\n\n    // Validate and sanitize numbers (must be positive floats, spec allows 1–8 numbers typically)\n    const clean = pattern.map((n) => (Number.isFinite(n) && n > 0 ? n : 0)).filter((n) => n > 0);\n    if (clean.length === 0) {\n      // nothing valid → treat as clear\n      return this.pdfiumModule.EPDFAnnot_SetBorderDashPattern(annotationPtr, 0, 0);\n    }\n\n    const bytes = 4 * clean.length;\n    const bufPtr = this.memoryManager.malloc(bytes);\n    for (let i = 0; i < clean.length; i++) {\n      this.pdfiumModule.pdfium.setValue(bufPtr + 4 * i, clean[i], 'float');\n    }\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_SetBorderDashPattern(\n      annotationPtr,\n      bufPtr,\n      clean.length,\n    );\n\n    this.memoryManager.free(bufPtr);\n    return ok;\n  }\n\n  /**\n   * Return the `/LE` array (start/end line-ending styles) for a LINE / POLYLINE annot.\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @returns `{ start, end }` or `undefined` when PDFium can't read them\n   *\n   * @private\n   */\n  private getLineEndings(annotationPtr: number): LineEndings | undefined {\n    const startPtr = this.memoryManager.malloc(4);\n    const endPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetLineEndings(annotationPtr, startPtr, endPtr);\n    if (!ok) {\n      this.memoryManager.free(startPtr);\n      this.memoryManager.free(endPtr);\n      return undefined;\n    }\n\n    const start = this.pdfiumModule.pdfium.getValue(startPtr, 'i32');\n    const end = this.pdfiumModule.pdfium.getValue(endPtr, 'i32');\n\n    this.memoryManager.free(startPtr);\n    this.memoryManager.free(endPtr);\n\n    return { start, end };\n  }\n\n  /**\n   * Write the `/LE` array (start/end line-ending styles) for a LINE / POLYLINE annot.\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param start - start line ending style\n   * @param end - end line ending style\n   * @returns `true` on success\n   */\n  private setLineEndings(\n    annotationPtr: number,\n    start: PdfAnnotationLineEnding,\n    end: PdfAnnotationLineEnding,\n  ): boolean {\n    return !!this.pdfiumModule.EPDFAnnot_SetLineEndings(annotationPtr, start, end);\n  }\n\n  /**\n   * Get the start and end points of a LINE / POLYLINE annot.\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param page - logical page info object (`PdfPageObject`)\n   * @returns `{ start, end }` or `undefined` when PDFium can't read them\n   */\n  private getLinePoints(page: PdfPageObject, annotationPtr: number): LinePoints | undefined {\n    const startPtr = this.memoryManager.malloc(8); // FS_POINTF (x,y floats)\n    const endPtr = this.memoryManager.malloc(8);\n\n    const ok = this.pdfiumModule.FPDFAnnot_GetLine(annotationPtr, startPtr, endPtr);\n    if (!ok) {\n      this.memoryManager.free(startPtr);\n      this.memoryManager.free(endPtr);\n      return undefined;\n    }\n\n    const pdf = this.pdfiumModule.pdfium;\n\n    const sx = pdf.getValue(startPtr + 0, 'float');\n    const sy = pdf.getValue(startPtr + 4, 'float');\n    const ex = pdf.getValue(endPtr + 0, 'float');\n    const ey = pdf.getValue(endPtr + 4, 'float');\n\n    this.memoryManager.free(startPtr);\n    this.memoryManager.free(endPtr);\n\n    // page -> device using the new helper (handles rotation/scale consistently)\n    const start = this.convertPagePointToDevicePoint(page, { x: sx, y: sy });\n    const end = this.convertPagePointToDevicePoint(page, { x: ex, y: ey });\n\n    return { start, end };\n  }\n\n  /**\n   * Set the two end‑points of a **Line** annotation\n   * by writing a new /L array `[ x1 y1 x2 y2 ]`.\n   * @param page - logical page info object (`PdfPageObject`)\n   * @param annotPtr - pointer to the annotation whose line points are needed\n   * @param start - start point\n   * @param end - end point\n   * @returns true on success\n   */\n  private setLinePoints(\n    page: PdfPageObject,\n    annotPtr: number,\n    start: Position,\n    end: Position,\n  ): boolean {\n    const p1 = this.convertDevicePointToPagePoint(page, start);\n    const p2 = this.convertDevicePointToPagePoint(page, end);\n\n    if (!p1 || !p2) return false;\n\n    // pack as two FS_POINTF (x,y floats)\n    const buf = this.memoryManager.malloc(16);\n    const pdf = this.pdfiumModule.pdfium;\n    pdf.setValue(buf + 0, p1.x, 'float');\n    pdf.setValue(buf + 4, p1.y, 'float');\n    pdf.setValue(buf + 8, p2.x, 'float');\n    pdf.setValue(buf + 12, p2.y, 'float');\n\n    const ok = this.pdfiumModule.EPDFAnnot_SetLine(annotPtr, buf, buf + 8);\n    this.memoryManager.free(buf);\n    return !!ok;\n  }\n\n  /**\n   * Read `/QuadPoints` from any annotation and convert each quadrilateral to\n   * device-space coordinates.\n   *\n   * The four points are returned in natural reading order:\n   *   `p1 → p2` (top edge) and `p4 → p3` (bottom edge).\n   * This preserves the true shape for rotated / skewed text, whereas callers\n   * that only need axis-aligned boxes can collapse each quad themselves.\n   *\n   * @param page          - logical page info object (`PdfPageObject`)\n   * @param annotationPtr - pointer to the annotation whose quads are needed\n   * @returns Array of `Rect` objects (`[]` if the annotation has no quads)\n   *\n   * @private\n   */\n  private getQuadPointsAnno(page: PdfPageObject, annotationPtr: number): Rect[] {\n    const quadCount = this.pdfiumModule.FPDFAnnot_CountAttachmentPoints(annotationPtr);\n    if (quadCount === 0) return [];\n\n    const FS_QUADPOINTSF_SIZE = 8 * 4; // eight floats, 32 bytes\n    const quads: Quad[] = [];\n\n    for (let qi = 0; qi < quadCount; qi++) {\n      const quadPtr = this.memoryManager.malloc(FS_QUADPOINTSF_SIZE);\n\n      const ok = this.pdfiumModule.FPDFAnnot_GetAttachmentPoints(annotationPtr, qi, quadPtr);\n\n      if (ok) {\n        // read the eight floats\n        const xs: number[] = [];\n        const ys: number[] = [];\n        for (let i = 0; i < 4; i++) {\n          const base = quadPtr + i * 8; // 8 bytes per point (x+y)\n          xs.push(this.pdfiumModule.pdfium.getValue(base, 'float'));\n          ys.push(this.pdfiumModule.pdfium.getValue(base + 4, 'float'));\n        }\n\n        // convert to device-space\n        const p1 = this.convertPagePointToDevicePoint(page, { x: xs[0], y: ys[0] });\n        const p2 = this.convertPagePointToDevicePoint(page, { x: xs[1], y: ys[1] });\n        const p3 = this.convertPagePointToDevicePoint(page, { x: xs[2], y: ys[2] });\n        const p4 = this.convertPagePointToDevicePoint(page, { x: xs[3], y: ys[3] });\n\n        quads.push({ p1, p2, p3, p4 });\n      }\n\n      this.memoryManager.free(quadPtr);\n    }\n\n    return quads.map(quadToRect);\n  }\n\n  /**\n   * Set the quadrilaterals for a **Highlight / Underline / StrikeOut / Squiggly** markup annotation.\n   *\n   * @param page          - logical page info object (`PdfPageObject`)\n   * @param annotationPtr - pointer to the annotation whose quads are needed\n   * @param rects         - array of `Rect` objects (`[]` if the annotation has no quads)\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private syncQuadPointsAnno(page: PdfPageObject, annotPtr: number, rects: Rect[]): boolean {\n    const FS_QUADPOINTSF_SIZE = 8 * 4; // eight floats, 32 bytes\n    const pdf = this.pdfiumModule.pdfium;\n    const count = this.pdfiumModule.FPDFAnnot_CountAttachmentPoints(annotPtr);\n    const buf = this.memoryManager.malloc(FS_QUADPOINTSF_SIZE);\n\n    /** write one quad into `buf` in annotation space */\n    const writeQuad = (r: Rect) => {\n      const q = rectToQuad(r); // TL, TR, BR, BL\n      const p1 = this.convertDevicePointToPagePoint(page, q.p1);\n      const p2 = this.convertDevicePointToPagePoint(page, q.p2);\n      const p3 = this.convertDevicePointToPagePoint(page, q.p3); // BR\n      const p4 = this.convertDevicePointToPagePoint(page, q.p4); // BL\n\n      // PDF QuadPoints order: BL, BR, TL, TR (bottom-left, bottom-right, top-left, top-right)\n      pdf.setValue(buf + 0, p1.x, 'float'); // BL (bottom-left)\n      pdf.setValue(buf + 4, p1.y, 'float');\n\n      pdf.setValue(buf + 8, p2.x, 'float'); // BR (bottom-right)\n      pdf.setValue(buf + 12, p2.y, 'float');\n\n      pdf.setValue(buf + 16, p4.x, 'float'); // TL (top-left)\n      pdf.setValue(buf + 20, p4.y, 'float');\n\n      pdf.setValue(buf + 24, p3.x, 'float'); // TR (top-right)\n      pdf.setValue(buf + 28, p3.y, 'float');\n    };\n\n    /* ----------------------------------------------------------------------- */\n    /* 1. overwrite the quads that already exist                               */\n    const min = Math.min(count, rects.length);\n    for (let i = 0; i < min; i++) {\n      writeQuad(rects[i]);\n      if (!this.pdfiumModule.FPDFAnnot_SetAttachmentPoints(annotPtr, i, buf)) {\n        this.memoryManager.free(buf);\n        return false;\n      }\n    }\n\n    /* 2. append new quads if rects.length > count                             */\n    for (let i = count; i < rects.length; i++) {\n      writeQuad(rects[i]);\n      if (!this.pdfiumModule.FPDFAnnot_AppendAttachmentPoints(annotPtr, buf)) {\n        this.memoryManager.free(buf);\n        return false;\n      }\n    }\n\n    this.memoryManager.free(buf);\n    return true;\n  }\n\n  /**\n   * Redact text that intersects ANY of the provided **quads** (device-space).\n   * Returns `true` if the page changed. Always regenerates the page stream.\n   */\n  public redactTextInRects(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    rects: Rect[],\n    options?: PdfRedactTextOptions,\n  ): Task<boolean, PdfErrorReason> {\n    const { recurseForms = true, drawBlackBoxes = false } = options ?? {};\n\n    this.logger.debug(\n      'PDFiumEngine',\n      'Engine',\n      'redactTextInQuads',\n      doc.id,\n      page.index,\n      rects.length,\n    );\n    const label = 'RedactTextInQuads';\n    this.logger.perf('PDFiumEngine', 'Engine', label, 'Begin', `${doc.id}-${page.index}`);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf('PDFiumEngine', 'Engine', label, 'End', `${doc.id}-${page.index}`);\n      return PdfTaskHelper.reject<boolean>({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // sanitize inputs\n    const clean = (rects ?? []).filter(\n      (r) =>\n        r &&\n        Number.isFinite(r.origin?.x) &&\n        Number.isFinite(r.origin?.y) &&\n        Number.isFinite(r.size?.width) &&\n        Number.isFinite(r.size?.height) &&\n        r.size.width > 0 &&\n        r.size.height > 0,\n    );\n\n    if (clean.length === 0) {\n      this.logger.perf('PDFiumEngine', 'Engine', label, 'End', `${doc.id}-${page.index}`);\n      return PdfTaskHelper.resolve<boolean>(false);\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n\n    // pack buffer → native call\n    const { ptr, count } = this.allocFSQuadsBufferFromRects(page, clean);\n    let ok = false;\n    try {\n      // If your wrapper exposes FPDFText_RedactInQuads, call that instead.\n      ok = !!this.pdfiumModule.EPDFText_RedactInQuads(\n        pageCtx.pagePtr,\n        ptr,\n        count,\n        recurseForms ? true : false,\n        drawBlackBoxes ? true : false,\n      );\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n\n    if (ok) {\n      ok = !!this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n    }\n\n    pageCtx.disposeImmediate();\n    this.logger.perf('PDFiumEngine', 'Engine', label, 'End', `${doc.id}-${page.index}`);\n\n    return PdfTaskHelper.resolve<boolean>(!!ok);\n  }\n\n  /** Pack device-space Rects into an FS_QUADPOINTSF[] buffer (page space). */\n  private allocFSQuadsBufferFromRects(page: PdfPageObject, rects: Rect[]) {\n    const STRIDE = 32; // 8 floats × 4 bytes\n    const count = rects.length;\n    const ptr = this.memoryManager.malloc(STRIDE * count);\n    const pdf = this.pdfiumModule.pdfium;\n\n    for (let i = 0; i < count; i++) {\n      const r = rects[i];\n      const q = rectToQuad(r); // TL, TR, BR, BL (device-space)\n\n      // Convert into PAGE USER SPACE (native expects page coords)\n      const p1 = this.convertDevicePointToPagePoint(page, q.p1); // TL\n      const p2 = this.convertDevicePointToPagePoint(page, q.p2); // TR\n      const p3 = this.convertDevicePointToPagePoint(page, q.p3); // BR\n      const p4 = this.convertDevicePointToPagePoint(page, q.p4); // BL\n\n      const base = ptr + i * STRIDE;\n\n      // Keep the exact mapping you used in syncQuadPointsAnno:\n      // PDF QuadPoints order comment says BL,BR,TL,TR – and you wrote:\n      pdf.setValue(base + 0, p1.x, 'float');\n      pdf.setValue(base + 4, p1.y, 'float');\n      pdf.setValue(base + 8, p2.x, 'float');\n      pdf.setValue(base + 12, p2.y, 'float');\n      pdf.setValue(base + 16, p4.x, 'float');\n      pdf.setValue(base + 20, p4.y, 'float');\n      pdf.setValue(base + 24, p3.x, 'float');\n      pdf.setValue(base + 28, p3.y, 'float');\n    }\n\n    return { ptr, count };\n  }\n\n  /**\n   * Read ink list from annotation\n   * @param page  - logical page info object (`PdfPageObject`)\n   * @param pagePtr - pointer to the page\n   * @param annotationPtr - pointer to the annotation whose ink list is needed\n   * @returns ink list\n   */\n  private getInkList(page: PdfPageObject, annotationPtr: number): PdfInkListObject[] {\n    const inkList: PdfInkListObject[] = [];\n    const pathCount = this.pdfiumModule.FPDFAnnot_GetInkListCount(annotationPtr);\n    if (pathCount <= 0) return inkList;\n\n    const pdf = this.pdfiumModule.pdfium;\n    const POINT_STRIDE = 8; // FS_POINTF: 2 floats (x,y) => 8 bytes\n\n    for (let i = 0; i < pathCount; i++) {\n      const points: Position[] = [];\n\n      const n = this.pdfiumModule.FPDFAnnot_GetInkListPath(annotationPtr, i, 0, 0);\n      if (n > 0) {\n        const buf = this.memoryManager.malloc(n * POINT_STRIDE);\n\n        // load FS_POINTF array (page-space)\n        this.pdfiumModule.FPDFAnnot_GetInkListPath(annotationPtr, i, buf, n);\n\n        // convert each point to device-space using your helper\n        for (let j = 0; j < n; j++) {\n          const base = buf + j * POINT_STRIDE;\n          const px = pdf.getValue(base + 0, 'float');\n          const py = pdf.getValue(base + 4, 'float');\n          const d = this.convertPagePointToDevicePoint(page, { x: px, y: py });\n          points.push({ x: d.x, y: d.y });\n        }\n\n        this.memoryManager.free(buf);\n      }\n\n      inkList.push({ points });\n    }\n\n    return inkList;\n  }\n\n  /**\n   * Add ink list to annotation\n   * @param page  - logical page info object (`PdfPageObject`)\n   * @param pagePtr - pointer to the page\n   * @param annotationPtr - pointer to the annotation whose ink list is needed\n   * @param inkList - ink list array of `PdfInkListObject`\n   * @returns `true` if the operation was successful\n   */\n  private setInkList(\n    page: PdfPageObject,\n    annotationPtr: number,\n    inkList: PdfInkListObject[],\n  ): boolean {\n    const pdf = this.pdfiumModule.pdfium;\n    const POINT_STRIDE = 8; // FS_POINTF: float x, float y\n\n    for (const stroke of inkList) {\n      const n = stroke.points.length;\n      if (n === 0) continue;\n\n      const buf = this.memoryManager.malloc(n * POINT_STRIDE);\n\n      // device -> page for each vertex\n      for (let i = 0; i < n; i++) {\n        const pDev = stroke.points[i];\n        const pPage = this.convertDevicePointToPagePoint(page, pDev);\n\n        pdf.setValue(buf + i * POINT_STRIDE + 0, pPage.x, 'float');\n        pdf.setValue(buf + i * POINT_STRIDE + 4, pPage.y, 'float');\n      }\n\n      const idx = this.pdfiumModule.FPDFAnnot_AddInkStroke(annotationPtr, buf, n);\n      this.memoryManager.free(buf);\n\n      if (idx === -1) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Read pdf text annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf text annotation\n   *\n   * @private\n   */\n  private readPdfTextAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfTextAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const annoRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, annoRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const state = this.getAnnotString(annotationPtr, 'State') as PdfAnnotationState;\n    const stateModel = this.getAnnotString(annotationPtr, 'StateModel') as PdfAnnotationStateModel;\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const inReplyToId = this.getInReplyToId(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const icon = this.getAnnotationIcon(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.TEXT,\n      flags,\n      contents,\n      color: color ?? '#FFFF00',\n      opacity,\n      rect,\n      inReplyToId,\n      author,\n      modified,\n      created,\n      state,\n      stateModel,\n      icon,\n    };\n  }\n\n  /**\n   * Read pdf freetext annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf freetext annotation\n   *\n   * @private\n   */\n  private readPdfFreeTextAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfFreeTextAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const annoRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, annoRect);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const defaultStyle = this.getAnnotString(annotationPtr, 'DS');\n    const da = this.getAnnotationDefaultAppearance(annotationPtr);\n    const backgroundColor = this.getAnnotationColor(annotationPtr);\n    const textAlign = this.getAnnotationTextAlignment(annotationPtr);\n    const verticalAlign = this.getAnnotationVerticalAlignment(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const richContent = this.getAnnotRichContent(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.FREETEXT,\n      fontFamily: da?.fontFamily ?? PdfStandardFont.Unknown,\n      fontSize: da?.fontSize ?? 12,\n      fontColor: da?.fontColor ?? '#000000',\n      verticalAlign,\n      backgroundColor,\n      flags,\n      opacity,\n      textAlign,\n      defaultStyle,\n      richContent,\n      contents,\n      author,\n      modified,\n      created,\n      rect,\n    };\n  }\n\n  /**\n   * Read pdf link annotation from pdf document\n   * @param page  - pdf page infor\n   * @param docPtr - pointer to pdf document object\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf link annotation\n   *\n   * @private\n   */\n  private readPdfLinkAnno(\n    page: PdfPageObject,\n    docPtr: number,\n    annotationPtr: number,\n    index: string,\n  ): PdfLinkAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const linkPtr = this.pdfiumModule.FPDFAnnot_GetLink(annotationPtr);\n    if (!linkPtr) {\n      return;\n    }\n\n    const annoRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, annoRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    const target = this.readPdfLinkAnnoTarget(\n      docPtr,\n      () => {\n        return this.pdfiumModule.FPDFLink_GetAction(linkPtr);\n      },\n      () => {\n        return this.pdfiumModule.FPDFLink_GetDest(docPtr, linkPtr);\n      },\n    );\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.LINK,\n      flags,\n      target,\n      rect,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf widget annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param formHandle - form handle\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf widget annotation\n   *\n   * @private\n   */\n  private readPdfWidgetAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    formHandle: number,\n    index: string,\n  ): PdfWidgetAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const field = this.readPdfWidgetAnnoField(formHandle, annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.WIDGET,\n      flags,\n      rect,\n      field,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf file attachment annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf file attachment annotation\n   *\n   * @private\n   */\n  private readPdfFileAttachmentAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfFileAttachmentAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.FILEATTACHMENT,\n      flags,\n      rect,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf ink annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf ink annotation\n   *\n   * @private\n   */\n  private readPdfInkAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfInkAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const { width: strokeWidth } = this.getBorderStyle(annotationPtr);\n    const inkList = this.getInkList(page, annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const intent = this.getAnnotIntent(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.INK,\n      ...(intent && { intent }),\n      contents,\n      blendMode,\n      flags,\n      color: color ?? '#FF0000',\n      opacity,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      rect,\n      inkList,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf polygon annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf polygon annotation\n   *\n   * @private\n   */\n  private readPdfPolygonAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfPolygonAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const vertices = this.readPdfAnnoVertices(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    // ▼––– Remove redundant closing vertex for polygons ––––––––––––––––––––––\n    if (vertices.length > 1) {\n      const first = vertices[0];\n      const last = vertices[vertices.length - 1];\n      if (first.x === last.x && first.y === last.y) {\n        vertices.pop();\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.POLYGON,\n      contents,\n      flags,\n      strokeColor: strokeColor ?? '#FF0000',\n      color: interiorColor ?? 'transparent',\n      opacity,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      strokeStyle,\n      strokeDashArray,\n      rect,\n      vertices,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf polyline annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf polyline annotation\n   *\n   * @private\n   */\n  private readPdfPolylineAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfPolylineAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const vertices = this.readPdfAnnoVertices(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n    const lineEndings = this.getLineEndings(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.POLYLINE,\n      contents,\n      flags,\n      strokeColor: strokeColor ?? '#FF0000',\n      color: interiorColor ?? 'transparent',\n      opacity,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      strokeStyle,\n      strokeDashArray,\n      lineEndings,\n      rect,\n      vertices,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf line annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf line annotation\n   *\n   * @private\n   */\n  private readPdfLineAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfLineAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const linePoints = this.getLinePoints(page, annotationPtr);\n    const lineEndings = this.getLineEndings(annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.LINE,\n      flags,\n      rect,\n      contents,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      strokeStyle,\n      strokeDashArray,\n      strokeColor: strokeColor ?? '#FF0000',\n      color: interiorColor ?? 'transparent',\n      opacity,\n      linePoints: linePoints || { start: { x: 0, y: 0 }, end: { x: 0, y: 0 } },\n      lineEndings: lineEndings || {\n        start: PdfAnnotationLineEnding.None,\n        end: PdfAnnotationLineEnding.None,\n      },\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf highlight annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf highlight annotation\n   *\n   * @private\n   */\n  private readPdfHighlightAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfHighlightAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.HIGHLIGHT,\n      rect,\n      flags,\n      contents,\n      segmentRects,\n      color: color ?? '#FFFF00',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf underline annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf underline annotation\n   *\n   * @private\n   */\n  private readPdfUnderlineAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfUnderlineAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.UNDERLINE,\n      rect,\n      flags,\n      contents,\n      segmentRects,\n      color: color ?? '#FF0000',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read strikeout annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf strikeout annotation\n   *\n   * @private\n   */\n  private readPdfStrikeOutAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfStrikeOutAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.STRIKEOUT,\n      flags,\n      rect,\n      contents,\n      segmentRects,\n      color: color ?? '#FF0000',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf squiggly annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf squiggly annotation\n   *\n   * @private\n   */\n  private readPdfSquigglyAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfSquigglyAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.SQUIGGLY,\n      rect,\n      flags,\n      contents,\n      segmentRects,\n      color: color ?? '#FF0000',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf caret annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf caret annotation\n   *\n   * @private\n   */\n  private readPdfCaretAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfCaretAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.CARET,\n      rect,\n      flags,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf stamp annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf stamp annotation\n   *\n   * @private\n   */\n  private readPdfStampAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfStampAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.STAMP,\n      contents,\n      rect,\n      author,\n      modified,\n      created,\n      flags,\n    };\n  }\n\n  /**\n   * Read pdf object in pdf page\n   * @param pageObjectPtr  - pointer to pdf object in page\n   * @returns pdf object in page\n   *\n   * @private\n   */\n  private readPdfPageObject(pageObjectPtr: number) {\n    const type = this.pdfiumModule.FPDFPageObj_GetType(pageObjectPtr) as PdfPageObjectType;\n    switch (type) {\n      case PdfPageObjectType.PATH:\n        return this.readPathObject(pageObjectPtr);\n      case PdfPageObjectType.IMAGE:\n        return this.readImageObject(pageObjectPtr);\n      case PdfPageObjectType.FORM:\n        return this.readFormObject(pageObjectPtr);\n    }\n  }\n\n  /**\n   * Read pdf path object\n   * @param pathObjectPtr  - pointer to pdf path object in page\n   * @returns pdf path object\n   *\n   * @private\n   */\n  private readPathObject(pathObjectPtr: number): PdfPathObject {\n    const segmentCount = this.pdfiumModule.FPDFPath_CountSegments(pathObjectPtr);\n\n    const leftPtr = this.memoryManager.malloc(4);\n    const bottomPtr = this.memoryManager.malloc(4);\n    const rightPtr = this.memoryManager.malloc(4);\n    const topPtr = this.memoryManager.malloc(4);\n    this.pdfiumModule.FPDFPageObj_GetBounds(pathObjectPtr, leftPtr, bottomPtr, rightPtr, topPtr);\n    const left = this.pdfiumModule.pdfium.getValue(leftPtr, 'float');\n    const bottom = this.pdfiumModule.pdfium.getValue(bottomPtr, 'float');\n    const right = this.pdfiumModule.pdfium.getValue(rightPtr, 'float');\n    const top = this.pdfiumModule.pdfium.getValue(topPtr, 'float');\n    const bounds = { left, bottom, right, top };\n    this.memoryManager.free(leftPtr);\n    this.memoryManager.free(bottomPtr);\n    this.memoryManager.free(rightPtr);\n    this.memoryManager.free(topPtr);\n    const segments: PdfSegmentObject[] = [];\n    for (let i = 0; i < segmentCount; i++) {\n      const segment = this.readPdfSegment(pathObjectPtr, i);\n      segments.push(segment);\n    }\n\n    const matrix = this.readPdfPageObjectTransformMatrix(pathObjectPtr);\n\n    return {\n      type: PdfPageObjectType.PATH,\n      bounds,\n      segments,\n      matrix,\n    };\n  }\n\n  /**\n   * Read segment of pdf path object\n   * @param annotationObjectPtr - pointer to pdf path object\n   * @param segmentIndex - index of segment\n   * @returns pdf segment in pdf path\n   *\n   * @private\n   */\n  private readPdfSegment(annotationObjectPtr: number, segmentIndex: number): PdfSegmentObject {\n    const segmentPtr = this.pdfiumModule.FPDFPath_GetPathSegment(annotationObjectPtr, segmentIndex);\n    const segmentType = this.pdfiumModule.FPDFPathSegment_GetType(segmentPtr);\n    const isClosed = this.pdfiumModule.FPDFPathSegment_GetClose(segmentPtr);\n    const pointXPtr = this.memoryManager.malloc(4);\n    const pointYPtr = this.memoryManager.malloc(4);\n    this.pdfiumModule.FPDFPathSegment_GetPoint(segmentPtr, pointXPtr, pointYPtr);\n    const pointX = this.pdfiumModule.pdfium.getValue(pointXPtr, 'float');\n    const pointY = this.pdfiumModule.pdfium.getValue(pointYPtr, 'float');\n    this.memoryManager.free(pointXPtr);\n    this.memoryManager.free(pointYPtr);\n\n    return {\n      type: segmentType,\n      point: { x: pointX, y: pointY },\n      isClosed,\n    };\n  }\n\n  /**\n   * Read pdf image object from pdf document\n   * @param pageObjectPtr  - pointer to pdf image object in page\n   * @returns pdf image object\n   *\n   * @private\n   */\n  private readImageObject(imageObjectPtr: number): PdfImageObject {\n    const bitmapPtr = this.pdfiumModule.FPDFImageObj_GetBitmap(imageObjectPtr);\n    const bitmapBufferPtr = this.pdfiumModule.FPDFBitmap_GetBuffer(bitmapPtr);\n    const bitmapWidth = this.pdfiumModule.FPDFBitmap_GetWidth(bitmapPtr);\n    const bitmapHeight = this.pdfiumModule.FPDFBitmap_GetHeight(bitmapPtr);\n    const format = this.pdfiumModule.FPDFBitmap_GetFormat(bitmapPtr) as BitmapFormat;\n\n    const pixelCount = bitmapWidth * bitmapHeight;\n    const bytesPerPixel = 4;\n    const array = new Uint8ClampedArray(pixelCount * bytesPerPixel);\n    for (let i = 0; i < pixelCount; i++) {\n      switch (format) {\n        case BitmapFormat.Bitmap_BGR:\n          {\n            const blue = this.pdfiumModule.pdfium.getValue(bitmapBufferPtr + i * 3, 'i8');\n            const green = this.pdfiumModule.pdfium.getValue(bitmapBufferPtr + i * 3 + 1, 'i8');\n            const red = this.pdfiumModule.pdfium.getValue(bitmapBufferPtr + i * 3 + 2, 'i8');\n            array[i * bytesPerPixel] = red;\n            array[i * bytesPerPixel + 1] = green;\n            array[i * bytesPerPixel + 2] = blue;\n            array[i * bytesPerPixel + 3] = 100;\n          }\n          break;\n      }\n    }\n\n    const imageData = new ImageData(array, bitmapWidth, bitmapHeight);\n    const matrix = this.readPdfPageObjectTransformMatrix(imageObjectPtr);\n\n    return {\n      type: PdfPageObjectType.IMAGE,\n      imageData,\n      matrix,\n    };\n  }\n\n  /**\n   * Read form object from pdf document\n   * @param formObjectPtr  - pointer to pdf form object in page\n   * @returns pdf form object\n   *\n   * @private\n   */\n  private readFormObject(formObjectPtr: number): PdfFormObject {\n    const objectCount = this.pdfiumModule.FPDFFormObj_CountObjects(formObjectPtr);\n    const objects: (PdfFormObject | PdfImageObject | PdfPathObject)[] = [];\n    for (let i = 0; i < objectCount; i++) {\n      const pageObjectPtr = this.pdfiumModule.FPDFFormObj_GetObject(formObjectPtr, i);\n      const pageObj = this.readPdfPageObject(pageObjectPtr);\n      if (pageObj) {\n        objects.push(pageObj);\n      }\n    }\n    const matrix = this.readPdfPageObjectTransformMatrix(formObjectPtr);\n\n    return {\n      type: PdfPageObjectType.FORM,\n      objects,\n      matrix,\n    };\n  }\n\n  /**\n   * Read pdf object in pdf page\n   * @param pageObjectPtr  - pointer to pdf object in page\n   * @returns pdf object in page\n   *\n   * @private\n   */\n  private readPdfPageObjectTransformMatrix(pageObjectPtr: number): PdfTransformMatrix {\n    const matrixPtr = this.memoryManager.malloc(4 * 6);\n    if (this.pdfiumModule.FPDFPageObj_GetMatrix(pageObjectPtr, matrixPtr)) {\n      const a = this.pdfiumModule.pdfium.getValue(matrixPtr, 'float');\n      const b = this.pdfiumModule.pdfium.getValue(matrixPtr + 4, 'float');\n      const c = this.pdfiumModule.pdfium.getValue(matrixPtr + 8, 'float');\n      const d = this.pdfiumModule.pdfium.getValue(matrixPtr + 12, 'float');\n      const e = this.pdfiumModule.pdfium.getValue(matrixPtr + 16, 'float');\n      const f = this.pdfiumModule.pdfium.getValue(matrixPtr + 20, 'float');\n      this.memoryManager.free(matrixPtr);\n\n      return { a, b, c, d, e, f };\n    }\n\n    this.memoryManager.free(matrixPtr);\n\n    return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 };\n  }\n\n  /**\n   * Read contents of a stamp annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns contents of the stamp annotation\n   *\n   * @private\n   */\n  private readStampAnnotationContents(annotationPtr: number): PdfStampAnnoObjectContents {\n    const contents: PdfStampAnnoObjectContents = [];\n\n    const objectCount = this.pdfiumModule.FPDFAnnot_GetObjectCount(annotationPtr);\n    for (let i = 0; i < objectCount; i++) {\n      const annotationObjectPtr = this.pdfiumModule.FPDFAnnot_GetObject(annotationPtr, i);\n\n      const pageObj = this.readPdfPageObject(annotationObjectPtr);\n      if (pageObj) {\n        contents.push(pageObj);\n      }\n    }\n\n    return contents;\n  }\n\n  /**\n   * Return the stroke-width declared in the annotation’s /Border or /BS entry.\n   * Falls back to 1 pt when nothing is defined.\n   *\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns stroke-width\n   *\n   * @private\n   */\n  private getStrokeWidth(annotationPtr: number): number {\n    // FPDFAnnot_GetBorder(annot, &hRadius, &vRadius, &borderWidth)\n    const hPtr = this.memoryManager.malloc(4);\n    const vPtr = this.memoryManager.malloc(4);\n    const wPtr = this.memoryManager.malloc(4);\n\n    const ok = this.pdfiumModule.FPDFAnnot_GetBorder(annotationPtr, hPtr, vPtr, wPtr);\n    const width = ok ? this.pdfiumModule.pdfium.getValue(wPtr, 'float') : 1; // default 1 pt\n\n    this.memoryManager.free(hPtr);\n    this.memoryManager.free(vPtr);\n    this.memoryManager.free(wPtr);\n\n    return width;\n  }\n\n  /**\n   * Fetches the `/F` flag bit-field from an annotation.\n   *\n   * @param annotationPtr pointer to an `FPDF_ANNOTATION`\n   * @returns `{ raw, flags }`\n   *          • `raw`   – the 32-bit integer returned by PDFium\n   *          • `flags` – object with individual booleans\n   */\n  private getAnnotationFlags(annotationPtr: number): PdfAnnotationFlagName[] {\n    const rawFlags = this.pdfiumModule.FPDFAnnot_GetFlags(annotationPtr); // number\n\n    return flagsToNames(rawFlags);\n  }\n\n  private setAnnotationFlags(annotationPtr: number, flags: PdfAnnotationFlagName[]): boolean {\n    const rawFlags = namesToFlags(flags);\n    return this.pdfiumModule.FPDFAnnot_SetFlags(annotationPtr, rawFlags);\n  }\n\n  /**\n   * Read circle annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf circle annotation\n   *\n   * @private\n   */\n  private readPdfCircleAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfCircleAnnoObject {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.CIRCLE,\n      flags,\n      color: interiorColor ?? 'transparent',\n      opacity,\n      contents,\n      strokeWidth,\n      strokeColor: strokeColor ?? '#FF0000',\n      strokeStyle,\n      rect,\n      author,\n      modified,\n      created,\n      ...(strokeDashArray !== undefined && { strokeDashArray }),\n    };\n  }\n\n  /**\n   * Read square annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf square annotation\n   *\n   * @private\n   */\n  private readPdfSquareAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfSquareAnnoObject {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.SQUARE,\n      flags,\n      color: interiorColor ?? 'transparent',\n      opacity,\n      contents,\n      strokeColor: strokeColor ?? '#FF0000',\n      strokeWidth,\n      strokeStyle,\n      rect,\n      author,\n      modified,\n      created,\n      ...(strokeDashArray !== undefined && { strokeDashArray }),\n    };\n  }\n\n  /**\n   * Read basic info of unsupported pdf annotation\n   * @param page  - pdf page infor\n   * @param type - type of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf annotation\n   *\n   * @private\n   */\n  private readPdfAnno(\n    page: PdfPageObject,\n    type: PdfUnsupportedAnnoObject['type'],\n    annotationPtr: number,\n    index: string,\n  ): PdfUnsupportedAnnoObject {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      flags,\n      type,\n      rect,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Resolve `/IRT` → parent-annotation index on the same page.\n   *\n   * @param pagePtr        - pointer to FPDF_PAGE\n   * @param annotationPtr  - pointer to FPDF_ANNOTATION\n   * @returns index (`0…count-1`) or `undefined` when the annotation is *not* a reply\n   *\n   * @private\n   */\n  private getInReplyToId(annotationPtr: number): string | undefined {\n    const parentPtr = this.pdfiumModule.FPDFAnnot_GetLinkedAnnot(annotationPtr, 'IRT');\n    if (!parentPtr) return;\n\n    return this.getAnnotString(parentPtr, 'NM');\n  }\n\n  /**\n   * Set the in reply to id of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param id - the id of the parent annotation\n   * @returns `true` on success\n   */\n  private setInReplyToId(pagePtr: number, annotationPtr: number, id: string): boolean {\n    const parentPtr = this.getAnnotationByName(pagePtr, id);\n    if (!parentPtr) return false;\n\n    return this.pdfiumModule.EPDFAnnot_SetLinkedAnnot(annotationPtr, 'IRT', parentPtr);\n  }\n\n  /**\n   * Fetch a string value (`/T`, `/M`, `/State`, …) from an annotation.\n   *\n   * @returns decoded UTF-8 string or `undefined` when the key is absent\n   *\n   * @private\n   */\n  private getAnnotString(annotationPtr: number, key: string): string | undefined {\n    const len = this.pdfiumModule.FPDFAnnot_GetStringValue(annotationPtr, key, 0, 0);\n    if (len === 0) return;\n\n    const bytes = (len + 1) * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.FPDFAnnot_GetStringValue(annotationPtr, key, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n    this.memoryManager.free(ptr);\n\n    return value || undefined;\n  }\n\n  /**\n   * Get a string value (`/T`, `/M`, `/State`, …) from an attachment.\n   *\n   * @returns decoded UTF-8 string or `undefined` when the key is absent\n   *\n   * @private\n   */\n  private getAttachmentString(attachmentPtr: number, key: string): string | undefined {\n    const len = this.pdfiumModule.FPDFAttachment_GetStringValue(attachmentPtr, key, 0, 0);\n    if (len === 0) return;\n\n    const bytes = (len + 1) * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.FPDFAttachment_GetStringValue(attachmentPtr, key, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n    this.memoryManager.free(ptr);\n\n    return value || undefined;\n  }\n\n  /**\n   * Get a number value (`/Size`) from an attachment.\n   *\n   * @returns number or `null` when the key is absent\n   *\n   * @private\n   */\n  private getAttachmentNumber(attachmentPtr: number, key: string): number | undefined {\n    const outPtr = this.memoryManager.malloc(4); // int32\n    try {\n      const ok = this.pdfiumModule.EPDFAttachment_GetIntegerValue(\n        attachmentPtr,\n        key, // FPDF_BYTESTRING → ASCII JS string is fine in your glue\n        outPtr,\n      );\n      if (!ok) return undefined;\n      // Treat as unsigned to avoid negative values if >2GB (rare on wasm, but harmless)\n      return this.pdfiumModule.pdfium.getValue(outPtr, 'i32') >>> 0;\n    } finally {\n      this.memoryManager.free(outPtr);\n    }\n  }\n\n  /**\n   * Get custom data of the annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns custom data of the annotation\n   *\n   * @private\n   */\n  private getAnnotCustom(annotationPtr: number): any {\n    const custom = this.getAnnotString(annotationPtr, 'EPDFCustom');\n    if (!custom) return;\n\n    try {\n      return JSON.parse(custom);\n    } catch (error) {\n      console.warn('Failed to parse annotation custom data as JSON:', error);\n      console.warn('Invalid JSON string:', custom);\n      return undefined;\n    }\n  }\n\n  /**\n   * Sets custom data for an annotation by safely stringifying and storing JSON\n   * @private\n   */\n  private setAnnotCustom(annotationPtr: number, data: any): boolean {\n    if (data === undefined || data === null) {\n      // Clear the custom data by setting empty string\n      return this.setAnnotString(annotationPtr, 'EPDFCustom', '');\n    }\n\n    try {\n      const jsonString = JSON.stringify(data);\n      return this.setAnnotString(annotationPtr, 'EPDFCustom', jsonString);\n    } catch (error) {\n      console.warn('Failed to stringify annotation custom data as JSON:', error);\n      console.warn('Invalid data object:', data);\n      return false;\n    }\n  }\n\n  /**\n   * Fetches the /IT (Intent) name from an annotation as a UTF-8 JS string.\n   *\n   * Mirrors getAnnotString(): calls EPDFAnnot_GetIntent twice (length probe + copy).\n   * Returns `undefined` if no intent present.\n   */\n  private getAnnotIntent(annotationPtr: number): string | undefined {\n    const len = this.pdfiumModule.EPDFAnnot_GetIntent(annotationPtr, 0, 0);\n    if (len === 0) return;\n\n    const codeUnits = len + 1;\n    const bytes = codeUnits * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.EPDFAnnot_GetIntent(annotationPtr, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n\n    this.memoryManager.free(ptr);\n\n    return value && value !== 'undefined' ? value : undefined;\n  }\n\n  /**\n   * Write the `/IT` (Intent) name into an annotation dictionary.\n   *\n   * Mirrors EPDFAnnot_SetIntent in PDFium (expects a UTF‑8 FPDF_BYTESTRING).\n   *\n   * @param annotationPtr Pointer returned by FPDFPage_GetAnnot\n   * @param intent        Name without leading slash, e.g. `\"PolygonCloud\"`\n   *                      A leading “/” will be stripped for convenience.\n   * @returns             true on success, false otherwise\n   */\n  private setAnnotIntent(annotationPtr: number, intent: string): boolean {\n    return this.pdfiumModule.EPDFAnnot_SetIntent(annotationPtr, intent);\n  }\n\n  /**\n   * Returns the rich‑content string stored in the annotation’s `/RC` entry.\n   *\n   * Works like `getAnnotIntent()`: first probe for length, then copy.\n   * `undefined` when the annotation has no rich content.\n   */\n  private getAnnotRichContent(annotationPtr: number): string | undefined {\n    // First call → number of UTF‑16 code units (excluding NUL)\n    const len = this.pdfiumModule.EPDFAnnot_GetRichContent(annotationPtr, 0, 0);\n    if (len === 0) return;\n\n    // +1 for the implicit NUL added by PDFium → bytes = 2 × code units\n    const codeUnits = len + 1;\n    const bytes = codeUnits * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.EPDFAnnot_GetRichContent(annotationPtr, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n\n    this.memoryManager.free(ptr);\n\n    return value || undefined;\n  }\n\n  /**\n   * Get annotation by name\n   * @param pagePtr - pointer to pdf page object\n   * @param name - name of annotation\n   * @returns pointer to pdf annotation\n   *\n   * @private\n   */\n  private getAnnotationByName(pagePtr: number, name: string): number | undefined {\n    return this.withWString(name, (wNamePtr) => {\n      return this.pdfiumModule.EPDFPage_GetAnnotByName(pagePtr, wNamePtr);\n    });\n  }\n\n  /**\n   * Remove annotation by name\n   * @param pagePtr - pointer to pdf page object\n   * @param name - name of annotation\n   * @returns true on success\n   *\n   * @private\n   */\n  private removeAnnotationByName(pagePtr: number, name: string): boolean {\n    return this.withWString(name, (wNamePtr) => {\n      return this.pdfiumModule.EPDFPage_RemoveAnnotByName(pagePtr, wNamePtr);\n    });\n  }\n\n  /**\n   * Set a string value (`/T`, `/M`, `/State`, …) to an annotation.\n   *\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private setAnnotString(annotationPtr: number, key: string, value: string): boolean {\n    return this.withWString(value, (wValPtr) => {\n      return this.pdfiumModule.FPDFAnnot_SetStringValue(annotationPtr, key, wValPtr);\n    });\n  }\n\n  /**\n   * Set a string value (`/T`, `/M`, `/State`, …) to an attachment.\n   *\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private setAttachmentString(attachmentPtr: number, key: string, value: string): boolean {\n    return this.withWString(value, (wValPtr) => {\n      // FPDFAttachment_SetStringValue writes into /Params dictionary\n      return this.pdfiumModule.FPDFAttachment_SetStringValue(attachmentPtr, key, wValPtr);\n    });\n  }\n\n  /**\n   * Read vertices of pdf annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns vertices of pdf annotation\n   *\n   * @private\n   */\n  private readPdfAnnoVertices(page: PdfPageObject, annotationPtr: number): Position[] {\n    const vertices: Position[] = [];\n    const count = this.pdfiumModule.FPDFAnnot_GetVertices(annotationPtr, 0, 0);\n    const pointMemorySize = 8;\n    const pointsPtr = this.memoryManager.malloc(count * pointMemorySize);\n    this.pdfiumModule.FPDFAnnot_GetVertices(annotationPtr, pointsPtr, count);\n    for (let i = 0; i < count; i++) {\n      const pointX = this.pdfiumModule.pdfium.getValue(pointsPtr + i * pointMemorySize, 'float');\n      const pointY = this.pdfiumModule.pdfium.getValue(\n        pointsPtr + i * pointMemorySize + 4,\n        'float',\n      );\n\n      const { x, y } = this.convertPagePointToDevicePoint(page, {\n        x: pointX,\n        y: pointY,\n      });\n      const last = vertices[vertices.length - 1];\n      if (!last || last.x !== x || last.y !== y) {\n        vertices.push({ x, y });\n      }\n    }\n    this.memoryManager.free(pointsPtr);\n\n    return vertices;\n  }\n\n  /**\n   * Sync the vertices of a polygon or polyline annotation.\n   *\n   * @param page  - pdf page infor\n   * @param annotPtr - pointer to pdf annotation\n   * @param vertices - the vertices to be set\n   * @returns true on success\n   *\n   * @private\n   */\n  private setPdfAnnoVertices(page: PdfPageObject, annotPtr: number, vertices: Position[]): boolean {\n    const pdf = this.pdfiumModule.pdfium;\n    const FS_POINTF_SIZE = 8;\n\n    const buf = this.memoryManager.malloc(FS_POINTF_SIZE * vertices.length);\n    vertices.forEach((v, i) => {\n      const pagePt = this.convertDevicePointToPagePoint(page, v);\n      pdf.setValue(buf + i * FS_POINTF_SIZE + 0, pagePt.x, 'float');\n      pdf.setValue(buf + i * FS_POINTF_SIZE + 4, pagePt.y, 'float');\n    });\n\n    const ok = this.pdfiumModule.EPDFAnnot_SetVertices(annotPtr, buf, vertices.length);\n    this.memoryManager.free(buf);\n    return ok;\n  }\n\n  /**\n   * Read the target of pdf bookmark\n   * @param docPtr - pointer to pdf document object\n   * @param getActionPtr - callback function to retrive the pointer of action\n   * @param getDestinationPtr - callback function to retrive the pointer of destination\n   * @returns target of pdf bookmark\n   *\n   * @private\n   */\n  private readPdfBookmarkTarget(\n    docPtr: number,\n    getActionPtr: () => number,\n    getDestinationPtr: () => number,\n  ): PdfLinkTarget | undefined {\n    const actionPtr = getActionPtr();\n    if (actionPtr) {\n      const action = this.readPdfAction(docPtr, actionPtr);\n\n      return {\n        type: 'action',\n        action,\n      };\n    } else {\n      const destinationPtr = getDestinationPtr();\n      if (destinationPtr) {\n        const destination = this.readPdfDestination(docPtr, destinationPtr);\n\n        return {\n          type: 'destination',\n          destination,\n        };\n      }\n    }\n  }\n\n  /**\n   * Read field of pdf widget annotation\n   * @param formHandle - form handle\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns field of pdf widget annotation\n   *\n   * @private\n   */\n  private readPdfWidgetAnnoField(formHandle: number, annotationPtr: number): PdfWidgetAnnoField {\n    const flag = this.pdfiumModule.FPDFAnnot_GetFormFieldFlags(\n      formHandle,\n      annotationPtr,\n    ) as PDF_FORM_FIELD_FLAG;\n\n    const type = this.pdfiumModule.FPDFAnnot_GetFormFieldType(\n      formHandle,\n      annotationPtr,\n    ) as PDF_FORM_FIELD_TYPE;\n\n    const name = readString(\n      this.pdfiumModule.pdfium,\n      (buffer: number, bufferLength) => {\n        return this.pdfiumModule.FPDFAnnot_GetFormFieldName(\n          formHandle,\n          annotationPtr,\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const alternateName = readString(\n      this.pdfiumModule.pdfium,\n      (buffer: number, bufferLength) => {\n        return this.pdfiumModule.FPDFAnnot_GetFormFieldAlternateName(\n          formHandle,\n          annotationPtr,\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const value = readString(\n      this.pdfiumModule.pdfium,\n      (buffer: number, bufferLength) => {\n        return this.pdfiumModule.FPDFAnnot_GetFormFieldValue(\n          formHandle,\n          annotationPtr,\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const options: PdfWidgetAnnoOption[] = [];\n    if (type === PDF_FORM_FIELD_TYPE.COMBOBOX || type === PDF_FORM_FIELD_TYPE.LISTBOX) {\n      const count = this.pdfiumModule.FPDFAnnot_GetOptionCount(formHandle, annotationPtr);\n      for (let i = 0; i < count; i++) {\n        const label = readString(\n          this.pdfiumModule.pdfium,\n          (buffer: number, bufferLength) => {\n            return this.pdfiumModule.FPDFAnnot_GetOptionLabel(\n              formHandle,\n              annotationPtr,\n              i,\n              buffer,\n              bufferLength,\n            );\n          },\n          this.pdfiumModule.pdfium.UTF16ToString,\n        );\n        const isSelected = this.pdfiumModule.FPDFAnnot_IsOptionSelected(\n          formHandle,\n          annotationPtr,\n          i,\n        );\n        options.push({\n          label,\n          isSelected,\n        });\n      }\n    }\n\n    let isChecked = false;\n    let exportValue = \"\";\n    if (type === PDF_FORM_FIELD_TYPE.CHECKBOX || type === PDF_FORM_FIELD_TYPE.RADIOBUTTON) {\n      isChecked = this.pdfiumModule.FPDFAnnot_IsChecked(formHandle, annotationPtr);\n      exportValue = readString(\n          this.pdfiumModule.pdfium,\n          (buffer: number, bufferLength) => {\n            return this.pdfiumModule.FPDFAnnot_GetFormFieldExportValue(\n                formHandle,\n                annotationPtr,\n                buffer,\n                bufferLength,\n            );\n          },\n          this.pdfiumModule.pdfium.UTF16ToString,\n      );\n    }\n\n    return {\n      flag,\n      type,\n      name,\n      alternateName,\n      value,\n      isChecked,\n      options,\n      exportValue,\n    };\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderAnnotation}\n   *\n   * @public\n   */\n  renderPageAnnotation(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfAnnotationObject,\n    options?: PdfRenderPageAnnotationOptions,\n  ): PdfTask<T> {\n    const {\n      scaleFactor = 1,\n      rotation = Rotation.Degree0,\n      dpr = 1,\n      mode = AppearanceMode.Normal,\n      imageType = 'image/webp',\n      imageQuality,\n    } = options ?? {};\n\n    this.logger.debug(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      'renderPageAnnotation',\n      doc,\n      page,\n      annotation,\n      options,\n    );\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RenderPageAnnotation`,\n      'Begin',\n      `${doc.id}-${page.index}-${annotation.id}`,\n    );\n\n    const task = new Task<T, PdfErrorReason>();\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderPageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}-${annotation.id}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // 1) native handles\n    const pageCtx = ctx.acquirePage(page.index);\n    const annotPtr = this.getAnnotationByName(pageCtx.pagePtr, annotation.id);\n    if (!annotPtr) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderPageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}-${annotation.id}`,\n      );\n      pageCtx.release();\n      return PdfTaskHelper.reject({ code: PdfErrorCode.NotFound, message: 'annotation not found' });\n    }\n\n    // 2) device size (rotation-aware) → integer pixels\n    const finalScale = Math.max(0.01, scaleFactor * dpr);\n\n    const rect = toIntRect(annotation.rect);\n    const devRect = toIntRect(transformRect(page.size, rect, rotation, finalScale));\n\n    const wDev = Math.max(1, devRect.size.width);\n    const hDev = Math.max(1, devRect.size.height);\n    const stride = wDev * 4;\n    const bytes = stride * hDev;\n\n    // 3) bitmap backing store in WASM\n    const heapPtr = this.memoryManager.malloc(bytes);\n    const bitmapPtr = this.pdfiumModule.FPDFBitmap_CreateEx(\n      wDev,\n      hDev,\n      BitmapFormat.Bitmap_BGRA,\n      heapPtr,\n      stride,\n    );\n    this.pdfiumModule.FPDFBitmap_FillRect(bitmapPtr, 0, 0, wDev, hDev, 0x00000000);\n\n    // 4) user matrix (no Y-flip; includes -origin translate)\n    const M = buildUserToDeviceMatrix(\n      rect, // {origin:{L,B}, size:{W,H}}\n      rotation,\n      wDev,\n      hDev,\n    );\n    const mPtr = this.memoryManager.malloc(6 * 4);\n    const mView = new Float32Array(this.pdfiumModule.pdfium.HEAPF32.buffer, mPtr, 6);\n    mView.set([M.a, M.b, M.c, M.d, M.e, M.f]);\n\n    // 5) render (DisplayMatrix is applied inside EPDF_RenderAnnotBitmap)\n    const FLAGS = RenderFlag.REVERSE_BYTE_ORDER;\n    let ok = false;\n    try {\n      ok = !!this.pdfiumModule.EPDF_RenderAnnotBitmap(\n        bitmapPtr,\n        pageCtx.pagePtr,\n        annotPtr,\n        mode,\n        mPtr,\n        FLAGS,\n      );\n    } finally {\n      this.memoryManager.free(mPtr);\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr); // frees wrapper, not our heapPtr\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n      pageCtx.release();\n    }\n\n    if (!ok) {\n      this.memoryManager.free(heapPtr);\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderPageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}-${annotation.id}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'EPDF_RenderAnnotBitmap failed',\n      });\n    }\n\n    // 6) encode\n    const dispose = () => this.memoryManager.free(heapPtr);\n\n    this.imageDataConverter(\n      () => {\n        const rgba = new Uint8ClampedArray(\n          this.pdfiumModule.pdfium.HEAPU8.subarray(heapPtr, heapPtr + bytes),\n        );\n        return {\n          width: wDev,\n          height: hDev,\n          data: rgba,\n        };\n      },\n      imageType,\n      imageQuality,\n    )\n      .then((out) => task.resolve(out))\n      .catch((e) => {\n        // Check if it's an OffscreenCanvas error and we haven't copied data yet\n        if (e instanceof OffscreenCanvasError) {\n          // Fallback to WASM encoding without wasting the copy\n          try {\n            const blob = this.encodeViaWasm(\n              { ptr: heapPtr, width: wDev, height: hDev, stride },\n              { type: imageType, quality: imageQuality },\n            );\n            task.resolve(blob as T);\n          } catch (wasmError) {\n            task.reject({ code: PdfErrorCode.Unknown, message: String(wasmError) });\n          }\n        } else {\n          task.reject({ code: PdfErrorCode.Unknown, message: String(e) });\n        }\n      })\n      .finally(dispose);\n\n    return task;\n  }\n\n  private encodeViaWasm(\n    buf: { ptr: number; width: number; height: number; stride: number },\n    opts: ConvertToBlobOptions,\n  ): Blob {\n    const pdf = this.pdfiumModule.pdfium;\n\n    // Helper to copy out and free a payload allocated in WASM\n    const blobFrom = (outPtr: WasmPointer, size: number, mime: string) => {\n      const view = pdf.HEAPU8.subarray(outPtr, outPtr + size);\n      const copy = new Uint8Array(view); // detach from WASM before free\n      this.memoryManager.free(outPtr);\n      return new Blob([copy], { type: mime });\n    };\n\n    // Map OffscreenCanvas \"quality 0..1\" to encoders:\n    //  • WebP: 0..100 (float), default ~0.82 → 82\n    //  • JPEG: 1..100 (int),   default ~0.92 → 92\n    //const q = opts.quality;\n    //const webpQ = q == null ? 82 : Math.round(q * 100);\n    //const jpegQ = q == null ? 92 : Math.max(1, Math.round(q * 100));\n    // PNG ignores quality (same as OffscreenCanvas). Use libpng default (6).\n    const pngLevel = 6;\n\n    const outPtrPtr = this.memoryManager.malloc(4);\n    try {\n      switch (opts.type) {\n        /*\n        case 'image/webp': {\n          const size = this.pdfiumModule.EPDF_WebP_EncodeRGBA(\n            buf.ptr,\n            buf.width,\n            buf.height,\n            buf.stride,\n            webpQ,\n            outPtrPtr,\n          );\n          const outPtr = pdf.getValue(outPtrPtr, 'i32');\n          return blobFrom(outPtr, size, 'image/webp');\n        }\n        case 'image/jpeg': {\n          const size = this.pdfiumModule.EPDF_JPEG_EncodeRGBA(\n            buf.ptr,\n            buf.width,\n            buf.height,\n            buf.stride,\n            jpegQ,\n            outPtrPtr,\n          );\n          const outPtr = pdf.getValue(outPtrPtr, 'i32');\n          return blobFrom(outPtr, size, 'image/jpeg');\n        }\n        */\n        case 'image/png':\n        default: {\n          const size = this.pdfiumModule.EPDF_PNG_EncodeRGBA(\n            buf.ptr,\n            buf.width,\n            buf.height,\n            buf.stride,\n            pngLevel,\n            outPtrPtr,\n          );\n          const outPtr = pdf.getValue(outPtrPtr, 'i32');\n          return blobFrom(WasmPointer(outPtr), size, 'image/png');\n        }\n      }\n    } finally {\n      this.memoryManager.free(outPtrPtr);\n    }\n  }\n\n  private renderRectEncoded(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    rect: Rect,\n    options?: PdfRenderPageOptions,\n  ): PdfTask<T> {\n    const task = new Task<T, PdfErrorReason>();\n\n    const imageType: ImageConversionTypes = options?.imageType ?? 'image/webp';\n    const quality = options?.imageQuality;\n    const rotation: Rotation = options?.rotation ?? Rotation.Degree0;\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // ---- 1) decide device size (scale × dpr, swap for 90/270)\n    const scale = Math.max(0.01, options?.scaleFactor ?? 1);\n    const dpr = Math.max(1, options?.dpr ?? 1);\n    const finalScale = scale * dpr;\n\n    const baseW = rect.size.width;\n    const baseH = rect.size.height;\n    const swap = (rotation & 1) === 1; // 90 or 270\n\n    const wDev = Math.max(1, Math.round((swap ? baseH : baseW) * finalScale));\n    const hDev = Math.max(1, Math.round((swap ? baseW : baseH) * finalScale));\n    const stride = wDev * 4;\n    const bytes = stride * hDev;\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const shouldRenderForms = options?.withForms ?? false;\n    const formHandle = shouldRenderForms ? pageCtx.getFormHandle() : undefined;\n\n    // ---- 2) allocate a BGRA bitmap in WASM\n    const heapPtr = this.memoryManager.malloc(bytes);\n    const bitmapPtr = this.pdfiumModule.FPDFBitmap_CreateEx(\n      wDev,\n      hDev,\n      BitmapFormat.Bitmap_BGRA,\n      heapPtr,\n      stride,\n    );\n    // white background like page renderers typically do\n    this.pdfiumModule.FPDFBitmap_FillRect(bitmapPtr, 0, 0, wDev, hDev, 0xffffffff);\n\n    const M = buildUserToDeviceMatrix(rect, rotation, wDev, hDev);\n\n    const mPtr = this.memoryManager.malloc(6 * 4); // FS_MATRIX\n    const mView = new Float32Array(this.pdfiumModule.pdfium.HEAPF32.buffer, mPtr, 6);\n    mView.set([M.a, M.b, M.c, M.d, M.e, M.f]);\n\n    // Clip to the whole bitmap (device space)\n    const clipPtr = this.memoryManager.malloc(4 * 4); // FS_RECTF {left,bottom,right,top}\n    const clipView = new Float32Array(this.pdfiumModule.pdfium.HEAPF32.buffer, clipPtr, 4);\n    clipView.set([0, 0, wDev, hDev]);\n\n    // Rendering flags: swap byte order to present RGBA to JS; include LCD_TEXT and ANNOT if asked\n    let flags = RenderFlag.REVERSE_BYTE_ORDER;\n    if (options?.withAnnotations ?? false) flags |= RenderFlag.ANNOT;\n\n    try {\n      this.pdfiumModule.FPDF_RenderPageBitmapWithMatrix(\n        bitmapPtr,\n        pageCtx.pagePtr,\n        mPtr,\n        clipPtr,\n        flags,\n      );\n\n      if (formHandle !== undefined) {\n        const formParams = computeFormDrawParams(M, rect, page.size, rotation);\n        const { startX, startY, formsWidth, formsHeight, scaleX, scaleY } = formParams;\n\n        // Draw form elements using the same effective transform as the page bitmap.\n        this.pdfiumModule.FPDF_FFLDraw(\n          formHandle,\n          bitmapPtr,\n          pageCtx.pagePtr,\n          startX,\n          startY,\n          formsWidth,\n          formsHeight,\n          rotation,\n          flags,\n        );\n      }\n    } finally {\n      pageCtx.release();\n      this.memoryManager.free(mPtr);\n      this.memoryManager.free(clipPtr);\n    }\n\n    const dispose = () => {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.memoryManager.free(heapPtr);\n    };\n\n    this.imageDataConverter(\n      () => {\n        const heapBuf = this.pdfiumModule.pdfium.HEAPU8.buffer as unknown as ArrayBuffer;\n        const data = new Uint8ClampedArray(heapBuf, heapPtr, bytes);\n        return {\n          width: wDev,\n          height: hDev,\n          data,\n        };\n      },\n      imageType,\n      quality,\n    )\n      .then((out) => task.resolve(out))\n      .catch((e) => {\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'Error', e);\n        // Check if it's an OffscreenCanvas error and we haven't copied data yet\n        if (e instanceof OffscreenCanvasError) {\n          // Fallback to WASM encoding without wasting the copy\n          this.logger.info(LOG_SOURCE, LOG_CATEGORY, 'Fallback to WASM encoding');\n          try {\n            const blob = this.encodeViaWasm(\n              { ptr: heapPtr, width: wDev, height: hDev, stride },\n              { type: imageType, quality },\n            );\n            task.resolve(blob as T);\n          } catch (wasmError) {\n            task.reject({ code: PdfErrorCode.Unknown, message: String(wasmError) });\n          }\n        } else {\n          task.reject({ code: PdfErrorCode.Unknown, message: String(e) });\n        }\n      })\n      .finally(dispose);\n\n    return task;\n  }\n\n  /**\n   * Read the target of pdf link annotation\n   * @param docPtr - pointer to pdf document object\n   * @param getActionPtr - callback function to retrive the pointer of action\n   * @param getDestinationPtr - callback function to retrive the pointer of destination\n   * @returns target of link\n   *\n   * @private\n   */\n  private readPdfLinkAnnoTarget(\n    docPtr: number,\n    getActionPtr: () => number,\n    getDestinationPtr: () => number,\n  ): PdfLinkTarget | undefined {\n    const destinationPtr = getDestinationPtr();\n    if (destinationPtr) {\n      const destination = this.readPdfDestination(docPtr, destinationPtr);\n\n      return {\n        type: 'destination',\n        destination,\n      };\n    } else {\n      const actionPtr = getActionPtr();\n      if (actionPtr) {\n        const action = this.readPdfAction(docPtr, actionPtr);\n\n        return {\n          type: 'action',\n          action,\n        };\n      }\n    }\n  }\n\n  private createLocalDestPtr(docPtr: number, dest: PdfDestinationObject): number {\n    // Load page for local destinations.\n    const pagePtr = this.pdfiumModule.FPDF_LoadPage(docPtr, dest.pageIndex);\n    if (!pagePtr) return 0;\n\n    try {\n      if (dest.zoom.mode === PdfZoomMode.XYZ) {\n        const { x, y, zoom } = dest.zoom.params;\n        // We treat provided x/y/zoom as “specified”.\n        return this.pdfiumModule.EPDFDest_CreateXYZ(\n          pagePtr,\n          /*has_left*/ true,\n          x,\n          /*has_top*/ true,\n          y,\n          /*has_zoom*/ true,\n          zoom,\n        );\n      }\n\n      // Map non-XYZ “view modes” to PDFDEST_VIEW_* and params.\n      let viewEnum: PdfZoomMode;\n      let params: number[] = [];\n\n      switch (dest.zoom.mode) {\n        case PdfZoomMode.FitPage:\n          viewEnum = PdfZoomMode.FitPage; // no params\n          break;\n        case PdfZoomMode.FitHorizontal:\n          // FitH needs top; use view[0] if provided, else 0\n          viewEnum = PdfZoomMode.FitHorizontal;\n          params = [dest.view?.[0] ?? 0];\n          break;\n        case PdfZoomMode.FitVertical:\n          // FitV needs left; use view[0] if provided, else 0\n          viewEnum = PdfZoomMode.FitVertical;\n          params = [dest.view?.[0] ?? 0];\n          break;\n        case PdfZoomMode.FitRectangle:\n          // FitR needs left, bottom, right, top (pad with zeros).\n          {\n            const v = dest.view ?? [];\n            params = [v[0] ?? 0, v[1] ?? 0, v[2] ?? 0, v[3] ?? 0];\n            viewEnum = PdfZoomMode.FitRectangle;\n          }\n          break;\n        case PdfZoomMode.Unknown:\n        default:\n          // Unknown cannot be encoded as a valid explicit destination.\n          return 0;\n      }\n\n      return this.withFloatArray(params, (ptr, count) =>\n        this.pdfiumModule.EPDFDest_CreateView(pagePtr, viewEnum, ptr, count),\n      );\n    } finally {\n      this.pdfiumModule.FPDF_ClosePage(pagePtr);\n    }\n  }\n\n  private applyBookmarkTarget(docPtr: number, bmPtr: number, target: PdfLinkTarget): boolean {\n    if (target.type === 'destination') {\n      const destPtr = this.createLocalDestPtr(docPtr, target.destination);\n      if (!destPtr) return false;\n      const ok = this.pdfiumModule.EPDFBookmark_SetDest(docPtr, bmPtr, destPtr);\n      return !!ok;\n    }\n\n    // target.type === 'action'\n    const action = target.action;\n    switch (action.type) {\n      case PdfActionType.Goto: {\n        const destPtr = this.createLocalDestPtr(docPtr, action.destination);\n        if (!destPtr) return false;\n        const actPtr = this.pdfiumModule.EPDFAction_CreateGoTo(docPtr, destPtr);\n        if (!actPtr) return false;\n        return !!this.pdfiumModule.EPDFBookmark_SetAction(docPtr, bmPtr, actPtr);\n      }\n\n      case PdfActionType.URI: {\n        const actPtr = this.pdfiumModule.EPDFAction_CreateURI(docPtr, action.uri);\n        if (!actPtr) return false;\n        return !!this.pdfiumModule.EPDFBookmark_SetAction(docPtr, bmPtr, actPtr);\n      }\n\n      case PdfActionType.LaunchAppOrOpenFile: {\n        const actPtr = this.withWString(action.path, (wptr) =>\n          this.pdfiumModule.EPDFAction_CreateLaunch(docPtr, wptr),\n        );\n        if (!actPtr) return false;\n        return !!this.pdfiumModule.EPDFBookmark_SetAction(docPtr, bmPtr, actPtr);\n      }\n\n      case PdfActionType.RemoteGoto:\n        // We need a file path to build a GoToR action. Your Action shape\n        // doesn’t carry a path, so we’ll reject for now.\n        return false;\n\n      case PdfActionType.Unsupported:\n      default:\n        return false;\n    }\n  }\n\n  /**\n   * Read pdf action from pdf document\n   * @param docPtr - pointer to pdf document object\n   * @param actionPtr - pointer to pdf action object\n   * @returns pdf action object\n   *\n   * @private\n   */\n  private readPdfAction(docPtr: number, actionPtr: number): PdfActionObject {\n    const actionType = this.pdfiumModule.FPDFAction_GetType(actionPtr) as PdfActionType;\n    let action: PdfActionObject;\n    switch (actionType) {\n      case PdfActionType.Unsupported:\n        action = {\n          type: PdfActionType.Unsupported,\n        };\n        break;\n      case PdfActionType.Goto:\n        {\n          const destinationPtr = this.pdfiumModule.FPDFAction_GetDest(docPtr, actionPtr);\n          if (destinationPtr) {\n            const destination = this.readPdfDestination(docPtr, destinationPtr);\n\n            action = {\n              type: PdfActionType.Goto,\n              destination,\n            };\n          } else {\n            action = {\n              type: PdfActionType.Unsupported,\n            };\n          }\n        }\n        break;\n      case PdfActionType.RemoteGoto:\n        {\n          // In case of remote goto action,\n          // the application should first use FPDFAction_GetFilePath\n          // to get file path, then load that particular document,\n          // and use its document handle to call this\n          action = {\n            type: PdfActionType.Unsupported,\n          };\n        }\n        break;\n      case PdfActionType.URI:\n        {\n          const uri = readString(\n            this.pdfiumModule.pdfium,\n            (buffer, bufferLength) => {\n              return this.pdfiumModule.FPDFAction_GetURIPath(\n                docPtr,\n                actionPtr,\n                buffer,\n                bufferLength,\n              );\n            },\n            this.pdfiumModule.pdfium.UTF8ToString,\n          );\n\n          action = {\n            type: PdfActionType.URI,\n            uri,\n          };\n        }\n        break;\n      case PdfActionType.LaunchAppOrOpenFile:\n        {\n          const path = readString(\n            this.pdfiumModule.pdfium,\n            (buffer, bufferLength) => {\n              return this.pdfiumModule.FPDFAction_GetFilePath(actionPtr, buffer, bufferLength);\n            },\n            this.pdfiumModule.pdfium.UTF8ToString,\n          );\n          action = {\n            type: PdfActionType.LaunchAppOrOpenFile,\n            path,\n          };\n        }\n        break;\n    }\n\n    return action;\n  }\n\n  /**\n   * Read pdf destination object\n   * @param docPtr - pointer to pdf document object\n   * @param destinationPtr - pointer to pdf destination\n   * @returns pdf destination object\n   *\n   * @private\n   */\n  private readPdfDestination(docPtr: number, destinationPtr: number): PdfDestinationObject {\n    const pageIndex = this.pdfiumModule.FPDFDest_GetDestPageIndex(docPtr, destinationPtr);\n    // Every params is a float value\n    const maxParmamsCount = 4;\n    const paramsCountPtr = this.memoryManager.malloc(maxParmamsCount);\n    const paramsPtr = this.memoryManager.malloc(maxParmamsCount * 4);\n    const zoomMode = this.pdfiumModule.FPDFDest_GetView(\n      destinationPtr,\n      paramsCountPtr,\n      paramsPtr,\n    ) as PdfZoomMode;\n    const paramsCount = this.pdfiumModule.pdfium.getValue(paramsCountPtr, 'i32');\n    const view: number[] = [];\n    for (let i = 0; i < paramsCount; i++) {\n      const paramPtr = paramsPtr + i * 4;\n      view.push(this.pdfiumModule.pdfium.getValue(paramPtr, 'float'));\n    }\n    this.memoryManager.free(paramsCountPtr);\n    this.memoryManager.free(paramsPtr);\n\n    if (zoomMode === PdfZoomMode.XYZ) {\n      const hasXPtr = this.memoryManager.malloc(1);\n      const hasYPtr = this.memoryManager.malloc(1);\n      const hasZPtr = this.memoryManager.malloc(1);\n      const xPtr = this.memoryManager.malloc(4);\n      const yPtr = this.memoryManager.malloc(4);\n      const zPtr = this.memoryManager.malloc(4);\n\n      const isSucceed = this.pdfiumModule.FPDFDest_GetLocationInPage(\n        destinationPtr,\n        hasXPtr,\n        hasYPtr,\n        hasZPtr,\n        xPtr,\n        yPtr,\n        zPtr,\n      );\n      if (isSucceed) {\n        const hasX = this.pdfiumModule.pdfium.getValue(hasXPtr, 'i8');\n        const hasY = this.pdfiumModule.pdfium.getValue(hasYPtr, 'i8');\n        const hasZ = this.pdfiumModule.pdfium.getValue(hasZPtr, 'i8');\n\n        const x = hasX ? this.pdfiumModule.pdfium.getValue(xPtr, 'float') : 0;\n        const y = hasY ? this.pdfiumModule.pdfium.getValue(yPtr, 'float') : 0;\n        const zoom = hasZ ? this.pdfiumModule.pdfium.getValue(zPtr, 'float') : 0;\n\n        this.memoryManager.free(hasXPtr);\n        this.memoryManager.free(hasYPtr);\n        this.memoryManager.free(hasZPtr);\n        this.memoryManager.free(xPtr);\n        this.memoryManager.free(yPtr);\n        this.memoryManager.free(zPtr);\n\n        return {\n          pageIndex,\n          zoom: {\n            mode: zoomMode,\n            params: {\n              x,\n              y,\n              zoom,\n            },\n          },\n          view,\n        };\n      }\n\n      this.memoryManager.free(hasXPtr);\n      this.memoryManager.free(hasYPtr);\n      this.memoryManager.free(hasZPtr);\n      this.memoryManager.free(xPtr);\n      this.memoryManager.free(yPtr);\n      this.memoryManager.free(zPtr);\n\n      return {\n        pageIndex,\n        zoom: {\n          mode: zoomMode,\n          params: {\n            x: 0,\n            y: 0,\n            zoom: 0,\n          },\n        },\n        view,\n      };\n    }\n\n    return {\n      pageIndex,\n      zoom: {\n        mode: zoomMode,\n      },\n      view,\n    };\n  }\n\n  /**\n   * Read attachmet from pdf document\n   * @param docPtr - pointer to pdf document object\n   * @param index - index of attachment\n   * @returns attachment content\n   *\n   * @private\n   */\n  private readPdfAttachment(docPtr: number, index: number): PdfAttachmentObject {\n    const attachmentPtr = this.pdfiumModule.FPDFDoc_GetAttachment(docPtr, index);\n    const name = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFAttachment_GetName(attachmentPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const description = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.EPDFAttachment_GetDescription(attachmentPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const mimeType = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFAttachment_GetSubtype(attachmentPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const creationDate = this.getAttachmentDate(attachmentPtr, 'CreationDate');\n    const checksum = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFAttachment_GetStringValue(\n          attachmentPtr,\n          'Checksum',\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const size = this.getAttachmentNumber(attachmentPtr, 'Size');\n\n    return {\n      index,\n      name,\n      description,\n      mimeType,\n      size,\n      creationDate,\n      checksum,\n    };\n  }\n\n  /**\n   * Convert coordinate of point from device coordinate to page coordinate\n   * @param page  - pdf page infor\n   * @param position - position of point\n   * @returns converted position\n   *\n   * @private\n   */\n  private convertDevicePointToPagePoint(page: PdfPageObject, position: Position): Position {\n    const DW = page.size.width;\n    const DH = page.size.height;\n    const r = page.rotation & 3;\n\n    if (r === 0) {\n      // 0°\n      return { x: position.x, y: DH - position.y };\n    }\n    if (r === 1) {\n      // 90° CW\n      // x_d = sx*y, y_d = sy*x  =>  x = y_d/sy, y = x_d/sx\n      return { x: position.y, y: position.x };\n    }\n    if (r === 2) {\n      // 180°\n      return { x: DW - position.x, y: position.y };\n    }\n    {\n      // 270° CW\n      // x_d = DW - sx*y, y_d = DH - sy*x\n      return { x: DH - position.y, y: DW - position.x };\n    }\n  }\n\n  /**\n   * Convert coordinate of point from page coordinate to device coordinate\n   * @param page  - pdf page infor\n   * @param position - position of point\n   * @returns converted position\n   *\n   * @private\n   */\n  private convertPagePointToDevicePoint(page: PdfPageObject, position: Position): Position {\n    const DW = page.size.width;\n    const DH = page.size.height;\n    const r = page.rotation & 3;\n\n    if (r === 0) {\n      // 0°\n      return { x: position.x, y: DH - position.y };\n    }\n    if (r === 1) {\n      // 90° CW\n      return { x: position.y, y: position.x };\n    }\n    if (r === 2) {\n      // 180°\n      return { x: DW - position.x, y: position.y };\n    }\n    {\n      // 270° CW\n      return { x: DW - position.y, y: DH - position.x };\n    }\n  }\n\n  /**\n   * Convert coordinate of rectangle from page coordinate to device coordinate\n   * @param page  - pdf page infor\n   * @param pagePtr - pointer to pdf page object\n   * @param pageRect - rectangle that needs to be converted\n   * @returns converted rectangle\n   *\n   * @private\n   */\n  private convertPageRectToDeviceRect(\n    page: PdfPageObject,\n    pageRect: {\n      left: number;\n      top: number;\n      right: number;\n      bottom: number;\n    },\n  ): Rect {\n    const { x, y } = this.convertPagePointToDevicePoint(page, {\n      x: pageRect.left,\n      y: pageRect.top,\n    });\n    const rect = {\n      origin: {\n        x,\n        y,\n      },\n      size: {\n        width: Math.abs(pageRect.right - pageRect.left),\n        height: Math.abs(pageRect.top - pageRect.bottom),\n      },\n    };\n\n    return rect;\n  }\n\n  /**\n   * Read the appearance stream of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param mode - appearance mode\n   * @returns appearance stream\n   *\n   * @private\n   */\n  private readPageAnnoAppearanceStreams(annotationPtr: number) {\n    return {\n      normal: this.readPageAnnoAppearanceStream(annotationPtr, AppearanceMode.Normal),\n      rollover: this.readPageAnnoAppearanceStream(annotationPtr, AppearanceMode.Rollover),\n      down: this.readPageAnnoAppearanceStream(annotationPtr, AppearanceMode.Down),\n    };\n  }\n\n  /**\n   * Read the appearance stream of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param mode - appearance mode\n   * @returns appearance stream\n   *\n   * @private\n   */\n  private readPageAnnoAppearanceStream(annotationPtr: number, mode = AppearanceMode.Normal) {\n    const utf16Length = this.pdfiumModule.FPDFAnnot_GetAP(annotationPtr, mode, 0, 0);\n    const bytesCount = (utf16Length + 1) * 2; // include NIL\n    const bufferPtr = this.memoryManager.malloc(bytesCount);\n    this.pdfiumModule.FPDFAnnot_GetAP(annotationPtr, mode, bufferPtr, bytesCount);\n    const ap = this.pdfiumModule.pdfium.UTF16ToString(bufferPtr);\n    this.memoryManager.free(bufferPtr);\n\n    return ap;\n  }\n\n  /**\n   * Set the appearance stream of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param mode - appearance mode\n   * @param apContent - appearance stream content (null to remove)\n   * @returns whether the appearance stream was set successfully\n   *\n   * @private\n   */\n  private setPageAnnoAppearanceStream(\n    annotationPtr: number,\n    mode: AppearanceMode = AppearanceMode.Normal,\n    apContent: string,\n  ): boolean {\n    // UTF-16LE buffer (+2 bytes for NUL)\n    const bytes = 2 * (apContent.length + 1);\n    const ptr = this.memoryManager.malloc(bytes);\n    try {\n      this.pdfiumModule.pdfium.stringToUTF16(apContent, ptr, bytes);\n      const ok = this.pdfiumModule.FPDFAnnot_SetAP(annotationPtr, mode, ptr);\n      return !!ok;\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n  }\n\n  /**\n   * Set the rect of specified annotation\n   * @param page - page info that the annotation is belonged to\n   * @param annotationPtr - pointer to annotation object\n   * @param rect - target rectangle\n   * @returns whether the rect is setted\n   *\n   * @private\n   */\n  private setPageAnnoRect(page: PdfPageObject, annotPtr: number, rect: Rect): boolean {\n    // Snap device edges the same way FPDF_DeviceToPage(int,int,...) did (truncate → floor for ≥0)\n    const x0d = Math.floor(rect.origin.x);\n    const y0d = Math.floor(rect.origin.y);\n    const x1d = Math.floor(rect.origin.x + rect.size.width);\n    const y1d = Math.floor(rect.origin.y + rect.size.height);\n\n    // Map all 4 integer corners to page space (handles any /Rotate)\n    const TL = this.convertDevicePointToPagePoint(page, { x: x0d, y: y0d });\n    const TR = this.convertDevicePointToPagePoint(page, { x: x1d, y: y0d });\n    const BR = this.convertDevicePointToPagePoint(page, { x: x1d, y: y1d });\n    const BL = this.convertDevicePointToPagePoint(page, { x: x0d, y: y1d });\n\n    // Page-space AABB\n    let left = Math.min(TL.x, TR.x, BR.x, BL.x);\n    let right = Math.max(TL.x, TR.x, BR.x, BL.x);\n    let bottom = Math.min(TL.y, TR.y, BR.y, BL.y);\n    let top = Math.max(TL.y, TR.y, BR.y, BL.y);\n    if (left > right) [left, right] = [right, left];\n    if (bottom > top) [bottom, top] = [top, bottom];\n\n    // Write FS_RECTF in memory order: L, T, R, B\n    const ptr = this.memoryManager.malloc(16);\n    const pdf = this.pdfiumModule.pdfium;\n    pdf.setValue(ptr + 0, left, 'float'); // L\n    pdf.setValue(ptr + 4, top, 'float'); // T\n    pdf.setValue(ptr + 8, right, 'float'); // R\n    pdf.setValue(ptr + 12, bottom, 'float'); // B\n\n    const ok = this.pdfiumModule.FPDFAnnot_SetRect(annotPtr, ptr);\n    this.memoryManager.free(ptr);\n    return !!ok;\n  }\n\n  /**\n   * Read the rectangle of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns rectangle of annotation\n   *\n   * @private\n   */\n  private readPageAnnoRect(annotationPtr: number) {\n    const pageRectPtr = this.memoryManager.malloc(4 * 4);\n    const pageRect = {\n      left: 0,\n      top: 0,\n      right: 0,\n      bottom: 0,\n    };\n    if (this.pdfiumModule.FPDFAnnot_GetRect(annotationPtr, pageRectPtr)) {\n      pageRect.left = this.pdfiumModule.pdfium.getValue(pageRectPtr, 'float');\n      pageRect.top = this.pdfiumModule.pdfium.getValue(pageRectPtr + 4, 'float');\n      pageRect.right = this.pdfiumModule.pdfium.getValue(pageRectPtr + 8, 'float');\n      pageRect.bottom = this.pdfiumModule.pdfium.getValue(pageRectPtr + 12, 'float');\n    }\n    this.memoryManager.free(pageRectPtr);\n\n    return pageRect;\n  }\n\n  /**\n   * Get highlight rects for a specific character range (for search highlighting)\n   * @param page - pdf page info\n   * @param pagePtr - pointer to pdf page\n   * @param textPagePtr - pointer to pdf text page\n   * @param startIndex - starting character index\n   * @param charCount - number of characters in the range\n   * @returns array of rectangles for highlighting the specified character range\n   *\n   * @private\n   */\n  private getHighlightRects(\n    page: PdfPageObject,\n    textPagePtr: number,\n    startIndex: number,\n    charCount: number,\n  ): Rect[] {\n    const rectsCount = this.pdfiumModule.FPDFText_CountRects(textPagePtr, startIndex, charCount);\n    const highlightRects: Rect[] = [];\n\n    // scratch doubles for the page-space rect\n    const l = this.memoryManager.malloc(8);\n    const t = this.memoryManager.malloc(8);\n    const r = this.memoryManager.malloc(8);\n    const b = this.memoryManager.malloc(8);\n\n    for (let i = 0; i < rectsCount; i++) {\n      const ok = this.pdfiumModule.FPDFText_GetRect(textPagePtr, i, l, t, r, b);\n      if (!ok) continue;\n\n      const left = this.pdfiumModule.pdfium.getValue(l, 'double');\n      const top = this.pdfiumModule.pdfium.getValue(t, 'double');\n      const right = this.pdfiumModule.pdfium.getValue(r, 'double');\n      const bottom = this.pdfiumModule.pdfium.getValue(b, 'double');\n\n      // transform all four corners to device space\n      const p1 = this.convertPagePointToDevicePoint(page, { x: left, y: top });\n      const p2 = this.convertPagePointToDevicePoint(page, { x: right, y: top });\n      const p3 = this.convertPagePointToDevicePoint(page, { x: right, y: bottom });\n      const p4 = this.convertPagePointToDevicePoint(page, { x: left, y: bottom });\n\n      const xs = [p1.x, p2.x, p3.x, p4.x];\n      const ys = [p1.y, p2.y, p3.y, p4.y];\n\n      const x = Math.min(...xs);\n      const y = Math.min(...ys);\n      const width = Math.max(...xs) - x;\n      const height = Math.max(...ys) - y;\n\n      // ceil so highlights fully cover glyphs at integer pixels\n      highlightRects.push({\n        origin: { x, y },\n        size: { width: Math.ceil(width), height: Math.ceil(height) },\n      });\n    }\n\n    this.memoryManager.free(l);\n    this.memoryManager.free(t);\n    this.memoryManager.free(r);\n    this.memoryManager.free(b);\n\n    return highlightRects;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.searchAllPages}\n   *\n   * Runs inside the worker.\n   * Emits per-page progress: { page, results }\n   *\n   * @public\n   */\n  searchAllPages(\n    doc: PdfDocumentObject,\n    keyword: string,\n    options?: PdfSearchAllPagesOptions,\n  ): PdfTask<SearchAllPagesResult, PdfPageSearchProgress> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'searchAllPages', doc, keyword, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'Begin', doc.id);\n\n    // Resolve early if doc not open\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'End', doc.id);\n      return PdfTaskHelper.resolve<SearchAllPagesResult, PdfPageSearchProgress>({\n        results: [],\n        total: 0,\n      });\n    }\n\n    // Build UTF-16 keyword buffer\n    const length = 2 * (keyword.length + 1);\n    const keywordPtr = this.memoryManager.malloc(length);\n    this.pdfiumModule.pdfium.stringToUTF16(keyword, keywordPtr, length);\n\n    // Fold flags\n    const flag =\n      options?.flags?.reduce((acc: MatchFlag, f: MatchFlag) => acc | f, MatchFlag.None) ??\n      MatchFlag.None;\n\n    // Create task with progress payload\n    const task = PdfTaskHelper.create<SearchAllPagesResult, PdfPageSearchProgress>();\n\n    let cancelled = false;\n    task.wait(\n      () => {},\n      (err) => {\n        if (err.type === 'abort') cancelled = true;\n      },\n    );\n\n    const CHUNK_SIZE = 100; // tune as needed\n    const allResults: SearchResult[] = [];\n\n    const processChunk = (startIdx: number): void => {\n      if (cancelled) return;\n\n      const endIdx = Math.min(startIdx + CHUNK_SIZE, doc.pageCount);\n\n      try {\n        for (let pageIndex = startIdx; pageIndex < endIdx && !cancelled; pageIndex++) {\n          // Search this page once\n          const pageResults = this.searchAllInPage(ctx, doc.pages[pageIndex], keywordPtr, flag);\n\n          // Accumulate and emit progress\n          allResults.push(...pageResults);\n          task.progress({ page: pageIndex, results: pageResults });\n        }\n      } catch (e) {\n        if (!cancelled) {\n          this.memoryManager.free(keywordPtr);\n          this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'End', doc.id);\n          task.reject({\n            code: PdfErrorCode.Unknown,\n            message: `Error searching document: ${e}`,\n          });\n        }\n        return;\n      }\n\n      if (cancelled) return;\n\n      if (endIdx >= doc.pageCount) {\n        this.memoryManager.free(keywordPtr);\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'End', doc.id);\n        task.resolve({ results: allResults, total: allResults.length });\n        return;\n      }\n\n      // yield to event loop\n      setTimeout(() => processChunk(endIdx), 0);\n    };\n\n    // kick off\n    setTimeout(() => processChunk(0), 0);\n\n    // Ensure buffer is freed if caller aborts mid-flight\n    task.wait(\n      () => {},\n      (err) => {\n        if (err.type === 'abort') {\n          try {\n            this.memoryManager.free(keywordPtr);\n          } catch {}\n        }\n      },\n    );\n\n    return task;\n  }\n\n  /**\n   * Extract word-aligned context for a search hit.\n   *\n   * @param fullText      full UTF-16 page text (fetch this once per page!)\n   * @param start         index of 1st char that matched\n   * @param count         number of chars in the match\n   * @param windowChars   minimum context chars to keep left & right\n   */\n  private buildContext(\n    fullText: string,\n    start: number,\n    count: number,\n    windowChars = 30,\n  ): TextContext {\n    const WORD_BREAK = /[\\s\\u00A0.,;:!?()\\[\\]{}<>/\\\\\\-\"'`\"”\\u2013\\u2014]/;\n\n    // Find the start of a word moving left\n    const findWordStart = (index: number): number => {\n      while (index > 0 && !WORD_BREAK.test(fullText[index - 1])) index--;\n      return index;\n    };\n\n    // Find the end of a word moving right\n    const findWordEnd = (index: number): number => {\n      while (index < fullText.length && !WORD_BREAK.test(fullText[index])) index++;\n      return index;\n    };\n\n    // Move left to build context\n    let left = start;\n    while (left > 0 && WORD_BREAK.test(fullText[left - 1])) left--; // Skip blanks\n    let collected = 0;\n    while (left > 0 && collected < windowChars) {\n      left--;\n      if (!WORD_BREAK.test(fullText[left])) collected++;\n    }\n    left = findWordStart(left);\n\n    // Move right to build context\n    let right = start + count;\n    while (right < fullText.length && WORD_BREAK.test(fullText[right])) right++; // Skip blanks\n    collected = 0;\n    while (right < fullText.length && collected < windowChars) {\n      if (!WORD_BREAK.test(fullText[right])) collected++;\n      right++;\n    }\n    right = findWordEnd(right);\n\n    // Compose the context\n    const before = fullText.slice(left, start).replace(/\\s+/g, ' ').trimStart();\n    const match = fullText.slice(start, start + count);\n    const after = fullText\n      .slice(start + count, right)\n      .replace(/\\s+/g, ' ')\n      .trimEnd();\n\n    return {\n      before: this.tidy(before),\n      match: this.tidy(match),\n      after: this.tidy(after),\n      truncatedLeft: left > 0,\n      truncatedRight: right < fullText.length,\n    };\n  }\n\n  /**\n   * Tidy the text to remove any non-printable characters and whitespace\n   * @param s - text to tidy\n   * @returns tidied text\n   *\n   * @private\n   */\n  private tidy(s: string): string {\n    return (\n      s\n        /* 1️⃣  join words split by hyphen + U+FFFE + whitespace */\n        .replace(/-\\uFFFE\\s*/g, '')\n\n        /* 2️⃣  drop any remaining U+FFFE, soft-hyphen, zero-width chars */\n        .replace(/[\\uFFFE\\u00AD\\u200B\\u2060\\uFEFF]/g, '')\n\n        /* 3️⃣  collapse whitespace so we stay on one line */\n        .replace(/\\s+/g, ' ')\n    );\n  }\n\n  /**\n   * Search for all occurrences of a keyword on a single page\n   * This method efficiently loads the page only once and finds all matches\n   *\n   * @param docPtr - pointer to pdf document\n   * @param page - pdf page object\n   * @param pageIndex - index of the page\n   * @param keywordPtr - pointer to the search keyword\n   * @param flag - search flags\n   * @returns array of search results on this page\n   *\n   * @private\n   */\n  private searchAllInPage(\n    ctx: DocumentContext,\n    page: PdfPageObject,\n    keywordPtr: number,\n    flag: number,\n  ): SearchResult[] {\n    return ctx.borrowPage(page.index, (pageCtx) => {\n      const textPagePtr = pageCtx.getTextPage();\n\n      // Load the full text of the page once\n      const total = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n      const bufPtr = this.memoryManager.malloc(2 * (total + 1));\n      this.pdfiumModule.FPDFText_GetText(textPagePtr, 0, total, bufPtr);\n      const fullText = this.pdfiumModule.pdfium.UTF16ToString(bufPtr);\n      this.memoryManager.free(bufPtr);\n\n      const pageResults: SearchResult[] = [];\n\n      // Initialize search handle once for the page\n      const searchHandle = this.pdfiumModule.FPDFText_FindStart(\n        textPagePtr,\n        keywordPtr,\n        flag,\n        0, // Start from the beginning of the page\n      );\n\n      // Call FindNext repeatedly to get all matches on the page\n      while (this.pdfiumModule.FPDFText_FindNext(searchHandle)) {\n        const charIndex = this.pdfiumModule.FPDFText_GetSchResultIndex(searchHandle);\n        const charCount = this.pdfiumModule.FPDFText_GetSchCount(searchHandle);\n\n        const rects = this.getHighlightRects(page, textPagePtr, charIndex, charCount);\n\n        const context = this.buildContext(fullText, charIndex, charCount);\n\n        pageResults.push({\n          pageIndex: page.index,\n          charIndex,\n          charCount,\n          rects,\n          context,\n        });\n      }\n\n      // Close the search handle only once after finding all results\n      this.pdfiumModule.FPDFText_FindClose(searchHandle);\n      return pageResults;\n    });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.preparePrintDocument}\n   *\n   * Prepares a PDF document for printing with specified options.\n   * Creates a new document with selected pages and optionally removes annotations\n   * for optimal printing performance.\n   *\n   * @public\n   */\n  preparePrintDocument(doc: PdfDocumentObject, options?: PdfPrintOptions): PdfTask<ArrayBuffer> {\n    const { includeAnnotations = true, pageRange = null } = options ?? {};\n\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'preparePrintDocument', doc, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'Begin', doc.id);\n\n    // Verify document is open\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'Document is not open',\n      });\n    }\n\n    // Create new document for printing\n    const printDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!printDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'Cannot create print document',\n      });\n    }\n\n    try {\n      // Validate and sanitize page range\n      const sanitizedPageRange = this.sanitizePageRange(pageRange, doc.pageCount);\n\n      // Import pages from source document\n      // pageRange null means import all pages\n      if (\n        !this.pdfiumModule.FPDF_ImportPages(\n          printDocPtr,\n          ctx.docPtr,\n          sanitizedPageRange ?? '',\n          0, // Insert at beginning\n        )\n      ) {\n        this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'Failed to import pages for printing');\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n\n        return PdfTaskHelper.reject({\n          code: PdfErrorCode.CantImportPages,\n          message: 'Failed to import pages for printing',\n        });\n      }\n\n      // Remove annotations if requested\n      if (!includeAnnotations) {\n        const removalResult = this.removeAnnotationsFromPrintDocument(printDocPtr);\n\n        if (!removalResult.success) {\n          this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n          this.logger.error(\n            LOG_SOURCE,\n            LOG_CATEGORY,\n            `Failed to remove annotations: ${removalResult.error}`,\n          );\n          this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n\n          return PdfTaskHelper.reject({\n            code: PdfErrorCode.Unknown,\n            message: `Failed to prepare print document: ${removalResult.error}`,\n          });\n        }\n\n        this.logger.debug(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `Removed ${removalResult.annotationsRemoved} annotations from ${removalResult.pagesProcessed} pages`,\n        );\n      }\n\n      // Save the prepared document to buffer\n      const buffer = this.saveDocument(printDocPtr);\n\n      // Clean up\n      this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n      return PdfTaskHelper.resolve(buffer);\n    } catch (error) {\n      // Ensure cleanup on any error\n      if (printDocPtr) {\n        this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n      }\n\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'preparePrintDocument failed', error);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: error instanceof Error ? error.message : 'Failed to prepare print document',\n      });\n    }\n  }\n\n  /**\n   * Removes all annotations from a print document using fast raw annotation functions.\n   * This method is optimized for performance by avoiding full page loading.\n   *\n   * @param printDocPtr - Pointer to the print document\n   * @returns Result object with success status and statistics\n   *\n   * @private\n   */\n  private removeAnnotationsFromPrintDocument(printDocPtr: number): {\n    success: boolean;\n    annotationsRemoved: number;\n    pagesProcessed: number;\n    error?: string;\n  } {\n    let totalAnnotationsRemoved = 0;\n    let pagesProcessed = 0;\n\n    try {\n      const pageCount = this.pdfiumModule.FPDF_GetPageCount(printDocPtr);\n\n      // Process each page\n      for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {\n        // Get annotation count using the fast raw function\n        const annotCount = this.pdfiumModule.EPDFPage_GetAnnotCountRaw(printDocPtr, pageIndex);\n\n        if (annotCount <= 0) {\n          pagesProcessed++;\n          continue;\n        }\n\n        // Remove annotations in reverse order to maintain indices\n        // This is important because removing an annotation shifts the indices of subsequent ones\n        let annotationsRemovedFromPage = 0;\n\n        for (let annotIndex = annotCount - 1; annotIndex >= 0; annotIndex--) {\n          // Use the fast raw removal function\n          const removed = this.pdfiumModule.EPDFPage_RemoveAnnotRaw(\n            printDocPtr,\n            pageIndex,\n            annotIndex,\n          );\n\n          if (removed) {\n            annotationsRemovedFromPage++;\n            totalAnnotationsRemoved++;\n          } else {\n            this.logger.warn(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `Failed to remove annotation ${annotIndex} from page ${pageIndex}`,\n            );\n          }\n        }\n\n        // Generate content for the page if annotations were removed\n        if (annotationsRemovedFromPage > 0) {\n          // We need to regenerate the page content after removing annotations\n          const pagePtr = this.pdfiumModule.FPDF_LoadPage(printDocPtr, pageIndex);\n          if (pagePtr) {\n            this.pdfiumModule.FPDFPage_GenerateContent(pagePtr);\n            this.pdfiumModule.FPDF_ClosePage(pagePtr);\n          }\n        }\n\n        pagesProcessed++;\n      }\n\n      return {\n        success: true,\n        annotationsRemoved: totalAnnotationsRemoved,\n        pagesProcessed: pagesProcessed,\n      };\n    } catch (error) {\n      return {\n        success: false,\n        annotationsRemoved: totalAnnotationsRemoved,\n        pagesProcessed: pagesProcessed,\n        error: error instanceof Error ? error.message : 'Unknown error during annotation removal',\n      };\n    }\n  }\n\n  /**\n   * Sanitizes and validates a page range string.\n   * Ensures page numbers are within valid bounds and properly formatted.\n   *\n   * @param pageRange - Page range string (e.g., \"1,3,5-7\") or null for all pages\n   * @param totalPages - Total number of pages in the document\n   * @returns Sanitized page range string or null for all pages\n   *\n   * @private\n   */\n  private sanitizePageRange(\n    pageRange: string | null | undefined,\n    totalPages: number,\n  ): string | null {\n    // Null or empty means all pages\n    if (!pageRange || pageRange.trim() === '') {\n      return null;\n    }\n\n    try {\n      const sanitized: number[] = [];\n      const parts = pageRange.split(',');\n\n      for (const part of parts) {\n        const trimmed = part.trim();\n\n        if (trimmed.includes('-')) {\n          // Handle range (e.g., \"5-7\")\n          const [startStr, endStr] = trimmed.split('-').map((s) => s.trim());\n          const start = parseInt(startStr, 10);\n          const end = parseInt(endStr, 10);\n\n          if (isNaN(start) || isNaN(end)) {\n            this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `Invalid range: ${trimmed}`);\n            continue;\n          }\n\n          // Clamp to valid bounds (1-based page numbers)\n          const validStart = Math.max(1, Math.min(start, totalPages));\n          const validEnd = Math.max(1, Math.min(end, totalPages));\n\n          // Add all pages in range\n          for (let i = validStart; i <= validEnd; i++) {\n            if (!sanitized.includes(i)) {\n              sanitized.push(i);\n            }\n          }\n        } else {\n          // Handle single page number\n          const pageNum = parseInt(trimmed, 10);\n\n          if (isNaN(pageNum)) {\n            this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `Invalid page number: ${trimmed}`);\n            continue;\n          }\n\n          // Clamp to valid bounds\n          const validPageNum = Math.max(1, Math.min(pageNum, totalPages));\n\n          if (!sanitized.includes(validPageNum)) {\n            sanitized.push(validPageNum);\n          }\n        }\n      }\n\n      // If no valid pages found, return null (all pages)\n      if (sanitized.length === 0) {\n        this.logger.warn(LOG_SOURCE, LOG_CATEGORY, 'No valid pages in range, using all pages');\n        return null;\n      }\n\n      // Sort and convert back to range string\n      sanitized.sort((a, b) => a - b);\n\n      // Optimize consecutive pages into ranges\n      const optimized: string[] = [];\n      let rangeStart = sanitized[0];\n      let rangeEnd = sanitized[0];\n\n      for (let i = 1; i < sanitized.length; i++) {\n        if (sanitized[i] === rangeEnd + 1) {\n          rangeEnd = sanitized[i];\n        } else {\n          // End current range\n          if (rangeStart === rangeEnd) {\n            optimized.push(rangeStart.toString());\n          } else if (rangeEnd - rangeStart === 1) {\n            optimized.push(rangeStart.toString());\n            optimized.push(rangeEnd.toString());\n          } else {\n            optimized.push(`${rangeStart}-${rangeEnd}`);\n          }\n\n          // Start new range\n          rangeStart = sanitized[i];\n          rangeEnd = sanitized[i];\n        }\n      }\n\n      // Add final range\n      if (rangeStart === rangeEnd) {\n        optimized.push(rangeStart.toString());\n      } else if (rangeEnd - rangeStart === 1) {\n        optimized.push(rangeStart.toString());\n        optimized.push(rangeEnd.toString());\n      } else {\n        optimized.push(`${rangeStart}-${rangeEnd}`);\n      }\n\n      const result = optimized.join(',');\n\n      this.logger.debug(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `Sanitized page range: \"${pageRange}\" -> \"${result}\"`,\n      );\n\n      return result;\n    } catch (error) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, `Error sanitizing page range: ${error}`);\n      return null; // Fallback to all pages\n    }\n  }\n}\n","import { Logger } from '@kopjra/embedpdf-models';\nimport { init } from '@kopjra/embedpdf-pdfium';\n\nimport { PdfiumEngine } from '../engine';\n\nexport async function createPdfiumEngine(wasmUrl: string, logger?: Logger): Promise<PdfiumEngine> {\n  const response = await fetch(wasmUrl);\n  const wasmBinary = await response.arrayBuffer();\n  const wasmModule = await init({ wasmBinary });\n  return new PdfiumEngine(wasmModule, { logger });\n}\n"],"names":["_scriptName","createPdfium","document","require","pathToFileURL","__filename","href","_documentCurrentScript","tagName","toUpperCase","src","URL","baseURI","async","moduleArg","moduleRtn","readyPromiseResolve","readyPromiseReject","Module","readyPromise","Promise","resolve","reject","forEach","prop","Object","getOwnPropertyDescriptor","defineProperty","get","abort","set","ENVIRONMENT_IS_WEB","window","ENVIRONMENT_IS_WORKER","importScripts","process","versions","node","type","readAsync","readBinary","ENVIRONMENT_IS_SHELL","moduleOverrides","assign","thisProgram","scriptDirectory","Error","f","readbuffer","Uint8Array","data","read","assert","setTimeout","globalThis","clearTimeout","id","print","console","log","warn","error","printErr","self","location","currentScript","startsWith","substr","replace","lastIndexOf","url","xhr","XMLHttpRequest","open","responseType","send","response","isFileURI","fetch","credentials","then","ok","arrayBuffer","status","out","bind","err","legacyModuleProp","wasmMemory","wasmBinary","WebAssembly","HEAP8","HEAPU8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","ABORT","condition","text","updateMemoryViews","b","buffer","Int8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","checkStackCookie","max","_emscripten_stack_get_end","cookie1","cookie2","ptrToString","prototype","subarray","__ATPRERUN__","__ATINIT__","__ATPOSTRUN__","runtimeInitialized","addOnPreRun","cb","unshift","addOnPostRun","Math","imul","fround","clz32","trunc","runDependencies","runDependencyWatcher","dependenciesFulfilled","runDependencyTracking","getUniqueRunDependency","orig","random","addRunDependency","_a","call","setInterval","clearInterval","shown","dep","removeRunDependency","callback","what","e","RuntimeError","wasmBinaryFile","tempDouble","tempI64","isDataURI","filename","createExportWrapper","name","nargs","args","wasmExports","length","findWasmBinary","path","getBinarySync","file","instantiateArrayBuffer","binaryFile","imports","receiver","getBinaryPromise","binary","instantiate","reason","h16","h8","newName","incoming","configurable","isExportedByForceFilesystem","hookGlobalSymbolAccess","sym","func","missingGlobal","msg","warnOnce","unexportedRuntimeSymbol","callRuntimeCallbacks","callbacks","ptr","toString","padStart","stackRestore","val","__emscripten_stack_restore","stackSave","_emscripten_stack_get_current","UTF8Decoder","TextDecoder","UTF8ArrayToString","heapOrArray","idx","maxBytesToRead","NaN","endIdx","endPtr","decode","str","u0","u1","u2","String","fromCharCode","ch","UTF8ToString","syscallGetVarargI","SYSCALLS","varargs","ret","syscallGetVarargP","PATH","isAbs","charAt","splitPath","exec","slice","normalizeArray","parts","allowAboveRoot","up","i","last","splice","normalize","isAbsolute","trailingSlash","split","filter","p","join","dirname","result","root","dir","basename","lastSlash","paths","join2","l","r","randomFill","view","crypto","getRandomValues","initRandomFill","PATH_FS","resolvedPath","resolvedAbsolute","FS","cwd","TypeError","relative","from","to","trim","arr","start","end","fromParts","toParts","min","samePartsLength","outputParts","push","concat","FS_stdin_getChar_buffer","lengthBytesUTF8","len","c","charCodeAt","stringToUTF8Array","heap","outIdx","maxBytesToWrite","startIdx","u","intArrayFromString","stringy","dontAddNull","u8array","Array","numBytesWritten","wasmTable","functionsInTableMap","TTY","ttys","init","shutdown","register","dev","ops","input","output","registerDevice","stream_ops","stream","tty","rdev","ErrnoError","seekable","close","fsync","offset","pos","get_char","bytesRead","timestamp","Date","now","write","put_char","default_tty_ops","prompt","readline","shift","FS_stdin_getChar","ioctl_tcgets","c_iflag","c_oflag","c_cflag","c_lflag","c_cc","ioctl_tcsets","optional_actions","ioctl_tiocgwinsz","default_tty1_ops","alignMemory","size","alignment","ceil","mmapAlloc","_emscripten_builtin_memalign","address","fill","zeroMemory","MEMFS","ops_table","mount","createNode","parent","mode","isBlkdev","isFIFO","getattr","node_ops","setattr","lookup","mknod","rename","unlink","rmdir","readdir","symlink","llseek","allocate","mmap","msync","link","readlink","chrdev","chrdev_stream_ops","isDir","contents","isFile","usedBytes","isLink","isChrdev","getFileDataAsTypedArray","expandFileStorage","newCapacity","prevCapacity","oldContents","resizeFileStorage","newSize","attr","ino","nlink","uid","gid","atime","mtime","ctime","blksize","blocks","genericErrors","old_node","new_dir","new_name","new_node","lookupNode","entries","key","keys","newname","oldpath","position","canOwn","ArrayBuffer","whence","prot","flags","allocated","byteOffset","mmapFlags","preloadPlugins","FS_getMode","canRead","canWrite","ERRNO_CODES","EPERM","ENOENT","ESRCH","EINTR","EIO","ENXIO","E2BIG","ENOEXEC","EBADF","ECHILD","EAGAIN","EWOULDBLOCK","ENOMEM","EACCES","EFAULT","ENOTBLK","EBUSY","EEXIST","EXDEV","ENODEV","ENOTDIR","EISDIR","EINVAL","ENFILE","EMFILE","ENOTTY","ETXTBSY","EFBIG","ENOSPC","ESPIPE","EROFS","EMLINK","EPIPE","EDOM","ERANGE","ENOMSG","EIDRM","ECHRNG","EL2NSYNC","EL3HLT","EL3RST","ELNRNG","EUNATCH","ENOCSI","EL2HLT","EDEADLK","ENOLCK","EBADE","EBADR","EXFULL","ENOANO","EBADRQC","EBADSLT","EDEADLOCK","EBFONT","ENOSTR","ENODATA","ETIME","ENOSR","ENONET","ENOPKG","EREMOTE","ENOLINK","EADV","ESRMNT","ECOMM","EPROTO","EMULTIHOP","EDOTDOT","EBADMSG","ENOTUNIQ","EBADFD","EREMCHG","ELIBACC","ELIBBAD","ELIBSCN","ELIBMAX","ELIBEXEC","ENOSYS","ENOTEMPTY","ENAMETOOLONG","ELOOP","EOPNOTSUPP","EPFNOSUPPORT","ECONNRESET","ENOBUFS","EAFNOSUPPORT","EPROTOTYPE","ENOTSOCK","ENOPROTOOPT","ESHUTDOWN","ECONNREFUSED","EADDRINUSE","ECONNABORTED","ENETUNREACH","ENETDOWN","ETIMEDOUT","EHOSTDOWN","EHOSTUNREACH","EINPROGRESS","EALREADY","EDESTADDRREQ","EMSGSIZE","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EADDRNOTAVAIL","ENETRESET","EISCONN","ENOTCONN","ETOOMANYREFS","EUSERS","EDQUOT","ESTALE","ENOTSUP","ENOMEDIUM","EILSEQ","EOVERFLOW","ECANCELED","ENOTRECOVERABLE","EOWNERDEAD","ESTRPIPE","mounts","devices","streams","nextInode","nameTable","currentPath","initialized","ignorePermissions","constructor","errno","super","_strerror","strError","this","code","filesystems","syncFSRequests","readFiles","FSStream","shared","object","isRead","isWrite","isAppend","FSNode","mounted","readMode","writeMode","isFolder","isDevice","lookupPath","opts","follow_mount","recurse_count","current","current_path","islast","isMountpoint","follow","count","getPath","isRoot","mountpoint","hashName","parentid","hash","hashAddNode","name_next","hashRemoveNode","errCode","mayLookup","nodeName","destroyNode","isSocket","flagsToPermissionString","flag","perms","nodePermissions","includes","mayCreate","mayDelete","isdir","mayOpen","MAX_OPEN_FDS","nextfd","fd","getStreamChecked","getStream","createStream","closeStream","dupStream","origStream","_b","dup","device","getDevice","major","minor","makedev","ma","mi","getMounts","check","m","pop","syncfs","populate","completed","doCallback","done","errored","pseudo","mountRoot","unmount","next","indexOf","create","mkdir","mkdirTree","dirs","d","mkdev","newpath","old_path","new_path","old_dir","old_dirname","new_dirname","old_name","stat","dontFollow","lstat","chmod","lchmod","fchmod","chown","lchown","fchown","truncate","ftruncate","utime","w","a","FS_modeStringToFlags","created","ungotten","isClosed","getdents","seeking","bytesWritten","ioctl","cmd","arg","readFile","encoding","buf","writeFile","actualNumBytes","isView","byteLength","chdir","createDefaultDirectories","createDefaultDevices","randomBuffer","randomLeft","randomByte","createDevice","createSpecialDirectories","proc_self","createStandardStreams","stdin","stdout","stderr","staticInit","stack","quit","_fflush","findObject","dontResolveLastLink","analyzePath","exists","parentExists","parentPath","parentObject","createPath","reverse","part","createFile","properties","createDataFile","forceLoadFile","obj","createLazyFile","LazyUint8Array","lengthKnown","chunks","chunkOffset","chunkSize","chunkNum","getter","setDataGetter","cacheLength","header","datalength","Number","getResponseHeader","hasByteServing","usesGzip","lazyArray","setRequestHeader","overrideMimeType","responseText","doXHR","_length","_chunkSize","defineProperties","writeChunks","fn","absolutePath","createFolder","createLink","joinPath","standardizePath","DEFAULT_POLLMASK","calculateAt","dirfd","allowEmpty","getStreamFromFD","doStat","abs","floor","getTime","doMsync","addr","getStr","convertI32PairToI53Checked","lo","hi","stringToUTF8","outPtr","MONTH_DAYS_LEAP_CUMULATIVE","MONTH_DAYS_REGULAR_CUMULATIVE","growMemory","pages","grow","ENV","getEnvStrings","strings","env","USER","LOGNAME","PWD","HOME","LANG","navigator","languages","_","x","wasmTableMirror","getWasmTableEntry","funcPtr","UTF16Decoder","uleb128Encode","n","target","convertJsFunctionToWasm","sig","Function","typeNames","j","parameters","results","sigToWasmTypes","typeSectionBody","sigRet","sigParam","typeCodes","generateFuncType","bytes","module","Instance","exports","getFunctionAddress","WeakMap","item","updateTableMap","freeTableIndexes","setWasmTableEntry","stackAlloc","sz","__emscripten_stack_alloc","ccall","ident","returnType","argTypes","toC","string","stringToUTF8OnStack","array","getCFunc","cArgs","converter","Boolean","convertReturnValue","createPreloadedFile","onload","onerror","dontCreateFile","preFinish","fullname","processData","byteArray","finish","fileData","FS_createDataFile","Browser","handled","plugin","FS_handledByPreloadPlugin","asyncLoad","wasmImports","__assert_fail","line","__syscall_fcntl64","__syscall_fstat64","__syscall_ftruncate64","length_low","length_high","isNaN","__syscall_getdents64","dirp","struct_size","off","child","__syscall_ioctl","op","termios","argp","winsize","__syscall_lstat64","__syscall_newfstatat","nofollow","__syscall_openat","__syscall_rmdir","__syscall_stat64","__syscall_unlinkat","_abort_js","_emscripten_memcpy_js","dest","num","copyWithin","_emscripten_throw_longjmp","Infinity","_gmtime_js","time_low","time_high","tmPtr","time","date","getUTCSeconds","getUTCMinutes","getUTCHours","getUTCDate","getUTCMonth","getUTCFullYear","getUTCDay","UTC","yday","_localtime_js","getSeconds","getMinutes","getHours","getDate","getMonth","getFullYear","getDay","year","ydayFromDate","getTimezoneOffset","summerOffset","winterOffset","dst","_tzset_js","timezone","daylight","std_name","dst_name","currentYear","winter","summer","stdTimezoneOffset","extractZone","timezoneOffset","sign","absOffset","winterName","summerName","emscripten_date_now","emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","cutDown","overGrownHeapSize","environ_get","__environ","environ_buf","bufSize","stringToAscii","environ_sizes_get","penviron_count","penviron_buf_size","fd_close","fd_read","iov","iovcnt","pnum","curr","doReadv","fd_seek","offset_low","offset_high","newOffset","fd_sync","fd_write","doWritev","invoke_ii","index","a1","sp","_setThrew","invoke_iii","a2","invoke_iiii","a3","invoke_iiiii","a4","invoke_v","invoke_vii","invoke_viii","invoke_viiii","invoke_viiiiiiiii","a5","a6","a7","a8","a9","info","wasi_snapshot_preview1","receiveInstance","instance","trueModule","instantiateStreaming","catch","createWasm","calledRun","calledPrerun","_emscripten_stack_init","a0","stackCheckInit","run","preRuns","doRun","postRuns","postRun","rtn","RangeError","getEmptyTableSlot","wrapped","delete","value","endsWith","maxIdx","codeUnit","startPtr","numCharsToWrite","librarySymbol","runCaller","functions","EPDF_GetMetaKeyCount","EPDF_GetMetaKeyName","EPDF_GetMetaTrapped","EPDF_GetPageRotationByIndex","EPDF_HasMetaText","EPDF_PNG_EncodeRGBA","EPDF_RenderAnnotBitmap","EPDF_SetMetaText","EPDF_SetMetaTrapped","EPDFAction_CreateGoTo","EPDFAction_CreateGoToNamed","EPDFAction_CreateLaunch","EPDFAction_CreateRemoteGoToByName","EPDFAction_CreateRemoteGoToDest","EPDFAction_CreateURI","EPDFAnnot_ClearColor","EPDFAnnot_GenerateAppearance","EPDFAnnot_GenerateAppearanceWithBlend","EPDFAnnot_GetBlendMode","EPDFAnnot_GetBorderDashPattern","EPDFAnnot_GetBorderDashPatternCount","EPDFAnnot_GetBorderEffect","EPDFAnnot_GetBorderStyle","EPDFAnnot_GetColor","EPDFAnnot_GetDefaultAppearance","EPDFAnnot_GetIcon","EPDFAnnot_GetIntent","EPDFAnnot_GetLineEndings","EPDFAnnot_GetOpacity","EPDFAnnot_GetRectangleDifferences","EPDFAnnot_GetRichContent","EPDFAnnot_GetTextAlignment","EPDFAnnot_GetVerticalAlignment","EPDFAnnot_SetBorderDashPattern","EPDFAnnot_SetBorderStyle","EPDFAnnot_SetColor","EPDFAnnot_SetDefaultAppearance","EPDFAnnot_SetIcon","EPDFAnnot_SetIntent","EPDFAnnot_SetLine","EPDFAnnot_SetLineEndings","EPDFAnnot_SetLinkedAnnot","EPDFAnnot_SetOpacity","EPDFAnnot_SetTextAlignment","EPDFAnnot_SetVerticalAlignment","EPDFAnnot_SetVertices","EPDFAnnot_UpdateAppearanceToRect","EPDFAttachment_GetDescription","EPDFAttachment_GetIntegerValue","EPDFAttachment_SetDescription","EPDFAttachment_SetSubtype","EPDFBookmark_AppendChild","EPDFBookmark_Clear","EPDFBookmark_ClearTarget","EPDFBookmark_Create","EPDFBookmark_Delete","EPDFBookmark_InsertAfter","EPDFBookmark_SetAction","EPDFBookmark_SetDest","EPDFBookmark_SetTitle","EPDFCatalog_GetLanguage","EPDFDest_CreateRemoteView","EPDFDest_CreateRemoteXYZ","EPDFDest_CreateView","EPDFDest_CreateXYZ","EPDFNamedDest_Remove","EPDFNamedDest_SetDest","EPDFPage_CreateAnnot","EPDFPage_GetAnnotByName","EPDFPage_GetAnnotCountRaw","EPDFPage_GetAnnotRaw","EPDFPage_RemoveAnnotByName","EPDFPage_RemoveAnnotRaw","EPDFText_RedactInQuads","EPDFText_RedactInRect","FORM_CanRedo","FORM_CanUndo","FORM_DoDocumentAAction","FORM_DoDocumentJSAction","FORM_DoDocumentOpenAction","FORM_DoPageAAction","FORM_ForceToKillFocus","FORM_GetFocusedAnnot","FORM_GetFocusedText","FORM_GetSelectedText","FORM_IsIndexSelected","FORM_OnAfterLoadPage","FORM_OnBeforeClosePage","FORM_OnChar","FORM_OnFocus","FORM_OnKeyDown","FORM_OnKeyUp","FORM_OnLButtonDoubleClick","FORM_OnLButtonDown","FORM_OnLButtonUp","FORM_OnMouseMove","FORM_OnMouseWheel","FORM_OnRButtonDown","FORM_OnRButtonUp","FORM_Redo","FORM_ReplaceAndKeepSelection","FORM_ReplaceSelection","FORM_SelectAllText","FORM_SetFocusedAnnot","FORM_SetIndexSelected","FORM_Undo","FPDF_AddInstalledFont","FPDF_CloseDocument","FPDF_ClosePage","FPDF_CloseXObject","FPDF_CopyViewerPreferences","FPDF_CountNamedDests","FPDF_CreateClipPath","FPDF_CreateNewDocument","FPDF_DestroyClipPath","FPDF_DestroyLibrary","FPDF_DeviceToPage","FPDF_DocumentHasValidCrossReferenceTable","FPDF_FFLDraw","FPDF_FreeDefaultSystemFontInfo","FPDF_GetDefaultSystemFontInfo","FPDF_GetDefaultTTFMap","FPDF_GetDefaultTTFMapCount","FPDF_GetDefaultTTFMapEntry","FPDF_GetDocPermissions","FPDF_GetDocUserPermissions","FPDF_GetFileIdentifier","FPDF_GetFileVersion","FPDF_GetFormType","FPDF_GetLastError","FPDF_GetMetaText","FPDF_GetNamedDest","FPDF_GetNamedDestByName","FPDF_GetPageAAction","FPDF_GetPageBoundingBox","FPDF_GetPageCount","FPDF_GetPageHeight","FPDF_GetPageHeightF","FPDF_GetPageLabel","FPDF_GetPageSizeByIndex","FPDF_GetPageSizeByIndexF","FPDF_GetPageWidth","FPDF_GetPageWidthF","FPDF_GetSecurityHandlerRevision","FPDF_GetSignatureCount","FPDF_GetSignatureObject","FPDF_GetTrailerEnds","FPDF_GetXFAPacketContent","FPDF_GetXFAPacketCount","FPDF_GetXFAPacketName","FPDF_ImportNPagesToOne","FPDF_ImportPages","FPDF_ImportPagesByIndex","FPDF_InitLibrary","FPDF_InitLibraryWithConfig","FPDF_LoadCustomDocument","FPDF_LoadDocument","FPDF_LoadMemDocument","FPDF_LoadMemDocument64","FPDF_LoadPage","FPDF_LoadXFA","FPDF_MovePages","FPDF_NewFormObjectFromXObject","FPDF_NewXObjectFromPage","FPDF_PageToDevice","FPDF_RemoveFormFieldHighlight","FPDF_RenderPage_Close","FPDF_RenderPage_Continue","FPDF_RenderPageBitmap","FPDF_RenderPageBitmap_Start","FPDF_RenderPageBitmapWithColorScheme_Start","FPDF_RenderPageBitmapWithMatrix","FPDF_SaveAsCopy","FPDF_SaveWithVersion","FPDF_SetFormFieldHighlightAlpha","FPDF_SetFormFieldHighlightColor","FPDF_SetSandBoxPolicy","FPDF_SetSystemFontInfo","FPDF_StructElement_Attr_CountChildren","FPDF_StructElement_Attr_GetBlobValue","FPDF_StructElement_Attr_GetBooleanValue","FPDF_StructElement_Attr_GetChildAtIndex","FPDF_StructElement_Attr_GetCount","FPDF_StructElement_Attr_GetName","FPDF_StructElement_Attr_GetNumberValue","FPDF_StructElement_Attr_GetStringValue","FPDF_StructElement_Attr_GetType","FPDF_StructElement_Attr_GetValue","FPDF_StructElement_CountChildren","FPDF_StructElement_GetActualText","FPDF_StructElement_GetAltText","FPDF_StructElement_GetAttributeAtIndex","FPDF_StructElement_GetAttributeCount","FPDF_StructElement_GetChildAtIndex","FPDF_StructElement_GetChildMarkedContentID","FPDF_StructElement_GetID","FPDF_StructElement_GetLang","FPDF_StructElement_GetMarkedContentID","FPDF_StructElement_GetMarkedContentIdAtIndex","FPDF_StructElement_GetMarkedContentIdCount","FPDF_StructElement_GetObjType","FPDF_StructElement_GetParent","FPDF_StructElement_GetStringAttribute","FPDF_StructElement_GetTitle","FPDF_StructElement_GetType","FPDF_StructTree_Close","FPDF_StructTree_CountChildren","FPDF_StructTree_GetChildAtIndex","FPDF_StructTree_GetForPage","FPDF_VIEWERREF_GetDuplex","FPDF_VIEWERREF_GetName","FPDF_VIEWERREF_GetNumCopies","FPDF_VIEWERREF_GetPrintPageRange","FPDF_VIEWERREF_GetPrintPageRangeCount","FPDF_VIEWERREF_GetPrintPageRangeElement","FPDF_VIEWERREF_GetPrintScaling","FPDFAction_GetDest","FPDFAction_GetFilePath","FPDFAction_GetType","FPDFAction_GetURIPath","FPDFAnnot_AddFileAttachment","FPDFAnnot_AddInkStroke","FPDFAnnot_AppendAttachmentPoints","FPDFAnnot_AppendObject","FPDFAnnot_CountAttachmentPoints","FPDFAnnot_GetAP","FPDFAnnot_GetAttachmentPoints","FPDFAnnot_GetBorder","FPDFAnnot_GetColor","FPDFAnnot_GetFileAttachment","FPDFAnnot_GetFlags","FPDFAnnot_GetFocusableSubtypes","FPDFAnnot_GetFocusableSubtypesCount","FPDFAnnot_GetFontColor","FPDFAnnot_GetFontSize","FPDFAnnot_GetFormAdditionalActionJavaScript","FPDFAnnot_GetFormControlCount","FPDFAnnot_GetFormControlIndex","FPDFAnnot_GetFormFieldAlternateName","FPDFAnnot_GetFormFieldAtPoint","FPDFAnnot_GetFormFieldExportValue","FPDFAnnot_GetFormFieldFlags","FPDFAnnot_GetFormFieldName","FPDFAnnot_GetFormFieldType","FPDFAnnot_GetFormFieldValue","FPDFAnnot_GetInkListCount","FPDFAnnot_GetInkListPath","FPDFAnnot_GetLine","FPDFAnnot_GetLink","FPDFAnnot_GetLinkedAnnot","FPDFAnnot_GetNumberValue","FPDFAnnot_GetObject","FPDFAnnot_GetObjectCount","FPDFAnnot_GetOptionCount","FPDFAnnot_GetOptionLabel","FPDFAnnot_GetRect","FPDFAnnot_GetStringValue","FPDFAnnot_GetSubtype","FPDFAnnot_GetValueType","FPDFAnnot_GetVertices","FPDFAnnot_HasAttachmentPoints","FPDFAnnot_HasKey","FPDFAnnot_IsChecked","FPDFAnnot_IsObjectSupportedSubtype","FPDFAnnot_IsOptionSelected","FPDFAnnot_IsSupportedSubtype","FPDFAnnot_RemoveInkList","FPDFAnnot_RemoveObject","FPDFAnnot_SetAP","FPDFAnnot_SetAttachmentPoints","FPDFAnnot_SetBorder","FPDFAnnot_SetColor","FPDFAnnot_SetFlags","FPDFAnnot_SetFocusableSubtypes","FPDFAnnot_SetFontColor","FPDFAnnot_SetFormFieldFlags","FPDFAnnot_SetRect","FPDFAnnot_SetStringValue","FPDFAnnot_SetURI","FPDFAnnot_UpdateObject","FPDFAttachment_GetFile","FPDFAttachment_GetName","FPDFAttachment_GetStringValue","FPDFAttachment_GetSubtype","FPDFAttachment_GetValueType","FPDFAttachment_HasKey","FPDFAttachment_SetFile","FPDFAttachment_SetStringValue","FPDFAvail_Create","FPDFAvail_Destroy","FPDFAvail_GetDocument","FPDFAvail_GetFirstPageNum","FPDFAvail_IsDocAvail","FPDFAvail_IsFormAvail","FPDFAvail_IsLinearized","FPDFAvail_IsPageAvail","FPDFBitmap_Create","FPDFBitmap_CreateEx","FPDFBitmap_Destroy","FPDFBitmap_FillRect","FPDFBitmap_GetBuffer","FPDFBitmap_GetFormat","FPDFBitmap_GetHeight","FPDFBitmap_GetStride","FPDFBitmap_GetWidth","FPDFBookmark_Find","FPDFBookmark_GetAction","FPDFBookmark_GetCount","FPDFBookmark_GetDest","FPDFBookmark_GetFirstChild","FPDFBookmark_GetNextSibling","FPDFBookmark_GetTitle","FPDFCatalog_IsTagged","FPDFCatalog_SetLanguage","FPDFClipPath_CountPaths","FPDFClipPath_CountPathSegments","FPDFClipPath_GetPathSegment","FPDFDest_GetDestPageIndex","FPDFDest_GetLocationInPage","FPDFDest_GetView","FPDFDoc_AddAttachment","FPDFDoc_CloseJavaScriptAction","FPDFDoc_DeleteAttachment","FPDFDOC_ExitFormFillEnvironment","FPDFDoc_GetAttachment","FPDFDoc_GetAttachmentCount","FPDFDoc_GetJavaScriptAction","FPDFDoc_GetJavaScriptActionCount","FPDFDoc_GetPageMode","FPDFDOC_InitFormFillEnvironment","FPDFFont_Close","FPDFFont_GetAscent","FPDFFont_GetBaseFontName","FPDFFont_GetDescent","FPDFFont_GetFamilyName","FPDFFont_GetFlags","FPDFFont_GetFontData","FPDFFont_GetGlyphPath","FPDFFont_GetGlyphWidth","FPDFFont_GetIsEmbedded","FPDFFont_GetItalicAngle","FPDFFont_GetWeight","FPDFFormObj_CountObjects","FPDFFormObj_GetObject","FPDFFormObj_RemoveObject","FPDFGlyphPath_CountGlyphSegments","FPDFGlyphPath_GetGlyphPathSegment","FPDFImageObj_GetBitmap","FPDFImageObj_GetIccProfileDataDecoded","FPDFImageObj_GetImageDataDecoded","FPDFImageObj_GetImageDataRaw","FPDFImageObj_GetImageFilter","FPDFImageObj_GetImageFilterCount","FPDFImageObj_GetImageMetadata","FPDFImageObj_GetImagePixelSize","FPDFImageObj_GetRenderedBitmap","FPDFImageObj_LoadJpegFile","FPDFImageObj_LoadJpegFileInline","FPDFImageObj_SetBitmap","FPDFImageObj_SetMatrix","FPDFJavaScriptAction_GetName","FPDFJavaScriptAction_GetScript","FPDFLink_CloseWebLinks","FPDFLink_CountQuadPoints","FPDFLink_CountRects","FPDFLink_CountWebLinks","FPDFLink_Enumerate","FPDFLink_GetAction","FPDFLink_GetAnnot","FPDFLink_GetAnnotRect","FPDFLink_GetDest","FPDFLink_GetLinkAtPoint","FPDFLink_GetLinkZOrderAtPoint","FPDFLink_GetQuadPoints","FPDFLink_GetRect","FPDFLink_GetTextRange","FPDFLink_GetURL","FPDFLink_LoadWebLinks","FPDFPage_CloseAnnot","FPDFPage_CountObjects","FPDFPage_CreateAnnot","FPDFPage_Delete","FPDFPage_Flatten","FPDFPage_FormFieldZOrderAtPoint","FPDFPage_GenerateContent","FPDFPage_GetAnnot","FPDFPage_GetAnnotCount","FPDFPage_GetAnnotIndex","FPDFPage_GetArtBox","FPDFPage_GetBleedBox","FPDFPage_GetCropBox","FPDFPage_GetDecodedThumbnailData","FPDFPage_GetMediaBox","FPDFPage_GetObject","FPDFPage_GetRawThumbnailData","FPDFPage_GetRotation","FPDFPage_GetThumbnailAsBitmap","FPDFPage_GetTrimBox","FPDFPage_HasFormFieldAtPoint","FPDFPage_HasTransparency","FPDFPage_InsertClipPath","FPDFPage_InsertObject","FPDFPage_InsertObjectAtIndex","FPDFPage_New","FPDFPage_RemoveAnnot","FPDFPage_RemoveObject","FPDFPage_SetArtBox","FPDFPage_SetBleedBox","FPDFPage_SetCropBox","FPDFPage_SetMediaBox","FPDFPage_SetRotation","FPDFPage_SetTrimBox","FPDFPage_TransformAnnots","FPDFPage_TransFormWithClip","FPDFPageObj_AddMark","FPDFPageObj_CountMarks","FPDFPageObj_CreateNewPath","FPDFPageObj_CreateNewRect","FPDFPageObj_CreateTextObj","FPDFPageObj_Destroy","FPDFPageObj_GetBounds","FPDFPageObj_GetClipPath","FPDFPageObj_GetDashArray","FPDFPageObj_GetDashCount","FPDFPageObj_GetDashPhase","FPDFPageObj_GetFillColor","FPDFPageObj_GetIsActive","FPDFPageObj_GetLineCap","FPDFPageObj_GetLineJoin","FPDFPageObj_GetMark","FPDFPageObj_GetMarkedContentID","FPDFPageObj_GetMatrix","FPDFPageObj_GetRotatedBounds","FPDFPageObj_GetStrokeColor","FPDFPageObj_GetStrokeWidth","FPDFPageObj_GetType","FPDFPageObj_HasTransparency","FPDFPageObj_NewImageObj","FPDFPageObj_NewTextObj","FPDFPageObj_RemoveMark","FPDFPageObj_SetBlendMode","FPDFPageObj_SetDashArray","FPDFPageObj_SetDashPhase","FPDFPageObj_SetFillColor","FPDFPageObj_SetIsActive","FPDFPageObj_SetLineCap","FPDFPageObj_SetLineJoin","FPDFPageObj_SetMatrix","FPDFPageObj_SetStrokeColor","FPDFPageObj_SetStrokeWidth","FPDFPageObj_Transform","FPDFPageObj_TransformClipPath","FPDFPageObj_TransformF","FPDFPageObjMark_CountParams","FPDFPageObjMark_GetName","FPDFPageObjMark_GetParamBlobValue","FPDFPageObjMark_GetParamIntValue","FPDFPageObjMark_GetParamKey","FPDFPageObjMark_GetParamStringValue","FPDFPageObjMark_GetParamValueType","FPDFPageObjMark_RemoveParam","FPDFPageObjMark_SetBlobParam","FPDFPageObjMark_SetIntParam","FPDFPageObjMark_SetStringParam","FPDFPath_BezierTo","FPDFPath_Close","FPDFPath_CountSegments","FPDFPath_GetDrawMode","FPDFPath_GetPathSegment","FPDFPath_LineTo","FPDFPath_MoveTo","FPDFPath_SetDrawMode","FPDFPathSegment_GetClose","FPDFPathSegment_GetPoint","FPDFPathSegment_GetType","FPDFSignatureObj_GetByteRange","FPDFSignatureObj_GetContents","FPDFSignatureObj_GetDocMDPPermission","FPDFSignatureObj_GetReason","FPDFSignatureObj_GetSubFilter","FPDFSignatureObj_GetTime","FPDFText_ClosePage","FPDFText_CountChars","FPDFText_CountRects","FPDFText_FindClose","FPDFText_FindNext","FPDFText_FindPrev","FPDFText_FindStart","FPDFText_GetBoundedText","FPDFText_GetCharAngle","FPDFText_GetCharBox","FPDFText_GetCharIndexAtPos","FPDFText_GetCharIndexFromTextIndex","FPDFText_GetCharOrigin","FPDFText_GetFillColor","FPDFText_GetFontInfo","FPDFText_GetFontSize","FPDFText_GetFontWeight","FPDFText_GetLooseCharBox","FPDFText_GetMatrix","FPDFText_GetRect","FPDFText_GetSchCount","FPDFText_GetSchResultIndex","FPDFText_GetStrokeColor","FPDFText_GetText","FPDFText_GetTextIndexFromCharIndex","FPDFText_GetTextObject","FPDFText_GetUnicode","FPDFText_HasUnicodeMapError","FPDFText_IsGenerated","FPDFText_IsHyphen","FPDFText_LoadCidType2Font","FPDFText_LoadFont","FPDFText_LoadPage","FPDFText_LoadStandardFont","FPDFText_SetCharcodes","FPDFText_SetText","FPDFTextObj_GetFont","FPDFTextObj_GetFontSize","FPDFTextObj_GetRenderedBitmap","FPDFTextObj_GetText","FPDFTextObj_GetTextRenderMode","FPDFTextObj_SetTextRenderMode","PDFiumExt_CloseFileWriter","PDFiumExt_CloseFormFillInfo","PDFiumExt_ExitFormFillEnvironment","PDFiumExt_GetFileWriterData","PDFiumExt_GetFileWriterSize","PDFiumExt_Init","PDFiumExt_InitFormFillEnvironment","PDFiumExt_OpenFileWriter","PDFiumExt_OpenFormFillInfo","PDFiumExt_SaveAsCopy","pdfium","cwrap","createWrappedModule","readString","wasmModule","readChars","parseChars","defaultLength","malloc","actualLength","free","readArrayBuffer","bufferSize","bufferPtr","DataView","setInt8","getValue","RESERVED_INFO_KEYS","Set","isValidCustomKey","has","DEFAULT_CONFIG","pageTtl","maxPagesPerDocument","PdfCache","memoryManager","config","docs","Map","setDocument","filePtr","docPtr","ctx","DocumentContext","getContext","docId","closeDocument","dispose","closeAllDocuments","values","clear","updateConfig","newConfig","getCacheStats","pagesByDocument","totalPages","pageCount","getCacheSize","documents","pageCache","PageCache","acquirePage","pageIdx","acquire","borrowPage","forceReleaseAll","pdf","cache","accessOrder","evictIfNeeded","pagePtr","PageContext","removeFromAccessOrder","updateAccessOrder","clearExpiryTimer","bumpRefCount","existed","release","disposeImmediate","updateTtl","lruPageIdx","getRefCount","ttl","onFinalDispose","refCount","disposed","expiryTimer","newTtl","textPagePtr","formHandle","formInfoPtr","getTextPage","ensureAlive","getFormHandle","withAnnotation","annotIdx","annotPtr","LIMITS","MAX_TOTAL_MEMORY","LOG_SOURCE","LOG_CATEGORY","MemoryManager","pdfiumModule","logger","allocations","totalAllocated","allocation","isEnabled","getStats","allocationCount","checkLeaks","alloc","OffscreenCanvasError","message","browserImageDataToBlobConverter","getImageData","imageType","quality","OffscreenCanvas","pdfImage","imageData","ImageData","width","height","putImageData","convertToBlob","PdfiumEngine","options","memoryLeakCheckInterval","NoopLogger","imageDataConverter","initialize","debug","perf","PdfTaskHelper","destroy","withWString","stringToUTF16","withFloatArray","setValue","openDocumentUrl","password","requestOptions","task","fetchFullAndOpen","wait","doc","PdfErrorCode","Unknown","checkRangeSupport","headResponse","method","headers","fileLength","supportsRanges","parseInt","content","testResponse","Range","statusText","arrayBuf","pdfFile","openDocumentBuffer","openDocumentWithRangeRequest","knownFileLength","retrieveFileLength","openDocumentFromLoader","withCredentials","convertResponseToUint8Array","resp","lenStr","lastError","sizePtr","rotation","page","pdfDoc","fileLoader","callbackPtr","addFunction","_pThis","pBuf","fileAccessPtr","getMetadata","DocNotOpen","creationRaw","readMetaText","modRaw","metadata","title","author","subject","keywords","producer","creator","creationDate","pdfDateToDate","modificationDate","trapped","getMetaTrapped","custom","readAllMeta","setMetadata","meta","strMap","field","v","s","setMetaText","writeDate","raw","dateToPdfDate","setMetaTrapped","getDocPermissions","permissions","getDocUserPermissions","getSignatures","signatures","signatureObjPtr","byteRange","subFilter","bufferLength","UTF16ToString","docMDP","getBookmarks","bookmarks","readPdfBookmarks","setBookmarks","list","build","parentPtr","items","bmPtr","wptr","applyBookmarkTarget","children","deleteBookmarks","renderPage","rect","origin","y","renderRectEncoded","renderPageRect","getAllAnnotations","cancelled","ignore","processChunk","annots","readPageAnnotationsRaw","progress","annotations","readAllAnnotations","annotationsByPage","pageAnnotations","readPageAnnotations","getPageAnnotations","createPageAnnotation","annotation","context","pageCtx","annotationPtr","CantCreateAnnot","isUuidV4","uuidV4","setAnnotString","CantSetAnnotString","setPageAnnoRect","CantSetAnnotRect","isSucceed","PdfAnnotationSubtype","INK","addInkStroke","STAMP","addStampContent","TEXT","addTextContent","FREETEXT","addFreeTextContent","LINE","addLineContent","POLYLINE","POLYGON","addPolyContent","CIRCLE","SQUARE","addShapeContent","UNDERLINE","STRIKEOUT","SQUIGGLY","HIGHLIGHT","addTextMarkupContent","blendMode","CantSetAnnotContent","updatePageAnnotation","getAnnotationByName","NotFound","removePageAnnotation","removeAnnotationByName","getPageTextRects","textRects","readPageTextRects","renderThumbnail","scaleFactor","rest","getAttachments","attachments","attachment","readPdfAttachment","addAttachment","params","description","mimeType","attachmentPtr","wNamePtr","wDescriptionPtr","u8","contentPtr","removeAttachment","readAttachmentContent","CantReadAttachmentSize","CantReadAttachmentContent","setFormFieldValue","formFillInfoPtr","CantFocusAnnot","kind","CantSelectText","textPtr","isSelected","CantSelectOption","kReturn","CantCheckField","flattenPage","PdfPageFlattenFlag","Display","extractPages","pageIndexes","newDocPtr","CantCreateNewDoc","pageIndexesPtr","CantImportPages","saveDocument","extractText","charCount","getTextSlices","slices","byPage","pageIndex","bufPtr","charIndex","stripPdfUnwantedMarkers","merge","files","fileIds","map","ptrs","mergePages","mergeConfigs","configIds","pageIndices","validPageIndices","pageString","saveAsCopy","modified","setAnnotationDate","inReplyToId","setInReplyToId","setAnnotationIcon","icon","PdfAnnotationIcon","Comment","setAnnotationFlags","state","stateModel","setBorderStyle","PdfAnnotationBorderStyle","SOLID","setAnnotationOpacity","opacity","setAnnotationTextAlignment","textAlign","setAnnotationVerticalAlignment","verticalAlign","setAnnotationDefaultAppearance","fontFamily","fontSize","fontColor","intent","setAnnotIntent","backgroundColor","setAnnotationColor","PdfAnnotationColorType","Color","strokeWidth","setInkList","inkList","color","setLinePoints","linePoints","setLineEndings","lineEndings","PdfAnnotationLineEnding","None","strokeStyle","setBorderDashPattern","strokeDashArray","InteriorColor","strokeColor","setPdfAnnoVertices","vertices","setAnnotCustom","syncQuadPointsAnno","segmentRects","addImageObject","PdfStampFit","Cover","pixelCount","bitmapBufferPtr","red","green","blue","alpha","bitmapPtr","imageObjectPtr","matrixPtr","pagePos","convertDevicePointToPagePoint","writerPtr","dataPtr","readCatalogLanguage","byteLen","PdfTrappedStatus","NotSet","True","False","toSet","getMetaKeyCount","customOnly","getMetaKeyName","buflen","rootBookmarkPtr","bookmarkPtr","bookmark","readPdfBookmark","readPdfBookmarkTarget","rectsCount","topPtr","leftPtr","rightPtr","bottomPtr","left","top","right","bottom","deviceXPtr","deviceYPtr","utf16Length","bytesCount","textBuffer","textBufferPtr","flagsPtr","textRect","font","family","getPageGeometry","label","glyphCount","glyphs","g","readGlyphInfo","runs","buildRunsFromGlyphs","curObjPtr","bounds","objPtr","charStart","minX","minY","maxX","maxY","isEmpty","isSpace","dx1Ptr","dy1Ptr","dx2Ptr","dy2Ptr","rectPtr","x1","y1","x2","y2","getPageGlyphs","total","readCharBox","annotationCount","anno","readPageAnnotation","getAnnotString","subType","readPdfTextAnno","readPdfFreeTextAnno","LINK","readPdfLinkAnno","WIDGET","readPdfWidgetAnno","FILEATTACHMENT","readPdfFileAttachmentAnno","readPdfInkAnno","readPdfPolygonAnno","readPdfPolylineAnno","readPdfLineAnno","readPdfHighlightAnno","readPdfStampAnno","readPdfSquareAnno","readPdfCircleAnno","readPdfUnderlineAnno","readPdfSquigglyAnno","readPdfStrikeOutAnno","CARET","readPdfCaretAnno","readPdfAnno","readAnnotationColor","colorType","rPtr","gPtr","bPtr","colour","getAnnotationColor","annotationColor","pdfColorToWebColor","webColor","pdfColor","webColorToPdfColor","getAnnotationOpacity","opacityPtr","pdfAlphaToWebOpacity","pdfOpacity","webOpacityToPdfAlpha","getAnnotationTextAlignment","getAnnotationVerticalAlignment","getAnnotationDefaultAppearance","fontPtr","getBorderStyle","widthPtr","style","UNKNOWN","getAnnotationIcon","getBorderEffect","intensityPtr","intensity","getRectangleDifferences","lPtr","tPtr","getAnnotationDate","getAttachmentDate","getAttachmentString","setAttachmentDate","setAttachmentString","getBorderDashPattern","pattern","arrPtr","okNative","clean","isFinite","getLineEndings","getLinePoints","sx","sy","ex","ey","convertPagePointToDevicePoint","p1","p2","getQuadPointsAnno","quadCount","quads","qi","quadPtr","xs","ys","base","p3","p4","quadToRect","rects","writeQuad","q","rectToQuad","redactTextInRects","recurseForms","drawBlackBoxes","_c","_d","allocFSQuadsBufferFromRects","getInkList","pathCount","points","px","py","stroke","pDev","pPage","getAnnotCustom","annoRect","readPageAnnoRect","convertPageRectToDeviceRect","getInReplyToId","getAnnotationFlags","defaultStyle","da","richContent","getAnnotRichContent","PdfStandardFont","linkPtr","readPdfLinkAnnoTarget","pageRect","readPdfWidgetAnnoField","getAnnotIntent","readPdfAnnoVertices","interiorColor","DASHED","first","readPdfPageObject","pageObjectPtr","PdfPageObjectType","readPathObject","IMAGE","readImageObject","FORM","readFormObject","pathObjectPtr","segmentCount","segments","segment","readPdfSegment","matrix","readPdfPageObjectTransformMatrix","annotationObjectPtr","segmentIndex","segmentPtr","segmentType","pointXPtr","pointYPtr","pointX","pointY","point","bitmapWidth","bitmapHeight","format","Uint8ClampedArray","formObjectPtr","objectCount","objects","pageObj","readStampAnnotationContents","getStrokeWidth","hPtr","vPtr","wPtr","rawFlags","flagsToNames","namesToFlags","getAttachmentNumber","JSON","parse","jsonString","stringify","wValPtr","pointsPtr","pagePt","getActionPtr","getDestinationPtr","actionPtr","action","readPdfAction","destinationPtr","destination","readPdfDestination","alternateName","PDF_FORM_FIELD_TYPE","COMBOBOX","LISTBOX","isChecked","exportValue","CHECKBOX","RADIOBUTTON","renderPageAnnotation","Rotation","Degree0","dpr","AppearanceMode","Normal","imageQuality","Task","finalScale","toIntRect","devRect","transformRect","wDev","hDev","stride","heapPtr","M","buildUserToDeviceMatrix","mPtr","rgba","blob","encodeViaWasm","wasmError","finally","blobFrom","mime","copy","Blob","outPtrPtr","baseW","baseH","swap","round","withForms","clipPtr","withAnnotations","formParams","pageSize","rectLeft","rectBottom","rectRight","rectTop","pageWidth","pageHeight","scaleX","hypot","scaleY","formsWidth","formsHeight","startX","startY","Degree90","Degree180","Degree270","computeFormDrawParams","heapBuf","createLocalDestPtr","zoom","PdfZoomMode","XYZ","viewEnum","FitPage","FitHorizontal","FitVertical","FitRectangle","destPtr","PdfActionType","Goto","actPtr","URI","uri","LaunchAppOrOpenFile","RemoteGoto","Unsupported","paramsCountPtr","paramsPtr","maxParmamsCount","zoomMode","paramsCount","paramPtr","hasXPtr","hasYPtr","hasZPtr","xPtr","yPtr","zPtr","hasX","hasY","hasZ","checksum","DW","DH","readPageAnnoAppearanceStreams","normal","readPageAnnoAppearanceStream","rollover","Rollover","down","Down","ap","setPageAnnoAppearanceStream","apContent","x0d","y0d","x1d","y1d","TL","TR","BR","BL","pageRectPtr","getHighlightRects","startIndex","highlightRects","t","searchAllPages","keyword","keywordPtr","reduce","acc","MatchFlag","allResults","pageResults","searchAllInPage","buildContext","fullText","windowChars","WORD_BREAK","test","collected","findWordStart","findWordEnd","before","trimStart","match","after","trimEnd","tidy","truncatedLeft","truncatedRight","searchHandle","preparePrintDocument","includeAnnotations","pageRange","printDocPtr","sanitizedPageRange","sanitizePageRange","removalResult","removeAnnotationsFromPrintDocument","success","annotationsRemoved","pagesProcessed","totalAnnotationsRemoved","annotCount","annotationsRemovedFromPage","annotIndex","sanitized","trimmed","startStr","endStr","validStart","validEnd","pageNum","validPageNum","sort","optimized","rangeStart","rangeEnd","wasmUrl"],"mappings":"4HACMA,6DADFC,GACED,EAAc,oBAAAE,SAAAC,QAAA,OAAAC,cAAAC,YAAAC,KAAAC,GAAA,WAAAA,EAAAC,QAAAC,eAAAF,EAAAG,KAAA,IAAAC,IAAA,6BAAAT,SAAAU,SAAAN,KAEXO,eAAgBC,EAAY,IACjC,IAAIC,EAmBAC,EAAqBC,EAHrBC,EAASJ,EAITK,EAAe,IAAIC,QAAQ,CAACC,EAASC,KACvCN,EAAsBK,EACtBJ,EAAqBK,IAEvB,CACE,wBACA,uBACA,uBACA,+BACA,oBACA,uBACA,0BACA,oBACA,uBACA,yBACA,8BACA,2BACA,qCACA,mCACA,wBACA,wBACA,gCACA,yCACA,0BACA,kCACA,uCACA,6BACA,4BACA,sBACA,kCACA,qBACA,uBACA,4BACA,wBACA,qCACA,4BACA,8BACA,kCACA,kCACA,4BACA,sBACA,kCACA,qBACA,uBACA,qBACA,4BACA,4BACA,wBACA,8BACA,kCACA,yBACA,oCACA,iCACA,kCACA,iCACA,6BACA,4BACA,sBACA,4BACA,uBACA,uBACA,4BACA,0BACA,wBACA,yBACA,2BACA,6BACA,4BACA,uBACA,sBACA,wBACA,yBACA,wBACA,2BACA,6BACA,wBACA,8BACA,2BACA,0BACA,yBACA,gBACA,gBACA,0BACA,2BACA,6BACA,sBACA,yBACA,wBACA,uBACA,wBACA,wBACA,wBACA,0BACA,eACA,gBACA,kBACA,gBACA,6BACA,sBACA,oBACA,oBACA,qBACA,sBACA,oBACA,aACA,gCACA,yBACA,sBACA,wBACA,yBACA,aACA,yBACA,sBACA,kBACA,qBACA,8BACA,wBACA,uBACA,0BACA,wBACA,uBACA,qBACA,4CACA,gBACA,kCACA,iCACA,yBACA,8BACA,8BACA,0BACA,8BACA,0BACA,uBACA,oBACA,qBACA,oBACA,qBACA,2BACA,uBACA,2BACA,qBACA,sBACA,uBACA,qBACA,2BACA,4BACA,qBACA,sBACA,mCACA,0BACA,2BACA,uBACA,4BACA,0BACA,yBACA,0BACA,oBACA,2BACA,oBACA,8BACA,2BACA,qBACA,wBACA,0BACA,iBACA,gBACA,kBACA,iCACA,2BACA,qBACA,iCACA,yBACA,4BACA,yBACA,+BACA,8CACA,mCACA,mBACA,wBACA,mCACA,mCACA,yBACA,0BACA,yCACA,wCACA,2CACA,2CACA,oCACA,mCACA,0CACA,0CACA,mCACA,oCACA,oCACA,oCACA,iCACA,0CACA,wCACA,sCACA,8CACA,4BACA,8BACA,yCACA,gDACA,8CACA,iCACA,gCACA,yCACA,+BACA,8BACA,yBACA,iCACA,mCACA,8BACA,4BACA,0BACA,+BACA,oCACA,yCACA,2CACA,kCACA,sBACA,0BACA,sBACA,yBACA,+BACA,0BACA,oCACA,0BACA,mCACA,mBACA,iCACA,uBACA,sBACA,+BACA,sBACA,kCACA,uCACA,0BACA,yBACA,+CACA,iCACA,iCACA,uCACA,iCACA,qCACA,+BACA,8BACA,8BACA,+BACA,6BACA,4BACA,qBACA,qBACA,4BACA,4BACA,uBACA,4BACA,4BACA,4BACA,qBACA,4BACA,wBACA,0BACA,yBACA,iCACA,oBACA,uBACA,sCACA,8BACA,gCACA,2BACA,0BACA,mBACA,iCACA,uBACA,sBACA,sBACA,kCACA,0BACA,+BACA,qBACA,4BACA,oBACA,0BACA,0BACA,0BACA,iCACA,6BACA,+BACA,yBACA,0BACA,iCACA,oBACA,qBACA,yBACA,6BACA,wBACA,yBACA,0BACA,yBACA,qBACA,uBACA,sBACA,uBACA,wBACA,wBACA,wBACA,wBACA,uBACA,qBACA,0BACA,yBACA,wBACA,8BACA,+BACA,yBACA,wBACA,2BACA,2BACA,kCACA,+BACA,6BACA,8BACA,oBACA,yBACA,iCACA,4BACA,mCACA,yBACA,8BACA,+BACA,oCACA,uBACA,mCACA,kBACA,sBACA,4BACA,uBACA,0BACA,qBACA,wBACA,yBACA,0BACA,0BACA,2BACA,sBACA,4BACA,yBACA,4BACA,oCACA,qCACA,0BACA,yCACA,oCACA,gCACA,+BACA,oCACA,iCACA,kCACA,kCACA,6BACA,mCACA,0BACA,0BACA,gCACA,kCACA,0BACA,4BACA,uBACA,0BACA,sBACA,sBACA,qBACA,yBACA,oBACA,2BACA,iCACA,0BACA,oBACA,yBACA,mBACA,yBACA,uBACA,yBACA,wBACA,mBACA,oBACA,mCACA,4BACA,qBACA,0BACA,0BACA,sBACA,wBACA,uBACA,oCACA,wBACA,sBACA,gCACA,wBACA,iCACA,uBACA,gCACA,4BACA,2BACA,yBACA,gCACA,gBACA,wBACA,yBACA,sBACA,wBACA,uBACA,wBACA,wBACA,uBACA,4BACA,8BACA,uBACA,0BACA,6BACA,6BACA,6BACA,uBACA,yBACA,2BACA,4BACA,4BACA,4BACA,4BACA,2BACA,0BACA,2BACA,uBACA,kCACA,yBACA,gCACA,8BACA,8BACA,uBACA,+BACA,2BACA,0BACA,0BACA,4BACA,4BACA,4BACA,4BACA,2BACA,0BACA,2BACA,yBACA,8BACA,8BACA,yBACA,iCACA,0BACA,+BACA,2BACA,qCACA,oCACA,+BACA,uCACA,qCACA,+BACA,gCACA,+BACA,kCACA,qBACA,kBACA,0BACA,wBACA,2BACA,mBACA,mBACA,wBACA,4BACA,4BACA,2BACA,iCACA,gCACA,wCACA,8BACA,iCACA,4BACA,sBACA,uBACA,uBACA,sBACA,qBACA,qBACA,sBACA,2BACA,yBACA,uBACA,8BACA,sCACA,0BACA,yBACA,wBACA,wBACA,0BACA,4BACA,sBACA,oBACA,wBACA,8BACA,2BACA,oBACA,sCACA,0BACA,uBACA,+BACA,wBACA,qBACA,6BACA,qBACA,qBACA,6BACA,yBACA,oBACA,uBACA,2BACA,iCACA,uBACA,iCACA,iCACA,6BACA,+BACA,qCACA,+BACA,+BACA,kBACA,qCACA,4BACA,8BACA,wBACA,UACA,QACA,UACA,6BACA,wBACAC,QAASC,IACJC,OAAOC,yBAAyBP,EAAcK,IACjDC,OAAOE,eAAeR,EAAcK,EAAM,CACxCI,IAAK,IACHC,EACE,mBACEL,EACA,iJAENM,IAAK,I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ACA,iBACA,iBACA,sBACA,sBACA,cACA,cACA,SACA,YACA,YACA,YACA,YACA,eACA,gBACA,gBACA,gBACA,UACA,aACA,yBACA,gBACA,eACA,UACA,kBACA,mBACA,uBACA,sBACA,mBACA,YACA,cACA,kBACA,oBACA,aACA,cACA,eACA,aACA,iBACA,SACA,SACA,SACA,eACA,mBACA,gBACA,mBACA,gBACA,gBACA,mBACA,kBACA,2BACA,yBACA,kBACA,wBACA,qBACA,6BACA,6BACA,0BACA,6BACA,iCACA,yCACA,4BACA,oCACA,oBACA,iCACA,yCACA,gCACA,wCACA,6BACA,qCACA,0BACA,mCACA,wBACA,eACA,wCACA,sBACA,iCACA,yCACA,wCACA,qBACA,gCACA,wCACA,6BACA,uBACA,+BACA,oCACA,uBACA,UACA,+BACA,uBACA,uBACA,eACA,eACA,4BACA,iBACA,yBACA,yBACA,uBACA,iBACA,sBACA,wBACA,uBACA,uBACA,sBACA,aACA,cACA,gBACA,sBACA,gBACA,oBACA,kCACA,4BACA,WACA,UACA,kBACA,mBACA,YACA,eACA,sBACA,yBACA,oBACA,sCACA,uCACA,kCACA,gCACA,wCACA,gCACA,kCACA,qBACA,gCACA,iCACA,iCACA,4BACA,0BACA,6CACA,uBACA,iCACA,+BACA,eACA,6BACA,qBACA,eACA,cACA,WACA,sBACA,qBACA,WACA,WACA,cAEoB58B,QA1lMtB,SAA8B+J,GAC5BD,GAAuBC,EAAK,KAG1B,IAAIG,EAAM,KAAKH,mJAIX+yB,EAAgB/yB,EACf+yB,EAAcn6B,WAAW,OAC5Bm6B,EAAgB,IAAM/yB,GAExBG,GAAO,8CAA8C4yB,MACjDjzB,GAA4BE,KAC9BG,GACE,4FAEJC,GAASD,KAKXE,GAAwBL,EAC1B,GAqkMwB,CACtB,MACA,cACA,YACA,eACA,YACA,eACA,mBACA,sBACA,MACA,MACA,WACA,QACA,aACA,mBACA,mBACA,6BACA,YACA,eACA,aACA,cACA,aACA,aACA,aACA,MACA,cACA,WACA,MACA,YACA,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"}