def METHOD_NAME(
    initial_memory: bytes,
    caller_bytecode: bytes,
) -> Tuple[bytes, Storage.StorageDictType]:
    """
    Prepares the bytecode and storage for the test, based on the starting memory and the final
    memory that resulted from the copy.
    """
    bytecode = b""
    storage: Storage.StorageDictType = {}
    # Fill memory with initial values
    for i in range(0, len(initial_memory), 0x20):
        bytecode += Op.MSTORE(i, Op.PUSH32(initial_memory[i : i + 0x20]))
    # Perform the call to the contract that is going to perform mcopy
    bytecode += caller_bytecode
    # First save msize
    bytecode += Op.SSTORE(100_000, Op.MSIZE())
    storage[100_000] = ceiling_division(len(initial_memory), 0x20) * 0x20
    # Store all memory in the initial range to verify the MCOPY in the subcall did not affect
    # this level's memory
    for w in range(0, len(initial_memory) // 0x20):
        bytecode += Op.SSTORE(w, Op.MLOAD(w * 0x20))
        storage[w] = initial_memory[w * 0x20 : w * 0x20 + 0x20]
    return (bytecode, storage)