docs: def ReadClientSnapshotHistory(self, client_id, timerange=None):
      """Reads the full history for a particular client."""
      from_time, to_time = self._ParseTimeRange(timerange)
  
      history = self.clients.get(client_id)
      if not history:
        return []
      res = []
      for ts in sorted(history, reverse=True):
        if ts < from_time or ts > to_time:
          continue
  
        client_obj = rdf_objects.ClientSnapshot.FromSerializedString(history[ts])
        client_obj.timestamp = ts
        client_obj.startup_info = rdf_client.StartupInfo.FromSerializedString(
            self.startup_history[client_id][ts])
        res.append(client_obj)
      return res