code: func (i *Intervals) UnmarshalBinary(data []byte) (err error) {
  	d := bytes.Split(data, []byte(";"))
  	l := len(d)
  	if l == 0 {
  		return nil
  	}
  	if l >= 1 {
  		i.start, err = strconv.ParseUint(string(d[0]), 36, 64)
  		if err != nil {
  			return err
  		}
  	}
  	if l == 1 {
  		return nil
  	}
  
  	i.ranges = make([][2]uint64, 0, l-1)
  	for j := 1; j < l; j++ {
  		r := bytes.SplitN(d[j], []byte(","), 2)
  		if len(r) < 2 {
  			return fmt.Errorf("range %d has less then 2 elements", j)
  		}
  		start, err := strconv.ParseUint(string(r[0]), 36, 64)
  		if err != nil {
  			return fmt.Errorf("parsing the first element in range %d: %v", j, err)
  		}
  		end, err := strconv.ParseUint(string(r[1]), 36, 64)
  		if err != nil {
  			return fmt.Errorf("parsing the second element in range %d: %v", j, err)
  		}
  		i.ranges = append(i.ranges, [2]uint64{start, end})
  	}
  
  	return nil
  }
docs: // UnmarshalBinary decodes data according to the Intervals.MarshalBinary format.