code: def list_reference_bases(self, id_, start=0, end=None):
          
          request = protocol.ListReferenceBasesRequest()
          request.start = pb.int(start)
          request.end = pb.int(end)
          request.reference_id = id_
          not_done = True
          # TODO We should probably use a StringIO here to make string buffering
          # a bit more efficient.
          bases_list = []
          while not_done:
              response = self._run_list_reference_bases_page_request(request)
              bases_list.append(response.sequence)
              not_done = bool(response.next_page_token)
              request.page_token = response.next_page_token
          return "".join(bases_list)
docs: Returns an iterator over the bases from the server in the form
          of consecutive strings. This command does not conform to the
          patterns of the other search and get requests, and is implemented
          differently.