code: func (l *AuditLog) GetSessionChunk(namespace string, sid session.ID, offsetBytes, maxBytes int) ([]byte, error) {
  	if l.UploadHandler != nil {
  		if err := l.downloadSession(namespace, sid); err != nil {
  			return nil, trace.Wrap(err)
  		}
  	}
  	var data []byte
  	for {
  		out, err := l.getSessionChunk(namespace, sid, offsetBytes, maxBytes)
  		if err != nil {
  			if err == io.EOF {
  				return data, nil
  			}
  			return nil, trace.Wrap(err)
  		}
  		data = append(data, out...)
  		if len(data) == maxBytes || len(out) == 0 {
  			return data, nil
  		}
  		maxBytes = maxBytes - len(out)
  		offsetBytes = offsetBytes + len(out)
  	}
  }
docs: // GetSessionChunk returns a reader which console and web clients request
  // to receive a live stream of a given session. The reader allows access to a
  // session stream range from offsetBytes to offsetBytes+maxBytes