code: func (b *Board) UnmarshalBinary(data []byte) error {
  	if len(data) != 96 {
  		return errors.New("chess: invalid number of bytes for board unmarshal binary")
  	}
  	b.bbWhiteKing = bitboard(binary.BigEndian.Uint64(data[:8]))
  	b.bbWhiteQueen = bitboard(binary.BigEndian.Uint64(data[8:16]))
  	b.bbWhiteRook = bitboard(binary.BigEndian.Uint64(data[16:24]))
  	b.bbWhiteBishop = bitboard(binary.BigEndian.Uint64(data[24:32]))
  	b.bbWhiteKnight = bitboard(binary.BigEndian.Uint64(data[32:40]))
  	b.bbWhitePawn = bitboard(binary.BigEndian.Uint64(data[40:48]))
  	b.bbBlackKing = bitboard(binary.BigEndian.Uint64(data[48:56]))
  	b.bbBlackQueen = bitboard(binary.BigEndian.Uint64(data[56:64]))
  	b.bbBlackRook = bitboard(binary.BigEndian.Uint64(data[64:72]))
  	b.bbBlackBishop = bitboard(binary.BigEndian.Uint64(data[72:80]))
  	b.bbBlackKnight = bitboard(binary.BigEndian.Uint64(data[80:88]))
  	b.bbBlackPawn = bitboard(binary.BigEndian.Uint64(data[88:96]))
  	b.calcConvienceBBs(nil)
  	return nil
  }
docs: // UnmarshalBinary implements the encoding.BinaryUnmarshaler interface and parses
  // the bitboard representations as a array of bytes.  Bitboads are decoded
  // in the following order: WhiteKing, WhiteQueen, WhiteRook, WhiteBishop, WhiteKnight
  // WhitePawn, BlackKing, BlackQueen, BlackRook, BlackBishop, BlackKnight, BlackPawn