@flow.StateHandler(next_state=["ReadBuffer", "CheckHashes"])
  def ReadBuffer(self, responses):
    # Did it work?
    if responses.success:
      response = responses.First()
      if not response:
        raise IOError("Missing hash for offset %s missing" % response.offset)

      if response.offset <= self.state.max_chunk_number * self.CHUNK_SIZE:
        # Write the hash to the index. Note that response.data is the hash of
        # the block (32 bytes) and response.length is the length of the block.
        self.state.fd.AddBlob(response.data, response.length)
        self.Log("Received blob hash %s", response.data.encode("hex"))
        self.Status("Received %s bytes", self.state.fd.size)

        # Add one more chunk to the window.
        self.FetchWindow(1)
create a set of tuples representing column/string pairs for use
dataset/ETHPy150Open google/grr/grr/lib/flows/general/transfer.py/GetFile.ReadBuffer--crossover with--dataset/ETHPy150Open zzzeek/sqlalchemy/lib/sqlalchemy/sql/crud.py/_get_crud_params