1"""Read a FromSoftware `.sl2` save and report what is in it.
3The package is layered, and the layers only point one way:
5 reader / keys bounds-checked reads, the AES keys
6 bnd4 / crypto / detect the container, per-game decryption, which game
7 itemdb / progress / roster item tables, the shared progress floor, names
8 ds1 / ds2 / ds3 / er one module per game family
9 totals the "of N" denominators (needs every game)
10 render / jsonout the two writers
11 convert the driver: parse_save, then either writer
12 cli argument parsing and main()
14`parse_save` does all the reading and `render_markdown` / `build_json` do all the
15writing, so the two output formats cannot drift apart — they are the same data.
17Everything below is imported for its side effect of being re-exported: the CLI, the
18parity harnesses and the scratch tools all reach in through this one name.
33from .jsonout
import SCHEMA_URL, SCHEMA_VERSION, build_json, parse_meta
34from .render
import md_for_character
35from .bnd4
import parse_bnd4, checksum_ok, Bnd4Entry
36from .detect
import detect_game
37from .reader
import read_uint, u8, u16, u32, u64, read_utf16, is_valid_name
48 "save_format_version",