- Add /api/hash endpoint to compute and cache MD5 hashes on demand - Extend /api/files response with md5 field for EPUBs (null if not cached) - Compute and cache MD5 automatically after EPUB uploads - Add flush() before close() in WebSocket and HTTP upload handlers - New Md5Utils module using ESP32's mbedtls for chunked hash computation The MD5 hashes enable the companion app to detect file changes without downloading content. Hashes are cached in each book's .crosspoint cache directory and invalidated when file size changes.