code: func (c *Client) ListValues(keyPrefix string) (keyval.BytesKeyValIterator, error) {
  	boltLogger.Debugf("ListValues: %q", keyPrefix)
  
  	var pairs []*kvPair
  	err := c.db.View(func(tx *bolt.Tx) error {
  		c := tx.Bucket(rootBucket).Cursor()
  		prefix := []byte(keyPrefix)
  
  		for k, v := c.Seek(prefix); k != nil && bytes.HasPrefix(k, prefix); k, v = c.Next() {
  			boltLogger.Debugf(" listing val: %q (len=%d)", string(k), len(v))
  
  			pair := &kvPair{Key: string(k)}
  			pair.Value = append([]byte(nil), v...) // value needs to be copied
  
  			pairs = append(pairs, pair)
  		}
  
  		return nil
  	})
  
  	return &bytesKeyValIterator{len: len(pairs), pairs: pairs}, err
  }
docs: // ListValues returns iterator with key-value pairs for given key prefix