STEAM64_OFFSET = 76561197960265728


def parse_steam_id(raw: str) -> int:
    """Accept Steam32 or Steam64, return Steam32. Raises ValueError on bad input."""
    try:
        value = int(raw.strip())
    except ValueError:
        raise ValueError(f"Invalid Steam ID: {raw!r}")
    if value <= 0:
        raise ValueError("Steam ID must be a positive number")
    if value > STEAM64_OFFSET:
        value = value - STEAM64_OFFSET
    if value <= 0 or value > 0xFFFFFFFF:
        raise ValueError(f"Steam ID {raw!r} is out of valid range")
    return value
