From a563f768ab4e0fc3a81a6c186c12e7fb72973792 Mon Sep 17 00:00:00 2001 From: short <> Date: Mon, 4 Aug 2003 17:25:51 +0000 Subject: [PATCH] Synchronize all Cc*() calls for proper debugging info chronology. Additional debug info for 'SharedCacheMap' tracking. --- src/TraceFS/TraceFS-W32/TraceFS.c | 163 +++++++++++++++++++++++++++++++----- src/TraceFS/TraceFS-W32/TraceFS.sys | Bin 55296 -> 61056 bytes 2 files changed, 143 insertions(+), 20 deletions(-) diff --git a/src/TraceFS/TraceFS-W32/TraceFS.c b/src/TraceFS/TraceFS-W32/TraceFS.c index 3bdd145..1064f4b 100644 --- a/src/TraceFS/TraceFS-W32/TraceFS.c +++ b/src/TraceFS/TraceFS-W32/TraceFS.c @@ -30,21 +30,56 @@ NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryP #pragma alloc_text (INIT, DriverEntry) #endif -static FAST_MUTEX lock_mutex; +/* Ke*Mutex() would be reentrant but it looked too unclear for me. + * Never ExAcquireFastMutex() two FAST_MUTEX once or one FAST_MUTEX twice. + * Use Ex*ResourceLite instead of Ex*FastMutex() as it would set IRQL to DPC + * and we cannot pass the execution to Cc*() in DPC. + * Ex*FastMutex() problem: IRP_MJ_SHUTDOWN: Assertion failure. + */ +static ERESOURCE lock_resource; +static int lock_resource_count; +static PETHREAD lock_resource_CurrentThread; static void lock_init(void) { - ExInitializeFastMutex(&lock_mutex); + if (ExInitializeResourceLite(&lock_resource)) + KeBugCheck(0); + lock_resource_count=0; + lock_resource_CurrentThread=NULL; } static void lock(void) { - ExAcquireFastMutex(&lock_mutex); + if (lock_resource_CurrentThread==PsGetCurrentThread()) { + if (lock_resource_count<=0) + KeBugCheck(0); + lock_resource_count++; + return; + } + KeEnterCriticalRegion(); + if (!ExAcquireResourceExclusiveLite(&lock_resource,TRUE)) + KeBugCheck(0); + KeLeaveCriticalRegion(); + if (lock_resource_CurrentThread) + KeBugCheck(0); + if (lock_resource_count!=0) + KeBugCheck(0); + lock_resource_CurrentThread=PsGetCurrentThread(); + lock_resource_count++; } static void unlock(void) { - ExReleaseFastMutex(&lock_mutex); + if (lock_resource_CurrentThread!=PsGetCurrentThread()) + KeBugCheck(0); + if (lock_resource_count<=0) + KeBugCheck(0); + if (--lock_resource_count) + return; + lock_resource_CurrentThread=NULL; + KeEnterCriticalRegion(); + ExReleaseResourceLite(&lock_resource); + KeLeaveCriticalRegion(); } #define DBGPREFIX "TraceFS(0x%08lX/0x%08lX): " @@ -52,6 +87,11 @@ static void unlock(void) static int dbgindent=0; +/* DBGSINGLEENTER*() / DBGSINGLELEAVE*() are protected by lock()/unlock() + * to serialize the Cc*() function calls as otherwise the debug dumps + * chronology may not match the real core execution chronology inside. + */ + /* lock() will protect dbg_unicode_string() static buffer. */ #define DBGSINGLE6(fmt,arg1,arg2,arg3,arg4,arg5,arg6) \ do { lock(); DbgPrint("%*s" DBGPREFIX fmt "\n",dbgindent,"",DBGARG,arg1,arg2,arg3,arg4,arg5,arg6); unlock(); } while (0) @@ -62,7 +102,7 @@ static int dbgindent=0; #define DBGSINGLE1(fmt,arg1) DBGSINGLE2(fmt,arg1,0) #define DBGSINGLE0(fmt) DBGSINGLE1(fmt,0) #define DBGSINGLEENTER6(fmt,arg1,arg2,arg3,arg4,arg5,arg6) \ - do { DBGSINGLE6("enter: " fmt,arg1,arg2,arg3,arg4,arg5,arg6); dbgindent++; } while (0) + do { lock(); DBGSINGLE6("enter: " fmt,arg1,arg2,arg3,arg4,arg5,arg6); dbgindent++; } while (0) #define DBGSINGLEENTER5(fmt,arg1,arg2,arg3,arg4,arg5) DBGSINGLEENTER6(fmt,arg1,arg2,arg3,arg4,arg5,0) #define DBGSINGLEENTER4(fmt,arg1,arg2,arg3,arg4) DBGSINGLEENTER5(fmt,arg1,arg2,arg3,arg4,0) #define DBGSINGLEENTER3(fmt,arg1,arg2,arg3) DBGSINGLEENTER4(fmt,arg1,arg2,arg3,0) @@ -70,7 +110,7 @@ static int dbgindent=0; #define DBGSINGLEENTER1(fmt,arg1) DBGSINGLEENTER2(fmt,arg1,0) #define DBGSINGLEENTER0(fmt) DBGSINGLEENTER1(fmt,0) #define DBGSINGLELEAVE3(fmt,arg1,arg2,arg3) \ - do { dbgindent--; DBGSINGLE3("leave: " fmt,arg1,arg2,arg3); } while (0) + do { dbgindent--; DBGSINGLE3("leave: " fmt,arg1,arg2,arg3); unlock(); } while (0) #define DBGSINGLELEAVE2(fmt,arg1,arg2) DBGSINGLELEAVE3(fmt,arg1,arg2,0) #define DBGSINGLELEAVE1(fmt,arg1) DBGSINGLELEAVE2(fmt,arg1,0) #define DBGSINGLELEAVE0(fmt) DBGSINGLELEAVE1(fmt,0) @@ -120,7 +160,7 @@ DEVICE_OBJECT *device_object; return r; } -static const char *const irp_mj_dump_FILE_SYSTEM_CONTROL_MinorFunction_names[]={ +static const char *const dump_irp_mj_FILE_SYSTEM_CONTROL_MinorFunction_names[]={ "IRP_MN_USER_FS_REQUEST", "IRP_MN_MOUNT_VOLUME", "IRP_MN_VERIFY_VOLUME", @@ -156,10 +196,66 @@ static const char *const irp_mj_dump_FILE_SYSTEM_CONTROL_MinorFunction_names[]={ #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM,72,METHOD_BUFFERED,FILE_SPECIAL_ACCESS) #endif -static void irp_mj_dump(struct _DEVICE_OBJECT *DeviceObject,struct _IRP *Irp) +static struct SectionObjectPointer { + FILE_OBJECT *FileObject; + PVOID SharedCacheMap; + } SectionObjectPointer_cache[CACHE_SIZE]; +static int SectionObjectPointer_cache_used=0; + +static struct SectionObjectPointer *SectionObjectPointer_set(FILE_OBJECT *FileObject) +{ +struct SectionObjectPointer *sopp; +PVOID SharedCacheMap; + + if (!FileObject->SectionObjectPointer) + return NULL; + if (!(SharedCacheMap=FileObject->SectionObjectPointer->SharedCacheMap)) + return NULL; + for (sopp=SectionObjectPointer_cache;soppFileObject==FileObject || sopp->SharedCacheMap==SharedCacheMap) + break; + } + if (sopp>=SectionObjectPointer_cache+G_N_ELEMENTS(SectionObjectPointer_cache)) + return NULL; + if (sopp==SectionObjectPointer_cache+SectionObjectPointer_cache_used) + SectionObjectPointer_cache_used++; + sopp->FileObject=FileObject; + sopp->SharedCacheMap=SharedCacheMap; + return sopp; +} + +static FILE_OBJECT *SectionObjectPointer_find(SECTION_OBJECT_POINTERS *SectionObjectPointer) +{ +struct SectionObjectPointer *sopp; +PVOID SharedCacheMap; + + if (!SectionObjectPointer) + return NULL; + if (!(SharedCacheMap=SectionObjectPointer->SharedCacheMap)) + return NULL; + for (sopp=SectionObjectPointer_cache;soppSharedCacheMap==SharedCacheMap) + return sopp->FileObject; + } + return NULL; +} + +static void dump_FileObject(FILE_OBJECT *FileObject) +{ + if (!FileObject) { + DBGSINGLE0("FileObject=NULL"); + return; + } + DBGSINGLE4("FileObject=0x%lX: FileName=%s,Flags=0x%lX,SectionObjectPointer->SharedCacheMap=0x%lX", + (long)FileObject, + dbg_unicode_string(&FileObject->FileName),FileObject->Flags, + (!FileObject->SectionObjectPointer ? -1 : (long)FileObject->SectionObjectPointer->SharedCacheMap)); + SectionObjectPointer_set(FileObject); +} + +static void dump_irp_mj(struct _DEVICE_OBJECT *DeviceObject,struct _IRP *Irp) { IO_STACK_LOCATION *IoStackLocation; -FILE_OBJECT *FileObject; if (!Irp) { DBGSINGLE0("Irp==NULL"); @@ -170,14 +266,8 @@ FILE_OBJECT *FileObject; DBGSINGLE0("IoStackLocation==NULL"); return; } - if (!(FileObject=IoStackLocation->FileObject)) - DBGSINGLE0("FileObject=NULL"); - else - DBGSINGLE5("FileObject=0x%lX: FileName=%s,Flags=0x%lX,SectionObjectPointer=0x%lX,->SharedCacheMap=0x%lX", - (long)FileObject, - dbg_unicode_string(&FileObject->FileName),FileObject->Flags, - (long)FileObject->SectionObjectPointer, - (!FileObject->SectionObjectPointer ? -1 : (long)FileObject->SectionObjectPointer->SharedCacheMap)); + dump_FileObject(IoStackLocation->FileObject); + switch (IoStackLocation->MajorFunction) { case IRP_MJ_READ: DBGSINGLE2("READ: ByteOffset=0x%lX,Length=0x%lX", @@ -193,8 +283,8 @@ FILE_OBJECT *FileObject; DBGSINGLE2("FILE_SYSTEM_CONTROL: MinorFunction=%s (%d)", ((1 && IoStackLocation->MinorFunction>=0 - && IoStackLocation->MinorFunctionMinorFunction] : "???"), + && IoStackLocation->MinorFunctionMinorFunction] : "???"), IoStackLocation->MinorFunction); switch (IoStackLocation->MinorFunction) { case IRP_MN_USER_FS_REQUEST: { @@ -255,7 +345,7 @@ static NTSTATUS tracefs_major_##irp_mj_name(IN struct _DEVICE_OBJECT *DeviceObje NTSTATUS r; \ \ DBGSINGLEENTER0( #irp_mj_name ); \ - irp_mj_dump(DeviceObject,Irp); \ + dump_irp_mj(DeviceObject,Irp); \ r=(*tracefs_major_##irp_mj_name##_orig)(DeviceObject,Irp); \ DBGSINGLELEAVE1( #irp_mj_name ": r=0x%lX",(long)r); \ return r; \ @@ -339,6 +429,7 @@ BOOLEAN r; DBGSINGLEENTER4("CcCanIWrite: FileObject=0x%lX,BytesToWrite=0x%lX,Wait=%d,Retrying=%d", (long)FileObject,BytesToWrite,Wait,Retrying); + dump_FileObject(FileObject); r=CcCanIWrite ( FileObject, BytesToWrite, @@ -372,6 +463,7 @@ BOOLEAN r; DBGSINGLEENTER5("CcCopyRead: FileObject=0x%lX,FileOffset=0x%lX,Length=0x%lX,Wait=%d,Buffer=0x%lX", (long)FileObject,(!FileOffset ? -1 : (long)FileOffset->QuadPart),Length,Wait,(long)Buffer); + dump_FileObject(FileObject); r=CcCopyRead ( FileObject, FileOffset, @@ -406,6 +498,7 @@ BOOLEAN r; DBGSINGLEENTER5("CcCopyWrite: FileObject=0x%lX,FileOffset=0x%lX,Length=0x%lX,Wait=%d,Buffer=0x%lX", (long)FileObject,(!FileOffset ? -1 : (long)FileOffset->QuadPart),Length,Wait,(long)Buffer); + dump_FileObject(FileObject); r=CcCopyWrite ( FileObject, FileOffset, @@ -444,6 +537,7 @@ TcDeferWrite ( "BytesToWrite=0x%lX,Retrying=%d", (long)FileObject,(long)PostRoutine,(long)Context1,(long)Context2, BytesToWrite,Retrying); + dump_FileObject(FileObject); CcDeferWrite ( FileObject, PostRoutine, @@ -476,6 +570,7 @@ TcFastCopyRead ( { DBGSINGLEENTER5("CcFastCopyRead: FileObject=0x%lX,FileOffset=0x%lX,Length=0x%lX,PageCount=0x%lX,Buffer=0x%lX", (long)FileObject,FileOffset,Length,PageCount,(long)Buffer); + dump_FileObject(FileObject); CcFastCopyRead ( FileObject, FileOffset, @@ -505,6 +600,7 @@ TcFastCopyWrite ( { DBGSINGLEENTER4("CcFastCopyWrite: FileObject=0x%lX,FileOffset=0x%lX,Length=0x%lX,Buffer=0x%lX", (long)FileObject,FileOffset,Length,(long)Buffer); + dump_FileObject(FileObject); CcFastCopyWrite ( FileObject, FileOffset, @@ -533,12 +629,14 @@ TcFlushCache ( (long)SectionObjectPointer, (!SectionObjectPointer ? -1 : (long)SectionObjectPointer->SharedCacheMap), (!FileOffset ? -1 : (long)FileOffset->QuadPart),Length); + dump_FileObject(SectionObjectPointer_find(SectionObjectPointer)); CcFlushCache ( SectionObjectPointer, FileOffset, Length, IoStatus ); + dump_FileObject(SectionObjectPointer_find(SectionObjectPointer)); DBGSINGLELEAVE2("CcFlushCache: IoStatus->Status=0x%lX,IoStatus->Information=0x%lX", (!IoStatus ? -1 : (long)IoStatus->Status),(!IoStatus ? -1 : (long)IoStatus->Information)); } @@ -564,6 +662,7 @@ static VOID TcGetDirtyPages_DirtyPageRoutine(IN PFILE_OBJECT FileObject,IN PLARG "OldestLsn=0x%lX,NewestLsn=0x%lX,Context1,Context2", (long)FileObject,(!FileOffset ? -1 : (long)FileOffset->QuadPart),Length, (!OldestLsn ? -1 : (long)OldestLsn->QuadPart),(!NewestLsn ? -1 : (long)NewestLsn->QuadPart)); + dump_FileObject(FileObject); (*TcGetDirtyPages_DirtyPageRoutine_orig)(FileObject,FileOffset,Length,OldestLsn,NewestLsn,Context1,Context2); DBGSINGLELEAVE0("DirtyPageRoutine"); } @@ -649,6 +748,7 @@ BOOLEAN r; DBGSINGLEENTER3("AcquireForLazyWrite: FileObject=0x%lX,Context=0x%lX,Wait=%d", (long)callbacksp->FileObject,(long)callbacksp->LazyWriteContext,Wait); + dump_FileObject(callbacksp->FileObject); r=(*callbacksp->Callbacks.AcquireForLazyWrite)(callbacksp->LazyWriteContext,Wait); DBGSINGLELEAVE1("AcquireForLazyWrite: r=%d",r); return r; @@ -660,6 +760,7 @@ struct Callbacks *callbacksp=Context; DBGSINGLEENTER2("ReleaseFromLazyWrite: FileObject=0x%lX,Context=0x%lX", (long)callbacksp->FileObject,(long)callbacksp->LazyWriteContext); + dump_FileObject(callbacksp->FileObject); (*callbacksp->Callbacks.ReleaseFromLazyWrite)(callbacksp->LazyWriteContext); DBGSINGLELEAVE0("ReleaseFromLazyWrite"); } @@ -671,6 +772,7 @@ BOOLEAN r; DBGSINGLEENTER3("AcquireForReadAhead: FileObject=0x%lX,Context=0x%lX,Wait=%d", (long)callbacksp->FileObject,(long)callbacksp->LazyWriteContext,Wait); + dump_FileObject(callbacksp->FileObject); r=(*callbacksp->Callbacks.AcquireForReadAhead)(callbacksp->LazyWriteContext,Wait); DBGSINGLELEAVE1("AcquireForReadAhead: r=%d",r); return r; @@ -682,6 +784,7 @@ struct Callbacks *callbacksp=Context; DBGSINGLEENTER2("ReleaseFromReadAhead: FileObject=0x%lX,Context=0x%lX", (long)callbacksp->FileObject,(long)callbacksp->LazyWriteContext); + dump_FileObject(callbacksp->FileObject); (*callbacksp->Callbacks.ReleaseFromReadAhead)(callbacksp->LazyWriteContext); DBGSINGLELEAVE0("ReleaseFromReadAhead"); } @@ -726,6 +829,7 @@ struct Callbacks *callbacksp; (!FileSizes ? -1 : (long)FileSizes->FileSize.QuadPart), (!FileSizes ? -1 : (long)FileSizes->ValidDataLength.QuadPart), PinAccess); + dump_FileObject(FileObject); if ((callbacksp=Callbacks_set(FileObject,Callbacks,LazyWriteContext))) { Callbacks=&TcInitializeCacheMap_Callbacks; LazyWriteContext=callbacksp; @@ -745,6 +849,7 @@ PinAccess, Callbacks, LazyWriteContext ); + dump_FileObject(FileObject); DBGSINGLELEAVE0("CcInitializeCacheMap"); } @@ -771,6 +876,7 @@ BOOLEAN r; DBGSINGLEENTER4("CcMapData: FileObject=0x%lX,FileOffset=0x%lX,Length=0x%lX,Flags=0x%lX", (long)FileObject,(!FileOffset ? -1 : (long)FileOffset->QuadPart),Length,Flags); + dump_FileObject(FileObject); r=CcMapData ( FileObject, FileOffset, @@ -803,6 +909,7 @@ TcMdlRead ( { DBGSINGLEENTER3("CcMdlRead: FileObject=0x%lX,FileOffset=0x%lX,Length=0x%lX", (long)FileObject,(!FileOffset ? -1 : (long)FileOffset->QuadPart),Length); + dump_FileObject(FileObject); CcMdlRead ( FileObject, FileOffset, @@ -828,6 +935,7 @@ TcMdlReadComplete ( { DBGSINGLEENTER2("CcMdlReadComplete: FileObject=0x%lX,MdlChain=0x%lX", (long)FileObject,(long)MdlChain); + dump_FileObject(FileObject); CcMdlReadComplete ( FileObject, MdlChain @@ -848,6 +956,7 @@ TcMdlWriteAbort ( { DBGSINGLEENTER2("CcMdlWriteAbort: FileObject=0x%lX,MdlChain=0x%lX", (long)FileObject,(long)MdlChain); + dump_FileObject(FileObject); CcMdlWriteAbort ( FileObject, MdlChain @@ -870,6 +979,7 @@ TcMdlWriteComplete ( { DBGSINGLEENTER3("CcMdlWriteComplete: FileObject=0x%lX,FileOffset=0x%lX,MdlChain=0x%lX", (long)FileObject,(!FileOffset ? -1 : (long)FileOffset->QuadPart),(long)MdlChain); + dump_FileObject(FileObject); CcMdlWriteComplete ( FileObject, FileOffset, @@ -899,6 +1009,7 @@ BOOLEAN r; DBGSINGLEENTER4("CcPinMappedData: FileObject=0x%lX,FileOffset=0x%lX,Length=0x%lX,Flags=0x%lX", (long)FileObject,(!FileOffset ? -1 : (long)FileOffset->QuadPart),Length,Flags); + dump_FileObject(FileObject); r=CcPinMappedData ( FileObject, FileOffset, @@ -934,6 +1045,7 @@ BOOLEAN r; DBGSINGLEENTER4("CcPinRead: FileObject=0x%lX,FileOffset=0x%lX,Length=0x%lX,Flags=0x%lX", (long)FileObject,(!FileOffset ? -1 : (long)FileOffset->QuadPart),Length,Flags); + dump_FileObject(FileObject); r=CcPinRead ( FileObject, FileOffset, @@ -966,6 +1078,7 @@ TcPrepareMdlWrite ( { DBGSINGLEENTER3("CcPrepareMdlWrite: FileObject=0x%lX,FileOffset=0x%lX,Length=0x%lX", (long)FileObject,(!FileOffset ? -1 : (long)FileOffset->QuadPart),Length); + dump_FileObject(FileObject); CcPrepareMdlWrite ( FileObject, FileOffset, @@ -1003,6 +1116,7 @@ BOOLEAN r; DBGSINGLEENTER5("CcPreparePinWrite: FileObject=0x%lX,FileOffset=0x%lX,Length=0x%lX,Zero=%d,Flags=0x%lX", (long)FileObject,(!FileOffset ? -1 : (long)FileOffset->QuadPart),Length,Zero,Flags); + dump_FileObject(FileObject); r=CcPreparePinWrite ( FileObject, FileOffset, @@ -1040,12 +1154,14 @@ BOOLEAN r; (!SectionObjectPointer ? -1 : (long)SectionObjectPointer->SharedCacheMap), (!FileOffset ? -1 : (long)FileOffset->QuadPart),Length, UninitializeCacheMaps); + dump_FileObject(SectionObjectPointer_find(SectionObjectPointer)); r=CcPurgeCacheSection ( SectionObjectPointer, FileOffset, Length, UninitializeCacheMaps ); + dump_FileObject(SectionObjectPointer_find(SectionObjectPointer)); DBGSINGLELEAVE1("CcPurgeCacheSection: r=%d",r); return r; } @@ -1084,6 +1200,7 @@ TcSetAdditionalCacheAttributes ( { DBGSINGLEENTER3("CcSetAdditionalCacheAttributes: FileObject=0x%lX,DisableReadAhead=%d,DisableWriteBehind=%d", (long)FileObject,DisableReadAhead,DisableWriteBehind); + dump_FileObject(FileObject); CcSetAdditionalCacheAttributes ( FileObject, DisableReadAhead, @@ -1149,6 +1266,7 @@ TcSetFileSizes ( (!FileSizes ? -1 : (long)FileSizes->AllocationSize.QuadPart), (!FileSizes ? -1 : (long)FileSizes->FileSize.QuadPart), (!FileSizes ? -1 : (long)FileSizes->ValidDataLength.QuadPart)); + dump_FileObject(FileObject); CcSetFileSizes ( FileObject, FileSizes @@ -1218,6 +1336,7 @@ TcSetLogHandleForFile ( { DBGSINGLEENTER3("CcSetLogHandleForFile: FileObject=0x%lX,LogHandle=0x%lX,FlushToLsnRoutine=0x%lX", (long)FileObject,(long)LogHandle,(long)FlushToLsnRoutine); + dump_FileObject(FileObject); if (LogHandle_set(LogHandle,FlushToLsnRoutine)) FlushToLsnRoutine=TcSetLogHandleForFile_FlushToLsnRoutine; CcSetLogHandleForFile ( @@ -1241,6 +1360,7 @@ TcSetReadAheadGranularity ( { DBGSINGLEENTER2("CcSetReadAheadGranularity: FileObject=0x%lX,Granularity=0x%lX", (long)FileObject,Granularity); + dump_FileObject(FileObject); CcSetReadAheadGranularity ( FileObject, Granularity @@ -1270,11 +1390,13 @@ BOOLEAN r; DBGSINGLEENTER3("CcUninitializeCacheMap: FileObject=0x%lX,TruncateSize=0x%lX,UninitializeCompleteEvent=0x%lX", (long)FileObject,(!TruncateSize ? -1 : (long)TruncateSize->QuadPart),(long)UninitializeCompleteEvent); + dump_FileObject(FileObject); r=CcUninitializeCacheMap ( FileObject, TruncateSize, UninitializeCompleteEvent ); + dump_FileObject(FileObject); DBGSINGLELEAVE1("CcUninitializeCacheMap: r=%d",r); return r; } @@ -1355,6 +1477,7 @@ BOOLEAN r; (!StartOffset ? -1 : (long)StartOffset->QuadPart), (!EndOffset ? -1 : (long)EndOffset->QuadPart), Wait); + dump_FileObject(FileObject); r=CcZeroData ( FileObject, StartOffset, diff --git a/src/TraceFS/TraceFS-W32/TraceFS.sys b/src/TraceFS/TraceFS-W32/TraceFS.sys index 157824cd96c38755d3183f5d14252729231f6dfb..bb279427e9e73cb531b58e83c1e9dfa33e75c9e8 100644 GIT binary patch literal 61056 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 literal 55296 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