Each card has 3 mystery panels and 13 regular ones.

let kBingoCardIndexOffset = 0x01

let kBingoCardDifficultyLevelOffset = 0x02

let kBingoCardSubIndexOffset = 0x03

let kBingoCardPokemonLevelOffset = 0x04 // Every Pokemon on the card including the starter is of this level.

let kBingoCardPokemonCountOffset = 0x07 // Always has the same value of 13

let kBingoCardMysteryPanelCountOffset = 0x08 // Always has the same value of 3

let kBingoCardNameIDOffset = 0x0B

let kBingoCardDetailsIDOffset = 0x0F

let kBingoCardFirstCouponsRewardOffset = 0x11 // The 10 levels of coupons you receive for the number of bingos achieved.

let kBingoCardFirstPokemonOffset = 0x25 // The first pokemon specified is your starter for that card

let kBingoCardFirstMysteryPanelOffset = 0xB1

Each panel is 2 bytes. The first byte is the the item under the panel:

0x1 = masterball

0x2 = epx1

0x3 = epx2

The second byte is the position of the panel on the board. I believe the top left corner is panel 0 and the rest follow horizontally the rows from top to bottom.

The pokemon are all specified in the order of their panels.

let kBattleBingoPokemonPanelTypeOffset = 0x00 // Each pokemon has 2 types in its stats. this value determines whether type 0 or type 1 appears on the back of the panel.

let kBattleBingoPokemonAbilityOffset = 0x01 // Determines which of the pokemon's abilities it has

let kBattleBingoPokemonNatureOffset = 0x02

let kBattleBingoPokemonGenderOffset = 0x03 // The genders of the pokemon appear to be random outside of the battles probably due to a programming error.

let kBattleBingoPokemonSpeciesOffset = 0x04

let kBattleBingoPokemonMoveOffset = 0x06 // Only one move per pokemon