code: func (i *IAPD) UnmarshalBinary(b []byte) error {
  	// IAPD must contain at least an IAID, T1, and T2.
  	buf := buffer.New(b)
  	if buf.Len() < 12 {
  		return io.ErrUnexpectedEOF
  	}
  
  	copy(i.IAID[:], buf.Consume(4))
  	i.T1 = time.Duration(buf.Read32()) * time.Second
  	i.T2 = time.Duration(buf.Read32()) * time.Second
  
  	return (&i.Options).UnmarshalBinary(buf.Remaining())
  }
docs: // UnmarshalBinary unmarshals a raw byte slice into a IAPD.
  //
  // If the byte slice does not contain enough data to form a valid IAPD,
  // io.ErrUnexpectedEOF is returned.