From: t_jeang Date: Tue, 6 Jan 2009 12:05:58 +0000 (+0000) Subject: imported patch bnx2x-1.46.8 X-Git-Tag: bnx2-cnic-over-bridge X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=d21cb36bcffaedaefc5b143ab2dffff8903c24ab;p=xenclient%2Fkernel.git imported patch bnx2x-1.46.8 --- diff --git a/buildconfigs/conf.linux/bnx2x b/buildconfigs/conf.linux/bnx2x new file mode 100644 index 00000000..d32b3775 --- /dev/null +++ b/buildconfigs/conf.linux/bnx2x @@ -0,0 +1 @@ +CONFIG_BNX2X=m diff --git a/drivers/net/Makefile b/drivers/net/Makefile index 681faca4..97cabeed 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile @@ -71,6 +71,7 @@ CFLAGS_bnx2.o += -DHAVE_LE32 -DHAVE_IP_HDR -DNEW_SKB obj-$(CONFIG_CNIC) += cnic.o CFLAGS_cnic.o += -DHAVE_LE32 -DHAVE_IP_HDR -DNEW_SKB obj-$(CONFIG_BNX2X) += bnx2x.o +bnx2x-objs := bnx2x_main.o bnx2x_link.o spidernet-y += spider_net.o spider_net_ethtool.o obj-$(CONFIG_SPIDER_NET) += spidernet.o sungem_phy.o obj-$(CONFIG_TC35815) += tc35815.o diff --git a/drivers/net/bnx2x.c b/drivers/net/bnx2x.c deleted file mode 100644 index e0f018fa..00000000 --- a/drivers/net/bnx2x.c +++ /dev/null @@ -1,10013 +0,0 @@ -/* bnx2x.c: Broadcom Everest network driver. - * - * Copyright (c) 2007-2008 Broadcom Corporation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation. - * - * Maintained by: Eilon Greenstein - * Written by: Eliezer Tamir - * Based on code from Michael Chan's bnx2 driver - * UDP CSUM errata workaround by Arik Gendelman - * Slowpath rework by Vladislav Zolotarov - * Statistics and Link management by Yitchak Gertner - * - */ - -/* define this to make the driver freeze on error - * to allow getting debug info - * (you will need to reboot afterwards) - */ -/*#define BNX2X_STOP_ON_ERROR*/ - -#include -#include -#include -#include /* for dev_info() */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef NETIF_F_HW_VLAN_TX - #include - #define BCM_VLAN 1 -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "bnx2x_reg.h" -#include "bnx2x_fw_defs.h" -#include "bnx2x_hsi.h" -#include "bnx2x.h" -#include "bnx2x_init.h" - -#define DRV_MODULE_VERSION "1.42.4" -#define DRV_MODULE_RELDATE "2008/4/9" -#define BNX2X_BC_VER 0x040200 - -/* Time in jiffies before concluding the transmitter is hung. */ -#define TX_TIMEOUT (5*HZ) - -static char version[] __devinitdata = - "Broadcom NetXtreme II 5771X 10Gigabit Ethernet Driver " - DRV_MODULE_NAME " " DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; - -MODULE_AUTHOR("Eliezer Tamir"); -MODULE_DESCRIPTION("Broadcom NetXtreme II BCM57710 Driver"); -MODULE_LICENSE("GPL"); -MODULE_VERSION(DRV_MODULE_VERSION); - -static int use_inta; -static int poll; -static int onefunc; -static int nomcp; -static int debug; -static int use_multi; - -module_param(use_inta, int, 0); -module_param(poll, int, 0); -module_param(onefunc, int, 0); -module_param(debug, int, 0); -MODULE_PARM_DESC(use_inta, "use INT#A instead of MSI-X"); -MODULE_PARM_DESC(poll, "use polling (for debug)"); -MODULE_PARM_DESC(onefunc, "enable only first function"); -MODULE_PARM_DESC(nomcp, "ignore management CPU (Implies onefunc)"); -MODULE_PARM_DESC(debug, "default debug msglevel"); - -#ifdef BNX2X_MULTI -module_param(use_multi, int, 0); -MODULE_PARM_DESC(use_multi, "use per-CPU queues"); -#endif - -enum bnx2x_board_type { - BCM57710 = 0, -}; - -/* indexed by board_t, above */ -static struct { - char *name; -} board_info[] __devinitdata = { - { "Broadcom NetXtreme II BCM57710 XGb" } -}; - -static const struct pci_device_id bnx2x_pci_tbl[] = { - { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57710, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM57710 }, - { 0 } -}; - -MODULE_DEVICE_TABLE(pci, bnx2x_pci_tbl); - -/**************************************************************************** -* General service functions -****************************************************************************/ - -/* used only at init - * locking is done by mcp - */ -static void bnx2x_reg_wr_ind(struct bnx2x *bp, u32 addr, u32 val) -{ - pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, addr); - pci_write_config_dword(bp->pdev, PCICFG_GRC_DATA, val); - pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, - PCICFG_VENDOR_ID_OFFSET); -} - -#ifdef BNX2X_IND_RD -static u32 bnx2x_reg_rd_ind(struct bnx2x *bp, u32 addr) -{ - u32 val; - - pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, addr); - pci_read_config_dword(bp->pdev, PCICFG_GRC_DATA, &val); - pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, - PCICFG_VENDOR_ID_OFFSET); - - return val; -} -#endif - -static const u32 dmae_reg_go_c[] = { - DMAE_REG_GO_C0, DMAE_REG_GO_C1, DMAE_REG_GO_C2, DMAE_REG_GO_C3, - DMAE_REG_GO_C4, DMAE_REG_GO_C5, DMAE_REG_GO_C6, DMAE_REG_GO_C7, - DMAE_REG_GO_C8, DMAE_REG_GO_C9, DMAE_REG_GO_C10, DMAE_REG_GO_C11, - DMAE_REG_GO_C12, DMAE_REG_GO_C13, DMAE_REG_GO_C14, DMAE_REG_GO_C15 -}; - -/* copy command into DMAE command memory and set DMAE command go */ -static void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, - int idx) -{ - u32 cmd_offset; - int i; - - cmd_offset = (DMAE_REG_CMD_MEM + sizeof(struct dmae_command) * idx); - for (i = 0; i < (sizeof(struct dmae_command)/4); i++) { - REG_WR(bp, cmd_offset + i*4, *(((u32 *)dmae) + i)); - -/* DP(NETIF_MSG_DMAE, "DMAE cmd[%d].%d (0x%08x) : 0x%08x\n", - idx, i, cmd_offset + i*4, *(((u32 *)dmae) + i)); */ - } - REG_WR(bp, dmae_reg_go_c[idx], 1); -} - -static void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, - u32 dst_addr, u32 len32) -{ - struct dmae_command *dmae = &bp->dmae; - int port = bp->port; - u32 *wb_comp = bnx2x_sp(bp, wb_comp); - int timeout = 200; - - memset(dmae, 0, sizeof(struct dmae_command)); - - dmae->opcode = (DMAE_CMD_SRC_PCI | DMAE_CMD_DST_GRC | - DMAE_CMD_C_DST_PCI | DMAE_CMD_C_ENABLE | - DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | -#ifdef __BIG_ENDIAN - DMAE_CMD_ENDIANITY_B_DW_SWAP | -#else - DMAE_CMD_ENDIANITY_DW_SWAP | -#endif - (port ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0)); - dmae->src_addr_lo = U64_LO(dma_addr); - dmae->src_addr_hi = U64_HI(dma_addr); - dmae->dst_addr_lo = dst_addr >> 2; - dmae->dst_addr_hi = 0; - dmae->len = len32; - dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, wb_comp)); - dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, wb_comp)); - dmae->comp_val = BNX2X_WB_COMP_VAL; - -/* - DP(NETIF_MSG_DMAE, "dmae: opcode 0x%08x\n" - DP_LEVEL "src_addr [%x:%08x] len [%d *4] " - "dst_addr [%x:%08x (%08x)]\n" - DP_LEVEL "comp_addr [%x:%08x] comp_val 0x%08x\n", - dmae->opcode, dmae->src_addr_hi, dmae->src_addr_lo, - dmae->len, dmae->dst_addr_hi, dmae->dst_addr_lo, dst_addr, - dmae->comp_addr_hi, dmae->comp_addr_lo, dmae->comp_val); -*/ -/* - DP(NETIF_MSG_DMAE, "data [0x%08x 0x%08x 0x%08x 0x%08x]\n", - bp->slowpath->wb_data[0], bp->slowpath->wb_data[1], - bp->slowpath->wb_data[2], bp->slowpath->wb_data[3]); -*/ - - *wb_comp = 0; - - bnx2x_post_dmae(bp, dmae, port * 8); - - udelay(5); - /* adjust timeout for emulation/FPGA */ - if (CHIP_REV_IS_SLOW(bp)) - timeout *= 100; - while (*wb_comp != BNX2X_WB_COMP_VAL) { -/* DP(NETIF_MSG_DMAE, "wb_comp 0x%08x\n", *wb_comp); */ - udelay(5); - if (!timeout) { - BNX2X_ERR("dmae timeout!\n"); - break; - } - timeout--; - } -} - -#ifdef BNX2X_DMAE_RD -static void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32) -{ - struct dmae_command *dmae = &bp->dmae; - int port = bp->port; - u32 *wb_comp = bnx2x_sp(bp, wb_comp); - int timeout = 200; - - memset(bnx2x_sp(bp, wb_data[0]), 0, sizeof(u32) * 4); - memset(dmae, 0, sizeof(struct dmae_command)); - - dmae->opcode = (DMAE_CMD_SRC_GRC | DMAE_CMD_DST_PCI | - DMAE_CMD_C_DST_PCI | DMAE_CMD_C_ENABLE | - DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | -#ifdef __BIG_ENDIAN - DMAE_CMD_ENDIANITY_B_DW_SWAP | -#else - DMAE_CMD_ENDIANITY_DW_SWAP | -#endif - (port ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0)); - dmae->src_addr_lo = src_addr >> 2; - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, wb_data)); - dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, wb_data)); - dmae->len = len32; - dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, wb_comp)); - dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, wb_comp)); - dmae->comp_val = BNX2X_WB_COMP_VAL; - -/* - DP(NETIF_MSG_DMAE, "dmae: opcode 0x%08x\n" - DP_LEVEL "src_addr [%x:%08x] len [%d *4] " - "dst_addr [%x:%08x (%08x)]\n" - DP_LEVEL "comp_addr [%x:%08x] comp_val 0x%08x\n", - dmae->opcode, dmae->src_addr_hi, dmae->src_addr_lo, - dmae->len, dmae->dst_addr_hi, dmae->dst_addr_lo, src_addr, - dmae->comp_addr_hi, dmae->comp_addr_lo, dmae->comp_val); -*/ - - *wb_comp = 0; - - bnx2x_post_dmae(bp, dmae, port * 8); - - udelay(5); - while (*wb_comp != BNX2X_WB_COMP_VAL) { - udelay(5); - if (!timeout) { - BNX2X_ERR("dmae timeout!\n"); - break; - } - timeout--; - } -/* - DP(NETIF_MSG_DMAE, "data [0x%08x 0x%08x 0x%08x 0x%08x]\n", - bp->slowpath->wb_data[0], bp->slowpath->wb_data[1], - bp->slowpath->wb_data[2], bp->slowpath->wb_data[3]); -*/ -} -#endif - -static int bnx2x_mc_assert(struct bnx2x *bp) -{ - int i, j, rc = 0; - char last_idx; - const char storm[] = {"XTCU"}; - const u32 intmem_base[] = { - BAR_XSTRORM_INTMEM, - BAR_TSTRORM_INTMEM, - BAR_CSTRORM_INTMEM, - BAR_USTRORM_INTMEM - }; - - /* Go through all instances of all SEMIs */ - for (i = 0; i < 4; i++) { - last_idx = REG_RD8(bp, XSTORM_ASSERT_LIST_INDEX_OFFSET + - intmem_base[i]); - if (last_idx) - BNX2X_LOG("DATA %cSTORM_ASSERT_LIST_INDEX 0x%x\n", - storm[i], last_idx); - - /* print the asserts */ - for (j = 0; j < STROM_ASSERT_ARRAY_SIZE; j++) { - u32 row0, row1, row2, row3; - - row0 = REG_RD(bp, XSTORM_ASSERT_LIST_OFFSET(j) + - intmem_base[i]); - row1 = REG_RD(bp, XSTORM_ASSERT_LIST_OFFSET(j) + 4 + - intmem_base[i]); - row2 = REG_RD(bp, XSTORM_ASSERT_LIST_OFFSET(j) + 8 + - intmem_base[i]); - row3 = REG_RD(bp, XSTORM_ASSERT_LIST_OFFSET(j) + 12 + - intmem_base[i]); - - if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) { - BNX2X_LOG("DATA %cSTORM_ASSERT_INDEX 0x%x =" - " 0x%08x 0x%08x 0x%08x 0x%08x\n", - storm[i], j, row3, row2, row1, row0); - rc++; - } else { - break; - } - } - } - return rc; -} - -static void bnx2x_fw_dump(struct bnx2x *bp) -{ - u32 mark, offset; - u32 data[9]; - int word; - - mark = REG_RD(bp, MCP_REG_MCPR_SCRATCH + 0xf104); - mark = ((mark + 0x3) & ~0x3); - printk(KERN_ERR PFX "begin fw dump (mark 0x%x)\n" KERN_ERR, mark); - - for (offset = mark - 0x08000000; offset <= 0xF900; offset += 0x8*4) { - for (word = 0; word < 8; word++) - data[word] = htonl(REG_RD(bp, MCP_REG_MCPR_SCRATCH + - offset + 4*word)); - data[8] = 0x0; - printk(KERN_ERR "%s", (char *)data); - } - for (offset = 0xF108; offset <= mark - 0x08000000; offset += 0x8*4) { - for (word = 0; word < 8; word++) - data[word] = htonl(REG_RD(bp, MCP_REG_MCPR_SCRATCH + - offset + 4*word)); - data[8] = 0x0; - printk(KERN_ERR "%s", (char *)data); - } - printk("\n" KERN_ERR PFX "end of fw dump\n"); -} - -static void bnx2x_panic_dump(struct bnx2x *bp) -{ - int i; - u16 j, start, end; - - BNX2X_ERR("begin crash dump -----------------\n"); - - for_each_queue(bp, i) { - struct bnx2x_fastpath *fp = &bp->fp[i]; - struct eth_tx_db_data *hw_prods = fp->hw_tx_prods; - - BNX2X_ERR("queue[%d]: tx_pkt_prod(%x) tx_pkt_cons(%x)" - " tx_bd_prod(%x) tx_bd_cons(%x) *tx_cons_sb(%x)" - " *rx_cons_sb(%x) rx_comp_prod(%x)" - " rx_comp_cons(%x) fp_c_idx(%x) fp_u_idx(%x)" - " bd data(%x,%x)\n", - i, fp->tx_pkt_prod, fp->tx_pkt_cons, fp->tx_bd_prod, - fp->tx_bd_cons, *fp->tx_cons_sb, *fp->rx_cons_sb, - fp->rx_comp_prod, fp->rx_comp_cons, fp->fp_c_idx, - fp->fp_u_idx, hw_prods->packets_prod, - hw_prods->bds_prod); - - start = TX_BD(le16_to_cpu(*fp->tx_cons_sb) - 10); - end = TX_BD(le16_to_cpu(*fp->tx_cons_sb) + 245); - for (j = start; j < end; j++) { - struct sw_tx_bd *sw_bd = &fp->tx_buf_ring[j]; - - BNX2X_ERR("packet[%x]=[%p,%x]\n", j, - sw_bd->skb, sw_bd->first_bd); - } - - start = TX_BD(fp->tx_bd_cons - 10); - end = TX_BD(fp->tx_bd_cons + 254); - for (j = start; j < end; j++) { - u32 *tx_bd = (u32 *)&fp->tx_desc_ring[j]; - - BNX2X_ERR("tx_bd[%x]=[%x:%x:%x:%x]\n", - j, tx_bd[0], tx_bd[1], tx_bd[2], tx_bd[3]); - } - - start = RX_BD(le16_to_cpu(*fp->rx_cons_sb) - 10); - end = RX_BD(le16_to_cpu(*fp->rx_cons_sb) + 503); - for (j = start; j < end; j++) { - u32 *rx_bd = (u32 *)&fp->rx_desc_ring[j]; - struct sw_rx_bd *sw_bd = &fp->rx_buf_ring[j]; - - BNX2X_ERR("rx_bd[%x]=[%x:%x] sw_bd=[%p]\n", - j, rx_bd[0], rx_bd[1], sw_bd->skb); - } - - start = RCQ_BD(fp->rx_comp_cons - 10); - end = RCQ_BD(fp->rx_comp_cons + 503); - for (j = start; j < end; j++) { - u32 *cqe = (u32 *)&fp->rx_comp_ring[j]; - - BNX2X_ERR("cqe[%x]=[%x:%x:%x:%x]\n", - j, cqe[0], cqe[1], cqe[2], cqe[3]); - } - } - - BNX2X_ERR("def_c_idx(%u) def_u_idx(%u) def_x_idx(%u)" - " def_t_idx(%u) def_att_idx(%u) attn_state(%u)" - " spq_prod_idx(%u)\n", - bp->def_c_idx, bp->def_u_idx, bp->def_x_idx, bp->def_t_idx, - bp->def_att_idx, bp->attn_state, bp->spq_prod_idx); - - - bnx2x_mc_assert(bp); - BNX2X_ERR("end crash dump -----------------\n"); - - bp->stats_state = STATS_STATE_DISABLE; - DP(BNX2X_MSG_STATS, "stats_state - DISABLE\n"); -} - -static void bnx2x_int_enable(struct bnx2x *bp) -{ - int port = bp->port; - u32 addr = port ? HC_REG_CONFIG_1 : HC_REG_CONFIG_0; - u32 val = REG_RD(bp, addr); - int msix = (bp->flags & USING_MSIX_FLAG) ? 1 : 0; - - if (msix) { - val &= ~HC_CONFIG_0_REG_SINGLE_ISR_EN_0; - val |= (HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 | - HC_CONFIG_0_REG_ATTN_BIT_EN_0); - } else { - val |= (HC_CONFIG_0_REG_SINGLE_ISR_EN_0 | - HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 | - HC_CONFIG_0_REG_INT_LINE_EN_0 | - HC_CONFIG_0_REG_ATTN_BIT_EN_0); - - /* Errata A0.158 workaround */ - DP(NETIF_MSG_INTR, "write %x to HC %d (addr 0x%x) MSI-X %d\n", - val, port, addr, msix); - - REG_WR(bp, addr, val); - - val &= ~HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0; - } - - DP(NETIF_MSG_INTR, "write %x to HC %d (addr 0x%x) MSI-X %d\n", - val, port, addr, msix); - - REG_WR(bp, addr, val); -} - -static void bnx2x_int_disable(struct bnx2x *bp) -{ - int port = bp->port; - u32 addr = port ? HC_REG_CONFIG_1 : HC_REG_CONFIG_0; - u32 val = REG_RD(bp, addr); - - val &= ~(HC_CONFIG_0_REG_SINGLE_ISR_EN_0 | - HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 | - HC_CONFIG_0_REG_INT_LINE_EN_0 | - HC_CONFIG_0_REG_ATTN_BIT_EN_0); - - DP(NETIF_MSG_INTR, "write %x to HC %d (addr 0x%x)\n", - val, port, addr); - - REG_WR(bp, addr, val); - if (REG_RD(bp, addr) != val) - BNX2X_ERR("BUG! proper val not read from IGU!\n"); -} - -static void bnx2x_int_disable_sync(struct bnx2x *bp) -{ - - int msix = (bp->flags & USING_MSIX_FLAG) ? 1 : 0; - int i; - - atomic_inc(&bp->intr_sem); - /* prevent the HW from sending interrupts */ - bnx2x_int_disable(bp); - - /* make sure all ISRs are done */ - if (msix) { - for_each_queue(bp, i) - synchronize_irq(bp->msix_table[i].vector); - - /* one more for the Slow Path IRQ */ - synchronize_irq(bp->msix_table[i].vector); - } else - synchronize_irq(bp->pdev->irq); - - /* make sure sp_task is not running */ - while (bp->sp_running) - msleep(1); -} - -/* fast path code */ - -/* - * general service functions - */ - -static inline void bnx2x_ack_sb(struct bnx2x *bp, u8 id, - u8 storm, u16 index, u8 op, u8 update) -{ - u32 igu_addr = (IGU_ADDR_INT_ACK + IGU_PORT_BASE * bp->port) * 8; - struct igu_ack_register igu_ack; - - igu_ack.status_block_index = index; - igu_ack.sb_id_and_flags = - ((id << IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT) | - (storm << IGU_ACK_REGISTER_STORM_ID_SHIFT) | - (update << IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT) | - (op << IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT)); - -/* DP(NETIF_MSG_INTR, "write 0x%08x to IGU addr 0x%x\n", - (*(u32 *)&igu_ack), BAR_IGU_INTMEM + igu_addr); */ - REG_WR(bp, BAR_IGU_INTMEM + igu_addr, (*(u32 *)&igu_ack)); -} - -static inline u16 bnx2x_update_fpsb_idx(struct bnx2x_fastpath *fp) -{ - struct host_status_block *fpsb = fp->status_blk; - u16 rc = 0; - - barrier(); /* status block is written to by the chip */ - if (fp->fp_c_idx != fpsb->c_status_block.status_block_index) { - fp->fp_c_idx = fpsb->c_status_block.status_block_index; - rc |= 1; - } - if (fp->fp_u_idx != fpsb->u_status_block.status_block_index) { - fp->fp_u_idx = fpsb->u_status_block.status_block_index; - rc |= 2; - } - return rc; -} - -static inline int bnx2x_has_work(struct bnx2x_fastpath *fp) -{ - u16 rx_cons_sb = le16_to_cpu(*fp->rx_cons_sb); - - if ((rx_cons_sb & MAX_RCQ_DESC_CNT) == MAX_RCQ_DESC_CNT) - rx_cons_sb++; - - if ((rx_cons_sb != fp->rx_comp_cons) || - (le16_to_cpu(*fp->tx_cons_sb) != fp->tx_pkt_cons)) - return 1; - - return 0; -} - -static u16 bnx2x_ack_int(struct bnx2x *bp) -{ - u32 igu_addr = (IGU_ADDR_SIMD_MASK + IGU_PORT_BASE * bp->port) * 8; - u32 result = REG_RD(bp, BAR_IGU_INTMEM + igu_addr); - -/* DP(NETIF_MSG_INTR, "read 0x%08x from IGU addr 0x%x\n", - result, BAR_IGU_INTMEM + igu_addr); */ - -#ifdef IGU_DEBUG -#warning IGU_DEBUG active - if (result == 0) { - BNX2X_ERR("read %x from IGU\n", result); - REG_WR(bp, TM_REG_TIMER_SOFT_RST, 0); - } -#endif - return result; -} - - -/* - * fast path service functions - */ - -/* free skb in the packet ring at pos idx - * return idx of last bd freed - */ -static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fastpath *fp, - u16 idx) -{ - struct sw_tx_bd *tx_buf = &fp->tx_buf_ring[idx]; - struct eth_tx_bd *tx_bd; - struct sk_buff *skb = tx_buf->skb; - u16 bd_idx = tx_buf->first_bd; - int nbd; - - DP(BNX2X_MSG_OFF, "pkt_idx %d buff @(%p)->skb %p\n", - idx, tx_buf, skb); - - /* unmap first bd */ - DP(BNX2X_MSG_OFF, "free bd_idx %d\n", bd_idx); - tx_bd = &fp->tx_desc_ring[bd_idx]; - pci_unmap_single(bp->pdev, BD_UNMAP_ADDR(tx_bd), - BD_UNMAP_LEN(tx_bd), PCI_DMA_TODEVICE); - - nbd = le16_to_cpu(tx_bd->nbd) - 1; -#ifdef BNX2X_STOP_ON_ERROR - if (nbd > (MAX_SKB_FRAGS + 2)) { - BNX2X_ERR("bad nbd!\n"); - bnx2x_panic(); - } -#endif - - /* Skip a parse bd and the TSO split header bd - since they have no mapping */ - if (nbd) - bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); - - if (tx_bd->bd_flags.as_bitfield & (ETH_TX_BD_FLAGS_IP_CSUM | - ETH_TX_BD_FLAGS_TCP_CSUM | - ETH_TX_BD_FLAGS_SW_LSO)) { - if (--nbd) - bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); - tx_bd = &fp->tx_desc_ring[bd_idx]; - /* is this a TSO split header bd? */ - if (tx_bd->bd_flags.as_bitfield & ETH_TX_BD_FLAGS_SW_LSO) { - if (--nbd) - bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); - } - } - - /* now free frags */ - while (nbd > 0) { - - DP(BNX2X_MSG_OFF, "free frag bd_idx %d\n", bd_idx); - tx_bd = &fp->tx_desc_ring[bd_idx]; - pci_unmap_page(bp->pdev, BD_UNMAP_ADDR(tx_bd), - BD_UNMAP_LEN(tx_bd), PCI_DMA_TODEVICE); - if (--nbd) - bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); - } - - /* release skb */ - BUG_TRAP(skb); - dev_kfree_skb(skb); - tx_buf->first_bd = 0; - tx_buf->skb = NULL; - - return bd_idx; -} - -static inline u32 bnx2x_tx_avail(struct bnx2x_fastpath *fp) -{ - u16 used; - u32 prod; - u32 cons; - - /* Tell compiler that prod and cons can change */ - barrier(); - prod = fp->tx_bd_prod; - cons = fp->tx_bd_cons; - - used = (NUM_TX_BD - NUM_TX_RINGS + prod - cons + - (cons / TX_DESC_CNT) - (prod / TX_DESC_CNT)); - - if (prod >= cons) { - /* used = prod - cons - prod/size + cons/size */ - used -= NUM_TX_BD - NUM_TX_RINGS; - } - - BUG_TRAP(used <= fp->bp->tx_ring_size); - BUG_TRAP((fp->bp->tx_ring_size - used) <= MAX_TX_AVAIL); - - return (fp->bp->tx_ring_size - used); -} - -static void bnx2x_tx_int(struct bnx2x_fastpath *fp, int work) -{ - struct bnx2x *bp = fp->bp; - u16 hw_cons, sw_cons, bd_cons = fp->tx_bd_cons; - int done = 0; - -#ifdef BNX2X_STOP_ON_ERROR - if (unlikely(bp->panic)) - return; -#endif - - hw_cons = le16_to_cpu(*fp->tx_cons_sb); - sw_cons = fp->tx_pkt_cons; - - while (sw_cons != hw_cons) { - u16 pkt_cons; - - pkt_cons = TX_BD(sw_cons); - - /* prefetch(bp->tx_buf_ring[pkt_cons].skb); */ - - DP(NETIF_MSG_TX_DONE, "hw_cons %u sw_cons %u pkt_cons %d\n", - hw_cons, sw_cons, pkt_cons); - -/* if (NEXT_TX_IDX(sw_cons) != hw_cons) { - rmb(); - prefetch(fp->tx_buf_ring[NEXT_TX_IDX(sw_cons)].skb); - } -*/ - bd_cons = bnx2x_free_tx_pkt(bp, fp, pkt_cons); - sw_cons++; - done++; - - if (done == work) - break; - } - - fp->tx_pkt_cons = sw_cons; - fp->tx_bd_cons = bd_cons; - - /* Need to make the tx_cons update visible to start_xmit() - * before checking for netif_queue_stopped(). Without the - * memory barrier, there is a small possibility that start_xmit() - * will miss it and cause the queue to be stopped forever. - */ - smp_mb(); - - /* TBD need a thresh? */ - if (unlikely(netif_queue_stopped(bp->dev))) { - - netif_tx_lock(bp->dev); - - if (netif_queue_stopped(bp->dev) && - (bnx2x_tx_avail(fp) >= MAX_SKB_FRAGS + 3)) - netif_wake_queue(bp->dev); - - netif_tx_unlock(bp->dev); - - } -} - -static void bnx2x_sp_event(struct bnx2x_fastpath *fp, - union eth_rx_cqe *rr_cqe) -{ - struct bnx2x *bp = fp->bp; - int cid = SW_CID(rr_cqe->ramrod_cqe.conn_and_cmd_data); - int command = CQE_CMD(rr_cqe->ramrod_cqe.conn_and_cmd_data); - - DP(NETIF_MSG_RX_STATUS, - "fp %d cid %d got ramrod #%d state is %x type is %d\n", - fp->index, cid, command, bp->state, rr_cqe->ramrod_cqe.type); - - bp->spq_left++; - - if (fp->index) { - switch (command | fp->state) { - case (RAMROD_CMD_ID_ETH_CLIENT_SETUP | - BNX2X_FP_STATE_OPENING): - DP(NETIF_MSG_IFUP, "got MULTI[%d] setup ramrod\n", - cid); - fp->state = BNX2X_FP_STATE_OPEN; - break; - - case (RAMROD_CMD_ID_ETH_HALT | BNX2X_FP_STATE_HALTING): - DP(NETIF_MSG_IFDOWN, "got MULTI[%d] halt ramrod\n", - cid); - fp->state = BNX2X_FP_STATE_HALTED; - break; - - default: - BNX2X_ERR("unexpected MC reply(%d) state is %x\n", - command, fp->state); - } - mb(); /* force bnx2x_wait_ramrod to see the change */ - return; - } - - switch (command | bp->state) { - case (RAMROD_CMD_ID_ETH_PORT_SETUP | BNX2X_STATE_OPENING_WAIT4_PORT): - DP(NETIF_MSG_IFUP, "got setup ramrod\n"); - bp->state = BNX2X_STATE_OPEN; - break; - - case (RAMROD_CMD_ID_ETH_HALT | BNX2X_STATE_CLOSING_WAIT4_HALT): - DP(NETIF_MSG_IFDOWN, "got halt ramrod\n"); - bp->state = BNX2X_STATE_CLOSING_WAIT4_DELETE; - fp->state = BNX2X_FP_STATE_HALTED; - break; - - case (RAMROD_CMD_ID_ETH_CFC_DEL | BNX2X_STATE_CLOSING_WAIT4_HALT): - DP(NETIF_MSG_IFDOWN, "got delete ramrod for MULTI[%d]\n", - cid); - bnx2x_fp(bp, cid, state) = BNX2X_FP_STATE_CLOSED; - break; - - case (RAMROD_CMD_ID_ETH_SET_MAC | BNX2X_STATE_OPEN): - DP(NETIF_MSG_IFUP, "got set mac ramrod\n"); - break; - - case (RAMROD_CMD_ID_ETH_SET_MAC | BNX2X_STATE_CLOSING_WAIT4_HALT): - DP(NETIF_MSG_IFUP, "got (un)set mac ramrod\n"); - break; - - default: - BNX2X_ERR("unexpected ramrod (%d) state is %x\n", - command, bp->state); - } - - mb(); /* force bnx2x_wait_ramrod to see the change */ -} - -static inline int bnx2x_alloc_rx_skb(struct bnx2x *bp, - struct bnx2x_fastpath *fp, u16 index) -{ - struct sk_buff *skb; - struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[index]; - struct eth_rx_bd *rx_bd = &fp->rx_desc_ring[index]; - dma_addr_t mapping; - - skb = netdev_alloc_skb(bp->dev, bp->rx_buf_size); - if (unlikely(skb == NULL)) - return -ENOMEM; - - mapping = pci_map_single(bp->pdev, skb->data, bp->rx_buf_use_size, - PCI_DMA_FROMDEVICE); - if (unlikely(dma_mapping_error(mapping))) { - - dev_kfree_skb(skb); - return -ENOMEM; - } - - rx_buf->skb = skb; - pci_unmap_addr_set(rx_buf, mapping, mapping); - - rx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); - rx_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); - - return 0; -} - -/* note that we are not allocating a new skb, - * we are just moving one from cons to prod - * we are not creating a new mapping, - * so there is no need to check for dma_mapping_error(). - */ -static void bnx2x_reuse_rx_skb(struct bnx2x_fastpath *fp, - struct sk_buff *skb, u16 cons, u16 prod) -{ - struct bnx2x *bp = fp->bp; - struct sw_rx_bd *cons_rx_buf = &fp->rx_buf_ring[cons]; - struct sw_rx_bd *prod_rx_buf = &fp->rx_buf_ring[prod]; - struct eth_rx_bd *cons_bd = &fp->rx_desc_ring[cons]; - struct eth_rx_bd *prod_bd = &fp->rx_desc_ring[prod]; - - pci_dma_sync_single_for_device(bp->pdev, - pci_unmap_addr(cons_rx_buf, mapping), - bp->rx_offset + RX_COPY_THRESH, - PCI_DMA_FROMDEVICE); - - prod_rx_buf->skb = cons_rx_buf->skb; - pci_unmap_addr_set(prod_rx_buf, mapping, - pci_unmap_addr(cons_rx_buf, mapping)); - *prod_bd = *cons_bd; -} - -static int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget) -{ - struct bnx2x *bp = fp->bp; - u16 bd_cons, bd_prod, comp_ring_cons; - u16 hw_comp_cons, sw_comp_cons, sw_comp_prod; - int rx_pkt = 0; - -#ifdef BNX2X_STOP_ON_ERROR - if (unlikely(bp->panic)) - return 0; -#endif - - hw_comp_cons = le16_to_cpu(*fp->rx_cons_sb); - if ((hw_comp_cons & MAX_RCQ_DESC_CNT) == MAX_RCQ_DESC_CNT) - hw_comp_cons++; - - bd_cons = fp->rx_bd_cons; - bd_prod = fp->rx_bd_prod; - sw_comp_cons = fp->rx_comp_cons; - sw_comp_prod = fp->rx_comp_prod; - - /* Memory barrier necessary as speculative reads of the rx - * buffer can be ahead of the index in the status block - */ - rmb(); - - DP(NETIF_MSG_RX_STATUS, - "queue[%d]: hw_comp_cons %u sw_comp_cons %u\n", - fp->index, hw_comp_cons, sw_comp_cons); - - while (sw_comp_cons != hw_comp_cons) { - unsigned int len, pad; - struct sw_rx_bd *rx_buf; - struct sk_buff *skb; - union eth_rx_cqe *cqe; - - comp_ring_cons = RCQ_BD(sw_comp_cons); - bd_prod = RX_BD(bd_prod); - bd_cons = RX_BD(bd_cons); - - cqe = &fp->rx_comp_ring[comp_ring_cons]; - - DP(NETIF_MSG_RX_STATUS, "hw_comp_cons %u sw_comp_cons %u" - " comp_ring (%u) bd_ring (%u,%u)\n", - hw_comp_cons, sw_comp_cons, - comp_ring_cons, bd_prod, bd_cons); - DP(NETIF_MSG_RX_STATUS, "CQE type %x err %x status %x" - " queue %x vlan %x len %x\n", - cqe->fast_path_cqe.type, - cqe->fast_path_cqe.error_type_flags, - cqe->fast_path_cqe.status_flags, - cqe->fast_path_cqe.rss_hash_result, - cqe->fast_path_cqe.vlan_tag, cqe->fast_path_cqe.pkt_len); - - /* is this a slowpath msg? */ - if (unlikely(cqe->fast_path_cqe.type)) { - bnx2x_sp_event(fp, cqe); - goto next_cqe; - - /* this is an rx packet */ - } else { - rx_buf = &fp->rx_buf_ring[bd_cons]; - skb = rx_buf->skb; - - len = le16_to_cpu(cqe->fast_path_cqe.pkt_len); - pad = cqe->fast_path_cqe.placement_offset; - - pci_dma_sync_single_for_device(bp->pdev, - pci_unmap_addr(rx_buf, mapping), - pad + RX_COPY_THRESH, - PCI_DMA_FROMDEVICE); - prefetch(skb); - prefetch(((char *)(skb)) + 128); - - /* is this an error packet? */ - if (unlikely(cqe->fast_path_cqe.error_type_flags & - ETH_RX_ERROR_FALGS)) { - /* do we sometimes forward error packets anyway? */ - DP(NETIF_MSG_RX_ERR, - "ERROR flags(%u) Rx packet(%u)\n", - cqe->fast_path_cqe.error_type_flags, - sw_comp_cons); - /* TBD make sure MC counts this as a drop */ - goto reuse_rx; - } - - /* Since we don't have a jumbo ring - * copy small packets if mtu > 1500 - */ - if ((bp->dev->mtu > ETH_MAX_PACKET_SIZE) && - (len <= RX_COPY_THRESH)) { - struct sk_buff *new_skb; - - new_skb = netdev_alloc_skb(bp->dev, - len + pad); - if (new_skb == NULL) { - DP(NETIF_MSG_RX_ERR, - "ERROR packet dropped " - "because of alloc failure\n"); - /* TBD count this as a drop? */ - goto reuse_rx; - } - - /* aligned copy */ - skb_copy_from_linear_data_offset(skb, pad, - new_skb->data + pad, len); - skb_reserve(new_skb, pad); - skb_put(new_skb, len); - - bnx2x_reuse_rx_skb(fp, skb, bd_cons, bd_prod); - - skb = new_skb; - - } else if (bnx2x_alloc_rx_skb(bp, fp, bd_prod) == 0) { - pci_unmap_single(bp->pdev, - pci_unmap_addr(rx_buf, mapping), - bp->rx_buf_use_size, - PCI_DMA_FROMDEVICE); - skb_reserve(skb, pad); - skb_put(skb, len); - - } else { - DP(NETIF_MSG_RX_ERR, - "ERROR packet dropped because " - "of alloc failure\n"); -reuse_rx: - bnx2x_reuse_rx_skb(fp, skb, bd_cons, bd_prod); - goto next_rx; - } - - skb->protocol = eth_type_trans(skb, bp->dev); - - skb->ip_summed = CHECKSUM_NONE; - if (bp->rx_csum && BNX2X_RX_SUM_OK(cqe)) - skb->ip_summed = CHECKSUM_UNNECESSARY; - - /* TBD do we pass bad csum packets in promisc */ - } - -#ifdef BCM_VLAN - if ((le16_to_cpu(cqe->fast_path_cqe.pars_flags.flags) - & PARSING_FLAGS_NUMBER_OF_NESTED_VLANS) - && (bp->vlgrp != NULL)) - vlan_hwaccel_receive_skb(skb, bp->vlgrp, - le16_to_cpu(cqe->fast_path_cqe.vlan_tag)); - else -#endif - netif_receive_skb(skb); - - bp->dev->last_rx = jiffies; - -next_rx: - rx_buf->skb = NULL; - - bd_cons = NEXT_RX_IDX(bd_cons); - bd_prod = NEXT_RX_IDX(bd_prod); -next_cqe: - sw_comp_prod = NEXT_RCQ_IDX(sw_comp_prod); - sw_comp_cons = NEXT_RCQ_IDX(sw_comp_cons); - rx_pkt++; - - if ((rx_pkt == budget)) - break; - } /* while */ - - fp->rx_bd_cons = bd_cons; - fp->rx_bd_prod = bd_prod; - fp->rx_comp_cons = sw_comp_cons; - fp->rx_comp_prod = sw_comp_prod; - - REG_WR(bp, BAR_TSTRORM_INTMEM + - TSTORM_RCQ_PROD_OFFSET(bp->port, fp->index), sw_comp_prod); - - mmiowb(); /* keep prod updates ordered */ - - fp->rx_pkt += rx_pkt; - fp->rx_calls++; - - return rx_pkt; -} - -static irqreturn_t bnx2x_msix_fp_int(int irq, void *fp_cookie, struct pt_regs *regs) -{ - struct bnx2x_fastpath *fp = fp_cookie; - struct bnx2x *bp = fp->bp; - struct net_device *dev = bp->dev; - int index = fp->index; - - DP(NETIF_MSG_INTR, "got an msix interrupt on [%d]\n", index); - bnx2x_ack_sb(bp, index, USTORM_ID, 0, IGU_INT_DISABLE, 0); - -#ifdef BNX2X_STOP_ON_ERROR - if (unlikely(bp->panic)) - return IRQ_HANDLED; -#endif - - prefetch(fp->rx_cons_sb); - prefetch(fp->tx_cons_sb); - prefetch(&fp->status_blk->c_status_block.status_block_index); - prefetch(&fp->status_blk->u_status_block.status_block_index); - - netif_rx_schedule(dev); - return IRQ_HANDLED; -} - -static irqreturn_t bnx2x_interrupt(int irq, void *dev_instance, struct pt_regs *regs) -{ - struct net_device *dev = dev_instance; - struct bnx2x *bp = netdev_priv(dev); - u16 status = bnx2x_ack_int(bp); - - if (unlikely(status == 0)) { - DP(NETIF_MSG_INTR, "not our interrupt!\n"); - return IRQ_NONE; - } - - DP(NETIF_MSG_INTR, "got an interrupt status is %u\n", status); - -#ifdef BNX2X_STOP_ON_ERROR - if (unlikely(bp->panic)) - return IRQ_HANDLED; -#endif - - /* Return here if interrupt is shared and is disabled */ - if (unlikely(atomic_read(&bp->intr_sem) != 0)) { - DP(NETIF_MSG_INTR, "called but intr_sem not 0, returning\n"); - return IRQ_HANDLED; - } - - if (status & 0x2) { - struct bnx2x_fastpath *fp = &bp->fp[0]; - - prefetch(fp->rx_cons_sb); - prefetch(fp->tx_cons_sb); - prefetch(&fp->status_blk->c_status_block.status_block_index); - prefetch(&fp->status_blk->u_status_block.status_block_index); - - netif_rx_schedule(dev); - - status &= ~0x2; - if (!status) - return IRQ_HANDLED; - } - - if (unlikely(status & 0x1)) { - bp->sp_running = 1; - smp_mb(); /* make sure close can see this */ - - schedule_work(&bp->sp_task); - - status &= ~0x1; - if (!status) - return IRQ_HANDLED; - } - - DP(NETIF_MSG_INTR, "got an unknown interrupt! (status is %u)\n", - status); - - return IRQ_HANDLED; -} - -/* end of fast path */ - -/* PHY/MAC */ - -/* - * General service functions - */ - -static void bnx2x_leds_set(struct bnx2x *bp, unsigned int speed) -{ - int port = bp->port; - - NIG_WR(NIG_REG_LED_MODE_P0 + port*4, - ((bp->hw_config & SHARED_HW_CFG_LED_MODE_MASK) >> - SHARED_HW_CFG_LED_MODE_SHIFT)); - NIG_WR(NIG_REG_LED_CONTROL_OVERRIDE_TRAFFIC_P0 + port*4, 0); - - /* Set blinking rate to ~15.9Hz */ - NIG_WR(NIG_REG_LED_CONTROL_BLINK_RATE_P0 + port*4, - LED_BLINK_RATE_VAL); - NIG_WR(NIG_REG_LED_CONTROL_BLINK_RATE_ENA_P0 + port*4, 1); - - /* On Ax chip versions for speeds less than 10G - LED scheme is different */ - if ((CHIP_REV(bp) == CHIP_REV_Ax) && (speed < SPEED_10000)) { - NIG_WR(NIG_REG_LED_CONTROL_OVERRIDE_TRAFFIC_P0 + port*4, 1); - NIG_WR(NIG_REG_LED_CONTROL_TRAFFIC_P0 + port*4, 0); - NIG_WR(NIG_REG_LED_CONTROL_BLINK_TRAFFIC_P0 + port*4, 1); - } -} - -static void bnx2x_leds_unset(struct bnx2x *bp) -{ - int port = bp->port; - - NIG_WR(NIG_REG_LED_10G_P0 + port*4, 0); - NIG_WR(NIG_REG_LED_MODE_P0 + port*4, SHARED_HW_CFG_LED_MAC1); -} - -static u32 bnx2x_bits_en(struct bnx2x *bp, u32 reg, u32 bits) -{ - u32 val = REG_RD(bp, reg); - - val |= bits; - REG_WR(bp, reg, val); - return val; -} - -static u32 bnx2x_bits_dis(struct bnx2x *bp, u32 reg, u32 bits) -{ - u32 val = REG_RD(bp, reg); - - val &= ~bits; - REG_WR(bp, reg, val); - return val; -} - -static int bnx2x_hw_lock(struct bnx2x *bp, u32 resource) -{ - u32 cnt; - u32 lock_status; - u32 resource_bit = (1 << resource); - u8 func = bp->port; - - /* Validating that the resource is within range */ - if (resource > HW_LOCK_MAX_RESOURCE_VALUE) { - DP(NETIF_MSG_HW, - "resource(0x%x) > HW_LOCK_MAX_RESOURCE_VALUE(0x%x)\n", - resource, HW_LOCK_MAX_RESOURCE_VALUE); - return -EINVAL; - } - - /* Validating that the resource is not already taken */ - lock_status = REG_RD(bp, MISC_REG_DRIVER_CONTROL_1 + func*8); - if (lock_status & resource_bit) { - DP(NETIF_MSG_HW, "lock_status 0x%x resource_bit 0x%x\n", - lock_status, resource_bit); - return -EEXIST; - } - - /* Try for 1 second every 5ms */ - for (cnt = 0; cnt < 200; cnt++) { - /* Try to acquire the lock */ - REG_WR(bp, MISC_REG_DRIVER_CONTROL_1 + func*8 + 4, - resource_bit); - lock_status = REG_RD(bp, MISC_REG_DRIVER_CONTROL_1 + func*8); - if (lock_status & resource_bit) - return 0; - - msleep(5); - } - DP(NETIF_MSG_HW, "Timeout\n"); - return -EAGAIN; -} - -static int bnx2x_hw_unlock(struct bnx2x *bp, u32 resource) -{ - u32 lock_status; - u32 resource_bit = (1 << resource); - u8 func = bp->port; - - /* Validating that the resource is within range */ - if (resource > HW_LOCK_MAX_RESOURCE_VALUE) { - DP(NETIF_MSG_HW, - "resource(0x%x) > HW_LOCK_MAX_RESOURCE_VALUE(0x%x)\n", - resource, HW_LOCK_MAX_RESOURCE_VALUE); - return -EINVAL; - } - - /* Validating that the resource is currently taken */ - lock_status = REG_RD(bp, MISC_REG_DRIVER_CONTROL_1 + func*8); - if (!(lock_status & resource_bit)) { - DP(NETIF_MSG_HW, "lock_status 0x%x resource_bit 0x%x\n", - lock_status, resource_bit); - return -EFAULT; - } - - REG_WR(bp, MISC_REG_DRIVER_CONTROL_1 + func*8, resource_bit); - return 0; -} - -static int bnx2x_set_gpio(struct bnx2x *bp, int gpio_num, u32 mode) -{ - /* The GPIO should be swapped if swap register is set and active */ - int gpio_port = (REG_RD(bp, NIG_REG_PORT_SWAP) && - REG_RD(bp, NIG_REG_STRAP_OVERRIDE)) ^ bp->port; - int gpio_shift = gpio_num + - (gpio_port ? MISC_REGISTERS_GPIO_PORT_SHIFT : 0); - u32 gpio_mask = (1 << gpio_shift); - u32 gpio_reg; - - if (gpio_num > MISC_REGISTERS_GPIO_3) { - BNX2X_ERR("Invalid GPIO %d\n", gpio_num); - return -EINVAL; - } - - bnx2x_hw_lock(bp, HW_LOCK_RESOURCE_GPIO); - /* read GPIO and mask except the float bits */ - gpio_reg = (REG_RD(bp, MISC_REG_GPIO) & MISC_REGISTERS_GPIO_FLOAT); - - switch (mode) { - case MISC_REGISTERS_GPIO_OUTPUT_LOW: - DP(NETIF_MSG_LINK, "Set GPIO %d (shift %d) -> output low\n", - gpio_num, gpio_shift); - /* clear FLOAT and set CLR */ - gpio_reg &= ~(gpio_mask << MISC_REGISTERS_GPIO_FLOAT_POS); - gpio_reg |= (gpio_mask << MISC_REGISTERS_GPIO_CLR_POS); - break; - - case MISC_REGISTERS_GPIO_OUTPUT_HIGH: - DP(NETIF_MSG_LINK, "Set GPIO %d (shift %d) -> output high\n", - gpio_num, gpio_shift); - /* clear FLOAT and set SET */ - gpio_reg &= ~(gpio_mask << MISC_REGISTERS_GPIO_FLOAT_POS); - gpio_reg |= (gpio_mask << MISC_REGISTERS_GPIO_SET_POS); - break; - - case MISC_REGISTERS_GPIO_INPUT_HI_Z : - DP(NETIF_MSG_LINK, "Set GPIO %d (shift %d) -> input\n", - gpio_num, gpio_shift); - /* set FLOAT */ - gpio_reg |= (gpio_mask << MISC_REGISTERS_GPIO_FLOAT_POS); - break; - - default: - break; - } - - REG_WR(bp, MISC_REG_GPIO, gpio_reg); - bnx2x_hw_unlock(bp, HW_LOCK_RESOURCE_GPIO); - - return 0; -} - -static int bnx2x_set_spio(struct bnx2x *bp, int spio_num, u32 mode) -{ - u32 spio_mask = (1 << spio_num); - u32 spio_reg; - - if ((spio_num < MISC_REGISTERS_SPIO_4) || - (spio_num > MISC_REGISTERS_SPIO_7)) { - BNX2X_ERR("Invalid SPIO %d\n", spio_num); - return -EINVAL; - } - - bnx2x_hw_lock(bp, HW_LOCK_RESOURCE_SPIO); - /* read SPIO and mask except the float bits */ - spio_reg = (REG_RD(bp, MISC_REG_SPIO) & MISC_REGISTERS_SPIO_FLOAT); - - switch (mode) { - case MISC_REGISTERS_SPIO_OUTPUT_LOW : - DP(NETIF_MSG_LINK, "Set SPIO %d -> output low\n", spio_num); - /* clear FLOAT and set CLR */ - spio_reg &= ~(spio_mask << MISC_REGISTERS_SPIO_FLOAT_POS); - spio_reg |= (spio_mask << MISC_REGISTERS_SPIO_CLR_POS); - break; - - case MISC_REGISTERS_SPIO_OUTPUT_HIGH : - DP(NETIF_MSG_LINK, "Set SPIO %d -> output high\n", spio_num); - /* clear FLOAT and set SET */ - spio_reg &= ~(spio_mask << MISC_REGISTERS_SPIO_FLOAT_POS); - spio_reg |= (spio_mask << MISC_REGISTERS_SPIO_SET_POS); - break; - - case MISC_REGISTERS_SPIO_INPUT_HI_Z: - DP(NETIF_MSG_LINK, "Set SPIO %d -> input\n", spio_num); - /* set FLOAT */ - spio_reg |= (spio_mask << MISC_REGISTERS_SPIO_FLOAT_POS); - break; - - default: - break; - } - - REG_WR(bp, MISC_REG_SPIO, spio_reg); - bnx2x_hw_unlock(bp, HW_LOCK_RESOURCE_SPIO); - - return 0; -} - -static int bnx2x_mdio22_write(struct bnx2x *bp, u32 reg, u32 val) -{ - int port = bp->port; - u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; - u32 tmp; - int i, rc; - -/* DP(NETIF_MSG_HW, "phy_addr 0x%x reg 0x%x val 0x%08x\n", - bp->phy_addr, reg, val); */ - - if (bp->phy_flags & PHY_INT_MODE_AUTO_POLLING_FLAG) { - - tmp = REG_RD(bp, emac_base + EMAC_REG_EMAC_MDIO_MODE); - tmp &= ~EMAC_MDIO_MODE_AUTO_POLL; - EMAC_WR(EMAC_REG_EMAC_MDIO_MODE, tmp); - REG_RD(bp, emac_base + EMAC_REG_EMAC_MDIO_MODE); - udelay(40); - } - - tmp = ((bp->phy_addr << 21) | (reg << 16) | - (val & EMAC_MDIO_COMM_DATA) | - EMAC_MDIO_COMM_COMMAND_WRITE_22 | - EMAC_MDIO_COMM_START_BUSY); - EMAC_WR(EMAC_REG_EMAC_MDIO_COMM, tmp); - - for (i = 0; i < 50; i++) { - udelay(10); - - tmp = REG_RD(bp, emac_base + EMAC_REG_EMAC_MDIO_COMM); - if (!(tmp & EMAC_MDIO_COMM_START_BUSY)) { - udelay(5); - break; - } - } - - if (tmp & EMAC_MDIO_COMM_START_BUSY) { - BNX2X_ERR("write phy register failed\n"); - - rc = -EBUSY; - } else { - rc = 0; - } - - if (bp->phy_flags & PHY_INT_MODE_AUTO_POLLING_FLAG) { - - tmp = REG_RD(bp, emac_base + EMAC_REG_EMAC_MDIO_MODE); - tmp |= EMAC_MDIO_MODE_AUTO_POLL; - EMAC_WR(EMAC_REG_EMAC_MDIO_MODE, tmp); - } - - return rc; -} - -static int bnx2x_mdio22_read(struct bnx2x *bp, u32 reg, u32 *ret_val) -{ - int port = bp->port; - u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; - u32 val; - int i, rc; - - if (bp->phy_flags & PHY_INT_MODE_AUTO_POLLING_FLAG) { - - val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MDIO_MODE); - val &= ~EMAC_MDIO_MODE_AUTO_POLL; - EMAC_WR(EMAC_REG_EMAC_MDIO_MODE, val); - REG_RD(bp, emac_base + EMAC_REG_EMAC_MDIO_MODE); - udelay(40); - } - - val = ((bp->phy_addr << 21) | (reg << 16) | - EMAC_MDIO_COMM_COMMAND_READ_22 | - EMAC_MDIO_COMM_START_BUSY); - EMAC_WR(EMAC_REG_EMAC_MDIO_COMM, val); - - for (i = 0; i < 50; i++) { - udelay(10); - - val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MDIO_COMM); - if (!(val & EMAC_MDIO_COMM_START_BUSY)) { - val &= EMAC_MDIO_COMM_DATA; - break; - } - } - - if (val & EMAC_MDIO_COMM_START_BUSY) { - BNX2X_ERR("read phy register failed\n"); - - *ret_val = 0x0; - rc = -EBUSY; - } else { - *ret_val = val; - rc = 0; - } - - if (bp->phy_flags & PHY_INT_MODE_AUTO_POLLING_FLAG) { - - val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MDIO_MODE); - val |= EMAC_MDIO_MODE_AUTO_POLL; - EMAC_WR(EMAC_REG_EMAC_MDIO_MODE, val); - } - -/* DP(NETIF_MSG_HW, "phy_addr 0x%x reg 0x%x ret_val 0x%08x\n", - bp->phy_addr, reg, *ret_val); */ - - return rc; -} - -static int bnx2x_mdio45_ctrl_write(struct bnx2x *bp, u32 mdio_ctrl, - u32 phy_addr, u32 reg, u32 addr, u32 val) -{ - u32 tmp; - int i, rc = 0; - - /* set clause 45 mode, slow down the MDIO clock to 2.5MHz - * (a value of 49==0x31) and make sure that the AUTO poll is off - */ - tmp = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE); - tmp &= ~(EMAC_MDIO_MODE_AUTO_POLL | EMAC_MDIO_MODE_CLOCK_CNT); - tmp |= (EMAC_MDIO_MODE_CLAUSE_45 | - (49 << EMAC_MDIO_MODE_CLOCK_CNT_BITSHIFT)); - REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE, tmp); - REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE); - udelay(40); - - /* address */ - tmp = ((phy_addr << 21) | (reg << 16) | addr | - EMAC_MDIO_COMM_COMMAND_ADDRESS | - EMAC_MDIO_COMM_START_BUSY); - REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM, tmp); - - for (i = 0; i < 50; i++) { - udelay(10); - - tmp = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM); - if (!(tmp & EMAC_MDIO_COMM_START_BUSY)) { - udelay(5); - break; - } - } - if (tmp & EMAC_MDIO_COMM_START_BUSY) { - BNX2X_ERR("write phy register failed\n"); - - rc = -EBUSY; - - } else { - /* data */ - tmp = ((phy_addr << 21) | (reg << 16) | val | - EMAC_MDIO_COMM_COMMAND_WRITE_45 | - EMAC_MDIO_COMM_START_BUSY); - REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM, tmp); - - for (i = 0; i < 50; i++) { - udelay(10); - - tmp = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM); - if (!(tmp & EMAC_MDIO_COMM_START_BUSY)) { - udelay(5); - break; - } - } - - if (tmp & EMAC_MDIO_COMM_START_BUSY) { - BNX2X_ERR("write phy register failed\n"); - - rc = -EBUSY; - } - } - - /* unset clause 45 mode, set the MDIO clock to a faster value - * (0x13 => 6.25Mhz) and restore the AUTO poll if needed - */ - tmp = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE); - tmp &= ~(EMAC_MDIO_MODE_CLAUSE_45 | EMAC_MDIO_MODE_CLOCK_CNT); - tmp |= (0x13 << EMAC_MDIO_MODE_CLOCK_CNT_BITSHIFT); - if (bp->phy_flags & PHY_INT_MODE_AUTO_POLLING_FLAG) - tmp |= EMAC_MDIO_MODE_AUTO_POLL; - REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE, tmp); - - return rc; -} - -static int bnx2x_mdio45_write(struct bnx2x *bp, u32 phy_addr, u32 reg, - u32 addr, u32 val) -{ - u32 emac_base = bp->port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; - - return bnx2x_mdio45_ctrl_write(bp, emac_base, phy_addr, - reg, addr, val); -} - -static int bnx2x_mdio45_ctrl_read(struct bnx2x *bp, u32 mdio_ctrl, - u32 phy_addr, u32 reg, u32 addr, - u32 *ret_val) -{ - u32 val; - int i, rc = 0; - - /* set clause 45 mode, slow down the MDIO clock to 2.5MHz - * (a value of 49==0x31) and make sure that the AUTO poll is off - */ - val = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE); - val &= ~(EMAC_MDIO_MODE_AUTO_POLL | EMAC_MDIO_MODE_CLOCK_CNT); - val |= (EMAC_MDIO_MODE_CLAUSE_45 | - (49 << EMAC_MDIO_MODE_CLOCK_CNT_BITSHIFT)); - REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE, val); - REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE); - udelay(40); - - /* address */ - val = ((phy_addr << 21) | (reg << 16) | addr | - EMAC_MDIO_COMM_COMMAND_ADDRESS | - EMAC_MDIO_COMM_START_BUSY); - REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM, val); - - for (i = 0; i < 50; i++) { - udelay(10); - - val = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM); - if (!(val & EMAC_MDIO_COMM_START_BUSY)) { - udelay(5); - break; - } - } - if (val & EMAC_MDIO_COMM_START_BUSY) { - BNX2X_ERR("read phy register failed\n"); - - *ret_val = 0; - rc = -EBUSY; - - } else { - /* data */ - val = ((phy_addr << 21) | (reg << 16) | - EMAC_MDIO_COMM_COMMAND_READ_45 | - EMAC_MDIO_COMM_START_BUSY); - REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM, val); - - for (i = 0; i < 50; i++) { - udelay(10); - - val = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM); - if (!(val & EMAC_MDIO_COMM_START_BUSY)) { - val &= EMAC_MDIO_COMM_DATA; - break; - } - } - - if (val & EMAC_MDIO_COMM_START_BUSY) { - BNX2X_ERR("read phy register failed\n"); - - val = 0; - rc = -EBUSY; - } - - *ret_val = val; - } - - /* unset clause 45 mode, set the MDIO clock to a faster value - * (0x13 => 6.25Mhz) and restore the AUTO poll if needed - */ - val = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE); - val &= ~(EMAC_MDIO_MODE_CLAUSE_45 | EMAC_MDIO_MODE_CLOCK_CNT); - val |= (0x13 << EMAC_MDIO_MODE_CLOCK_CNT_BITSHIFT); - if (bp->phy_flags & PHY_INT_MODE_AUTO_POLLING_FLAG) - val |= EMAC_MDIO_MODE_AUTO_POLL; - REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE, val); - - return rc; -} - -static int bnx2x_mdio45_read(struct bnx2x *bp, u32 phy_addr, u32 reg, - u32 addr, u32 *ret_val) -{ - u32 emac_base = bp->port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; - - return bnx2x_mdio45_ctrl_read(bp, emac_base, phy_addr, - reg, addr, ret_val); -} - -static int bnx2x_mdio45_vwrite(struct bnx2x *bp, u32 phy_addr, u32 reg, - u32 addr, u32 val) -{ - int i; - u32 rd_val; - - might_sleep(); - for (i = 0; i < 10; i++) { - bnx2x_mdio45_write(bp, phy_addr, reg, addr, val); - msleep(5); - bnx2x_mdio45_read(bp, phy_addr, reg, addr, &rd_val); - /* if the read value is not the same as the value we wrote, - we should write it again */ - if (rd_val == val) - return 0; - } - BNX2X_ERR("MDIO write in CL45 failed\n"); - return -EBUSY; -} - -/* - * link management - */ - -static void bnx2x_pause_resolve(struct bnx2x *bp, u32 pause_result) -{ - switch (pause_result) { /* ASYM P ASYM P */ - case 0xb: /* 1 0 1 1 */ - bp->flow_ctrl = FLOW_CTRL_TX; - break; - - case 0xe: /* 1 1 1 0 */ - bp->flow_ctrl = FLOW_CTRL_RX; - break; - - case 0x5: /* 0 1 0 1 */ - case 0x7: /* 0 1 1 1 */ - case 0xd: /* 1 1 0 1 */ - case 0xf: /* 1 1 1 1 */ - bp->flow_ctrl = FLOW_CTRL_BOTH; - break; - - default: - break; - } -} - -static u8 bnx2x_ext_phy_resove_fc(struct bnx2x *bp) -{ - u32 ext_phy_addr; - u32 ld_pause; /* local */ - u32 lp_pause; /* link partner */ - u32 an_complete; /* AN complete */ - u32 pause_result; - u8 ret = 0; - - ext_phy_addr = ((bp->ext_phy_config & - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); - - /* read twice */ - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - EXT_PHY_KR_STATUS, &an_complete); - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - EXT_PHY_KR_STATUS, &an_complete); - - if (an_complete & EXT_PHY_KR_AUTO_NEG_COMPLETE) { - ret = 1; - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - EXT_PHY_KR_AUTO_NEG_ADVERT, &ld_pause); - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - EXT_PHY_KR_LP_AUTO_NEG, &lp_pause); - pause_result = (ld_pause & - EXT_PHY_KR_AUTO_NEG_ADVERT_PAUSE_MASK) >> 8; - pause_result |= (lp_pause & - EXT_PHY_KR_AUTO_NEG_ADVERT_PAUSE_MASK) >> 10; - DP(NETIF_MSG_LINK, "Ext PHY pause result 0x%x \n", - pause_result); - bnx2x_pause_resolve(bp, pause_result); - } - return ret; -} - -static void bnx2x_flow_ctrl_resolve(struct bnx2x *bp, u32 gp_status) -{ - u32 ld_pause; /* local driver */ - u32 lp_pause; /* link partner */ - u32 pause_result; - - bp->flow_ctrl = 0; - - /* resolve from gp_status in case of AN complete and not sgmii */ - if ((bp->req_autoneg & AUTONEG_FLOW_CTRL) && - (gp_status & MDIO_AN_CL73_OR_37_COMPLETE) && - (!(bp->phy_flags & PHY_SGMII_FLAG)) && - (XGXS_EXT_PHY_TYPE(bp) == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT)) { - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_COMBO_IEEE0); - bnx2x_mdio22_read(bp, MDIO_COMBO_IEEE0_AUTO_NEG_ADV, - &ld_pause); - bnx2x_mdio22_read(bp, - MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1, - &lp_pause); - pause_result = (ld_pause & - MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK)>>5; - pause_result |= (lp_pause & - MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK)>>7; - DP(NETIF_MSG_LINK, "pause_result 0x%x\n", pause_result); - bnx2x_pause_resolve(bp, pause_result); - } else if (!(bp->req_autoneg & AUTONEG_FLOW_CTRL) || - !(bnx2x_ext_phy_resove_fc(bp))) { - /* forced speed */ - if (bp->req_autoneg & AUTONEG_FLOW_CTRL) { - switch (bp->req_flow_ctrl) { - case FLOW_CTRL_AUTO: - if (bp->dev->mtu <= 4500) - bp->flow_ctrl = FLOW_CTRL_BOTH; - else - bp->flow_ctrl = FLOW_CTRL_TX; - break; - - case FLOW_CTRL_TX: - bp->flow_ctrl = FLOW_CTRL_TX; - break; - - case FLOW_CTRL_RX: - if (bp->dev->mtu <= 4500) - bp->flow_ctrl = FLOW_CTRL_RX; - break; - - case FLOW_CTRL_BOTH: - if (bp->dev->mtu <= 4500) - bp->flow_ctrl = FLOW_CTRL_BOTH; - else - bp->flow_ctrl = FLOW_CTRL_TX; - break; - - case FLOW_CTRL_NONE: - default: - break; - } - } else { /* forced mode */ - switch (bp->req_flow_ctrl) { - case FLOW_CTRL_AUTO: - DP(NETIF_MSG_LINK, "req_flow_ctrl 0x%x while" - " req_autoneg 0x%x\n", - bp->req_flow_ctrl, bp->req_autoneg); - break; - - case FLOW_CTRL_TX: - case FLOW_CTRL_RX: - case FLOW_CTRL_BOTH: - bp->flow_ctrl = bp->req_flow_ctrl; - break; - - case FLOW_CTRL_NONE: - default: - break; - } - } - } - DP(NETIF_MSG_LINK, "flow_ctrl 0x%x\n", bp->flow_ctrl); -} - -static void bnx2x_link_settings_status(struct bnx2x *bp, u32 gp_status) -{ - bp->link_status = 0; - - if (gp_status & MDIO_GP_STATUS_TOP_AN_STATUS1_LINK_STATUS) { - DP(NETIF_MSG_LINK, "phy link up\n"); - - bp->phy_link_up = 1; - bp->link_status |= LINK_STATUS_LINK_UP; - - if (gp_status & MDIO_GP_STATUS_TOP_AN_STATUS1_DUPLEX_STATUS) - bp->duplex = DUPLEX_FULL; - else - bp->duplex = DUPLEX_HALF; - - bnx2x_flow_ctrl_resolve(bp, gp_status); - - switch (gp_status & GP_STATUS_SPEED_MASK) { - case GP_STATUS_10M: - bp->line_speed = SPEED_10; - if (bp->duplex == DUPLEX_FULL) - bp->link_status |= LINK_10TFD; - else - bp->link_status |= LINK_10THD; - break; - - case GP_STATUS_100M: - bp->line_speed = SPEED_100; - if (bp->duplex == DUPLEX_FULL) - bp->link_status |= LINK_100TXFD; - else - bp->link_status |= LINK_100TXHD; - break; - - case GP_STATUS_1G: - case GP_STATUS_1G_KX: - bp->line_speed = SPEED_1000; - if (bp->duplex == DUPLEX_FULL) - bp->link_status |= LINK_1000TFD; - else - bp->link_status |= LINK_1000THD; - break; - - case GP_STATUS_2_5G: - bp->line_speed = SPEED_2500; - if (bp->duplex == DUPLEX_FULL) - bp->link_status |= LINK_2500TFD; - else - bp->link_status |= LINK_2500THD; - break; - - case GP_STATUS_5G: - case GP_STATUS_6G: - BNX2X_ERR("link speed unsupported gp_status 0x%x\n", - gp_status); - break; - - case GP_STATUS_10G_KX4: - case GP_STATUS_10G_HIG: - case GP_STATUS_10G_CX4: - bp->line_speed = SPEED_10000; - bp->link_status |= LINK_10GTFD; - break; - - case GP_STATUS_12G_HIG: - bp->line_speed = SPEED_12000; - bp->link_status |= LINK_12GTFD; - break; - - case GP_STATUS_12_5G: - bp->line_speed = SPEED_12500; - bp->link_status |= LINK_12_5GTFD; - break; - - case GP_STATUS_13G: - bp->line_speed = SPEED_13000; - bp->link_status |= LINK_13GTFD; - break; - - case GP_STATUS_15G: - bp->line_speed = SPEED_15000; - bp->link_status |= LINK_15GTFD; - break; - - case GP_STATUS_16G: - bp->line_speed = SPEED_16000; - bp->link_status |= LINK_16GTFD; - break; - - default: - BNX2X_ERR("link speed unsupported gp_status 0x%x\n", - gp_status); - break; - } - - bp->link_status |= LINK_STATUS_SERDES_LINK; - - if (bp->req_autoneg & AUTONEG_SPEED) { - bp->link_status |= LINK_STATUS_AUTO_NEGOTIATE_ENABLED; - - if (gp_status & MDIO_AN_CL73_OR_37_COMPLETE) - bp->link_status |= - LINK_STATUS_AUTO_NEGOTIATE_COMPLETE; - - if (bp->autoneg & AUTONEG_PARALLEL) - bp->link_status |= - LINK_STATUS_PARALLEL_DETECTION_USED; - } - - if (bp->flow_ctrl & FLOW_CTRL_TX) - bp->link_status |= LINK_STATUS_TX_FLOW_CONTROL_ENABLED; - - if (bp->flow_ctrl & FLOW_CTRL_RX) - bp->link_status |= LINK_STATUS_RX_FLOW_CONTROL_ENABLED; - - } else { /* link_down */ - DP(NETIF_MSG_LINK, "phy link down\n"); - - bp->phy_link_up = 0; - - bp->line_speed = 0; - bp->duplex = DUPLEX_FULL; - bp->flow_ctrl = 0; - } - - DP(NETIF_MSG_LINK, "gp_status 0x%x phy_link_up %d\n" - DP_LEVEL " line_speed %d duplex %d flow_ctrl 0x%x" - " link_status 0x%x\n", - gp_status, bp->phy_link_up, bp->line_speed, bp->duplex, - bp->flow_ctrl, bp->link_status); -} - -static void bnx2x_link_int_ack(struct bnx2x *bp, int is_10g) -{ - int port = bp->port; - - /* first reset all status - * we assume only one line will be change at a time */ - bnx2x_bits_dis(bp, NIG_REG_STATUS_INTERRUPT_PORT0 + port*4, - (NIG_STATUS_XGXS0_LINK10G | - NIG_STATUS_XGXS0_LINK_STATUS | - NIG_STATUS_SERDES0_LINK_STATUS)); - if (bp->phy_link_up) { - if (is_10g) { - /* Disable the 10G link interrupt - * by writing 1 to the status register - */ - DP(NETIF_MSG_LINK, "10G XGXS phy link up\n"); - bnx2x_bits_en(bp, - NIG_REG_STATUS_INTERRUPT_PORT0 + port*4, - NIG_STATUS_XGXS0_LINK10G); - - } else if (bp->phy_flags & PHY_XGXS_FLAG) { - /* Disable the link interrupt - * by writing 1 to the relevant lane - * in the status register - */ - DP(NETIF_MSG_LINK, "1G XGXS phy link up\n"); - bnx2x_bits_en(bp, - NIG_REG_STATUS_INTERRUPT_PORT0 + port*4, - ((1 << bp->ser_lane) << - NIG_STATUS_XGXS0_LINK_STATUS_SIZE)); - - } else { /* SerDes */ - DP(NETIF_MSG_LINK, "SerDes phy link up\n"); - /* Disable the link interrupt - * by writing 1 to the status register - */ - bnx2x_bits_en(bp, - NIG_REG_STATUS_INTERRUPT_PORT0 + port*4, - NIG_STATUS_SERDES0_LINK_STATUS); - } - - } else { /* link_down */ - } -} - -static int bnx2x_ext_phy_is_link_up(struct bnx2x *bp) -{ - u32 ext_phy_type; - u32 ext_phy_addr; - u32 val1 = 0, val2; - u32 rx_sd, pcs_status; - - if (bp->phy_flags & PHY_XGXS_FLAG) { - ext_phy_addr = ((bp->ext_phy_config & - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); - - ext_phy_type = XGXS_EXT_PHY_TYPE(bp); - switch (ext_phy_type) { - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: - DP(NETIF_MSG_LINK, "XGXS Direct\n"); - val1 = 1; - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: - DP(NETIF_MSG_LINK, "XGXS 8705\n"); - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_WIS_DEVAD, - EXT_PHY_OPT_LASI_STATUS, &val1); - DP(NETIF_MSG_LINK, "8705 LASI status 0x%x\n", val1); - - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_WIS_DEVAD, - EXT_PHY_OPT_LASI_STATUS, &val1); - DP(NETIF_MSG_LINK, "8705 LASI status 0x%x\n", val1); - - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_PMD_RX_SD, &rx_sd); - DP(NETIF_MSG_LINK, "8705 rx_sd 0x%x\n", rx_sd); - val1 = (rx_sd & 0x1); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: - DP(NETIF_MSG_LINK, "XGXS 8706\n"); - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_LASI_STATUS, &val1); - DP(NETIF_MSG_LINK, "8706 LASI status 0x%x\n", val1); - - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_LASI_STATUS, &val1); - DP(NETIF_MSG_LINK, "8706 LASI status 0x%x\n", val1); - - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_PMD_RX_SD, &rx_sd); - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_PCS_DEVAD, - EXT_PHY_OPT_PCS_STATUS, &pcs_status); - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_AUTO_NEG_DEVAD, - EXT_PHY_OPT_AN_LINK_STATUS, &val2); - - DP(NETIF_MSG_LINK, "8706 rx_sd 0x%x" - " pcs_status 0x%x 1Gbps link_status 0x%x 0x%x\n", - rx_sd, pcs_status, val2, (val2 & (1<<1))); - /* link is up if both bit 0 of pmd_rx_sd and - * bit 0 of pcs_status are set, or if the autoneg bit - 1 is set - */ - val1 = ((rx_sd & pcs_status & 0x1) || (val2 & (1<<1))); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: - bnx2x_hw_lock(bp, HW_LOCK_RESOURCE_8072_MDIO); - - /* clear the interrupt LASI status register */ - bnx2x_mdio45_ctrl_read(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_PCS_DEVAD, - EXT_PHY_KR_LASI_STATUS, &val2); - bnx2x_mdio45_ctrl_read(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_PCS_DEVAD, - EXT_PHY_KR_LASI_STATUS, &val1); - DP(NETIF_MSG_LINK, "KR LASI status 0x%x->0x%x\n", - val2, val1); - /* Check the LASI */ - bnx2x_mdio45_ctrl_read(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, - 0x9003, &val2); - bnx2x_mdio45_ctrl_read(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, - 0x9003, &val1); - DP(NETIF_MSG_LINK, "KR 0x9003 0x%x->0x%x\n", - val2, val1); - /* Check the link status */ - bnx2x_mdio45_ctrl_read(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_PCS_DEVAD, - EXT_PHY_KR_PCS_STATUS, &val2); - DP(NETIF_MSG_LINK, "KR PCS status 0x%x\n", val2); - /* Check the link status on 1.1.2 */ - bnx2x_mdio45_ctrl_read(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_KR_STATUS, &val2); - bnx2x_mdio45_ctrl_read(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_KR_STATUS, &val1); - DP(NETIF_MSG_LINK, - "KR PMA status 0x%x->0x%x\n", val2, val1); - val1 = ((val1 & 4) == 4); - /* If 1G was requested assume the link is up */ - if (!(bp->req_autoneg & AUTONEG_SPEED) && - (bp->req_line_speed == SPEED_1000)) - val1 = 1; - bnx2x_hw_unlock(bp, HW_LOCK_RESOURCE_8072_MDIO); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_LASI_STATUS, &val2); - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_LASI_STATUS, &val1); - DP(NETIF_MSG_LINK, - "10G-base-T LASI status 0x%x->0x%x\n", val2, val1); - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_KR_STATUS, &val2); - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_KR_STATUS, &val1); - DP(NETIF_MSG_LINK, - "10G-base-T PMA status 0x%x->0x%x\n", val2, val1); - val1 = ((val1 & 4) == 4); - /* if link is up - * print the AN outcome of the SFX7101 PHY - */ - if (val1) { - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - 0x21, &val2); - DP(NETIF_MSG_LINK, - "SFX7101 AN status 0x%x->%s\n", val2, - (val2 & (1<<14)) ? "Master" : "Slave"); - } - break; - - default: - DP(NETIF_MSG_LINK, "BAD XGXS ext_phy_config 0x%x\n", - bp->ext_phy_config); - val1 = 0; - break; - } - - } else { /* SerDes */ - ext_phy_type = SERDES_EXT_PHY_TYPE(bp); - switch (ext_phy_type) { - case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT: - DP(NETIF_MSG_LINK, "SerDes Direct\n"); - val1 = 1; - break; - - case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482: - DP(NETIF_MSG_LINK, "SerDes 5482\n"); - val1 = 1; - break; - - default: - DP(NETIF_MSG_LINK, "BAD SerDes ext_phy_config 0x%x\n", - bp->ext_phy_config); - val1 = 0; - break; - } - } - - return val1; -} - -static void bnx2x_bmac_enable(struct bnx2x *bp, int is_lb) -{ - int port = bp->port; - u32 bmac_addr = port ? NIG_REG_INGRESS_BMAC1_MEM : - NIG_REG_INGRESS_BMAC0_MEM; - u32 wb_write[2]; - u32 val; - - DP(NETIF_MSG_LINK, "enabling BigMAC\n"); - /* reset and unreset the BigMac */ - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, - (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); - msleep(5); - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, - (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); - - /* enable access for bmac registers */ - NIG_WR(NIG_REG_BMAC0_REGS_OUT_EN + port*4, 0x1); - - /* XGXS control */ - wb_write[0] = 0x3c; - wb_write[1] = 0; - REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_BMAC_XGXS_CONTROL, - wb_write, 2); - - /* tx MAC SA */ - wb_write[0] = ((bp->dev->dev_addr[2] << 24) | - (bp->dev->dev_addr[3] << 16) | - (bp->dev->dev_addr[4] << 8) | - bp->dev->dev_addr[5]); - wb_write[1] = ((bp->dev->dev_addr[0] << 8) | - bp->dev->dev_addr[1]); - REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_TX_SOURCE_ADDR, - wb_write, 2); - - /* tx control */ - val = 0xc0; - if (bp->flow_ctrl & FLOW_CTRL_TX) - val |= 0x800000; - wb_write[0] = val; - wb_write[1] = 0; - REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_TX_CONTROL, wb_write, 2); - - /* set tx mtu */ - wb_write[0] = ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD; /* -CRC */ - wb_write[1] = 0; - REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_TX_MAX_SIZE, wb_write, 2); - - /* mac control */ - val = 0x3; - if (is_lb) { - val |= 0x4; - DP(NETIF_MSG_LINK, "enable bmac loopback\n"); - } - wb_write[0] = val; - wb_write[1] = 0; - REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_BMAC_CONTROL, - wb_write, 2); - - /* rx control set to don't strip crc */ - val = 0x14; - if (bp->flow_ctrl & FLOW_CTRL_RX) - val |= 0x20; - wb_write[0] = val; - wb_write[1] = 0; - REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_RX_CONTROL, wb_write, 2); - - /* set rx mtu */ - wb_write[0] = ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD; - wb_write[1] = 0; - REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_RX_MAX_SIZE, wb_write, 2); - - /* set cnt max size */ - wb_write[0] = ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD; /* -VLAN */ - wb_write[1] = 0; - REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_CNT_MAX_SIZE, - wb_write, 2); - - /* configure safc */ - wb_write[0] = 0x1000200; - wb_write[1] = 0; - REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_RX_LLFC_MSG_FLDS, - wb_write, 2); - - /* fix for emulation */ - if (CHIP_REV(bp) == CHIP_REV_EMUL) { - wb_write[0] = 0xf000; - wb_write[1] = 0; - REG_WR_DMAE(bp, - bmac_addr + BIGMAC_REGISTER_TX_PAUSE_THRESHOLD, - wb_write, 2); - } - - /* reset old bmac stats */ - memset(&bp->old_bmac, 0, sizeof(struct bmac_stats)); - - NIG_WR(NIG_REG_XCM0_OUT_EN + port*4, 0x0); - - /* select XGXS */ - NIG_WR(NIG_REG_XGXS_SERDES0_MODE_SEL + port*4, 0x1); - NIG_WR(NIG_REG_XGXS_LANE_SEL_P0 + port*4, 0x0); - - /* disable the NIG in/out to the emac */ - NIG_WR(NIG_REG_EMAC0_IN_EN + port*4, 0x0); - NIG_WR(NIG_REG_EMAC0_PAUSE_OUT_EN + port*4, 0x0); - NIG_WR(NIG_REG_EGRESS_EMAC0_OUT_EN + port*4, 0x0); - - /* enable the NIG in/out to the bmac */ - NIG_WR(NIG_REG_EGRESS_EMAC0_PORT + port*4, 0x0); - - NIG_WR(NIG_REG_BMAC0_IN_EN + port*4, 0x1); - val = 0; - if (bp->flow_ctrl & FLOW_CTRL_TX) - val = 1; - NIG_WR(NIG_REG_BMAC0_PAUSE_OUT_EN + port*4, val); - NIG_WR(NIG_REG_BMAC0_OUT_EN + port*4, 0x1); - - bp->phy_flags |= PHY_BMAC_FLAG; - - bp->stats_state = STATS_STATE_ENABLE; -} - -static void bnx2x_bmac_rx_disable(struct bnx2x *bp) -{ - int port = bp->port; - u32 bmac_addr = port ? NIG_REG_INGRESS_BMAC1_MEM : - NIG_REG_INGRESS_BMAC0_MEM; - u32 wb_write[2]; - - /* Only if the bmac is out of reset */ - if (REG_RD(bp, MISC_REG_RESET_REG_2) & - (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)) { - /* Clear Rx Enable bit in BMAC_CONTROL register */ -#ifdef BNX2X_DMAE_RD - bnx2x_read_dmae(bp, bmac_addr + - BIGMAC_REGISTER_BMAC_CONTROL, 2); - wb_write[0] = *bnx2x_sp(bp, wb_data[0]); - wb_write[1] = *bnx2x_sp(bp, wb_data[1]); -#else - wb_write[0] = REG_RD(bp, - bmac_addr + BIGMAC_REGISTER_BMAC_CONTROL); - wb_write[1] = REG_RD(bp, - bmac_addr + BIGMAC_REGISTER_BMAC_CONTROL + 4); -#endif - wb_write[0] &= ~BMAC_CONTROL_RX_ENABLE; - REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_BMAC_CONTROL, - wb_write, 2); - msleep(1); - } -} - -static void bnx2x_emac_enable(struct bnx2x *bp) -{ - int port = bp->port; - u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; - u32 val; - int timeout; - - DP(NETIF_MSG_LINK, "enabling EMAC\n"); - /* reset and unreset the emac core */ - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, - (MISC_REGISTERS_RESET_REG_2_RST_EMAC0_HARD_CORE << port)); - msleep(5); - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, - (MISC_REGISTERS_RESET_REG_2_RST_EMAC0_HARD_CORE << port)); - - /* enable emac and not bmac */ - NIG_WR(NIG_REG_EGRESS_EMAC0_PORT + port*4, 1); - - /* for paladium */ - if (CHIP_REV(bp) == CHIP_REV_EMUL) { - /* Use lane 1 (of lanes 0-3) */ - NIG_WR(NIG_REG_XGXS_LANE_SEL_P0 + port*4, 1); - NIG_WR(NIG_REG_XGXS_SERDES0_MODE_SEL + port*4, 1); - } - /* for fpga */ - else if (CHIP_REV(bp) == CHIP_REV_FPGA) { - /* Use lane 1 (of lanes 0-3) */ - NIG_WR(NIG_REG_XGXS_LANE_SEL_P0 + port*4, 1); - NIG_WR(NIG_REG_XGXS_SERDES0_MODE_SEL + port*4, 0); - } - /* ASIC */ - else { - if (bp->phy_flags & PHY_XGXS_FLAG) { - DP(NETIF_MSG_LINK, "XGXS\n"); - /* select the master lanes (out of 0-3) */ - NIG_WR(NIG_REG_XGXS_LANE_SEL_P0 + port*4, - bp->ser_lane); - /* select XGXS */ - NIG_WR(NIG_REG_XGXS_SERDES0_MODE_SEL + port*4, 1); - - } else { /* SerDes */ - DP(NETIF_MSG_LINK, "SerDes\n"); - /* select SerDes */ - NIG_WR(NIG_REG_XGXS_SERDES0_MODE_SEL + port*4, 0); - } - } - - /* enable emac */ - NIG_WR(NIG_REG_NIG_EMAC0_EN + port*4, 1); - - /* init emac - use read-modify-write */ - /* self clear reset */ - val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); - EMAC_WR(EMAC_REG_EMAC_MODE, (val | EMAC_MODE_RESET)); - - timeout = 200; - while (val & EMAC_MODE_RESET) { - val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); - DP(NETIF_MSG_LINK, "EMAC reset reg is %u\n", val); - if (!timeout) { - BNX2X_ERR("EMAC timeout!\n"); - break; - } - timeout--; - } - - /* reset tx part */ - EMAC_WR(EMAC_REG_EMAC_TX_MODE, EMAC_TX_MODE_RESET); - - timeout = 200; - while (val & EMAC_TX_MODE_RESET) { - val = REG_RD(bp, emac_base + EMAC_REG_EMAC_TX_MODE); - DP(NETIF_MSG_LINK, "EMAC reset reg is %u\n", val); - if (!timeout) { - BNX2X_ERR("EMAC timeout!\n"); - break; - } - timeout--; - } - - if (CHIP_REV_IS_SLOW(bp)) { - /* config GMII mode */ - val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); - EMAC_WR(EMAC_REG_EMAC_MODE, (val | EMAC_MODE_PORT_GMII)); - - } else { /* ASIC */ - /* pause enable/disable */ - bnx2x_bits_dis(bp, emac_base + EMAC_REG_EMAC_RX_MODE, - EMAC_RX_MODE_FLOW_EN); - if (bp->flow_ctrl & FLOW_CTRL_RX) - bnx2x_bits_en(bp, emac_base + EMAC_REG_EMAC_RX_MODE, - EMAC_RX_MODE_FLOW_EN); - - bnx2x_bits_dis(bp, emac_base + EMAC_REG_EMAC_TX_MODE, - EMAC_TX_MODE_EXT_PAUSE_EN); - if (bp->flow_ctrl & FLOW_CTRL_TX) - bnx2x_bits_en(bp, emac_base + EMAC_REG_EMAC_TX_MODE, - EMAC_TX_MODE_EXT_PAUSE_EN); - } - - /* KEEP_VLAN_TAG, promiscuous */ - val = REG_RD(bp, emac_base + EMAC_REG_EMAC_RX_MODE); - val |= EMAC_RX_MODE_KEEP_VLAN_TAG | EMAC_RX_MODE_PROMISCUOUS; - EMAC_WR(EMAC_REG_EMAC_RX_MODE, val); - - /* identify magic packets */ - val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); - EMAC_WR(EMAC_REG_EMAC_MODE, (val | EMAC_MODE_MPKT)); - - /* enable emac for jumbo packets */ - EMAC_WR(EMAC_REG_EMAC_RX_MTU_SIZE, - (EMAC_RX_MTU_SIZE_JUMBO_ENA | - (ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD))); /* -VLAN */ - - /* strip CRC */ - NIG_WR(NIG_REG_NIG_INGRESS_EMAC0_NO_CRC + port*4, 0x1); - - val = ((bp->dev->dev_addr[0] << 8) | - bp->dev->dev_addr[1]); - EMAC_WR(EMAC_REG_EMAC_MAC_MATCH, val); - - val = ((bp->dev->dev_addr[2] << 24) | - (bp->dev->dev_addr[3] << 16) | - (bp->dev->dev_addr[4] << 8) | - bp->dev->dev_addr[5]); - EMAC_WR(EMAC_REG_EMAC_MAC_MATCH + 4, val); - - /* disable the NIG in/out to the bmac */ - NIG_WR(NIG_REG_BMAC0_IN_EN + port*4, 0x0); - NIG_WR(NIG_REG_BMAC0_PAUSE_OUT_EN + port*4, 0x0); - NIG_WR(NIG_REG_BMAC0_OUT_EN + port*4, 0x0); - - /* enable the NIG in/out to the emac */ - NIG_WR(NIG_REG_EMAC0_IN_EN + port*4, 0x1); - val = 0; - if (bp->flow_ctrl & FLOW_CTRL_TX) - val = 1; - NIG_WR(NIG_REG_EMAC0_PAUSE_OUT_EN + port*4, val); - NIG_WR(NIG_REG_EGRESS_EMAC0_OUT_EN + port*4, 0x1); - - if (CHIP_REV(bp) == CHIP_REV_FPGA) { - /* take the BigMac out of reset */ - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, - (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); - - /* enable access for bmac registers */ - NIG_WR(NIG_REG_BMAC0_REGS_OUT_EN + port*4, 0x1); - } - - bp->phy_flags |= PHY_EMAC_FLAG; - - bp->stats_state = STATS_STATE_ENABLE; -} - -static void bnx2x_emac_program(struct bnx2x *bp) -{ - u16 mode = 0; - int port = bp->port; - - DP(NETIF_MSG_LINK, "setting link speed & duplex\n"); - bnx2x_bits_dis(bp, GRCBASE_EMAC0 + port*0x400 + EMAC_REG_EMAC_MODE, - (EMAC_MODE_25G_MODE | - EMAC_MODE_PORT_MII_10M | - EMAC_MODE_HALF_DUPLEX)); - switch (bp->line_speed) { - case SPEED_10: - mode |= EMAC_MODE_PORT_MII_10M; - break; - - case SPEED_100: - mode |= EMAC_MODE_PORT_MII; - break; - - case SPEED_1000: - mode |= EMAC_MODE_PORT_GMII; - break; - - case SPEED_2500: - mode |= (EMAC_MODE_25G_MODE | EMAC_MODE_PORT_GMII); - break; - - default: - /* 10G not valid for EMAC */ - BNX2X_ERR("Invalid line_speed 0x%x\n", bp->line_speed); - break; - } - - if (bp->duplex == DUPLEX_HALF) - mode |= EMAC_MODE_HALF_DUPLEX; - bnx2x_bits_en(bp, GRCBASE_EMAC0 + port*0x400 + EMAC_REG_EMAC_MODE, - mode); - - bnx2x_leds_set(bp, bp->line_speed); -} - -static void bnx2x_set_sgmii_tx_driver(struct bnx2x *bp) -{ - u32 lp_up2; - u32 tx_driver; - - /* read precomp */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_OVER_1G); - bnx2x_mdio22_read(bp, MDIO_OVER_1G_LP_UP2, &lp_up2); - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_TX0); - bnx2x_mdio22_read(bp, MDIO_TX0_TX_DRIVER, &tx_driver); - - /* bits [10:7] at lp_up2, positioned at [15:12] */ - lp_up2 = (((lp_up2 & MDIO_OVER_1G_LP_UP2_PREEMPHASIS_MASK) >> - MDIO_OVER_1G_LP_UP2_PREEMPHASIS_SHIFT) << - MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT); - - if ((lp_up2 != 0) && - (lp_up2 != (tx_driver & MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK))) { - /* replace tx_driver bits [15:12] */ - tx_driver &= ~MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK; - tx_driver |= lp_up2; - bnx2x_mdio22_write(bp, MDIO_TX0_TX_DRIVER, tx_driver); - } -} - -static void bnx2x_pbf_update(struct bnx2x *bp) -{ - int port = bp->port; - u32 init_crd, crd; - u32 count = 1000; - u32 pause = 0; - - /* disable port */ - REG_WR(bp, PBF_REG_DISABLE_NEW_TASK_PROC_P0 + port*4, 0x1); - - /* wait for init credit */ - init_crd = REG_RD(bp, PBF_REG_P0_INIT_CRD + port*4); - crd = REG_RD(bp, PBF_REG_P0_CREDIT + port*8); - DP(NETIF_MSG_LINK, "init_crd 0x%x crd 0x%x\n", init_crd, crd); - - while ((init_crd != crd) && count) { - msleep(5); - - crd = REG_RD(bp, PBF_REG_P0_CREDIT + port*8); - count--; - } - crd = REG_RD(bp, PBF_REG_P0_CREDIT + port*8); - if (init_crd != crd) - BNX2X_ERR("BUG! init_crd 0x%x != crd 0x%x\n", init_crd, crd); - - if (bp->flow_ctrl & FLOW_CTRL_RX) - pause = 1; - REG_WR(bp, PBF_REG_P0_PAUSE_ENABLE + port*4, pause); - if (pause) { - /* update threshold */ - REG_WR(bp, PBF_REG_P0_ARB_THRSH + port*4, 0); - /* update init credit */ - init_crd = 778; /* (800-18-4) */ - - } else { - u32 thresh = (ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD)/16; - - /* update threshold */ - REG_WR(bp, PBF_REG_P0_ARB_THRSH + port*4, thresh); - /* update init credit */ - switch (bp->line_speed) { - case SPEED_10: - case SPEED_100: - case SPEED_1000: - init_crd = thresh + 55 - 22; - break; - - case SPEED_2500: - init_crd = thresh + 138 - 22; - break; - - case SPEED_10000: - init_crd = thresh + 553 - 22; - break; - - default: - BNX2X_ERR("Invalid line_speed 0x%x\n", - bp->line_speed); - break; - } - } - REG_WR(bp, PBF_REG_P0_INIT_CRD + port*4, init_crd); - DP(NETIF_MSG_LINK, "PBF updated to speed %d credit %d\n", - bp->line_speed, init_crd); - - /* probe the credit changes */ - REG_WR(bp, PBF_REG_INIT_P0 + port*4, 0x1); - msleep(5); - REG_WR(bp, PBF_REG_INIT_P0 + port*4, 0x0); - - /* enable port */ - REG_WR(bp, PBF_REG_DISABLE_NEW_TASK_PROC_P0 + port*4, 0x0); -} - -static void bnx2x_update_mng(struct bnx2x *bp) -{ - if (!nomcp) - SHMEM_WR(bp, port_mb[bp->port].link_status, - bp->link_status); -} - -static void bnx2x_link_report(struct bnx2x *bp) -{ - if (bp->link_up) { - netif_carrier_on(bp->dev); - printk(KERN_INFO PFX "%s NIC Link is Up, ", bp->dev->name); - - printk("%d Mbps ", bp->line_speed); - - if (bp->duplex == DUPLEX_FULL) - printk("full duplex"); - else - printk("half duplex"); - - if (bp->flow_ctrl) { - if (bp->flow_ctrl & FLOW_CTRL_RX) { - printk(", receive "); - if (bp->flow_ctrl & FLOW_CTRL_TX) - printk("& transmit "); - } else { - printk(", transmit "); - } - printk("flow control ON"); - } - printk("\n"); - - } else { /* link_down */ - netif_carrier_off(bp->dev); - printk(KERN_INFO PFX "%s NIC Link is Down\n", bp->dev->name); - } -} - -static void bnx2x_link_up(struct bnx2x *bp) -{ - int port = bp->port; - - /* PBF - link up */ - bnx2x_pbf_update(bp); - - /* disable drain */ - NIG_WR(NIG_REG_EGRESS_DRAIN0_MODE + port*4, 0); - - /* update shared memory */ - bnx2x_update_mng(bp); - - /* indicate link up */ - bnx2x_link_report(bp); -} - -static void bnx2x_link_down(struct bnx2x *bp) -{ - int port = bp->port; - - /* notify stats */ - if (bp->stats_state != STATS_STATE_DISABLE) { - bp->stats_state = STATS_STATE_STOP; - DP(BNX2X_MSG_STATS, "stats_state - STOP\n"); - } - - /* indicate no mac active */ - bp->phy_flags &= ~(PHY_BMAC_FLAG | PHY_EMAC_FLAG); - - /* update shared memory */ - bnx2x_update_mng(bp); - - /* activate nig drain */ - NIG_WR(NIG_REG_EGRESS_DRAIN0_MODE + port*4, 1); - - /* reset BigMac */ - bnx2x_bmac_rx_disable(bp); - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, - (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); - - /* indicate link down */ - bnx2x_link_report(bp); -} - -static void bnx2x_init_mac_stats(struct bnx2x *bp); - -/* This function is called upon link interrupt */ -static void bnx2x_link_update(struct bnx2x *bp) -{ - int port = bp->port; - int i; - u32 gp_status; - int link_10g; - - DP(NETIF_MSG_LINK, "port %x, %s, int_status 0x%x," - " int_mask 0x%x, saved_mask 0x%x, MI_INT %x, SERDES_LINK %x," - " 10G %x, XGXS_LINK %x\n", port, - (bp->phy_flags & PHY_XGXS_FLAG)? "XGXS":"SerDes", - REG_RD(bp, NIG_REG_STATUS_INTERRUPT_PORT0 + port*4), - REG_RD(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4), bp->nig_mask, - REG_RD(bp, NIG_REG_EMAC0_STATUS_MISC_MI_INT + port*0x18), - REG_RD(bp, NIG_REG_SERDES0_STATUS_LINK_STATUS + port*0x3c), - REG_RD(bp, NIG_REG_XGXS0_STATUS_LINK10G + port*0x68), - REG_RD(bp, NIG_REG_XGXS0_STATUS_LINK_STATUS + port*0x68) - ); - - might_sleep(); - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_GP_STATUS); - /* avoid fast toggling */ - for (i = 0; i < 10; i++) { - msleep(10); - bnx2x_mdio22_read(bp, MDIO_GP_STATUS_TOP_AN_STATUS1, - &gp_status); - } - - bnx2x_link_settings_status(bp, gp_status); - - /* anything 10 and over uses the bmac */ - link_10g = ((bp->line_speed >= SPEED_10000) && - (bp->line_speed <= SPEED_16000)); - - bnx2x_link_int_ack(bp, link_10g); - - /* link is up only if both local phy and external phy are up */ - bp->link_up = (bp->phy_link_up && bnx2x_ext_phy_is_link_up(bp)); - if (bp->link_up) { - if (link_10g) { - bnx2x_bmac_enable(bp, 0); - bnx2x_leds_set(bp, SPEED_10000); - - } else { - bnx2x_emac_enable(bp); - bnx2x_emac_program(bp); - - /* AN complete? */ - if (gp_status & MDIO_AN_CL73_OR_37_COMPLETE) { - if (!(bp->phy_flags & PHY_SGMII_FLAG)) - bnx2x_set_sgmii_tx_driver(bp); - } - } - bnx2x_link_up(bp); - - } else { /* link down */ - bnx2x_leds_unset(bp); - bnx2x_link_down(bp); - } - - bnx2x_init_mac_stats(bp); -} - -/* - * Init service functions - */ - -static void bnx2x_set_aer_mmd(struct bnx2x *bp) -{ - u16 offset = (bp->phy_flags & PHY_XGXS_FLAG) ? - (bp->phy_addr + bp->ser_lane) : 0; - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_AER_BLOCK); - bnx2x_mdio22_write(bp, MDIO_AER_BLOCK_AER_REG, 0x3800 + offset); -} - -static void bnx2x_set_master_ln(struct bnx2x *bp) -{ - u32 new_master_ln; - - /* set the master_ln for AN */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_XGXS_BLOCK2); - bnx2x_mdio22_read(bp, MDIO_XGXS_BLOCK2_TEST_MODE_LANE, - &new_master_ln); - bnx2x_mdio22_write(bp, MDIO_XGXS_BLOCK2_TEST_MODE_LANE, - (new_master_ln | bp->ser_lane)); -} - -static void bnx2x_reset_unicore(struct bnx2x *bp) -{ - u32 mii_control; - int i; - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_COMBO_IEEE0); - bnx2x_mdio22_read(bp, MDIO_COMBO_IEEE0_MII_CONTROL, &mii_control); - /* reset the unicore */ - bnx2x_mdio22_write(bp, MDIO_COMBO_IEEE0_MII_CONTROL, - (mii_control | MDIO_COMBO_IEEO_MII_CONTROL_RESET)); - - /* wait for the reset to self clear */ - for (i = 0; i < MDIO_ACCESS_TIMEOUT; i++) { - udelay(5); - - /* the reset erased the previous bank value */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_COMBO_IEEE0); - bnx2x_mdio22_read(bp, MDIO_COMBO_IEEE0_MII_CONTROL, - &mii_control); - - if (!(mii_control & MDIO_COMBO_IEEO_MII_CONTROL_RESET)) { - udelay(5); - return; - } - } - - BNX2X_ERR("BUG! %s (0x%x) is still in reset!\n", - (bp->phy_flags & PHY_XGXS_FLAG)? "XGXS":"SerDes", - bp->phy_addr); -} - -static void bnx2x_set_swap_lanes(struct bnx2x *bp) -{ - /* Each two bits represents a lane number: - No swap is 0123 => 0x1b no need to enable the swap */ - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_XGXS_BLOCK2); - if (bp->rx_lane_swap != 0x1b) { - bnx2x_mdio22_write(bp, MDIO_XGXS_BLOCK2_RX_LN_SWAP, - (bp->rx_lane_swap | - MDIO_XGXS_BLOCK2_RX_LN_SWAP_ENABLE | - MDIO_XGXS_BLOCK2_RX_LN_SWAP_FORCE_ENABLE)); - } else { - bnx2x_mdio22_write(bp, MDIO_XGXS_BLOCK2_RX_LN_SWAP, 0); - } - - if (bp->tx_lane_swap != 0x1b) { - bnx2x_mdio22_write(bp, MDIO_XGXS_BLOCK2_TX_LN_SWAP, - (bp->tx_lane_swap | - MDIO_XGXS_BLOCK2_TX_LN_SWAP_ENABLE)); - } else { - bnx2x_mdio22_write(bp, MDIO_XGXS_BLOCK2_TX_LN_SWAP, 0); - } -} - -static void bnx2x_set_parallel_detection(struct bnx2x *bp) -{ - u32 control2; - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_SERDES_DIGITAL); - bnx2x_mdio22_read(bp, MDIO_SERDES_DIGITAL_A_1000X_CONTROL2, - &control2); - - if (bp->autoneg & AUTONEG_PARALLEL) { - control2 |= MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN; - } else { - control2 &= ~MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN; - } - bnx2x_mdio22_write(bp, MDIO_SERDES_DIGITAL_A_1000X_CONTROL2, - control2); - - if (bp->phy_flags & PHY_XGXS_FLAG) { - DP(NETIF_MSG_LINK, "XGXS\n"); - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_10G_PARALLEL_DETECT); - - bnx2x_mdio22_write(bp, - MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK, - MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK_CNT); - - bnx2x_mdio22_read(bp, - MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL, - &control2); - - if (bp->autoneg & AUTONEG_PARALLEL) { - control2 |= - MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL_PARDET10G_EN; - } else { - control2 &= - ~MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL_PARDET10G_EN; - } - bnx2x_mdio22_write(bp, - MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL, - control2); - - /* Disable parallel detection of HiG */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_XGXS_BLOCK2); - bnx2x_mdio22_write(bp, MDIO_XGXS_BLOCK2_UNICORE_MODE_10G, - MDIO_XGXS_BLOCK2_UNICORE_MODE_10G_CX4_XGXS | - MDIO_XGXS_BLOCK2_UNICORE_MODE_10G_HIGIG_XGXS); - } -} - -static void bnx2x_set_autoneg(struct bnx2x *bp) -{ - u32 reg_val; - - /* CL37 Autoneg */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_COMBO_IEEE0); - bnx2x_mdio22_read(bp, MDIO_COMBO_IEEE0_MII_CONTROL, ®_val); - if ((bp->req_autoneg & AUTONEG_SPEED) && - (bp->autoneg & AUTONEG_CL37)) { - /* CL37 Autoneg Enabled */ - reg_val |= MDIO_COMBO_IEEO_MII_CONTROL_AN_EN; - } else { - /* CL37 Autoneg Disabled */ - reg_val &= ~(MDIO_COMBO_IEEO_MII_CONTROL_AN_EN | - MDIO_COMBO_IEEO_MII_CONTROL_RESTART_AN); - } - bnx2x_mdio22_write(bp, MDIO_COMBO_IEEE0_MII_CONTROL, reg_val); - - /* Enable/Disable Autodetection */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_SERDES_DIGITAL); - bnx2x_mdio22_read(bp, MDIO_SERDES_DIGITAL_A_1000X_CONTROL1, ®_val); - reg_val &= ~MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_SIGNAL_DETECT_EN; - - if ((bp->req_autoneg & AUTONEG_SPEED) && - (bp->autoneg & AUTONEG_SGMII_FIBER_AUTODET)) { - reg_val |= MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET; - } else { - reg_val &= ~MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET; - } - bnx2x_mdio22_write(bp, MDIO_SERDES_DIGITAL_A_1000X_CONTROL1, reg_val); - - /* Enable TetonII and BAM autoneg */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_BAM_NEXT_PAGE); - bnx2x_mdio22_read(bp, MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL, - ®_val); - if ((bp->req_autoneg & AUTONEG_SPEED) && - (bp->autoneg & AUTONEG_CL37) && (bp->autoneg & AUTONEG_BAM)) { - /* Enable BAM aneg Mode and TetonII aneg Mode */ - reg_val |= (MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_BAM_MODE | - MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_TETON_AN); - } else { - /* TetonII and BAM Autoneg Disabled */ - reg_val &= ~(MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_BAM_MODE | - MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_TETON_AN); - } - bnx2x_mdio22_write(bp, MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL, - reg_val); - - /* Enable Clause 73 Aneg */ - if ((bp->req_autoneg & AUTONEG_SPEED) && - (bp->autoneg & AUTONEG_CL73)) { - /* Enable BAM Station Manager */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_CL73_USERB0); - bnx2x_mdio22_write(bp, MDIO_CL73_USERB0_CL73_BAM_CTRL1, - (MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_EN | - MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_STATION_MNGR_EN | - MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_NP_AFTER_BP_EN)); - - /* Merge CL73 and CL37 aneg resolution */ - bnx2x_mdio22_read(bp, MDIO_CL73_USERB0_CL73_BAM_CTRL3, - ®_val); - bnx2x_mdio22_write(bp, MDIO_CL73_USERB0_CL73_BAM_CTRL3, - (reg_val | - MDIO_CL73_USERB0_CL73_BAM_CTRL3_USE_CL73_HCD_MR)); - - /* Set the CL73 AN speed */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_CL73_IEEEB1); - bnx2x_mdio22_read(bp, MDIO_CL73_IEEEB1_AN_ADV2, ®_val); - /* In the SerDes we support only the 1G. - In the XGXS we support the 10G KX4 - but we currently do not support the KR */ - if (bp->phy_flags & PHY_XGXS_FLAG) { - DP(NETIF_MSG_LINK, "XGXS\n"); - /* 10G KX4 */ - reg_val |= MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KX4; - } else { - DP(NETIF_MSG_LINK, "SerDes\n"); - /* 1000M KX */ - reg_val |= MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M_KX; - } - bnx2x_mdio22_write(bp, MDIO_CL73_IEEEB1_AN_ADV2, reg_val); - - /* CL73 Autoneg Enabled */ - reg_val = MDIO_CL73_IEEEB0_CL73_AN_CONTROL_AN_EN; - } else { - /* CL73 Autoneg Disabled */ - reg_val = 0; - } - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_CL73_IEEEB0); - bnx2x_mdio22_write(bp, MDIO_CL73_IEEEB0_CL73_AN_CONTROL, reg_val); -} - -/* program SerDes, forced speed */ -static void bnx2x_program_serdes(struct bnx2x *bp) -{ - u32 reg_val; - - /* program duplex, disable autoneg */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_COMBO_IEEE0); - bnx2x_mdio22_read(bp, MDIO_COMBO_IEEE0_MII_CONTROL, ®_val); - reg_val &= ~(MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX | - MDIO_COMBO_IEEO_MII_CONTROL_AN_EN); - if (bp->req_duplex == DUPLEX_FULL) - reg_val |= MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX; - bnx2x_mdio22_write(bp, MDIO_COMBO_IEEE0_MII_CONTROL, reg_val); - - /* program speed - - needed only if the speed is greater than 1G (2.5G or 10G) */ - if (bp->req_line_speed > SPEED_1000) { - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_SERDES_DIGITAL); - bnx2x_mdio22_read(bp, MDIO_SERDES_DIGITAL_MISC1, ®_val); - /* clearing the speed value before setting the right speed */ - reg_val &= ~MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_MASK; - reg_val |= (MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_156_25M | - MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_SEL); - if (bp->req_line_speed == SPEED_10000) - reg_val |= - MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_10G_CX4; - bnx2x_mdio22_write(bp, MDIO_SERDES_DIGITAL_MISC1, reg_val); - } -} - -static void bnx2x_set_brcm_cl37_advertisment(struct bnx2x *bp) -{ - u32 val = 0; - - /* configure the 48 bits for BAM AN */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_OVER_1G); - - /* set extended capabilities */ - if (bp->advertising & ADVERTISED_2500baseX_Full) - val |= MDIO_OVER_1G_UP1_2_5G; - if (bp->advertising & ADVERTISED_10000baseT_Full) - val |= MDIO_OVER_1G_UP1_10G; - bnx2x_mdio22_write(bp, MDIO_OVER_1G_UP1, val); - - bnx2x_mdio22_write(bp, MDIO_OVER_1G_UP3, 0); -} - -static void bnx2x_set_ieee_aneg_advertisment(struct bnx2x *bp) -{ - u32 an_adv; - - /* for AN, we are always publishing full duplex */ - an_adv = MDIO_COMBO_IEEE0_AUTO_NEG_ADV_FULL_DUPLEX; - - /* resolve pause mode and advertisement - * Please refer to Table 28B-3 of the 802.3ab-1999 spec */ - if (bp->req_autoneg & AUTONEG_FLOW_CTRL) { - switch (bp->req_flow_ctrl) { - case FLOW_CTRL_AUTO: - if (bp->dev->mtu <= 4500) { - an_adv |= - MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH; - bp->advertising |= (ADVERTISED_Pause | - ADVERTISED_Asym_Pause); - } else { - an_adv |= - MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC; - bp->advertising |= ADVERTISED_Asym_Pause; - } - break; - - case FLOW_CTRL_TX: - an_adv |= - MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC; - bp->advertising |= ADVERTISED_Asym_Pause; - break; - - case FLOW_CTRL_RX: - if (bp->dev->mtu <= 4500) { - an_adv |= - MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH; - bp->advertising |= (ADVERTISED_Pause | - ADVERTISED_Asym_Pause); - } else { - an_adv |= - MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE; - bp->advertising &= ~(ADVERTISED_Pause | - ADVERTISED_Asym_Pause); - } - break; - - case FLOW_CTRL_BOTH: - if (bp->dev->mtu <= 4500) { - an_adv |= - MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH; - bp->advertising |= (ADVERTISED_Pause | - ADVERTISED_Asym_Pause); - } else { - an_adv |= - MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC; - bp->advertising |= ADVERTISED_Asym_Pause; - } - break; - - case FLOW_CTRL_NONE: - default: - an_adv |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE; - bp->advertising &= ~(ADVERTISED_Pause | - ADVERTISED_Asym_Pause); - break; - } - } else { /* forced mode */ - switch (bp->req_flow_ctrl) { - case FLOW_CTRL_AUTO: - DP(NETIF_MSG_LINK, "req_flow_ctrl 0x%x while" - " req_autoneg 0x%x\n", - bp->req_flow_ctrl, bp->req_autoneg); - break; - - case FLOW_CTRL_TX: - an_adv |= - MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC; - bp->advertising |= ADVERTISED_Asym_Pause; - break; - - case FLOW_CTRL_RX: - case FLOW_CTRL_BOTH: - an_adv |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH; - bp->advertising |= (ADVERTISED_Pause | - ADVERTISED_Asym_Pause); - break; - - case FLOW_CTRL_NONE: - default: - an_adv |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE; - bp->advertising &= ~(ADVERTISED_Pause | - ADVERTISED_Asym_Pause); - break; - } - } - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_COMBO_IEEE0); - bnx2x_mdio22_write(bp, MDIO_COMBO_IEEE0_AUTO_NEG_ADV, an_adv); -} - -static void bnx2x_restart_autoneg(struct bnx2x *bp) -{ - if (bp->autoneg & AUTONEG_CL73) { - /* enable and restart clause 73 aneg */ - u32 an_ctrl; - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_CL73_IEEEB0); - bnx2x_mdio22_read(bp, MDIO_CL73_IEEEB0_CL73_AN_CONTROL, - &an_ctrl); - bnx2x_mdio22_write(bp, MDIO_CL73_IEEEB0_CL73_AN_CONTROL, - (an_ctrl | - MDIO_CL73_IEEEB0_CL73_AN_CONTROL_AN_EN | - MDIO_CL73_IEEEB0_CL73_AN_CONTROL_RESTART_AN)); - - } else { - /* Enable and restart BAM/CL37 aneg */ - u32 mii_control; - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_COMBO_IEEE0); - bnx2x_mdio22_read(bp, MDIO_COMBO_IEEE0_MII_CONTROL, - &mii_control); - bnx2x_mdio22_write(bp, MDIO_COMBO_IEEE0_MII_CONTROL, - (mii_control | - MDIO_COMBO_IEEO_MII_CONTROL_AN_EN | - MDIO_COMBO_IEEO_MII_CONTROL_RESTART_AN)); - } -} - -static void bnx2x_initialize_sgmii_process(struct bnx2x *bp) -{ - u32 control1; - - /* in SGMII mode, the unicore is always slave */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_SERDES_DIGITAL); - bnx2x_mdio22_read(bp, MDIO_SERDES_DIGITAL_A_1000X_CONTROL1, - &control1); - control1 |= MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_INVERT_SIGNAL_DETECT; - /* set sgmii mode (and not fiber) */ - control1 &= ~(MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_FIBER_MODE | - MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET | - MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_MSTR_MODE); - bnx2x_mdio22_write(bp, MDIO_SERDES_DIGITAL_A_1000X_CONTROL1, - control1); - - /* if forced speed */ - if (!(bp->req_autoneg & AUTONEG_SPEED)) { - /* set speed, disable autoneg */ - u32 mii_control; - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_COMBO_IEEE0); - bnx2x_mdio22_read(bp, MDIO_COMBO_IEEE0_MII_CONTROL, - &mii_control); - mii_control &= ~(MDIO_COMBO_IEEO_MII_CONTROL_AN_EN | - MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_MASK | - MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX); - - switch (bp->req_line_speed) { - case SPEED_100: - mii_control |= - MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_100; - break; - case SPEED_1000: - mii_control |= - MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_1000; - break; - case SPEED_10: - /* there is nothing to set for 10M */ - break; - default: - /* invalid speed for SGMII */ - DP(NETIF_MSG_LINK, "Invalid req_line_speed 0x%x\n", - bp->req_line_speed); - break; - } - - /* setting the full duplex */ - if (bp->req_duplex == DUPLEX_FULL) - mii_control |= - MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX; - bnx2x_mdio22_write(bp, MDIO_COMBO_IEEE0_MII_CONTROL, - mii_control); - - } else { /* AN mode */ - /* enable and restart AN */ - bnx2x_restart_autoneg(bp); - } -} - -static void bnx2x_link_int_enable(struct bnx2x *bp) -{ - int port = bp->port; - u32 ext_phy_type; - u32 mask; - - /* setting the status to report on link up - for either XGXS or SerDes */ - bnx2x_bits_dis(bp, NIG_REG_STATUS_INTERRUPT_PORT0 + port*4, - (NIG_STATUS_XGXS0_LINK10G | - NIG_STATUS_XGXS0_LINK_STATUS | - NIG_STATUS_SERDES0_LINK_STATUS)); - - if (bp->phy_flags & PHY_XGXS_FLAG) { - mask = (NIG_MASK_XGXS0_LINK10G | - NIG_MASK_XGXS0_LINK_STATUS); - DP(NETIF_MSG_LINK, "enabled XGXS interrupt\n"); - ext_phy_type = XGXS_EXT_PHY_TYPE(bp); - if ((ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) && - (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE) && - (ext_phy_type != - PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN)) { - mask |= NIG_MASK_MI_INT; - DP(NETIF_MSG_LINK, "enabled external phy int\n"); - } - - } else { /* SerDes */ - mask = NIG_MASK_SERDES0_LINK_STATUS; - DP(NETIF_MSG_LINK, "enabled SerDes interrupt\n"); - ext_phy_type = SERDES_EXT_PHY_TYPE(bp); - if ((ext_phy_type != - PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT) && - (ext_phy_type != - PORT_HW_CFG_SERDES_EXT_PHY_TYPE_NOT_CONN)) { - mask |= NIG_MASK_MI_INT; - DP(NETIF_MSG_LINK, "enabled external phy int\n"); - } - } - bnx2x_bits_en(bp, - NIG_REG_MASK_INTERRUPT_PORT0 + port*4, - mask); - DP(NETIF_MSG_LINK, "port %x, %s, int_status 0x%x," - " int_mask 0x%x, MI_INT %x, SERDES_LINK %x," - " 10G %x, XGXS_LINK %x\n", port, - (bp->phy_flags & PHY_XGXS_FLAG)? "XGXS":"SerDes", - REG_RD(bp, NIG_REG_STATUS_INTERRUPT_PORT0 + port*4), - REG_RD(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4), - REG_RD(bp, NIG_REG_EMAC0_STATUS_MISC_MI_INT + port*0x18), - REG_RD(bp, NIG_REG_SERDES0_STATUS_LINK_STATUS + port*0x3c), - REG_RD(bp, NIG_REG_XGXS0_STATUS_LINK10G + port*0x68), - REG_RD(bp, NIG_REG_XGXS0_STATUS_LINK_STATUS + port*0x68) - ); -} - -static void bnx2x_bcm8072_external_rom_boot(struct bnx2x *bp) -{ - u32 ext_phy_addr = ((bp->ext_phy_config & - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); - u32 fw_ver1, fw_ver2; - - /* Need to wait 200ms after reset */ - msleep(200); - /* Boot port from external ROM - * Set ser_boot_ctl bit in the MISC_CTRL1 register - */ - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, - EXT_PHY_KR_MISC_CTRL1, 0x0001); - - /* Reset internal microprocessor */ - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, EXT_PHY_KR_GEN_CTRL, - EXT_PHY_KR_ROM_RESET_INTERNAL_MP); - /* set micro reset = 0 */ - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, EXT_PHY_KR_GEN_CTRL, - EXT_PHY_KR_ROM_MICRO_RESET); - /* Reset internal microprocessor */ - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, EXT_PHY_KR_GEN_CTRL, - EXT_PHY_KR_ROM_RESET_INTERNAL_MP); - /* wait for 100ms for code download via SPI port */ - msleep(100); - - /* Clear ser_boot_ctl bit */ - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, - EXT_PHY_KR_MISC_CTRL1, 0x0000); - /* Wait 100ms */ - msleep(100); - - /* Print the PHY FW version */ - bnx2x_mdio45_ctrl_read(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, - 0xca19, &fw_ver1); - bnx2x_mdio45_ctrl_read(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, - 0xca1a, &fw_ver2); - DP(NETIF_MSG_LINK, - "8072 FW version 0x%x:0x%x\n", fw_ver1, fw_ver2); -} - -static void bnx2x_bcm8072_force_10G(struct bnx2x *bp) -{ - u32 ext_phy_addr = ((bp->ext_phy_config & - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); - - /* Force KR or KX */ - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, EXT_PHY_KR_CTRL, - 0x2040); - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, EXT_PHY_KR_CTRL2, - 0x000b); - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, EXT_PHY_KR_PMD_CTRL, - 0x0000); - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, EXT_PHY_KR_CTRL, - 0x0000); -} - -static void bnx2x_ext_phy_init(struct bnx2x *bp) -{ - u32 ext_phy_type; - u32 ext_phy_addr; - u32 cnt; - u32 ctrl; - u32 val = 0; - - if (bp->phy_flags & PHY_XGXS_FLAG) { - ext_phy_addr = ((bp->ext_phy_config & - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); - - ext_phy_type = XGXS_EXT_PHY_TYPE(bp); - /* Make sure that the soft reset is off (expect for the 8072: - * due to the lock, it will be done inside the specific - * handling) - */ - if ((ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) && - (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE) && - (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN) && - (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072)) { - /* Wait for soft reset to get cleared upto 1 sec */ - for (cnt = 0; cnt < 1000; cnt++) { - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_CNTL, &ctrl); - if (!(ctrl & (1<<15))) - break; - msleep(1); - } - DP(NETIF_MSG_LINK, - "control reg 0x%x (after %d ms)\n", ctrl, cnt); - } - - switch (ext_phy_type) { - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: - DP(NETIF_MSG_LINK, "XGXS Direct\n"); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: - DP(NETIF_MSG_LINK, "XGXS 8705\n"); - - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_PMD_MISC_CNTL, - 0x8288); - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_PHY_IDENTIFIER, - 0x7fbf); - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_CMU_PLL_BYPASS, - 0x0100); - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_WIS_DEVAD, - EXT_PHY_OPT_LASI_CNTL, 0x1); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: - DP(NETIF_MSG_LINK, "XGXS 8706\n"); - - if (!(bp->req_autoneg & AUTONEG_SPEED)) { - /* Force speed */ - if (bp->req_line_speed == SPEED_10000) { - DP(NETIF_MSG_LINK, - "XGXS 8706 force 10Gbps\n"); - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_PMD_DIGITAL_CNT, - 0x400); - } else { - /* Force 1Gbps */ - DP(NETIF_MSG_LINK, - "XGXS 8706 force 1Gbps\n"); - - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_CNTL, - 0x0040); - - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_CNTL2, - 0x000D); - } - - /* Enable LASI */ - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_LASI_CNTL, - 0x1); - } else { - /* AUTONEG */ - /* Allow CL37 through CL73 */ - DP(NETIF_MSG_LINK, "XGXS 8706 AutoNeg\n"); - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_AUTO_NEG_DEVAD, - EXT_PHY_OPT_AN_CL37_CL73, - 0x040c); - - /* Enable Full-Duplex advertisment on CL37 */ - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_AUTO_NEG_DEVAD, - EXT_PHY_OPT_AN_CL37_FD, - 0x0020); - /* Enable CL37 AN */ - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_AUTO_NEG_DEVAD, - EXT_PHY_OPT_AN_CL37_AN, - 0x1000); - /* Advertise 10G/1G support */ - if (bp->advertising & - ADVERTISED_1000baseT_Full) - val = (1<<5); - if (bp->advertising & - ADVERTISED_10000baseT_Full) - val |= (1<<7); - - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_AUTO_NEG_DEVAD, - EXT_PHY_OPT_AN_ADV, val); - /* Enable LASI */ - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_LASI_CNTL, - 0x1); - - /* Enable clause 73 AN */ - bnx2x_mdio45_write(bp, ext_phy_addr, - EXT_PHY_AUTO_NEG_DEVAD, - EXT_PHY_OPT_CNTL, - 0x1200); - } - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: - bnx2x_hw_lock(bp, HW_LOCK_RESOURCE_8072_MDIO); - /* Wait for soft reset to get cleared upto 1 sec */ - for (cnt = 0; cnt < 1000; cnt++) { - bnx2x_mdio45_ctrl_read(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_CNTL, &ctrl); - if (!(ctrl & (1<<15))) - break; - msleep(1); - } - DP(NETIF_MSG_LINK, - "8072 control reg 0x%x (after %d ms)\n", - ctrl, cnt); - - bnx2x_bcm8072_external_rom_boot(bp); - DP(NETIF_MSG_LINK, "Finshed loading 8072 KR ROM\n"); - - /* enable LASI */ - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, - 0x9000, 0x0400); - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, - EXT_PHY_KR_LASI_CNTL, 0x0004); - - /* If this is forced speed, set to KR or KX - * (all other are not supported) - */ - if (!(bp->req_autoneg & AUTONEG_SPEED)) { - if (bp->req_line_speed == SPEED_10000) { - bnx2x_bcm8072_force_10G(bp); - DP(NETIF_MSG_LINK, - "Forced speed 10G on 8072\n"); - /* unlock */ - bnx2x_hw_unlock(bp, - HW_LOCK_RESOURCE_8072_MDIO); - break; - } else - val = (1<<5); - } else { - - /* Advertise 10G/1G support */ - if (bp->advertising & - ADVERTISED_1000baseT_Full) - val = (1<<5); - if (bp->advertising & - ADVERTISED_10000baseT_Full) - val |= (1<<7); - } - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - 0x11, val); - /* Add support for CL37 ( passive mode ) I */ - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - 0x8370, 0x040c); - /* Add support for CL37 ( passive mode ) II */ - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - 0xffe4, 0x20); - /* Add support for CL37 ( passive mode ) III */ - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - 0xffe0, 0x1000); - /* Restart autoneg */ - msleep(500); - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - EXT_PHY_KR_CTRL, 0x1200); - DP(NETIF_MSG_LINK, "8072 Autoneg Restart: " - "1G %ssupported 10G %ssupported\n", - (val & (1<<5)) ? "" : "not ", - (val & (1<<7)) ? "" : "not "); - - /* unlock */ - bnx2x_hw_unlock(bp, HW_LOCK_RESOURCE_8072_MDIO); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: - DP(NETIF_MSG_LINK, - "Setting the SFX7101 LASI indication\n"); - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_LASI_CNTL, 0x1); - DP(NETIF_MSG_LINK, - "Setting the SFX7101 LED to blink on traffic\n"); - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - 0xC007, (1<<3)); - - /* read modify write pause advertizing */ - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - EXT_PHY_KR_AUTO_NEG_ADVERT, &val); - val &= ~EXT_PHY_KR_AUTO_NEG_ADVERT_PAUSE_BOTH; - /* Please refer to Table 28B-3 of 802.3ab-1999 spec. */ - if (bp->advertising & ADVERTISED_Pause) - val |= EXT_PHY_KR_AUTO_NEG_ADVERT_PAUSE; - - if (bp->advertising & ADVERTISED_Asym_Pause) { - val |= - EXT_PHY_KR_AUTO_NEG_ADVERT_PAUSE_ASYMMETRIC; - } - DP(NETIF_MSG_LINK, "SFX7101 AN advertize 0x%x\n", val); - bnx2x_mdio45_vwrite(bp, ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - EXT_PHY_KR_AUTO_NEG_ADVERT, val); - /* Restart autoneg */ - bnx2x_mdio45_read(bp, ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - EXT_PHY_KR_CTRL, &val); - val |= 0x200; - bnx2x_mdio45_write(bp, ext_phy_addr, - EXT_PHY_KR_AUTO_NEG_DEVAD, - EXT_PHY_KR_CTRL, val); - break; - - default: - BNX2X_ERR("BAD XGXS ext_phy_config 0x%x\n", - bp->ext_phy_config); - break; - } - - } else { /* SerDes */ -/* ext_phy_addr = ((bp->ext_phy_config & - PORT_HW_CFG_SERDES_EXT_PHY_ADDR_MASK) >> - PORT_HW_CFG_SERDES_EXT_PHY_ADDR_SHIFT); -*/ - ext_phy_type = SERDES_EXT_PHY_TYPE(bp); - switch (ext_phy_type) { - case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT: - DP(NETIF_MSG_LINK, "SerDes Direct\n"); - break; - - case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482: - DP(NETIF_MSG_LINK, "SerDes 5482\n"); - break; - - default: - DP(NETIF_MSG_LINK, "BAD SerDes ext_phy_config 0x%x\n", - bp->ext_phy_config); - break; - } - } -} - -static void bnx2x_ext_phy_reset(struct bnx2x *bp) -{ - u32 ext_phy_type; - u32 ext_phy_addr = ((bp->ext_phy_config & - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> - PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); - u32 board = (bp->board & SHARED_HW_CFG_BOARD_TYPE_MASK); - - /* The PHY reset is controled by GPIO 1 - * Give it 1ms of reset pulse - */ - if ((board != SHARED_HW_CFG_BOARD_TYPE_BCM957710T1002G) && - (board != SHARED_HW_CFG_BOARD_TYPE_BCM957710T1003G)) { - bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, - MISC_REGISTERS_GPIO_OUTPUT_LOW); - msleep(1); - bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, - MISC_REGISTERS_GPIO_OUTPUT_HIGH); - } - - if (bp->phy_flags & PHY_XGXS_FLAG) { - ext_phy_type = XGXS_EXT_PHY_TYPE(bp); - switch (ext_phy_type) { - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: - DP(NETIF_MSG_LINK, "XGXS Direct\n"); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: - DP(NETIF_MSG_LINK, "XGXS 8705/8706\n"); - bnx2x_mdio45_write(bp, ext_phy_addr, - EXT_PHY_OPT_PMA_PMD_DEVAD, - EXT_PHY_OPT_CNTL, 0xa040); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: - DP(NETIF_MSG_LINK, "XGXS 8072\n"); - bnx2x_hw_lock(bp, HW_LOCK_RESOURCE_8072_MDIO); - bnx2x_mdio45_ctrl_write(bp, GRCBASE_EMAC0, - ext_phy_addr, - EXT_PHY_KR_PMA_PMD_DEVAD, - 0, 1<<15); - bnx2x_hw_unlock(bp, HW_LOCK_RESOURCE_8072_MDIO); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: - DP(NETIF_MSG_LINK, "XGXS SFX7101\n"); - break; - - default: - DP(NETIF_MSG_LINK, "BAD XGXS ext_phy_config 0x%x\n", - bp->ext_phy_config); - break; - } - - } else { /* SerDes */ - ext_phy_type = SERDES_EXT_PHY_TYPE(bp); - switch (ext_phy_type) { - case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT: - DP(NETIF_MSG_LINK, "SerDes Direct\n"); - break; - - case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482: - DP(NETIF_MSG_LINK, "SerDes 5482\n"); - break; - - default: - DP(NETIF_MSG_LINK, "BAD SerDes ext_phy_config 0x%x\n", - bp->ext_phy_config); - break; - } - } -} - -static void bnx2x_link_initialize(struct bnx2x *bp) -{ - int port = bp->port; - - /* disable attentions */ - bnx2x_bits_dis(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, - (NIG_MASK_XGXS0_LINK_STATUS | - NIG_MASK_XGXS0_LINK10G | - NIG_MASK_SERDES0_LINK_STATUS | - NIG_MASK_MI_INT)); - - /* Activate the external PHY */ - bnx2x_ext_phy_reset(bp); - - bnx2x_set_aer_mmd(bp); - - if (bp->phy_flags & PHY_XGXS_FLAG) - bnx2x_set_master_ln(bp); - - /* reset the SerDes and wait for reset bit return low */ - bnx2x_reset_unicore(bp); - - bnx2x_set_aer_mmd(bp); - - /* setting the masterLn_def again after the reset */ - if (bp->phy_flags & PHY_XGXS_FLAG) { - bnx2x_set_master_ln(bp); - bnx2x_set_swap_lanes(bp); - } - - /* Set Parallel Detect */ - if (bp->req_autoneg & AUTONEG_SPEED) - bnx2x_set_parallel_detection(bp); - - if (bp->phy_flags & PHY_XGXS_FLAG) { - if (bp->req_line_speed && - bp->req_line_speed < SPEED_1000) { - bp->phy_flags |= PHY_SGMII_FLAG; - } else { - bp->phy_flags &= ~PHY_SGMII_FLAG; - } - } - - if (!(bp->phy_flags & PHY_SGMII_FLAG)) { - u16 bank, rx_eq; - - rx_eq = ((bp->serdes_config & - PORT_HW_CFG_SERDES_RX_DRV_EQUALIZER_MASK) >> - PORT_HW_CFG_SERDES_RX_DRV_EQUALIZER_SHIFT); - - DP(NETIF_MSG_LINK, "setting rx eq to %d\n", rx_eq); - for (bank = MDIO_REG_BANK_RX0; bank <= MDIO_REG_BANK_RX_ALL; - bank += (MDIO_REG_BANK_RX1 - MDIO_REG_BANK_RX0)) { - MDIO_SET_REG_BANK(bp, bank); - bnx2x_mdio22_write(bp, MDIO_RX0_RX_EQ_BOOST, - ((rx_eq & - MDIO_RX0_RX_EQ_BOOST_EQUALIZER_CTRL_MASK) | - MDIO_RX0_RX_EQ_BOOST_OFFSET_CTRL)); - } - - /* forced speed requested? */ - if (!(bp->req_autoneg & AUTONEG_SPEED)) { - DP(NETIF_MSG_LINK, "not SGMII, no AN\n"); - - /* disable autoneg */ - bnx2x_set_autoneg(bp); - - /* program speed and duplex */ - bnx2x_program_serdes(bp); - - } else { /* AN_mode */ - DP(NETIF_MSG_LINK, "not SGMII, AN\n"); - - /* AN enabled */ - bnx2x_set_brcm_cl37_advertisment(bp); - - /* program duplex & pause advertisement (for aneg) */ - bnx2x_set_ieee_aneg_advertisment(bp); - - /* enable autoneg */ - bnx2x_set_autoneg(bp); - - /* enable and restart AN */ - bnx2x_restart_autoneg(bp); - } - - } else { /* SGMII mode */ - DP(NETIF_MSG_LINK, "SGMII\n"); - - bnx2x_initialize_sgmii_process(bp); - } - - /* init ext phy and enable link state int */ - bnx2x_ext_phy_init(bp); - - /* enable the interrupt */ - bnx2x_link_int_enable(bp); -} - -static void bnx2x_phy_deassert(struct bnx2x *bp) -{ - int port = bp->port; - u32 val; - - if (bp->phy_flags & PHY_XGXS_FLAG) { - DP(NETIF_MSG_LINK, "XGXS\n"); - val = XGXS_RESET_BITS; - - } else { /* SerDes */ - DP(NETIF_MSG_LINK, "SerDes\n"); - val = SERDES_RESET_BITS; - } - - val = val << (port*16); - - /* reset and unreset the SerDes/XGXS */ - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_3_CLEAR, val); - msleep(5); - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_3_SET, val); -} - -static int bnx2x_phy_init(struct bnx2x *bp) -{ - DP(NETIF_MSG_LINK, "started\n"); - if (CHIP_REV(bp) == CHIP_REV_FPGA) { - bp->phy_flags |= PHY_EMAC_FLAG; - bp->link_up = 1; - bp->line_speed = SPEED_10000; - bp->duplex = DUPLEX_FULL; - NIG_WR(NIG_REG_EGRESS_DRAIN0_MODE + bp->port*4, 0); - bnx2x_emac_enable(bp); - bnx2x_link_report(bp); - return 0; - - } else if (CHIP_REV(bp) == CHIP_REV_EMUL) { - bp->phy_flags |= PHY_BMAC_FLAG; - bp->link_up = 1; - bp->line_speed = SPEED_10000; - bp->duplex = DUPLEX_FULL; - NIG_WR(NIG_REG_EGRESS_DRAIN0_MODE + bp->port*4, 0); - bnx2x_bmac_enable(bp, 0); - bnx2x_link_report(bp); - return 0; - - } else { - bnx2x_phy_deassert(bp); - bnx2x_link_initialize(bp); - } - - return 0; -} - -static void bnx2x_link_reset(struct bnx2x *bp) -{ - int port = bp->port; - u32 board = (bp->board & SHARED_HW_CFG_BOARD_TYPE_MASK); - - /* update shared memory */ - bp->link_status = 0; - bnx2x_update_mng(bp); - - /* disable attentions */ - bnx2x_bits_dis(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, - (NIG_MASK_XGXS0_LINK_STATUS | - NIG_MASK_XGXS0_LINK10G | - NIG_MASK_SERDES0_LINK_STATUS | - NIG_MASK_MI_INT)); - - /* activate nig drain */ - NIG_WR(NIG_REG_EGRESS_DRAIN0_MODE + port*4, 1); - - /* disable nig egress interface */ - NIG_WR(NIG_REG_BMAC0_OUT_EN + port*4, 0); - NIG_WR(NIG_REG_EGRESS_EMAC0_OUT_EN + port*4, 0); - - /* Stop BigMac rx */ - bnx2x_bmac_rx_disable(bp); - - /* disable emac */ - NIG_WR(NIG_REG_NIG_EMAC0_EN + port*4, 0); - - msleep(10); - - /* The PHY reset is controled by GPIO 1 - * Hold it as output low - */ - if ((board != SHARED_HW_CFG_BOARD_TYPE_BCM957710T1002G) && - (board != SHARED_HW_CFG_BOARD_TYPE_BCM957710T1003G)) { - bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, - MISC_REGISTERS_GPIO_OUTPUT_LOW); - DP(NETIF_MSG_LINK, "reset external PHY\n"); - } - - /* reset the SerDes/XGXS */ - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_3_CLEAR, - (0x1ff << (port*16))); - - /* reset BigMac */ - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, - (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); - - /* disable nig ingress interface */ - NIG_WR(NIG_REG_BMAC0_IN_EN + port*4, 0); - NIG_WR(NIG_REG_EMAC0_IN_EN + port*4, 0); - - /* set link down */ - bp->link_up = 0; -} - -#ifdef BNX2X_XGXS_LB -static void bnx2x_set_xgxs_loopback(struct bnx2x *bp, int is_10g) -{ - int port = bp->port; - - if (is_10g) { - u32 md_devad; - - DP(NETIF_MSG_LINK, "XGXS 10G loopback enable\n"); - - /* change the uni_phy_addr in the nig */ - REG_RD(bp, (NIG_REG_XGXS0_CTRL_MD_DEVAD + port*0x18), - &md_devad); - NIG_WR(NIG_REG_XGXS0_CTRL_MD_DEVAD + port*0x18, 0x5); - - /* change the aer mmd */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_AER_BLOCK); - bnx2x_mdio22_write(bp, MDIO_AER_BLOCK_AER_REG, 0x2800); - - /* config combo IEEE0 control reg for loopback */ - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_CL73_IEEEB0); - bnx2x_mdio22_write(bp, MDIO_CL73_IEEEB0_CL73_AN_CONTROL, - 0x6041); - - /* set aer mmd back */ - bnx2x_set_aer_mmd(bp); - - /* and md_devad */ - NIG_WR(NIG_REG_XGXS0_CTRL_MD_DEVAD + port*0x18, md_devad); - - } else { - u32 mii_control; - - DP(NETIF_MSG_LINK, "XGXS 1G loopback enable\n"); - - MDIO_SET_REG_BANK(bp, MDIO_REG_BANK_COMBO_IEEE0); - bnx2x_mdio22_read(bp, MDIO_COMBO_IEEE0_MII_CONTROL, - &mii_control); - bnx2x_mdio22_write(bp, MDIO_COMBO_IEEE0_MII_CONTROL, - (mii_control | - MDIO_COMBO_IEEO_MII_CONTROL_LOOPBACK)); - } -} -#endif - -/* end of PHY/MAC */ - -/* slow path */ - -/* - * General service functions - */ - -/* the slow path queue is odd since completions arrive on the fastpath ring */ -static int bnx2x_sp_post(struct bnx2x *bp, int command, int cid, - u32 data_hi, u32 data_lo, int common) -{ - int port = bp->port; - - DP(NETIF_MSG_TIMER, - "spe (%x:%x) command %d hw_cid %x data (%x:%x) left %x\n", - (u32)U64_HI(bp->spq_mapping), (u32)(U64_LO(bp->spq_mapping) + - (void *)bp->spq_prod_bd - (void *)bp->spq), command, - HW_CID(bp, cid), data_hi, data_lo, bp->spq_left); - -#ifdef BNX2X_STOP_ON_ERROR - if (unlikely(bp->panic)) - return -EIO; -#endif - - spin_lock(&bp->spq_lock); - - if (!bp->spq_left) { - BNX2X_ERR("BUG! SPQ ring full!\n"); - spin_unlock(&bp->spq_lock); - bnx2x_panic(); - return -EBUSY; - } - - /* CID needs port number to be encoded int it */ - bp->spq_prod_bd->hdr.conn_and_cmd_data = - cpu_to_le32(((command << SPE_HDR_CMD_ID_SHIFT) | - HW_CID(bp, cid))); - bp->spq_prod_bd->hdr.type = cpu_to_le16(ETH_CONNECTION_TYPE); - if (common) - bp->spq_prod_bd->hdr.type |= - cpu_to_le16((1 << SPE_HDR_COMMON_RAMROD_SHIFT)); - - bp->spq_prod_bd->data.mac_config_addr.hi = cpu_to_le32(data_hi); - bp->spq_prod_bd->data.mac_config_addr.lo = cpu_to_le32(data_lo); - - bp->spq_left--; - - if (bp->spq_prod_bd == bp->spq_last_bd) { - bp->spq_prod_bd = bp->spq; - bp->spq_prod_idx = 0; - DP(NETIF_MSG_TIMER, "end of spq\n"); - - } else { - bp->spq_prod_bd++; - bp->spq_prod_idx++; - } - - REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_SPQ_PROD_OFFSET(port), - bp->spq_prod_idx); - - spin_unlock(&bp->spq_lock); - return 0; -} - -/* acquire split MCP access lock register */ -static int bnx2x_lock_alr(struct bnx2x *bp) -{ - int rc = 0; - u32 i, j, val; - - might_sleep(); - i = 100; - for (j = 0; j < i*10; j++) { - val = (1UL << 31); - REG_WR(bp, GRCBASE_MCP + 0x9c, val); - val = REG_RD(bp, GRCBASE_MCP + 0x9c); - if (val & (1L << 31)) - break; - - msleep(5); - } - - if (!(val & (1L << 31))) { - BNX2X_ERR("Cannot acquire nvram interface\n"); - - rc = -EBUSY; - } - - return rc; -} - -/* Release split MCP access lock register */ -static void bnx2x_unlock_alr(struct bnx2x *bp) -{ - u32 val = 0; - - REG_WR(bp, GRCBASE_MCP + 0x9c, val); -} - -static inline u16 bnx2x_update_dsb_idx(struct bnx2x *bp) -{ - struct host_def_status_block *def_sb = bp->def_status_blk; - u16 rc = 0; - - barrier(); /* status block is written to by the chip */ - - if (bp->def_att_idx != def_sb->atten_status_block.attn_bits_index) { - bp->def_att_idx = def_sb->atten_status_block.attn_bits_index; - rc |= 1; - } - if (bp->def_c_idx != def_sb->c_def_status_block.status_block_index) { - bp->def_c_idx = def_sb->c_def_status_block.status_block_index; - rc |= 2; - } - if (bp->def_u_idx != def_sb->u_def_status_block.status_block_index) { - bp->def_u_idx = def_sb->u_def_status_block.status_block_index; - rc |= 4; - } - if (bp->def_x_idx != def_sb->x_def_status_block.status_block_index) { - bp->def_x_idx = def_sb->x_def_status_block.status_block_index; - rc |= 8; - } - if (bp->def_t_idx != def_sb->t_def_status_block.status_block_index) { - bp->def_t_idx = def_sb->t_def_status_block.status_block_index; - rc |= 16; - } - return rc; -} - -/* - * slow path service functions - */ - -static void bnx2x_attn_int_asserted(struct bnx2x *bp, u32 asserted) -{ - int port = bp->port; - u32 igu_addr = (IGU_ADDR_ATTN_BITS_SET + IGU_PORT_BASE * port) * 8; - u32 aeu_addr = port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 : - MISC_REG_AEU_MASK_ATTN_FUNC_0; - u32 nig_int_mask_addr = port ? NIG_REG_MASK_INTERRUPT_PORT1 : - NIG_REG_MASK_INTERRUPT_PORT0; - - if (~bp->aeu_mask & (asserted & 0xff)) - BNX2X_ERR("IGU ERROR\n"); - if (bp->attn_state & asserted) - BNX2X_ERR("IGU ERROR\n"); - - DP(NETIF_MSG_HW, "aeu_mask %x newly asserted %x\n", - bp->aeu_mask, asserted); - bp->aeu_mask &= ~(asserted & 0xff); - DP(NETIF_MSG_HW, "after masking: aeu_mask %x\n", bp->aeu_mask); - - REG_WR(bp, aeu_addr, bp->aeu_mask); - - bp->attn_state |= asserted; - - if (asserted & ATTN_HARD_WIRED_MASK) { - if (asserted & ATTN_NIG_FOR_FUNC) { - - /* save nig interrupt mask */ - bp->nig_mask = REG_RD(bp, nig_int_mask_addr); - REG_WR(bp, nig_int_mask_addr, 0); - - bnx2x_link_update(bp); - - /* handle unicore attn? */ - } - if (asserted & ATTN_SW_TIMER_4_FUNC) - DP(NETIF_MSG_HW, "ATTN_SW_TIMER_4_FUNC!\n"); - - if (asserted & GPIO_2_FUNC) - DP(NETIF_MSG_HW, "GPIO_2_FUNC!\n"); - - if (asserted & GPIO_3_FUNC) - DP(NETIF_MSG_HW, "GPIO_3_FUNC!\n"); - - if (asserted & GPIO_4_FUNC) - DP(NETIF_MSG_HW, "GPIO_4_FUNC!\n"); - - if (port == 0) { - if (asserted & ATTN_GENERAL_ATTN_1) { - DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_1!\n"); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_1, 0x0); - } - if (asserted & ATTN_GENERAL_ATTN_2) { - DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_2!\n"); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_2, 0x0); - } - if (asserted & ATTN_GENERAL_ATTN_3) { - DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_3!\n"); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_3, 0x0); - } - } else { - if (asserted & ATTN_GENERAL_ATTN_4) { - DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_4!\n"); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_4, 0x0); - } - if (asserted & ATTN_GENERAL_ATTN_5) { - DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_5!\n"); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_5, 0x0); - } - if (asserted & ATTN_GENERAL_ATTN_6) { - DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_6!\n"); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_6, 0x0); - } - } - - } /* if hardwired */ - - DP(NETIF_MSG_HW, "about to mask 0x%08x at IGU addr 0x%x\n", - asserted, BAR_IGU_INTMEM + igu_addr); - REG_WR(bp, BAR_IGU_INTMEM + igu_addr, asserted); - - /* now set back the mask */ - if (asserted & ATTN_NIG_FOR_FUNC) - REG_WR(bp, nig_int_mask_addr, bp->nig_mask); -} - -static inline void bnx2x_attn_int_deasserted0(struct bnx2x *bp, u32 attn) -{ - int port = bp->port; - int reg_offset; - u32 val; - - if (attn & AEU_INPUTS_ATTN_BITS_SPIO5) { - - reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 : - MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); - - val = REG_RD(bp, reg_offset); - val &= ~AEU_INPUTS_ATTN_BITS_SPIO5; - REG_WR(bp, reg_offset, val); - - BNX2X_ERR("SPIO5 hw attention\n"); - - switch (bp->board & SHARED_HW_CFG_BOARD_TYPE_MASK) { - case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1022G: - /* Fan failure attention */ - - /* The PHY reset is controled by GPIO 1 */ - bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, - MISC_REGISTERS_GPIO_OUTPUT_LOW); - /* Low power mode is controled by GPIO 2 */ - bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, - MISC_REGISTERS_GPIO_OUTPUT_LOW); - /* mark the failure */ - bp->ext_phy_config &= - ~PORT_HW_CFG_XGXS_EXT_PHY_TYPE_MASK; - bp->ext_phy_config |= - PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE; - SHMEM_WR(bp, - dev_info.port_hw_config[port]. - external_phy_config, - bp->ext_phy_config); - /* log the failure */ - printk(KERN_ERR PFX "Fan Failure on Network" - " Controller %s has caused the driver to" - " shutdown the card to prevent permanent" - " damage. Please contact Dell Support for" - " assistance\n", bp->dev->name); - break; - - default: - break; - } - } -} - -static inline void bnx2x_attn_int_deasserted1(struct bnx2x *bp, u32 attn) -{ - u32 val; - - if (attn & BNX2X_DOORQ_ASSERT) { - - val = REG_RD(bp, DORQ_REG_DORQ_INT_STS_CLR); - BNX2X_ERR("DB hw attention 0x%x\n", val); - /* DORQ discard attention */ - if (val & 0x2) - BNX2X_ERR("FATAL error from DORQ\n"); - } -} - -static inline void bnx2x_attn_int_deasserted2(struct bnx2x *bp, u32 attn) -{ - u32 val; - - if (attn & AEU_INPUTS_ATTN_BITS_CFC_HW_INTERRUPT) { - - val = REG_RD(bp, CFC_REG_CFC_INT_STS_CLR); - BNX2X_ERR("CFC hw attention 0x%x\n", val); - /* CFC error attention */ - if (val & 0x2) - BNX2X_ERR("FATAL error from CFC\n"); - } - - if (attn & AEU_INPUTS_ATTN_BITS_PXP_HW_INTERRUPT) { - - val = REG_RD(bp, PXP_REG_PXP_INT_STS_CLR_0); - BNX2X_ERR("PXP hw attention 0x%x\n", val); - /* RQ_USDMDP_FIFO_OVERFLOW */ - if (val & 0x18000) - BNX2X_ERR("FATAL error from PXP\n"); - } -} - -static inline void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn) -{ - if (attn & EVEREST_GEN_ATTN_IN_USE_MASK) { - - if (attn & BNX2X_MC_ASSERT_BITS) { - - BNX2X_ERR("MC assert!\n"); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_10, 0); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_9, 0); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_8, 0); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_7, 0); - bnx2x_panic(); - - } else if (attn & BNX2X_MCP_ASSERT) { - - BNX2X_ERR("MCP assert!\n"); - REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_11, 0); - bnx2x_mc_assert(bp); - - } else - BNX2X_ERR("Unknown HW assert! (attn 0x%x)\n", attn); - } - - if (attn & EVEREST_LATCHED_ATTN_IN_USE_MASK) { - - REG_WR(bp, MISC_REG_AEU_CLR_LATCH_SIGNAL, 0x7ff); - BNX2X_ERR("LATCHED attention 0x%x (masked)\n", attn); - } -} - -static void bnx2x_attn_int_deasserted(struct bnx2x *bp, u32 deasserted) -{ - struct attn_route attn; - struct attn_route group_mask; - int port = bp->port; - int index; - u32 reg_addr; - u32 val; - - /* need to take HW lock because MCP or other port might also - try to handle this event */ - bnx2x_lock_alr(bp); - - attn.sig[0] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_1_FUNC_0 + port*4); - attn.sig[1] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_2_FUNC_0 + port*4); - attn.sig[2] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_3_FUNC_0 + port*4); - attn.sig[3] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_4_FUNC_0 + port*4); - DP(NETIF_MSG_HW, "attn %llx\n", (unsigned long long)attn.sig[0]); - - for (index = 0; index < MAX_DYNAMIC_ATTN_GRPS; index++) { - if (deasserted & (1 << index)) { - group_mask = bp->attn_group[index]; - - DP(NETIF_MSG_HW, "group[%d]: %llx\n", index, - (unsigned long long)group_mask.sig[0]); - - bnx2x_attn_int_deasserted3(bp, - attn.sig[3] & group_mask.sig[3]); - bnx2x_attn_int_deasserted1(bp, - attn.sig[1] & group_mask.sig[1]); - bnx2x_attn_int_deasserted2(bp, - attn.sig[2] & group_mask.sig[2]); - bnx2x_attn_int_deasserted0(bp, - attn.sig[0] & group_mask.sig[0]); - - if ((attn.sig[0] & group_mask.sig[0] & - HW_INTERRUT_ASSERT_SET_0) || - (attn.sig[1] & group_mask.sig[1] & - HW_INTERRUT_ASSERT_SET_1) || - (attn.sig[2] & group_mask.sig[2] & - HW_INTERRUT_ASSERT_SET_2)) - BNX2X_ERR("FATAL HW block attention" - " set0 0x%x set1 0x%x" - " set2 0x%x\n", - (attn.sig[0] & group_mask.sig[0] & - HW_INTERRUT_ASSERT_SET_0), - (attn.sig[1] & group_mask.sig[1] & - HW_INTERRUT_ASSERT_SET_1), - (attn.sig[2] & group_mask.sig[2] & - HW_INTERRUT_ASSERT_SET_2)); - - if ((attn.sig[0] & group_mask.sig[0] & - HW_PRTY_ASSERT_SET_0) || - (attn.sig[1] & group_mask.sig[1] & - HW_PRTY_ASSERT_SET_1) || - (attn.sig[2] & group_mask.sig[2] & - HW_PRTY_ASSERT_SET_2)) - BNX2X_ERR("FATAL HW block parity attention\n"); - } - } - - bnx2x_unlock_alr(bp); - - reg_addr = (IGU_ADDR_ATTN_BITS_CLR + IGU_PORT_BASE * port) * 8; - - val = ~deasserted; -/* DP(NETIF_MSG_INTR, "write 0x%08x to IGU addr 0x%x\n", - val, BAR_IGU_INTMEM + reg_addr); */ - REG_WR(bp, BAR_IGU_INTMEM + reg_addr, val); - - if (bp->aeu_mask & (deasserted & 0xff)) - BNX2X_ERR("IGU BUG\n"); - if (~bp->attn_state & deasserted) - BNX2X_ERR("IGU BUG\n"); - - reg_addr = port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 : - MISC_REG_AEU_MASK_ATTN_FUNC_0; - - DP(NETIF_MSG_HW, "aeu_mask %x\n", bp->aeu_mask); - bp->aeu_mask |= (deasserted & 0xff); - - DP(NETIF_MSG_HW, "new mask %x\n", bp->aeu_mask); - REG_WR(bp, reg_addr, bp->aeu_mask); - - DP(NETIF_MSG_HW, "attn_state %x\n", bp->attn_state); - bp->attn_state &= ~deasserted; - DP(NETIF_MSG_HW, "new state %x\n", bp->attn_state); -} - -static void bnx2x_attn_int(struct bnx2x *bp) -{ - /* read local copy of bits */ - u32 attn_bits = bp->def_status_blk->atten_status_block.attn_bits; - u32 attn_ack = bp->def_status_blk->atten_status_block.attn_bits_ack; - u32 attn_state = bp->attn_state; - - /* look for changed bits */ - u32 asserted = attn_bits & ~attn_ack & ~attn_state; - u32 deasserted = ~attn_bits & attn_ack & attn_state; - - DP(NETIF_MSG_HW, - "attn_bits %x attn_ack %x asserted %x deasserted %x\n", - attn_bits, attn_ack, asserted, deasserted); - - if (~(attn_bits ^ attn_ack) & (attn_bits ^ attn_state)) - BNX2X_ERR("bad attention state\n"); - - /* handle bits that were raised */ - if (asserted) - bnx2x_attn_int_asserted(bp, asserted); - - if (deasserted) - bnx2x_attn_int_deasserted(bp, deasserted); -} - -static void bnx2x_sp_task(void *data) -{ - struct bnx2x *bp = data; - u16 status; - - /* Return here if interrupt is disabled */ - if (unlikely(atomic_read(&bp->intr_sem) != 0)) { - DP(BNX2X_MSG_SP, "called but intr_sem not 0, returning\n"); - return; - } - - status = bnx2x_update_dsb_idx(bp); - if (status == 0) - BNX2X_ERR("spurious slowpath interrupt!\n"); - - DP(NETIF_MSG_INTR, "got a slowpath interrupt (updated %x)\n", status); - - /* HW attentions */ - if (status & 0x1) - bnx2x_attn_int(bp); - - /* CStorm events: query_stats, port delete ramrod */ - if (status & 0x2) - bp->stat_pending = 0; - - bnx2x_ack_sb(bp, DEF_SB_ID, ATTENTION_ID, bp->def_att_idx, - IGU_INT_NOP, 1); - bnx2x_ack_sb(bp, DEF_SB_ID, USTORM_ID, le16_to_cpu(bp->def_u_idx), - IGU_INT_NOP, 1); - bnx2x_ack_sb(bp, DEF_SB_ID, CSTORM_ID, le16_to_cpu(bp->def_c_idx), - IGU_INT_NOP, 1); - bnx2x_ack_sb(bp, DEF_SB_ID, XSTORM_ID, le16_to_cpu(bp->def_x_idx), - IGU_INT_NOP, 1); - bnx2x_ack_sb(bp, DEF_SB_ID, TSTORM_ID, le16_to_cpu(bp->def_t_idx), - IGU_INT_ENABLE, 1); - - bp->sp_running = 0; -} - -static irqreturn_t bnx2x_msix_sp_int(int irq, void *dev_instance, struct pt_regs *regs) -{ - struct net_device *dev = dev_instance; - struct bnx2x *bp = netdev_priv(dev); - - /* Return here if interrupt is disabled */ - if (unlikely(atomic_read(&bp->intr_sem) != 0)) { - DP(BNX2X_MSG_SP, "called but intr_sem not 0, returning\n"); - return IRQ_HANDLED; - } - - bnx2x_ack_sb(bp, DEF_SB_ID, XSTORM_ID, 0, IGU_INT_DISABLE, 0); - -#ifdef BNX2X_STOP_ON_ERROR - if (unlikely(bp->panic)) - return IRQ_HANDLED; -#endif - - schedule_work(&bp->sp_task); - - return IRQ_HANDLED; -} - -/* end of slow path */ - -/* Statistics */ - -/**************************************************************************** -* Macros -****************************************************************************/ - -#define UPDATE_STAT(s, t) \ - do { \ - estats->t += new->s - old->s; \ - old->s = new->s; \ - } while (0) - -/* sum[hi:lo] += add[hi:lo] */ -#define ADD_64(s_hi, a_hi, s_lo, a_lo) \ - do { \ - s_lo += a_lo; \ - s_hi += a_hi + (s_lo < a_lo) ? 1 : 0; \ - } while (0) - -/* difference = minuend - subtrahend */ -#define DIFF_64(d_hi, m_hi, s_hi, d_lo, m_lo, s_lo) \ - do { \ - if (m_lo < s_lo) { /* underflow */ \ - d_hi = m_hi - s_hi; \ - if (d_hi > 0) { /* we can 'loan' 1 */ \ - d_hi--; \ - d_lo = m_lo + (UINT_MAX - s_lo) + 1; \ - } else { /* m_hi <= s_hi */ \ - d_hi = 0; \ - d_lo = 0; \ - } \ - } else { /* m_lo >= s_lo */ \ - if (m_hi < s_hi) { \ - d_hi = 0; \ - d_lo = 0; \ - } else { /* m_hi >= s_hi */ \ - d_hi = m_hi - s_hi; \ - d_lo = m_lo - s_lo; \ - } \ - } \ - } while (0) - -/* minuend -= subtrahend */ -#define SUB_64(m_hi, s_hi, m_lo, s_lo) \ - do { \ - DIFF_64(m_hi, m_hi, s_hi, m_lo, m_lo, s_lo); \ - } while (0) - -#define UPDATE_STAT64(s_hi, t_hi, s_lo, t_lo) \ - do { \ - DIFF_64(diff.hi, new->s_hi, old->s_hi, \ - diff.lo, new->s_lo, old->s_lo); \ - old->s_hi = new->s_hi; \ - old->s_lo = new->s_lo; \ - ADD_64(estats->t_hi, diff.hi, \ - estats->t_lo, diff.lo); \ - } while (0) - -/* sum[hi:lo] += add */ -#define ADD_EXTEND_64(s_hi, s_lo, a) \ - do { \ - s_lo += a; \ - s_hi += (s_lo < a) ? 1 : 0; \ - } while (0) - -#define UPDATE_EXTEND_STAT(s, t_hi, t_lo) \ - do { \ - ADD_EXTEND_64(estats->t_hi, estats->t_lo, new->s); \ - } while (0) - -#define UPDATE_EXTEND_TSTAT(s, t_hi, t_lo) \ - do { \ - diff = le32_to_cpu(tclient->s) - old_tclient->s; \ - old_tclient->s = le32_to_cpu(tclient->s); \ - ADD_EXTEND_64(estats->t_hi, estats->t_lo, diff); \ - } while (0) - -/* - * General service functions - */ - -static inline long bnx2x_hilo(u32 *hiref) -{ - u32 lo = *(hiref + 1); -#if (BITS_PER_LONG == 64) - u32 hi = *hiref; - - return HILO_U64(hi, lo); -#else - return lo; -#endif -} - -/* - * Init service functions - */ - -static void bnx2x_init_mac_stats(struct bnx2x *bp) -{ - struct dmae_command *dmae; - int port = bp->port; - int loader_idx = port * 8; - u32 opcode; - u32 mac_addr; - - bp->executer_idx = 0; - if (bp->fw_mb) { - /* MCP */ - opcode = (DMAE_CMD_SRC_PCI | DMAE_CMD_DST_GRC | - DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | -#ifdef __BIG_ENDIAN - DMAE_CMD_ENDIANITY_B_DW_SWAP | -#else - DMAE_CMD_ENDIANITY_DW_SWAP | -#endif - (port ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0)); - - if (bp->link_up) - opcode |= (DMAE_CMD_C_DST_GRC | DMAE_CMD_C_ENABLE); - - dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, eth_stats) + - sizeof(u32)); - dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, eth_stats) + - sizeof(u32)); - dmae->dst_addr_lo = bp->fw_mb >> 2; - dmae->dst_addr_hi = 0; - dmae->len = (offsetof(struct bnx2x_eth_stats, mac_stx_end) - - sizeof(u32)) >> 2; - if (bp->link_up) { - dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - } else { - dmae->comp_addr_lo = 0; - dmae->comp_addr_hi = 0; - dmae->comp_val = 0; - } - } - - if (!bp->link_up) { - /* no need to collect statistics in link down */ - return; - } - - opcode = (DMAE_CMD_SRC_GRC | DMAE_CMD_DST_PCI | - DMAE_CMD_C_DST_GRC | DMAE_CMD_C_ENABLE | - DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | -#ifdef __BIG_ENDIAN - DMAE_CMD_ENDIANITY_B_DW_SWAP | -#else - DMAE_CMD_ENDIANITY_DW_SWAP | -#endif - (port ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0)); - - if (bp->phy_flags & PHY_BMAC_FLAG) { - - mac_addr = (port ? NIG_REG_INGRESS_BMAC1_MEM : - NIG_REG_INGRESS_BMAC0_MEM); - - /* BIGMAC_REGISTER_TX_STAT_GTPKT .. - BIGMAC_REGISTER_TX_STAT_GTBYT */ - dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = (mac_addr + - BIGMAC_REGISTER_TX_STAT_GTPKT) >> 2; - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats)); - dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats)); - dmae->len = (8 + BIGMAC_REGISTER_TX_STAT_GTBYT - - BIGMAC_REGISTER_TX_STAT_GTPKT) >> 2; - dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - - /* BIGMAC_REGISTER_RX_STAT_GR64 .. - BIGMAC_REGISTER_RX_STAT_GRIPJ */ - dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = (mac_addr + - BIGMAC_REGISTER_RX_STAT_GR64) >> 2; - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats) + - offsetof(struct bmac_stats, rx_gr64)); - dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats) + - offsetof(struct bmac_stats, rx_gr64)); - dmae->len = (8 + BIGMAC_REGISTER_RX_STAT_GRIPJ - - BIGMAC_REGISTER_RX_STAT_GR64) >> 2; - dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - - } else if (bp->phy_flags & PHY_EMAC_FLAG) { - - mac_addr = (port ? GRCBASE_EMAC1 : GRCBASE_EMAC0); - - /* EMAC_REG_EMAC_RX_STAT_AC (EMAC_REG_EMAC_RX_STAT_AC_COUNT)*/ - dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = (mac_addr + - EMAC_REG_EMAC_RX_STAT_AC) >> 2; - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats)); - dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats)); - dmae->len = EMAC_REG_EMAC_RX_STAT_AC_COUNT; - dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - - /* EMAC_REG_EMAC_RX_STAT_AC_28 */ - dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = (mac_addr + - EMAC_REG_EMAC_RX_STAT_AC_28) >> 2; - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats) + - offsetof(struct emac_stats, - rx_falsecarriererrors)); - dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats) + - offsetof(struct emac_stats, - rx_falsecarriererrors)); - dmae->len = 1; - dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - - /* EMAC_REG_EMAC_TX_STAT_AC (EMAC_REG_EMAC_TX_STAT_AC_COUNT)*/ - dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); - dmae->opcode = opcode; - dmae->src_addr_lo = (mac_addr + - EMAC_REG_EMAC_TX_STAT_AC) >> 2; - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats) + - offsetof(struct emac_stats, - tx_ifhcoutoctets)); - dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats) + - offsetof(struct emac_stats, - tx_ifhcoutoctets)); - dmae->len = EMAC_REG_EMAC_TX_STAT_AC_COUNT; - dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - } - - /* NIG */ - dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); - dmae->opcode = (DMAE_CMD_SRC_GRC | DMAE_CMD_DST_PCI | - DMAE_CMD_C_DST_PCI | DMAE_CMD_C_ENABLE | - DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | -#ifdef __BIG_ENDIAN - DMAE_CMD_ENDIANITY_B_DW_SWAP | -#else - DMAE_CMD_ENDIANITY_DW_SWAP | -#endif - (port ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0)); - dmae->src_addr_lo = (port ? NIG_REG_STAT1_BRB_DISCARD : - NIG_REG_STAT0_BRB_DISCARD) >> 2; - dmae->src_addr_hi = 0; - dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, nig)); - dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, nig)); - dmae->len = (sizeof(struct nig_stats) - 2*sizeof(u32)) >> 2; - dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, nig) + - offsetof(struct nig_stats, done)); - dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, nig) + - offsetof(struct nig_stats, done)); - dmae->comp_val = 0xffffffff; -} - -static void bnx2x_init_stats(struct bnx2x *bp) -{ - int port = bp->port; - - bp->stats_state = STATS_STATE_DISABLE; - bp->executer_idx = 0; - - bp->old_brb_discard = REG_RD(bp, - NIG_REG_STAT0_BRB_DISCARD + port*0x38); - - memset(&bp->old_bmac, 0, sizeof(struct bmac_stats)); - memset(&bp->old_tclient, 0, sizeof(struct tstorm_per_client_stats)); - memset(&bp->net_stats, 0, sizeof(struct net_device_stats)); - - REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_STATS_FLAGS_OFFSET(port), 1); - REG_WR(bp, BAR_XSTRORM_INTMEM + - XSTORM_STATS_FLAGS_OFFSET(port) + 4, 0); - - REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_STATS_FLAGS_OFFSET(port), 1); - REG_WR(bp, BAR_TSTRORM_INTMEM + - TSTORM_STATS_FLAGS_OFFSET(port) + 4, 0); - - REG_WR(bp, BAR_CSTRORM_INTMEM + CSTORM_STATS_FLAGS_OFFSET(port), 0); - REG_WR(bp, BAR_CSTRORM_INTMEM + - CSTORM_STATS_FLAGS_OFFSET(port) + 4, 0); - - REG_WR(bp, BAR_XSTRORM_INTMEM + - XSTORM_ETH_STATS_QUERY_ADDR_OFFSET(port), - U64_LO(bnx2x_sp_mapping(bp, fw_stats))); - REG_WR(bp, BAR_XSTRORM_INTMEM + - XSTORM_ETH_STATS_QUERY_ADDR_OFFSET(port) + 4, - U64_HI(bnx2x_sp_mapping(bp, fw_stats))); - - REG_WR(bp, BAR_TSTRORM_INTMEM + - TSTORM_ETH_STATS_QUERY_ADDR_OFFSET(port), - U64_LO(bnx2x_sp_mapping(bp, fw_stats))); - REG_WR(bp, BAR_TSTRORM_INTMEM + - TSTORM_ETH_STATS_QUERY_ADDR_OFFSET(port) + 4, - U64_HI(bnx2x_sp_mapping(bp, fw_stats))); -} - -static void bnx2x_stop_stats(struct bnx2x *bp) -{ - might_sleep(); - if (bp->stats_state != STATS_STATE_DISABLE) { - int timeout = 10; - - bp->stats_state = STATS_STATE_STOP; - DP(BNX2X_MSG_STATS, "stats_state - STOP\n"); - - while (bp->stats_state != STATS_STATE_DISABLE) { - if (!timeout) { - BNX2X_ERR("timeout waiting for stats stop\n"); - break; - } - timeout--; - msleep(100); - } - } - DP(BNX2X_MSG_STATS, "stats_state - DISABLE\n"); -} - -/* - * Statistics service functions - */ - -static void bnx2x_update_bmac_stats(struct bnx2x *bp) -{ - struct regp diff; - struct regp sum; - struct bmac_stats *new = bnx2x_sp(bp, mac_stats.bmac); - struct bmac_stats *old = &bp->old_bmac; - struct bnx2x_eth_stats *estats = bnx2x_sp(bp, eth_stats); - - sum.hi = 0; - sum.lo = 0; - - UPDATE_STAT64(tx_gtbyt.hi, total_bytes_transmitted_hi, - tx_gtbyt.lo, total_bytes_transmitted_lo); - - UPDATE_STAT64(tx_gtmca.hi, total_multicast_packets_transmitted_hi, - tx_gtmca.lo, total_multicast_packets_transmitted_lo); - ADD_64(sum.hi, diff.hi, sum.lo, diff.lo); - - UPDATE_STAT64(tx_gtgca.hi, total_broadcast_packets_transmitted_hi, - tx_gtgca.lo, total_broadcast_packets_transmitted_lo); - ADD_64(sum.hi, diff.hi, sum.lo, diff.lo); - - UPDATE_STAT64(tx_gtpkt.hi, total_unicast_packets_transmitted_hi, - tx_gtpkt.lo, total_unicast_packets_transmitted_lo); - SUB_64(estats->total_unicast_packets_transmitted_hi, sum.hi, - estats->total_unicast_packets_transmitted_lo, sum.lo); - - UPDATE_STAT(tx_gtxpf.lo, pause_xoff_frames_transmitted); - UPDATE_STAT(tx_gt64.lo, frames_transmitted_64_bytes); - UPDATE_STAT(tx_gt127.lo, frames_transmitted_65_127_bytes); - UPDATE_STAT(tx_gt255.lo, frames_transmitted_128_255_bytes); - UPDATE_STAT(tx_gt511.lo, frames_transmitted_256_511_bytes); - UPDATE_STAT(tx_gt1023.lo, frames_transmitted_512_1023_bytes); - UPDATE_STAT(tx_gt1518.lo, frames_transmitted_1024_1522_bytes); - UPDATE_STAT(tx_gt2047.lo, frames_transmitted_1523_9022_bytes); - UPDATE_STAT(tx_gt4095.lo, frames_transmitted_1523_9022_bytes); - UPDATE_STAT(tx_gt9216.lo, frames_transmitted_1523_9022_bytes); - UPDATE_STAT(tx_gt16383.lo, frames_transmitted_1523_9022_bytes); - - UPDATE_STAT(rx_grfcs.lo, crc_receive_errors); - UPDATE_STAT(rx_grund.lo, runt_packets_received); - UPDATE_STAT(rx_grovr.lo, stat_Dot3statsFramesTooLong); - UPDATE_STAT(rx_grxpf.lo, pause_xoff_frames_received); - UPDATE_STAT(rx_grxcf.lo, control_frames_received); - /* UPDATE_STAT(rx_grxpf.lo, control_frames_received); */ - UPDATE_STAT(rx_grfrg.lo, error_runt_packets_received); - UPDATE_STAT(rx_grjbr.lo, error_jabber_packets_received); - - UPDATE_STAT64(rx_grerb.hi, stat_IfHCInBadOctets_hi, - rx_grerb.lo, stat_IfHCInBadOctets_lo); - UPDATE_STAT64(tx_gtufl.hi, stat_IfHCOutBadOctets_hi, - tx_gtufl.lo, stat_IfHCOutBadOctets_lo); - UPDATE_STAT(tx_gterr.lo, stat_Dot3statsInternalMacTransmitErrors); - /* UPDATE_STAT(rx_grxpf.lo, stat_XoffStateEntered); */ - estats->stat_XoffStateEntered = estats->pause_xoff_frames_received; -} - -static void bnx2x_update_emac_stats(struct bnx2x *bp) -{ - struct emac_stats *new = bnx2x_sp(bp, mac_stats.emac); - struct bnx2x_eth_stats *estats = bnx2x_sp(bp, eth_stats); - - UPDATE_EXTEND_STAT(tx_ifhcoutoctets, total_bytes_transmitted_hi, - total_bytes_transmitted_lo); - UPDATE_EXTEND_STAT(tx_ifhcoutucastpkts, - total_unicast_packets_transmitted_hi, - total_unicast_packets_transmitted_lo); - UPDATE_EXTEND_STAT(tx_ifhcoutmulticastpkts, - total_multicast_packets_transmitted_hi, - total_multicast_packets_transmitted_lo); - UPDATE_EXTEND_STAT(tx_ifhcoutbroadcastpkts, - total_broadcast_packets_transmitted_hi, - total_broadcast_packets_transmitted_lo); - - estats->pause_xon_frames_transmitted += new->tx_outxonsent; - estats->pause_xoff_frames_transmitted += new->tx_outxoffsent; - estats->single_collision_transmit_frames += - new->tx_dot3statssinglecollisionframes; - estats->multiple_collision_transmit_frames += - new->tx_dot3statsmultiplecollisionframes; - estats->late_collision_frames += new->tx_dot3statslatecollisions; - estats->excessive_collision_frames += - new->tx_dot3statsexcessivecollisions; - estats->frames_transmitted_64_bytes += new->tx_etherstatspkts64octets; - estats->frames_transmitted_65_127_bytes += - new->tx_etherstatspkts65octetsto127octets; - estats->frames_transmitted_128_255_bytes += - new->tx_etherstatspkts128octetsto255octets; - estats->frames_transmitted_256_511_bytes += - new->tx_etherstatspkts256octetsto511octets; - estats->frames_transmitted_512_1023_bytes += - new->tx_etherstatspkts512octetsto1023octets; - estats->frames_transmitted_1024_1522_bytes += - new->tx_etherstatspkts1024octetsto1522octet; - estats->frames_transmitted_1523_9022_bytes += - new->tx_etherstatspktsover1522octets; - - estats->crc_receive_errors += new->rx_dot3statsfcserrors; - estats->alignment_errors += new->rx_dot3statsalignmenterrors; - estats->false_carrier_detections += new->rx_falsecarriererrors; - estats->runt_packets_received += new->rx_etherstatsundersizepkts; - estats->stat_Dot3statsFramesTooLong += new->rx_dot3statsframestoolong; - estats->pause_xon_frames_received += new->rx_xonpauseframesreceived; - estats->pause_xoff_frames_received += new->rx_xoffpauseframesreceived; - estats->control_frames_received += new->rx_maccontrolframesreceived; - estats->error_runt_packets_received += new->rx_etherstatsfragments; - estats->error_jabber_packets_received += new->rx_etherstatsjabbers; - - UPDATE_EXTEND_STAT(rx_ifhcinbadoctets, stat_IfHCInBadOctets_hi, - stat_IfHCInBadOctets_lo); - UPDATE_EXTEND_STAT(tx_ifhcoutbadoctets, stat_IfHCOutBadOctets_hi, - stat_IfHCOutBadOctets_lo); - estats->stat_Dot3statsInternalMacTransmitErrors += - new->tx_dot3statsinternalmactransmiterrors; - estats->stat_Dot3StatsCarrierSenseErrors += - new->rx_dot3statscarriersenseerrors; - estats->stat_Dot3StatsDeferredTransmissions += - new->tx_dot3statsdeferredtransmissions; - estats->stat_FlowControlDone += new->tx_flowcontroldone; - estats->stat_XoffStateEntered += new->rx_xoffstateentered; -} - -static int bnx2x_update_storm_stats(struct bnx2x *bp) -{ - struct eth_stats_query *stats = bnx2x_sp(bp, fw_stats); - struct tstorm_common_stats *tstats = &stats->tstorm_common; - struct tstorm_per_client_stats *tclient = - &tstats->client_statistics[0]; - struct tstorm_per_client_stats *old_tclient = &bp->old_tclient; - struct xstorm_common_stats *xstats = &stats->xstorm_common; - struct nig_stats *nstats = bnx2x_sp(bp, nig); - struct bnx2x_eth_stats *estats = bnx2x_sp(bp, eth_stats); - u32 diff; - - /* are DMAE stats valid? */ - if (nstats->done != 0xffffffff) { - DP(BNX2X_MSG_STATS, "stats not updated by dmae\n"); - return -1; - } - - /* are storm stats valid? */ - if (tstats->done.hi != 0xffffffff) { - DP(BNX2X_MSG_STATS, "stats not updated by tstorm\n"); - return -2; - } - if (xstats->done.hi != 0xffffffff) { - DP(BNX2X_MSG_STATS, "stats not updated by xstorm\n"); - return -3; - } - - estats->total_bytes_received_hi = - estats->valid_bytes_received_hi = - le32_to_cpu(tclient->total_rcv_bytes.hi); - estats->total_bytes_received_lo = - estats->valid_bytes_received_lo = - le32_to_cpu(tclient->total_rcv_bytes.lo); - ADD_64(estats->total_bytes_received_hi, - le32_to_cpu(tclient->rcv_error_bytes.hi), - estats->total_bytes_received_lo, - le32_to_cpu(tclient->rcv_error_bytes.lo)); - - UPDATE_EXTEND_TSTAT(rcv_unicast_pkts, - total_unicast_packets_received_hi, - total_unicast_packets_received_lo); - UPDATE_EXTEND_TSTAT(rcv_multicast_pkts, - total_multicast_packets_received_hi, - total_multicast_packets_received_lo); - UPDATE_EXTEND_TSTAT(rcv_broadcast_pkts, - total_broadcast_packets_received_hi, - total_broadcast_packets_received_lo); - - estats->frames_received_64_bytes = MAC_STX_NA; - estats->frames_received_65_127_bytes = MAC_STX_NA; - estats->frames_received_128_255_bytes = MAC_STX_NA; - estats->frames_received_256_511_bytes = MAC_STX_NA; - estats->frames_received_512_1023_bytes = MAC_STX_NA; - estats->frames_received_1024_1522_bytes = MAC_STX_NA; - estats->frames_received_1523_9022_bytes = MAC_STX_NA; - - estats->x_total_sent_bytes_hi = - le32_to_cpu(xstats->total_sent_bytes.hi); - estats->x_total_sent_bytes_lo = - le32_to_cpu(xstats->total_sent_bytes.lo); - estats->x_total_sent_pkts = le32_to_cpu(xstats->total_sent_pkts); - - estats->t_rcv_unicast_bytes_hi = - le32_to_cpu(tclient->rcv_unicast_bytes.hi); - estats->t_rcv_unicast_bytes_lo = - le32_to_cpu(tclient->rcv_unicast_bytes.lo); - estats->t_rcv_broadcast_bytes_hi = - le32_to_cpu(tclient->rcv_broadcast_bytes.hi); - estats->t_rcv_broadcast_bytes_lo = - le32_to_cpu(tclient->rcv_broadcast_bytes.lo); - estats->t_rcv_multicast_bytes_hi = - le32_to_cpu(tclient->rcv_multicast_bytes.hi); - estats->t_rcv_multicast_bytes_lo = - le32_to_cpu(tclient->rcv_multicast_bytes.lo); - estats->t_total_rcv_pkt = le32_to_cpu(tclient->total_rcv_pkts); - - estats->checksum_discard = le32_to_cpu(tclient->checksum_discard); - estats->packets_too_big_discard = - le32_to_cpu(tclient->packets_too_big_discard); - estats->jabber_packets_received = estats->packets_too_big_discard + - estats->stat_Dot3statsFramesTooLong; - estats->no_buff_discard = le32_to_cpu(tclient->no_buff_discard); - estats->ttl0_discard = le32_to_cpu(tclient->ttl0_discard); - estats->mac_discard = le32_to_cpu(tclient->mac_discard); - estats->mac_filter_discard = le32_to_cpu(tstats->mac_filter_discard); - estats->xxoverflow_discard = le32_to_cpu(tstats->xxoverflow_discard); - estats->brb_truncate_discard = - le32_to_cpu(tstats->brb_truncate_discard); - - estats->brb_discard += nstats->brb_discard - bp->old_brb_discard; - bp->old_brb_discard = nstats->brb_discard; - - estats->brb_packet = nstats->brb_packet; - estats->brb_truncate = nstats->brb_truncate; - estats->flow_ctrl_discard = nstats->flow_ctrl_discard; - estats->flow_ctrl_octets = nstats->flow_ctrl_octets; - estats->flow_ctrl_packet = nstats->flow_ctrl_packet; - estats->mng_discard = nstats->mng_discard; - estats->mng_octet_inp = nstats->mng_octet_inp; - estats->mng_octet_out = nstats->mng_octet_out; - estats->mng_packet_inp = nstats->mng_packet_inp; - estats->mng_packet_out = nstats->mng_packet_out; - estats->pbf_octets = nstats->pbf_octets; - estats->pbf_packet = nstats->pbf_packet; - estats->safc_inp = nstats->safc_inp; - - xstats->done.hi = 0; - tstats->done.hi = 0; - nstats->done = 0; - - return 0; -} - -static void bnx2x_update_net_stats(struct bnx2x *bp) -{ - struct bnx2x_eth_stats *estats = bnx2x_sp(bp, eth_stats); - struct net_device_stats *nstats = &bp->net_stats; - - nstats->rx_packets = - bnx2x_hilo(&estats->total_unicast_packets_received_hi) + - bnx2x_hilo(&estats->total_multicast_packets_received_hi) + - bnx2x_hilo(&estats->total_broadcast_packets_received_hi); - - nstats->tx_packets = - bnx2x_hilo(&estats->total_unicast_packets_transmitted_hi) + - bnx2x_hilo(&estats->total_multicast_packets_transmitted_hi) + - bnx2x_hilo(&estats->total_broadcast_packets_transmitted_hi); - - nstats->rx_bytes = bnx2x_hilo(&estats->total_bytes_received_hi); - - nstats->tx_bytes = bnx2x_hilo(&estats->total_bytes_transmitted_hi); - - nstats->rx_dropped = estats->checksum_discard + estats->mac_discard; - nstats->tx_dropped = 0; - - nstats->multicast = - bnx2x_hilo(&estats->total_multicast_packets_transmitted_hi); - - nstats->collisions = estats->single_collision_transmit_frames + - estats->multiple_collision_transmit_frames + - estats->late_collision_frames + - estats->excessive_collision_frames; - - nstats->rx_length_errors = estats->runt_packets_received + - estats->jabber_packets_received; - nstats->rx_over_errors = estats->brb_discard + - estats->brb_truncate_discard; - nstats->rx_crc_errors = estats->crc_receive_errors; - nstats->rx_frame_errors = estats->alignment_errors; - nstats->rx_fifo_errors = estats->no_buff_discard; - nstats->rx_missed_errors = estats->xxoverflow_discard; - - nstats->rx_errors = nstats->rx_length_errors + - nstats->rx_over_errors + - nstats->rx_crc_errors + - nstats->rx_frame_errors + - nstats->rx_fifo_errors + - nstats->rx_missed_errors; - - nstats->tx_aborted_errors = estats->late_collision_frames + - estats->excessive_collision_frames; - nstats->tx_carrier_errors = estats->false_carrier_detections; - nstats->tx_fifo_errors = 0; - nstats->tx_heartbeat_errors = 0; - nstats->tx_window_errors = 0; - - nstats->tx_errors = nstats->tx_aborted_errors + - nstats->tx_carrier_errors; - - estats->mac_stx_start = ++estats->mac_stx_end; -} - -static void bnx2x_update_stats(struct bnx2x *bp) -{ - int i; - - if (!bnx2x_update_storm_stats(bp)) { - - if (bp->phy_flags & PHY_BMAC_FLAG) { - bnx2x_update_bmac_stats(bp); - - } else if (bp->phy_flags & PHY_EMAC_FLAG) { - bnx2x_update_emac_stats(bp); - - } else { /* unreached */ - BNX2X_ERR("no MAC active\n"); - return; - } - - bnx2x_update_net_stats(bp); - } - - if (bp->msglevel & NETIF_MSG_TIMER) { - struct bnx2x_eth_stats *estats = bnx2x_sp(bp, eth_stats); - struct net_device_stats *nstats = &bp->net_stats; - - printk(KERN_DEBUG "%s:\n", bp->dev->name); - printk(KERN_DEBUG " tx avail (%4x) tx hc idx (%x)" - " tx pkt (%lx)\n", - bnx2x_tx_avail(bp->fp), - *bp->fp->tx_cons_sb, nstats->tx_packets); - printk(KERN_DEBUG " rx usage (%4x) rx hc idx (%x)" - " rx pkt (%lx)\n", - (u16)(*bp->fp->rx_cons_sb - bp->fp->rx_comp_cons), - *bp->fp->rx_cons_sb, nstats->rx_packets); - printk(KERN_DEBUG " %s (Xoff events %u) brb drops %u\n", - netif_queue_stopped(bp->dev)? "Xoff" : "Xon", - estats->driver_xoff, estats->brb_discard); - printk(KERN_DEBUG "tstats: checksum_discard %u " - "packets_too_big_discard %u no_buff_discard %u " - "mac_discard %u mac_filter_discard %u " - "xxovrflow_discard %u brb_truncate_discard %u " - "ttl0_discard %u\n", - estats->checksum_discard, - estats->packets_too_big_discard, - estats->no_buff_discard, estats->mac_discard, - estats->mac_filter_discard, estats->xxoverflow_discard, - estats->brb_truncate_discard, estats->ttl0_discard); - - for_each_queue(bp, i) { - printk(KERN_DEBUG "[%d]: %lu\t%lu\t%lu\n", i, - bnx2x_fp(bp, i, tx_pkt), - bnx2x_fp(bp, i, rx_pkt), - bnx2x_fp(bp, i, rx_calls)); - } - } - - if (bp->state != BNX2X_STATE_OPEN) { - DP(BNX2X_MSG_STATS, "state is %x, returning\n", bp->state); - return; - } - -#ifdef BNX2X_STOP_ON_ERROR - if (unlikely(bp->panic)) - return; -#endif - - /* loader */ - if (bp->executer_idx) { - struct dmae_command *dmae = &bp->dmae; - int port = bp->port; - int loader_idx = port * 8; - - memset(dmae, 0, sizeof(struct dmae_command)); - - dmae->opcode = (DMAE_CMD_SRC_PCI | DMAE_CMD_DST_GRC | - DMAE_CMD_C_DST_GRC | DMAE_CMD_C_ENABLE | - DMAE_CMD_DST_RESET | -#ifdef __BIG_ENDIAN - DMAE_CMD_ENDIANITY_B_DW_SWAP | -#else - DMAE_CMD_ENDIANITY_DW_SWAP | -#endif - (port ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0)); - dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, dmae[0])); - dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, dmae[0])); - dmae->dst_addr_lo = (DMAE_REG_CMD_MEM + - sizeof(struct dmae_command) * - (loader_idx + 1)) >> 2; - dmae->dst_addr_hi = 0; - dmae->len = sizeof(struct dmae_command) >> 2; - dmae->len--; /* !!! for A0/1 only */ - dmae->comp_addr_lo = dmae_reg_go_c[loader_idx + 1] >> 2; - dmae->comp_addr_hi = 0; - dmae->comp_val = 1; - - bnx2x_post_dmae(bp, dmae, loader_idx); - } - - if (bp->stats_state != STATS_STATE_ENABLE) { - bp->stats_state = STATS_STATE_DISABLE; - return; - } - - if (bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_STAT_QUERY, 0, 0, 0, 0) == 0) { - /* stats ramrod has it's own slot on the spe */ - bp->spq_left++; - bp->stat_pending = 1; - } -} - -static void bnx2x_timer(unsigned long data) -{ - struct bnx2x *bp = (struct bnx2x *) data; - - if (!netif_running(bp->dev)) - return; - - if (atomic_read(&bp->intr_sem) != 0) - goto timer_restart; - - if (poll) { - struct bnx2x_fastpath *fp = &bp->fp[0]; - int rc; - - bnx2x_tx_int(fp, 1000); - rc = bnx2x_rx_int(fp, 1000); - } - - if (!nomcp) { - int port = bp->port; - u32 drv_pulse; - u32 mcp_pulse; - - ++bp->fw_drv_pulse_wr_seq; - bp->fw_drv_pulse_wr_seq &= DRV_PULSE_SEQ_MASK; - /* TBD - add SYSTEM_TIME */ - drv_pulse = bp->fw_drv_pulse_wr_seq; - SHMEM_WR(bp, func_mb[port].drv_pulse_mb, drv_pulse); - - mcp_pulse = (SHMEM_RD(bp, func_mb[port].mcp_pulse_mb) & - MCP_PULSE_SEQ_MASK); - /* The delta between driver pulse and mcp response - * should be 1 (before mcp response) or 0 (after mcp response) - */ - if ((drv_pulse != mcp_pulse) && - (drv_pulse != ((mcp_pulse + 1) & MCP_PULSE_SEQ_MASK))) { - /* someone lost a heartbeat... */ - BNX2X_ERR("drv_pulse (0x%x) != mcp_pulse (0x%x)\n", - drv_pulse, mcp_pulse); - } - } - - if (bp->stats_state == STATS_STATE_DISABLE) - goto timer_restart; - - bnx2x_update_stats(bp); - -timer_restart: - mod_timer(&bp->timer, jiffies + bp->current_interval); -} - -/* end of Statistics */ - -/* nic init */ - -/* - * nic init service functions - */ - -static void bnx2x_init_sb(struct bnx2x *bp, struct host_status_block *sb, - dma_addr_t mapping, int id) -{ - int port = bp->port; - u64 section; - int index; - - /* USTORM */ - section = ((u64)mapping) + offsetof(struct host_status_block, - u_status_block); - sb->u_status_block.status_block_id = id; - - REG_WR(bp, BAR_USTRORM_INTMEM + - USTORM_SB_HOST_SB_ADDR_OFFSET(port, id), U64_LO(section)); - REG_WR(bp, BAR_USTRORM_INTMEM + - ((USTORM_SB_HOST_SB_ADDR_OFFSET(port, id)) + 4), - U64_HI(section)); - - for (index = 0; index < HC_USTORM_SB_NUM_INDICES; index++) - REG_WR16(bp, BAR_USTRORM_INTMEM + - USTORM_SB_HC_DISABLE_OFFSET(port, id, index), 0x1); - - /* CSTORM */ - section = ((u64)mapping) + offsetof(struct host_status_block, - c_status_block); - sb->c_status_block.status_block_id = id; - - REG_WR(bp, BAR_CSTRORM_INTMEM + - CSTORM_SB_HOST_SB_ADDR_OFFSET(port, id), U64_LO(section)); - REG_WR(bp, BAR_CSTRORM_INTMEM + - ((CSTORM_SB_HOST_SB_ADDR_OFFSET(port, id)) + 4), - U64_HI(section)); - - for (index = 0; index < HC_CSTORM_SB_NUM_INDICES; index++) - REG_WR16(bp, BAR_CSTRORM_INTMEM + - CSTORM_SB_HC_DISABLE_OFFSET(port, id, index), 0x1); - - bnx2x_ack_sb(bp, id, CSTORM_ID, 0, IGU_INT_ENABLE, 0); -} - -static void bnx2x_init_def_sb(struct bnx2x *bp, - struct host_def_status_block *def_sb, - dma_addr_t mapping, int id) -{ - int port = bp->port; - int index, val, reg_offset; - u64 section; - - /* ATTN */ - section = ((u64)mapping) + offsetof(struct host_def_status_block, - atten_status_block); - def_sb->atten_status_block.status_block_id = id; - - bp->def_att_idx = 0; - bp->attn_state = 0; - - reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 : - MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); - - for (index = 0; index < 3; index++) { - bp->attn_group[index].sig[0] = REG_RD(bp, - reg_offset + 0x10*index); - bp->attn_group[index].sig[1] = REG_RD(bp, - reg_offset + 0x4 + 0x10*index); - bp->attn_group[index].sig[2] = REG_RD(bp, - reg_offset + 0x8 + 0x10*index); - bp->attn_group[index].sig[3] = REG_RD(bp, - reg_offset + 0xc + 0x10*index); - } - - bp->aeu_mask = REG_RD(bp, (port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 : - MISC_REG_AEU_MASK_ATTN_FUNC_0)); - - reg_offset = (port ? HC_REG_ATTN_MSG1_ADDR_L : - HC_REG_ATTN_MSG0_ADDR_L); - - REG_WR(bp, reg_offset, U64_LO(section)); - REG_WR(bp, reg_offset + 4, U64_HI(section)); - - reg_offset = (port ? HC_REG_ATTN_NUM_P1 : HC_REG_ATTN_NUM_P0); - - val = REG_RD(bp, reg_offset); - val |= id; - REG_WR(bp, reg_offset, val); - - /* USTORM */ - section = ((u64)mapping) + offsetof(struct host_def_status_block, - u_def_status_block); - def_sb->u_def_status_block.status_block_id = id; - - bp->def_u_idx = 0; - - REG_WR(bp, BAR_USTRORM_INTMEM + - USTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port), U64_LO(section)); - REG_WR(bp, BAR_USTRORM_INTMEM + - ((USTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)) + 4), - U64_HI(section)); - REG_WR(bp, BAR_USTRORM_INTMEM + USTORM_HC_BTR_OFFSET(port), - BNX2X_BTR); - - for (index = 0; index < HC_USTORM_DEF_SB_NUM_INDICES; index++) - REG_WR16(bp, BAR_USTRORM_INTMEM + - USTORM_DEF_SB_HC_DISABLE_OFFSET(port, index), 0x1); - - /* CSTORM */ - section = ((u64)mapping) + offsetof(struct host_def_status_block, - c_def_status_block); - def_sb->c_def_status_block.status_block_id = id; - - bp->def_c_idx = 0; - - REG_WR(bp, BAR_CSTRORM_INTMEM + - CSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port), U64_LO(section)); - REG_WR(bp, BAR_CSTRORM_INTMEM + - ((CSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)) + 4), - U64_HI(section)); - REG_WR(bp, BAR_CSTRORM_INTMEM + CSTORM_HC_BTR_OFFSET(port), - BNX2X_BTR); - - for (index = 0; index < HC_CSTORM_DEF_SB_NUM_INDICES; index++) - REG_WR16(bp, BAR_CSTRORM_INTMEM + - CSTORM_DEF_SB_HC_DISABLE_OFFSET(port, index), 0x1); - - /* TSTORM */ - section = ((u64)mapping) + offsetof(struct host_def_status_block, - t_def_status_block); - def_sb->t_def_status_block.status_block_id = id; - - bp->def_t_idx = 0; - - REG_WR(bp, BAR_TSTRORM_INTMEM + - TSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port), U64_LO(section)); - REG_WR(bp, BAR_TSTRORM_INTMEM + - ((TSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)) + 4), - U64_HI(section)); - REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_HC_BTR_OFFSET(port), - BNX2X_BTR); - - for (index = 0; index < HC_TSTORM_DEF_SB_NUM_INDICES; index++) - REG_WR16(bp, BAR_TSTRORM_INTMEM + - TSTORM_DEF_SB_HC_DISABLE_OFFSET(port, index), 0x1); - - /* XSTORM */ - section = ((u64)mapping) + offsetof(struct host_def_status_block, - x_def_status_block); - def_sb->x_def_status_block.status_block_id = id; - - bp->def_x_idx = 0; - - REG_WR(bp, BAR_XSTRORM_INTMEM + - XSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port), U64_LO(section)); - REG_WR(bp, BAR_XSTRORM_INTMEM + - ((XSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)) + 4), - U64_HI(section)); - REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_HC_BTR_OFFSET(port), - BNX2X_BTR); - - for (index = 0; index < HC_XSTORM_DEF_SB_NUM_INDICES; index++) - REG_WR16(bp, BAR_XSTRORM_INTMEM + - XSTORM_DEF_SB_HC_DISABLE_OFFSET(port, index), 0x1); - - bp->stat_pending = 0; - - bnx2x_ack_sb(bp, id, CSTORM_ID, 0, IGU_INT_ENABLE, 0); -} - -static void bnx2x_update_coalesce(struct bnx2x *bp) -{ - int port = bp->port; - int i; - - for_each_queue(bp, i) { - - /* HC_INDEX_U_ETH_RX_CQ_CONS */ - REG_WR8(bp, BAR_USTRORM_INTMEM + - USTORM_SB_HC_TIMEOUT_OFFSET(port, i, - HC_INDEX_U_ETH_RX_CQ_CONS), - bp->rx_ticks_int/12); - REG_WR16(bp, BAR_USTRORM_INTMEM + - USTORM_SB_HC_DISABLE_OFFSET(port, i, - HC_INDEX_U_ETH_RX_CQ_CONS), - bp->rx_ticks_int ? 0 : 1); - - /* HC_INDEX_C_ETH_TX_CQ_CONS */ - REG_WR8(bp, BAR_CSTRORM_INTMEM + - CSTORM_SB_HC_TIMEOUT_OFFSET(port, i, - HC_INDEX_C_ETH_TX_CQ_CONS), - bp->tx_ticks_int/12); - REG_WR16(bp, BAR_CSTRORM_INTMEM + - CSTORM_SB_HC_DISABLE_OFFSET(port, i, - HC_INDEX_C_ETH_TX_CQ_CONS), - bp->tx_ticks_int ? 0 : 1); - } -} - -static void bnx2x_init_rx_rings(struct bnx2x *bp) -{ - u16 ring_prod; - int i, j; - int port = bp->port; - - bp->rx_buf_use_size = bp->dev->mtu; - - bp->rx_buf_use_size += bp->rx_offset + ETH_OVREHEAD; - bp->rx_buf_size = bp->rx_buf_use_size + 64; - - for_each_queue(bp, j) { - struct bnx2x_fastpath *fp = &bp->fp[j]; - - fp->rx_bd_cons = 0; - fp->rx_cons_sb = BNX2X_RX_SB_INDEX; - - for (i = 1; i <= NUM_RX_RINGS; i++) { - struct eth_rx_bd *rx_bd; - - rx_bd = &fp->rx_desc_ring[RX_DESC_CNT * i - 2]; - rx_bd->addr_hi = - cpu_to_le32(U64_HI(fp->rx_desc_mapping + - BCM_PAGE_SIZE*(i % NUM_RX_RINGS))); - rx_bd->addr_lo = - cpu_to_le32(U64_LO(fp->rx_desc_mapping + - BCM_PAGE_SIZE*(i % NUM_RX_RINGS))); - - } - - for (i = 1; i <= NUM_RCQ_RINGS; i++) { - struct eth_rx_cqe_next_page *nextpg; - - nextpg = (struct eth_rx_cqe_next_page *) - &fp->rx_comp_ring[RCQ_DESC_CNT * i - 1]; - nextpg->addr_hi = - cpu_to_le32(U64_HI(fp->rx_comp_mapping + - BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS))); - nextpg->addr_lo = - cpu_to_le32(U64_LO(fp->rx_comp_mapping + - BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS))); - } - - /* rx completion queue */ - fp->rx_comp_cons = ring_prod = 0; - - for (i = 0; i < bp->rx_ring_size; i++) { - if (bnx2x_alloc_rx_skb(bp, fp, ring_prod) < 0) { - BNX2X_ERR("was only able to allocate " - "%d rx skbs\n", i); - break; - } - ring_prod = NEXT_RX_IDX(ring_prod); - BUG_TRAP(ring_prod > i); - } - - fp->rx_bd_prod = fp->rx_comp_prod = ring_prod; - fp->rx_pkt = fp->rx_calls = 0; - - /* Warning! this will generate an interrupt (to the TSTORM) */ - /* must only be done when chip is initialized */ - REG_WR(bp, BAR_TSTRORM_INTMEM + - TSTORM_RCQ_PROD_OFFSET(port, j), ring_prod); - if (j != 0) - continue; - - REG_WR(bp, BAR_USTRORM_INTMEM + - USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(port), - U64_LO(fp->rx_comp_mapping)); - REG_WR(bp, BAR_USTRORM_INTMEM + - USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(port) + 4, - U64_HI(fp->rx_comp_mapping)); - } -} - -static void bnx2x_init_tx_ring(struct bnx2x *bp) -{ - int i, j; - - for_each_queue(bp, j) { - struct bnx2x_fastpath *fp = &bp->fp[j]; - - for (i = 1; i <= NUM_TX_RINGS; i++) { - struct eth_tx_bd *tx_bd = - &fp->tx_desc_ring[TX_DESC_CNT * i - 1]; - - tx_bd->addr_hi = - cpu_to_le32(U64_HI(fp->tx_desc_mapping + - BCM_PAGE_SIZE*(i % NUM_TX_RINGS))); - tx_bd->addr_lo = - cpu_to_le32(U64_LO(fp->tx_desc_mapping + - BCM_PAGE_SIZE*(i % NUM_TX_RINGS))); - } - - fp->tx_pkt_prod = 0; - fp->tx_pkt_cons = 0; - fp->tx_bd_prod = 0; - fp->tx_bd_cons = 0; - fp->tx_cons_sb = BNX2X_TX_SB_INDEX; - fp->tx_pkt = 0; - } -} - -static void bnx2x_init_sp_ring(struct bnx2x *bp) -{ - int port = bp->port; - - spin_lock_init(&bp->spq_lock); - - bp->spq_left = MAX_SPQ_PENDING; - bp->spq_prod_idx = 0; - bp->dsb_sp_prod = BNX2X_SP_DSB_INDEX; - bp->spq_prod_bd = bp->spq; - bp->spq_last_bd = bp->spq_prod_bd + MAX_SP_DESC_CNT; - - REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_SPQ_PAGE_BASE_OFFSET(port), - U64_LO(bp->spq_mapping)); - REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_SPQ_PAGE_BASE_OFFSET(port) + 4, - U64_HI(bp->spq_mapping)); - - REG_WR(bp, XSEM_REG_FAST_MEMORY + XSTORM_SPQ_PROD_OFFSET(port), - bp->spq_prod_idx); -} - -static void bnx2x_init_context(struct bnx2x *bp) -{ - int i; - - for_each_queue(bp, i) { - struct eth_context *context = bnx2x_sp(bp, context[i].eth); - struct bnx2x_fastpath *fp = &bp->fp[i]; - - context->xstorm_st_context.tx_bd_page_base_hi = - U64_HI(fp->tx_desc_mapping); - context->xstorm_st_context.tx_bd_page_base_lo = - U64_LO(fp->tx_desc_mapping); - context->xstorm_st_context.db_data_addr_hi = - U64_HI(fp->tx_prods_mapping); - context->xstorm_st_context.db_data_addr_lo = - U64_LO(fp->tx_prods_mapping); - - context->ustorm_st_context.rx_bd_page_base_hi = - U64_HI(fp->rx_desc_mapping); - context->ustorm_st_context.rx_bd_page_base_lo = - U64_LO(fp->rx_desc_mapping); - context->ustorm_st_context.status_block_id = i; - context->ustorm_st_context.sb_index_number = - HC_INDEX_U_ETH_RX_CQ_CONS; - context->ustorm_st_context.rcq_base_address_hi = - U64_HI(fp->rx_comp_mapping); - context->ustorm_st_context.rcq_base_address_lo = - U64_LO(fp->rx_comp_mapping); - context->ustorm_st_context.flags = - USTORM_ETH_ST_CONTEXT_ENABLE_MC_ALIGNMENT; - context->ustorm_st_context.mc_alignment_size = 64; - context->ustorm_st_context.num_rss = bp->num_queues; - - context->cstorm_st_context.sb_index_number = - HC_INDEX_C_ETH_TX_CQ_CONS; - context->cstorm_st_context.status_block_id = i; - - context->xstorm_ag_context.cdu_reserved = - CDU_RSRVD_VALUE_TYPE_A(HW_CID(bp, i), - CDU_REGION_NUMBER_XCM_AG, - ETH_CONNECTION_TYPE); - context->ustorm_ag_context.cdu_usage = - CDU_RSRVD_VALUE_TYPE_A(HW_CID(bp, i), - CDU_REGION_NUMBER_UCM_AG, - ETH_CONNECTION_TYPE); - } -} - -static void bnx2x_init_ind_table(struct bnx2x *bp) -{ - int port = bp->port; - int i; - - if (!is_multi(bp)) - return; - - for (i = 0; i < TSTORM_INDIRECTION_TABLE_SIZE; i++) - REG_WR8(bp, TSTORM_INDIRECTION_TABLE_OFFSET(port) + i, - i % bp->num_queues); - - REG_WR(bp, PRS_REG_A_PRSU_20, 0xf); -} - -static void bnx2x_set_client_config(struct bnx2x *bp) -{ -#ifdef BCM_VLAN - int mode = bp->rx_mode; -#endif - int i, port = bp->port; - struct tstorm_eth_client_config tstorm_client = {0}; - - tstorm_client.mtu = bp->dev->mtu; - tstorm_client.statistics_counter_id = 0; - tstorm_client.config_flags = - TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE; -#ifdef BCM_VLAN - if (mode && bp->vlgrp) { - tstorm_client.config_flags |= - TSTORM_ETH_CLIENT_CONFIG_VLAN_REMOVAL_ENABLE; - DP(NETIF_MSG_IFUP, "vlan removal enabled\n"); - } -#endif - if (mode != BNX2X_RX_MODE_PROMISC) - tstorm_client.drop_flags = - TSTORM_ETH_CLIENT_CONFIG_DROP_MAC_ERR; - - for_each_queue(bp, i) { - REG_WR(bp, BAR_TSTRORM_INTMEM + - TSTORM_CLIENT_CONFIG_OFFSET(port, i), - ((u32 *)&tstorm_client)[0]); - REG_WR(bp, BAR_TSTRORM_INTMEM + - TSTORM_CLIENT_CONFIG_OFFSET(port, i) + 4, - ((u32 *)&tstorm_client)[1]); - } - -/* DP(NETIF_MSG_IFUP, "tstorm_client: 0x%08x 0x%08x\n", - ((u32 *)&tstorm_client)[0], ((u32 *)&tstorm_client)[1]); */ -} - -static void bnx2x_set_storm_rx_mode(struct bnx2x *bp) -{ - int mode = bp->rx_mode; - int port = bp->port; - struct tstorm_eth_mac_filter_config tstorm_mac_filter = {0}; - int i; - - DP(NETIF_MSG_RX_STATUS, "rx mode is %d\n", mode); - - switch (mode) { - case BNX2X_RX_MODE_NONE: /* no Rx */ - tstorm_mac_filter.ucast_drop_all = 1; - tstorm_mac_filter.mcast_drop_all = 1; - tstorm_mac_filter.bcast_drop_all = 1; - break; - case BNX2X_RX_MODE_NORMAL: - tstorm_mac_filter.bcast_accept_all = 1; - break; - case BNX2X_RX_MODE_ALLMULTI: - tstorm_mac_filter.mcast_accept_all = 1; - tstorm_mac_filter.bcast_accept_all = 1; - break; - case BNX2X_RX_MODE_PROMISC: - tstorm_mac_filter.ucast_accept_all = 1; - tstorm_mac_filter.mcast_accept_all = 1; - tstorm_mac_filter.bcast_accept_all = 1; - break; - default: - BNX2X_ERR("bad rx mode (%d)\n", mode); - } - - for (i = 0; i < sizeof(struct tstorm_eth_mac_filter_config)/4; i++) { - REG_WR(bp, BAR_TSTRORM_INTMEM + - TSTORM_MAC_FILTER_CONFIG_OFFSET(port) + i * 4, - ((u32 *)&tstorm_mac_filter)[i]); - -/* DP(NETIF_MSG_IFUP, "tstorm_mac_filter[%d]: 0x%08x\n", i, - ((u32 *)&tstorm_mac_filter)[i]); */ - } - - if (mode != BNX2X_RX_MODE_NONE) - bnx2x_set_client_config(bp); -} - -static void bnx2x_init_internal(struct bnx2x *bp) -{ - int port = bp->port; - struct tstorm_eth_function_common_config tstorm_config = {0}; - struct stats_indication_flags stats_flags = {0}; - - if (is_multi(bp)) { - tstorm_config.config_flags = MULTI_FLAGS; - tstorm_config.rss_result_mask = MULTI_MASK; - } - - REG_WR(bp, BAR_TSTRORM_INTMEM + - TSTORM_FUNCTION_COMMON_CONFIG_OFFSET(port), - (*(u32 *)&tstorm_config)); - -/* DP(NETIF_MSG_IFUP, "tstorm_config: 0x%08x\n", - (*(u32 *)&tstorm_config)); */ - - bp->rx_mode = BNX2X_RX_MODE_NONE; /* no rx until link is up */ - bnx2x_set_storm_rx_mode(bp); - - stats_flags.collect_eth = cpu_to_le32(1); - - REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_STATS_FLAGS_OFFSET(port), - ((u32 *)&stats_flags)[0]); - REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_STATS_FLAGS_OFFSET(port) + 4, - ((u32 *)&stats_flags)[1]); - - REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_STATS_FLAGS_OFFSET(port), - ((u32 *)&stats_flags)[0]); - REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_STATS_FLAGS_OFFSET(port) + 4, - ((u32 *)&stats_flags)[1]); - - REG_WR(bp, BAR_CSTRORM_INTMEM + CSTORM_STATS_FLAGS_OFFSET(port), - ((u32 *)&stats_flags)[0]); - REG_WR(bp, BAR_CSTRORM_INTMEM + CSTORM_STATS_FLAGS_OFFSET(port) + 4, - ((u32 *)&stats_flags)[1]); - -/* DP(NETIF_MSG_IFUP, "stats_flags: 0x%08x 0x%08x\n", - ((u32 *)&stats_flags)[0], ((u32 *)&stats_flags)[1]); */ -} - -static void bnx2x_nic_init(struct bnx2x *bp) -{ - int i; - - for_each_queue(bp, i) { - struct bnx2x_fastpath *fp = &bp->fp[i]; - - fp->state = BNX2X_FP_STATE_CLOSED; - DP(NETIF_MSG_IFUP, "bnx2x_init_sb(%p,%p,%d);\n", - bp, fp->status_blk, i); - fp->index = i; - bnx2x_init_sb(bp, fp->status_blk, fp->status_blk_mapping, i); - } - - bnx2x_init_def_sb(bp, bp->def_status_blk, - bp->def_status_blk_mapping, 0x10); - bnx2x_update_coalesce(bp); - bnx2x_init_rx_rings(bp); - bnx2x_init_tx_ring(bp); - bnx2x_init_sp_ring(bp); - bnx2x_init_context(bp); - bnx2x_init_internal(bp); - bnx2x_init_stats(bp); - bnx2x_init_ind_table(bp); - bnx2x_int_enable(bp); - -} - -/* end of nic init */ - -/* - * gzip service functions - */ - -static int bnx2x_gunzip_init(struct bnx2x *bp) -{ - bp->gunzip_buf = pci_alloc_consistent(bp->pdev, FW_BUF_SIZE, - &bp->gunzip_mapping); - if (bp->gunzip_buf == NULL) - goto gunzip_nomem1; - - bp->strm = kmalloc(sizeof(*bp->strm), GFP_KERNEL); - if (bp->strm == NULL) - goto gunzip_nomem2; - - bp->strm->workspace = kmalloc(zlib_inflate_workspacesize(), - GFP_KERNEL); - if (bp->strm->workspace == NULL) - goto gunzip_nomem3; - - return 0; - -gunzip_nomem3: - kfree(bp->strm); - bp->strm = NULL; - -gunzip_nomem2: - pci_free_consistent(bp->pdev, FW_BUF_SIZE, bp->gunzip_buf, - bp->gunzip_mapping); - bp->gunzip_buf = NULL; - -gunzip_nomem1: - printk(KERN_ERR PFX "%s: Cannot allocate firmware buffer for" - " uncompression\n", bp->dev->name); - return -ENOMEM; -} - -static void bnx2x_gunzip_end(struct bnx2x *bp) -{ - kfree(bp->strm->workspace); - - kfree(bp->strm); - bp->strm = NULL; - - if (bp->gunzip_buf) { - pci_free_consistent(bp->pdev, FW_BUF_SIZE, bp->gunzip_buf, - bp->gunzip_mapping); - bp->gunzip_buf = NULL; - } -} - -static int bnx2x_gunzip(struct bnx2x *bp, u8 *zbuf, int len) -{ - int n, rc; - - /* check gzip header */ - if ((zbuf[0] != 0x1f) || (zbuf[1] != 0x8b) || (zbuf[2] != Z_DEFLATED)) - return -EINVAL; - - n = 10; - -#define FNAME 0x8 - - if (zbuf[3] & FNAME) - while ((zbuf[n++] != 0) && (n < len)); - - bp->strm->next_in = zbuf + n; - bp->strm->avail_in = len - n; - bp->strm->next_out = bp->gunzip_buf; - bp->strm->avail_out = FW_BUF_SIZE; - - rc = zlib_inflateInit2(bp->strm, -MAX_WBITS); - if (rc != Z_OK) - return rc; - - rc = zlib_inflate(bp->strm, Z_FINISH); - if ((rc != Z_OK) && (rc != Z_STREAM_END)) - printk(KERN_ERR PFX "%s: Firmware decompression error: %s\n", - bp->dev->name, bp->strm->msg); - - bp->gunzip_outlen = (FW_BUF_SIZE - bp->strm->avail_out); - if (bp->gunzip_outlen & 0x3) - printk(KERN_ERR PFX "%s: Firmware decompression error:" - " gunzip_outlen (%d) not aligned\n", - bp->dev->name, bp->gunzip_outlen); - bp->gunzip_outlen >>= 2; - - zlib_inflateEnd(bp->strm); - - if (rc == Z_STREAM_END) - return 0; - - return rc; -} - -/* nic load/unload */ - -/* - * general service functions - */ - -/* send a NIG loopback debug packet */ -static void bnx2x_lb_pckt(struct bnx2x *bp) -{ -#ifdef USE_DMAE - u32 wb_write[3]; -#endif - - /* Ethernet source and destination addresses */ -#ifdef USE_DMAE - wb_write[0] = 0x55555555; - wb_write[1] = 0x55555555; - wb_write[2] = 0x20; /* SOP */ - REG_WR_DMAE(bp, NIG_REG_DEBUG_PACKET_LB, wb_write, 3); -#else - REG_WR_IND(bp, NIG_REG_DEBUG_PACKET_LB, 0x55555555); - REG_WR_IND(bp, NIG_REG_DEBUG_PACKET_LB + 4, 0x55555555); - /* SOP */ - REG_WR_IND(bp, NIG_REG_DEBUG_PACKET_LB + 8, 0x20); -#endif - - /* NON-IP protocol */ -#ifdef USE_DMAE - wb_write[0] = 0x09000000; - wb_write[1] = 0x55555555; - wb_write[2] = 0x10; /* EOP, eop_bvalid = 0 */ - REG_WR_DMAE(bp, NIG_REG_DEBUG_PACKET_LB, wb_write, 3); -#else - REG_WR_IND(bp, NIG_REG_DEBUG_PACKET_LB, 0x09000000); - REG_WR_IND(bp, NIG_REG_DEBUG_PACKET_LB + 4, 0x55555555); - /* EOP, eop_bvalid = 0 */ - REG_WR_IND(bp, NIG_REG_DEBUG_PACKET_LB + 8, 0x10); -#endif -} - -/* some of the internal memories - * are not directly readable from the driver - * to test them we send debug packets - */ -static int bnx2x_int_mem_test(struct bnx2x *bp) -{ - int factor; - int count, i; - u32 val = 0; - - switch (CHIP_REV(bp)) { - case CHIP_REV_EMUL: - factor = 200; - break; - case CHIP_REV_FPGA: - factor = 120; - break; - default: - factor = 1; - break; - } - - DP(NETIF_MSG_HW, "start part1\n"); - - /* Disable inputs of parser neighbor blocks */ - REG_WR(bp, TSDM_REG_ENABLE_IN1, 0x0); - REG_WR(bp, TCM_REG_PRS_IFEN, 0x0); - REG_WR(bp, CFC_REG_DEBUG0, 0x1); - NIG_WR(NIG_REG_PRS_REQ_IN_EN, 0x0); - - /* Write 0 to parser credits for CFC search request */ - REG_WR(bp, PRS_REG_CFC_SEARCH_INITIAL_CREDIT, 0x0); - - /* send Ethernet packet */ - bnx2x_lb_pckt(bp); - - /* TODO do i reset NIG statistic? */ - /* Wait until NIG register shows 1 packet of size 0x10 */ - count = 1000 * factor; - while (count) { -#ifdef BNX2X_DMAE_RD - bnx2x_read_dmae(bp, NIG_REG_STAT2_BRB_OCTET, 2); - val = *bnx2x_sp(bp, wb_data[0]); -#else - val = REG_RD(bp, NIG_REG_STAT2_BRB_OCTET); - REG_RD(bp, NIG_REG_STAT2_BRB_OCTET + 4); -#endif - if (val == 0x10) - break; - - msleep(10); - count--; - } - if (val != 0x10) { - BNX2X_ERR("NIG timeout val = 0x%x\n", val); - return -1; - } - - /* Wait until PRS register shows 1 packet */ - count = 1000 * factor; - while (count) { - val = REG_RD(bp, PRS_REG_NUM_OF_PACKETS); - - if (val == 1) - break; - - msleep(10); - count--; - } - if (val != 0x1) { - BNX2X_ERR("PRS timeout val = 0x%x\n", val); - return -2; - } - - /* Reset and init BRB, PRS */ - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, 0x3); - msleep(50); - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0x3); - msleep(50); - bnx2x_init_block(bp, BRB1_COMMON_START, BRB1_COMMON_END); - bnx2x_init_block(bp, PRS_COMMON_START, PRS_COMMON_END); - - DP(NETIF_MSG_HW, "part2\n"); - - /* Disable inputs of parser neighbor blocks */ - REG_WR(bp, TSDM_REG_ENABLE_IN1, 0x0); - REG_WR(bp, TCM_REG_PRS_IFEN, 0x0); - REG_WR(bp, CFC_REG_DEBUG0, 0x1); - NIG_WR(NIG_REG_PRS_REQ_IN_EN, 0x0); - - /* Write 0 to parser credits for CFC search request */ - REG_WR(bp, PRS_REG_CFC_SEARCH_INITIAL_CREDIT, 0x0); - - /* send 10 Ethernet packets */ - for (i = 0; i < 10; i++) - bnx2x_lb_pckt(bp); - - /* Wait until NIG register shows 10 + 1 - packets of size 11*0x10 = 0xb0 */ - count = 1000 * factor; - while (count) { -#ifdef BNX2X_DMAE_RD - bnx2x_read_dmae(bp, NIG_REG_STAT2_BRB_OCTET, 2); - val = *bnx2x_sp(bp, wb_data[0]); -#else - val = REG_RD(bp, NIG_REG_STAT2_BRB_OCTET); - REG_RD(bp, NIG_REG_STAT2_BRB_OCTET + 4); -#endif - if (val == 0xb0) - break; - - msleep(10); - count--; - } - if (val != 0xb0) { - BNX2X_ERR("NIG timeout val = 0x%x\n", val); - return -3; - } - - /* Wait until PRS register shows 2 packets */ - val = REG_RD(bp, PRS_REG_NUM_OF_PACKETS); - if (val != 2) - BNX2X_ERR("PRS timeout val = 0x%x\n", val); - - /* Write 1 to parser credits for CFC search request */ - REG_WR(bp, PRS_REG_CFC_SEARCH_INITIAL_CREDIT, 0x1); - - /* Wait until PRS register shows 3 packets */ - msleep(10 * factor); - /* Wait until NIG register shows 1 packet of size 0x10 */ - val = REG_RD(bp, PRS_REG_NUM_OF_PACKETS); - if (val != 3) - BNX2X_ERR("PRS timeout val = 0x%x\n", val); - - /* clear NIG EOP FIFO */ - for (i = 0; i < 11; i++) - REG_RD(bp, NIG_REG_INGRESS_EOP_LB_FIFO); - val = REG_RD(bp, NIG_REG_INGRESS_EOP_LB_EMPTY); - if (val != 1) { - BNX2X_ERR("clear of NIG failed\n"); - return -4; - } - - /* Reset and init BRB, PRS, NIG */ - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, 0x03); - msleep(50); - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0x03); - msleep(50); - bnx2x_init_block(bp, BRB1_COMMON_START, BRB1_COMMON_END); - bnx2x_init_block(bp, PRS_COMMON_START, PRS_COMMON_END); -#ifndef BCM_ISCSI - /* set NIC mode */ - REG_WR(bp, PRS_REG_NIC_MODE, 1); -#endif - - /* Enable inputs of parser neighbor blocks */ - REG_WR(bp, TSDM_REG_ENABLE_IN1, 0x7fffffff); - REG_WR(bp, TCM_REG_PRS_IFEN, 0x1); - REG_WR(bp, CFC_REG_DEBUG0, 0x0); - NIG_WR(NIG_REG_PRS_REQ_IN_EN, 0x1); - - DP(NETIF_MSG_HW, "done\n"); - - return 0; /* OK */ -} - -static void enable_blocks_attention(struct bnx2x *bp) -{ - REG_WR(bp, PXP_REG_PXP_INT_MASK_0, 0); - REG_WR(bp, PXP_REG_PXP_INT_MASK_1, 0); - REG_WR(bp, DORQ_REG_DORQ_INT_MASK, 0); - REG_WR(bp, CFC_REG_CFC_INT_MASK, 0); - REG_WR(bp, QM_REG_QM_INT_MASK, 0); - REG_WR(bp, TM_REG_TM_INT_MASK, 0); - REG_WR(bp, XSDM_REG_XSDM_INT_MASK_0, 0); - REG_WR(bp, XSDM_REG_XSDM_INT_MASK_1, 0); - REG_WR(bp, XCM_REG_XCM_INT_MASK, 0); -/* REG_WR(bp, XSEM_REG_XSEM_INT_MASK_0, 0); */ -/* REG_WR(bp, XSEM_REG_XSEM_INT_MASK_1, 0); */ - REG_WR(bp, USDM_REG_USDM_INT_MASK_0, 0); - REG_WR(bp, USDM_REG_USDM_INT_MASK_1, 0); - REG_WR(bp, UCM_REG_UCM_INT_MASK, 0); -/* REG_WR(bp, USEM_REG_USEM_INT_MASK_0, 0); */ -/* REG_WR(bp, USEM_REG_USEM_INT_MASK_1, 0); */ - REG_WR(bp, GRCBASE_UPB + PB_REG_PB_INT_MASK, 0); - REG_WR(bp, CSDM_REG_CSDM_INT_MASK_0, 0); - REG_WR(bp, CSDM_REG_CSDM_INT_MASK_1, 0); - REG_WR(bp, CCM_REG_CCM_INT_MASK, 0); -/* REG_WR(bp, CSEM_REG_CSEM_INT_MASK_0, 0); */ -/* REG_WR(bp, CSEM_REG_CSEM_INT_MASK_1, 0); */ - REG_WR(bp, PXP2_REG_PXP2_INT_MASK, 0x480000); - REG_WR(bp, TSDM_REG_TSDM_INT_MASK_0, 0); - REG_WR(bp, TSDM_REG_TSDM_INT_MASK_1, 0); - REG_WR(bp, TCM_REG_TCM_INT_MASK, 0); -/* REG_WR(bp, TSEM_REG_TSEM_INT_MASK_0, 0); */ -/* REG_WR(bp, TSEM_REG_TSEM_INT_MASK_1, 0); */ - REG_WR(bp, CDU_REG_CDU_INT_MASK, 0); - REG_WR(bp, DMAE_REG_DMAE_INT_MASK, 0); -/* REG_WR(bp, MISC_REG_MISC_INT_MASK, 0); */ - REG_WR(bp, PBF_REG_PBF_INT_MASK, 0X18); /* bit 3,4 masked */ -} - -static int bnx2x_function_init(struct bnx2x *bp, int mode) -{ - int func = bp->port; - int port = func ? PORT1 : PORT0; - u32 val, i; -#ifdef USE_DMAE - u32 wb_write[2]; -#endif - - DP(BNX2X_MSG_MCP, "function is %d mode is %x\n", func, mode); - if ((func != 0) && (func != 1)) { - BNX2X_ERR("BAD function number (%d)\n", func); - return -ENODEV; - } - - bnx2x_gunzip_init(bp); - - if (mode & 0x1) { /* init common */ - DP(BNX2X_MSG_MCP, "starting common init func %d mode %x\n", - func, mode); - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, - 0xffffffff); - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, - 0xfffc); - bnx2x_init_block(bp, MISC_COMMON_START, MISC_COMMON_END); - - REG_WR(bp, MISC_REG_LCPLL_CTRL_REG_2, 0x100); - msleep(30); - REG_WR(bp, MISC_REG_LCPLL_CTRL_REG_2, 0x0); - - bnx2x_init_block(bp, PXP_COMMON_START, PXP_COMMON_END); - bnx2x_init_block(bp, PXP2_COMMON_START, PXP2_COMMON_END); - - bnx2x_init_pxp(bp); - - if (CHIP_REV(bp) == CHIP_REV_Ax) { - /* enable HW interrupt from PXP on USDM - overflow bit 16 on INT_MASK_0 */ - REG_WR(bp, PXP_REG_PXP_INT_MASK_0, 0); - } - -#ifdef __BIG_ENDIAN - REG_WR(bp, PXP2_REG_RQ_QM_ENDIAN_M, 1); - REG_WR(bp, PXP2_REG_RQ_TM_ENDIAN_M, 1); - REG_WR(bp, PXP2_REG_RQ_SRC_ENDIAN_M, 1); - REG_WR(bp, PXP2_REG_RQ_CDU_ENDIAN_M, 1); - REG_WR(bp, PXP2_REG_RQ_DBG_ENDIAN_M, 1); - REG_WR(bp, PXP2_REG_RQ_HC_ENDIAN_M, 1); - -/* REG_WR(bp, PXP2_REG_RD_PBF_SWAP_MODE, 1); */ - REG_WR(bp, PXP2_REG_RD_QM_SWAP_MODE, 1); - REG_WR(bp, PXP2_REG_RD_TM_SWAP_MODE, 1); - REG_WR(bp, PXP2_REG_RD_SRC_SWAP_MODE, 1); - REG_WR(bp, PXP2_REG_RD_CDURD_SWAP_MODE, 1); -#endif - -#ifndef BCM_ISCSI - /* set NIC mode */ - REG_WR(bp, PRS_REG_NIC_MODE, 1); -#endif - - REG_WR(bp, PXP2_REG_RQ_CDU_P_SIZE, 5); -#ifdef BCM_ISCSI - REG_WR(bp, PXP2_REG_RQ_TM_P_SIZE, 5); - REG_WR(bp, PXP2_REG_RQ_QM_P_SIZE, 5); - REG_WR(bp, PXP2_REG_RQ_SRC_P_SIZE, 5); -#endif - - bnx2x_init_block(bp, DMAE_COMMON_START, DMAE_COMMON_END); - - /* let the HW do it's magic ... */ - msleep(100); - /* finish PXP init - (can be moved up if we want to use the DMAE) */ - val = REG_RD(bp, PXP2_REG_RQ_CFG_DONE); - if (val != 1) { - BNX2X_ERR("PXP2 CFG failed\n"); - return -EBUSY; - } - - val = REG_RD(bp, PXP2_REG_RD_INIT_DONE); - if (val != 1) { - BNX2X_ERR("PXP2 RD_INIT failed\n"); - return -EBUSY; - } - - REG_WR(bp, PXP2_REG_RQ_DISABLE_INPUTS, 0); - REG_WR(bp, PXP2_REG_RD_DISABLE_INPUTS, 0); - - bnx2x_init_fill(bp, TSEM_REG_PRAM, 0, 8); - - bnx2x_init_block(bp, TCM_COMMON_START, TCM_COMMON_END); - bnx2x_init_block(bp, UCM_COMMON_START, UCM_COMMON_END); - bnx2x_init_block(bp, CCM_COMMON_START, CCM_COMMON_END); - bnx2x_init_block(bp, XCM_COMMON_START, XCM_COMMON_END); - -#ifdef BNX2X_DMAE_RD - bnx2x_read_dmae(bp, XSEM_REG_PASSIVE_BUFFER, 3); - bnx2x_read_dmae(bp, CSEM_REG_PASSIVE_BUFFER, 3); - bnx2x_read_dmae(bp, TSEM_REG_PASSIVE_BUFFER, 3); - bnx2x_read_dmae(bp, USEM_REG_PASSIVE_BUFFER, 3); -#else - REG_RD(bp, XSEM_REG_PASSIVE_BUFFER); - REG_RD(bp, XSEM_REG_PASSIVE_BUFFER + 4); - REG_RD(bp, XSEM_REG_PASSIVE_BUFFER + 8); - REG_RD(bp, CSEM_REG_PASSIVE_BUFFER); - REG_RD(bp, CSEM_REG_PASSIVE_BUFFER + 4); - REG_RD(bp, CSEM_REG_PASSIVE_BUFFER + 8); - REG_RD(bp, TSEM_REG_PASSIVE_BUFFER); - REG_RD(bp, TSEM_REG_PASSIVE_BUFFER + 4); - REG_RD(bp, TSEM_REG_PASSIVE_BUFFER + 8); - REG_RD(bp, USEM_REG_PASSIVE_BUFFER); - REG_RD(bp, USEM_REG_PASSIVE_BUFFER + 4); - REG_RD(bp, USEM_REG_PASSIVE_BUFFER + 8); -#endif - bnx2x_init_block(bp, QM_COMMON_START, QM_COMMON_END); - /* soft reset pulse */ - REG_WR(bp, QM_REG_SOFT_RESET, 1); - REG_WR(bp, QM_REG_SOFT_RESET, 0); - -#ifdef BCM_ISCSI - bnx2x_init_block(bp, TIMERS_COMMON_START, TIMERS_COMMON_END); -#endif - bnx2x_init_block(bp, DQ_COMMON_START, DQ_COMMON_END); - REG_WR(bp, DORQ_REG_DPM_CID_OFST, BCM_PAGE_BITS); - if (CHIP_REV(bp) == CHIP_REV_Ax) { - /* enable hw interrupt from doorbell Q */ - REG_WR(bp, DORQ_REG_DORQ_INT_MASK, 0); - } - - bnx2x_init_block(bp, BRB1_COMMON_START, BRB1_COMMON_END); - - if (CHIP_REV_IS_SLOW(bp)) { - /* fix for emulation and FPGA for no pause */ - REG_WR(bp, BRB1_REG_PAUSE_HIGH_THRESHOLD_0, 513); - REG_WR(bp, BRB1_REG_PAUSE_HIGH_THRESHOLD_1, 513); - REG_WR(bp, BRB1_REG_PAUSE_LOW_THRESHOLD_0, 0); - REG_WR(bp, BRB1_REG_PAUSE_LOW_THRESHOLD_1, 0); - } - - bnx2x_init_block(bp, PRS_COMMON_START, PRS_COMMON_END); - - bnx2x_init_block(bp, TSDM_COMMON_START, TSDM_COMMON_END); - bnx2x_init_block(bp, CSDM_COMMON_START, CSDM_COMMON_END); - bnx2x_init_block(bp, USDM_COMMON_START, USDM_COMMON_END); - bnx2x_init_block(bp, XSDM_COMMON_START, XSDM_COMMON_END); - - bnx2x_init_fill(bp, TSTORM_INTMEM_ADDR, 0, STORM_INTMEM_SIZE); - bnx2x_init_fill(bp, CSTORM_INTMEM_ADDR, 0, STORM_INTMEM_SIZE); - bnx2x_init_fill(bp, XSTORM_INTMEM_ADDR, 0, STORM_INTMEM_SIZE); - bnx2x_init_fill(bp, USTORM_INTMEM_ADDR, 0, STORM_INTMEM_SIZE); - - bnx2x_init_block(bp, TSEM_COMMON_START, TSEM_COMMON_END); - bnx2x_init_block(bp, USEM_COMMON_START, USEM_COMMON_END); - bnx2x_init_block(bp, CSEM_COMMON_START, CSEM_COMMON_END); - bnx2x_init_block(bp, XSEM_COMMON_START, XSEM_COMMON_END); - - /* sync semi rtc */ - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, - 0x80000000); - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, - 0x80000000); - - bnx2x_init_block(bp, UPB_COMMON_START, UPB_COMMON_END); - bnx2x_init_block(bp, XPB_COMMON_START, XPB_COMMON_END); - bnx2x_init_block(bp, PBF_COMMON_START, PBF_COMMON_END); - - REG_WR(bp, SRC_REG_SOFT_RST, 1); - for (i = SRC_REG_KEYRSS0_0; i <= SRC_REG_KEYRSS1_9; i += 4) { - REG_WR(bp, i, 0xc0cac01a); - /* TODO: replace with something meaningful */ - } - /* SRCH COMMON comes here */ - REG_WR(bp, SRC_REG_SOFT_RST, 0); - - if (sizeof(union cdu_context) != 1024) { - /* we currently assume that a context is 1024 bytes */ - printk(KERN_ALERT PFX "please adjust the size of" - " cdu_context(%ld)\n", - (long)sizeof(union cdu_context)); - } - val = (4 << 24) + (0 << 12) + 1024; - REG_WR(bp, CDU_REG_CDU_GLOBAL_PARAMS, val); - bnx2x_init_block(bp, CDU_COMMON_START, CDU_COMMON_END); - - bnx2x_init_block(bp, CFC_COMMON_START, CFC_COMMON_END); - REG_WR(bp, CFC_REG_INIT_REG, 0x7FF); - - bnx2x_init_block(bp, HC_COMMON_START, HC_COMMON_END); - bnx2x_init_block(bp, MISC_AEU_COMMON_START, - MISC_AEU_COMMON_END); - /* RXPCS COMMON comes here */ - /* EMAC0 COMMON comes here */ - /* EMAC1 COMMON comes here */ - /* DBU COMMON comes here */ - /* DBG COMMON comes here */ - bnx2x_init_block(bp, NIG_COMMON_START, NIG_COMMON_END); - - if (CHIP_REV_IS_SLOW(bp)) - msleep(200); - - /* finish CFC init */ - val = REG_RD(bp, CFC_REG_LL_INIT_DONE); - if (val != 1) { - BNX2X_ERR("CFC LL_INIT failed\n"); - return -EBUSY; - } - - val = REG_RD(bp, CFC_REG_AC_INIT_DONE); - if (val != 1) { - BNX2X_ERR("CFC AC_INIT failed\n"); - return -EBUSY; - } - - val = REG_RD(bp, CFC_REG_CAM_INIT_DONE); - if (val != 1) { - BNX2X_ERR("CFC CAM_INIT failed\n"); - return -EBUSY; - } - - REG_WR(bp, CFC_REG_DEBUG0, 0); - - /* read NIG statistic - to see if this is our first up since powerup */ -#ifdef BNX2X_DMAE_RD - bnx2x_read_dmae(bp, NIG_REG_STAT2_BRB_OCTET, 2); - val = *bnx2x_sp(bp, wb_data[0]); -#else - val = REG_RD(bp, NIG_REG_STAT2_BRB_OCTET); - REG_RD(bp, NIG_REG_STAT2_BRB_OCTET + 4); -#endif - /* do internal memory self test */ - if ((val == 0) && bnx2x_int_mem_test(bp)) { - BNX2X_ERR("internal mem selftest failed\n"); - return -EBUSY; - } - - /* clear PXP2 attentions */ - REG_RD(bp, PXP2_REG_PXP2_INT_STS_CLR); - - enable_blocks_attention(bp); - /* enable_blocks_parity(bp); */ - - switch (bp->board & SHARED_HW_CFG_BOARD_TYPE_MASK) { - case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1022G: - /* Fan failure is indicated by SPIO 5 */ - bnx2x_set_spio(bp, MISC_REGISTERS_SPIO_5, - MISC_REGISTERS_SPIO_INPUT_HI_Z); - - /* set to active low mode */ - val = REG_RD(bp, MISC_REG_SPIO_INT); - val |= ((1 << MISC_REGISTERS_SPIO_5) << - MISC_REGISTERS_SPIO_INT_OLD_SET_POS); - REG_WR(bp, MISC_REG_SPIO_INT, val); - - /* enable interrupt to signal the IGU */ - val = REG_RD(bp, MISC_REG_SPIO_EVENT_EN); - val |= (1 << MISC_REGISTERS_SPIO_5); - REG_WR(bp, MISC_REG_SPIO_EVENT_EN, val); - break; - - default: - break; - } - - } /* end of common init */ - - /* per port init */ - - /* the phys address is shifted right 12 bits and has an added - 1=valid bit added to the 53rd bit - then since this is a wide register(TM) - we split it into two 32 bit writes - */ -#define RQ_ONCHIP_AT_PORT_SIZE 384 -#define ONCHIP_ADDR1(x) ((u32)(((u64)x >> 12) & 0xFFFFFFFF)) -#define ONCHIP_ADDR2(x) ((u32)((1 << 20) | ((u64)x >> 44))) -#define PXP_ONE_ILT(x) ((x << 10) | x) - - DP(BNX2X_MSG_MCP, "starting per-function init port is %x\n", func); - - REG_WR(bp, NIG_REG_MASK_INTERRUPT_PORT0 + func*4, 0); - - /* Port PXP comes here */ - /* Port PXP2 comes here */ - - /* Offset is - * Port0 0 - * Port1 384 */ - i = func * RQ_ONCHIP_AT_PORT_SIZE; -#ifdef USE_DMAE - wb_write[0] = ONCHIP_ADDR1(bnx2x_sp_mapping(bp, context)); - wb_write[1] = ONCHIP_ADDR2(bnx2x_sp_mapping(bp, context)); - REG_WR_DMAE(bp, PXP2_REG_RQ_ONCHIP_AT + i*8, wb_write, 2); -#else - REG_WR_IND(bp, PXP2_REG_RQ_ONCHIP_AT + i*8, - ONCHIP_ADDR1(bnx2x_sp_mapping(bp, context))); - REG_WR_IND(bp, PXP2_REG_RQ_ONCHIP_AT + i*8 + 4, - ONCHIP_ADDR2(bnx2x_sp_mapping(bp, context))); -#endif - REG_WR(bp, PXP2_REG_PSWRQ_CDU0_L2P + func*4, PXP_ONE_ILT(i)); - -#ifdef BCM_ISCSI - /* Port0 1 - * Port1 385 */ - i++; - wb_write[0] = ONCHIP_ADDR1(bp->timers_mapping); - wb_write[1] = ONCHIP_ADDR2(bp->timers_mapping); - REG_WR_DMAE(bp, PXP2_REG_RQ_ONCHIP_AT + i*8, wb_write, 2); - REG_WR(bp, PXP2_REG_PSWRQ_TM0_L2P + func*4, PXP_ONE_ILT(i)); - - /* Port0 2 - * Port1 386 */ - i++; - wb_write[0] = ONCHIP_ADDR1(bp->qm_mapping); - wb_write[1] = ONCHIP_ADDR2(bp->qm_mapping); - REG_WR_DMAE(bp, PXP2_REG_RQ_ONCHIP_AT + i*8, wb_write, 2); - REG_WR(bp, PXP2_REG_PSWRQ_QM0_L2P + func*4, PXP_ONE_ILT(i)); - - /* Port0 3 - * Port1 387 */ - i++; - wb_write[0] = ONCHIP_ADDR1(bp->t1_mapping); - wb_write[1] = ONCHIP_ADDR2(bp->t1_mapping); - REG_WR_DMAE(bp, PXP2_REG_RQ_ONCHIP_AT + i*8, wb_write, 2); - REG_WR(bp, PXP2_REG_PSWRQ_SRC0_L2P + func*4, PXP_ONE_ILT(i)); -#endif - - /* Port TCM comes here */ - /* Port UCM comes here */ - /* Port CCM comes here */ - bnx2x_init_block(bp, func ? XCM_PORT1_START : XCM_PORT0_START, - func ? XCM_PORT1_END : XCM_PORT0_END); - -#ifdef USE_DMAE - wb_write[0] = 0; - wb_write[1] = 0; -#endif - for (i = 0; i < 32; i++) { - REG_WR(bp, QM_REG_BASEADDR + (func*32 + i)*4, 1024 * 4 * i); -#ifdef USE_DMAE - REG_WR_DMAE(bp, QM_REG_PTRTBL + (func*32 + i)*8, wb_write, 2); -#else - REG_WR_IND(bp, QM_REG_PTRTBL + (func*32 + i)*8, 0); - REG_WR_IND(bp, QM_REG_PTRTBL + (func*32 + i)*8 + 4, 0); -#endif - } - REG_WR(bp, QM_REG_CONNNUM_0 + func*4, 1024/16 - 1); - - /* Port QM comes here */ - -#ifdef BCM_ISCSI - REG_WR(bp, TM_REG_LIN0_SCAN_TIME + func*4, 1024/64*20); - REG_WR(bp, TM_REG_LIN0_MAX_ACTIVE_CID + func*4, 31); - - bnx2x_init_block(bp, func ? TIMERS_PORT1_START : TIMERS_PORT0_START, - func ? TIMERS_PORT1_END : TIMERS_PORT0_END); -#endif - /* Port DQ comes here */ - /* Port BRB1 comes here */ - bnx2x_init_block(bp, func ? PRS_PORT1_START : PRS_PORT0_START, - func ? PRS_PORT1_END : PRS_PORT0_END); - /* Port TSDM comes here */ - /* Port CSDM comes here */ - /* Port USDM comes here */ - /* Port XSDM comes here */ - bnx2x_init_block(bp, func ? TSEM_PORT1_START : TSEM_PORT0_START, - func ? TSEM_PORT1_END : TSEM_PORT0_END); - bnx2x_init_block(bp, func ? USEM_PORT1_START : USEM_PORT0_START, - func ? USEM_PORT1_END : USEM_PORT0_END); - bnx2x_init_block(bp, func ? CSEM_PORT1_START : CSEM_PORT0_START, - func ? CSEM_PORT1_END : CSEM_PORT0_END); - bnx2x_init_block(bp, func ? XSEM_PORT1_START : XSEM_PORT0_START, - func ? XSEM_PORT1_END : XSEM_PORT0_END); - /* Port UPB comes here */ - /* Port XSDM comes here */ - bnx2x_init_block(bp, func ? PBF_PORT1_START : PBF_PORT0_START, - func ? PBF_PORT1_END : PBF_PORT0_END); - - /* configure PBF to work without PAUSE mtu 9000 */ - REG_WR(bp, PBF_REG_P0_PAUSE_ENABLE + func*4, 0); - - /* update threshold */ - REG_WR(bp, PBF_REG_P0_ARB_THRSH + func*4, (9040/16)); - /* update init credit */ - REG_WR(bp, PBF_REG_P0_INIT_CRD + func*4, (9040/16) + 553 - 22); - - /* probe changes */ - REG_WR(bp, PBF_REG_INIT_P0 + func*4, 1); - msleep(5); - REG_WR(bp, PBF_REG_INIT_P0 + func*4, 0); - -#ifdef BCM_ISCSI - /* tell the searcher where the T2 table is */ - REG_WR(bp, SRC_REG_COUNTFREE0 + func*4, 16*1024/64); - - wb_write[0] = U64_LO(bp->t2_mapping); - wb_write[1] = U64_HI(bp->t2_mapping); - REG_WR_DMAE(bp, SRC_REG_FIRSTFREE0 + func*4, wb_write, 2); - wb_write[0] = U64_LO((u64)bp->t2_mapping + 16*1024 - 64); - wb_write[1] = U64_HI((u64)bp->t2_mapping + 16*1024 - 64); - REG_WR_DMAE(bp, SRC_REG_LASTFREE0 + func*4, wb_write, 2); - - REG_WR(bp, SRC_REG_NUMBER_HASH_BITS0 + func*4, 10); - /* Port SRCH comes here */ -#endif - /* Port CDU comes here */ - /* Port CFC comes here */ - bnx2x_init_block(bp, func ? HC_PORT1_START : HC_PORT0_START, - func ? HC_PORT1_END : HC_PORT0_END); - bnx2x_init_block(bp, func ? MISC_AEU_PORT1_START : - MISC_AEU_PORT0_START, - func ? MISC_AEU_PORT1_END : MISC_AEU_PORT0_END); - /* Port PXPCS comes here */ - /* Port EMAC0 comes here */ - /* Port EMAC1 comes here */ - /* Port DBU comes here */ - /* Port DBG comes here */ - bnx2x_init_block(bp, func ? NIG_PORT1_START : NIG_PORT0_START, - func ? NIG_PORT1_END : NIG_PORT0_END); - REG_WR(bp, NIG_REG_XGXS_SERDES0_MODE_SEL + func*4, 1); - /* Port MCP comes here */ - /* Port DMAE comes here */ - - switch (bp->board & SHARED_HW_CFG_BOARD_TYPE_MASK) { - case SHARED_HW_CFG_BOARD_TYPE_BCM957710A1022G: - /* add SPIO 5 to group 0 */ - val = REG_RD(bp, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); - val |= AEU_INPUTS_ATTN_BITS_SPIO5; - REG_WR(bp, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0, val); - break; - - default: - break; - } - - bnx2x_link_reset(bp); - - /* Reset PCIE errors for debug */ - REG_WR(bp, 0x2114, 0xffffffff); - REG_WR(bp, 0x2120, 0xffffffff); - REG_WR(bp, 0x2814, 0xffffffff); - - /* !!! move to init_values.h */ - REG_WR(bp, XSDM_REG_INIT_CREDIT_PXP_CTRL, 0x1); - REG_WR(bp, USDM_REG_INIT_CREDIT_PXP_CTRL, 0x1); - REG_WR(bp, CSDM_REG_INIT_CREDIT_PXP_CTRL, 0x1); - REG_WR(bp, TSDM_REG_INIT_CREDIT_PXP_CTRL, 0x1); - - REG_WR(bp, DBG_REG_PCI_REQ_CREDIT, 0x1); - REG_WR(bp, TM_REG_PCIARB_CRDCNT_VAL, 0x1); - REG_WR(bp, CDU_REG_CDU_DEBUG, 0x264); - REG_WR(bp, CDU_REG_CDU_DEBUG, 0x0); - - bnx2x_gunzip_end(bp); - - if (!nomcp) { - port = bp->port; - - bp->fw_drv_pulse_wr_seq = - (SHMEM_RD(bp, func_mb[port].drv_pulse_mb) & - DRV_PULSE_SEQ_MASK); - bp->fw_mb = SHMEM_RD(bp, func_mb[port].fw_mb_param); - DP(BNX2X_MSG_MCP, "drv_pulse 0x%x fw_mb 0x%x\n", - bp->fw_drv_pulse_wr_seq, bp->fw_mb); - } else { - bp->fw_mb = 0; - } - - return 0; -} - -/* send the MCP a request, block until there is a reply */ -static u32 bnx2x_fw_command(struct bnx2x *bp, u32 command) -{ - int port = bp->port; - u32 seq = ++bp->fw_seq; - u32 rc = 0; - - SHMEM_WR(bp, func_mb[port].drv_mb_header, (command | seq)); - DP(BNX2X_MSG_MCP, "wrote command (%x) to FW MB\n", (command | seq)); - - /* let the FW do it's magic ... */ - msleep(100); /* TBD */ - - if (CHIP_REV_IS_SLOW(bp)) - msleep(900); - - rc = SHMEM_RD(bp, func_mb[port].fw_mb_header); - DP(BNX2X_MSG_MCP, "read (%x) seq is (%x) from FW MB\n", rc, seq); - - /* is this a reply to our command? */ - if (seq == (rc & FW_MSG_SEQ_NUMBER_MASK)) { - rc &= FW_MSG_CODE_MASK; - - } else { - /* FW BUG! */ - BNX2X_ERR("FW failed to respond!\n"); - bnx2x_fw_dump(bp); - rc = 0; - } - - return rc; -} - -static void bnx2x_free_mem(struct bnx2x *bp) -{ - -#define BNX2X_PCI_FREE(x, y, size) \ - do { \ - if (x) { \ - pci_free_consistent(bp->pdev, size, x, y); \ - x = NULL; \ - y = 0; \ - } \ - } while (0) - -#define BNX2X_FREE(x) \ - do { \ - if (x) { \ - vfree(x); \ - x = NULL; \ - } \ - } while (0) - - int i; - - /* fastpath */ - for_each_queue(bp, i) { - - /* Status blocks */ - BNX2X_PCI_FREE(bnx2x_fp(bp, i, status_blk), - bnx2x_fp(bp, i, status_blk_mapping), - sizeof(struct host_status_block) + - sizeof(struct eth_tx_db_data)); - - /* fast path rings: tx_buf tx_desc rx_buf rx_desc rx_comp */ - BNX2X_FREE(bnx2x_fp(bp, i, tx_buf_ring)); - BNX2X_PCI_FREE(bnx2x_fp(bp, i, tx_desc_ring), - bnx2x_fp(bp, i, tx_desc_mapping), - sizeof(struct eth_tx_bd) * NUM_TX_BD); - - BNX2X_FREE(bnx2x_fp(bp, i, rx_buf_ring)); - BNX2X_PCI_FREE(bnx2x_fp(bp, i, rx_desc_ring), - bnx2x_fp(bp, i, rx_desc_mapping), - sizeof(struct eth_rx_bd) * NUM_RX_BD); - - BNX2X_PCI_FREE(bnx2x_fp(bp, i, rx_comp_ring), - bnx2x_fp(bp, i, rx_comp_mapping), - sizeof(struct eth_fast_path_rx_cqe) * - NUM_RCQ_BD); - } - - BNX2X_FREE(bp->fp); - - /* end of fastpath */ - - BNX2X_PCI_FREE(bp->def_status_blk, bp->def_status_blk_mapping, - (sizeof(struct host_def_status_block))); - - BNX2X_PCI_FREE(bp->slowpath, bp->slowpath_mapping, - (sizeof(struct bnx2x_slowpath))); - -#ifdef BCM_ISCSI - BNX2X_PCI_FREE(bp->t1, bp->t1_mapping, 64*1024); - BNX2X_PCI_FREE(bp->t2, bp->t2_mapping, 16*1024); - BNX2X_PCI_FREE(bp->timers, bp->timers_mapping, 8*1024); - BNX2X_PCI_FREE(bp->qm, bp->qm_mapping, 128*1024); -#endif - BNX2X_PCI_FREE(bp->spq, bp->spq_mapping, PAGE_SIZE); - -#undef BNX2X_PCI_FREE -#undef BNX2X_KFREE -} - -static int bnx2x_alloc_mem(struct bnx2x *bp) -{ - -#define BNX2X_PCI_ALLOC(x, y, size) \ - do { \ - x = pci_alloc_consistent(bp->pdev, size, y); \ - if (x == NULL) \ - goto alloc_mem_err; \ - memset(x, 0, size); \ - } while (0) - -#define BNX2X_ALLOC(x, size) \ - do { \ - x = vmalloc(size); \ - if (x == NULL) \ - goto alloc_mem_err; \ - memset(x, 0, size); \ - } while (0) - - int i; - - /* fastpath */ - BNX2X_ALLOC(bp->fp, sizeof(struct bnx2x_fastpath) * bp->num_queues); - - for_each_queue(bp, i) { - bnx2x_fp(bp, i, bp) = bp; - - /* Status blocks */ - BNX2X_PCI_ALLOC(bnx2x_fp(bp, i, status_blk), - &bnx2x_fp(bp, i, status_blk_mapping), - sizeof(struct host_status_block) + - sizeof(struct eth_tx_db_data)); - - bnx2x_fp(bp, i, hw_tx_prods) = - (void *)(bnx2x_fp(bp, i, status_blk) + 1); - - bnx2x_fp(bp, i, tx_prods_mapping) = - bnx2x_fp(bp, i, status_blk_mapping) + - sizeof(struct host_status_block); - - /* fast path rings: tx_buf tx_desc rx_buf rx_desc rx_comp */ - BNX2X_ALLOC(bnx2x_fp(bp, i, tx_buf_ring), - sizeof(struct sw_tx_bd) * NUM_TX_BD); - BNX2X_PCI_ALLOC(bnx2x_fp(bp, i, tx_desc_ring), - &bnx2x_fp(bp, i, tx_desc_mapping), - sizeof(struct eth_tx_bd) * NUM_TX_BD); - - BNX2X_ALLOC(bnx2x_fp(bp, i, rx_buf_ring), - sizeof(struct sw_rx_bd) * NUM_RX_BD); - BNX2X_PCI_ALLOC(bnx2x_fp(bp, i, rx_desc_ring), - &bnx2x_fp(bp, i, rx_desc_mapping), - sizeof(struct eth_rx_bd) * NUM_RX_BD); - - BNX2X_PCI_ALLOC(bnx2x_fp(bp, i, rx_comp_ring), - &bnx2x_fp(bp, i, rx_comp_mapping), - sizeof(struct eth_fast_path_rx_cqe) * - NUM_RCQ_BD); - - } - /* end of fastpath */ - - BNX2X_PCI_ALLOC(bp->def_status_blk, &bp->def_status_blk_mapping, - sizeof(struct host_def_status_block)); - - BNX2X_PCI_ALLOC(bp->slowpath, &bp->slowpath_mapping, - sizeof(struct bnx2x_slowpath)); - -#ifdef BCM_ISCSI - BNX2X_PCI_ALLOC(bp->t1, &bp->t1_mapping, 64*1024); - - /* Initialize T1 */ - for (i = 0; i < 64*1024; i += 64) { - *(u64 *)((char *)bp->t1 + i + 56) = 0x0UL; - *(u64 *)((char *)bp->t1 + i + 3) = 0x0UL; - } - - /* allocate searcher T2 table - we allocate 1/4 of alloc num for T2 - (which is not entered into the ILT) */ - BNX2X_PCI_ALLOC(bp->t2, &bp->t2_mapping, 16*1024); - - /* Initialize T2 */ - for (i = 0; i < 16*1024; i += 64) - * (u64 *)((char *)bp->t2 + i + 56) = bp->t2_mapping + i + 64; - - /* now fixup the last line in the block to point to the next block */ - *(u64 *)((char *)bp->t2 + 1024*16-8) = bp->t2_mapping; - - /* Timer block array (MAX_CONN*8) phys uncached for now 1024 conns */ - BNX2X_PCI_ALLOC(bp->timers, &bp->timers_mapping, 8*1024); - - /* QM queues (128*MAX_CONN) */ - BNX2X_PCI_ALLOC(bp->qm, &bp->qm_mapping, 128*1024); -#endif - - /* Slow path ring */ - BNX2X_PCI_ALLOC(bp->spq, &bp->spq_mapping, BCM_PAGE_SIZE); - - return 0; - -alloc_mem_err: - bnx2x_free_mem(bp); - return -ENOMEM; - -#undef BNX2X_PCI_ALLOC -#undef BNX2X_ALLOC -} - -static void bnx2x_free_tx_skbs(struct bnx2x *bp) -{ - int i; - - for_each_queue(bp, i) { - struct bnx2x_fastpath *fp = &bp->fp[i]; - - u16 bd_cons = fp->tx_bd_cons; - u16 sw_prod = fp->tx_pkt_prod; - u16 sw_cons = fp->tx_pkt_cons; - - BUG_TRAP(fp->tx_buf_ring != NULL); - - while (sw_cons != sw_prod) { - bd_cons = bnx2x_free_tx_pkt(bp, fp, TX_BD(sw_cons)); - sw_cons++; - } - } -} - -static void bnx2x_free_rx_skbs(struct bnx2x *bp) -{ - int i, j; - - for_each_queue(bp, j) { - struct bnx2x_fastpath *fp = &bp->fp[j]; - - BUG_TRAP(fp->rx_buf_ring != NULL); - - for (i = 0; i < NUM_RX_BD; i++) { - struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[i]; - struct sk_buff *skb = rx_buf->skb; - - if (skb == NULL) - continue; - - pci_unmap_single(bp->pdev, - pci_unmap_addr(rx_buf, mapping), - bp->rx_buf_use_size, - PCI_DMA_FROMDEVICE); - - rx_buf->skb = NULL; - dev_kfree_skb(skb); - } - } -} - -static void bnx2x_free_skbs(struct bnx2x *bp) -{ - bnx2x_free_tx_skbs(bp); - bnx2x_free_rx_skbs(bp); -} - -static void bnx2x_free_msix_irqs(struct bnx2x *bp) -{ - int i; - - free_irq(bp->msix_table[0].vector, bp->dev); - DP(NETIF_MSG_IFDOWN, "released sp irq (%d)\n", - bp->msix_table[0].vector); - - for_each_queue(bp, i) { - DP(NETIF_MSG_IFDOWN, "about to release fp #%d->%d irq " - "state(%x)\n", i, bp->msix_table[i + 1].vector, - bnx2x_fp(bp, i, state)); - - if (bnx2x_fp(bp, i, state) != BNX2X_FP_STATE_CLOSED) - BNX2X_ERR("IRQ of fp #%d being freed while " - "state != closed\n", i); - - free_irq(bp->msix_table[i + 1].vector, &bp->fp[i]); - } - -} - -static void bnx2x_free_irq(struct bnx2x *bp) -{ - - if (bp->flags & USING_MSIX_FLAG) { - - bnx2x_free_msix_irqs(bp); - pci_disable_msix(bp->pdev); - - bp->flags &= ~USING_MSIX_FLAG; - - } else - free_irq(bp->pdev->irq, bp->dev); -} - -static int bnx2x_enable_msix(struct bnx2x *bp) -{ - - int i; - - bp->msix_table[0].entry = 0; - for_each_queue(bp, i) - bp->msix_table[i + 1].entry = i + 1; - - if (pci_enable_msix(bp->pdev, &bp->msix_table[0], - bp->num_queues + 1)){ - BNX2X_LOG("failed to enable MSI-X\n"); - return -1; - - } - - bp->flags |= USING_MSIX_FLAG; - - return 0; - -} - - -static int bnx2x_req_msix_irqs(struct bnx2x *bp) -{ - - int i, rc; - - rc = request_irq(bp->msix_table[0].vector, bnx2x_msix_sp_int, 0, - bp->dev->name, bp->dev); - - if (rc) { - BNX2X_ERR("request sp irq failed\n"); - return -EBUSY; - } - - for_each_queue(bp, i) { - rc = request_irq(bp->msix_table[i + 1].vector, - bnx2x_msix_fp_int, 0, - bp->dev->name, &bp->fp[i]); - - if (rc) { - BNX2X_ERR("request fp #%d irq failed " - "rc %d\n", i, rc); - bnx2x_free_msix_irqs(bp); - return -EBUSY; - } - - bnx2x_fp(bp, i, state) = BNX2X_FP_STATE_IRQ; - - } - - return 0; - -} - -static int bnx2x_req_irq(struct bnx2x *bp) -{ - - int rc = request_irq(bp->pdev->irq, bnx2x_interrupt, - IRQF_SHARED, bp->dev->name, bp->dev); - if (!rc) - bnx2x_fp(bp, 0, state) = BNX2X_FP_STATE_IRQ; - - return rc; - -} - -/* - * Init service functions - */ - -static void bnx2x_set_mac_addr(struct bnx2x *bp) -{ - struct mac_configuration_cmd *config = bnx2x_sp(bp, mac_config); - - /* CAM allocation - * unicasts 0-31:port0 32-63:port1 - * multicast 64-127:port0 128-191:port1 - */ - config->hdr.length_6b = 2; - config->hdr.offset = bp->port ? 31 : 0; - config->hdr.reserved0 = 0; - config->hdr.reserved1 = 0; - - /* primary MAC */ - config->config_table[0].cam_entry.msb_mac_addr = - swab16(*(u16 *)&bp->dev->dev_addr[0]); - config->config_table[0].cam_entry.middle_mac_addr = - swab16(*(u16 *)&bp->dev->dev_addr[2]); - config->config_table[0].cam_entry.lsb_mac_addr = - swab16(*(u16 *)&bp->dev->dev_addr[4]); - config->config_table[0].cam_entry.flags = cpu_to_le16(bp->port); - config->config_table[0].target_table_entry.flags = 0; - config->config_table[0].target_table_entry.client_id = 0; - config->config_table[0].target_table_entry.vlan_id = 0; - - DP(NETIF_MSG_IFUP, "setting MAC (%04x:%04x:%04x)\n", - config->config_table[0].cam_entry.msb_mac_addr, - config->config_table[0].cam_entry.middle_mac_addr, - config->config_table[0].cam_entry.lsb_mac_addr); - - /* broadcast */ - config->config_table[1].cam_entry.msb_mac_addr = 0xffff; - config->config_table[1].cam_entry.middle_mac_addr = 0xffff; - config->config_table[1].cam_entry.lsb_mac_addr = 0xffff; - config->config_table[1].cam_entry.flags = cpu_to_le16(bp->port); - config->config_table[1].target_table_entry.flags = - TSTORM_CAM_TARGET_TABLE_ENTRY_BROADCAST; - config->config_table[1].target_table_entry.client_id = 0; - config->config_table[1].target_table_entry.vlan_id = 0; - - bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_SET_MAC, 0, - U64_HI(bnx2x_sp_mapping(bp, mac_config)), - U64_LO(bnx2x_sp_mapping(bp, mac_config)), 0); -} - -static int bnx2x_wait_ramrod(struct bnx2x *bp, int state, int idx, - int *state_p, int poll) -{ - /* can take a while if any port is running */ - int timeout = 500; - - DP(NETIF_MSG_IFUP, "%s for state to become %x on IDX [%d]\n", - poll ? "polling" : "waiting", state, idx); - - might_sleep(); - - while (timeout) { - - if (poll) { - bnx2x_rx_int(bp->fp, 10); - /* If index is different from 0 - * The reply for some commands will - * be on the none default queue - */ - if (idx) - bnx2x_rx_int(&bp->fp[idx], 10); - } - - mb(); /* state is changed by bnx2x_sp_event()*/ - - if (*state_p == state) - return 0; - - timeout--; - msleep(1); - - } - - /* timeout! */ - BNX2X_ERR("timeout %s for state %x on IDX [%d]\n", - poll ? "polling" : "waiting", state, idx); - - return -EBUSY; -} - -static int bnx2x_setup_leading(struct bnx2x *bp) -{ - - /* reset IGU state */ - bnx2x_ack_sb(bp, DEF_SB_ID, CSTORM_ID, 0, IGU_INT_ENABLE, 0); - - /* SETUP ramrod */ - bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_PORT_SETUP, 0, 0, 0, 0); - - return bnx2x_wait_ramrod(bp, BNX2X_STATE_OPEN, 0, &(bp->state), 0); - -} - -static int bnx2x_setup_multi(struct bnx2x *bp, int index) -{ - - /* reset IGU state */ - bnx2x_ack_sb(bp, index, CSTORM_ID, 0, IGU_INT_ENABLE, 0); - - /* SETUP ramrod */ - bp->fp[index].state = BNX2X_FP_STATE_OPENING; - bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_CLIENT_SETUP, index, 0, index, 0); - - /* Wait for completion */ - return bnx2x_wait_ramrod(bp, BNX2X_FP_STATE_OPEN, index, - &(bp->fp[index].state), 0); - -} - - -static int bnx2x_poll(struct net_device *dev, int *budget); -static void bnx2x_set_rx_mode(struct net_device *dev); - -static int bnx2x_nic_load(struct bnx2x *bp, int req_irq) -{ - u32 load_code; - int i; - - bp->state = BNX2X_STATE_OPENING_WAIT4_LOAD; - - /* Send LOAD_REQUEST command to MCP. - Returns the type of LOAD command: if it is the - first port to be initialized common blocks should be - initialized, otherwise - not. - */ - if (!nomcp) { - load_code = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_REQ); - if (!load_code) { - BNX2X_ERR("MCP response failure, unloading\n"); - return -EBUSY; - } - if (load_code == FW_MSG_CODE_DRV_LOAD_REFUSED) { - BNX2X_ERR("MCP refused load request, unloading\n"); - return -EBUSY; /* other port in diagnostic mode */ - } - } else { - load_code = FW_MSG_CODE_DRV_LOAD_COMMON; - } - - /* if we can't use msix we only need one fp, - * so try to enable msix with the requested number of fp's - * and fallback to inta with one fp - */ - if (req_irq) { - if (use_inta) { - bp->num_queues = 1; - } else { - if ((use_multi > 1) && (use_multi <= 16)) - /* user requested number */ - bp->num_queues = use_multi; - else if (use_multi == 1) - bp->num_queues = num_online_cpus(); - else - bp->num_queues = 1; - - if (bnx2x_enable_msix(bp)) { - /* failed to enable msix */ - bp->num_queues = 1; - if (use_multi) - BNX2X_ERR("Multi requested but failed" - " to enable MSI-X\n"); - } - } - } - - DP(NETIF_MSG_IFUP, "set number of queues to %d\n", bp->num_queues); - - if (bnx2x_alloc_mem(bp)) - return -ENOMEM; - - if (req_irq) { - if (bp->flags & USING_MSIX_FLAG) { - if (bnx2x_req_msix_irqs(bp)) { - pci_disable_msix(bp->pdev); - goto load_error; - } - - } else { - if (bnx2x_req_irq(bp)) { - BNX2X_ERR("IRQ request failed, aborting\n"); - goto load_error; - } - } - } - - /* Initialize HW */ - if (bnx2x_function_init(bp, - (load_code == FW_MSG_CODE_DRV_LOAD_COMMON))) { - BNX2X_ERR("HW init failed, aborting\n"); - goto load_error; - } - - - atomic_set(&bp->intr_sem, 0); - - - /* Setup NIC internals and enable interrupts */ - bnx2x_nic_init(bp); - - /* Send LOAD_DONE command to MCP */ - if (!nomcp) { - load_code = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE); - if (!load_code) { - BNX2X_ERR("MCP response failure, unloading\n"); - goto load_int_disable; - } - } - - bp->state = BNX2X_STATE_OPENING_WAIT4_PORT; - - /* Enable Rx interrupt handling before sending the ramrod - as it's completed on Rx FP queue */ - - netif_poll_enable(bp->dev); - - if (bnx2x_setup_leading(bp)) - goto load_stop_netif; - - for_each_nondefault_queue(bp, i) - if (bnx2x_setup_multi(bp, i)) - goto load_stop_netif; - - bnx2x_set_mac_addr(bp); - - bnx2x_phy_init(bp); - - /* Start fast path */ - if (req_irq) { /* IRQ is only requested from bnx2x_open */ - netif_start_queue(bp->dev); - if (bp->flags & USING_MSIX_FLAG) - printk(KERN_INFO PFX "%s: using MSI-X\n", - bp->dev->name); - - /* Otherwise Tx queue should be only reenabled */ - } else if (netif_running(bp->dev)) { - netif_wake_queue(bp->dev); - bnx2x_set_rx_mode(bp->dev); - } - - /* start the timer */ - mod_timer(&bp->timer, jiffies + bp->current_interval); - - return 0; - -load_stop_netif: - netif_poll_disable(bp->dev); - -load_int_disable: - bnx2x_int_disable_sync(bp); - - bnx2x_free_skbs(bp); - bnx2x_free_irq(bp); - -load_error: - bnx2x_free_mem(bp); - - /* TBD we really need to reset the chip - if we want to recover from this */ - return -EBUSY; -} - -static void bnx2x_reset_chip(struct bnx2x *bp, u32 reset_code) -{ - int port = bp->port; -#ifdef USE_DMAE - u32 wb_write[2]; -#endif - int base, i; - - DP(NETIF_MSG_IFDOWN, "reset called with code %x\n", reset_code); - - /* Do not rcv packets to BRB */ - REG_WR(bp, NIG_REG_LLH0_BRB1_DRV_MASK + port*4, 0x0); - /* Do not direct rcv packets that are not for MCP to the BRB */ - REG_WR(bp, (port ? NIG_REG_LLH1_BRB1_NOT_MCP : - NIG_REG_LLH0_BRB1_NOT_MCP), 0x0); - - /* Configure IGU and AEU */ - REG_WR(bp, HC_REG_CONFIG_0 + port*4, 0x1000); - REG_WR(bp, MISC_REG_AEU_MASK_ATTN_FUNC_0 + port*4, 0); - - /* TODO: Close Doorbell port? */ - - /* Clear ILT */ -#ifdef USE_DMAE - wb_write[0] = 0; - wb_write[1] = 0; -#endif - base = port * RQ_ONCHIP_AT_PORT_SIZE; - for (i = base; i < base + RQ_ONCHIP_AT_PORT_SIZE; i++) { -#ifdef USE_DMAE - REG_WR_DMAE(bp, PXP2_REG_RQ_ONCHIP_AT + i*8, wb_write, 2); -#else - REG_WR_IND(bp, PXP2_REG_RQ_ONCHIP_AT, 0); - REG_WR_IND(bp, PXP2_REG_RQ_ONCHIP_AT + 4, 0); -#endif - } - - if (reset_code == FW_MSG_CODE_DRV_UNLOAD_COMMON) { - /* reset_common */ - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, - 0xd3ffff7f); - REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, - 0x1403); - } -} - -static int bnx2x_stop_multi(struct bnx2x *bp, int index) -{ - - int rc; - - /* halt the connection */ - bp->fp[index].state = BNX2X_FP_STATE_HALTING; - bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_HALT, index, 0, 0, 0); - - - rc = bnx2x_wait_ramrod(bp, BNX2X_FP_STATE_HALTED, index, - &(bp->fp[index].state), 1); - if (rc) /* timeout */ - return rc; - - /* delete cfc entry */ - bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_CFC_DEL, index, 0, 0, 1); - - return bnx2x_wait_ramrod(bp, BNX2X_FP_STATE_CLOSED, index, - &(bp->fp[index].state), 1); - -} - - -static void bnx2x_stop_leading(struct bnx2x *bp) -{ - u16 dsb_sp_prod_idx; - /* if the other port is handling traffic, - this can take a lot of time */ - int timeout = 500; - - might_sleep(); - - /* Send HALT ramrod */ - bp->fp[0].state = BNX2X_FP_STATE_HALTING; - bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_HALT, 0, 0, 0, 0); - - if (bnx2x_wait_ramrod(bp, BNX2X_FP_STATE_HALTED, 0, - &(bp->fp[0].state), 1)) - return; - - dsb_sp_prod_idx = *bp->dsb_sp_prod; - - /* Send PORT_DELETE ramrod */ - bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_PORT_DEL, 0, 0, 0, 1); - - /* Wait for completion to arrive on default status block - we are going to reset the chip anyway - so there is not much to do if this times out - */ - while ((dsb_sp_prod_idx == *bp->dsb_sp_prod) && timeout) { - timeout--; - msleep(1); - } - if (!timeout) { - DP(NETIF_MSG_IFDOWN, "timeout polling for completion " - "dsb_sp_prod 0x%x != dsb_sp_prod_idx 0x%x\n", - *bp->dsb_sp_prod, dsb_sp_prod_idx); - } - bp->state = BNX2X_STATE_CLOSING_WAIT4_UNLOAD; - bp->fp[0].state = BNX2X_FP_STATE_CLOSED; -} - - -static int bnx2x_nic_unload(struct bnx2x *bp, int free_irq) -{ - u32 reset_code = 0; - int i, timeout; - - bp->state = BNX2X_STATE_CLOSING_WAIT4_HALT; - - del_timer_sync(&bp->timer); - - bp->rx_mode = BNX2X_RX_MODE_NONE; - bnx2x_set_storm_rx_mode(bp); - - if (netif_running(bp->dev)) { - netif_tx_disable(bp->dev); - bp->dev->trans_start = jiffies; /* prevent tx timeout */ - } - - /* Wait until all fast path tasks complete */ - for_each_queue(bp, i) { - struct bnx2x_fastpath *fp = &bp->fp[i]; - - timeout = 1000; - while (bnx2x_has_work(fp) && (timeout--)) - msleep(1); - if (!timeout) - BNX2X_ERR("timeout waiting for queue[%d]\n", i); - } - - /* Wait until stat ramrod returns and all SP tasks complete */ - timeout = 1000; - while ((bp->stat_pending || (bp->spq_left != MAX_SPQ_PENDING)) && - (timeout--)) - msleep(1); - - netif_poll_disable(bp->dev); - /* Disable interrupts after Tx and Rx are disabled on stack level */ - bnx2x_int_disable_sync(bp); - - if (bp->flags & NO_WOL_FLAG) - reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP; - - else if (bp->wol) { - u32 emac_base = bp->port ? GRCBASE_EMAC0 : GRCBASE_EMAC1; - u8 *mac_addr = bp->dev->dev_addr; - u32 val = (EMAC_MODE_MPKT | EMAC_MODE_MPKT_RCVD | - EMAC_MODE_ACPI_RCVD); - - EMAC_WR(EMAC_REG_EMAC_MODE, val); - - val = (mac_addr[0] << 8) | mac_addr[1]; - EMAC_WR(EMAC_REG_EMAC_MAC_MATCH, val); - - val = (mac_addr[2] << 24) | (mac_addr[3] << 16) | - (mac_addr[4] << 8) | mac_addr[5]; - EMAC_WR(EMAC_REG_EMAC_MAC_MATCH + 4, val); - - reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_EN; - - } else - reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS; - - /* Close multi and leading connections */ - for_each_nondefault_queue(bp, i) - if (bnx2x_stop_multi(bp, i)) - goto unload_error; - - bnx2x_stop_leading(bp); - if ((bp->state != BNX2X_STATE_CLOSING_WAIT4_UNLOAD) || - (bp->fp[0].state != BNX2X_FP_STATE_CLOSED)) { - DP(NETIF_MSG_IFDOWN, "failed to close leading properly!" - "state 0x%x fp[0].state 0x%x", - bp->state, bp->fp[0].state); - } - -unload_error: - bnx2x_link_reset(bp); - - if (!nomcp) - reset_code = bnx2x_fw_command(bp, reset_code); - else - reset_code = FW_MSG_CODE_DRV_UNLOAD_COMMON; - - /* Release IRQs */ - if (free_irq) - bnx2x_free_irq(bp); - - /* Reset the chip */ - bnx2x_reset_chip(bp, reset_code); - - /* Report UNLOAD_DONE to MCP */ - if (!nomcp) - bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE); - - /* Free SKBs and driver internals */ - bnx2x_free_skbs(bp); - bnx2x_free_mem(bp); - - bp->state = BNX2X_STATE_CLOSED; - - netif_carrier_off(bp->dev); - - return 0; -} - -/* end of nic load/unload */ - -/* ethtool_ops */ - -/* - * Init service functions - */ - -static void bnx2x_link_settings_supported(struct bnx2x *bp, u32 switch_cfg) -{ - int port = bp->port; - u32 ext_phy_type; - - bp->phy_flags = 0; - - switch (switch_cfg) { - case SWITCH_CFG_1G: - BNX2X_DEV_INFO("switch_cfg 0x%x (1G)\n", switch_cfg); - - ext_phy_type = SERDES_EXT_PHY_TYPE(bp); - switch (ext_phy_type) { - case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT: - BNX2X_DEV_INFO("ext_phy_type 0x%x (Direct)\n", - ext_phy_type); - - bp->supported |= (SUPPORTED_10baseT_Half | - SUPPORTED_10baseT_Full | - SUPPORTED_100baseT_Half | - SUPPORTED_100baseT_Full | - SUPPORTED_1000baseT_Full | - SUPPORTED_2500baseX_Full | - SUPPORTED_TP | SUPPORTED_FIBRE | - SUPPORTED_Autoneg | - SUPPORTED_Pause | - SUPPORTED_Asym_Pause); - break; - - case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482: - BNX2X_DEV_INFO("ext_phy_type 0x%x (5482)\n", - ext_phy_type); - - bp->phy_flags |= PHY_SGMII_FLAG; - - bp->supported |= (SUPPORTED_10baseT_Half | - SUPPORTED_10baseT_Full | - SUPPORTED_100baseT_Half | - SUPPORTED_100baseT_Full | - SUPPORTED_1000baseT_Full | - SUPPORTED_TP | SUPPORTED_FIBRE | - SUPPORTED_Autoneg | - SUPPORTED_Pause | - SUPPORTED_Asym_Pause); - break; - - default: - BNX2X_ERR("NVRAM config error. " - "BAD SerDes ext_phy_config 0x%x\n", - bp->ext_phy_config); - return; - } - - bp->phy_addr = REG_RD(bp, NIG_REG_SERDES0_CTRL_PHY_ADDR + - port*0x10); - BNX2X_DEV_INFO("phy_addr 0x%x\n", bp->phy_addr); - break; - - case SWITCH_CFG_10G: - BNX2X_DEV_INFO("switch_cfg 0x%x (10G)\n", switch_cfg); - - bp->phy_flags |= PHY_XGXS_FLAG; - - ext_phy_type = XGXS_EXT_PHY_TYPE(bp); - switch (ext_phy_type) { - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: - BNX2X_DEV_INFO("ext_phy_type 0x%x (Direct)\n", - ext_phy_type); - - bp->supported |= (SUPPORTED_10baseT_Half | - SUPPORTED_10baseT_Full | - SUPPORTED_100baseT_Half | - SUPPORTED_100baseT_Full | - SUPPORTED_1000baseT_Full | - SUPPORTED_2500baseX_Full | - SUPPORTED_10000baseT_Full | - SUPPORTED_TP | SUPPORTED_FIBRE | - SUPPORTED_Autoneg | - SUPPORTED_Pause | - SUPPORTED_Asym_Pause); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: - BNX2X_DEV_INFO("ext_phy_type 0x%x (8705)\n", - ext_phy_type); - - bp->supported |= (SUPPORTED_10000baseT_Full | - SUPPORTED_FIBRE | - SUPPORTED_Pause | - SUPPORTED_Asym_Pause); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: - BNX2X_DEV_INFO("ext_phy_type 0x%x (8706)\n", - ext_phy_type); - - bp->supported |= (SUPPORTED_10000baseT_Full | - SUPPORTED_1000baseT_Full | - SUPPORTED_Autoneg | - SUPPORTED_FIBRE | - SUPPORTED_Pause | - SUPPORTED_Asym_Pause); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: - BNX2X_DEV_INFO("ext_phy_type 0x%x (8072)\n", - ext_phy_type); - - bp->supported |= (SUPPORTED_10000baseT_Full | - SUPPORTED_1000baseT_Full | - SUPPORTED_FIBRE | - SUPPORTED_Autoneg | - SUPPORTED_Pause | - SUPPORTED_Asym_Pause); - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: - BNX2X_DEV_INFO("ext_phy_type 0x%x (SFX7101)\n", - ext_phy_type); - - bp->supported |= (SUPPORTED_10000baseT_Full | - SUPPORTED_TP | - SUPPORTED_Autoneg | - SUPPORTED_Pause | - SUPPORTED_Asym_Pause); - break; - - default: - BNX2X_ERR("NVRAM config error. " - "BAD XGXS ext_phy_config 0x%x\n", - bp->ext_phy_config); - return; - } - - bp->phy_addr = REG_RD(bp, NIG_REG_XGXS0_CTRL_PHY_ADDR + - port*0x18); - BNX2X_DEV_INFO("phy_addr 0x%x\n", bp->phy_addr); - - bp->ser_lane = ((bp->lane_config & - PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK) >> - PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT); - bp->rx_lane_swap = ((bp->lane_config & - PORT_HW_CFG_LANE_SWAP_CFG_RX_MASK) >> - PORT_HW_CFG_LANE_SWAP_CFG_RX_SHIFT); - bp->tx_lane_swap = ((bp->lane_config & - PORT_HW_CFG_LANE_SWAP_CFG_TX_MASK) >> - PORT_HW_CFG_LANE_SWAP_CFG_TX_SHIFT); - BNX2X_DEV_INFO("rx_lane_swap 0x%x tx_lane_swap 0x%x\n", - bp->rx_lane_swap, bp->tx_lane_swap); - break; - - default: - BNX2X_ERR("BAD switch_cfg link_config 0x%x\n", - bp->link_config); - return; - } - - /* mask what we support according to speed_cap_mask */ - if (!(bp->speed_cap_mask & - PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF)) - bp->supported &= ~SUPPORTED_10baseT_Half; - - if (!(bp->speed_cap_mask & - PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL)) - bp->supported &= ~SUPPORTED_10baseT_Full; - - if (!(bp->speed_cap_mask & - PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF)) - bp->supported &= ~SUPPORTED_100baseT_Half; - - if (!(bp->speed_cap_mask & - PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL)) - bp->supported &= ~SUPPORTED_100baseT_Full; - - if (!(bp->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_1G)) - bp->supported &= ~(SUPPORTED_1000baseT_Half | - SUPPORTED_1000baseT_Full); - - if (!(bp->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G)) - bp->supported &= ~SUPPORTED_2500baseX_Full; - - if (!(bp->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) - bp->supported &= ~SUPPORTED_10000baseT_Full; - - BNX2X_DEV_INFO("supported 0x%x\n", bp->supported); -} - -static void bnx2x_link_settings_requested(struct bnx2x *bp) -{ - bp->req_autoneg = 0; - bp->req_duplex = DUPLEX_FULL; - - switch (bp->link_config & PORT_FEATURE_LINK_SPEED_MASK) { - case PORT_FEATURE_LINK_SPEED_AUTO: - if (bp->supported & SUPPORTED_Autoneg) { - bp->req_autoneg |= AUTONEG_SPEED; - bp->req_line_speed = 0; - bp->advertising = bp->supported; - } else { - if (XGXS_EXT_PHY_TYPE(bp) == - PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705) { - /* force 10G, no AN */ - bp->req_line_speed = SPEED_10000; - bp->advertising = - (ADVERTISED_10000baseT_Full | - ADVERTISED_FIBRE); - break; - } - BNX2X_ERR("NVRAM config error. " - "Invalid link_config 0x%x" - " Autoneg not supported\n", - bp->link_config); - return; - } - break; - - case PORT_FEATURE_LINK_SPEED_10M_FULL: - if (bp->supported & SUPPORTED_10baseT_Full) { - bp->req_line_speed = SPEED_10; - bp->advertising = (ADVERTISED_10baseT_Full | - ADVERTISED_TP); - } else { - BNX2X_ERR("NVRAM config error. " - "Invalid link_config 0x%x" - " speed_cap_mask 0x%x\n", - bp->link_config, bp->speed_cap_mask); - return; - } - break; - - case PORT_FEATURE_LINK_SPEED_10M_HALF: - if (bp->supported & SUPPORTED_10baseT_Half) { - bp->req_line_speed = SPEED_10; - bp->req_duplex = DUPLEX_HALF; - bp->advertising = (ADVERTISED_10baseT_Half | - ADVERTISED_TP); - } else { - BNX2X_ERR("NVRAM config error. " - "Invalid link_config 0x%x" - " speed_cap_mask 0x%x\n", - bp->link_config, bp->speed_cap_mask); - return; - } - break; - - case PORT_FEATURE_LINK_SPEED_100M_FULL: - if (bp->supported & SUPPORTED_100baseT_Full) { - bp->req_line_speed = SPEED_100; - bp->advertising = (ADVERTISED_100baseT_Full | - ADVERTISED_TP); - } else { - BNX2X_ERR("NVRAM config error. " - "Invalid link_config 0x%x" - " speed_cap_mask 0x%x\n", - bp->link_config, bp->speed_cap_mask); - return; - } - break; - - case PORT_FEATURE_LINK_SPEED_100M_HALF: - if (bp->supported & SUPPORTED_100baseT_Half) { - bp->req_line_speed = SPEED_100; - bp->req_duplex = DUPLEX_HALF; - bp->advertising = (ADVERTISED_100baseT_Half | - ADVERTISED_TP); - } else { - BNX2X_ERR("NVRAM config error. " - "Invalid link_config 0x%x" - " speed_cap_mask 0x%x\n", - bp->link_config, bp->speed_cap_mask); - return; - } - break; - - case PORT_FEATURE_LINK_SPEED_1G: - if (bp->supported & SUPPORTED_1000baseT_Full) { - bp->req_line_speed = SPEED_1000; - bp->advertising = (ADVERTISED_1000baseT_Full | - ADVERTISED_TP); - } else { - BNX2X_ERR("NVRAM config error. " - "Invalid link_config 0x%x" - " speed_cap_mask 0x%x\n", - bp->link_config, bp->speed_cap_mask); - return; - } - break; - - case PORT_FEATURE_LINK_SPEED_2_5G: - if (bp->supported & SUPPORTED_2500baseX_Full) { - bp->req_line_speed = SPEED_2500; - bp->advertising = (ADVERTISED_2500baseX_Full | - ADVERTISED_TP); - } else { - BNX2X_ERR("NVRAM config error. " - "Invalid link_config 0x%x" - " speed_cap_mask 0x%x\n", - bp->link_config, bp->speed_cap_mask); - return; - } - break; - - case PORT_FEATURE_LINK_SPEED_10G_CX4: - case PORT_FEATURE_LINK_SPEED_10G_KX4: - case PORT_FEATURE_LINK_SPEED_10G_KR: - if (bp->supported & SUPPORTED_10000baseT_Full) { - bp->req_line_speed = SPEED_10000; - bp->advertising = (ADVERTISED_10000baseT_Full | - ADVERTISED_FIBRE); - } else { - BNX2X_ERR("NVRAM config error. " - "Invalid link_config 0x%x" - " speed_cap_mask 0x%x\n", - bp->link_config, bp->speed_cap_mask); - return; - } - break; - - default: - BNX2X_ERR("NVRAM config error. " - "BAD link speed link_config 0x%x\n", - bp->link_config); - bp->req_autoneg |= AUTONEG_SPEED; - bp->req_line_speed = 0; - bp->advertising = bp->supported; - break; - } - BNX2X_DEV_INFO("req_line_speed %d req_duplex %d\n", - bp->req_line_speed, bp->req_duplex); - - bp->req_flow_ctrl = (bp->link_config & - PORT_FEATURE_FLOW_CONTROL_MASK); - if ((bp->req_flow_ctrl == FLOW_CTRL_AUTO) && - (bp->supported & SUPPORTED_Autoneg)) - bp->req_autoneg |= AUTONEG_FLOW_CTRL; - - BNX2X_DEV_INFO("req_autoneg 0x%x req_flow_ctrl 0x%x" - " advertising 0x%x\n", - bp->req_autoneg, bp->req_flow_ctrl, bp->advertising); -} - -static void bnx2x_get_hwinfo(struct bnx2x *bp) -{ - u32 val, val2, val3, val4, id; - int port = bp->port; - u32 switch_cfg; - - bp->shmem_base = REG_RD(bp, MISC_REG_SHARED_MEM_ADDR); - BNX2X_DEV_INFO("shmem offset is %x\n", bp->shmem_base); - - /* Get the chip revision id and number. */ - /* chip num:16-31, rev:12-15, metal:4-11, bond_id:0-3 */ - val = REG_RD(bp, MISC_REG_CHIP_NUM); - id = ((val & 0xffff) << 16); - val = REG_RD(bp, MISC_REG_CHIP_REV); - id |= ((val & 0xf) << 12); - val = REG_RD(bp, MISC_REG_CHIP_METAL); - id |= ((val & 0xff) << 4); - REG_RD(bp, MISC_REG_BOND_ID); - id |= (val & 0xf); - bp->chip_id = id; - BNX2X_DEV_INFO("chip ID is %x\n", id); - - if (!bp->shmem_base || (bp->shmem_base != 0xAF900)) { - BNX2X_DEV_INFO("MCP not active\n"); - nomcp = 1; - goto set_mac; - } - - val = SHMEM_RD(bp, validity_map[port]); - if ((val & (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) - != (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) - BNX2X_ERR("BAD MCP validity signature\n"); - - bp->fw_seq = (SHMEM_RD(bp, func_mb[port].drv_mb_header) & - DRV_MSG_SEQ_NUMBER_MASK); - - bp->hw_config = SHMEM_RD(bp, dev_info.shared_hw_config.config); - bp->board = SHMEM_RD(bp, dev_info.shared_hw_config.board); - bp->serdes_config = - SHMEM_RD(bp, dev_info.port_hw_config[port].serdes_config); - bp->lane_config = - SHMEM_RD(bp, dev_info.port_hw_config[port].lane_config); - bp->ext_phy_config = - SHMEM_RD(bp, - dev_info.port_hw_config[port].external_phy_config); - bp->speed_cap_mask = - SHMEM_RD(bp, - dev_info.port_hw_config[port].speed_capability_mask); - - bp->link_config = - SHMEM_RD(bp, dev_info.port_feature_config[port].link_config); - - BNX2X_DEV_INFO("hw_config (%08x) board (%08x) serdes_config (%08x)\n" - KERN_INFO " lane_config (%08x) ext_phy_config (%08x)\n" - KERN_INFO " speed_cap_mask (%08x) link_config (%08x)" - " fw_seq (%08x)\n", - bp->hw_config, bp->board, bp->serdes_config, - bp->lane_config, bp->ext_phy_config, - bp->speed_cap_mask, bp->link_config, bp->fw_seq); - - switch_cfg = (bp->link_config & PORT_FEATURE_CONNECTED_SWITCH_MASK); - bnx2x_link_settings_supported(bp, switch_cfg); - - bp->autoneg = (bp->hw_config & SHARED_HW_CFG_AN_ENABLE_MASK); - /* for now disable cl73 */ - bp->autoneg &= ~SHARED_HW_CFG_AN_ENABLE_CL73; - BNX2X_DEV_INFO("autoneg 0x%x\n", bp->autoneg); - - bnx2x_link_settings_requested(bp); - - val2 = SHMEM_RD(bp, dev_info.port_hw_config[port].mac_upper); - val = SHMEM_RD(bp, dev_info.port_hw_config[port].mac_lower); - bp->dev->dev_addr[0] = (u8)(val2 >> 8 & 0xff); - bp->dev->dev_addr[1] = (u8)(val2 & 0xff); - bp->dev->dev_addr[2] = (u8)(val >> 24 & 0xff); - bp->dev->dev_addr[3] = (u8)(val >> 16 & 0xff); - bp->dev->dev_addr[4] = (u8)(val >> 8 & 0xff); - bp->dev->dev_addr[5] = (u8)(val & 0xff); - - memcpy(bp->dev->perm_addr, bp->dev->dev_addr, 6); - - - val = SHMEM_RD(bp, dev_info.shared_hw_config.part_num); - val2 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[4]); - val3 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[8]); - val4 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[12]); - - printk(KERN_INFO PFX "part number %X-%X-%X-%X\n", - val, val2, val3, val4); - - /* bc ver */ - if (!nomcp) { - bp->bc_ver = val = ((SHMEM_RD(bp, dev_info.bc_rev)) >> 8); - BNX2X_DEV_INFO("bc_ver %X\n", val); - if (val < BNX2X_BC_VER) { - /* for now only warn - * later we might need to enforce this */ - BNX2X_ERR("This driver needs bc_ver %X but found %X," - " please upgrade BC\n", BNX2X_BC_VER, val); - } - } else { - bp->bc_ver = 0; - } - - val = REG_RD(bp, MCP_REG_MCPR_NVM_CFG4); - bp->flash_size = (NVRAM_1MB_SIZE << (val & MCPR_NVM_CFG4_FLASH_SIZE)); - BNX2X_DEV_INFO("flash_size 0x%x (%d)\n", - bp->flash_size, bp->flash_size); - - return; - -set_mac: /* only supposed to happen on emulation/FPGA */ - BNX2X_ERR("warning rendom MAC workaround active\n"); - random_ether_addr(bp->dev->dev_addr); - memcpy(bp->dev->perm_addr, bp->dev->dev_addr, 6); - -} - -/* - * ethtool service functions - */ - -/* All ethtool functions called with rtnl_lock */ - -static int bnx2x_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) -{ - struct bnx2x *bp = netdev_priv(dev); - - cmd->supported = bp->supported; - cmd->advertising = bp->advertising; - - if (netif_carrier_ok(dev)) { - cmd->speed = bp->line_speed; - cmd->duplex = bp->duplex; - } else { - cmd->speed = bp->req_line_speed; - cmd->duplex = bp->req_duplex; - } - - if (bp->phy_flags & PHY_XGXS_FLAG) { - u32 ext_phy_type = XGXS_EXT_PHY_TYPE(bp); - - switch (ext_phy_type) { - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: - cmd->port = PORT_FIBRE; - break; - - case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: - cmd->port = PORT_TP; - break; - - default: - DP(NETIF_MSG_LINK, "BAD XGXS ext_phy_config 0x%x\n", - bp->ext_phy_config); - } - } else - cmd->port = PORT_TP; - - cmd->phy_address = bp->phy_addr; - cmd->transceiver = XCVR_INTERNAL; - - if (bp->req_autoneg & AUTONEG_SPEED) - cmd->autoneg = AUTONEG_ENABLE; - else - cmd->autoneg = AUTONEG_DISABLE; - - cmd->maxtxpkt = 0; - cmd->maxrxpkt = 0; - - DP(NETIF_MSG_LINK, "ethtool_cmd: cmd %d\n" - DP_LEVEL " supported 0x%x advertising 0x%x speed %d\n" - DP_LEVEL " duplex %d port %d phy_address %d transceiver %d\n" - DP_LEVEL " autoneg %d maxtxpkt %d maxrxpkt %d\n", - cmd->cmd, cmd->supported, cmd->advertising, cmd->speed, - cmd->duplex, cmd->port, cmd->phy_address, cmd->transceiver, - cmd->autoneg, cmd->maxtxpkt, cmd->maxrxpkt); - - return 0; -} - -static int bnx2x_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) -{ - struct bnx2x *bp = netdev_priv(dev); - u32 advertising; - - DP(NETIF_MSG_LINK, "ethtool_cmd: cmd %d\n" - DP_LEVEL " supported 0x%x advertising 0x%x speed %d\n" - DP_LEVEL " duplex %d port %d phy_address %d transceiver %d\n" - DP_LEVEL " autoneg %d maxtxpkt %d maxrxpkt %d\n", - cmd->cmd, cmd->supported, cmd->advertising, cmd->speed, - cmd->duplex, cmd->port, cmd->phy_address, cmd->transceiver, - cmd->autoneg, cmd->maxtxpkt, cmd->maxrxpkt); - - if (cmd->autoneg == AUTONEG_ENABLE) { - if (!(bp->supported & SUPPORTED_Autoneg)) { - DP(NETIF_MSG_LINK, "Aotoneg not supported\n"); - return -EINVAL; - } - - /* advertise the requested speed and duplex if supported */ - cmd->advertising &= bp->supported; - - bp->req_autoneg |= AUTONEG_SPEED; - bp->req_line_speed = 0; - bp->req_duplex = DUPLEX_FULL; - bp->advertising |= (ADVERTISED_Autoneg | cmd->advertising); - - } else { /* forced speed */ - /* advertise the requested speed and duplex if supported */ - switch (cmd->speed) { - case SPEED_10: - if (cmd->duplex == DUPLEX_FULL) { - if (!(bp->supported & - SUPPORTED_10baseT_Full)) { - DP(NETIF_MSG_LINK, - "10M full not supported\n"); - return -EINVAL; - } - - advertising = (ADVERTISED_10baseT_Full | - ADVERTISED_TP); - } else { - if (!(bp->supported & - SUPPORTED_10baseT_Half)) { - DP(NETIF_MSG_LINK, - "10M half not supported\n"); - return -EINVAL; - } - - advertising = (ADVERTISED_10baseT_Half | - ADVERTISED_TP); - } - break; - - case SPEED_100: - if (cmd->duplex == DUPLEX_FULL) { - if (!(bp->supported & - SUPPORTED_100baseT_Full)) { - DP(NETIF_MSG_LINK, - "100M full not supported\n"); - return -EINVAL; - } - - advertising = (ADVERTISED_100baseT_Full | - ADVERTISED_TP); - } else { - if (!(bp->supported & - SUPPORTED_100baseT_Half)) { - DP(NETIF_MSG_LINK, - "100M half not supported\n"); - return -EINVAL; - } - - advertising = (ADVERTISED_100baseT_Half | - ADVERTISED_TP); - } - break; - - case SPEED_1000: - if (cmd->duplex != DUPLEX_FULL) { - DP(NETIF_MSG_LINK, "1G half not supported\n"); - return -EINVAL; - } - - if (!(bp->supported & SUPPORTED_1000baseT_Full)) { - DP(NETIF_MSG_LINK, "1G full not supported\n"); - return -EINVAL; - } - - advertising = (ADVERTISED_1000baseT_Full | - ADVERTISED_TP); - break; - - case SPEED_2500: - if (cmd->duplex != DUPLEX_FULL) { - DP(NETIF_MSG_LINK, - "2.5G half not supported\n"); - return -EINVAL; - } - - if (!(bp->supported & SUPPORTED_2500baseX_Full)) { - DP(NETIF_MSG_LINK, - "2.5G full not supported\n"); - return -EINVAL; - } - - advertising = (ADVERTISED_2500baseX_Full | - ADVERTISED_TP); - break; - - case SPEED_10000: - if (cmd->duplex != DUPLEX_FULL) { - DP(NETIF_MSG_LINK, "10G half not supported\n"); - return -EINVAL; - } - - if (!(bp->supported & SUPPORTED_10000baseT_Full)) { - DP(NETIF_MSG_LINK, "10G full not supported\n"); - return -EINVAL; - } - - advertising = (ADVERTISED_10000baseT_Full | - ADVERTISED_FIBRE); - break; - - default: - DP(NETIF_MSG_LINK, "Unsupported speed\n"); - return -EINVAL; - } - - bp->req_autoneg &= ~AUTONEG_SPEED; - bp->req_line_speed = cmd->speed; - bp->req_duplex = cmd->duplex; - bp->advertising = advertising; - } - - DP(NETIF_MSG_LINK, "req_autoneg 0x%x req_line_speed %d\n" - DP_LEVEL " req_duplex %d advertising 0x%x\n", - bp->req_autoneg, bp->req_line_speed, bp->req_duplex, - bp->advertising); - - bnx2x_stop_stats(bp); - bnx2x_link_initialize(bp); - - return 0; -} - -static void bnx2x_get_drvinfo(struct net_device *dev, - struct ethtool_drvinfo *info) -{ - struct bnx2x *bp = netdev_priv(dev); - - strcpy(info->driver, DRV_MODULE_NAME); - strcpy(info->version, DRV_MODULE_VERSION); - snprintf(info->fw_version, 32, "%d.%d.%d:%d (BC VER %x)", - BCM_5710_FW_MAJOR_VERSION, BCM_5710_FW_MINOR_VERSION, - BCM_5710_FW_REVISION_VERSION, BCM_5710_FW_COMPILE_FLAGS, - bp->bc_ver); - strcpy(info->bus_info, pci_name(bp->pdev)); - info->n_stats = BNX2X_NUM_STATS; - info->testinfo_len = BNX2X_NUM_TESTS; - info->eedump_len = bp->flash_size; - info->regdump_len = 0; -} - -static void bnx2x_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) -{ - struct bnx2x *bp = netdev_priv(dev); - - if (bp->flags & NO_WOL_FLAG) { - wol->supported = 0; - wol->wolopts = 0; - } else { - wol->supported = WAKE_MAGIC; - if (bp->wol) - wol->wolopts = WAKE_MAGIC; - else - wol->wolopts = 0; - } - memset(&wol->sopass, 0, sizeof(wol->sopass)); -} - -static int bnx2x_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) -{ - struct bnx2x *bp = netdev_priv(dev); - - if (wol->wolopts & ~WAKE_MAGIC) - return -EINVAL; - - if (wol->wolopts & WAKE_MAGIC) { - if (bp->flags & NO_WOL_FLAG) - return -EINVAL; - - bp->wol = 1; - } else { - bp->wol = 0; - } - return 0; -} - -static u32 bnx2x_get_msglevel(struct net_device *dev) -{ - struct bnx2x *bp = netdev_priv(dev); - - return bp->msglevel; -} - -static void bnx2x_set_msglevel(struct net_device *dev, u32 level) -{ - struct bnx2x *bp = netdev_priv(dev); - - if (capable(CAP_NET_ADMIN)) - bp->msglevel = level; -} - -static int bnx2x_nway_reset(struct net_device *dev) -{ - struct bnx2x *bp = netdev_priv(dev); - - if (bp->state != BNX2X_STATE_OPEN) { - DP(NETIF_MSG_PROBE, "state is %x, returning\n", bp->state); - return -EAGAIN; - } - - bnx2x_stop_stats(bp); - bnx2x_link_initialize(bp); - - return 0; -} - -static int bnx2x_get_eeprom_len(struct net_device *dev) -{ - struct bnx2x *bp = netdev_priv(dev); - - return bp->flash_size; -} - -static int bnx2x_acquire_nvram_lock(struct bnx2x *bp) -{ - int port = bp->port; - int count, i; - u32 val = 0; - - /* adjust timeout for emulation/FPGA */ - count = NVRAM_TIMEOUT_COUNT; - if (CHIP_REV_IS_SLOW(bp)) - count *= 100; - - /* request access to nvram interface */ - REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB, - (MCPR_NVM_SW_ARB_ARB_REQ_SET1 << port)); - - for (i = 0; i < count*10; i++) { - val = REG_RD(bp, MCP_REG_MCPR_NVM_SW_ARB); - if (val & (MCPR_NVM_SW_ARB_ARB_ARB1 << port)) - break; - - udelay(5); - } - - if (!(val & (MCPR_NVM_SW_ARB_ARB_ARB1 << port))) { - DP(NETIF_MSG_NVM, "cannot get access to nvram interface\n"); - return -EBUSY; - } - - return 0; -} - -static int bnx2x_release_nvram_lock(struct bnx2x *bp) -{ - int port = bp->port; - int count, i; - u32 val = 0; - - /* adjust timeout for emulation/FPGA */ - count = NVRAM_TIMEOUT_COUNT; - if (CHIP_REV_IS_SLOW(bp)) - count *= 100; - - /* relinquish nvram interface */ - REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB, - (MCPR_NVM_SW_ARB_ARB_REQ_CLR1 << port)); - - for (i = 0; i < count*10; i++) { - val = REG_RD(bp, MCP_REG_MCPR_NVM_SW_ARB); - if (!(val & (MCPR_NVM_SW_ARB_ARB_ARB1 << port))) - break; - - udelay(5); - } - - if (val & (MCPR_NVM_SW_ARB_ARB_ARB1 << port)) { - DP(NETIF_MSG_NVM, "cannot free access to nvram interface\n"); - return -EBUSY; - } - - return 0; -} - -static void bnx2x_enable_nvram_access(struct bnx2x *bp) -{ - u32 val; - - val = REG_RD(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE); - - /* enable both bits, even on read */ - REG_WR(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE, - (val | MCPR_NVM_ACCESS_ENABLE_EN | - MCPR_NVM_ACCESS_ENABLE_WR_EN)); -} - -static void bnx2x_disable_nvram_access(struct bnx2x *bp) -{ - u32 val; - - val = REG_RD(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE); - - /* disable both bits, even after read */ - REG_WR(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE, - (val & ~(MCPR_NVM_ACCESS_ENABLE_EN | - MCPR_NVM_ACCESS_ENABLE_WR_EN))); -} - -static int bnx2x_nvram_read_dword(struct bnx2x *bp, u32 offset, u32 *ret_val, - u32 cmd_flags) -{ - int count, i, rc; - u32 val; - - /* build the command word */ - cmd_flags |= MCPR_NVM_COMMAND_DOIT; - - /* need to clear DONE bit separately */ - REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, MCPR_NVM_COMMAND_DONE); - - /* address of the NVRAM to read from */ - REG_WR(bp, MCP_REG_MCPR_NVM_ADDR, - (offset & MCPR_NVM_ADDR_NVM_ADDR_VALUE)); - - /* issue a read command */ - REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, cmd_flags); - - /* adjust timeout for emulation/FPGA */ - count = NVRAM_TIMEOUT_COUNT; - if (CHIP_REV_IS_SLOW(bp)) - count *= 100; - - /* wait for completion */ - *ret_val = 0; - rc = -EBUSY; - for (i = 0; i < count; i++) { - udelay(5); - val = REG_RD(bp, MCP_REG_MCPR_NVM_COMMAND); - - if (val & MCPR_NVM_COMMAND_DONE) { - val = REG_RD(bp, MCP_REG_MCPR_NVM_READ); - DP(NETIF_MSG_NVM, "val 0x%08x\n", val); - /* we read nvram data in cpu order - * but ethtool sees it as an array of bytes - * converting to big-endian will do the work */ - val = cpu_to_be32(val); - *ret_val = val; - rc = 0; - break; - } - } - - return rc; -} - -static int bnx2x_nvram_read(struct bnx2x *bp, u32 offset, u8 *ret_buf, - int buf_size) -{ - int rc; - u32 cmd_flags; - u32 val; - - if ((offset & 0x03) || (buf_size & 0x03) || (buf_size == 0)) { - DP(NETIF_MSG_NVM, - "Invalid parameter: offset 0x%x buf_size 0x%x\n", - offset, buf_size); - return -EINVAL; - } - - if (offset + buf_size > bp->flash_size) { - DP(NETIF_MSG_NVM, "Invalid parameter: offset (0x%x) +" - " buf_size (0x%x) > flash_size (0x%x)\n", - offset, buf_size, bp->flash_size); - return -EINVAL; - } - - /* request access to nvram interface */ - rc = bnx2x_acquire_nvram_lock(bp); - if (rc) - return rc; - - /* enable access to nvram interface */ - bnx2x_enable_nvram_access(bp); - - /* read the first word(s) */ - cmd_flags = MCPR_NVM_COMMAND_FIRST; - while ((buf_size > sizeof(u32)) && (rc == 0)) { - rc = bnx2x_nvram_read_dword(bp, offset, &val, cmd_flags); - memcpy(ret_buf, &val, 4); - - /* advance to the next dword */ - offset += sizeof(u32); - ret_buf += sizeof(u32); - buf_size -= sizeof(u32); - cmd_flags = 0; - } - - if (rc == 0) { - cmd_flags |= MCPR_NVM_COMMAND_LAST; - rc = bnx2x_nvram_read_dword(bp, offset, &val, cmd_flags); - memcpy(ret_buf, &val, 4); - } - - /* disable access to nvram interface */ - bnx2x_disable_nvram_access(bp); - bnx2x_release_nvram_lock(bp); - - return rc; -} - -static int bnx2x_get_eeprom(struct net_device *dev, - struct ethtool_eeprom *eeprom, u8 *eebuf) -{ - struct bnx2x *bp = netdev_priv(dev); - int rc; - - DP(NETIF_MSG_NVM, "ethtool_eeprom: cmd %d\n" - DP_LEVEL " magic 0x%x offset 0x%x (%d) len 0x%x (%d)\n", - eeprom->cmd, eeprom->magic, eeprom->offset, eeprom->offset, - eeprom->len, eeprom->len); - - /* parameters already validated in ethtool_get_eeprom */ - - rc = bnx2x_nvram_read(bp, eeprom->offset, eebuf, eeprom->len); - - return rc; -} - -static int bnx2x_nvram_write_dword(struct bnx2x *bp, u32 offset, u32 val, - u32 cmd_flags) -{ - int count, i, rc; - - /* build the command word */ - cmd_flags |= MCPR_NVM_COMMAND_DOIT | MCPR_NVM_COMMAND_WR; - - /* need to clear DONE bit separately */ - REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, MCPR_NVM_COMMAND_DONE); - - /* write the data */ - REG_WR(bp, MCP_REG_MCPR_NVM_WRITE, val); - - /* address of the NVRAM to write to */ - REG_WR(bp, MCP_REG_MCPR_NVM_ADDR, - (offset & MCPR_NVM_ADDR_NVM_ADDR_VALUE)); - - /* issue the write command */ - REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, cmd_flags); - - /* adjust timeout for emulation/FPGA */ - count = NVRAM_TIMEOUT_COUNT; - if (CHIP_REV_IS_SLOW(bp)) - count *= 100; - - /* wait for completion */ - rc = -EBUSY; - for (i = 0; i < count; i++) { - udelay(5); - val = REG_RD(bp, MCP_REG_MCPR_NVM_COMMAND); - if (val & MCPR_NVM_COMMAND_DONE) { - rc = 0; - break; - } - } - - return rc; -} - -#define BYTE_OFFSET(offset) (8 * (offset & 0x03)) - -static int bnx2x_nvram_write1(struct bnx2x *bp, u32 offset, u8 *data_buf, - int buf_size) -{ - int rc; - u32 cmd_flags; - u32 align_offset; - u32 val; - - if (offset + buf_size > bp->flash_size) { - DP(NETIF_MSG_NVM, "Invalid parameter: offset (0x%x) +" - " buf_size (0x%x) > flash_size (0x%x)\n", - offset, buf_size, bp->flash_size); - return -EINVAL; - } - - /* request access to nvram interface */ - rc = bnx2x_acquire_nvram_lock(bp); - if (rc) - return rc; - - /* enable access to nvram interface */ - bnx2x_enable_nvram_access(bp); - - cmd_flags = (MCPR_NVM_COMMAND_FIRST | MCPR_NVM_COMMAND_LAST); - align_offset = (offset & ~0x03); - rc = bnx2x_nvram_read_dword(bp, align_offset, &val, cmd_flags); - - if (rc == 0) { - val &= ~(0xff << BYTE_OFFSET(offset)); - val |= (*data_buf << BYTE_OFFSET(offset)); - - /* nvram data is returned as an array of bytes - * convert it back to cpu order */ - val = be32_to_cpu(val); - - DP(NETIF_MSG_NVM, "val 0x%08x\n", val); - - rc = bnx2x_nvram_write_dword(bp, align_offset, val, - cmd_flags); - } - - /* disable access to nvram interface */ - bnx2x_disable_nvram_access(bp); - bnx2x_release_nvram_lock(bp); - - return rc; -} - -static int bnx2x_nvram_write(struct bnx2x *bp, u32 offset, u8 *data_buf, - int buf_size) -{ - int rc; - u32 cmd_flags; - u32 val; - u32 written_so_far; - - if (buf_size == 1) { /* ethtool */ - return bnx2x_nvram_write1(bp, offset, data_buf, buf_size); - } - - if ((offset & 0x03) || (buf_size & 0x03) || (buf_size == 0)) { - DP(NETIF_MSG_NVM, - "Invalid parameter: offset 0x%x buf_size 0x%x\n", - offset, buf_size); - return -EINVAL; - } - - if (offset + buf_size > bp->flash_size) { - DP(NETIF_MSG_NVM, "Invalid parameter: offset (0x%x) +" - " buf_size (0x%x) > flash_size (0x%x)\n", - offset, buf_size, bp->flash_size); - return -EINVAL; - } - - /* request access to nvram interface */ - rc = bnx2x_acquire_nvram_lock(bp); - if (rc) - return rc; - - /* enable access to nvram interface */ - bnx2x_enable_nvram_access(bp); - - written_so_far = 0; - cmd_flags = MCPR_NVM_COMMAND_FIRST; - while ((written_so_far < buf_size) && (rc == 0)) { - if (written_so_far == (buf_size - sizeof(u32))) - cmd_flags |= MCPR_NVM_COMMAND_LAST; - else if (((offset + 4) % NVRAM_PAGE_SIZE) == 0) - cmd_flags |= MCPR_NVM_COMMAND_LAST; - else if ((offset % NVRAM_PAGE_SIZE) == 0) - cmd_flags |= MCPR_NVM_COMMAND_FIRST; - - memcpy(&val, data_buf, 4); - DP(NETIF_MSG_NVM, "val 0x%08x\n", val); - - rc = bnx2x_nvram_write_dword(bp, offset, val, cmd_flags); - - /* advance to the next dword */ - offset += sizeof(u32); - data_buf += sizeof(u32); - written_so_far += sizeof(u32); - cmd_flags = 0; - } - - /* disable access to nvram interface */ - bnx2x_disable_nvram_access(bp); - bnx2x_release_nvram_lock(bp); - - return rc; -} - -static int bnx2x_set_eeprom(struct net_device *dev, - struct ethtool_eeprom *eeprom, u8 *eebuf) -{ - struct bnx2x *bp = netdev_priv(dev); - int rc; - - DP(NETIF_MSG_NVM, "ethtool_eeprom: cmd %d\n" - DP_LEVEL " magic 0x%x offset 0x%x (%d) len 0x%x (%d)\n", - eeprom->cmd, eeprom->magic, eeprom->offset, eeprom->offset, - eeprom->len, eeprom->len); - - /* parameters already validated in ethtool_set_eeprom */ - - rc = bnx2x_nvram_write(bp, eeprom->offset, eebuf, eeprom->len); - - return rc; -} - -static int bnx2x_get_coalesce(struct net_device *dev, - struct ethtool_coalesce *coal) -{ - struct bnx2x *bp = netdev_priv(dev); - - memset(coal, 0, sizeof(struct ethtool_coalesce)); - - coal->rx_coalesce_usecs = bp->rx_ticks; - coal->tx_coalesce_usecs = bp->tx_ticks; - coal->stats_block_coalesce_usecs = bp->stats_ticks; - - return 0; -} - -static int bnx2x_set_coalesce(struct net_device *dev, - struct ethtool_coalesce *coal) -{ - struct bnx2x *bp = netdev_priv(dev); - - bp->rx_ticks = (u16) coal->rx_coalesce_usecs; - if (bp->rx_ticks > 3000) - bp->rx_ticks = 3000; - - bp->tx_ticks = (u16) coal->tx_coalesce_usecs; - if (bp->tx_ticks > 0x3000) - bp->tx_ticks = 0x3000; - - bp->stats_ticks = coal->stats_block_coalesce_usecs; - if (bp->stats_ticks > 0xffff00) - bp->stats_ticks = 0xffff00; - bp->stats_ticks &= 0xffff00; - - if (netif_running(bp->dev)) - bnx2x_update_coalesce(bp); - - return 0; -} - -static void bnx2x_get_ringparam(struct net_device *dev, - struct ethtool_ringparam *ering) -{ - struct bnx2x *bp = netdev_priv(dev); - - ering->rx_max_pending = MAX_RX_AVAIL; - ering->rx_mini_max_pending = 0; - ering->rx_jumbo_max_pending = 0; - - ering->rx_pending = bp->rx_ring_size; - ering->rx_mini_pending = 0; - ering->rx_jumbo_pending = 0; - - ering->tx_max_pending = MAX_TX_AVAIL; - ering->tx_pending = bp->tx_ring_size; -} - -static int bnx2x_set_ringparam(struct net_device *dev, - struct ethtool_ringparam *ering) -{ - struct bnx2x *bp = netdev_priv(dev); - - if ((ering->rx_pending > MAX_RX_AVAIL) || - (ering->tx_pending > MAX_TX_AVAIL) || - (ering->tx_pending <= MAX_SKB_FRAGS + 4)) - return -EINVAL; - - bp->rx_ring_size = ering->rx_pending; - bp->tx_ring_size = ering->tx_pending; - - if (netif_running(bp->dev)) { - bnx2x_nic_unload(bp, 0); - bnx2x_nic_load(bp, 0); - } - - return 0; -} - -static void bnx2x_get_pauseparam(struct net_device *dev, - struct ethtool_pauseparam *epause) -{ - struct bnx2x *bp = netdev_priv(dev); - - epause->autoneg = - ((bp->req_autoneg & AUTONEG_FLOW_CTRL) == AUTONEG_FLOW_CTRL); - epause->rx_pause = ((bp->flow_ctrl & FLOW_CTRL_RX) == FLOW_CTRL_RX); - epause->tx_pause = ((bp->flow_ctrl & FLOW_CTRL_TX) == FLOW_CTRL_TX); - - DP(NETIF_MSG_LINK, "ethtool_pauseparam: cmd %d\n" - DP_LEVEL " autoneg %d rx_pause %d tx_pause %d\n", - epause->cmd, epause->autoneg, epause->rx_pause, epause->tx_pause); -} - -static int bnx2x_set_pauseparam(struct net_device *dev, - struct ethtool_pauseparam *epause) -{ - struct bnx2x *bp = netdev_priv(dev); - - DP(NETIF_MSG_LINK, "ethtool_pauseparam: cmd %d\n" - DP_LEVEL " autoneg %d rx_pause %d tx_pause %d\n", - epause->cmd, epause->autoneg, epause->rx_pause, epause->tx_pause); - - if (epause->autoneg) { - if (!(bp->supported & SUPPORTED_Autoneg)) { - DP(NETIF_MSG_LINK, "Aotoneg not supported\n"); - return -EINVAL; - } - - bp->req_autoneg |= AUTONEG_FLOW_CTRL; - } else - bp->req_autoneg &= ~AUTONEG_FLOW_CTRL; - - bp->req_flow_ctrl = FLOW_CTRL_AUTO; - - if (epause->rx_pause) - bp->req_flow_ctrl |= FLOW_CTRL_RX; - if (epause->tx_pause) - bp->req_flow_ctrl |= FLOW_CTRL_TX; - - if (!(bp->req_autoneg & AUTONEG_FLOW_CTRL) && - (bp->req_flow_ctrl == FLOW_CTRL_AUTO)) - bp->req_flow_ctrl = FLOW_CTRL_NONE; - - DP(NETIF_MSG_LINK, "req_autoneg 0x%x req_flow_ctrl 0x%x\n", - bp->req_autoneg, bp->req_flow_ctrl); - - bnx2x_stop_stats(bp); - bnx2x_link_initialize(bp); - - return 0; -} - -static u32 bnx2x_get_rx_csum(struct net_device *dev) -{ - struct bnx2x *bp = netdev_priv(dev); - - return bp->rx_csum; -} - -static int bnx2x_set_rx_csum(struct net_device *dev, u32 data) -{ - struct bnx2x *bp = netdev_priv(dev); - - bp->rx_csum = data; - return 0; -} - -static int bnx2x_set_tso(struct net_device *dev, u32 data) -{ - if (data) - dev->features |= (NETIF_F_TSO | NETIF_F_TSO_ECN); - else - dev->features &= ~(NETIF_F_TSO | NETIF_F_TSO_ECN); - return 0; -} - -static struct { - char string[ETH_GSTRING_LEN]; -} bnx2x_tests_str_arr[BNX2X_NUM_TESTS] = { - { "MC Errors (online)" } -}; - -static int bnx2x_self_test_count(struct net_device *dev) -{ - return BNX2X_NUM_TESTS; -} - -static void bnx2x_self_test(struct net_device *dev, - struct ethtool_test *etest, u64 *buf) -{ - struct bnx2x *bp = netdev_priv(dev); - int stats_state; - - memset(buf, 0, sizeof(u64) * BNX2X_NUM_TESTS); - - if (bp->state != BNX2X_STATE_OPEN) { - DP(NETIF_MSG_PROBE, "state is %x, returning\n", bp->state); - return; - } - - stats_state = bp->stats_state; - bnx2x_stop_stats(bp); - - if (bnx2x_mc_assert(bp) != 0) { - buf[0] = 1; - etest->flags |= ETH_TEST_FL_FAILED; - } - -#ifdef BNX2X_EXTRA_DEBUG - bnx2x_panic_dump(bp); -#endif - bp->stats_state = stats_state; -} - -static struct { - char string[ETH_GSTRING_LEN]; -} bnx2x_stats_str_arr[BNX2X_NUM_STATS] = { - { "rx_bytes"}, - { "rx_error_bytes"}, - { "tx_bytes"}, - { "tx_error_bytes"}, - { "rx_ucast_packets"}, - { "rx_mcast_packets"}, - { "rx_bcast_packets"}, - { "tx_ucast_packets"}, - { "tx_mcast_packets"}, - { "tx_bcast_packets"}, - { "tx_mac_errors"}, /* 10 */ - { "tx_carrier_errors"}, - { "rx_crc_errors"}, - { "rx_align_errors"}, - { "tx_single_collisions"}, - { "tx_multi_collisions"}, - { "tx_deferred"}, - { "tx_excess_collisions"}, - { "tx_late_collisions"}, - { "tx_total_collisions"}, - { "rx_fragments"}, /* 20 */ - { "rx_jabbers"}, - { "rx_undersize_packets"}, - { "rx_oversize_packets"}, - { "rx_xon_frames"}, - { "rx_xoff_frames"}, - { "tx_xon_frames"}, - { "tx_xoff_frames"}, - { "rx_mac_ctrl_frames"}, - { "rx_filtered_packets"}, - { "rx_discards"}, /* 30 */ - { "brb_discard"}, - { "brb_truncate"}, - { "xxoverflow"} -}; - -#define STATS_OFFSET32(offset_name) \ - (offsetof(struct bnx2x_eth_stats, offset_name) / 4) - -static unsigned long bnx2x_stats_offset_arr[BNX2X_NUM_STATS] = { - STATS_OFFSET32(total_bytes_received_hi), - STATS_OFFSET32(stat_IfHCInBadOctets_hi), - STATS_OFFSET32(total_bytes_transmitted_hi), - STATS_OFFSET32(stat_IfHCOutBadOctets_hi), - STATS_OFFSET32(total_unicast_packets_received_hi), - STATS_OFFSET32(total_multicast_packets_received_hi), - STATS_OFFSET32(total_broadcast_packets_received_hi), - STATS_OFFSET32(total_unicast_packets_transmitted_hi), - STATS_OFFSET32(total_multicast_packets_transmitted_hi), - STATS_OFFSET32(total_broadcast_packets_transmitted_hi), - STATS_OFFSET32(stat_Dot3statsInternalMacTransmitErrors), /* 10 */ - STATS_OFFSET32(stat_Dot3StatsCarrierSenseErrors), - STATS_OFFSET32(crc_receive_errors), - STATS_OFFSET32(alignment_errors), - STATS_OFFSET32(single_collision_transmit_frames), - STATS_OFFSET32(multiple_collision_transmit_frames), - STATS_OFFSET32(stat_Dot3StatsDeferredTransmissions), - STATS_OFFSET32(excessive_collision_frames), - STATS_OFFSET32(late_collision_frames), - STATS_OFFSET32(number_of_bugs_found_in_stats_spec), - STATS_OFFSET32(runt_packets_received), /* 20 */ - STATS_OFFSET32(jabber_packets_received), - STATS_OFFSET32(error_runt_packets_received), - STATS_OFFSET32(error_jabber_packets_received), - STATS_OFFSET32(pause_xon_frames_received), - STATS_OFFSET32(pause_xoff_frames_received), - STATS_OFFSET32(pause_xon_frames_transmitted), - STATS_OFFSET32(pause_xoff_frames_transmitted), - STATS_OFFSET32(control_frames_received), - STATS_OFFSET32(mac_filter_discard), - STATS_OFFSET32(no_buff_discard), /* 30 */ - STATS_OFFSET32(brb_discard), - STATS_OFFSET32(brb_truncate_discard), - STATS_OFFSET32(xxoverflow_discard) -}; - -static u8 bnx2x_stats_len_arr[BNX2X_NUM_STATS] = { - 8, 0, 8, 0, 8, 8, 8, 8, 8, 8, - 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4 -}; - -static void bnx2x_get_strings(struct net_device *dev, u32 stringset, u8 *buf) -{ - switch (stringset) { - case ETH_SS_STATS: - memcpy(buf, bnx2x_stats_str_arr, sizeof(bnx2x_stats_str_arr)); - break; - - case ETH_SS_TEST: - memcpy(buf, bnx2x_tests_str_arr, sizeof(bnx2x_tests_str_arr)); - break; - } -} - -static int bnx2x_get_stats_count(struct net_device *dev) -{ - return BNX2X_NUM_STATS; -} - -static void bnx2x_get_ethtool_stats(struct net_device *dev, - struct ethtool_stats *stats, u64 *buf) -{ - struct bnx2x *bp = netdev_priv(dev); - u32 *hw_stats = (u32 *)bnx2x_sp_check(bp, eth_stats); - int i; - - for (i = 0; i < BNX2X_NUM_STATS; i++) { - if (bnx2x_stats_len_arr[i] == 0) { - /* skip this counter */ - buf[i] = 0; - continue; - } - if (!hw_stats) { - buf[i] = 0; - continue; - } - if (bnx2x_stats_len_arr[i] == 4) { - /* 4-byte counter */ - buf[i] = (u64) *(hw_stats + bnx2x_stats_offset_arr[i]); - continue; - } - /* 8-byte counter */ - buf[i] = HILO_U64(*(hw_stats + bnx2x_stats_offset_arr[i]), - *(hw_stats + bnx2x_stats_offset_arr[i] + 1)); - } -} - -static int bnx2x_phys_id(struct net_device *dev, u32 data) -{ - struct bnx2x *bp = netdev_priv(dev); - int i; - - if (data == 0) - data = 2; - - for (i = 0; i < (data * 2); i++) { - if ((i % 2) == 0) { - bnx2x_leds_set(bp, SPEED_1000); - } else { - bnx2x_leds_unset(bp); - } - msleep_interruptible(500); - if (signal_pending(current)) - break; - } - - if (bp->link_up) - bnx2x_leds_set(bp, bp->line_speed); - - return 0; -} - -static struct ethtool_ops bnx2x_ethtool_ops = { - .get_settings = bnx2x_get_settings, - .set_settings = bnx2x_set_settings, - .get_drvinfo = bnx2x_get_drvinfo, - .get_wol = bnx2x_get_wol, - .set_wol = bnx2x_set_wol, - .get_msglevel = bnx2x_get_msglevel, - .set_msglevel = bnx2x_set_msglevel, - .nway_reset = bnx2x_nway_reset, - .get_link = ethtool_op_get_link, - .get_eeprom_len = bnx2x_get_eeprom_len, - .get_eeprom = bnx2x_get_eeprom, - .set_eeprom = bnx2x_set_eeprom, - .get_coalesce = bnx2x_get_coalesce, - .set_coalesce = bnx2x_set_coalesce, - .get_ringparam = bnx2x_get_ringparam, - .set_ringparam = bnx2x_set_ringparam, - .get_pauseparam = bnx2x_get_pauseparam, - .set_pauseparam = bnx2x_set_pauseparam, - .get_rx_csum = bnx2x_get_rx_csum, - .set_rx_csum = bnx2x_set_rx_csum, - .get_tx_csum = ethtool_op_get_tx_csum, - .set_tx_csum = ethtool_op_set_tx_csum, - .get_sg = ethtool_op_get_sg, - .set_sg = ethtool_op_set_sg, - .get_tso = ethtool_op_get_tso, - .set_tso = bnx2x_set_tso, - .self_test_count = bnx2x_self_test_count, - .self_test = bnx2x_self_test, - .get_strings = bnx2x_get_strings, - .phys_id = bnx2x_phys_id, - .get_stats_count = bnx2x_get_stats_count, - .get_ethtool_stats = bnx2x_get_ethtool_stats -}; - -/* end of ethtool_ops */ - -/**************************************************************************** -* General service functions -****************************************************************************/ - -static int bnx2x_set_power_state(struct bnx2x *bp, pci_power_t state) -{ - u16 pmcsr; - - pci_read_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL, &pmcsr); - - switch (state) { - case PCI_D0: - pci_write_config_word(bp->pdev, - bp->pm_cap + PCI_PM_CTRL, - ((pmcsr & ~PCI_PM_CTRL_STATE_MASK) | - PCI_PM_CTRL_PME_STATUS)); - - if (pmcsr & PCI_PM_CTRL_STATE_MASK) - /* delay required during transition out of D3hot */ - msleep(20); - break; - - case PCI_D3hot: - pmcsr &= ~PCI_PM_CTRL_STATE_MASK; - pmcsr |= 3; - - if (bp->wol) - pmcsr |= PCI_PM_CTRL_PME_ENABLE; - - pci_write_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL, - pmcsr); - - /* No more memory access after this point until - * device is brought back to D0. - */ - break; - - default: - return -EINVAL; - } - return 0; -} - -/* - * net_device service functions - */ - -/* called with netif_tx_lock from set_multicast */ -static void bnx2x_set_rx_mode(struct net_device *dev) -{ - struct bnx2x *bp = netdev_priv(dev); - u32 rx_mode = BNX2X_RX_MODE_NORMAL; - - DP(NETIF_MSG_IFUP, "called dev->flags = %x\n", dev->flags); - - if (dev->flags & IFF_PROMISC) - rx_mode = BNX2X_RX_MODE_PROMISC; - - else if ((dev->flags & IFF_ALLMULTI) || - (dev->mc_count > BNX2X_MAX_MULTICAST)) - rx_mode = BNX2X_RX_MODE_ALLMULTI; - - else { /* some multicasts */ - int i, old, offset; - struct dev_mc_list *mclist; - struct mac_configuration_cmd *config = - bnx2x_sp(bp, mcast_config); - - for (i = 0, mclist = dev->mc_list; - mclist && (i < dev->mc_count); - i++, mclist = mclist->next) { - - config->config_table[i].cam_entry.msb_mac_addr = - swab16(*(u16 *)&mclist->dmi_addr[0]); - config->config_table[i].cam_entry.middle_mac_addr = - swab16(*(u16 *)&mclist->dmi_addr[2]); - config->config_table[i].cam_entry.lsb_mac_addr = - swab16(*(u16 *)&mclist->dmi_addr[4]); - config->config_table[i].cam_entry.flags = - cpu_to_le16(bp->port); - config->config_table[i].target_table_entry.flags = 0; - config->config_table[i].target_table_entry. - client_id = 0; - config->config_table[i].target_table_entry. - vlan_id = 0; - - DP(NETIF_MSG_IFUP, - "setting MCAST[%d] (%04x:%04x:%04x)\n", - i, config->config_table[i].cam_entry.msb_mac_addr, - config->config_table[i].cam_entry.middle_mac_addr, - config->config_table[i].cam_entry.lsb_mac_addr); - } - old = config->hdr.length_6b; - if (old > i) { - for (; i < old; i++) { - if (CAM_IS_INVALID(config->config_table[i])) { - i--; /* already invalidated */ - break; - } - /* invalidate */ - CAM_INVALIDATE(config->config_table[i]); - } - } - - if (CHIP_REV_IS_SLOW(bp)) - offset = BNX2X_MAX_EMUL_MULTI*(1 + bp->port); - else - offset = BNX2X_MAX_MULTICAST*(1 + bp->port); - - config->hdr.length_6b = i; - config->hdr.offset = offset; - config->hdr.reserved0 = 0; - config->hdr.reserved1 = 0; - - bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_SET_MAC, 0, - U64_HI(bnx2x_sp_mapping(bp, mcast_config)), - U64_LO(bnx2x_sp_mapping(bp, mcast_config)), 0); - } - - bp->rx_mode = rx_mode; - bnx2x_set_storm_rx_mode(bp); -} - -static int bnx2x_poll(struct net_device *dev, int *budget) -{ - struct bnx2x *bp = netdev_priv(dev); - struct bnx2x_fastpath *fp = bp->fp; - int work_to_do = min(*budget, dev->quota); - int work_done = 0; - -#ifdef BNX2X_STOP_ON_ERROR - if (unlikely(bp->panic)) - goto out_panic; -#endif - - prefetch(fp->tx_buf_ring[TX_BD(fp->tx_pkt_cons)].skb); - prefetch(fp->rx_buf_ring[RX_BD(fp->rx_bd_cons)].skb); - prefetch((char *)(fp->rx_buf_ring[RX_BD(fp->rx_bd_cons)].skb) + 256); - - bnx2x_update_fpsb_idx(fp); - - if (le16_to_cpu(*fp->tx_cons_sb) != fp->tx_pkt_cons) - bnx2x_tx_int(fp, work_to_do); - - - if (le16_to_cpu(*fp->rx_cons_sb) != fp->rx_comp_cons) - work_done = bnx2x_rx_int(fp, work_to_do); - - *budget -= work_done; - dev->quota -= work_done; - - rmb(); /* bnx2x_has_work() reads the status block */ - - /* must not complete if we consumed full budget */ - if ((work_done == 0) && !bnx2x_has_work(fp)) { - -#ifdef BNX2X_STOP_ON_ERROR -out_panic: -#endif - netif_rx_complete(bp->dev); - - bnx2x_ack_sb(bp, fp->index, USTORM_ID, - le16_to_cpu(fp->fp_u_idx), IGU_INT_NOP, 1); - bnx2x_ack_sb(bp, fp->index, CSTORM_ID, - le16_to_cpu(fp->fp_c_idx), IGU_INT_ENABLE, 1); - return 0; - } - - return 1; -} - -/* Called with netif_tx_lock. - * bnx2x_tx_int() runs without netif_tx_lock unless it needs to call - * netif_wake_queue(). - */ -static int bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct bnx2x *bp = netdev_priv(dev); - struct bnx2x_fastpath *fp; - struct sw_tx_bd *tx_buf; - struct eth_tx_bd *tx_bd; - struct eth_tx_parse_bd *pbd = NULL; - u16 pkt_prod, bd_prod; - int nbd, fp_index = 0; - dma_addr_t mapping; - -#ifdef BNX2X_STOP_ON_ERROR - if (unlikely(bp->panic)) - return NETDEV_TX_BUSY; -#endif - - fp_index = smp_processor_id() % (bp->num_queues); - - fp = &bp->fp[fp_index]; - if (unlikely(bnx2x_tx_avail(bp->fp) < - (skb_shinfo(skb)->nr_frags + 3))) { - bp->slowpath->eth_stats.driver_xoff++, - netif_stop_queue(dev); - BNX2X_ERR("BUG! Tx ring full when queue awake!\n"); - return NETDEV_TX_BUSY; - } - - /* - This is a bit ugly. First we use one BD which we mark as start, - then for TSO or xsum we have a parsing info BD, - and only then we have the rest of the TSO bds. - (don't forget to mark the last one as last, - and to unmap only AFTER you write to the BD ...) - I would like to thank DovH for this mess. - */ - - pkt_prod = fp->tx_pkt_prod++; - bd_prod = fp->tx_bd_prod; - bd_prod = TX_BD(bd_prod); - - /* get a tx_buff and first bd */ - tx_buf = &fp->tx_buf_ring[TX_BD(pkt_prod)]; - tx_bd = &fp->tx_desc_ring[bd_prod]; - - tx_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD; - tx_bd->general_data = (UNICAST_ADDRESS << - ETH_TX_BD_ETH_ADDR_TYPE_SHIFT); - tx_bd->general_data |= 1; /* header nbd */ - - /* remember the first bd of the packet */ - tx_buf->first_bd = bd_prod; - - DP(NETIF_MSG_TX_QUEUED, - "sending pkt %u @%p next_idx %u bd %u @%p\n", - pkt_prod, tx_buf, fp->tx_pkt_prod, bd_prod, tx_bd); - - if (skb->ip_summed == CHECKSUM_PARTIAL) { - struct iphdr *iph = ip_hdr(skb); - u8 len; - - tx_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IP_CSUM; - - /* turn on parsing and get a bd */ - bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); - pbd = (void *)&fp->tx_desc_ring[bd_prod]; - len = ((u8 *)iph - (u8 *)skb->data) / 2; - - /* for now NS flag is not used in Linux */ - pbd->global_data = (len | - ((skb->protocol == ntohs(ETH_P_8021Q)) << - ETH_TX_PARSE_BD_LLC_SNAP_EN_SHIFT)); - pbd->ip_hlen = ip_hdrlen(skb) / 2; - pbd->total_hlen = cpu_to_le16(len + pbd->ip_hlen); - if (iph->protocol == IPPROTO_TCP) { - struct tcphdr *th = tcp_hdr(skb); - - tx_bd->bd_flags.as_bitfield |= - ETH_TX_BD_FLAGS_TCP_CSUM; - pbd->tcp_flags = pbd_tcp_flags(skb); - pbd->total_hlen += cpu_to_le16(tcp_hdrlen(skb) / 2); - pbd->tcp_pseudo_csum = swab16(th->check); - - } else if (iph->protocol == IPPROTO_UDP) { - struct udphdr *uh = udp_hdr(skb); - - tx_bd->bd_flags.as_bitfield |= - ETH_TX_BD_FLAGS_TCP_CSUM; - pbd->total_hlen += cpu_to_le16(4); - pbd->global_data |= ETH_TX_PARSE_BD_CS_ANY_FLG; - pbd->cs_offset = 5; /* 10 >> 1 */ - pbd->tcp_pseudo_csum = 0; - /* HW bug: we need to subtract 10 bytes before the - * UDP header from the csum - */ - uh->check = (u16) ~csum_fold(csum_sub(uh->check, - csum_partial(((u8 *)(uh)-10), 10, 0))); - } - } - - if ((bp->vlgrp != NULL) && vlan_tx_tag_present(skb)) { - tx_bd->vlan = cpu_to_le16(vlan_tx_tag_get(skb)); - tx_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_VLAN_TAG; - } else { - tx_bd->vlan = cpu_to_le16(pkt_prod); - } - - mapping = pci_map_single(bp->pdev, skb->data, - skb->len, PCI_DMA_TODEVICE); - - tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); - tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); - nbd = skb_shinfo(skb)->nr_frags + ((pbd == NULL)? 1 : 2); - tx_bd->nbd = cpu_to_le16(nbd); - tx_bd->nbytes = cpu_to_le16(skb_headlen(skb)); - - DP(NETIF_MSG_TX_QUEUED, "first bd @%p addr (%x:%x) nbd %d" - " nbytes %d flags %x vlan %u\n", - tx_bd, tx_bd->addr_hi, tx_bd->addr_lo, tx_bd->nbd, - tx_bd->nbytes, tx_bd->bd_flags.as_bitfield, tx_bd->vlan); - - if (skb_shinfo(skb)->gso_size && - (skb->len > (bp->dev->mtu + ETH_HLEN))) { - int hlen = 2 * le16_to_cpu(pbd->total_hlen); - - DP(NETIF_MSG_TX_QUEUED, - "TSO packet len %d hlen %d total len %d tso size %d\n", - skb->len, hlen, skb_headlen(skb), - skb_shinfo(skb)->gso_size); - - tx_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_SW_LSO; - - if (tx_bd->nbytes > cpu_to_le16(hlen)) { - /* we split the first bd into headers and data bds - * to ease the pain of our fellow micocode engineers - * we use one mapping for both bds - * So far this has only been observed to happen - * in Other Operating Systems(TM) - */ - - /* first fix first bd */ - nbd++; - tx_bd->nbd = cpu_to_le16(nbd); - tx_bd->nbytes = cpu_to_le16(hlen); - - /* we only print this as an error - * because we don't think this will ever happen. - */ - BNX2X_ERR("TSO split header size is %d (%x:%x)" - " nbd %d\n", tx_bd->nbytes, tx_bd->addr_hi, - tx_bd->addr_lo, tx_bd->nbd); - - /* now get a new data bd - * (after the pbd) and fill it */ - bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); - tx_bd = &fp->tx_desc_ring[bd_prod]; - - tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); - tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping) + hlen); - tx_bd->nbytes = cpu_to_le16(skb_headlen(skb) - hlen); - tx_bd->vlan = cpu_to_le16(pkt_prod); - /* this marks the bd - * as one that has no individual mapping - * the FW ignores this flag in a bd not marked start - */ - tx_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_SW_LSO; - DP(NETIF_MSG_TX_QUEUED, - "TSO split data size is %d (%x:%x)\n", - tx_bd->nbytes, tx_bd->addr_hi, tx_bd->addr_lo); - } - - if (!pbd) { - /* supposed to be unreached - * (and therefore not handled properly...) - */ - BNX2X_ERR("LSO with no PBD\n"); - BUG(); - } - - pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size); - pbd->tcp_send_seq = swab32(tcp_hdr(skb)->seq); - pbd->ip_id = swab16(ip_hdr(skb)->id); - pbd->tcp_pseudo_csum = - swab16(~csum_tcpudp_magic(ip_hdr(skb)->saddr, - ip_hdr(skb)->daddr, - 0, IPPROTO_TCP, 0)); - pbd->global_data |= ETH_TX_PARSE_BD_PSEUDO_CS_WITHOUT_LEN; - } - - { - int i; - - for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { - skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; - - bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); - tx_bd = &fp->tx_desc_ring[bd_prod]; - - mapping = pci_map_page(bp->pdev, frag->page, - frag->page_offset, - frag->size, PCI_DMA_TODEVICE); - - tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); - tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); - tx_bd->nbytes = cpu_to_le16(frag->size); - tx_bd->vlan = cpu_to_le16(pkt_prod); - tx_bd->bd_flags.as_bitfield = 0; - DP(NETIF_MSG_TX_QUEUED, "frag %d bd @%p" - " addr (%x:%x) nbytes %d flags %x\n", - i, tx_bd, tx_bd->addr_hi, tx_bd->addr_lo, - tx_bd->nbytes, tx_bd->bd_flags.as_bitfield); - } /* for */ - } - - /* now at last mark the bd as the last bd */ - tx_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_END_BD; - - DP(NETIF_MSG_TX_QUEUED, "last bd @%p flags %x\n", - tx_bd, tx_bd->bd_flags.as_bitfield); - - tx_buf->skb = skb; - - bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); - - /* now send a tx doorbell, counting the next bd - * if the packet contains or ends with it - */ - if (TX_BD_POFF(bd_prod) < nbd) - nbd++; - - if (pbd) - DP(NETIF_MSG_TX_QUEUED, - "PBD @%p ip_data %x ip_hlen %u ip_id %u lso_mss %u" - " tcp_flags %x xsum %x seq %u hlen %u\n", - pbd, pbd->global_data, pbd->ip_hlen, pbd->ip_id, - pbd->lso_mss, pbd->tcp_flags, pbd->tcp_pseudo_csum, - pbd->tcp_send_seq, pbd->total_hlen); - - DP(NETIF_MSG_TX_QUEUED, "doorbell: nbd %u bd %d\n", nbd, bd_prod); - - fp->hw_tx_prods->bds_prod = - cpu_to_le16(le16_to_cpu(fp->hw_tx_prods->bds_prod) + nbd); - mb(); /* FW restriction: must not reorder writing nbd and packets */ - fp->hw_tx_prods->packets_prod = - cpu_to_le32(le32_to_cpu(fp->hw_tx_prods->packets_prod) + 1); - DOORBELL(bp, fp_index, 0); - - mmiowb(); - - fp->tx_bd_prod = bd_prod; - dev->trans_start = jiffies; - - if (unlikely(bnx2x_tx_avail(fp) < MAX_SKB_FRAGS + 3)) { - netif_stop_queue(dev); - bp->slowpath->eth_stats.driver_xoff++; - if (bnx2x_tx_avail(fp) >= MAX_SKB_FRAGS + 3) - netif_wake_queue(dev); - } - fp->tx_pkt++; - - return NETDEV_TX_OK; -} - -static struct net_device_stats *bnx2x_get_stats(struct net_device *dev) -{ - return &((struct bnx2x *)dev->priv)->net_stats; -} - -/* Called with rtnl_lock */ -static int bnx2x_open(struct net_device *dev) -{ - struct bnx2x *bp = netdev_priv(dev); - - bnx2x_set_power_state(bp, PCI_D0); - - return bnx2x_nic_load(bp, 1); -} - -/* Called with rtnl_lock */ -static int bnx2x_close(struct net_device *dev) -{ - struct bnx2x *bp = netdev_priv(dev); - - /* Unload the driver, release IRQs */ - bnx2x_nic_unload(bp, 1); - - if (!CHIP_REV_IS_SLOW(bp)) - bnx2x_set_power_state(bp, PCI_D3hot); - - return 0; -} - -/* Called with rtnl_lock */ -static int bnx2x_change_mac_addr(struct net_device *dev, void *p) -{ - struct sockaddr *addr = p; - struct bnx2x *bp = netdev_priv(dev); - - if (!is_valid_ether_addr(addr->sa_data)) - return -EINVAL; - - memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); - if (netif_running(dev)) - bnx2x_set_mac_addr(bp); - - return 0; -} - -/* Called with rtnl_lock */ -static int bnx2x_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) -{ - struct mii_ioctl_data *data = if_mii(ifr); - struct bnx2x *bp = netdev_priv(dev); - int err; - - switch (cmd) { - case SIOCGMIIPHY: - data->phy_id = bp->phy_addr; - - /* fallthrough */ - case SIOCGMIIREG: { - u32 mii_regval; - - spin_lock_bh(&bp->phy_lock); - if (bp->state == BNX2X_STATE_OPEN) { - err = bnx2x_mdio22_read(bp, data->reg_num & 0x1f, - &mii_regval); - - data->val_out = mii_regval; - } else { - err = -EAGAIN; - } - spin_unlock_bh(&bp->phy_lock); - return err; - } - - case SIOCSMIIREG: - if (!capable(CAP_NET_ADMIN)) - return -EPERM; - - spin_lock_bh(&bp->phy_lock); - if (bp->state == BNX2X_STATE_OPEN) { - err = bnx2x_mdio22_write(bp, data->reg_num & 0x1f, - data->val_in); - } else { - err = -EAGAIN; - } - spin_unlock_bh(&bp->phy_lock); - return err; - - default: - /* do nothing */ - break; - } - - return -EOPNOTSUPP; -} - -/* Called with rtnl_lock */ -static int bnx2x_change_mtu(struct net_device *dev, int new_mtu) -{ - struct bnx2x *bp = netdev_priv(dev); - - if ((new_mtu > ETH_MAX_JUMBO_PACKET_SIZE) || - ((new_mtu + ETH_HLEN) < ETH_MIN_PACKET_SIZE)) - return -EINVAL; - - /* This does not race with packet allocation - * because the actual alloc size is - * only updated as part of load - */ - dev->mtu = new_mtu; - - if (netif_running(dev)) { - bnx2x_nic_unload(bp, 0); - bnx2x_nic_load(bp, 0); - } - return 0; -} - -static void bnx2x_tx_timeout(struct net_device *dev) -{ - struct bnx2x *bp = netdev_priv(dev); - -#ifdef BNX2X_STOP_ON_ERROR - if (!bp->panic) - bnx2x_panic(); -#endif - /* This allows the netif to be shutdown gracefully before resetting */ - schedule_work(&bp->reset_task); -} - -#ifdef BCM_VLAN -/* Called with rtnl_lock */ -static void bnx2x_vlan_rx_register(struct net_device *dev, - struct vlan_group *vlgrp) -{ - struct bnx2x *bp = netdev_priv(dev); - - bp->vlgrp = vlgrp; - if (netif_running(dev)) - bnx2x_set_rx_mode(dev); -} - -static void bnx2x_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) -{ - struct bnx2x *bp = netdev_priv(dev); - - if (bp->vlgrp) - bp->vlgrp->vlan_devices[vid] = NULL; - - if (netif_running(dev)) - bnx2x_set_client_config(bp); -} - - -#endif - -#if defined(HAVE_POLL_CONTROLLER) || defined(CONFIG_NET_POLL_CONTROLLER) -static void poll_bnx2x(struct net_device *dev) -{ - struct bnx2x *bp = netdev_priv(dev); - - disable_irq(bp->pdev->irq); - bnx2x_interrupt(bp->pdev->irq, dev, NULL); - enable_irq(bp->pdev->irq); -} -#endif - -static void bnx2x_reset_task(void *data) -{ - struct bnx2x *bp = data; - -#ifdef BNX2X_STOP_ON_ERROR - BNX2X_ERR("reset task called but STOP_ON_ERROR defined" - " so reset not done to allow debug dump,\n" - KERN_ERR " you will need to reboot when done\n"); - return; -#endif - - if (!netif_running(bp->dev)) - return; - - rtnl_lock(); - - if (bp->state != BNX2X_STATE_OPEN) { - DP(NETIF_MSG_TX_ERR, "state is %x, returning\n", bp->state); - goto reset_task_exit; - } - - bnx2x_nic_unload(bp, 0); - bnx2x_nic_load(bp, 0); - -reset_task_exit: - rtnl_unlock(); -} - -static int __devinit bnx2x_init_board(struct pci_dev *pdev, - struct net_device *dev) -{ - struct bnx2x *bp; - int rc; - - SET_NETDEV_DEV(dev, &pdev->dev); - bp = netdev_priv(dev); - - bp->flags = 0; - bp->port = PCI_FUNC(pdev->devfn); - - rc = pci_enable_device(pdev); - if (rc) { - printk(KERN_ERR PFX "Cannot enable PCI device, aborting\n"); - goto err_out; - } - - if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) { - printk(KERN_ERR PFX "Cannot find PCI device base address," - " aborting\n"); - rc = -ENODEV; - goto err_out_disable; - } - - if (!(pci_resource_flags(pdev, 2) & IORESOURCE_MEM)) { - printk(KERN_ERR PFX "Cannot find second PCI device" - " base address, aborting\n"); - rc = -ENODEV; - goto err_out_disable; - } - - rc = pci_request_regions(pdev, DRV_MODULE_NAME); - if (rc) { - printk(KERN_ERR PFX "Cannot obtain PCI resources," - " aborting\n"); - goto err_out_disable; - } - - pci_set_master(pdev); - - bp->pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); - if (bp->pm_cap == 0) { - printk(KERN_ERR PFX "Cannot find power management" - " capability, aborting\n"); - rc = -EIO; - goto err_out_release; - } - - bp->pcie_cap = pci_find_capability(pdev, PCI_CAP_ID_EXP); - if (bp->pcie_cap == 0) { - printk(KERN_ERR PFX "Cannot find PCI Express capability," - " aborting\n"); - rc = -EIO; - goto err_out_release; - } - - if (pci_set_dma_mask(pdev, DMA_64BIT_MASK) == 0) { - bp->flags |= USING_DAC_FLAG; - if (pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK) != 0) { - printk(KERN_ERR PFX "pci_set_consistent_dma_mask" - " failed, aborting\n"); - rc = -EIO; - goto err_out_release; - } - - } else if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) { - printk(KERN_ERR PFX "System does not support DMA," - " aborting\n"); - rc = -EIO; - goto err_out_release; - } - - bp->dev = dev; - bp->pdev = pdev; - - spin_lock_init(&bp->phy_lock); - - INIT_WORK(&bp->reset_task, bnx2x_reset_task, bp); - INIT_WORK(&bp->sp_task, bnx2x_sp_task, bp); - - dev->base_addr = pci_resource_start(pdev, 0); - - dev->irq = pdev->irq; - - bp->regview = ioremap_nocache(dev->base_addr, - pci_resource_len(pdev, 0)); - if (!bp->regview) { - printk(KERN_ERR PFX "Cannot map register space, aborting\n"); - rc = -ENOMEM; - goto err_out_release; - } - - bp->doorbells = ioremap_nocache(pci_resource_start(pdev , 2), - pci_resource_len(pdev, 2)); - if (!bp->doorbells) { - printk(KERN_ERR PFX "Cannot map doorbell space, aborting\n"); - rc = -ENOMEM; - goto err_out_unmap; - } - - bnx2x_set_power_state(bp, PCI_D0); - - bnx2x_get_hwinfo(bp); - - if (CHIP_REV(bp) == CHIP_REV_FPGA) { - printk(KERN_ERR PFX "FPGA detected. MCP disabled," - " will only init first device\n"); - onefunc = 1; - nomcp = 1; - } - - if (nomcp) { - printk(KERN_ERR PFX "MCP disabled, will only" - " init first device\n"); - onefunc = 1; - } - - if (onefunc && bp->port) { - printk(KERN_ERR PFX "Second device disabled, exiting\n"); - rc = -ENODEV; - goto err_out_unmap; - } - - bp->tx_ring_size = MAX_TX_AVAIL; - bp->rx_ring_size = MAX_RX_AVAIL; - - bp->rx_csum = 1; - - bp->rx_offset = 0; - - bp->tx_quick_cons_trip_int = 0xff; - bp->tx_quick_cons_trip = 0xff; - bp->tx_ticks_int = 50; - bp->tx_ticks = 50; - - bp->rx_quick_cons_trip_int = 0xff; - bp->rx_quick_cons_trip = 0xff; - bp->rx_ticks_int = 25; - bp->rx_ticks = 25; - - bp->stats_ticks = 1000000 & 0xffff00; - - bp->timer_interval = HZ; - bp->current_interval = (poll ? poll : HZ); - - init_timer(&bp->timer); - bp->timer.expires = jiffies + bp->current_interval; - bp->timer.data = (unsigned long) bp; - bp->timer.function = bnx2x_timer; - - return 0; - -err_out_unmap: - if (bp->regview) { - iounmap(bp->regview); - bp->regview = NULL; - } - - if (bp->doorbells) { - iounmap(bp->doorbells); - bp->doorbells = NULL; - } - -err_out_release: - pci_release_regions(pdev); - -err_out_disable: - pci_disable_device(pdev); - pci_set_drvdata(pdev, NULL); - -err_out: - return rc; -} - -static int __devinit bnx2x_get_pcie_width(struct bnx2x *bp) -{ - u32 val = REG_RD(bp, PCICFG_OFFSET + PCICFG_LINK_CONTROL); - - val = (val & PCICFG_LINK_WIDTH) >> PCICFG_LINK_WIDTH_SHIFT; - return val; -} - -/* return value of 1=2.5GHz 2=5GHz */ -static int __devinit bnx2x_get_pcie_speed(struct bnx2x *bp) -{ - u32 val = REG_RD(bp, PCICFG_OFFSET + PCICFG_LINK_CONTROL); - - val = (val & PCICFG_LINK_SPEED) >> PCICFG_LINK_SPEED_SHIFT; - return val; -} - -static int __devinit bnx2x_init_one(struct pci_dev *pdev, - const struct pci_device_id *ent) -{ - static int version_printed; - struct net_device *dev = NULL; - struct bnx2x *bp; - int rc, i; - int port = PCI_FUNC(pdev->devfn); - - if (version_printed++ == 0) - printk(KERN_INFO "%s", version); - - /* dev zeroed in init_etherdev */ - dev = alloc_etherdev(sizeof(*bp)); - if (!dev) - return -ENOMEM; - - netif_carrier_off(dev); - - bp = netdev_priv(dev); - bp->msglevel = debug; - - if (port && onefunc) { - printk(KERN_ERR PFX "second function disabled. exiting\n"); - free_netdev(dev); - return 0; - } - - rc = bnx2x_init_board(pdev, dev); - if (rc < 0) { - free_netdev(dev); - return rc; - } - - dev->poll = bnx2x_poll; - dev->weight = 128*4; - - dev->hard_start_xmit = bnx2x_start_xmit; - dev->watchdog_timeo = TX_TIMEOUT; - - dev->get_stats = bnx2x_get_stats; - dev->ethtool_ops = &bnx2x_ethtool_ops; - dev->open = bnx2x_open; - dev->stop = bnx2x_close; - dev->set_multicast_list = bnx2x_set_rx_mode; - dev->set_mac_address = bnx2x_change_mac_addr; - dev->do_ioctl = bnx2x_ioctl; - dev->change_mtu = bnx2x_change_mtu; - dev->tx_timeout = bnx2x_tx_timeout; -#ifdef BCM_VLAN - dev->vlan_rx_register = bnx2x_vlan_rx_register; - dev->vlan_rx_kill_vid = bnx2x_vlan_rx_kill_vid; -#endif -#if defined(HAVE_POLL_CONTROLLER) || defined(CONFIG_NET_POLL_CONTROLLER) - dev->poll_controller = poll_bnx2x; -#endif - dev->features |= NETIF_F_SG; - if (bp->flags & USING_DAC_FLAG) - dev->features |= NETIF_F_HIGHDMA; - dev->features |= NETIF_F_IP_CSUM; -#ifdef BCM_VLAN - dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; -#endif - dev->features |= NETIF_F_TSO | NETIF_F_TSO_ECN; - - rc = register_netdev(dev); - if (rc) { - dev_err(&pdev->dev, "Cannot register net device\n"); - if (bp->regview) - iounmap(bp->regview); - if (bp->doorbells) - iounmap(bp->doorbells); - pci_release_regions(pdev); - pci_disable_device(pdev); - pci_set_drvdata(pdev, NULL); - free_netdev(dev); - return rc; - } - - pci_set_drvdata(pdev, dev); - - bp->name = board_info[ent->driver_data].name; - printk(KERN_INFO "%s: %s (%c%d) PCI-E x%d %s found at mem %lx," - " IRQ %d, ", dev->name, bp->name, - ((CHIP_ID(bp) & 0xf000) >> 12) + 'A', - ((CHIP_ID(bp) & 0x0ff0) >> 4), - bnx2x_get_pcie_width(bp), - (bnx2x_get_pcie_speed(bp) == 2) ? "5GHz (Gen2)" : "2.5GHz", - dev->base_addr, bp->pdev->irq); - - printk("node addr "); - for (i = 0; i < 6; i++) - printk("%2.2x", dev->dev_addr[i]); - printk("\n"); - - return 0; -} - -static void __devexit bnx2x_remove_one(struct pci_dev *pdev) -{ - struct net_device *dev = pci_get_drvdata(pdev); - struct bnx2x *bp; - - if (!dev) { - /* we get here if init_one() fails */ - printk(KERN_ERR PFX "BAD net device from bnx2x_init_one\n"); - return; - } - - bp = netdev_priv(dev); - - unregister_netdev(dev); - - if (bp->regview) - iounmap(bp->regview); - - if (bp->doorbells) - iounmap(bp->doorbells); - - free_netdev(dev); - pci_release_regions(pdev); - pci_disable_device(pdev); - pci_set_drvdata(pdev, NULL); -} - -static int bnx2x_suspend(struct pci_dev *pdev, pm_message_t state) -{ - struct net_device *dev = pci_get_drvdata(pdev); - struct bnx2x *bp; - - if (!dev) - return 0; - - if (!netif_running(dev)) - return 0; - - bp = netdev_priv(dev); - - bnx2x_nic_unload(bp, 0); - - netif_device_detach(dev); - - pci_save_state(pdev); - bnx2x_set_power_state(bp, pci_choose_state(pdev, state)); - - return 0; -} - -static int bnx2x_resume(struct pci_dev *pdev) -{ - struct net_device *dev = pci_get_drvdata(pdev); - struct bnx2x *bp; - int rc; - - if (!dev) { - printk(KERN_ERR PFX "BAD net device from bnx2x_init_one\n"); - return -ENODEV; - } - - if (!netif_running(dev)) - return 0; - - bp = netdev_priv(dev); - - pci_restore_state(pdev); - bnx2x_set_power_state(bp, PCI_D0); - netif_device_attach(dev); - - rc = bnx2x_nic_load(bp, 0); - if (rc) - return rc; - - return 0; -} - -static struct pci_driver bnx2x_pci_driver = { - .name = DRV_MODULE_NAME, - .id_table = bnx2x_pci_tbl, - .probe = bnx2x_init_one, - .remove = __devexit_p(bnx2x_remove_one), - .suspend = bnx2x_suspend, - .resume = bnx2x_resume, -}; - -static int __init bnx2x_init(void) -{ - return pci_register_driver(&bnx2x_pci_driver); -} - -static void __exit bnx2x_cleanup(void) -{ - pci_unregister_driver(&bnx2x_pci_driver); -} - -module_init(bnx2x_init); -module_exit(bnx2x_cleanup); - diff --git a/drivers/net/bnx2x.h b/drivers/net/bnx2x.h index bc854894..d0841cff 100644 --- a/drivers/net/bnx2x.h +++ b/drivers/net/bnx2x.h @@ -14,39 +14,65 @@ #ifndef BNX2X_H #define BNX2X_H +/* compilation time flags */ + +/* define this to make the driver freeze on error to allow getting debug info + * (you will need to reboot afterwards) */ +/* #define BNX2X_STOP_ON_ERROR */ + +#if (LINUX_VERSION_CODE >= 0x020610) +#define BCM_CNIC +#endif + +#if (LINUX_VERSION_CODE >= 0x020618) || defined(__VMKLNX__) /* BNX2X_UPSTREAM */ +#define BNX2X_NEW_NAPI +#endif + +#if (LINUX_VERSION_CODE < 0x020618) /* ! BNX2X_UPSTREAM */ +#include "bnx2x_compat.h" +#endif +#ifdef BCM_CNIC +#include "cnic_drv.h" +#endif +#include "bnx2x_reg.h" +#include "bnx2x_fw_defs.h" +#include "bnx2x_hsi.h" +#include "bnx2x_link.h" + /* error/debug prints */ -#define DRV_MODULE_NAME "bnx2x" -#define PFX DRV_MODULE_NAME ": " +#define DRV_MODULE_NAME "bnx2x" +#define PFX DRV_MODULE_NAME ": " /* for messages that are currently off */ -#define BNX2X_MSG_OFF 0 -#define BNX2X_MSG_MCP 0x10000 /* was: NETIF_MSG_HW */ -#define BNX2X_MSG_STATS 0x20000 /* was: NETIF_MSG_TIMER */ -#define NETIF_MSG_NVM 0x40000 /* was: NETIF_MSG_HW */ -#define NETIF_MSG_DMAE 0x80000 /* was: NETIF_MSG_HW */ +#define BNX2X_MSG_OFF 0 +#define BNX2X_MSG_MCP 0x010000 /* was: NETIF_MSG_HW */ +#define BNX2X_MSG_STATS 0x020000 /* was: NETIF_MSG_TIMER */ +#define BNX2X_MSG_NVM 0x040000 /* was: NETIF_MSG_HW */ +#define BNX2X_MSG_DMAE 0x080000 /* was: NETIF_MSG_HW */ #define BNX2X_MSG_SP 0x100000 /* was: NETIF_MSG_INTR */ #define BNX2X_MSG_FP 0x200000 /* was: NETIF_MSG_INTR */ -#define DP_LEVEL KERN_NOTICE /* was: KERN_DEBUG */ +#define DP_LEVEL KERN_NOTICE /* was: KERN_DEBUG */ /* regular debug print */ #define DP(__mask, __fmt, __args...) do { \ if (bp->msglevel & (__mask)) \ - printk(DP_LEVEL "[%s:%d(%s)]" __fmt, __FUNCTION__, \ - __LINE__, bp->dev?(bp->dev->name):"?", ##__args); \ + printk(DP_LEVEL "[%s:%d(%s)]" __fmt, __func__, __LINE__, \ + bp->dev ? (bp->dev->name) : "?", ##__args); \ } while (0) -/* for errors (never masked) */ -#define BNX2X_ERR(__fmt, __args...) do { \ - printk(KERN_ERR "[%s:%d(%s)]" __fmt, __FUNCTION__, \ - __LINE__, bp->dev?(bp->dev->name):"?", ##__args); \ +/* errors debug print */ +#define BNX2X_DBG_ERR(__fmt, __args...) do { \ + if (bp->msglevel & NETIF_MSG_PROBE) \ + printk(KERN_ERR "[%s:%d(%s)]" __fmt, __func__, __LINE__, \ + bp->dev ? (bp->dev->name) : "?", ##__args); \ } while (0) -/* for logging (never masked) */ -#define BNX2X_LOG(__fmt, __args...) do { \ - printk(KERN_NOTICE "[%s:%d(%s)]" __fmt, __FUNCTION__, \ - __LINE__, bp->dev?(bp->dev->name):"?", ##__args); \ +/* for errors (never masked) */ +#define BNX2X_ERR(__fmt, __args...) do { \ + printk(KERN_ERR "[%s:%d(%s)]" __fmt, __func__, __LINE__, \ + bp->dev ? (bp->dev->name) : "?", ##__args); \ } while (0) /* before we have a dev->name use dev_info() */ @@ -60,7 +86,7 @@ #define bnx2x_panic() do { \ bp->panic = 1; \ BNX2X_ERR("driver assert\n"); \ - bnx2x_disable_int(bp); \ + bnx2x_int_disable(bp); \ bnx2x_panic_dump(bp); \ } while (0) #else @@ -71,164 +97,425 @@ #endif -#define U64_LO(x) (((u64)x) & 0xffffffff) -#define U64_HI(x) (((u64)x) >> 32) -#define HILO_U64(hi, lo) (((u64)hi << 32) + lo) +#ifdef NETIF_F_HW_VLAN_TX +#define BCM_VLAN 1 +#endif + +#define U64_LO(x) (u32)(((u64)(x)) & 0xffffffff) +#define U64_HI(x) (u32)(((u64)(x)) >> 32) +#define HILO_U64(hi, lo) ((((u64)(hi)) << 32) + (lo)) -#define REG_ADDR(bp, offset) (bp->regview + offset) -#define REG_RD(bp, offset) readl(REG_ADDR(bp, offset)) -#define REG_RD8(bp, offset) readb(REG_ADDR(bp, offset)) -#define REG_RD64(bp, offset) readq(REG_ADDR(bp, offset)) +#define REG_ADDR(bp, offset) (bp->regview + offset) -#define REG_WR(bp, offset, val) writel((u32)val, REG_ADDR(bp, offset)) +#define REG_RD(bp, offset) readl(REG_ADDR(bp, offset)) +#define REG_RD8(bp, offset) readb(REG_ADDR(bp, offset)) +#define REG_RD64(bp, offset) readq(REG_ADDR(bp, offset)) + +#define REG_WR(bp, offset, val) writel((u32)val, REG_ADDR(bp, offset)) #define REG_WR8(bp, offset, val) writeb((u8)val, REG_ADDR(bp, offset)) -#define REG_WR16(bp, offset, val) writew((u16)val, REG_ADDR(bp, offset)) -#define REG_WR32(bp, offset, val) REG_WR(bp, offset, val) +#define REG_WR16(bp, offset, val) writew((u16)val, REG_ADDR(bp, offset)) +#define REG_WR32(bp, offset, val) REG_WR(bp, offset, val) -#define REG_RD_IND(bp, offset) bnx2x_reg_rd_ind(bp, offset) -#define REG_WR_IND(bp, offset, val) bnx2x_reg_wr_ind(bp, offset, val) +#define REG_RD_IND(bp, offset) bnx2x_reg_rd_ind(bp, offset) +#define REG_WR_IND(bp, offset, val) bnx2x_reg_wr_ind(bp, offset, val) -#define REG_WR_DMAE(bp, offset, val, len32) \ +#define REG_RD_DMAE(bp, offset, valp, len32) \ do { \ - memcpy(bnx2x_sp(bp, wb_data[0]), val, len32 * 4); \ + bnx2x_read_dmae(bp, offset, len32);\ + memcpy(valp, bnx2x_sp(bp, wb_data[0]), len32 * 4); \ + } while (0) + +#define REG_WR_DMAE(bp, offset, valp, len32) \ + do { \ + memcpy(bnx2x_sp(bp, wb_data[0]), valp, len32 * 4); \ bnx2x_write_dmae(bp, bnx2x_sp_mapping(bp, wb_data), \ offset, len32); \ } while (0) -#define SHMEM_RD(bp, type) \ - REG_RD(bp, bp->shmem_base + offsetof(struct shmem_region, type)) -#define SHMEM_WR(bp, type, val) \ - REG_WR(bp, bp->shmem_base + offsetof(struct shmem_region, type), val) - -#define NIG_WR(reg, val) REG_WR(bp, reg, val) -#define EMAC_WR(reg, val) REG_WR(bp, emac_base + reg, val) -#define BMAC_WR(reg, val) REG_WR(bp, GRCBASE_NIG + bmac_addr + reg, val) +#define SHMEM_ADDR(bp, field) (bp->common.shmem_base + \ + offsetof(struct shmem_region, field)) +#define SHMEM_RD(bp, field) REG_RD(bp, SHMEM_ADDR(bp, field)) +#define SHMEM_WR(bp, field, val) REG_WR(bp, SHMEM_ADDR(bp, field), val) +#define EMAC_RD(bp, reg) REG_RD(bp, emac_base + reg) +#define EMAC_WR(bp, reg, val) REG_WR(bp, emac_base + reg, val) -#define for_each_queue(bp, var) for (var = 0; var < bp->num_queues; var++) -#define for_each_nondefault_queue(bp, var) \ - for (var = 1; var < bp->num_queues; var++) -#define is_multi(bp) (bp->num_queues > 1) +/* fast path */ +struct sw_rx_bd { + struct sk_buff *skb; + DECLARE_PCI_UNMAP_ADDR(mapping) +}; -struct regp { - u32 lo; - u32 hi; +struct sw_tx_bd { + struct sk_buff *skb; + u16 first_bd; }; -struct bmac_stats { - struct regp tx_gtpkt; - struct regp tx_gtxpf; - struct regp tx_gtfcs; - struct regp tx_gtmca; - struct regp tx_gtgca; - struct regp tx_gtfrg; - struct regp tx_gtovr; - struct regp tx_gt64; - struct regp tx_gt127; - struct regp tx_gt255; /* 10 */ - struct regp tx_gt511; - struct regp tx_gt1023; - struct regp tx_gt1518; - struct regp tx_gt2047; - struct regp tx_gt4095; - struct regp tx_gt9216; - struct regp tx_gt16383; - struct regp tx_gtmax; - struct regp tx_gtufl; - struct regp tx_gterr; /* 20 */ - struct regp tx_gtbyt; - - struct regp rx_gr64; - struct regp rx_gr127; - struct regp rx_gr255; - struct regp rx_gr511; - struct regp rx_gr1023; - struct regp rx_gr1518; - struct regp rx_gr2047; - struct regp rx_gr4095; - struct regp rx_gr9216; /* 30 */ - struct regp rx_gr16383; - struct regp rx_grmax; - struct regp rx_grpkt; - struct regp rx_grfcs; - struct regp rx_grmca; - struct regp rx_grbca; - struct regp rx_grxcf; - struct regp rx_grxpf; - struct regp rx_grxuo; - struct regp rx_grjbr; /* 40 */ - struct regp rx_grovr; - struct regp rx_grflr; - struct regp rx_grmeg; - struct regp rx_grmeb; - struct regp rx_grbyt; - struct regp rx_grund; - struct regp rx_grfrg; - struct regp rx_grerb; - struct regp rx_grfre; - struct regp rx_gripj; /* 50 */ +struct sw_rx_page { + struct page *page; + DECLARE_PCI_UNMAP_ADDR(mapping) }; -struct emac_stats { - u32 rx_ifhcinoctets ; - u32 rx_ifhcinbadoctets ; - u32 rx_etherstatsfragments ; - u32 rx_ifhcinucastpkts ; - u32 rx_ifhcinmulticastpkts ; - u32 rx_ifhcinbroadcastpkts ; - u32 rx_dot3statsfcserrors ; - u32 rx_dot3statsalignmenterrors ; - u32 rx_dot3statscarriersenseerrors ; - u32 rx_xonpauseframesreceived ; /* 10 */ - u32 rx_xoffpauseframesreceived ; - u32 rx_maccontrolframesreceived ; - u32 rx_xoffstateentered ; - u32 rx_dot3statsframestoolong ; - u32 rx_etherstatsjabbers ; - u32 rx_etherstatsundersizepkts ; - u32 rx_etherstatspkts64octets ; - u32 rx_etherstatspkts65octetsto127octets ; - u32 rx_etherstatspkts128octetsto255octets ; - u32 rx_etherstatspkts256octetsto511octets ; /* 20 */ - u32 rx_etherstatspkts512octetsto1023octets ; - u32 rx_etherstatspkts1024octetsto1522octets; - u32 rx_etherstatspktsover1522octets ; - - u32 rx_falsecarriererrors ; - - u32 tx_ifhcoutoctets ; - u32 tx_ifhcoutbadoctets ; - u32 tx_etherstatscollisions ; - u32 tx_outxonsent ; - u32 tx_outxoffsent ; - u32 tx_flowcontroldone ; /* 30 */ - u32 tx_dot3statssinglecollisionframes ; - u32 tx_dot3statsmultiplecollisionframes ; - u32 tx_dot3statsdeferredtransmissions ; - u32 tx_dot3statsexcessivecollisions ; - u32 tx_dot3statslatecollisions ; - u32 tx_ifhcoutucastpkts ; - u32 tx_ifhcoutmulticastpkts ; - u32 tx_ifhcoutbroadcastpkts ; - u32 tx_etherstatspkts64octets ; - u32 tx_etherstatspkts65octetsto127octets ; /* 40 */ - u32 tx_etherstatspkts128octetsto255octets ; - u32 tx_etherstatspkts256octetsto511octets ; - u32 tx_etherstatspkts512octetsto1023octets ; - u32 tx_etherstatspkts1024octetsto1522octet ; - u32 tx_etherstatspktsover1522octets ; - u32 tx_dot3statsinternalmactransmiterrors ; /* 46 */ + +/* MC hsi */ +#define BCM_PAGE_SHIFT 12 +#define BCM_PAGE_SIZE (1 << BCM_PAGE_SHIFT) +#define BCM_PAGE_MASK (~(BCM_PAGE_SIZE - 1)) +#define BCM_PAGE_ALIGN(addr) (((addr) + BCM_PAGE_SIZE - 1) & BCM_PAGE_MASK) + +#define PAGES_PER_SGE_SHIFT 0 +#define PAGES_PER_SGE (1 << PAGES_PER_SGE_SHIFT) + +/* SGE ring related macros */ +#define NUM_RX_SGE_PAGES 2 +#define RX_SGE_CNT (BCM_PAGE_SIZE / sizeof(struct eth_rx_sge)) +#define MAX_RX_SGE_CNT (RX_SGE_CNT - 2) +/* RX_SGE_CNT is promised to be a power of 2 */ +#define RX_SGE_MASK (RX_SGE_CNT - 1) +#define NUM_RX_SGE (RX_SGE_CNT * NUM_RX_SGE_PAGES) +#define MAX_RX_SGE (NUM_RX_SGE - 1) +#define NEXT_SGE_IDX(x) ((((x) & RX_SGE_MASK) == \ + (MAX_RX_SGE_CNT - 1)) ? (x) + 3 : (x) + 1) +#define RX_SGE(x) ((x) & MAX_RX_SGE) + +/* SGE producer mask related macros */ +/* Number of bits in one sge_mask array element */ +#define RX_SGE_MASK_ELEM_SZ 64 +#define RX_SGE_MASK_ELEM_SHIFT 6 +#define RX_SGE_MASK_ELEM_MASK ((u64)RX_SGE_MASK_ELEM_SZ - 1) + +/* Creates a bitmask of all ones in less significant bits. + idx - index of the most significant bit in the created mask */ +#define RX_SGE_ONES_MASK(idx) \ + (((u64)0x1 << (((idx) & RX_SGE_MASK_ELEM_MASK) + 1)) - 1) +#define RX_SGE_MASK_ELEM_ONE_MASK ((u64)(~0)) + +/* Number of u64 elements in SGE mask array */ +#define RX_SGE_MASK_LEN ((NUM_RX_SGE_PAGES * RX_SGE_CNT) / \ + RX_SGE_MASK_ELEM_SZ) +#define RX_SGE_MASK_LEN_MASK (RX_SGE_MASK_LEN - 1) +#define NEXT_SGE_MASK_ELEM(el) (((el) + 1) & RX_SGE_MASK_LEN_MASK) + + +struct bnx2x_fastpath { + +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ + struct napi_struct napi; +#endif + + struct host_status_block *status_blk; + dma_addr_t status_blk_mapping; + + struct eth_tx_db_data *hw_tx_prods; + dma_addr_t tx_prods_mapping; + + struct sw_tx_bd *tx_buf_ring; + + struct eth_tx_bd *tx_desc_ring; + dma_addr_t tx_desc_mapping; + + struct sw_rx_bd *rx_buf_ring; /* BDs mappings ring */ + struct sw_rx_page *rx_page_ring; /* SGE pages mappings ring */ + + struct eth_rx_bd *rx_desc_ring; + dma_addr_t rx_desc_mapping; + + union eth_rx_cqe *rx_comp_ring; + dma_addr_t rx_comp_mapping; + + /* SGE ring */ + struct eth_rx_sge *rx_sge_ring; + dma_addr_t rx_sge_mapping; + + u64 sge_mask[RX_SGE_MASK_LEN]; + + int state; +#define BNX2X_FP_STATE_CLOSED 0 +#define BNX2X_FP_STATE_IRQ 0x80000 +#define BNX2X_FP_STATE_OPENING 0x90000 +#define BNX2X_FP_STATE_OPEN 0xa0000 +#define BNX2X_FP_STATE_HALTING 0xb0000 +#define BNX2X_FP_STATE_HALTED 0xc0000 + + u8 index; /* number in fp array */ + u8 cl_id; /* eth client id */ + u8 sb_id; /* status block number in HW */ +#define FP_IDX(fp) (fp->index) +#define FP_CL_ID(fp) (fp->cl_id) +#define BP_CL_ID(bp) (bp->fp[0].cl_id) +#define FP_SB_ID(fp) (fp->sb_id) +#define CNIC_SB_ID 0 + + u16 tx_pkt_prod; + u16 tx_pkt_cons; + u16 tx_bd_prod; + u16 tx_bd_cons; + u16 *tx_cons_sb; + + u16 fp_c_idx; + u16 fp_u_idx; + + u16 rx_bd_prod; + u16 rx_bd_cons; + u16 rx_comp_prod; + u16 rx_comp_cons; + u16 rx_sge_prod; + /* The last maximal completed SGE */ + u16 last_max_sge; + u16 *rx_cons_sb; + u16 *rx_bd_cons_sb; + + unsigned long tx_pkt, + rx_pkt, + rx_calls; +#ifdef BNX2X_STOP_ON_ERROR + unsigned long poll_no_work, poll_calls, poll_max_calls, + poll_complete, poll_exit; +#endif + /* TPA related */ + struct sw_rx_bd tpa_pool[ETH_MAX_AGGREGATION_QUEUES_E1H]; + u8 tpa_state[ETH_MAX_AGGREGATION_QUEUES_E1H]; +#define BNX2X_TPA_START 1 +#define BNX2X_TPA_STOP 2 + u8 disable_tpa; +#ifdef BNX2X_STOP_ON_ERROR + u64 tpa_queue_used; +#endif + + struct bnx2x *bp; /* parent */ }; -union mac_stats { - struct emac_stats emac; - struct bmac_stats bmac; +#define bnx2x_fp(bp, nr, var) (bp->fp[nr].var) + +#define BNX2X_HAS_TX_WORK(fp) \ + ((fp->tx_pkt_prod != le16_to_cpu(*fp->tx_cons_sb)) || \ + (fp->tx_pkt_prod != fp->tx_pkt_cons)) + +#define BNX2X_HAS_WORK(fp) (bnx2x_has_rx_work(fp) || BNX2X_HAS_TX_WORK(fp)) + + +/* MC hsi */ +#define MAX_FETCH_BD 13 /* HW max BDs per packet */ +#define RX_COPY_THRESH 92 + +#define NUM_TX_RINGS 16 +#define TX_DESC_CNT (BCM_PAGE_SIZE / sizeof(struct eth_tx_bd)) +#define MAX_TX_DESC_CNT (TX_DESC_CNT - 1) +#define NUM_TX_BD (TX_DESC_CNT * NUM_TX_RINGS) +#define MAX_TX_BD (NUM_TX_BD - 1) +#define MAX_TX_AVAIL (MAX_TX_DESC_CNT * NUM_TX_RINGS - 2) +#define NEXT_TX_IDX(x) ((((x) & MAX_TX_DESC_CNT) == \ + (MAX_TX_DESC_CNT - 1)) ? (x) + 2 : (x) + 1) +#define TX_BD(x) ((x) & MAX_TX_BD) +#define TX_BD_POFF(x) ((x) & MAX_TX_DESC_CNT) + +/* The RX BD ring is special, each bd is 8 bytes but the last one is 16 */ +#define NUM_RX_RINGS 8 +#define RX_DESC_CNT (BCM_PAGE_SIZE / sizeof(struct eth_rx_bd)) +#define MAX_RX_DESC_CNT (RX_DESC_CNT - 2) +#define RX_DESC_MASK (RX_DESC_CNT - 1) +#define NUM_RX_BD (RX_DESC_CNT * NUM_RX_RINGS) +#define MAX_RX_BD (NUM_RX_BD - 1) +#define MAX_RX_AVAIL (MAX_RX_DESC_CNT * NUM_RX_RINGS - 2) +#define NEXT_RX_IDX(x) ((((x) & RX_DESC_MASK) == \ + (MAX_RX_DESC_CNT - 1)) ? (x) + 3 : (x) + 1) +#define RX_BD(x) ((x) & MAX_RX_BD) + +/* As long as CQE is 4 times bigger than BD entry we have to allocate + 4 times more pages for CQ ring in order to keep it balanced with + BD ring */ +#define NUM_RCQ_RINGS (NUM_RX_RINGS * 4) +#define RCQ_DESC_CNT (BCM_PAGE_SIZE / sizeof(union eth_rx_cqe)) +#define MAX_RCQ_DESC_CNT (RCQ_DESC_CNT - 1) +#define NUM_RCQ_BD (RCQ_DESC_CNT * NUM_RCQ_RINGS) +#define MAX_RCQ_BD (NUM_RCQ_BD - 1) +#define MAX_RCQ_AVAIL (MAX_RCQ_DESC_CNT * NUM_RCQ_RINGS - 2) +#define NEXT_RCQ_IDX(x) ((((x) & MAX_RCQ_DESC_CNT) == \ + (MAX_RCQ_DESC_CNT - 1)) ? (x) + 2 : (x) + 1) +#define RCQ_BD(x) ((x) & MAX_RCQ_BD) + + +/* This is needed for determining of last_max */ +#define SUB_S16(a, b) (s16)((s16)(a) - (s16)(b)) + +#define __SGE_MASK_SET_BIT(el, bit) \ + do { \ + el = ((el) | ((u64)0x1 << (bit))); \ + } while (0) + +#define __SGE_MASK_CLEAR_BIT(el, bit) \ + do { \ + el = ((el) & (~((u64)0x1 << (bit)))); \ + } while (0) + +#define SGE_MASK_SET_BIT(fp, idx) \ + __SGE_MASK_SET_BIT(fp->sge_mask[(idx) >> RX_SGE_MASK_ELEM_SHIFT], \ + ((idx) & RX_SGE_MASK_ELEM_MASK)) + +#define SGE_MASK_CLEAR_BIT(fp, idx) \ + __SGE_MASK_CLEAR_BIT(fp->sge_mask[(idx) >> RX_SGE_MASK_ELEM_SHIFT], \ + ((idx) & RX_SGE_MASK_ELEM_MASK)) + + +/* used on a CID received from the HW */ +#define SW_CID(x) (le32_to_cpu(x) & \ + (COMMON_RAMROD_ETH_RX_CQE_CID >> 7)) +#define CQE_CMD(x) (le32_to_cpu(x) >> \ + COMMON_RAMROD_ETH_RX_CQE_CMD_ID_SHIFT) + +#define BD_UNMAP_ADDR(bd) HILO_U64(le32_to_cpu((bd)->addr_hi), \ + le32_to_cpu((bd)->addr_lo)) +#define BD_UNMAP_LEN(bd) (le16_to_cpu((bd)->nbytes)) + + +#define DPM_TRIGER_TYPE 0x40 +#define DOORBELL(bp, cid, val) \ + do { \ + writel((u32)val, (bp)->doorbells + (BCM_PAGE_SIZE * cid) + \ + DPM_TRIGER_TYPE); \ + } while (0) + + +/* TX CSUM helpers */ +#if (LINUX_VERSION_CODE >= 0x20616) && !defined(__VMKLNX__) /* BNX2X_UPSTREAM */ +#define SKB_CS_OFF(skb) (offsetof(struct tcphdr, check) - \ + skb->csum_offset) +#define SKB_CS(skb) (*(u16 *)(skb_transport_header(skb) + \ + skb->csum_offset)) +#else +#define SKB_CS_OFF(skb) (offsetof(struct tcphdr, check) - skb->csum) +#define SKB_CS(skb) (*(u16 *)(skb->h.raw + skb->csum)) +#endif + +#define pbd_tcp_flags(skb) (ntohl(tcp_flag_word(tcp_hdr(skb)))>>16 & 0xff) + +#define XMIT_PLAIN 0 +#define XMIT_CSUM_V4 0x1 +#define XMIT_CSUM_V6 0x2 +#define XMIT_CSUM_TCP 0x4 +#define XMIT_GSO_V4 0x8 +#define XMIT_GSO_V6 0x10 + +#define XMIT_CSUM (XMIT_CSUM_V4 | XMIT_CSUM_V6) +#define XMIT_GSO (XMIT_GSO_V4 | XMIT_GSO_V6) + + +/* stuff added to make the code fit 80Col */ + +#define CQE_TYPE(cqe_fp_flags) ((cqe_fp_flags) & ETH_FAST_PATH_RX_CQE_TYPE) + +#define TPA_TYPE_START ETH_FAST_PATH_RX_CQE_START_FLG +#define TPA_TYPE_END ETH_FAST_PATH_RX_CQE_END_FLG +#define TPA_TYPE(cqe_fp_flags) ((cqe_fp_flags) & \ + (TPA_TYPE_START | TPA_TYPE_END)) + +#define ETH_RX_ERROR_FALGS ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG + +#define BNX2X_IP_CSUM_ERR(cqe) \ + (!((cqe)->fast_path_cqe.status_flags & \ + ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG) && \ + ((cqe)->fast_path_cqe.type_error_flags & \ + ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG)) + +#define BNX2X_L4_CSUM_ERR(cqe) \ + (!((cqe)->fast_path_cqe.status_flags & \ + ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG) && \ + ((cqe)->fast_path_cqe.type_error_flags & \ + ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG)) + +#define BNX2X_RX_CSUM_OK(cqe) \ + (!(BNX2X_L4_CSUM_ERR(cqe) || BNX2X_IP_CSUM_ERR(cqe))) + +#define BNX2X_RX_SUM_FIX(cqe) \ + ((le16_to_cpu(cqe->fast_path_cqe.pars_flags.flags) & \ + PARSING_FLAGS_OVER_ETHERNET_PROTOCOL) == \ + (1 << PARSING_FLAGS_OVER_ETHERNET_PROTOCOL_SHIFT)) + + +#define FP_USB_FUNC_OFF (2 + 2*HC_USTORM_SB_NUM_INDICES) +#define FP_CSB_FUNC_OFF (2 + 2*HC_CSTORM_SB_NUM_INDICES) + +#define U_SB_ETH_RX_CQ_INDEX HC_INDEX_U_ETH_RX_CQ_CONS +#define U_SB_ETH_RX_BD_INDEX HC_INDEX_U_ETH_RX_BD_CONS +#define C_SB_ETH_TX_CQ_INDEX HC_INDEX_C_ETH_TX_CQ_CONS + +#define BNX2X_RX_SB_INDEX \ + (&fp->status_blk->u_status_block.index_values[U_SB_ETH_RX_CQ_INDEX]) + +#define BNX2X_RX_SB_BD_INDEX \ + (&fp->status_blk->u_status_block.index_values[U_SB_ETH_RX_BD_INDEX]) + +#define BNX2X_RX_SB_INDEX_NUM \ + (((U_SB_ETH_RX_CQ_INDEX << \ + USTORM_ETH_ST_CONTEXT_CONFIG_CQE_SB_INDEX_NUMBER_SHIFT) & \ + USTORM_ETH_ST_CONTEXT_CONFIG_CQE_SB_INDEX_NUMBER) | \ + ((U_SB_ETH_RX_BD_INDEX << \ + USTORM_ETH_ST_CONTEXT_CONFIG_BD_SB_INDEX_NUMBER_SHIFT) & \ + USTORM_ETH_ST_CONTEXT_CONFIG_BD_SB_INDEX_NUMBER)) + +#define BNX2X_TX_SB_INDEX \ + (&fp->status_blk->c_status_block.index_values[C_SB_ETH_TX_CQ_INDEX]) + + +/* end of fast path */ + +/* common */ + +struct bnx2x_common { + + u32 chip_id; +/* chip num:16-31, rev:12-15, metal:4-11, bond_id:0-3 */ +#define CHIP_ID(bp) (bp->common.chip_id & 0xfffffff0) + +#define CHIP_NUM(bp) (bp->common.chip_id >> 16) +#define CHIP_NUM_57710 0x164e +#define CHIP_NUM_57711 0x164f +#define CHIP_NUM_57711E 0x1650 +#define CHIP_IS_E1(bp) (CHIP_NUM(bp) == CHIP_NUM_57710) +#define CHIP_IS_57711(bp) (CHIP_NUM(bp) == CHIP_NUM_57711) +#define CHIP_IS_57711E(bp) (CHIP_NUM(bp) == CHIP_NUM_57711E) +#define CHIP_IS_E1H(bp) (CHIP_IS_57711(bp) || \ + CHIP_IS_57711E(bp)) +#define IS_E1H_OFFSET CHIP_IS_E1H(bp) + +#define CHIP_REV(bp) (bp->common.chip_id & 0x0000f000) +#define CHIP_REV_Ax 0x00000000 +/* assume maximum 5 revisions */ +#define CHIP_REV_IS_SLOW(bp) (CHIP_REV(bp) > 0x00005000) +/* Emul versions are A=>0xe, B=>0xc, C=>0xa, D=>8, E=>6 */ +#define CHIP_REV_IS_EMUL(bp) ((CHIP_REV_IS_SLOW(bp)) && \ + !(CHIP_REV(bp) & 0x00001000)) +/* FPGA versions are A=>0xf, B=>0xd, C=>0xb, D=>9, E=>7 */ +#define CHIP_REV_IS_FPGA(bp) ((CHIP_REV_IS_SLOW(bp)) && \ + (CHIP_REV(bp) & 0x00001000)) + +#define CHIP_TIME(bp) ((CHIP_REV_IS_EMUL(bp)) ? 2000 : \ + ((CHIP_REV_IS_FPGA(bp)) ? 200 : 1)) + +#define CHIP_METAL(bp) (bp->common.chip_id & 0x00000ff0) +#define CHIP_BOND_ID(bp) (bp->common.chip_id & 0x0000000f) + + int flash_size; +#define NVRAM_1MB_SIZE 0x20000 /* 1M bit in bytes */ +#define NVRAM_TIMEOUT_COUNT 30000 +#define NVRAM_PAGE_SIZE 256 + + u32 shmem_base; + + u32 hw_config; + + u32 bc_ver; }; + +/* end of common */ + +/* port */ + struct nig_stats { u32 brb_discard; u32 brb_packet; @@ -244,13 +531,53 @@ struct nig_stats { u32 pbf_octets; u32 pbf_packet; u32 safc_inp; - u32 done; - u32 pad; + u32 egress_mac_pkt0_lo; + u32 egress_mac_pkt0_hi; + u32 egress_mac_pkt1_lo; + u32 egress_mac_pkt1_hi; +}; + +struct bnx2x_port { + u32 pmf; + + u32 link_config; + + u32 supported; +/* link settings - missing defines */ +#define SUPPORTED_2500baseX_Full (1 << 15) + + u32 advertising; +/* link settings - missing defines */ +#define ADVERTISED_2500baseX_Full (1 << 15) + + u32 phy_addr; + + /* used to synchronize phy accesses */ + struct mutex phy_mutex; + + u32 port_stx; + + struct nig_stats old_nig_stats; +}; + +/* end of port */ + + +enum bnx2x_stats_event { + STATS_EVENT_PMF = 0, + STATS_EVENT_LINK_UP, + STATS_EVENT_UPDATE, + STATS_EVENT_STOP, + STATS_EVENT_MAX +}; + +enum bnx2x_stats_state { + STATS_STATE_DISABLED = 0, + STATS_STATE_ENABLED, + STATS_STATE_MAX }; struct bnx2x_eth_stats { - u32 pad; /* to make long counters u64 aligned */ - u32 mac_stx_start; u32 total_bytes_received_hi; u32 total_bytes_received_lo; u32 total_bytes_transmitted_hi; @@ -267,97 +594,128 @@ struct bnx2x_eth_stats { u32 total_multicast_packets_transmitted_lo; u32 total_broadcast_packets_transmitted_hi; u32 total_broadcast_packets_transmitted_lo; - u32 crc_receive_errors; - u32 alignment_errors; - u32 false_carrier_detections; - u32 runt_packets_received; - u32 jabber_packets_received; - u32 pause_xon_frames_received; - u32 pause_xoff_frames_received; - u32 pause_xon_frames_transmitted; - u32 pause_xoff_frames_transmitted; - u32 single_collision_transmit_frames; - u32 multiple_collision_transmit_frames; - u32 late_collision_frames; - u32 excessive_collision_frames; - u32 control_frames_received; - u32 frames_received_64_bytes; - u32 frames_received_65_127_bytes; - u32 frames_received_128_255_bytes; - u32 frames_received_256_511_bytes; - u32 frames_received_512_1023_bytes; - u32 frames_received_1024_1522_bytes; - u32 frames_received_1523_9022_bytes; - u32 frames_transmitted_64_bytes; - u32 frames_transmitted_65_127_bytes; - u32 frames_transmitted_128_255_bytes; - u32 frames_transmitted_256_511_bytes; - u32 frames_transmitted_512_1023_bytes; - u32 frames_transmitted_1024_1522_bytes; - u32 frames_transmitted_1523_9022_bytes; u32 valid_bytes_received_hi; u32 valid_bytes_received_lo; - u32 error_runt_packets_received; - u32 error_jabber_packets_received; - u32 mac_stx_end; - - u32 pad2; - u32 stat_IfHCInBadOctets_hi; - u32 stat_IfHCInBadOctets_lo; - u32 stat_IfHCOutBadOctets_hi; - u32 stat_IfHCOutBadOctets_lo; - u32 stat_Dot3statsFramesTooLong; - u32 stat_Dot3statsInternalMacTransmitErrors; - u32 stat_Dot3StatsCarrierSenseErrors; - u32 stat_Dot3StatsDeferredTransmissions; - u32 stat_FlowControlDone; - u32 stat_XoffStateEntered; - - u32 x_total_sent_bytes_hi; - u32 x_total_sent_bytes_lo; - u32 x_total_sent_pkts; - - u32 t_rcv_unicast_bytes_hi; - u32 t_rcv_unicast_bytes_lo; - u32 t_rcv_broadcast_bytes_hi; - u32 t_rcv_broadcast_bytes_lo; - u32 t_rcv_multicast_bytes_hi; - u32 t_rcv_multicast_bytes_lo; - u32 t_total_rcv_pkt; - - u32 checksum_discard; - u32 packets_too_big_discard; + + u32 error_bytes_received_hi; + u32 error_bytes_received_lo; + + u32 rx_stat_ifhcinbadoctets_hi; + u32 rx_stat_ifhcinbadoctets_lo; + u32 tx_stat_ifhcoutbadoctets_hi; + u32 tx_stat_ifhcoutbadoctets_lo; + u32 rx_stat_dot3statsfcserrors_hi; + u32 rx_stat_dot3statsfcserrors_lo; + u32 rx_stat_dot3statsalignmenterrors_hi; + u32 rx_stat_dot3statsalignmenterrors_lo; + u32 rx_stat_dot3statscarriersenseerrors_hi; + u32 rx_stat_dot3statscarriersenseerrors_lo; + u32 rx_stat_falsecarriererrors_hi; + u32 rx_stat_falsecarriererrors_lo; + u32 rx_stat_etherstatsundersizepkts_hi; + u32 rx_stat_etherstatsundersizepkts_lo; + u32 rx_stat_dot3statsframestoolong_hi; + u32 rx_stat_dot3statsframestoolong_lo; + u32 rx_stat_etherstatsfragments_hi; + u32 rx_stat_etherstatsfragments_lo; + u32 rx_stat_etherstatsjabbers_hi; + u32 rx_stat_etherstatsjabbers_lo; + u32 rx_stat_maccontrolframesreceived_hi; + u32 rx_stat_maccontrolframesreceived_lo; + u32 rx_stat_bmac_xpf_hi; + u32 rx_stat_bmac_xpf_lo; + u32 rx_stat_bmac_xcf_hi; + u32 rx_stat_bmac_xcf_lo; + u32 rx_stat_xoffstateentered_hi; + u32 rx_stat_xoffstateentered_lo; + u32 rx_stat_xonpauseframesreceived_hi; + u32 rx_stat_xonpauseframesreceived_lo; + u32 rx_stat_xoffpauseframesreceived_hi; + u32 rx_stat_xoffpauseframesreceived_lo; + u32 tx_stat_outxonsent_hi; + u32 tx_stat_outxonsent_lo; + u32 tx_stat_outxoffsent_hi; + u32 tx_stat_outxoffsent_lo; + u32 tx_stat_flowcontroldone_hi; + u32 tx_stat_flowcontroldone_lo; + u32 tx_stat_etherstatscollisions_hi; + u32 tx_stat_etherstatscollisions_lo; + u32 tx_stat_dot3statssinglecollisionframes_hi; + u32 tx_stat_dot3statssinglecollisionframes_lo; + u32 tx_stat_dot3statsmultiplecollisionframes_hi; + u32 tx_stat_dot3statsmultiplecollisionframes_lo; + u32 tx_stat_dot3statsdeferredtransmissions_hi; + u32 tx_stat_dot3statsdeferredtransmissions_lo; + u32 tx_stat_dot3statsexcessivecollisions_hi; + u32 tx_stat_dot3statsexcessivecollisions_lo; + u32 tx_stat_dot3statslatecollisions_hi; + u32 tx_stat_dot3statslatecollisions_lo; + u32 tx_stat_etherstatspkts64octets_hi; + u32 tx_stat_etherstatspkts64octets_lo; + u32 tx_stat_etherstatspkts65octetsto127octets_hi; + u32 tx_stat_etherstatspkts65octetsto127octets_lo; + u32 tx_stat_etherstatspkts128octetsto255octets_hi; + u32 tx_stat_etherstatspkts128octetsto255octets_lo; + u32 tx_stat_etherstatspkts256octetsto511octets_hi; + u32 tx_stat_etherstatspkts256octetsto511octets_lo; + u32 tx_stat_etherstatspkts512octetsto1023octets_hi; + u32 tx_stat_etherstatspkts512octetsto1023octets_lo; + u32 tx_stat_etherstatspkts1024octetsto1522octets_hi; + u32 tx_stat_etherstatspkts1024octetsto1522octets_lo; + u32 tx_stat_etherstatspktsover1522octets_hi; + u32 tx_stat_etherstatspktsover1522octets_lo; + u32 tx_stat_bmac_2047_hi; + u32 tx_stat_bmac_2047_lo; + u32 tx_stat_bmac_4095_hi; + u32 tx_stat_bmac_4095_lo; + u32 tx_stat_bmac_9216_hi; + u32 tx_stat_bmac_9216_lo; + u32 tx_stat_bmac_16383_hi; + u32 tx_stat_bmac_16383_lo; + u32 tx_stat_dot3statsinternalmactransmiterrors_hi; + u32 tx_stat_dot3statsinternalmactransmiterrors_lo; + u32 tx_stat_bmac_ufl_hi; + u32 tx_stat_bmac_ufl_lo; + + u32 brb_drop_hi; + u32 brb_drop_lo; + u32 brb_truncate_hi; + u32 brb_truncate_lo; + + u32 jabber_packets_received; + + u32 etherstatspkts1024octetsto1522octets_hi; + u32 etherstatspkts1024octetsto1522octets_lo; + u32 etherstatspktsover1522octets_hi; + u32 etherstatspktsover1522octets_lo; + u32 no_buff_discard; - u32 ttl0_discard; - u32 mac_discard; + u32 mac_filter_discard; u32 xxoverflow_discard; u32 brb_truncate_discard; + u32 mac_discard; - u32 brb_discard; - u32 brb_packet; - u32 brb_truncate; - u32 flow_ctrl_discard; - u32 flow_ctrl_octets; - u32 flow_ctrl_packet; - u32 mng_discard; - u32 mng_octet_inp; - u32 mng_octet_out; - u32 mng_packet_inp; - u32 mng_packet_out; - u32 pbf_octets; - u32 pbf_packet; - u32 safc_inp; u32 driver_xoff; - u32 number_of_bugs_found_in_stats_spec; /* just kidding */ + u32 rx_err_discard_pkt; + u32 rx_skb_alloc_failed; + u32 hw_csum_err; + + u32 nig_timer_max; }; -#define MAC_STX_NA 0xffffffff +#define STATS_OFFSET32(stat_name) \ + (offsetof(struct bnx2x_eth_stats, stat_name) / 4) + -#ifdef BNX2X_MULTI -#define MAX_CONTEXT 16 +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ +#ifdef BCM_CNIC +#define MAX_CONTEXT 15 +#else +#define MAX_CONTEXT 16 +#endif #else -#define MAX_CONTEXT 1 +#define MAX_CONTEXT 1 #endif union cdu_context { @@ -365,616 +723,406 @@ union cdu_context { char pad[1024]; }; -#define MAX_DMAE_C 5 +#define MAX_DMAE_C 8 /* DMA memory not used in fastpath */ struct bnx2x_slowpath { - union cdu_context context[MAX_CONTEXT]; - struct eth_stats_query fw_stats; - struct mac_configuration_cmd mac_config; - struct mac_configuration_cmd mcast_config; + union cdu_context context[MAX_CONTEXT]; + struct eth_stats_query fw_stats; + struct mac_configuration_cmd mac_config; + struct mac_configuration_cmd mcast_config; /* used by dmae command executer */ - struct dmae_command dmae[MAX_DMAE_C]; + struct dmae_command dmae[MAX_DMAE_C]; - union mac_stats mac_stats; - struct nig_stats nig; - struct bnx2x_eth_stats eth_stats; + u32 stats_comp; + union mac_stats mac_stats; + struct nig_stats nig_stats; + struct host_port_stats port_stats; + struct host_func_stats func_stats; - u32 wb_comp; -#define BNX2X_WB_COMP_VAL 0xe0d0d0ae - u32 wb_data[4]; + u32 wb_comp; + u32 wb_data[4]; }; -#define bnx2x_sp(bp, var) (&bp->slowpath->var) -#define bnx2x_sp_check(bp, var) ((bp->slowpath) ? (&bp->slowpath->var) : NULL) +#define bnx2x_sp(bp, var) (&bp->slowpath->var) #define bnx2x_sp_mapping(bp, var) \ (bp->slowpath_mapping + offsetof(struct bnx2x_slowpath, var)) -struct sw_rx_bd { - struct sk_buff *skb; - DECLARE_PCI_UNMAP_ADDR(mapping) -}; - -struct sw_tx_bd { - struct sk_buff *skb; - u16 first_bd; -}; - -struct bnx2x_fastpath { - - struct host_status_block *status_blk; - dma_addr_t status_blk_mapping; - - struct eth_tx_db_data *hw_tx_prods; - dma_addr_t tx_prods_mapping; - - struct sw_tx_bd *tx_buf_ring; - - struct eth_tx_bd *tx_desc_ring; - dma_addr_t tx_desc_mapping; - - struct sw_rx_bd *rx_buf_ring; - - struct eth_rx_bd *rx_desc_ring; - dma_addr_t rx_desc_mapping; - - union eth_rx_cqe *rx_comp_ring; - dma_addr_t rx_comp_mapping; - - int state; -#define BNX2X_FP_STATE_CLOSED 0 -#define BNX2X_FP_STATE_IRQ 0x80000 -#define BNX2X_FP_STATE_OPENING 0x90000 -#define BNX2X_FP_STATE_OPEN 0xa0000 -#define BNX2X_FP_STATE_HALTING 0xb0000 -#define BNX2X_FP_STATE_HALTED 0xc0000 - - int index; - - u16 tx_pkt_prod; - u16 tx_pkt_cons; - u16 tx_bd_prod; - u16 tx_bd_cons; - u16 *tx_cons_sb; - - u16 fp_c_idx; - u16 fp_u_idx; - - u16 rx_bd_prod; - u16 rx_bd_cons; - u16 rx_comp_prod; - u16 rx_comp_cons; - u16 *rx_cons_sb; - - unsigned long tx_pkt, - rx_pkt, - rx_calls; - - struct bnx2x *bp; /* parent */ -}; - -#define bnx2x_fp(bp, nr, var) (bp->fp[nr].var) - - /* attn group wiring */ -#define MAX_DYNAMIC_ATTN_GRPS 8 +#define MAX_DYNAMIC_ATTN_GRPS 8 struct attn_route { - u32 sig[4]; + u32 sig[4]; }; struct bnx2x { /* Fields used in the tx and intr/napi performance paths * are grouped together in the beginning of the structure */ - struct bnx2x_fastpath *fp; - void __iomem *regview; - void __iomem *doorbells; + struct bnx2x_fastpath fp[MAX_CONTEXT]; + void __iomem *regview; + void __iomem *doorbells; +#ifndef BNX2X_ISCSI /* BNX2X_UPSTREAM */ +#define BNX2X_DB_SIZE (16*2048) +#else +#define BNX2X_DB_SIZE (256*2048) +#endif - struct net_device *dev; - struct pci_dev *pdev; + struct net_device *dev; + struct pci_dev *pdev; atomic_t intr_sem; - struct msix_entry msix_table[MAX_CONTEXT+1]; +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ +#ifdef BCM_CNIC + struct msix_entry msix_table[MAX_CONTEXT+2]; +#else + struct msix_entry msix_table[MAX_CONTEXT+1]; +#endif +#endif +#define INT_MODE_INTx 1 +#define INT_MODE_MSI 2 +#define INT_MODE_MSIX 3 - int tx_ring_size; + int tx_ring_size; #ifdef BCM_VLAN - struct vlan_group *vlgrp; + struct vlan_group *vlgrp; #endif - u32 rx_csum; - u32 rx_offset; - u32 rx_buf_use_size; /* useable size */ - u32 rx_buf_size; /* with alignment */ -#define ETH_OVREHEAD (ETH_HLEN + 8) /* 8 for CRC + VLAN */ -#define ETH_MIN_PACKET_SIZE 60 -#define ETH_MAX_PACKET_SIZE 1500 -#define ETH_MAX_JUMBO_PACKET_SIZE 9600 + u32 rx_csum; + u32 rx_buf_size; +#define ETH_OVREHEAD (ETH_HLEN + 8) /* 8 for CRC + VLAN */ +#define ETH_MIN_PACKET_SIZE 60 +#define ETH_MAX_PACKET_SIZE 1500 +#define ETH_MAX_JUMBO_PACKET_SIZE 9600 + +#define BNX2X_RX_ALIGN_SHIFT 6 +#define BNX2X_RX_ALIGN (1 << BNX2X_RX_ALIGN_SHIFT) struct host_def_status_block *def_status_blk; -#define DEF_SB_ID 16 - u16 def_c_idx; - u16 def_u_idx; - u16 def_t_idx; - u16 def_x_idx; - u16 def_att_idx; - u32 attn_state; - struct attn_route attn_group[MAX_DYNAMIC_ATTN_GRPS]; - u32 aeu_mask; - u32 nig_mask; +#define DEF_SB_ID 16 + u16 def_c_idx; + u16 def_u_idx; + u16 def_x_idx; + u16 def_t_idx; + u16 def_att_idx; + u32 attn_state; + struct attn_route attn_group[MAX_DYNAMIC_ATTN_GRPS]; /* slow path ring */ - struct eth_spe *spq; - dma_addr_t spq_mapping; - u16 spq_prod_idx; - struct eth_spe *spq_prod_bd; - struct eth_spe *spq_last_bd; - u16 *dsb_sp_prod; - u16 spq_left; /* serialize spq */ - spinlock_t spq_lock; - - /* Flag for marking that there is either - * STAT_QUERY or CFC DELETE ramrod pending - */ - u8 stat_pending; + struct eth_spe *spq; + dma_addr_t spq_mapping; + u16 spq_prod_idx; + struct eth_spe *spq_prod_bd; + struct eth_spe *spq_last_bd; + u16 *dsb_sp_prod; + u16 spq_left; /* serialize spq */ + /* used to synchronize spq accesses */ + spinlock_t spq_lock; + + /* Flags for marking that there is a STAT_QUERY or + SET_MAC ramrod pending */ + u8 stats_pending; + u8 set_mac_pending; /* End of fields used in the performance code paths */ - int panic; - int msglevel; - - u32 flags; -#define PCIX_FLAG 1 -#define PCI_32BIT_FLAG 2 -#define ONE_TDMA_FLAG 4 /* no longer used */ -#define NO_WOL_FLAG 8 -#define USING_DAC_FLAG 0x10 -#define USING_MSIX_FLAG 0x20 -#define ASF_ENABLE_FLAG 0x40 - - int port; - - int pm_cap; - int pcie_cap; - - /* Used to synchronize phy accesses */ - spinlock_t phy_lock; - - struct work_struct reset_task; + int panic; + int msglevel; + + u32 flags; +#define PCIX_FLAG 1 +#define PCI_32BIT_FLAG 2 +#define ONE_PORT_FLAG 4 +#define NO_WOL_FLAG 8 +#define USING_DAC_FLAG 0x10 +#define USING_MSIX_FLAG 0x20 +#define USING_MSI_FLAG 0x40 +#define TPA_ENABLE_FLAG 0x80 +#define NO_MCP_FLAG 0x100 +#define BP_NOMCP(bp) (bp->flags & NO_MCP_FLAG) + + int func; +#define BP_PORT(bp) (bp->func % PORT_MAX) +#define BP_FUNC(bp) (bp->func) +#define BP_E1HVN(bp) (bp->func >> 1) +#define BP_L_ID(bp) (BP_E1HVN(bp) << 2) + + int pm_cap; + int pcie_cap; + + struct work_struct sp_task; + struct work_struct reset_task; +#if (LINUX_VERSION_CODE < 0x020618) /* ! BNX2X_UPSTREAM */ u16 sp_running; - struct work_struct sp_task; +#endif - struct timer_list timer; - int timer_interval; - int current_interval; + struct timer_list timer; + int current_interval; - u32 shmem_base; + u16 fw_seq; + u16 fw_drv_pulse_wr_seq; + u32 func_stx; - u32 chip_id; -/* chip num:16-31, rev:12-15, metal:4-11, bond_id:0-3 */ -#define CHIP_ID(bp) (((bp)->chip_id) & 0xfffffff0) - -#define CHIP_NUM(bp) (((bp)->chip_id) & 0xffff0000) - -#define CHIP_REV(bp) (((bp)->chip_id) & 0x0000f000) -#define CHIP_REV_Ax 0x00000000 -#define CHIP_REV_Bx 0x00001000 -#define CHIP_REV_Cx 0x00002000 -#define CHIP_REV_EMUL 0x0000e000 -#define CHIP_REV_FPGA 0x0000f000 -#define CHIP_REV_IS_SLOW(bp) ((CHIP_REV(bp) == CHIP_REV_EMUL) || \ - (CHIP_REV(bp) == CHIP_REV_FPGA)) - -#define CHIP_METAL(bp) (((bp)->chip_id) & 0x00000ff0) -#define CHIP_BOND_ID(bp) (((bp)->chip_id) & 0x0000000f) - - u16 fw_seq; - u16 fw_drv_pulse_wr_seq; - u32 fw_mb; - - u32 hw_config; - u32 board; - u32 serdes_config; - u32 lane_config; - u32 ext_phy_config; -#define XGXS_EXT_PHY_TYPE(bp) (bp->ext_phy_config & \ - PORT_HW_CFG_XGXS_EXT_PHY_TYPE_MASK) -#define SERDES_EXT_PHY_TYPE(bp) (bp->ext_phy_config & \ - PORT_HW_CFG_SERDES_EXT_PHY_TYPE_MASK) - - u32 speed_cap_mask; - u32 link_config; -#define SWITCH_CFG_1G PORT_FEATURE_CON_SWITCH_1G_SWITCH -#define SWITCH_CFG_10G PORT_FEATURE_CON_SWITCH_10G_SWITCH -#define SWITCH_CFG_AUTO_DETECT PORT_FEATURE_CON_SWITCH_AUTO_DETECT -#define SWITCH_CFG_ONE_TIME_DETECT \ - PORT_FEATURE_CON_SWITCH_ONE_TIME_DETECT - - u8 ser_lane; - u8 rx_lane_swap; - u8 tx_lane_swap; - - u8 link_up; - u8 phy_link_up; - - u32 supported; -/* link settings - missing defines */ -#define SUPPORTED_2500baseT_Full (1 << 15) - - u32 phy_flags; -/*#define PHY_SERDES_FLAG 0x1*/ -#define PHY_BMAC_FLAG 0x2 -#define PHY_EMAC_FLAG 0x4 -#define PHY_XGXS_FLAG 0x8 -#define PHY_SGMII_FLAG 0x10 -#define PHY_INT_MODE_MASK_FLAG 0x300 -#define PHY_INT_MODE_AUTO_POLLING_FLAG 0x100 -#define PHY_INT_MODE_LINK_READY_FLAG 0x200 - - u32 phy_addr; - u32 phy_id; - - u32 autoneg; -#define AUTONEG_CL37 SHARED_HW_CFG_AN_ENABLE_CL37 -#define AUTONEG_CL73 SHARED_HW_CFG_AN_ENABLE_CL73 -#define AUTONEG_BAM SHARED_HW_CFG_AN_ENABLE_BAM -#define AUTONEG_PARALLEL \ - SHARED_HW_CFG_AN_ENABLE_PARALLEL_DETECTION -#define AUTONEG_SGMII_FIBER_AUTODET \ - SHARED_HW_CFG_AN_EN_SGMII_FIBER_AUTO_DETECT -#define AUTONEG_REMOTE_PHY SHARED_HW_CFG_AN_ENABLE_REMOTE_PHY - - u32 req_autoneg; -#define AUTONEG_SPEED 0x1 -#define AUTONEG_FLOW_CTRL 0x2 - - u32 req_line_speed; -/* link settings - missing defines */ -#define SPEED_12000 12000 -#define SPEED_12500 12500 -#define SPEED_13000 13000 -#define SPEED_15000 15000 -#define SPEED_16000 16000 - - u32 req_duplex; - u32 req_flow_ctrl; -#define FLOW_CTRL_AUTO PORT_FEATURE_FLOW_CONTROL_AUTO -#define FLOW_CTRL_TX PORT_FEATURE_FLOW_CONTROL_TX -#define FLOW_CTRL_RX PORT_FEATURE_FLOW_CONTROL_RX -#define FLOW_CTRL_BOTH PORT_FEATURE_FLOW_CONTROL_BOTH -#define FLOW_CTRL_NONE PORT_FEATURE_FLOW_CONTROL_NONE - - u32 advertising; -/* link settings - missing defines */ -#define ADVERTISED_2500baseT_Full (1 << 15) + struct link_params link_params; + struct link_vars link_vars; - u32 link_status; - u32 line_speed; - u32 duplex; - u32 flow_ctrl; + struct bnx2x_common common; + struct bnx2x_port port; - u32 bc_ver; + struct cmng_struct_per_port cmng; + u32 wsum; - int flash_size; -#define NVRAM_1MB_SIZE 0x20000 /* 1M bit in bytes */ -#define NVRAM_TIMEOUT_COUNT 30000 -#define NVRAM_PAGE_SIZE 256 + u32 mf_config; + u16 e1hov; + u8 e1hmf; +#define IS_E1HMF(bp) (bp->e1hmf != 0) u8 wol; - int rx_ring_size; + int rx_ring_size; - u16 tx_quick_cons_trip_int; - u16 tx_quick_cons_trip; - u16 tx_ticks_int; - u16 tx_ticks; + u16 tx_quick_cons_trip_int; + u16 tx_quick_cons_trip; + u16 tx_ticks_int; + u16 tx_ticks; - u16 rx_quick_cons_trip_int; - u16 rx_quick_cons_trip; - u16 rx_ticks_int; - u16 rx_ticks; + u16 rx_quick_cons_trip_int; + u16 rx_quick_cons_trip; + u16 rx_ticks_int; + u16 rx_ticks; - u32 stats_ticks; + u32 lin_cnt; - int state; -#define BNX2X_STATE_CLOSED 0x0 -#define BNX2X_STATE_OPENING_WAIT4_LOAD 0x1000 -#define BNX2X_STATE_OPENING_WAIT4_PORT 0x2000 + int state; +#define BNX2X_STATE_CLOSED 0x0 +#define BNX2X_STATE_OPENING_WAIT4_LOAD 0x1000 +#define BNX2X_STATE_OPENING_WAIT4_PORT 0x2000 #define BNX2X_STATE_OPEN 0x3000 -#define BNX2X_STATE_CLOSING_WAIT4_HALT 0x4000 +#define BNX2X_STATE_CLOSING_WAIT4_HALT 0x4000 #define BNX2X_STATE_CLOSING_WAIT4_DELETE 0x5000 #define BNX2X_STATE_CLOSING_WAIT4_UNLOAD 0x6000 -#define BNX2X_STATE_ERROR 0xF000 - - int num_queues; - - u32 rx_mode; -#define BNX2X_RX_MODE_NONE 0 -#define BNX2X_RX_MODE_NORMAL 1 -#define BNX2X_RX_MODE_ALLMULTI 2 -#define BNX2X_RX_MODE_PROMISC 3 -#define BNX2X_MAX_MULTICAST 64 -#define BNX2X_MAX_EMUL_MULTI 16 - - dma_addr_t def_status_blk_mapping; - - struct bnx2x_slowpath *slowpath; - dma_addr_t slowpath_mapping; - -#ifdef BCM_ISCSI - void *t1; - dma_addr_t t1_mapping; - void *t2; - dma_addr_t t2_mapping; - void *timers; - dma_addr_t timers_mapping; - void *qm; - dma_addr_t qm_mapping; +#define BNX2X_STATE_DISABLED 0xd000 +#define BNX2X_STATE_DIAG 0xe000 +#define BNX2X_STATE_ERROR 0xf000 + + int multi_mode; +#define BNX2X_MAX_PRIORITY 8 +#define BNX2X_MAX_ENTRIES_PER_PRI 16 + u8 pri_map[BNX2X_MAX_PRIORITY]; + int num_queues; +#define BNX2X_MAX_QUEUES(bp) (IS_E1HMF(bp) ? (MAX_CONTEXT / E1HVN_MAX) : \ + MAX_CONTEXT) + + u32 rx_mode; +#define BNX2X_RX_MODE_NONE 0 +#define BNX2X_RX_MODE_NORMAL 1 +#define BNX2X_RX_MODE_ALLMULTI 2 +#define BNX2X_RX_MODE_PROMISC 3 +#define BNX2X_MAX_MULTICAST 64 +#define BNX2X_MAX_EMUL_MULTI 16 + + dma_addr_t def_status_blk_mapping; + + struct bnx2x_slowpath *slowpath; + dma_addr_t slowpath_mapping; + +#ifdef BCM_CNIC + void *t1; + dma_addr_t t1_mapping; + void *t2; + dma_addr_t t2_mapping; + void *timers; + dma_addr_t timers_mapping; + void *qm; + dma_addr_t qm_mapping; + struct cnic_ops *cnic_ops; + void *cnic_data; + u32 cnic_tag; + struct cnic_eth_dev cnic_eth_dev; + struct host_status_block *cnic_sb; + dma_addr_t cnic_sb_mapping; + struct eth_spe *cnic_kwq; + struct eth_spe *cnic_kwq_prod; + struct eth_spe *cnic_kwq_cons; + struct eth_spe *cnic_kwq_last; + u16 cnic_kwq_pending; + u16 cnic_spq_pending; #endif - char *name; + int dmae_ready; + /* used to synchronize dmae accesses */ + struct mutex dmae_mutex; + struct dmae_command init_dmae; /* used to synchronize stats collecting */ - int stats_state; -#define STATS_STATE_DISABLE 0 -#define STATS_STATE_ENABLE 1 -#define STATS_STATE_STOP 2 /* stop stats on next iteration */ - - struct net_device_stats net_stats; - + int stats_state; /* used by dmae command loader */ - struct dmae_command dmae; - int executer_idx; + struct dmae_command stats_dmae; + int executer_idx; - u32 old_brb_discard; - struct bmac_stats old_bmac; + u16 stats_counter; +#if (LINUX_VERSION_CODE < 0x020618) /* ! BNX2X_UPSTREAM */ + struct net_device_stats net_stats; +#endif struct tstorm_per_client_stats old_tclient; - struct z_stream_s *strm; - void *gunzip_buf; - dma_addr_t gunzip_mapping; - int gunzip_outlen; -#define FW_BUF_SIZE 0x8000 + struct xstorm_per_client_stats old_xclient; + struct bnx2x_eth_stats eth_stats; + + struct z_stream_s *strm; + void *gunzip_buf; + dma_addr_t gunzip_mapping; + int gunzip_outlen; +#define FW_BUF_SIZE 0x8000 +#if (LINUX_VERSION_CODE < 0x2060b) /* ! BNX2X_UPSTREAM */ + u32 pci_state[16]; +#endif }; -/* DMAE command defines */ -#define DMAE_CMD_SRC_PCI 0 -#define DMAE_CMD_SRC_GRC DMAE_COMMAND_SRC +#define for_each_queue(bp, var) for (var = 0; var < bp->num_queues; var++) -#define DMAE_CMD_DST_PCI (1 << DMAE_COMMAND_DST_SHIFT) -#define DMAE_CMD_DST_GRC (2 << DMAE_COMMAND_DST_SHIFT) +#define for_each_nondefault_queue(bp, var) \ + for (var = 1; var < bp->num_queues; var++) +#define is_multi(bp) (bp->num_queues > 1) -#define DMAE_CMD_C_DST_PCI 0 -#define DMAE_CMD_C_DST_GRC (1 << DMAE_COMMAND_C_DST_SHIFT) -#define DMAE_CMD_C_ENABLE DMAE_COMMAND_C_TYPE_ENABLE +void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32); +void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, u32 dst_addr, + u32 len32); +int bnx2x_set_gpio(struct bnx2x *bp, int gpio_num, u32 mode, u8 port); -#define DMAE_CMD_ENDIANITY_NO_SWAP (0 << DMAE_COMMAND_ENDIANITY_SHIFT) -#define DMAE_CMD_ENDIANITY_B_SWAP (1 << DMAE_COMMAND_ENDIANITY_SHIFT) -#define DMAE_CMD_ENDIANITY_DW_SWAP (2 << DMAE_COMMAND_ENDIANITY_SHIFT) -#define DMAE_CMD_ENDIANITY_B_DW_SWAP (3 << DMAE_COMMAND_ENDIANITY_SHIFT) +static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms, + int wait) +{ + u32 val; -#define DMAE_CMD_PORT_0 0 -#define DMAE_CMD_PORT_1 DMAE_COMMAND_PORT + do { + val = REG_RD(bp, reg); + if (val == expected) + break; + ms -= wait; + msleep(wait); -#define DMAE_CMD_SRC_RESET DMAE_COMMAND_SRC_RESET -#define DMAE_CMD_DST_RESET DMAE_COMMAND_DST_RESET + } while (ms > 0); -#define DMAE_LEN32_MAX 0x400 + return val; +} -/* MC hsi */ -#define RX_COPY_THRESH 92 -#define BCM_PAGE_BITS 12 -#define BCM_PAGE_SIZE (1 << BCM_PAGE_BITS) - -#define NUM_TX_RINGS 16 -#define TX_DESC_CNT (BCM_PAGE_SIZE / sizeof(struct eth_tx_bd)) -#define MAX_TX_DESC_CNT (TX_DESC_CNT - 1) -#define NUM_TX_BD (TX_DESC_CNT * NUM_TX_RINGS) -#define MAX_TX_BD (NUM_TX_BD - 1) -#define MAX_TX_AVAIL (MAX_TX_DESC_CNT * NUM_TX_RINGS - 2) -#define NEXT_TX_IDX(x) ((((x) & MAX_TX_DESC_CNT) == \ - (MAX_TX_DESC_CNT - 1)) ? (x) + 2 : (x) + 1) -#define TX_BD(x) ((x) & MAX_TX_BD) -#define TX_BD_POFF(x) ((x) & MAX_TX_DESC_CNT) +/* load/unload mode */ +#define LOAD_NORMAL 0 +#define LOAD_OPEN 1 +#define LOAD_DIAG 2 +#define UNLOAD_NORMAL 0 +#define UNLOAD_CLOSE 1 -/* The RX BD ring is special, each bd is 8 bytes but the last one is 16 */ -#define NUM_RX_RINGS 8 -#define RX_DESC_CNT (BCM_PAGE_SIZE / sizeof(struct eth_rx_bd)) -#define MAX_RX_DESC_CNT (RX_DESC_CNT - 2) -#define RX_DESC_MASK (RX_DESC_CNT - 1) -#define NUM_RX_BD (RX_DESC_CNT * NUM_RX_RINGS) -#define MAX_RX_BD (NUM_RX_BD - 1) -#define MAX_RX_AVAIL (MAX_RX_DESC_CNT * NUM_RX_RINGS - 2) -#define NEXT_RX_IDX(x) ((((x) & RX_DESC_MASK) == \ - (MAX_RX_DESC_CNT - 1)) ? (x) + 3 : (x) + 1) -#define RX_BD(x) ((x) & MAX_RX_BD) -#define NUM_RCQ_RINGS (NUM_RX_RINGS * 2) -#define RCQ_DESC_CNT (BCM_PAGE_SIZE / sizeof(union eth_rx_cqe)) -#define MAX_RCQ_DESC_CNT (RCQ_DESC_CNT - 1) -#define NUM_RCQ_BD (RCQ_DESC_CNT * NUM_RCQ_RINGS) -#define MAX_RCQ_BD (NUM_RCQ_BD - 1) -#define MAX_RCQ_AVAIL (MAX_RCQ_DESC_CNT * NUM_RCQ_RINGS - 2) -#define NEXT_RCQ_IDX(x) ((((x) & MAX_RCQ_DESC_CNT) == \ - (MAX_RCQ_DESC_CNT - 1)) ? (x) + 2 : (x) + 1) -#define RCQ_BD(x) ((x) & MAX_RCQ_BD) +/* DMAE command defines */ +#define DMAE_CMD_SRC_PCI 0 +#define DMAE_CMD_SRC_GRC DMAE_COMMAND_SRC +#define DMAE_CMD_DST_PCI (1 << DMAE_COMMAND_DST_SHIFT) +#define DMAE_CMD_DST_GRC (2 << DMAE_COMMAND_DST_SHIFT) -/* used on a CID received from the HW */ -#define SW_CID(x) (le32_to_cpu(x) & \ - (COMMON_RAMROD_ETH_RX_CQE_CID >> 1)) -#define CQE_CMD(x) (le32_to_cpu(x) >> \ - COMMON_RAMROD_ETH_RX_CQE_CMD_ID_SHIFT) +#define DMAE_CMD_C_DST_PCI 0 +#define DMAE_CMD_C_DST_GRC (1 << DMAE_COMMAND_C_DST_SHIFT) -#define BD_UNMAP_ADDR(bd) HILO_U64(le32_to_cpu((bd)->addr_hi), \ - le32_to_cpu((bd)->addr_lo)) -#define BD_UNMAP_LEN(bd) (le16_to_cpu((bd)->nbytes)) +#define DMAE_CMD_C_ENABLE DMAE_COMMAND_C_TYPE_ENABLE +#define DMAE_CMD_ENDIANITY_NO_SWAP (0 << DMAE_COMMAND_ENDIANITY_SHIFT) +#define DMAE_CMD_ENDIANITY_B_SWAP (1 << DMAE_COMMAND_ENDIANITY_SHIFT) +#define DMAE_CMD_ENDIANITY_DW_SWAP (2 << DMAE_COMMAND_ENDIANITY_SHIFT) +#define DMAE_CMD_ENDIANITY_B_DW_SWAP (3 << DMAE_COMMAND_ENDIANITY_SHIFT) -#define STROM_ASSERT_ARRAY_SIZE 50 +#define DMAE_CMD_PORT_0 0 +#define DMAE_CMD_PORT_1 DMAE_COMMAND_PORT +#define DMAE_CMD_SRC_RESET DMAE_COMMAND_SRC_RESET +#define DMAE_CMD_DST_RESET DMAE_COMMAND_DST_RESET +#define DMAE_CMD_E1HVN_SHIFT DMAE_COMMAND_E1HVN_SHIFT -#define MDIO_INDIRECT_REG_ADDR 0x1f -#define MDIO_SET_REG_BANK(bp, reg_bank) \ - bnx2x_mdio22_write(bp, MDIO_INDIRECT_REG_ADDR, reg_bank) +#define DMAE_LEN32_RD_MAX 0x80 +#define DMAE_LEN32_WR_MAX 0x400 -#define MDIO_ACCESS_TIMEOUT 1000 +#define DMAE_COMP_VAL 0xe0d0d0ae +#define MAX_DMAE_C_PER_PORT 8 +#define INIT_DMAE_C(bp) (BP_PORT(bp)*MAX_DMAE_C_PER_PORT + \ + BP_E1HVN(bp)) +#define PMF_DMAE_C(bp) (BP_PORT(bp)*MAX_DMAE_C_PER_PORT + \ + E1HVN_MAX) -/* must be used on a CID before placing it on a HW ring */ -#define HW_CID(bp, x) (x | (bp->port << 23)) -#define SP_DESC_CNT (BCM_PAGE_SIZE / sizeof(struct eth_spe)) -#define MAX_SP_DESC_CNT (SP_DESC_CNT - 1) +/* PCIE link and speed */ +#define PCICFG_LINK_WIDTH 0x1f00000 +#define PCICFG_LINK_WIDTH_SHIFT 20 +#define PCICFG_LINK_SPEED 0xf0000 +#define PCICFG_LINK_SPEED_SHIFT 16 -#define ATTN_NIG_FOR_FUNC (1L << 8) -#define ATTN_SW_TIMER_4_FUNC (1L << 9) -#define GPIO_2_FUNC (1L << 10) -#define GPIO_3_FUNC (1L << 11) -#define GPIO_4_FUNC (1L << 12) -#define ATTN_GENERAL_ATTN_1 (1L << 13) -#define ATTN_GENERAL_ATTN_2 (1L << 14) -#define ATTN_GENERAL_ATTN_3 (1L << 15) -#define ATTN_GENERAL_ATTN_4 (1L << 13) -#define ATTN_GENERAL_ATTN_5 (1L << 14) -#define ATTN_GENERAL_ATTN_6 (1L << 15) -#define ATTN_HARD_WIRED_MASK 0xff00 -#define ATTENTION_ID 4 +#define BNX2X_NUM_STATS 43 +#define BNX2X_NUM_TESTS 8 +#define BNX2X_MAC_LOOPBACK 0 +#define BNX2X_PHY_LOOPBACK 1 +#define BNX2X_MAC_LOOPBACK_FAILED 1 +#define BNX2X_PHY_LOOPBACK_FAILED 2 +#define BNX2X_LOOPBACK_FAILED (BNX2X_MAC_LOOPBACK_FAILED | \ + BNX2X_PHY_LOOPBACK_FAILED) -#define BNX2X_BTR 3 -#define MAX_SPQ_PENDING 8 +#define STROM_ASSERT_ARRAY_SIZE 50 -#define BNX2X_NUM_STATS 34 -#define BNX2X_NUM_TESTS 1 +/* must be used on a CID before placing it on a HW ring */ +#define HW_CID(bp, x) ((BP_PORT(bp) << 23) | (BP_E1HVN(bp) << 17) | x) -#define DPM_TRIGER_TYPE 0x40 -#define DOORBELL(bp, cid, val) \ - do { \ - writel((u32)val, (bp)->doorbells + (BCM_PAGE_SIZE * cid) + \ - DPM_TRIGER_TYPE); \ - } while (0) +#define SP_DESC_CNT (BCM_PAGE_SIZE / sizeof(struct eth_spe)) +#define MAX_SP_DESC_CNT (SP_DESC_CNT - 1) -/* PCIE link and speed */ -#define PCICFG_LINK_WIDTH 0x1f00000 -#define PCICFG_LINK_WIDTH_SHIFT 20 -#define PCICFG_LINK_SPEED 0xf0000 -#define PCICFG_LINK_SPEED_SHIFT 16 -#define BMAC_CONTROL_RX_ENABLE 2 +#define BNX2X_BTR 3 +#define MAX_SPQ_PENDING 8 -#define pbd_tcp_flags(skb) (ntohl(tcp_flag_word(tcp_hdr(skb)))>>16 & 0xff) -/* stuff added to make the code fit 80Col */ +/* CMNG constants + derived from lab experiments, and not from system spec calculations !!! */ +#define DEF_MIN_RATE 100 +/* resolution of the rate shaping timer - 100 usec */ +#define RS_PERIODIC_TIMEOUT_USEC 100 +/* resolution of fairness algorithm in usecs - + coefficient for calculating the actual t fair */ +#define T_FAIR_COEF 10000000 +/* number of bytes in single QM arbitration cycle - + coefficient for calculating the fairness timer */ +#define QM_ARB_BYTES 40000 +#define FAIR_MEM 2 -#define TPA_TYPE_START ETH_FAST_PATH_RX_CQE_START_FLG -#define TPA_TYPE_END ETH_FAST_PATH_RX_CQE_END_FLG -#define TPA_TYPE(cqe) (cqe->fast_path_cqe.error_type_flags & \ - (TPA_TYPE_START | TPA_TYPE_END)) -#define BNX2X_RX_SUM_OK(cqe) \ - (!(cqe->fast_path_cqe.status_flags & \ - (ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG | \ - ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG))) -#define BNX2X_RX_SUM_FIX(cqe) \ - ((le16_to_cpu(cqe->fast_path_cqe.pars_flags.flags) & \ - PARSING_FLAGS_OVER_ETHERNET_PROTOCOL) == \ - (1 << PARSING_FLAGS_OVER_ETHERNET_PROTOCOL_SHIFT)) +#define ATTN_NIG_FOR_FUNC (1L << 8) +#define ATTN_SW_TIMER_4_FUNC (1L << 9) +#define GPIO_2_FUNC (1L << 10) +#define GPIO_3_FUNC (1L << 11) +#define GPIO_4_FUNC (1L << 12) +#define ATTN_GENERAL_ATTN_1 (1L << 13) +#define ATTN_GENERAL_ATTN_2 (1L << 14) +#define ATTN_GENERAL_ATTN_3 (1L << 15) +#define ATTN_GENERAL_ATTN_4 (1L << 13) +#define ATTN_GENERAL_ATTN_5 (1L << 14) +#define ATTN_GENERAL_ATTN_6 (1L << 15) + +#define ATTN_HARD_WIRED_MASK 0xff00 +#define ATTENTION_ID 4 -#define MDIO_AN_CL73_OR_37_COMPLETE \ - (MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_AUTONEG_COMPLETE | \ - MDIO_GP_STATUS_TOP_AN_STATUS1_CL37_AUTONEG_COMPLETE) - -#define GP_STATUS_PAUSE_RSOLUTION_TXSIDE \ - MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_TXSIDE -#define GP_STATUS_PAUSE_RSOLUTION_RXSIDE \ - MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_RXSIDE -#define GP_STATUS_SPEED_MASK \ - MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_MASK -#define GP_STATUS_10M MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10M -#define GP_STATUS_100M MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_100M -#define GP_STATUS_1G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G -#define GP_STATUS_2_5G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_2_5G -#define GP_STATUS_5G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_5G -#define GP_STATUS_6G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_6G -#define GP_STATUS_10G_HIG \ - MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_HIG -#define GP_STATUS_10G_CX4 \ - MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_CX4 -#define GP_STATUS_12G_HIG \ - MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_12G_HIG -#define GP_STATUS_12_5G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_12_5G -#define GP_STATUS_13G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_13G -#define GP_STATUS_15G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_15G -#define GP_STATUS_16G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_16G -#define GP_STATUS_1G_KX MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G_KX -#define GP_STATUS_10G_KX4 \ - MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_KX4 - -#define LINK_10THD LINK_STATUS_SPEED_AND_DUPLEX_10THD -#define LINK_10TFD LINK_STATUS_SPEED_AND_DUPLEX_10TFD -#define LINK_100TXHD LINK_STATUS_SPEED_AND_DUPLEX_100TXHD -#define LINK_100T4 LINK_STATUS_SPEED_AND_DUPLEX_100T4 -#define LINK_100TXFD LINK_STATUS_SPEED_AND_DUPLEX_100TXFD -#define LINK_1000THD LINK_STATUS_SPEED_AND_DUPLEX_1000THD -#define LINK_1000TFD LINK_STATUS_SPEED_AND_DUPLEX_1000TFD -#define LINK_1000XFD LINK_STATUS_SPEED_AND_DUPLEX_1000XFD -#define LINK_2500THD LINK_STATUS_SPEED_AND_DUPLEX_2500THD -#define LINK_2500TFD LINK_STATUS_SPEED_AND_DUPLEX_2500TFD -#define LINK_2500XFD LINK_STATUS_SPEED_AND_DUPLEX_2500XFD -#define LINK_10GTFD LINK_STATUS_SPEED_AND_DUPLEX_10GTFD -#define LINK_10GXFD LINK_STATUS_SPEED_AND_DUPLEX_10GXFD -#define LINK_12GTFD LINK_STATUS_SPEED_AND_DUPLEX_12GTFD -#define LINK_12GXFD LINK_STATUS_SPEED_AND_DUPLEX_12GXFD -#define LINK_12_5GTFD LINK_STATUS_SPEED_AND_DUPLEX_12_5GTFD -#define LINK_12_5GXFD LINK_STATUS_SPEED_AND_DUPLEX_12_5GXFD -#define LINK_13GTFD LINK_STATUS_SPEED_AND_DUPLEX_13GTFD -#define LINK_13GXFD LINK_STATUS_SPEED_AND_DUPLEX_13GXFD -#define LINK_15GTFD LINK_STATUS_SPEED_AND_DUPLEX_15GTFD -#define LINK_15GXFD LINK_STATUS_SPEED_AND_DUPLEX_15GXFD -#define LINK_16GTFD LINK_STATUS_SPEED_AND_DUPLEX_16GTFD -#define LINK_16GXFD LINK_STATUS_SPEED_AND_DUPLEX_16GXFD - -#define NIG_STATUS_XGXS0_LINK10G \ - NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_XGXS0_LINK10G -#define NIG_STATUS_XGXS0_LINK_STATUS \ - NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_XGXS0_LINK_STATUS -#define NIG_STATUS_XGXS0_LINK_STATUS_SIZE \ - NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_XGXS0_LINK_STATUS_SIZE -#define NIG_STATUS_SERDES0_LINK_STATUS \ - NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_SERDES0_LINK_STATUS -#define NIG_MASK_MI_INT \ - NIG_MASK_INTERRUPT_PORT0_REG_MASK_EMAC0_MISC_MI_INT -#define NIG_MASK_XGXS0_LINK10G \ - NIG_MASK_INTERRUPT_PORT0_REG_MASK_XGXS0_LINK10G -#define NIG_MASK_XGXS0_LINK_STATUS \ - NIG_MASK_INTERRUPT_PORT0_REG_MASK_XGXS0_LINK_STATUS -#define NIG_MASK_SERDES0_LINK_STATUS \ - NIG_MASK_INTERRUPT_PORT0_REG_MASK_SERDES0_LINK_STATUS - -#define XGXS_RESET_BITS \ - (MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_RSTB_HW | \ - MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_IDDQ | \ - MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_PWRDWN | \ - MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_PWRDWN_SD | \ - MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_TXD_FIFO_RSTB) - -#define SERDES_RESET_BITS \ - (MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_RSTB_HW | \ - MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_IDDQ | \ - MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_PWRDWN | \ - MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_PWRDWN_SD) +/* stuff added to make the code fit 80Col */ +#define BNX2X_PMF_LINK_ASSERT \ + GENERAL_ATTEN_OFFSET(LINK_SYNC_ATTENTION_BIT_FUNC_0 + BP_FUNC(bp)) #define BNX2X_MC_ASSERT_BITS \ (GENERAL_ATTEN_OFFSET(TSTORM_FATAL_ASSERT_ATTENTION_BIT) | \ @@ -985,15 +1133,20 @@ struct bnx2x { #define BNX2X_MCP_ASSERT \ GENERAL_ATTEN_OFFSET(MCP_FATAL_ASSERT_ATTENTION_BIT) -#define BNX2X_DOORQ_ASSERT \ - AEU_INPUTS_ATTN_BITS_DOORBELLQ_HW_INTERRUPT +#define BNX2X_GRC_TIMEOUT GENERAL_ATTEN_OFFSET(LATCHED_ATTN_TIMEOUT_GRC) +#define BNX2X_GRC_RSV (GENERAL_ATTEN_OFFSET(LATCHED_ATTN_RBCR) | \ + GENERAL_ATTEN_OFFSET(LATCHED_ATTN_RBCT) | \ + GENERAL_ATTEN_OFFSET(LATCHED_ATTN_RBCN) | \ + GENERAL_ATTEN_OFFSET(LATCHED_ATTN_RBCU) | \ + GENERAL_ATTEN_OFFSET(LATCHED_ATTN_RBCP) | \ + GENERAL_ATTEN_OFFSET(LATCHED_ATTN_RSVD_GRC)) #define HW_INTERRUT_ASSERT_SET_0 \ (AEU_INPUTS_ATTN_BITS_TSDM_HW_INTERRUPT | \ AEU_INPUTS_ATTN_BITS_TCM_HW_INTERRUPT | \ AEU_INPUTS_ATTN_BITS_TSEMI_HW_INTERRUPT | \ AEU_INPUTS_ATTN_BITS_PBF_HW_INTERRUPT) -#define HW_PRTY_ASSERT_SET_0 (AEU_INPUTS_ATTN_BITS_BRB_PARITY_ERROR | \ +#define HW_PRTY_ASSERT_SET_0 (AEU_INPUTS_ATTN_BITS_BRB_PARITY_ERROR | \ AEU_INPUTS_ATTN_BITS_PARSER_PARITY_ERROR | \ AEU_INPUTS_ATTN_BITS_TSDM_PARITY_ERROR | \ AEU_INPUTS_ATTN_BITS_SEARCHER_PARITY_ERROR |\ @@ -1010,7 +1163,7 @@ struct bnx2x { AEU_INPUTS_ATTN_BITS_UPB_HW_INTERRUPT | \ AEU_INPUTS_ATTN_BITS_CSDM_HW_INTERRUPT | \ AEU_INPUTS_ATTN_BITS_CCM_HW_INTERRUPT) -#define HW_PRTY_ASSERT_SET_1 (AEU_INPUTS_ATTN_BITS_PBCLIENT_PARITY_ERROR |\ +#define HW_PRTY_ASSERT_SET_1 (AEU_INPUTS_ATTN_BITS_PBCLIENT_PARITY_ERROR |\ AEU_INPUTS_ATTN_BITS_QM_PARITY_ERROR | \ AEU_INPUTS_ATTN_BITS_XSDM_PARITY_ERROR | \ AEU_INPUTS_ATTN_BITS_XSEMI_PARITY_ERROR | \ @@ -1027,7 +1180,7 @@ struct bnx2x { AEU_INPUTS_ATTN_BITS_DMAE_HW_INTERRUPT | \ AEU_INPUTS_ATTN_BITS_PXPPCICLOCKCLIENT_HW_INTERRUPT |\ AEU_INPUTS_ATTN_BITS_MISC_HW_INTERRUPT) -#define HW_PRTY_ASSERT_SET_2 (AEU_INPUTS_ATTN_BITS_CSEMI_PARITY_ERROR | \ +#define HW_PRTY_ASSERT_SET_2 (AEU_INPUTS_ATTN_BITS_CSEMI_PARITY_ERROR | \ AEU_INPUTS_ATTN_BITS_PXP_PARITY_ERROR | \ AEU_INPUTS_ATTN_BITS_PXPPCICLOCKCLIENT_PARITY_ERROR |\ AEU_INPUTS_ATTN_BITS_CFC_PARITY_ERROR | \ @@ -1036,42 +1189,45 @@ struct bnx2x { AEU_INPUTS_ATTN_BITS_MISC_PARITY_ERROR) -#define ETH_RX_ERROR_FALGS (ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG | \ - ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG | \ - ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG) - +#define MULTI_FLAGS(bp) \ + (TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY | \ + TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_TCP_CAPABILITY | \ + TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_CAPABILITY | \ + TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY | \ + (bp->multi_mode << \ + TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_MODE_SHIFT)) -#define MULTI_FLAGS \ - (TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY | \ - TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_TCP_CAPABILITY | \ - TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_CAPABILITY | \ - TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY | \ - TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_ENABLE) +#define MULTI_MASK 0x7f -#define MULTI_MASK 0x7f +#define DEF_USB_FUNC_OFF (2 + 2*HC_USTORM_DEF_SB_NUM_INDICES) +#define DEF_CSB_FUNC_OFF (2 + 2*HC_CSTORM_DEF_SB_NUM_INDICES) +#define DEF_XSB_FUNC_OFF (2 + 2*HC_XSTORM_DEF_SB_NUM_INDICES) +#define DEF_TSB_FUNC_OFF (2 + 2*HC_TSTORM_DEF_SB_NUM_INDICES) -#define U_SB_ETH_RX_CQ_INDEX HC_INDEX_U_ETH_RX_CQ_CONS -#define C_SB_ETH_TX_CQ_INDEX HC_INDEX_C_ETH_TX_CQ_CONS -#define C_DEF_SB_SP_INDEX HC_INDEX_DEF_C_ETH_SLOW_PATH - -#define BNX2X_RX_SB_INDEX \ - &fp->status_blk->u_status_block.index_values[U_SB_ETH_RX_CQ_INDEX] - -#define BNX2X_TX_SB_INDEX \ - &fp->status_blk->c_status_block.index_values[C_SB_ETH_TX_CQ_INDEX] +#define C_DEF_SB_SP_INDEX HC_INDEX_DEF_C_ETH_SLOW_PATH #define BNX2X_SP_DSB_INDEX \ -&bp->def_status_blk->c_def_status_block.index_values[C_DEF_SB_SP_INDEX] +(&bp->def_status_blk->c_def_status_block.index_values[C_DEF_SB_SP_INDEX]) #define CAM_IS_INVALID(x) \ (x.target_table_entry.flags == TSTORM_CAM_TARGET_TABLE_ENTRY_ACTION_TYPE) #define CAM_INVALIDATE(x) \ -x.target_table_entry.flags = TSTORM_CAM_TARGET_TABLE_ENTRY_ACTION_TYPE + (x.target_table_entry.flags = TSTORM_CAM_TARGET_TABLE_ENTRY_ACTION_TYPE) +/* Number of u32 elements in MC hash array */ +#define MC_HASH_SIZE 8 +#define MC_HASH_OFFSET(bp, i) (BAR_TSTRORM_INTMEM + \ + TSTORM_APPROXIMATE_MATCH_MULTICAST_FILTERING_OFFSET(BP_FUNC(bp)) + i*4) + + +#ifndef PXP2_REG_PXP2_INT_STS +#define PXP2_REG_PXP2_INT_STS PXP2_REG_PXP2_INT_STS_0 +#endif + /* MISC_REG_RESET_REG - this is here for the hsi to work don't touch */ #endif /* bnx2x.h */ diff --git a/drivers/net/bnx2x_compat.h b/drivers/net/bnx2x_compat.h new file mode 100644 index 00000000..b135e75e --- /dev/null +++ b/drivers/net/bnx2x_compat.h @@ -0,0 +1,307 @@ +#ifndef __BNX2X_COMPAT_H__ +#define __BNX2X_COMPAT_H__ + +#ifndef BNX2X_NEW_NAPI +#define netif_rx_schedule(dev, X) netif_rx_schedule(dev) +#define netif_rx_complete(X, Y) netif_rx_complete(dev) +#endif + +#if (LINUX_VERSION_CODE < 0x020616) +#define skb_copy_from_linear_data_offset(skb, pad, new_skb_data, len) \ + memcpy(new_skb_data, skb->data + pad, len) + +/* skb_buff accessors */ +#define ip_hdr(skb) (skb)->nh.iph +#define ipv6_hdr(skb) (skb)->nh.ipv6h +#define ip_hdrlen(skb) (ip_hdr(skb)->ihl * 4) +#define tcp_hdr(skb) (skb)->h.th +#define tcp_hdrlen(skb) (tcp_hdr(skb)->doff * 4) +#define udp_hdr(skb) (skb)->h.uh +#define skb_mac_header(skb) ((skb)->mac.raw) +#define skb_network_header(skb) ((skb)->nh.raw) +#define skb_transport_header(skb) ((skb)->h.raw) +#endif + + +#ifndef CHECKSUM_PARTIAL +#define CHECKSUM_PARTIAL CHECKSUM_HW +#endif + + +#if (LINUX_VERSION_CODE < 0x020600) +#define might_sleep() + +#define num_online_cpus() 1 + +#define dev_info(dev, format, args...) \ + printk(KERN_INFO "bnx2x: " format, ##args) + +#define dev_err(dev, format, args...) \ + printk(KERN_ERR "bnx2x: " format, ##args) + +static inline int dma_mapping_error(dma_addr_t mapping) +{ + return 0; +} + +#define synchronize_irq(X) synchronize_irq() +#define flush_scheduled_work() +#endif + + +#ifndef SET_MODULE_OWNER +#define SET_MODULE_OWNER(dev) +#endif + + +#if (LINUX_VERSION_CODE < 0x020604) +#define MODULE_VERSION(version) +#endif + + +#if (LINUX_VERSION_CODE < 0x020605) +static inline void pci_dma_sync_single_for_device(struct pci_dev *dev, + dma_addr_t map, size_t size, + int dir) +{ +} +#endif + + +#if (LINUX_VERSION_CODE < 0x020547) +#define pci_set_consistent_dma_mask(X, Y) (0) +#endif + + +#if (LINUX_VERSION_CODE < 0x020607) +#define msleep(x) \ + do { \ + current->state = TASK_UNINTERRUPTIBLE; \ + schedule_timeout((HZ * (x)) / 1000); \ + } while (0) + +#ifndef ADVERTISE_1000XPAUSE +static inline struct mii_ioctl_data *if_mii(struct ifreq *rq) +{ + return (struct mii_ioctl_data *)&rq->ifr_ifru; +} +#endif + +#define pci_enable_msix(X, Y, Z) (-1) +#endif + + +#if (LINUX_VERSION_CODE < 0x020609) +#define msleep_interruptible(x) \ + do{ \ + current->state = TASK_INTERRUPTIBLE; \ + schedule_timeout((HZ * (x)) / 1000); \ + } while (0) + +#endif + + +#if (LINUX_VERSION_CODE < 0x02060b) +#define pm_message_t u32 +#define pci_power_t u32 +#define PCI_D0 0 +#define PCI_D3hot 3 +#define pci_choose_state(pdev, state) state +#endif + + +#if (LINUX_VERSION_CODE < 0x02060e) +#define touch_softlockup_watchdog() +#endif + + +#if (LINUX_VERSION_CODE < 0x020612) +static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev, + unsigned int length) +{ + struct sk_buff *skb = dev_alloc_skb(length); + + if (skb) + skb->dev = dev; + return skb; +} +#endif + + +#ifndef IRQ_HANDLED +typedef void irqreturn_t; +#define IRQ_HANDLED +#define IRQ_NONE +#endif + + +#ifndef IRQF_SHARED +#define IRQF_SHARED SA_SHIRQ +#endif + + +#ifndef NETIF_F_GSO +static inline void netif_tx_lock(struct net_device *dev) +{ + spin_lock(&dev->xmit_lock); + dev->xmit_lock_owner = smp_processor_id(); +} + +static inline void netif_tx_unlock(struct net_device *dev) +{ + dev->xmit_lock_owner = -1; + spin_unlock(&dev->xmit_lock); +} +#endif + + +#ifndef skb_shinfo +#define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB))) +#endif + + +#ifdef NETIF_F_TSO +#ifndef NETIF_F_GSO + +static inline int skb_is_gso(const struct sk_buff *skb) +{ + return skb_shinfo(skb)->tso_size; +} + +#define gso_size tso_size + +#endif /* NETIF_F_GSO */ + +#ifndef NETIF_F_GSO_SOFTWARE +#define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO) +#endif + +#endif /* NETIF_F_TSO */ + +#ifndef NETIF_F_TSO_ECN +#define NETIF_F_TSO_ECN 0 +#endif + + +#if !defined(mmiowb) +#define mmiowb() +#endif + +#if !defined(__iomem) +#define __iomem +#endif + +#ifndef noinline +#define noinline +#endif + +#if !defined(INIT_WORK) +#define INIT_WORK INIT_TQUEUE +#define schedule_work schedule_task +#define work_struct tq_struct +#endif + +#if !defined(HAVE_NETDEV_PRIV) && (LINUX_VERSION_CODE != 0x020603) && (LINUX_VERSION_CODE != 0x020604) && (LINUX_VERSION_CODE != 0x020605) +#define netdev_priv(dev) (dev)->priv +#endif + +/* Missing defines */ +#ifndef SPEED_2500 +#define SPEED_2500 2500 +#endif + +#ifndef SUPPORTED_Pause +#define SUPPORTED_Pause (1 << 13) +#endif +#ifndef SUPPORTED_Asym_Pause +#define SUPPORTED_Asym_Pause (1 << 14) +#endif + +#ifndef ADVERTISED_Pause +#define ADVERTISED_Pause (1 << 13) +#endif + +#ifndef ADVERTISED_Asym_Pause +#define ADVERTISED_Asym_Pause (1 << 14) +#endif + +#ifndef NETDEV_TX_BUSY +#define NETDEV_TX_BUSY 1 /* driver tx path was busy */ +#endif + +#ifndef NETDEV_TX_OK +#define NETDEV_TX_OK 0 /* driver took care of packet */ +#endif + + +#ifndef DMA_64BIT_MASK +#define DMA_64BIT_MASK ((u64) 0xffffffffffffffffULL) +#define DMA_32BIT_MASK ((u64) 0x00000000ffffffffULL) +#endif + +#ifndef PCI_CAP_ID_EXP +#define PCI_CAP_ID_EXP 0x10 +#endif + +#ifndef PCI_EXP_DEVCTL +#define PCI_EXP_DEVCTL 8 /* Device Control */ +#endif + +#ifndef PCI_EXP_DEVCTL_PAYLOAD +#define PCI_EXP_DEVCTL_PAYLOAD 0x00e0 /* Max_Payload_Size */ +#endif + +#ifndef PCI_EXP_DEVCTL_READRQ +#define PCI_EXP_DEVCTL_READRQ 0x7000 /* Max_Read_Request_Size */ +#endif + + +#if (LINUX_VERSION_CODE < 0x020618) + +#ifndef NETIF_F_HW_CSUM +#define NETIF_F_HW_CSUM 8 +#endif + +static inline int bnx2x_set_tx_hw_csum(struct net_device *dev, u32 data) +{ + if (data) + dev->features |= NETIF_F_HW_CSUM; + else + dev->features &= ~NETIF_F_HW_CSUM; + return 0; +} +#endif + + +/* If mutex is not available, use semaphore */ +#ifndef __LINUX_MUTEX_H +#define mutex semaphore +#define mutex_lock(x) down(x) +#define mutex_unlock(x) up(x) +#define mutex_init(x) sema_init(x,1) +#endif + + +#ifndef KERN_CONT +#define KERN_CONT +#endif + + +#if (LINUX_VERSION_CODE < 0x020606) || defined(BNX2X_DRIVER_DISK) || defined(__VMKLNX__) + +#define CRC32C_POLY_LE 0x82F63B78 + +static inline u32 crc32c_le(u32 crc, unsigned char const *p, size_t len) +{ + int i; + + while (len--) { + crc ^= *p++; + for (i = 0; i < 8; i++) + crc = (crc >> 1) ^ ((crc & 1) ? CRC32C_POLY_LE : 0); + } + return crc; +} +#endif + +#endif /* __BNX2X_COMPAT_H__ */ diff --git a/drivers/net/bnx2x_fw_defs.h b/drivers/net/bnx2x_fw_defs.h index 3b968904..384ebeba 100644 --- a/drivers/net/bnx2x_fw_defs.h +++ b/drivers/net/bnx2x_fw_defs.h @@ -8,191 +8,419 @@ */ -#define CSTORM_DEF_SB_HC_DISABLE_OFFSET(port, index)\ - (0x1922 + (port * 0x40) + (index * 0x4)) -#define CSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)\ - (0x1900 + (port * 0x40)) -#define CSTORM_HC_BTR_OFFSET(port)\ - (0x1984 + (port * 0xc0)) -#define CSTORM_SB_HC_DISABLE_OFFSET(port, cpu_id, index)\ - (0x141a + (port * 0x280) + (cpu_id * 0x28) + (index * 0x4)) -#define CSTORM_SB_HC_TIMEOUT_OFFSET(port, cpu_id, index)\ - (0x1418 + (port * 0x280) + (cpu_id * 0x28) + (index * 0x4)) -#define CSTORM_SB_HOST_SB_ADDR_OFFSET(port, cpu_id)\ - (0x1400 + (port * 0x280) + (cpu_id * 0x28)) -#define CSTORM_STATS_FLAGS_OFFSET(port) (0x5108 + (port * 0x8)) -#define TSTORM_CLIENT_CONFIG_OFFSET(port, client_id)\ - (0x1510 + (port * 0x240) + (client_id * 0x20)) -#define TSTORM_DEF_SB_HC_DISABLE_OFFSET(port, index)\ - (0x138a + (port * 0x28) + (index * 0x4)) -#define TSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)\ - (0x1370 + (port * 0x28)) -#define TSTORM_ETH_STATS_QUERY_ADDR_OFFSET(port)\ - (0x4b70 + (port * 0x8)) -#define TSTORM_FUNCTION_COMMON_CONFIG_OFFSET(function)\ - (0x1418 + (function * 0x30)) -#define TSTORM_HC_BTR_OFFSET(port)\ - (0x13c4 + (port * 0x18)) -#define TSTORM_INDIRECTION_TABLE_OFFSET(port)\ - (0x22c8 + (port * 0x80)) -#define TSTORM_INDIRECTION_TABLE_SIZE 0x80 -#define TSTORM_MAC_FILTER_CONFIG_OFFSET(port)\ - (0x1420 + (port * 0x30)) -#define TSTORM_RCQ_PROD_OFFSET(port, client_id)\ - (0x1508 + (port * 0x240) + (client_id * 0x20)) -#define TSTORM_STATS_FLAGS_OFFSET(port) (0x4b90 + (port * 0x8)) -#define USTORM_DEF_SB_HC_DISABLE_OFFSET(port, index)\ - (0x191a + (port * 0x28) + (index * 0x4)) -#define USTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)\ - (0x1900 + (port * 0x28)) -#define USTORM_HC_BTR_OFFSET(port)\ - (0x1954 + (port * 0xb8)) -#define USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(port)\ - (0x5408 + (port * 0x8)) -#define USTORM_SB_HC_DISABLE_OFFSET(port, cpu_id, index)\ - (0x141a + (port * 0x280) + (cpu_id * 0x28) + (index * 0x4)) -#define USTORM_SB_HC_TIMEOUT_OFFSET(port, cpu_id, index)\ - (0x1418 + (port * 0x280) + (cpu_id * 0x28) + (index * 0x4)) -#define USTORM_SB_HOST_SB_ADDR_OFFSET(port, cpu_id)\ - (0x1400 + (port * 0x280) + (cpu_id * 0x28)) -#define XSTORM_ASSERT_LIST_INDEX_OFFSET 0x1000 -#define XSTORM_ASSERT_LIST_OFFSET(idx) (0x1020 + (idx * 0x10)) -#define XSTORM_DEF_SB_HC_DISABLE_OFFSET(port, index)\ - (0x141a + (port * 0x28) + (index * 0x4)) -#define XSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)\ - (0x1400 + (port * 0x28)) -#define XSTORM_ETH_STATS_QUERY_ADDR_OFFSET(port)\ - (0x5408 + (port * 0x8)) -#define XSTORM_HC_BTR_OFFSET(port)\ - (0x1454 + (port * 0x18)) -#define XSTORM_SPQ_PAGE_BASE_OFFSET(port)\ - (0x5328 + (port * 0x18)) -#define XSTORM_SPQ_PROD_OFFSET(port)\ - (0x5330 + (port * 0x18)) -#define XSTORM_STATS_FLAGS_OFFSET(port) (0x53f8 + (port * 0x8)) +#define CSTORM_ASSERT_LIST_INDEX_OFFSET \ + (IS_E1H_OFFSET ? 0x7000 : 0x1000) +#define CSTORM_ASSERT_LIST_OFFSET(idx) \ + (IS_E1H_OFFSET ? (0x7020 + (idx * 0x10)) : (0x1020 + (idx * 0x10))) +#define CSTORM_DEF_SB_HC_DISABLE_OFFSET(function, index) \ + (IS_E1H_OFFSET ? (0x8522 + ((function>>1) * 0x40) + \ + ((function&1) * 0x100) + (index * 0x4)) : (0x1922 + (function * \ + 0x40) + (index * 0x4))) +#define CSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x8500 + ((function>>1) * 0x40) + \ + ((function&1) * 0x100)) : (0x1900 + (function * 0x40))) +#define CSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x8508 + ((function>>1) * 0x40) + \ + ((function&1) * 0x100)) : (0x1908 + (function * 0x40))) +#define CSTORM_FUNCTION_MODE_OFFSET \ + (IS_E1H_OFFSET ? 0x11e8 : 0xffffffff) +#define CSTORM_HC_BTR_OFFSET(port) \ + (IS_E1H_OFFSET ? (0x8704 + (port * 0xf0)) : (0x1984 + (port * 0xc0))) +#define CSTORM_SB_HC_DISABLE_OFFSET(port, cpu_id, index) \ + (IS_E1H_OFFSET ? (0x801a + (port * 0x280) + (cpu_id * 0x28) + \ + (index * 0x4)) : (0x141a + (port * 0x280) + (cpu_id * 0x28) + \ + (index * 0x4))) +#define CSTORM_SB_HC_TIMEOUT_OFFSET(port, cpu_id, index) \ + (IS_E1H_OFFSET ? (0x8018 + (port * 0x280) + (cpu_id * 0x28) + \ + (index * 0x4)) : (0x1418 + (port * 0x280) + (cpu_id * 0x28) + \ + (index * 0x4))) +#define CSTORM_SB_HOST_SB_ADDR_OFFSET(port, cpu_id) \ + (IS_E1H_OFFSET ? (0x8000 + (port * 0x280) + (cpu_id * 0x28)) : \ + (0x1400 + (port * 0x280) + (cpu_id * 0x28))) +#define CSTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, cpu_id) \ + (IS_E1H_OFFSET ? (0x8008 + (port * 0x280) + (cpu_id * 0x28)) : \ + (0x1408 + (port * 0x280) + (cpu_id * 0x28))) +#define CSTORM_STATS_FLAGS_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x1108 + (function * 0x8)) : (0x5108 + \ + (function * 0x8))) +#define TSTORM_APPROXIMATE_MATCH_MULTICAST_FILTERING_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x31c0 + (function * 0x20)) : 0xffffffff) +#define TSTORM_ASSERT_LIST_INDEX_OFFSET \ + (IS_E1H_OFFSET ? 0xa000 : 0x1000) +#define TSTORM_ASSERT_LIST_OFFSET(idx) \ + (IS_E1H_OFFSET ? (0xa020 + (idx * 0x10)) : (0x1020 + (idx * 0x10))) +#define TSTORM_CLIENT_CONFIG_OFFSET(port, client_id) \ + (IS_E1H_OFFSET ? (0x3350 + (port * 0x190) + (client_id * 0x10)) \ + : (0x9c0 + (port * 0x130) + (client_id * 0x10))) +#define TSTORM_DEF_SB_HC_DISABLE_OFFSET(function, index) \ + (IS_E1H_OFFSET ? (0xb01a + ((function>>1) * 0x28) + \ + ((function&1) * 0xa0) + (index * 0x4)) : (0x141a + (function * \ + 0x28) + (index * 0x4))) +#define TSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(function) \ + (IS_E1H_OFFSET ? (0xb000 + ((function>>1) * 0x28) + \ + ((function&1) * 0xa0)) : (0x1400 + (function * 0x28))) +#define TSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \ + (IS_E1H_OFFSET ? (0xb008 + ((function>>1) * 0x28) + \ + ((function&1) * 0xa0)) : (0x1408 + (function * 0x28))) +#define TSTORM_ETH_STATS_QUERY_ADDR_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x2b80 + (function * 0x8)) : (0x4b68 + \ + (function * 0x8))) +#define TSTORM_FUNCTION_COMMON_CONFIG_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x3000 + (function * 0x38)) : (0x1500 + \ + (function * 0x38))) +#define TSTORM_FUNCTION_MODE_OFFSET \ + (IS_E1H_OFFSET ? 0x1ad0 : 0xffffffff) +#define TSTORM_HC_BTR_OFFSET(port) \ + (IS_E1H_OFFSET ? (0xb144 + (port * 0x30)) : (0x1454 + (port * 0x18))) +#define TSTORM_INDIRECTION_TABLE_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x12c8 + (function * 0x80)) : (0x22c8 + \ + (function * 0x80))) +#define TSTORM_INDIRECTION_TABLE_SIZE 0x80 +#define TSTORM_MAC_FILTER_CONFIG_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x3008 + (function * 0x38)) : (0x1508 + \ + (function * 0x38))) +#define TSTORM_PER_COUNTER_ID_STATS_OFFSET(port, stats_counter_id) \ + (IS_E1H_OFFSET ? (0x2010 + (port * 0x5b0) + (stats_counter_id * \ + 0x50)) : (0x4000 + (port * 0x5b0) + (stats_counter_id * 0x50))) +#define TSTORM_STATS_FLAGS_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x2c00 + (function * 0x8)) : (0x4b88 + \ + (function * 0x8))) +#define TSTORM_TPA_EXIST_OFFSET (IS_E1H_OFFSET ? 0x3680 : 0x1c20) +#define USTORM_AGG_DATA_OFFSET (IS_E1H_OFFSET ? 0xa040 : 0x2c10) +#define USTORM_AGG_DATA_SIZE (IS_E1H_OFFSET ? 0x2440 : 0x1200) +#define USTORM_ASSERT_LIST_INDEX_OFFSET \ + (IS_E1H_OFFSET ? 0x8960 : 0x1000) +#define USTORM_ASSERT_LIST_OFFSET(idx) \ + (IS_E1H_OFFSET ? (0x8980 + (idx * 0x10)) : (0x1020 + (idx * 0x10))) +#define USTORM_CQE_PAGE_BASE_OFFSET(port, clientId) \ + (IS_E1H_OFFSET ? (0x8018 + (port * 0x4b0) + (clientId * 0x30)) : \ + (0x5330 + (port * 0x260) + (clientId * 0x20))) +#define USTORM_DEF_SB_HC_DISABLE_OFFSET(function, index) \ + (IS_E1H_OFFSET ? (0x9522 + ((function>>1) * 0x40) + \ + ((function&1) * 0x100) + (index * 0x4)) : (0x1922 + (function * \ + 0x40) + (index * 0x4))) +#define USTORM_DEF_SB_HOST_SB_ADDR_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x9500 + ((function>>1) * 0x40) + \ + ((function&1) * 0x100)) : (0x1900 + (function * 0x40))) +#define USTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x9508 + ((function>>1) * 0x40) + \ + ((function&1) * 0x100)) : (0x1908 + (function * 0x40))) +#define USTORM_ETH_STATS_QUERY_ADDR_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x26f0 + (function * 0x8)) : (0x1fd8 + \ + (function * 0x8))) +#define USTORM_FUNCTION_MODE_OFFSET \ + (IS_E1H_OFFSET ? 0x2448 : 0xffffffff) +#define USTORM_HC_BTR_OFFSET(port) \ + (IS_E1H_OFFSET ? (0x9704 + (port * 0xf0)) : (0x1984 + (port * 0xc0))) +#define USTORM_MAX_AGG_SIZE_OFFSET(port, clientId) \ + (IS_E1H_OFFSET ? (0x8010 + (port * 0x4b0) + (clientId * 0x30)) : \ + (0x5328 + (port * 0x260) + (clientId * 0x20))) +#define USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x2408 + (function * 0x8)) : (0x5308 + \ + (function * 0x8))) +#define USTORM_PER_COUNTER_ID_STATS_OFFSET(port, stats_counter_id) \ + (IS_E1H_OFFSET ? (0x2450 + (port * 0x120) + (stats_counter_id * \ + 0x10)) : (0x1d80 + (port * 0x120) + (stats_counter_id * 0x10))) +#define USTORM_RX_PRODS_OFFSET(port, client_id) \ + (IS_E1H_OFFSET ? (0x8000 + (port * 0x4b0) + (client_id * 0x30)) \ + : (0x5318 + (port * 0x260) + (client_id * 0x20))) +#define USTORM_SB_HC_DISABLE_OFFSET(port, cpu_id, index) \ + (IS_E1H_OFFSET ? (0x901a + (port * 0x280) + (cpu_id * 0x28) + \ + (index * 0x4)) : (0x141a + (port * 0x280) + (cpu_id * 0x28) + \ + (index * 0x4))) +#define USTORM_SB_HC_TIMEOUT_OFFSET(port, cpu_id, index) \ + (IS_E1H_OFFSET ? (0x9018 + (port * 0x280) + (cpu_id * 0x28) + \ + (index * 0x4)) : (0x1418 + (port * 0x280) + (cpu_id * 0x28) + \ + (index * 0x4))) +#define USTORM_SB_HOST_SB_ADDR_OFFSET(port, cpu_id) \ + (IS_E1H_OFFSET ? (0x9000 + (port * 0x280) + (cpu_id * 0x28)) : \ + (0x1400 + (port * 0x280) + (cpu_id * 0x28))) +#define USTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, cpu_id) \ + (IS_E1H_OFFSET ? (0x9008 + (port * 0x280) + (cpu_id * 0x28)) : \ + (0x1408 + (port * 0x280) + (cpu_id * 0x28))) +#define USTORM_STATS_FLAGS_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x2690 + (function * 0x8)) : (0x1fc0 + \ + (function * 0x8))) +#define XSTORM_ASSERT_LIST_INDEX_OFFSET \ + (IS_E1H_OFFSET ? 0x9000 : 0x1000) +#define XSTORM_ASSERT_LIST_OFFSET(idx) \ + (IS_E1H_OFFSET ? (0x9020 + (idx * 0x10)) : (0x1020 + (idx * 0x10))) +#define XSTORM_CMNG_PER_PORT_VARS_OFFSET(port) \ + (IS_E1H_OFFSET ? (0x24a8 + (port * 0x50)) : (0x3ba0 + (port * 0x50))) +#define XSTORM_DEF_SB_HC_DISABLE_OFFSET(function, index) \ + (IS_E1H_OFFSET ? (0xa01a + ((function>>1) * 0x28) + \ + ((function&1) * 0xa0) + (index * 0x4)) : (0x141a + (function * \ + 0x28) + (index * 0x4))) +#define XSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(function) \ + (IS_E1H_OFFSET ? (0xa000 + ((function>>1) * 0x28) + \ + ((function&1) * 0xa0)) : (0x1400 + (function * 0x28))) +#define XSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \ + (IS_E1H_OFFSET ? (0xa008 + ((function>>1) * 0x28) + \ + ((function&1) * 0xa0)) : (0x1408 + (function * 0x28))) +#define XSTORM_E1HOV_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x2ad8 + (function * 0x2)) : 0xffffffff) +#define XSTORM_ETH_STATS_QUERY_ADDR_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x2418 + (function * 0x8)) : (0x3b70 + \ + (function * 0x8))) +#define XSTORM_FAIRNESS_PER_VN_VARS_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x2588 + (function * 0x70)) : (0x3c80 + \ + (function * 0x70))) +#define XSTORM_FUNCTION_MODE_OFFSET \ + (IS_E1H_OFFSET ? 0x2ae8 : 0xffffffff) +#define XSTORM_HC_BTR_OFFSET(port) \ + (IS_E1H_OFFSET ? (0xa144 + (port * 0x30)) : (0x1454 + (port * 0x18))) +#define XSTORM_PER_COUNTER_ID_STATS_OFFSET(port, stats_counter_id) \ + (IS_E1H_OFFSET ? (0xc000 + (port * 0x3f0) + (stats_counter_id * \ + 0x38)) : (0x3378 + (port * 0x3f0) + (stats_counter_id * 0x38))) +#define XSTORM_RATE_SHAPING_PER_VN_VARS_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x2548 + (function * 0x70)) : (0x3c40 + \ + (function * 0x70))) +#define XSTORM_SPQ_PAGE_BASE_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x2000 + (function * 0x10)) : (0x3328 + \ + (function * 0x10))) +#define XSTORM_SPQ_PROD_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x2008 + (function * 0x10)) : (0x3330 + \ + (function * 0x10))) +#define XSTORM_STATS_FLAGS_OFFSET(function) \ + (IS_E1H_OFFSET ? (0x23d8 + (function * 0x8)) : (0x3b60 + \ + (function * 0x8))) #define COMMON_ASM_INVALID_ASSERT_OPCODE 0x0 /** -* This file defines HSI constatnts for the ETH flow +* This file defines HSI constants for the ETH flow */ +#ifdef _EVEREST_MICROCODE +#include "microcode_constants.h" +#include "eth_rx_bd.h" +#include "eth_tx_bd.h" +#include "eth_rx_cqe.h" +#include "eth_rx_sge.h" +#include "eth_rx_cqe_next_page.h" +#endif -/* hash types */ -#define DEFAULT_HASH_TYPE 0 -#define IPV4_HASH_TYPE 1 -#define TCP_IPV4_HASH_TYPE 2 -#define IPV6_HASH_TYPE 3 -#define TCP_IPV6_HASH_TYPE 4 +/* RSS hash types */ +#define DEFAULT_HASH_TYPE 0 +#define IPV4_HASH_TYPE 1 +#define TCP_IPV4_HASH_TYPE 2 +#define IPV6_HASH_TYPE 3 +#define TCP_IPV6_HASH_TYPE 4 +#define VLAN_PRI_HASH_TYPE 5 +#define E1HOV_PRI_HASH_TYPE 6 +#define DSCP_HASH_TYPE 7 + + +/* Ethernet Ring parameters */ +#define X_ETH_LOCAL_RING_SIZE 13 +#define FIRST_BD_IN_PKT 0 +#define PARSE_BD_INDEX 1 +#define NUM_OF_ETH_BDS_IN_PAGE ((PAGE_SIZE)/(STRUCT_SIZE(eth_tx_bd)/8)) + + +/* Rx ring params */ +#define U_ETH_LOCAL_BD_RING_SIZE 16 +#define U_ETH_LOCAL_SGE_RING_SIZE 12 +#define U_ETH_SGL_SIZE 8 + + +#define U_ETH_BDS_PER_PAGE_MASK \ + ((PAGE_SIZE/(STRUCT_SIZE(eth_rx_bd)/8))-1) +#define U_ETH_CQE_PER_PAGE_MASK \ + ((PAGE_SIZE/(STRUCT_SIZE(eth_rx_cqe)/8))-1) +#define U_ETH_SGES_PER_PAGE_MASK \ + ((PAGE_SIZE/(STRUCT_SIZE(eth_rx_sge)/8))-1) + +#define U_ETH_SGES_PER_PAGE_INVERSE_MASK \ + (0xFFFF - ((PAGE_SIZE/((STRUCT_SIZE(eth_rx_sge))/8))-1)) + + +#define TU_ETH_CQES_PER_PAGE \ + (PAGE_SIZE/(STRUCT_SIZE(eth_rx_cqe_next_page)/8)) +#define U_ETH_BDS_PER_PAGE (PAGE_SIZE/(STRUCT_SIZE(eth_rx_bd)/8)) +#define U_ETH_SGES_PER_PAGE (PAGE_SIZE/(STRUCT_SIZE(eth_rx_sge)/8)) + +#define U_ETH_UNDEFINED_Q 0xFF /* values of command IDs in the ramrod message */ -#define RAMROD_CMD_ID_ETH_PORT_SETUP (80) -#define RAMROD_CMD_ID_ETH_CLIENT_SETUP (85) -#define RAMROD_CMD_ID_ETH_STAT_QUERY (90) -#define RAMROD_CMD_ID_ETH_UPDATE (100) -#define RAMROD_CMD_ID_ETH_HALT (105) -#define RAMROD_CMD_ID_ETH_SET_MAC (110) -#define RAMROD_CMD_ID_ETH_CFC_DEL (115) -#define RAMROD_CMD_ID_ETH_PORT_DEL (120) -#define RAMROD_CMD_ID_ETH_FORWARD_SETUP (125) +#define RAMROD_CMD_ID_ETH_PORT_SETUP 80 +#define RAMROD_CMD_ID_ETH_CLIENT_SETUP 85 +#define RAMROD_CMD_ID_ETH_STAT_QUERY 90 +#define RAMROD_CMD_ID_ETH_UPDATE 100 +#define RAMROD_CMD_ID_ETH_HALT 105 +#define RAMROD_CMD_ID_ETH_SET_MAC 110 +#define RAMROD_CMD_ID_ETH_CFC_DEL 115 +#define RAMROD_CMD_ID_ETH_PORT_DEL 120 +#define RAMROD_CMD_ID_ETH_FORWARD_SETUP 125 /* command values for set mac command */ -#define T_ETH_MAC_COMMAND_SET 0 -#define T_ETH_MAC_COMMAND_INVALIDATE 1 +#define T_ETH_MAC_COMMAND_SET 0 +#define T_ETH_MAC_COMMAND_INVALIDATE 1 -#define T_ETH_INDIRECTION_TABLE_SIZE 128 +#define T_ETH_INDIRECTION_TABLE_SIZE 128 + +/*The CRC32 seed, that is used for the hash(reduction) multicast address */ +#define T_ETH_CRC32_HASH_SEED 0x00000000 /* Maximal L2 clients supported */ -#define ETH_MAX_RX_CLIENTS (18) +#define ETH_MAX_RX_CLIENTS_E1 19 +#define ETH_MAX_RX_CLIENTS_E1H 25 + +/* Maximal aggregation queues supported */ +#define ETH_MAX_AGGREGATION_QUEUES_E1 32 +#define ETH_MAX_AGGREGATION_QUEUES_E1H 64 + +/* ETH RSS modes */ +#define ETH_RSS_MODE_DISABLED 0 +#define ETH_RSS_MODE_REGULAR 1 +#define ETH_RSS_MODE_VLAN_PRI 2 +#define ETH_RSS_MODE_E1HOV_PRI 3 +#define ETH_RSS_MODE_IP_DSCP 4 + /** -* This file defines HSI constatnts common to all microcode flows +* This file defines HSI constants common to all microcode flows */ /* Connection types */ -#define ETH_CONNECTION_TYPE 0 +#define ETH_CONNECTION_TYPE 0 +#define TOE_CONNECTION_TYPE 1 +#define RDMA_CONNECTION_TYPE 2 +#define ISCSI_CONNECTION_TYPE 3 +#define FCOE_CONNECTION_TYPE 4 +#define RESERVED_CONNECTION_TYPE_0 5 +#define RESERVED_CONNECTION_TYPE_1 6 +#define RESERVED_CONNECTION_TYPE_2 7 + -#define PROTOCOL_STATE_BIT_OFFSET 6 +#define PROTOCOL_STATE_BIT_OFFSET 6 -#define ETH_STATE (ETH_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET) +#define ETH_STATE (ETH_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET) +#define TOE_STATE (TOE_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET) +#define RDMA_STATE (RDMA_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET) +#define ISCSI_STATE \ + (ISCSI_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET) +#define FCOE_STATE (FCOE_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET) /* microcode fixed page page size 4K (chains and ring segments) */ -#define MC_PAGE_SIZE (4096) +#define MC_PAGE_SIZE (4096) -/* Host coalescing constants */ -/* IGU constants */ -#define IGU_PORT_BASE 0x0400 - -#define IGU_ADDR_MSIX 0x0000 -#define IGU_ADDR_INT_ACK 0x0200 -#define IGU_ADDR_PROD_UPD 0x0201 -#define IGU_ADDR_ATTN_BITS_UPD 0x0202 -#define IGU_ADDR_ATTN_BITS_SET 0x0203 -#define IGU_ADDR_ATTN_BITS_CLR 0x0204 -#define IGU_ADDR_COALESCE_NOW 0x0205 -#define IGU_ADDR_SIMD_MASK 0x0206 -#define IGU_ADDR_SIMD_NOMASK 0x0207 -#define IGU_ADDR_MSI_CTL 0x0210 -#define IGU_ADDR_MSI_ADDR_LO 0x0211 -#define IGU_ADDR_MSI_ADDR_HI 0x0212 -#define IGU_ADDR_MSI_DATA 0x0213 - -#define IGU_INT_ENABLE 0 -#define IGU_INT_DISABLE 1 -#define IGU_INT_NOP 2 -#define IGU_INT_NOP2 3 +/* Host coalescing constants */ /* index numbers */ -#define HC_USTORM_DEF_SB_NUM_INDICES 4 -#define HC_CSTORM_DEF_SB_NUM_INDICES 8 -#define HC_XSTORM_DEF_SB_NUM_INDICES 4 -#define HC_TSTORM_DEF_SB_NUM_INDICES 4 -#define HC_USTORM_SB_NUM_INDICES 4 -#define HC_CSTORM_SB_NUM_INDICES 4 - -/* index values - which counterto update */ - -#define HC_INDEX_U_ETH_RX_CQ_CONS 1 - -#define HC_INDEX_C_ETH_TX_CQ_CONS 1 - -#define HC_INDEX_DEF_X_SPQ_CONS 0 - -#define HC_INDEX_DEF_C_ETH_FW_TX_CQ_CONS 2 -#define HC_INDEX_DEF_C_ETH_SLOW_PATH 3 +#define HC_USTORM_DEF_SB_NUM_INDICES 8 +#define HC_CSTORM_DEF_SB_NUM_INDICES 8 +#define HC_XSTORM_DEF_SB_NUM_INDICES 4 +#define HC_TSTORM_DEF_SB_NUM_INDICES 4 +#define HC_USTORM_SB_NUM_INDICES 4 +#define HC_CSTORM_SB_NUM_INDICES 4 + +/* index values - which counter to update */ + +#define HC_INDEX_U_TOE_RX_CQ_CONS 0 +#define HC_INDEX_U_ETH_RX_CQ_CONS 1 +#define HC_INDEX_U_ETH_RX_BD_CONS 2 +#define HC_INDEX_U_FCOE_EQ_CONS 3 + +#define HC_INDEX_C_TOE_TX_CQ_CONS 0 +#define HC_INDEX_C_ETH_TX_CQ_CONS 1 +#define HC_INDEX_C_ISCSI_EQ_CONS 2 + +#define HC_INDEX_DEF_X_SPQ_CONS 0 + +#define HC_INDEX_DEF_C_RDMA_EQ_CONS 0 +#define HC_INDEX_DEF_C_RDMA_NAL_PROD 1 +#define HC_INDEX_DEF_C_ETH_FW_TX_CQ_CONS 2 +#define HC_INDEX_DEF_C_ETH_SLOW_PATH 3 +#define HC_INDEX_DEF_C_ETH_RDMA_CQ_CONS 4 +#define HC_INDEX_DEF_C_ETH_ISCSI_CQ_CONS 5 +#define HC_INDEX_DEF_C_ETH_FCOE_CQ_CONS 6 + +#define HC_INDEX_DEF_U_ETH_RDMA_RX_CQ_CONS 0 +#define HC_INDEX_DEF_U_ETH_ISCSI_RX_CQ_CONS 1 +#define HC_INDEX_DEF_U_ETH_RDMA_RX_BD_CONS 2 +#define HC_INDEX_DEF_U_ETH_ISCSI_RX_BD_CONS 3 +#define HC_INDEX_DEF_U_ETH_FCOE_RX_CQ_CONS 4 +#define HC_INDEX_DEF_U_ETH_FCOE_RX_BD_CONS 5 /* used by the driver to get the SB offset */ -#define USTORM_ID 0 -#define CSTORM_ID 1 -#define XSTORM_ID 2 -#define TSTORM_ID 3 -#define ATTENTION_ID 4 +#define USTORM_ID 0 +#define CSTORM_ID 1 +#define XSTORM_ID 2 +#define TSTORM_ID 3 +#define ATTENTION_ID 4 /* max number of slow path commands per port */ -#define MAX_RAMRODS_PER_PORT (8) +#define MAX_RAMRODS_PER_PORT (8) /* values for RX ETH CQE type field */ -#define RX_ETH_CQE_TYPE_ETH_FASTPATH (0) -#define RX_ETH_CQE_TYPE_ETH_RAMROD (1) - -/* MAC address list size */ -#define T_MAC_ADDRESS_LIST_SIZE (96) - +#define RX_ETH_CQE_TYPE_ETH_FASTPATH (0) +#define RX_ETH_CQE_TYPE_ETH_RAMROD (1) + + +/**** DEFINES FOR TIMERS/CLOCKS RESOLUTIONS ****/ +#define EMULATION_FREQUENCY_FACTOR (1600) +#define FPGA_FREQUENCY_FACTOR (100) + +#define TIMERS_TICK_SIZE_CHIP (1e-3) +#define TIMERS_TICK_SIZE_EMUL \ + ((TIMERS_TICK_SIZE_CHIP)/((EMULATION_FREQUENCY_FACTOR))) +#define TIMERS_TICK_SIZE_FPGA \ + ((TIMERS_TICK_SIZE_CHIP)/((FPGA_FREQUENCY_FACTOR))) + +#define TSEMI_CLK1_RESUL_CHIP (1e-3) +#define TSEMI_CLK1_RESUL_EMUL \ + ((TSEMI_CLK1_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR)) +#define TSEMI_CLK1_RESUL_FPGA \ + ((TSEMI_CLK1_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR)) + +#define USEMI_CLK1_RESUL_CHIP \ + (TIMERS_TICK_SIZE_CHIP) +#define USEMI_CLK1_RESUL_EMUL \ + (TIMERS_TICK_SIZE_EMUL) +#define USEMI_CLK1_RESUL_FPGA \ + (TIMERS_TICK_SIZE_FPGA) + +#define XSEMI_CLK1_RESUL_CHIP (1e-3) +#define XSEMI_CLK1_RESUL_EMUL \ + ((XSEMI_CLK1_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR)) +#define XSEMI_CLK1_RESUL_FPGA \ + ((XSEMI_CLK1_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR)) + +#define XSEMI_CLK2_RESUL_CHIP (1e-6) +#define XSEMI_CLK2_RESUL_EMUL \ + ((XSEMI_CLK2_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR)) +#define XSEMI_CLK2_RESUL_FPGA \ + ((XSEMI_CLK2_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR)) + +#define SDM_TIMER_TICK_RESUL_CHIP (4*(1e-6)) +#define SDM_TIMER_TICK_RESUL_EMUL \ + ((SDM_TIMER_TICK_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR)) +#define SDM_TIMER_TICK_RESUL_FPGA \ + ((SDM_TIMER_TICK_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR)) + + +/**** END DEFINES FOR TIMERS/CLOCKS RESOLUTIONS ****/ #define XSTORM_IP_ID_ROLL_HALF 0x8000 #define XSTORM_IP_ID_ROLL_ALL 0 -#define FW_LOG_LIST_SIZE (50) +#define FW_LOG_LIST_SIZE (50) + +#define NUM_OF_PROTOCOLS 4 +#define MAX_COS_NUMBER 16 +#define MAX_T_STAT_COUNTER_ID 18 +#define MAX_X_STAT_COUNTER_ID 18 +#define MAX_U_STAT_COUNTER_ID 18 + -#define NUM_OF_PROTOCOLS 4 -#define MAX_COS_NUMBER 16 -#define MAX_T_STAT_COUNTER_ID 18 +#define UNKNOWN_ADDRESS 0 +#define UNICAST_ADDRESS 1 +#define MULTICAST_ADDRESS 2 +#define BROADCAST_ADDRESS 3 -#define T_FAIR 1 -#define FAIR_MEM 2 -#define RS_PERIODIC_TIMEOUT_IN_SDM_TICS 25 +#define SINGLE_FUNCTION 0 +#define MULTI_FUNCTION 1 -#define UNKNOWN_ADDRESS 0 -#define UNICAST_ADDRESS 1 -#define MULTICAST_ADDRESS 2 -#define BROADCAST_ADDRESS 3 +#define IP_V4 0 +#define IP_V6 1 diff --git a/drivers/net/bnx2x_hsi.h b/drivers/net/bnx2x_hsi.h index b21075cc..48059d86 100644 --- a/drivers/net/bnx2x_hsi.h +++ b/drivers/net/bnx2x_hsi.h @@ -91,6 +91,13 @@ struct shared_hw_cfg { /* NVRAM Offset */ #define SHARED_HW_CFG_HIDE_PORT1 0x00002000 +#define SHARED_HW_CFG_WOL_CAPABLE_DISABLED 0x00000000 +#define SHARED_HW_CFG_WOL_CAPABLE_ENABLED 0x00004000 + + /* Output low when PERST is asserted */ +#define SHARED_HW_CFG_SPIO4_FOLLOW_PERST_DISABLED 0x00000000 +#define SHARED_HW_CFG_SPIO4_FOLLOW_PERST_ENABLED 0x00008000 + u32 power_dissipated; /* 0x11c */ #define SHARED_HW_CFG_POWER_DIS_CMN_MASK 0xff000000 #define SHARED_HW_CFG_POWER_DIS_CMN_SHIFT 24 @@ -119,29 +126,15 @@ struct shared_hw_cfg { /* NVRAM Offset */ #define SHARED_HW_CFG_UMP_NC_SI_EXT_PHY_TYPE_BCM5221 0x00010000 u32 board; /* 0x124 */ -#define SHARED_HW_CFG_BOARD_TYPE_MASK 0x0000ffff -#define SHARED_HW_CFG_BOARD_TYPE_SHIFT 0 -#define SHARED_HW_CFG_BOARD_TYPE_NONE 0x00000000 -#define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1000 0x00000001 -#define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1001 0x00000002 -#define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1002G 0x00000003 -#define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1004G 0x00000004 -#define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1007G 0x00000005 -#define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1015G 0x00000006 -#define SHARED_HW_CFG_BOARD_TYPE_BCM957710A1020G 0x00000007 -#define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1003G 0x00000008 -#define SHARED_HW_CFG_BOARD_TYPE_BCM957710A1022G 0x00000009 -#define SHARED_HW_CFG_BOARD_TYPE_BCM957710A1021G 0x0000000a - -#define SHARED_HW_CFG_BOARD_VER_MASK 0xffff0000 -#define SHARED_HW_CFG_BOARD_VER_SHIFT 16 -#define SHARED_HW_CFG_BOARD_MAJOR_VER_MASK 0xf0000000 -#define SHARED_HW_CFG_BOARD_MAJOR_VER_SHIFT 28 -#define SHARED_HW_CFG_BOARD_MINOR_VER_MASK 0x0f000000 -#define SHARED_HW_CFG_BOARD_MINOR_VER_SHIFT 24 -#define SHARED_HW_CFG_BOARD_REV_MASK 0x00ff0000 +#define SHARED_HW_CFG_BOARD_REV_MASK 0x00FF0000 #define SHARED_HW_CFG_BOARD_REV_SHIFT 16 +#define SHARED_HW_CFG_BOARD_MAJOR_VER_MASK 0x0F000000 +#define SHARED_HW_CFG_BOARD_MAJOR_VER_SHIFT 24 + +#define SHARED_HW_CFG_BOARD_MINOR_VER_MASK 0xF0000000 +#define SHARED_HW_CFG_BOARD_MINOR_VER_SHIFT 28 + u32 reserved; /* 0x128 */ }; @@ -192,36 +185,21 @@ struct port_hw_cfg { /* port 0: 0x12c port 1: 0x2bc */ u32 rdma_mac_lower; u32 serdes_config; - /* for external PHY, or forced mode or during AN */ -#define PORT_HW_CFG_SERDES_TX_DRV_PRE_EMPHASIS_MASK 0xffff0000 -#define PORT_HW_CFG_SERDES_TX_DRV_PRE_EMPHASIS_SHIFT 16 +#define PORT_HW_CFG_SERDES_TX_DRV_PRE_EMPHASIS_MASK 0x0000FFFF +#define PORT_HW_CFG_SERDES_TX_DRV_PRE_EMPHASIS_SHIFT 0 -#define PORT_HW_CFG_SERDES_RX_DRV_EQUALIZER_MASK 0x0000ffff -#define PORT_HW_CFG_SERDES_RX_DRV_EQUALIZER_SHIFT 0 +#define PORT_HW_CFG_SERDES_RX_DRV_EQUALIZER_MASK 0xFFFF0000 +#define PORT_HW_CFG_SERDES_RX_DRV_EQUALIZER_SHIFT 16 - u16 serdes_tx_driver_pre_emphasis[16]; - u16 serdes_rx_driver_equalizer[16]; - u32 xgxs_config_lane0; - u32 xgxs_config_lane1; - u32 xgxs_config_lane2; - u32 xgxs_config_lane3; - /* for external PHY, or forced mode or during AN */ -#define PORT_HW_CFG_XGXS_TX_DRV_PRE_EMPHASIS_MASK 0xffff0000 -#define PORT_HW_CFG_XGXS_TX_DRV_PRE_EMPHASIS_SHIFT 16 + u32 Reserved0[16]; /* 0x158 */ -#define PORT_HW_CFG_XGXS_RX_DRV_EQUALIZER_MASK 0x0000ffff -#define PORT_HW_CFG_XGXS_RX_DRV_EQUALIZER_SHIFT 0 + /* for external PHY, or forced mode or during AN */ + u16 xgxs_config_rx[4]; /* 0x198 */ - u16 xgxs_tx_driver_pre_emphasis_lane0[16]; - u16 xgxs_tx_driver_pre_emphasis_lane1[16]; - u16 xgxs_tx_driver_pre_emphasis_lane2[16]; - u16 xgxs_tx_driver_pre_emphasis_lane3[16]; + u16 xgxs_config_tx[4]; /* 0x1A0 */ - u16 xgxs_rx_driver_equalizer_lane0[16]; - u16 xgxs_rx_driver_equalizer_lane1[16]; - u16 xgxs_rx_driver_equalizer_lane2[16]; - u16 xgxs_rx_driver_equalizer_lane3[16]; + u32 Reserved1[64]; /* 0x1A8 */ u32 lane_config; #define PORT_HW_CFG_LANE_SWAP_CFG_MASK 0x0000ffff @@ -259,7 +237,7 @@ struct port_hw_cfg { /* port 0: 0x12c port 1: 0x2bc */ #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073 0x00000300 #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705 0x00000400 #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706 0x00000500 -#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8276 0x00000600 +#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726 0x00000600 #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481 0x00000700 #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101 0x00000800 #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE 0x0000fd00 @@ -301,8 +279,10 @@ struct port_hw_cfg { /* port 0: 0x12c port 1: 0x2bc */ #define PORT_HW_CFG_SPEED_CAPABILITY_D3_16G 0x00000800 #define PORT_HW_CFG_SPEED_CAPABILITY_D3_RESERVED 0x0000f000 - u32 reserved[2]; + /* A place to hold the original MAC address as a backup */ + u32 backup_mac_upper; /* 0x2B4 */ + u32 backup_mac_lower; /* 0x2B8 */ }; @@ -314,6 +294,14 @@ struct shared_feat_cfg { /* NVRAM Offset */ u32 config; /* 0x450 */ #define SHARED_FEATURE_BMC_ECHO_MODE_EN 0x00000001 + /* Use the values from options 47 and 48 instead of the HW default + values */ +#define SHARED_FEAT_CFG_OVERRIDE_PREEMPHASIS_CFG_DISABLED 0x00000000 +#define SHARED_FEAT_CFG_OVERRIDE_PREEMPHASIS_CFG_ENABLED 0x00000002 + + /* Override the OTP back to single function mode */ +#define SHARED_FEATURE_MF_MODE_DISABLED 0x00000100 + }; @@ -378,12 +366,13 @@ struct port_feat_cfg { /* port 0: 0x454 port 1: 0x4c8 */ #define PORT_FEATURE_WOL_ACPI_UPON_MGMT 0x00000010 u32 mba_config; -#define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_MASK 0x00000003 +#define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_MASK 0x00000007 #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_SHIFT 0 #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_PXE 0x00000000 #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_RPL 0x00000001 #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_BOOTP 0x00000002 #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_ISCSIB 0x00000003 +#define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_NONE 0x00000007 #define PORT_FEATURE_MBA_RES_PAUSE_CAP 0x00000100 #define PORT_FEATURE_MBA_RES_ASYM_PAUSE_CAP 0x00000200 #define PORT_FEATURE_MBA_SETUP_PROMPT_ENABLE 0x00000400 @@ -502,28 +491,41 @@ struct port_feat_cfg { /* port 0: 0x454 port 1: 0x4c8 */ }; -/***************************************************************************** - * Device Information * - *****************************************************************************/ -struct dev_info { /* size */ +/**************************************************************************** + * Device Information * + ****************************************************************************/ +struct shm_dev_info { /* size */ - u32 bc_rev; /* 8 bits each: major, minor, build */ /* 4 */ + u32 bc_rev; /* 8 bits each: major, minor, build */ /* 4 */ - struct shared_hw_cfg shared_hw_config; /* 40 */ + struct shared_hw_cfg shared_hw_config; /* 40 */ - struct port_hw_cfg port_hw_config[PORT_MAX]; /* 400*2=800 */ + struct port_hw_cfg port_hw_config[PORT_MAX]; /* 400*2=800 */ - struct shared_feat_cfg shared_feature_config; /* 4 */ + struct shared_feat_cfg shared_feature_config; /* 4 */ - struct port_feat_cfg port_feature_config[PORT_MAX]; /* 116*2=232 */ + struct port_feat_cfg port_feature_config[PORT_MAX];/* 116*2=232 */ }; #define FUNC_0 0 #define FUNC_1 1 +#define FUNC_2 2 +#define FUNC_3 3 +#define FUNC_4 4 +#define FUNC_5 5 +#define FUNC_6 6 +#define FUNC_7 7 #define E1_FUNC_MAX 2 -#define FUNC_MAX E1_FUNC_MAX +#define E1H_FUNC_MAX 8 + +#define VN_0 0 +#define VN_1 1 +#define VN_2 2 +#define VN_3 3 +#define E1VN_MAX 1 +#define E1HVN_MAX 4 /* This value (in milliseconds) determines the frequency of the driver @@ -619,7 +621,11 @@ struct drv_port_mb { #define LINK_STATUS_LINK_PARTNER_15GXFD_CAPABLE 0x08000000 #define LINK_STATUS_LINK_PARTNER_16GXFD_CAPABLE 0x10000000 - u32 reserved[3]; + u32 port_stx; + + u32 stat_nig_timer; + + u32 reserved[1]; }; @@ -642,6 +648,11 @@ struct drv_func_mb { #define DRV_MSG_CODE_GET_MANUF_KEY 0x82000000 #define DRV_MSG_CODE_LOAD_L2B_PRAM 0x90000000 +#define BIOS_MSG_CODE_LIC_CHALLENGE 0xff010000 +#define BIOS_MSG_CODE_LIC_RESPONSE 0xff020000 +#define BIOS_MSG_CODE_VIRT_MAC_PRIM 0xff030000 +#define BIOS_MSG_CODE_VIRT_MAC_ISCSI 0xff040000 + #define DRV_MSG_SEQ_NUMBER_MASK 0x0000ffff u32 drv_mb_param; @@ -671,6 +682,11 @@ struct drv_func_mb { #define FW_MSG_CODE_L2B_PRAM_X_LOAD_FAILURE 0x90230000 #define FW_MSG_CODE_L2B_PRAM_U_LOAD_FAILURE 0x90240000 +#define FW_MSG_CODE_LIC_CHALLENGE 0xff010000 +#define FW_MSG_CODE_LIC_RESPONSE 0xff020000 +#define FW_MSG_CODE_VIRT_MAC_PRIM 0xff030000 +#define FW_MSG_CODE_VIRT_MAC_ISCSI 0xff040000 + #define FW_MSG_SEQ_NUMBER_MASK 0x0000ffff u32 fw_mb_param; @@ -696,7 +712,13 @@ struct drv_func_mb { u32 iscsi_boot_signature; u32 iscsi_boot_block_offset; - u32 reserved[3]; + u32 drv_status; +#define DRV_STATUS_PMF 0x00000001 + + u32 virt_mac_upper; +#define VIRT_MAC_SIGN_MASK 0xffff0000 +#define VIRT_MAC_SIGNATURE 0x564d0000 + u32 virt_mac_lower; }; @@ -712,6 +734,88 @@ struct mgmtfw_state { }; +/**************************************************************************** + * Multi-Function configuration * + ****************************************************************************/ +struct shared_mf_cfg { + + u32 clp_mb; +#define SHARED_MF_CLP_SET_DEFAULT 0x00000000 + /* set by CLP */ +#define SHARED_MF_CLP_EXIT 0x00000001 + /* set by MCP */ +#define SHARED_MF_CLP_EXIT_DONE 0x00010000 + +}; + +struct port_mf_cfg { + + u32 dynamic_cfg; /* device control channel */ +#define PORT_MF_CFG_E1HVN_TAG_MASK 0x0000ffff +#define PORT_MF_CFG_E1HVN_TAG_SHIFT 0 +#define PORT_MF_CFG_DYNAMIC_CFG_ENABLED 0x00010000 +#define PORT_MF_CFG_DYNAMIC_CFG_DEFAULT 0x00000000 + + u32 reserved[3]; + +}; + +struct func_mf_cfg { + + u32 config; + /* E/R/I/D */ + /* function 0 of each port cannot be hidden */ +#define FUNC_MF_CFG_FUNC_HIDE 0x00000001 + +#define FUNC_MF_CFG_PROTOCOL_MASK 0x00000007 +#define FUNC_MF_CFG_PROTOCOL_ETHERNET 0x00000002 +#define FUNC_MF_CFG_PROTOCOL_ETHERNET_WITH_RDMA 0x00000004 +#define FUNC_MF_CFG_PROTOCOL_ISCSI 0x00000006 +#define FUNC_MF_CFG_PROTOCOL_DEFAULT\ + FUNC_MF_CFG_PROTOCOL_ETHERNET_WITH_RDMA + +#define FUNC_MF_CFG_FUNC_DISABLED 0x00000008 + + /* PRI */ + /* 0 - low priority, 3 - high priority */ +#define FUNC_MF_CFG_TRANSMIT_PRIORITY_MASK 0x00000300 +#define FUNC_MF_CFG_TRANSMIT_PRIORITY_SHIFT 8 +#define FUNC_MF_CFG_TRANSMIT_PRIORITY_DEFAULT 0x00000000 + + /* MINBW, MAXBW */ + /* value range - 0..100, increments in 100Mbps */ +#define FUNC_MF_CFG_MIN_BW_MASK 0x00ff0000 +#define FUNC_MF_CFG_MIN_BW_SHIFT 16 +#define FUNC_MF_CFG_MIN_BW_DEFAULT 0x00000000 +#define FUNC_MF_CFG_MAX_BW_MASK 0xff000000 +#define FUNC_MF_CFG_MAX_BW_SHIFT 24 +#define FUNC_MF_CFG_MAX_BW_DEFAULT 0x64000000 + + u32 mac_upper; /* MAC */ +#define FUNC_MF_CFG_UPPERMAC_MASK 0x0000ffff +#define FUNC_MF_CFG_UPPERMAC_SHIFT 0 +#define FUNC_MF_CFG_UPPERMAC_DEFAULT FUNC_MF_CFG_UPPERMAC_MASK + u32 mac_lower; +#define FUNC_MF_CFG_LOWERMAC_DEFAULT 0xffffffff + + u32 e1hov_tag; /* VNI */ +#define FUNC_MF_CFG_E1HOV_TAG_MASK 0x0000ffff +#define FUNC_MF_CFG_E1HOV_TAG_SHIFT 0 +#define FUNC_MF_CFG_E1HOV_TAG_DEFAULT FUNC_MF_CFG_E1HOV_TAG_MASK + + u32 reserved[2]; + +}; + +struct mf_cfg { + + struct shared_mf_cfg shared_mf_config; + struct port_mf_cfg port_mf_config[PORT_MAX]; + struct func_mf_cfg func_mf_config[E1H_FUNC_MAX]; + +}; + + /**************************************************************************** * Shared Memory Region * ****************************************************************************/ @@ -738,23 +842,369 @@ struct shmem_region { /* SharedMem Offset (size) */ #define SHR_MEM_VALIDITY_ACTIVE_MFW_NONE 0x000001c0 #define SHR_MEM_VALIDITY_ACTIVE_MFW_MASK 0x000001c0 - struct dev_info dev_info; /* 0x8 (0x438) */ + struct shm_dev_info dev_info; /* 0x8 (0x438) */ +#ifdef _LICENSE_H + license_key_t drv_lic_key[PORT_MAX]; /* 0x440 (52*2=0x68) */ +#else /* BNX2X_UPSTREAM */ u8 reserved[52*PORT_MAX]; +#endif /* FW information (for internal FW use) */ u32 fw_info_fio_offset; /* 0x4a8 (0x4) */ struct mgmtfw_state mgmtfw_state; /* 0x4ac (0x1b8) */ struct drv_port_mb port_mb[PORT_MAX]; /* 0x664 (16*2=0x20) */ - struct drv_func_mb func_mb[FUNC_MAX]; /* 0x684 (44*2=0x58) */ +#if !defined(b710) /* BNX2X_UPSTREAM */ + struct drv_func_mb func_mb[E1H_FUNC_MAX]; +#else + struct drv_func_mb func_mb[E1_FUNC_MAX]; /* 0x684 (44*2=0x58) */ +#endif + +#if !defined(b710) /* BNX2X_UPSTREAM */ + struct mf_cfg mf_cfg; +#endif }; /* 0x6dc */ +struct emac_stats { + u32 rx_stat_ifhcinoctets; + u32 rx_stat_ifhcinbadoctets; + u32 rx_stat_etherstatsfragments; + u32 rx_stat_ifhcinucastpkts; + u32 rx_stat_ifhcinmulticastpkts; + u32 rx_stat_ifhcinbroadcastpkts; + u32 rx_stat_dot3statsfcserrors; + u32 rx_stat_dot3statsalignmenterrors; + u32 rx_stat_dot3statscarriersenseerrors; + u32 rx_stat_xonpauseframesreceived; + u32 rx_stat_xoffpauseframesreceived; + u32 rx_stat_maccontrolframesreceived; + u32 rx_stat_xoffstateentered; + u32 rx_stat_dot3statsframestoolong; + u32 rx_stat_etherstatsjabbers; + u32 rx_stat_etherstatsundersizepkts; + u32 rx_stat_etherstatspkts64octets; + u32 rx_stat_etherstatspkts65octetsto127octets; + u32 rx_stat_etherstatspkts128octetsto255octets; + u32 rx_stat_etherstatspkts256octetsto511octets; + u32 rx_stat_etherstatspkts512octetsto1023octets; + u32 rx_stat_etherstatspkts1024octetsto1522octets; + u32 rx_stat_etherstatspktsover1522octets; + + u32 rx_stat_falsecarriererrors; + + u32 tx_stat_ifhcoutoctets; + u32 tx_stat_ifhcoutbadoctets; + u32 tx_stat_etherstatscollisions; + u32 tx_stat_outxonsent; + u32 tx_stat_outxoffsent; + u32 tx_stat_flowcontroldone; + u32 tx_stat_dot3statssinglecollisionframes; + u32 tx_stat_dot3statsmultiplecollisionframes; + u32 tx_stat_dot3statsdeferredtransmissions; + u32 tx_stat_dot3statsexcessivecollisions; + u32 tx_stat_dot3statslatecollisions; + u32 tx_stat_ifhcoutucastpkts; + u32 tx_stat_ifhcoutmulticastpkts; + u32 tx_stat_ifhcoutbroadcastpkts; + u32 tx_stat_etherstatspkts64octets; + u32 tx_stat_etherstatspkts65octetsto127octets; + u32 tx_stat_etherstatspkts128octetsto255octets; + u32 tx_stat_etherstatspkts256octetsto511octets; + u32 tx_stat_etherstatspkts512octetsto1023octets; + u32 tx_stat_etherstatspkts1024octetsto1522octets; + u32 tx_stat_etherstatspktsover1522octets; + u32 tx_stat_dot3statsinternalmactransmiterrors; +}; + + +struct bmac_stats { + u32 tx_stat_gtpkt_lo; + u32 tx_stat_gtpkt_hi; + u32 tx_stat_gtxpf_lo; + u32 tx_stat_gtxpf_hi; + u32 tx_stat_gtfcs_lo; + u32 tx_stat_gtfcs_hi; + u32 tx_stat_gtmca_lo; + u32 tx_stat_gtmca_hi; + u32 tx_stat_gtbca_lo; + u32 tx_stat_gtbca_hi; + u32 tx_stat_gtfrg_lo; + u32 tx_stat_gtfrg_hi; + u32 tx_stat_gtovr_lo; + u32 tx_stat_gtovr_hi; + u32 tx_stat_gt64_lo; + u32 tx_stat_gt64_hi; + u32 tx_stat_gt127_lo; + u32 tx_stat_gt127_hi; + u32 tx_stat_gt255_lo; + u32 tx_stat_gt255_hi; + u32 tx_stat_gt511_lo; + u32 tx_stat_gt511_hi; + u32 tx_stat_gt1023_lo; + u32 tx_stat_gt1023_hi; + u32 tx_stat_gt1518_lo; + u32 tx_stat_gt1518_hi; + u32 tx_stat_gt2047_lo; + u32 tx_stat_gt2047_hi; + u32 tx_stat_gt4095_lo; + u32 tx_stat_gt4095_hi; + u32 tx_stat_gt9216_lo; + u32 tx_stat_gt9216_hi; + u32 tx_stat_gt16383_lo; + u32 tx_stat_gt16383_hi; + u32 tx_stat_gtmax_lo; + u32 tx_stat_gtmax_hi; + u32 tx_stat_gtufl_lo; + u32 tx_stat_gtufl_hi; + u32 tx_stat_gterr_lo; + u32 tx_stat_gterr_hi; + u32 tx_stat_gtbyt_lo; + u32 tx_stat_gtbyt_hi; + + u32 rx_stat_gr64_lo; + u32 rx_stat_gr64_hi; + u32 rx_stat_gr127_lo; + u32 rx_stat_gr127_hi; + u32 rx_stat_gr255_lo; + u32 rx_stat_gr255_hi; + u32 rx_stat_gr511_lo; + u32 rx_stat_gr511_hi; + u32 rx_stat_gr1023_lo; + u32 rx_stat_gr1023_hi; + u32 rx_stat_gr1518_lo; + u32 rx_stat_gr1518_hi; + u32 rx_stat_gr2047_lo; + u32 rx_stat_gr2047_hi; + u32 rx_stat_gr4095_lo; + u32 rx_stat_gr4095_hi; + u32 rx_stat_gr9216_lo; + u32 rx_stat_gr9216_hi; + u32 rx_stat_gr16383_lo; + u32 rx_stat_gr16383_hi; + u32 rx_stat_grmax_lo; + u32 rx_stat_grmax_hi; + u32 rx_stat_grpkt_lo; + u32 rx_stat_grpkt_hi; + u32 rx_stat_grfcs_lo; + u32 rx_stat_grfcs_hi; + u32 rx_stat_grmca_lo; + u32 rx_stat_grmca_hi; + u32 rx_stat_grbca_lo; + u32 rx_stat_grbca_hi; + u32 rx_stat_grxcf_lo; + u32 rx_stat_grxcf_hi; + u32 rx_stat_grxpf_lo; + u32 rx_stat_grxpf_hi; + u32 rx_stat_grxuo_lo; + u32 rx_stat_grxuo_hi; + u32 rx_stat_grjbr_lo; + u32 rx_stat_grjbr_hi; + u32 rx_stat_grovr_lo; + u32 rx_stat_grovr_hi; + u32 rx_stat_grflr_lo; + u32 rx_stat_grflr_hi; + u32 rx_stat_grmeg_lo; + u32 rx_stat_grmeg_hi; + u32 rx_stat_grmeb_lo; + u32 rx_stat_grmeb_hi; + u32 rx_stat_grbyt_lo; + u32 rx_stat_grbyt_hi; + u32 rx_stat_grund_lo; + u32 rx_stat_grund_hi; + u32 rx_stat_grfrg_lo; + u32 rx_stat_grfrg_hi; + u32 rx_stat_grerb_lo; + u32 rx_stat_grerb_hi; + u32 rx_stat_grfre_lo; + u32 rx_stat_grfre_hi; + u32 rx_stat_gripj_lo; + u32 rx_stat_gripj_hi; +}; + + +union mac_stats { + struct emac_stats emac_stats; + struct bmac_stats bmac_stats; +}; + + +struct mac_stx { + /* in_bad_octets */ + u32 rx_stat_ifhcinbadoctets_hi; + u32 rx_stat_ifhcinbadoctets_lo; + + /* out_bad_octets */ + u32 tx_stat_ifhcoutbadoctets_hi; + u32 tx_stat_ifhcoutbadoctets_lo; + + /* crc_receive_errors */ + u32 rx_stat_dot3statsfcserrors_hi; + u32 rx_stat_dot3statsfcserrors_lo; + /* alignment_errors */ + u32 rx_stat_dot3statsalignmenterrors_hi; + u32 rx_stat_dot3statsalignmenterrors_lo; + /* carrier_sense_errors */ + u32 rx_stat_dot3statscarriersenseerrors_hi; + u32 rx_stat_dot3statscarriersenseerrors_lo; + /* false_carrier_detections */ + u32 rx_stat_falsecarriererrors_hi; + u32 rx_stat_falsecarriererrors_lo; + + /* runt_packets_received */ + u32 rx_stat_etherstatsundersizepkts_hi; + u32 rx_stat_etherstatsundersizepkts_lo; + /* jabber_packets_received */ + u32 rx_stat_dot3statsframestoolong_hi; + u32 rx_stat_dot3statsframestoolong_lo; + + /* error_runt_packets_received */ + u32 rx_stat_etherstatsfragments_hi; + u32 rx_stat_etherstatsfragments_lo; + /* error_jabber_packets_received */ + u32 rx_stat_etherstatsjabbers_hi; + u32 rx_stat_etherstatsjabbers_lo; + + /* control_frames_received */ + u32 rx_stat_maccontrolframesreceived_hi; + u32 rx_stat_maccontrolframesreceived_lo; + u32 rx_stat_bmac_xpf_hi; + u32 rx_stat_bmac_xpf_lo; + u32 rx_stat_bmac_xcf_hi; + u32 rx_stat_bmac_xcf_lo; + + /* xoff_state_entered */ + u32 rx_stat_xoffstateentered_hi; + u32 rx_stat_xoffstateentered_lo; + /* pause_xon_frames_received */ + u32 rx_stat_xonpauseframesreceived_hi; + u32 rx_stat_xonpauseframesreceived_lo; + /* pause_xoff_frames_received */ + u32 rx_stat_xoffpauseframesreceived_hi; + u32 rx_stat_xoffpauseframesreceived_lo; + /* pause_xon_frames_transmitted */ + u32 tx_stat_outxonsent_hi; + u32 tx_stat_outxonsent_lo; + /* pause_xoff_frames_transmitted */ + u32 tx_stat_outxoffsent_hi; + u32 tx_stat_outxoffsent_lo; + /* flow_control_done */ + u32 tx_stat_flowcontroldone_hi; + u32 tx_stat_flowcontroldone_lo; + + /* ether_stats_collisions */ + u32 tx_stat_etherstatscollisions_hi; + u32 tx_stat_etherstatscollisions_lo; + /* single_collision_transmit_frames */ + u32 tx_stat_dot3statssinglecollisionframes_hi; + u32 tx_stat_dot3statssinglecollisionframes_lo; + /* multiple_collision_transmit_frames */ + u32 tx_stat_dot3statsmultiplecollisionframes_hi; + u32 tx_stat_dot3statsmultiplecollisionframes_lo; + /* deferred_transmissions */ + u32 tx_stat_dot3statsdeferredtransmissions_hi; + u32 tx_stat_dot3statsdeferredtransmissions_lo; + /* excessive_collision_frames */ + u32 tx_stat_dot3statsexcessivecollisions_hi; + u32 tx_stat_dot3statsexcessivecollisions_lo; + /* late_collision_frames */ + u32 tx_stat_dot3statslatecollisions_hi; + u32 tx_stat_dot3statslatecollisions_lo; + + /* frames_transmitted_64_bytes */ + u32 tx_stat_etherstatspkts64octets_hi; + u32 tx_stat_etherstatspkts64octets_lo; + /* frames_transmitted_65_127_bytes */ + u32 tx_stat_etherstatspkts65octetsto127octets_hi; + u32 tx_stat_etherstatspkts65octetsto127octets_lo; + /* frames_transmitted_128_255_bytes */ + u32 tx_stat_etherstatspkts128octetsto255octets_hi; + u32 tx_stat_etherstatspkts128octetsto255octets_lo; + /* frames_transmitted_256_511_bytes */ + u32 tx_stat_etherstatspkts256octetsto511octets_hi; + u32 tx_stat_etherstatspkts256octetsto511octets_lo; + /* frames_transmitted_512_1023_bytes */ + u32 tx_stat_etherstatspkts512octetsto1023octets_hi; + u32 tx_stat_etherstatspkts512octetsto1023octets_lo; + /* frames_transmitted_1024_1522_bytes */ + u32 tx_stat_etherstatspkts1024octetsto1522octets_hi; + u32 tx_stat_etherstatspkts1024octetsto1522octets_lo; + /* frames_transmitted_1523_9022_bytes */ + u32 tx_stat_etherstatspktsover1522octets_hi; + u32 tx_stat_etherstatspktsover1522octets_lo; + u32 tx_stat_bmac_2047_hi; + u32 tx_stat_bmac_2047_lo; + u32 tx_stat_bmac_4095_hi; + u32 tx_stat_bmac_4095_lo; + u32 tx_stat_bmac_9216_hi; + u32 tx_stat_bmac_9216_lo; + u32 tx_stat_bmac_16383_hi; + u32 tx_stat_bmac_16383_lo; + + /* internal_mac_transmit_errors */ + u32 tx_stat_dot3statsinternalmactransmiterrors_hi; + u32 tx_stat_dot3statsinternalmactransmiterrors_lo; + + /* if_out_discards */ + u32 tx_stat_bmac_ufl_hi; + u32 tx_stat_bmac_ufl_lo; +}; + + +#define MAC_STX_IDX_MAX 2 + +struct host_port_stats { + u32 host_port_stats_start; + + struct mac_stx mac_stx[MAC_STX_IDX_MAX]; + + u32 brb_drop_hi; + u32 brb_drop_lo; + + u32 host_port_stats_end; +}; + + +struct host_func_stats { + u32 host_func_stats_start; + + u32 total_bytes_received_hi; + u32 total_bytes_received_lo; + + u32 total_bytes_transmitted_hi; + u32 total_bytes_transmitted_lo; + + u32 total_unicast_packets_received_hi; + u32 total_unicast_packets_received_lo; + + u32 total_multicast_packets_received_hi; + u32 total_multicast_packets_received_lo; + + u32 total_broadcast_packets_received_hi; + u32 total_broadcast_packets_received_lo; + + u32 total_unicast_packets_transmitted_hi; + u32 total_unicast_packets_transmitted_lo; + + u32 total_multicast_packets_transmitted_hi; + u32 total_multicast_packets_transmitted_lo; + + u32 total_broadcast_packets_transmitted_hi; + u32 total_broadcast_packets_transmitted_lo; + + u32 valid_bytes_received_hi; + u32 valid_bytes_received_lo; + + u32 host_func_stats_end; +}; + + #define BCM_5710_FW_MAJOR_VERSION 4 -#define BCM_5710_FW_MINOR_VERSION 0 -#define BCM_5710_FW_REVISION_VERSION 14 +#define BCM_5710_FW_MINOR_VERSION 6 +#define BCM_5710_FW_REVISION_VERSION 15 +#define BCM_5710_FW_ENGINEERING_VERSION 0 #define BCM_5710_FW_COMPILE_FLAGS 1 @@ -764,15 +1214,9 @@ struct shmem_region { /* SharedMem Offset (size) */ struct atten_def_status_block { u32 attn_bits; u32 attn_bits_ack; -#if defined(__BIG_ENDIAN) - u16 attn_bits_index; - u8 reserved0; - u8 status_block_id; -#elif defined(__LITTLE_ENDIAN) u8 status_block_id; u8 reserved0; u16 attn_bits_index; -#endif u32 reserved1; }; @@ -793,7 +1237,7 @@ struct doorbell_hdr { }; /* - * doorbell message send to the chip + * doorbell message sent to the chip */ struct doorbell { #if defined(__BIG_ENDIAN) @@ -809,7 +1253,7 @@ struct doorbell { /* - * IGU driver acknowlegement register + * IGU driver acknowledgement register */ struct igu_ack_register { #if defined(__BIG_ENDIAN) @@ -849,8 +1293,10 @@ struct parsing_flags { u16 flags; #define PARSING_FLAGS_ETHERNET_ADDRESS_TYPE (0x1<<0) #define PARSING_FLAGS_ETHERNET_ADDRESS_TYPE_SHIFT 0 -#define PARSING_FLAGS_NUMBER_OF_NESTED_VLANS (0x3<<1) -#define PARSING_FLAGS_NUMBER_OF_NESTED_VLANS_SHIFT 1 +#define PARSING_FLAGS_VLAN (0x1<<1) +#define PARSING_FLAGS_VLAN_SHIFT 1 +#define PARSING_FLAGS_EXTRA_VLAN (0x1<<2) +#define PARSING_FLAGS_EXTRA_VLAN_SHIFT 2 #define PARSING_FLAGS_OVER_ETHERNET_PROTOCOL (0x3<<3) #define PARSING_FLAGS_OVER_ETHERNET_PROTOCOL_SHIFT 3 #define PARSING_FLAGS_IP_OPTIONS (0x1<<5) @@ -874,6 +1320,12 @@ struct parsing_flags { }; +struct regpair { + u32 lo; + u32 hi; +}; + + /* * dmae command structure */ @@ -901,8 +1353,10 @@ struct dmae_command { #define DMAE_COMMAND_SRC_RESET_SHIFT 13 #define DMAE_COMMAND_DST_RESET (0x1<<14) #define DMAE_COMMAND_DST_RESET_SHIFT 14 -#define DMAE_COMMAND_RESERVED0 (0x1FFFF<<15) -#define DMAE_COMMAND_RESERVED0_SHIFT 15 +#define DMAE_COMMAND_E1HVN (0x3<<15) +#define DMAE_COMMAND_E1HVN_SHIFT 15 +#define DMAE_COMMAND_RESERVED0 (0x7FFF<<17) +#define DMAE_COMMAND_RESERVED0_SHIFT 17 u32 src_addr_lo; u32 src_addr_hi; u32 dst_addr_lo; @@ -952,72 +1406,107 @@ struct double_regpair { /* - * The eth Rx Buffer Descriptor - */ -struct eth_rx_bd { - u32 addr_lo; - u32 addr_hi; -}; - -/* - * The eth storm context of Ustorm + * The eth storm context of Ustorm (configuration part) */ -struct ustorm_eth_st_context { +struct ustorm_eth_st_context_config { #if defined(__BIG_ENDIAN) - u8 sb_index_number; + u8 flags; +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_MC_ALIGNMENT (0x1<<0) +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_MC_ALIGNMENT_SHIFT 0 +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_DYNAMIC_HC (0x1<<1) +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_DYNAMIC_HC_SHIFT 1 +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_TPA (0x1<<2) +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_TPA_SHIFT 2 +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING (0x1<<3) +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING_SHIFT 3 +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS (0x1<<4) +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS_SHIFT 4 +#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0 (0x7<<5) +#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0_SHIFT 5 u8 status_block_id; - u8 __local_rx_bd_cons; - u8 __local_rx_bd_prod; + u8 clientId; + u8 sb_index_numbers; +#define USTORM_ETH_ST_CONTEXT_CONFIG_CQE_SB_INDEX_NUMBER (0xF<<0) +#define USTORM_ETH_ST_CONTEXT_CONFIG_CQE_SB_INDEX_NUMBER_SHIFT 0 +#define USTORM_ETH_ST_CONTEXT_CONFIG_BD_SB_INDEX_NUMBER (0xF<<4) +#define USTORM_ETH_ST_CONTEXT_CONFIG_BD_SB_INDEX_NUMBER_SHIFT 4 #elif defined(__LITTLE_ENDIAN) - u8 __local_rx_bd_prod; - u8 __local_rx_bd_cons; + u8 sb_index_numbers; +#define USTORM_ETH_ST_CONTEXT_CONFIG_CQE_SB_INDEX_NUMBER (0xF<<0) +#define USTORM_ETH_ST_CONTEXT_CONFIG_CQE_SB_INDEX_NUMBER_SHIFT 0 +#define USTORM_ETH_ST_CONTEXT_CONFIG_BD_SB_INDEX_NUMBER (0xF<<4) +#define USTORM_ETH_ST_CONTEXT_CONFIG_BD_SB_INDEX_NUMBER_SHIFT 4 + u8 clientId; u8 status_block_id; - u8 sb_index_number; -#endif -#if defined(__BIG_ENDIAN) - u16 rcq_cons; - u16 rx_bd_cons; -#elif defined(__LITTLE_ENDIAN) - u16 rx_bd_cons; - u16 rcq_cons; + u8 flags; +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_MC_ALIGNMENT (0x1<<0) +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_MC_ALIGNMENT_SHIFT 0 +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_DYNAMIC_HC (0x1<<1) +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_DYNAMIC_HC_SHIFT 1 +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_TPA (0x1<<2) +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_TPA_SHIFT 2 +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING (0x1<<3) +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING_SHIFT 3 +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS (0x1<<4) +#define USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS_SHIFT 4 +#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0 (0x7<<5) +#define __USTORM_ETH_ST_CONTEXT_CONFIG_RESERVED0_SHIFT 5 #endif - u32 rx_bd_page_base_lo; - u32 rx_bd_page_base_hi; - u32 rcq_base_address_lo; - u32 rcq_base_address_hi; #if defined(__BIG_ENDIAN) - u16 __num_of_returned_cqes; - u8 num_rss; - u8 flags; -#define USTORM_ETH_ST_CONTEXT_ENABLE_MC_ALIGNMENT (0x1<<0) -#define USTORM_ETH_ST_CONTEXT_ENABLE_MC_ALIGNMENT_SHIFT 0 -#define USTORM_ETH_ST_CONTEXT_ENABLE_DYNAMIC_HC (0x1<<1) -#define USTORM_ETH_ST_CONTEXT_ENABLE_DYNAMIC_HC_SHIFT 1 -#define USTORM_ETH_ST_CONTEXT_ENABLE_TPA (0x1<<2) -#define USTORM_ETH_ST_CONTEXT_ENABLE_TPA_SHIFT 2 -#define __USTORM_ETH_ST_CONTEXT_RESERVED0 (0x1F<<3) -#define __USTORM_ETH_ST_CONTEXT_RESERVED0_SHIFT 3 + u16 bd_buff_size; + u8 statistics_counter_id; + u8 mc_alignment_log_size; #elif defined(__LITTLE_ENDIAN) - u8 flags; -#define USTORM_ETH_ST_CONTEXT_ENABLE_MC_ALIGNMENT (0x1<<0) -#define USTORM_ETH_ST_CONTEXT_ENABLE_MC_ALIGNMENT_SHIFT 0 -#define USTORM_ETH_ST_CONTEXT_ENABLE_DYNAMIC_HC (0x1<<1) -#define USTORM_ETH_ST_CONTEXT_ENABLE_DYNAMIC_HC_SHIFT 1 -#define USTORM_ETH_ST_CONTEXT_ENABLE_TPA (0x1<<2) -#define USTORM_ETH_ST_CONTEXT_ENABLE_TPA_SHIFT 2 -#define __USTORM_ETH_ST_CONTEXT_RESERVED0 (0x1F<<3) -#define __USTORM_ETH_ST_CONTEXT_RESERVED0_SHIFT 3 - u8 num_rss; - u16 __num_of_returned_cqes; + u8 mc_alignment_log_size; + u8 statistics_counter_id; + u16 bd_buff_size; #endif #if defined(__BIG_ENDIAN) - u16 mc_alignment_size; - u16 agg_threshold; + u8 __local_sge_prod; + u8 __local_bd_prod; + u16 sge_buff_size; #elif defined(__LITTLE_ENDIAN) - u16 agg_threshold; - u16 mc_alignment_size; + u16 sge_buff_size; + u8 __local_bd_prod; + u8 __local_sge_prod; #endif + u32 reserved; + u32 bd_page_base_lo; + u32 bd_page_base_hi; + u32 sge_page_base_lo; + u32 sge_page_base_hi; +}; + +/* + * The eth Rx Buffer Descriptor + */ +struct eth_rx_bd { + u32 addr_lo; + u32 addr_hi; +}; + +/* + * The eth Rx SGE Descriptor + */ +struct eth_rx_sge { + u32 addr_lo; + u32 addr_hi; +}; + +/* + * Local BDs and SGEs rings (in ETH) + */ +struct eth_local_rx_rings { struct eth_rx_bd __local_bd_ring[16]; + struct eth_rx_sge __local_sge_ring[12]; +}; + +/* + * The eth storm context of Ustorm + */ +struct ustorm_eth_st_context { + struct ustorm_eth_st_context_config common; + struct eth_local_rx_rings __rings; }; /* @@ -1088,9 +1577,9 @@ struct xstorm_eth_extra_ag_context_section { #if defined(__BIG_ENDIAN) u16 __reserved3; u8 __reserved2; - u8 __agg_misc7; + u8 __da_only_cnt; #elif defined(__LITTLE_ENDIAN) - u8 __agg_misc7; + u8 __da_only_cnt; u8 __reserved2; u16 __reserved3; #endif @@ -1193,7 +1682,7 @@ struct xstorm_eth_ag_context { }; /* - * The eth aggregative context section of Tstorm + * The eth extra aggregative context section of Tstorm */ struct tstorm_eth_extra_ag_context_section { u32 __agg_val1; @@ -1368,11 +1857,17 @@ struct timers_block_context { u32 __reserved_0; u32 __reserved_1; u32 __reserved_2; - u32 __reserved_flags; + u32 flags; +#define __TIMERS_BLOCK_CONTEXT_NUM_OF_ACTIVE_TIMERS (0x3<<0) +#define __TIMERS_BLOCK_CONTEXT_NUM_OF_ACTIVE_TIMERS_SHIFT 0 +#define TIMERS_BLOCK_CONTEXT_CONN_VALID_FLG (0x1<<2) +#define TIMERS_BLOCK_CONTEXT_CONN_VALID_FLG_SHIFT 2 +#define __TIMERS_BLOCK_CONTEXT_RESERVED0 (0x1FFFFFFF<<3) +#define __TIMERS_BLOCK_CONTEXT_RESERVED0_SHIFT 3 }; /* - * structure for easy accessability to assembler + * structure for easy accessbility to assembler */ struct eth_tx_bd_flags { u8 as_bitfield; @@ -1478,18 +1973,36 @@ struct xstorm_eth_st_context { u32 tx_bd_page_base_hi; #if defined(__BIG_ENDIAN) u16 tx_bd_cons; - u8 __reserved0; + u8 statistics_data; +#define XSTORM_ETH_ST_CONTEXT_STATISTICS_COUNTER_ID (0x7F<<0) +#define XSTORM_ETH_ST_CONTEXT_STATISTICS_COUNTER_ID_SHIFT 0 +#define XSTORM_ETH_ST_CONTEXT_STATISTICS_ENABLE (0x1<<7) +#define XSTORM_ETH_ST_CONTEXT_STATISTICS_ENABLE_SHIFT 7 u8 __local_tx_bd_prod; #elif defined(__LITTLE_ENDIAN) u8 __local_tx_bd_prod; - u8 __reserved0; + u8 statistics_data; +#define XSTORM_ETH_ST_CONTEXT_STATISTICS_COUNTER_ID (0x7F<<0) +#define XSTORM_ETH_ST_CONTEXT_STATISTICS_COUNTER_ID_SHIFT 0 +#define XSTORM_ETH_ST_CONTEXT_STATISTICS_ENABLE (0x1<<7) +#define XSTORM_ETH_ST_CONTEXT_STATISTICS_ENABLE_SHIFT 7 u16 tx_bd_cons; #endif u32 db_data_addr_lo; u32 db_data_addr_hi; u32 __pkt_cons; u32 __gso_next; - u32 is_eth_conn_1b; +#if defined(__BIG_ENDIAN) + u8 __reserved1; + u8 safc_group_num; + u8 safc_group_en; + u8 __is_eth_conn; +#elif defined(__LITTLE_ENDIAN) + u8 __is_eth_conn; + u8 safc_group_en; + u8 safc_group_num; + u8 __reserved1; +#endif union eth_tx_bd_types __bds[13]; }; @@ -1526,7 +2039,7 @@ struct eth_context { /* - * ethernet doorbell + * Ethernet doorbell */ struct eth_tx_doorbell { #if defined(__BIG_ENDIAN) @@ -1559,7 +2072,7 @@ struct eth_tx_doorbell { struct ustorm_def_status_block { u16 index_values[HC_USTORM_DEF_SB_NUM_INDICES]; u16 status_block_index; - u8 reserved0; + u8 func; u8 status_block_id; u32 __flags; }; @@ -1570,7 +2083,7 @@ struct ustorm_def_status_block { struct cstorm_def_status_block { u16 index_values[HC_CSTORM_DEF_SB_NUM_INDICES]; u16 status_block_index; - u8 reserved0; + u8 func; u8 status_block_id; u32 __flags; }; @@ -1581,7 +2094,7 @@ struct cstorm_def_status_block { struct xstorm_def_status_block { u16 index_values[HC_XSTORM_DEF_SB_NUM_INDICES]; u16 status_block_index; - u8 reserved0; + u8 func; u8 status_block_id; u32 __flags; }; @@ -1592,7 +2105,7 @@ struct xstorm_def_status_block { struct tstorm_def_status_block { u16 index_values[HC_TSTORM_DEF_SB_NUM_INDICES]; u16 status_block_index; - u8 reserved0; + u8 func; u8 status_block_id; u32 __flags; }; @@ -1615,7 +2128,7 @@ struct host_def_status_block { struct ustorm_status_block { u16 index_values[HC_USTORM_SB_NUM_INDICES]; u16 status_block_index; - u8 reserved0; + u8 func; u8 status_block_id; u32 __flags; }; @@ -1626,7 +2139,7 @@ struct ustorm_status_block { struct cstorm_status_block { u16 index_values[HC_CSTORM_SB_NUM_INDICES]; u16 status_block_index; - u8 reserved0; + u8 func; u8 status_block_id; u32 __flags; }; @@ -1644,9 +2157,9 @@ struct host_status_block { * The data for RSS setup ramrod */ struct eth_client_setup_ramrod_data { - u32 client_id_5b; - u8 is_rdma_1b; - u8 reserved0; + u32 client_id; + u8 is_rdma; + u8 is_fcoe; u16 reserved1; }; @@ -1664,20 +2177,21 @@ struct eth_dynamic_hc_config { * regular eth FP CQE parameters struct */ struct eth_fast_path_rx_cqe { - u8 type; - u8 error_type_flags; -#define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG (0x1<<0) -#define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG_SHIFT 0 -#define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG (0x1<<1) -#define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG_SHIFT 1 -#define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG (0x1<<2) -#define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG_SHIFT 2 -#define ETH_FAST_PATH_RX_CQE_START_FLG (0x1<<3) -#define ETH_FAST_PATH_RX_CQE_START_FLG_SHIFT 3 -#define ETH_FAST_PATH_RX_CQE_END_FLG (0x1<<4) -#define ETH_FAST_PATH_RX_CQE_END_FLG_SHIFT 4 -#define ETH_FAST_PATH_RX_CQE_RESERVED0 (0x7<<5) -#define ETH_FAST_PATH_RX_CQE_RESERVED0_SHIFT 5 + u8 type_error_flags; +#define ETH_FAST_PATH_RX_CQE_TYPE (0x1<<0) +#define ETH_FAST_PATH_RX_CQE_TYPE_SHIFT 0 +#define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG (0x1<<1) +#define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG_SHIFT 1 +#define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG (0x1<<2) +#define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG_SHIFT 2 +#define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG (0x1<<3) +#define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG_SHIFT 3 +#define ETH_FAST_PATH_RX_CQE_START_FLG (0x1<<4) +#define ETH_FAST_PATH_RX_CQE_START_FLG_SHIFT 4 +#define ETH_FAST_PATH_RX_CQE_END_FLG (0x1<<5) +#define ETH_FAST_PATH_RX_CQE_END_FLG_SHIFT 5 +#define ETH_FAST_PATH_RX_CQE_RESERVED0 (0x3<<6) +#define ETH_FAST_PATH_RX_CQE_RESERVED0_SHIFT 6 u8 status_flags; #define ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE (0x7<<0) #define ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE_SHIFT 0 @@ -1692,11 +2206,13 @@ struct eth_fast_path_rx_cqe { #define ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG (0x1<<7) #define ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG_SHIFT 7 u8 placement_offset; + u8 queue_index; u32 rss_hash_result; u16 vlan_tag; u16 pkt_len; - u16 queue_index; + u16 len_on_bd; struct parsing_flags pars_flags; + u16 sgl[8]; }; @@ -1704,11 +2220,28 @@ struct eth_fast_path_rx_cqe { * The data for RSS setup ramrod */ struct eth_halt_ramrod_data { - u32 client_id_5b; + u32 client_id; u32 reserved0; }; +/* + * The data for statistics query ramrod + */ +struct eth_query_ramrod_data { +#if defined(__BIG_ENDIAN) + u8 reserved0; + u8 collect_port; + u16 drv_counter; +#elif defined(__LITTLE_ENDIAN) + u16 drv_counter; + u8 collect_port; + u8 reserved0; +#endif + u32 ctr_id_vector; +}; + + /* * Place holder for ramrods protocol specific data */ @@ -1718,7 +2251,7 @@ struct ramrod_data { }; /* - * union for ramrod data for ethernet protocol (CQE) (force size of 16 bits) + * union for ramrod data for Ethernet protocol (CQE) (force size of 16 bits) */ union eth_ramrod_data { struct ramrod_data general; @@ -1739,15 +2272,20 @@ struct eth_rx_bd_next_page { * Eth Rx Cqe structure- general structure for ramrods */ struct common_ramrod_eth_rx_cqe { - u8 type; - u8 conn_type_3b; - u16 reserved; + u8 ramrod_type; +#define COMMON_RAMROD_ETH_RX_CQE_TYPE (0x1<<0) +#define COMMON_RAMROD_ETH_RX_CQE_TYPE_SHIFT 0 +#define COMMON_RAMROD_ETH_RX_CQE_RESERVED0 (0x7F<<1) +#define COMMON_RAMROD_ETH_RX_CQE_RESERVED0_SHIFT 1 + u8 conn_type; + u16 reserved1; u32 conn_and_cmd_data; #define COMMON_RAMROD_ETH_RX_CQE_CID (0xFFFFFF<<0) #define COMMON_RAMROD_ETH_RX_CQE_CID_SHIFT 0 #define COMMON_RAMROD_ETH_RX_CQE_CMD_ID (0xFF<<24) #define COMMON_RAMROD_ETH_RX_CQE_CMD_ID_SHIFT 24 struct ramrod_data protocol_data; + u32 reserved2[4]; }; /* @@ -1756,8 +2294,7 @@ struct common_ramrod_eth_rx_cqe { struct eth_rx_cqe_next_page { u32 addr_lo; u32 addr_hi; - u32 reserved0; - u32 reserved1; + u32 reserved[6]; }; /* @@ -1787,13 +2324,8 @@ struct spe_hdr { u16 reserved; }; -struct regpair { - u32 lo; - u32 hi; -}; - /* - * ethernet slow path element + * Ethernet slow path element */ union eth_specific_data { u8 protocol_data[8]; @@ -1802,10 +2334,11 @@ union eth_specific_data { struct eth_halt_ramrod_data halt_ramrod_data; struct regpair leading_cqe_addr; struct regpair update_data_addr; + struct eth_query_ramrod_data query_ramrod_data; }; /* - * ethernet slow path element + * Ethernet slow path element */ struct eth_spe { struct spe_hdr hdr; @@ -1824,10 +2357,13 @@ struct eth_tx_db_data { /* - * Common configuration parameters per port in Tstorm + * Common configuration parameters per function in Tstorm */ struct tstorm_eth_function_common_config { - u32 config_flags; +#if defined(__BIG_ENDIAN) + u8 leading_client_id; + u8 rss_result_mask; + u16 config_flags; #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY (0x1<<0) #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY_SHIFT 0 #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_TCP_CAPABILITY (0x1<<1) @@ -1836,21 +2372,36 @@ struct tstorm_eth_function_common_config { #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_CAPABILITY_SHIFT 2 #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY (0x1<<3) #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY_SHIFT 3 -#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_ENABLE (0x1<<4) -#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_ENABLE_SHIFT 4 -#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_DEFAULT_ENABLE (0x1<<5) -#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_DEFAULT_ENABLE_SHIFT 5 -#define __TSTORM_ETH_FUNCTION_COMMON_CONFIG_RESERVED0 (0x3FFFFFF<<6) -#define __TSTORM_ETH_FUNCTION_COMMON_CONFIG_RESERVED0_SHIFT 6 -#if defined(__BIG_ENDIAN) - u16 __secondary_vlan_id; - u8 leading_client_id; - u8 rss_result_mask; +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_MODE (0x7<<4) +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_MODE_SHIFT 4 +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_DEFAULT_ENABLE (0x1<<7) +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_DEFAULT_ENABLE_SHIFT 7 +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_VLAN_IN_CAM (0x1<<8) +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_VLAN_IN_CAM_SHIFT 8 +#define __TSTORM_ETH_FUNCTION_COMMON_CONFIG_RESERVED0 (0x7F<<9) +#define __TSTORM_ETH_FUNCTION_COMMON_CONFIG_RESERVED0_SHIFT 9 #elif defined(__LITTLE_ENDIAN) + u16 config_flags; +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY (0x1<<0) +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY_SHIFT 0 +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_TCP_CAPABILITY (0x1<<1) +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_TCP_CAPABILITY_SHIFT 1 +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_CAPABILITY (0x1<<2) +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_CAPABILITY_SHIFT 2 +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY (0x1<<3) +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY_SHIFT 3 +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_MODE (0x7<<4) +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_MODE_SHIFT 4 +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_DEFAULT_ENABLE (0x1<<7) +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_DEFAULT_ENABLE_SHIFT 7 +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_VLAN_IN_CAM (0x1<<8) +#define TSTORM_ETH_FUNCTION_COMMON_CONFIG_VLAN_IN_CAM_SHIFT 8 +#define __TSTORM_ETH_FUNCTION_COMMON_CONFIG_RESERVED0 (0x7F<<9) +#define __TSTORM_ETH_FUNCTION_COMMON_CONFIG_RESERVED0_SHIFT 9 u8 rss_result_mask; u8 leading_client_id; - u16 __secondary_vlan_id; #endif + u16 vlan_id[2]; }; /* @@ -1866,9 +2417,9 @@ struct eth_update_ramrod_data { * MAC filtering configuration command header */ struct mac_configuration_hdr { - u8 length_6b; + u8 length; u8 offset; - u16 reserved0; + u16 client_id; u32 reserved1; }; @@ -1924,16 +2475,56 @@ struct mac_configuration_cmd { }; +/* + * MAC address in list for ramrod + */ +struct mac_configuration_entry_e1h { + u16 lsb_mac_addr; + u16 middle_mac_addr; + u16 msb_mac_addr; + u16 vlan_id; + u16 e1hov_id; + u8 client_id; + u8 flags; +#define MAC_CONFIGURATION_ENTRY_E1H_PORT (0x1<<0) +#define MAC_CONFIGURATION_ENTRY_E1H_PORT_SHIFT 0 +#define MAC_CONFIGURATION_ENTRY_E1H_ACTION_TYPE (0x1<<1) +#define MAC_CONFIGURATION_ENTRY_E1H_ACTION_TYPE_SHIFT 1 +#define MAC_CONFIGURATION_ENTRY_E1H_RDMA_MAC (0x1<<2) +#define MAC_CONFIGURATION_ENTRY_E1H_RDMA_MAC_SHIFT 2 +#define MAC_CONFIGURATION_ENTRY_E1H_RESERVED0 (0x1F<<3) +#define MAC_CONFIGURATION_ENTRY_E1H_RESERVED0_SHIFT 3 +}; + +/* + * MAC filtering configuration command + */ +struct mac_configuration_cmd_e1h { + struct mac_configuration_hdr hdr; + struct mac_configuration_entry_e1h config_table[32]; +}; + + +/* + * approximate-match multicast filtering for E1H per function in Tstorm + */ +struct tstorm_eth_approximate_match_multicast_filtering { + u32 mcast_add_hash_bit_array[8]; +}; + + /* * Configuration parameters per client in Tstorm */ struct tstorm_eth_client_config { #if defined(__BIG_ENDIAN) - u16 statistics_counter_id; + u8 max_sges_for_packet; + u8 statistics_counter_id; u16 mtu; #elif defined(__LITTLE_ENDIAN) u16 mtu; - u16 statistics_counter_id; + u8 statistics_counter_id; + u8 max_sges_for_packet; #endif #if defined(__BIG_ENDIAN) u16 drop_flags; @@ -1941,42 +2532,46 @@ struct tstorm_eth_client_config { #define TSTORM_ETH_CLIENT_CONFIG_DROP_IP_CS_ERR_SHIFT 0 #define TSTORM_ETH_CLIENT_CONFIG_DROP_TCP_CS_ERR (0x1<<1) #define TSTORM_ETH_CLIENT_CONFIG_DROP_TCP_CS_ERR_SHIFT 1 -#define TSTORM_ETH_CLIENT_CONFIG_DROP_MAC_ERR (0x1<<2) -#define TSTORM_ETH_CLIENT_CONFIG_DROP_MAC_ERR_SHIFT 2 -#define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0 (0x1<<3) -#define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0_SHIFT 3 -#define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR (0x1<<4) -#define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR_SHIFT 4 -#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1 (0x7FF<<5) -#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1_SHIFT 5 +#define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0 (0x1<<2) +#define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0_SHIFT 2 +#define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR (0x1<<3) +#define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR_SHIFT 3 +#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1 (0xFFF<<4) +#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1_SHIFT 4 u16 config_flags; #define TSTORM_ETH_CLIENT_CONFIG_VLAN_REMOVAL_ENABLE (0x1<<0) #define TSTORM_ETH_CLIENT_CONFIG_VLAN_REMOVAL_ENABLE_SHIFT 0 -#define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE (0x1<<1) -#define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE_SHIFT 1 -#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0 (0x3FFF<<2) -#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0_SHIFT 2 +#define TSTORM_ETH_CLIENT_CONFIG_E1HOV_REMOVAL_ENABLE (0x1<<1) +#define TSTORM_ETH_CLIENT_CONFIG_E1HOV_REMOVAL_ENABLE_SHIFT 1 +#define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE (0x1<<2) +#define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE_SHIFT 2 +#define TSTORM_ETH_CLIENT_CONFIG_ENABLE_SGE_RING (0x1<<3) +#define TSTORM_ETH_CLIENT_CONFIG_ENABLE_SGE_RING_SHIFT 3 +#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0 (0xFFF<<4) +#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0_SHIFT 4 #elif defined(__LITTLE_ENDIAN) u16 config_flags; #define TSTORM_ETH_CLIENT_CONFIG_VLAN_REMOVAL_ENABLE (0x1<<0) #define TSTORM_ETH_CLIENT_CONFIG_VLAN_REMOVAL_ENABLE_SHIFT 0 -#define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE (0x1<<1) -#define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE_SHIFT 1 -#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0 (0x3FFF<<2) -#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0_SHIFT 2 +#define TSTORM_ETH_CLIENT_CONFIG_E1HOV_REMOVAL_ENABLE (0x1<<1) +#define TSTORM_ETH_CLIENT_CONFIG_E1HOV_REMOVAL_ENABLE_SHIFT 1 +#define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE (0x1<<2) +#define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE_SHIFT 2 +#define TSTORM_ETH_CLIENT_CONFIG_ENABLE_SGE_RING (0x1<<3) +#define TSTORM_ETH_CLIENT_CONFIG_ENABLE_SGE_RING_SHIFT 3 +#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0 (0xFFF<<4) +#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0_SHIFT 4 u16 drop_flags; #define TSTORM_ETH_CLIENT_CONFIG_DROP_IP_CS_ERR (0x1<<0) #define TSTORM_ETH_CLIENT_CONFIG_DROP_IP_CS_ERR_SHIFT 0 #define TSTORM_ETH_CLIENT_CONFIG_DROP_TCP_CS_ERR (0x1<<1) #define TSTORM_ETH_CLIENT_CONFIG_DROP_TCP_CS_ERR_SHIFT 1 -#define TSTORM_ETH_CLIENT_CONFIG_DROP_MAC_ERR (0x1<<2) -#define TSTORM_ETH_CLIENT_CONFIG_DROP_MAC_ERR_SHIFT 2 -#define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0 (0x1<<3) -#define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0_SHIFT 3 -#define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR (0x1<<4) -#define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR_SHIFT 4 -#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1 (0x7FF<<5) -#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1_SHIFT 5 +#define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0 (0x1<<2) +#define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0_SHIFT 2 +#define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR (0x1<<3) +#define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR_SHIFT 3 +#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1 (0xFFF<<4) +#define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1_SHIFT 4 #endif }; @@ -1992,103 +2587,154 @@ struct tstorm_eth_mac_filter_config { u32 bcast_drop_all; u32 bcast_accept_all; u32 strict_vlan; - u32 __secondary_vlan_clients; + u32 vlan_filter[2]; + u32 reserved; }; -struct rate_shaping_per_protocol { +/* + * common flag to indicate existance of TPA. + */ +struct tstorm_eth_tpa_exist { #if defined(__BIG_ENDIAN) - u16 reserved0; - u16 protocol_rate; + u16 reserved1; + u8 reserved0; + u8 tpa_exist; #elif defined(__LITTLE_ENDIAN) - u16 protocol_rate; - u16 reserved0; + u8 tpa_exist; + u8 reserved0; + u16 reserved1; #endif - u32 protocol_quota; - s32 current_credit; - u32 reserved; + u32 reserved2; }; -struct rate_shaping_vars { - struct rate_shaping_per_protocol protocol_vars[NUM_OF_PROTOCOLS]; - u32 pause_mask; - u32 periodic_stop; - u32 rs_periodic_timeout; - u32 rs_threshold; - u32 last_periodic_time; - u32 reserved; -}; -struct fairness_per_protocol { - u32 credit_delta; - s32 fair_credit; +/* + * rx rings pause data for E1h only + */ +struct ustorm_eth_rx_pause_data_e1h { +#if defined(__BIG_ENDIAN) + u16 bd_thr_low; + u16 cqe_thr_low; +#elif defined(__LITTLE_ENDIAN) + u16 cqe_thr_low; + u16 bd_thr_low; +#endif +#if defined(__BIG_ENDIAN) + u16 cos; + u16 sge_thr_low; +#elif defined(__LITTLE_ENDIAN) + u16 sge_thr_low; + u16 cos; +#endif +#if defined(__BIG_ENDIAN) + u16 bd_thr_high; + u16 cqe_thr_high; +#elif defined(__LITTLE_ENDIAN) + u16 cqe_thr_high; + u16 bd_thr_high; +#endif #if defined(__BIG_ENDIAN) u16 reserved0; - u8 state; - u8 weight; + u16 sge_thr_high; #elif defined(__LITTLE_ENDIAN) - u8 weight; - u8 state; + u16 sge_thr_high; u16 reserved0; #endif - u32 reserved1; }; -struct fairness_vars { - struct fairness_per_protocol protocol_vars[NUM_OF_PROTOCOLS]; - u32 upper_bound; - u32 port_rate; - u32 pause_mask; - u32 fair_threshold; -}; -struct safc_struct { - u32 cur_pause_mask; - u32 expire_time; +/* + * Three RX producers for ETH + */ +struct ustorm_eth_rx_producers { #if defined(__BIG_ENDIAN) - u16 reserved0; - u8 cur_cos_types; - u8 safc_timeout_usec; + u16 bd_prod; + u16 cqe_prod; #elif defined(__LITTLE_ENDIAN) - u8 safc_timeout_usec; - u8 cur_cos_types; - u16 reserved0; + u16 cqe_prod; + u16 bd_prod; +#endif +#if defined(__BIG_ENDIAN) + u16 reserved; + u16 sge_prod; +#elif defined(__LITTLE_ENDIAN) + u16 sge_prod; + u16 reserved; #endif - u32 reserved1; }; -struct demo_struct { + +/* + * per-port SAFC demo variables + */ +struct cmng_flags_per_port { u8 con_number[NUM_OF_PROTOCOLS]; #if defined(__BIG_ENDIAN) - u8 reserved1; u8 fairness_enable; u8 rate_shaping_enable; - u8 cmng_enable; + u8 cmng_protocol_enable; + u8 cmng_vn_enable; #elif defined(__LITTLE_ENDIAN) - u8 cmng_enable; + u8 cmng_vn_enable; + u8 cmng_protocol_enable; u8 rate_shaping_enable; u8 fairness_enable; - u8 reserved1; #endif }; -struct cmng_struct { - struct rate_shaping_vars rs_vars; - struct fairness_vars fair_vars; - struct safc_struct safc_vars; - struct demo_struct demo_vars; + +/* + * per-port rate shaping variables + */ +struct rate_shaping_vars_per_port { + u32 rs_periodic_timeout; + u32 rs_threshold; }; -struct cos_to_protocol { - u8 mask[MAX_COS_NUMBER]; +/* + * per-port fairness variables + */ +struct fairness_vars_per_port { + u32 upper_bound; + u32 fair_threshold; + u32 fairness_timeout; }; /* - * Common statistics collected by the Xstorm (per port) + * per-port SAFC variables */ -struct xstorm_common_stats { +struct safc_struct_per_port { +#if defined(__BIG_ENDIAN) + u16 __reserved1; + u8 __reserved0; + u8 safc_timeout_usec; +#elif defined(__LITTLE_ENDIAN) + u8 safc_timeout_usec; + u8 __reserved0; + u16 __reserved1; +#endif + u16 cos_to_pause_mask[MAX_COS_NUMBER]; +}; + + +/* + * Per-port congestion management variables + */ +struct cmng_struct_per_port { + struct rate_shaping_vars_per_port rs_vars; + struct fairness_vars_per_port fair_vars; + struct safc_struct_per_port safc_vars; + struct cmng_flags_per_port flags; +}; + + +/* + * Protocol-common statistics collected by the Xstorm (per client) + */ +struct xstorm_per_client_stats { struct regpair total_sent_bytes; u32 total_sent_pkts; u32 unicast_pkts_sent; @@ -2097,9 +2743,31 @@ struct xstorm_common_stats { u32 multicast_pkts_sent; u32 broadcast_pkts_sent; struct regpair broadcast_bytes_sent; - struct regpair done; + u16 stats_counter; + u16 reserved0; + u32 reserved1; +}; + + +/* + * Common statistics collected by the Xstorm (per port) + */ +struct xstorm_common_stats { + struct xstorm_per_client_stats client_statistics[MAX_X_STAT_COUNTER_ID]; +}; + + +/* + * Protocol-common statistics collected by the Tstorm (per port) + */ +struct tstorm_per_port_stats { + u32 mac_filter_discard; + u32 xxoverflow_discard; + u32 brb_truncate_discard; + u32 mac_discard; }; + /* * Protocol-common statistics collected by the Tstorm (per client) */ @@ -2117,28 +2785,53 @@ struct tstorm_per_client_stats { u32 rcv_multicast_pkts; u32 no_buff_discard; u32 ttl0_discard; - u32 mac_discard; - u32 reserved; + u16 stats_counter; + u16 reserved0; + u32 reserved1; }; /* - * Protocol-common statistics collected by the Tstorm (per port) + * Protocol-common statistics collected by the Tstorm */ struct tstorm_common_stats { - struct tstorm_per_client_stats client_statistics[MAX_T_STAT_COUNTER_ID]; - u32 mac_filter_discard; - u32 xxoverflow_discard; - u32 brb_truncate_discard; - u32 reserved; - struct regpair done; + struct tstorm_per_port_stats port_statistics; + struct tstorm_per_client_stats client_statistics[MAX_T_STAT_COUNTER_ID]; +}; + +/* + * Protocol-common statistics collected by the Ustorm (per client) + */ +struct ustorm_per_client_stats { + struct regpair rcv_error_bytes; + u32 no_buff_discard; + u16 stats_counter; + u16 reserved0; +}; + +/* + * Protocol-common statistics collected by the Ustorm + */ +struct ustorm_common_stats { + struct ustorm_per_client_stats client_statistics[MAX_U_STAT_COUNTER_ID]; }; /* - * Eth statistics query sturcture for the eth_stats_quesry ramrod + * Eth statistics query structure for the eth_stats_query ramrod */ struct eth_stats_query { struct xstorm_common_stats xstorm_common; struct tstorm_common_stats tstorm_common; + struct ustorm_common_stats ustorm_common; +}; + + +/* + * per-vnic fairness variables + */ +struct fairness_vars_per_vn { + u32 protocol_credit_delta[NUM_OF_PROTOCOLS]; + u32 vn_credit_delta; + u32 __reserved0; }; @@ -2147,21 +2840,25 @@ struct eth_stats_query { */ struct fw_version { #if defined(__BIG_ENDIAN) - u16 patch; - u8 primary; - u8 client; + u8 engineering; + u8 revision; + u8 minor; + u8 major; #elif defined(__LITTLE_ENDIAN) - u8 client; - u8 primary; - u16 patch; + u8 major; + u8 minor; + u8 revision; + u8 engineering; #endif u32 flags; #define FW_VERSION_OPTIMIZED (0x1<<0) #define FW_VERSION_OPTIMIZED_SHIFT 0 #define FW_VERSION_BIG_ENDIEN (0x1<<1) #define FW_VERSION_BIG_ENDIEN_SHIFT 1 -#define __FW_VERSION_RESERVED (0x3FFFFFFF<<2) -#define __FW_VERSION_RESERVED_SHIFT 2 +#define FW_VERSION_CHIP_VERSION (0x3<<2) +#define FW_VERSION_CHIP_VERSION_SHIFT 2 +#define __FW_VERSION_RESERVED (0xFFFFFFF<<4) +#define __FW_VERSION_RESERVED_SHIFT 4 }; @@ -2169,15 +2866,10 @@ struct fw_version { * FW version stored in first line of pram */ struct pram_fw_version { -#if defined(__BIG_ENDIAN) - u16 patch; - u8 primary; - u8 client; -#elif defined(__LITTLE_ENDIAN) - u8 client; - u8 primary; - u16 patch; -#endif + u8 major; + u8 minor; + u8 revision; + u8 engineering; u8 flags; #define PRAM_FW_VERSION_OPTIMIZED (0x1<<0) #define PRAM_FW_VERSION_OPTIMIZED_SHIFT 0 @@ -2185,8 +2877,34 @@ struct pram_fw_version { #define PRAM_FW_VERSION_STORM_ID_SHIFT 1 #define PRAM_FW_VERSION_BIG_ENDIEN (0x1<<3) #define PRAM_FW_VERSION_BIG_ENDIEN_SHIFT 3 -#define __PRAM_FW_VERSION_RESERVED0 (0xF<<4) -#define __PRAM_FW_VERSION_RESERVED0_SHIFT 4 +#define PRAM_FW_VERSION_CHIP_VERSION (0x3<<4) +#define PRAM_FW_VERSION_CHIP_VERSION_SHIFT 4 +#define __PRAM_FW_VERSION_RESERVED0 (0x3<<6) +#define __PRAM_FW_VERSION_RESERVED0_SHIFT 6 +}; + + +/* + * a single rate shaping counter. can be used as protocol or vnic counter + */ +struct rate_shaping_counter { + u32 quota; +#if defined(__BIG_ENDIAN) + u16 __reserved0; + u16 rate; +#elif defined(__LITTLE_ENDIAN) + u16 rate; + u16 __reserved0; +#endif +}; + + +/* + * per-vnic rate shaping variables + */ +struct rate_shaping_vars_per_vn { + struct rate_shaping_counter protocol_counters[NUM_OF_PROTOCOLS]; + struct rate_shaping_counter vn_counter; }; diff --git a/drivers/net/bnx2x_init.h b/drivers/net/bnx2x_init.h index 370686ee..a6c0b3ab 100644 --- a/drivers/net/bnx2x_init.h +++ b/drivers/net/bnx2x_init.h @@ -22,7 +22,8 @@ #define INIT_ASIC 0x4 #define INIT_HARDWARE 0x7 -#define STORM_INTMEM_SIZE (0x5800 / 4) +#define STORM_INTMEM_SIZE_E1 (0x5800 / 4) +#define STORM_INTMEM_SIZE_E1H (0x10000 / 4) #define TSTORM_INTMEM_ADDR 0x1a0000 #define CSTORM_INTMEM_ADDR 0x220000 #define XSTORM_INTMEM_ADDR 0x2a0000 @@ -30,7 +31,7 @@ /* Init operation types and structures */ - +/* Common for both E1 and E1H */ #define OP_RD 0x1 /* read single register */ #define OP_WR 0x2 /* write single register */ #define OP_IW 0x3 /* write single register using mailbox */ @@ -38,29 +39,59 @@ #define OP_SI 0x5 /* copy a string using mailbox */ #define OP_ZR 0x6 /* clear memory */ #define OP_ZP 0x7 /* unzip then copy with DMAE */ -#define OP_WB 0x8 /* copy a string using DMAE */ +#define OP_WR_64 0x8 /* write 64 bit pattern */ +#define OP_WB 0x9 /* copy a string using DMAE */ + +/* Operation specific for E1 */ +#define OP_RD_E1 0xa /* read single register */ +#define OP_WR_E1 0xb /* write single register */ +#define OP_IW_E1 0xc /* write single register using mailbox */ +#define OP_SW_E1 0xd /* copy a string to the device */ +#define OP_SI_E1 0xe /* copy a string using mailbox */ +#define OP_ZR_E1 0xf /* clear memory */ +#define OP_ZP_E1 0x10 /* unzip then copy with DMAE */ +#define OP_WR_64_E1 0x11 /* write 64 bit pattern on E1 */ +#define OP_WB_E1 0x12 /* copy a string using DMAE */ + +/* Operation specific for E1H */ +#define OP_RD_E1H 0x13 /* read single register */ +#define OP_WR_E1H 0x14 /* write single register */ +#define OP_IW_E1H 0x15 /* write single register using mailbox */ +#define OP_SW_E1H 0x16 /* copy a string to the device */ +#define OP_SI_E1H 0x17 /* copy a string using mailbox */ +#define OP_ZR_E1H 0x18 /* clear memory */ +#define OP_ZP_E1H 0x19 /* unzip then copy with DMAE */ +#define OP_WR_64_E1H 0x1a /* write 64 bit pattern on E1H */ +#define OP_WB_E1H 0x1b /* copy a string using DMAE */ + +/* FPGA and EMUL specific operations */ +#define OP_WR_EMUL_E1H 0x1c /* write single register on E1H Emul */ +#define OP_WR_EMUL 0x1d /* write single register on Emulation */ +#define OP_WR_FPGA 0x1e /* write single register on FPGA */ +#define OP_WR_ASIC 0x1f /* write single register on ASIC */ + struct raw_op { - u32 op :8; - u32 offset :24; + u32 op:8; + u32 offset:24; u32 raw_data; }; struct op_read { - u32 op :8; - u32 offset :24; + u32 op:8; + u32 offset:24; u32 pad; }; struct op_write { - u32 op :8; - u32 offset :24; + u32 op:8; + u32 offset:24; u32 val; }; struct op_string_write { - u32 op :8; - u32 offset :24; + u32 op:8; + u32 offset:24; #ifdef __LITTLE_ENDIAN u16 data_off; u16 data_len; @@ -71,8 +102,8 @@ struct op_string_write { }; struct op_zero { - u32 op :8; - u32 offset :24; + u32 op:8; + u32 offset:24; u32 len; }; @@ -87,10 +118,6 @@ union init_op { #include "bnx2x_init_values.h" static void bnx2x_reg_wr_ind(struct bnx2x *bp, u32 addr, u32 val); - -static void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, - u32 dst_addr, u32 len32); - static int bnx2x_gunzip(struct bnx2x *bp, u8 *zbuf, int len); static void bnx2x_init_str_wr(struct bnx2x *bp, u32 addr, const u32 *data, @@ -107,9 +134,6 @@ static void bnx2x_init_str_wr(struct bnx2x *bp, u32 addr, const u32 *data, } } -#define INIT_MEM_WR(reg, data, reg_off, len) \ - bnx2x_init_str_wr(bp, reg + reg_off*4, data, len) - static void bnx2x_init_ind_wr(struct bnx2x *bp, u32 addr, const u32 *data, u16 len) { @@ -124,11 +148,117 @@ static void bnx2x_init_ind_wr(struct bnx2x *bp, u32 addr, const u32 *data, } } +static void bnx2x_write_big_buf(struct bnx2x *bp, u32 addr, u32 len) +{ +#ifdef USE_DMAE + int offset = 0; + + if (bp->dmae_ready) { + while (len > DMAE_LEN32_WR_MAX) { + bnx2x_write_dmae(bp, bp->gunzip_mapping + offset, + addr + offset, DMAE_LEN32_WR_MAX); + offset += DMAE_LEN32_WR_MAX * 4; + len -= DMAE_LEN32_WR_MAX; + } + bnx2x_write_dmae(bp, bp->gunzip_mapping + offset, + addr + offset, len); + } else + bnx2x_init_str_wr(bp, addr, bp->gunzip_buf, len); +#else + bnx2x_init_str_wr(bp, addr, bp->gunzip_buf, len); +#endif +} + +static void bnx2x_init_fill(struct bnx2x *bp, u32 addr, int fill, u32 len) +{ + if ((len * 4) > FW_BUF_SIZE) { + BNX2X_ERR("LARGE DMAE OPERATION ! addr 0x%x len 0x%x\n", + addr, len*4); + return; + } + memset(bp->gunzip_buf, fill, len * 4); + + bnx2x_write_big_buf(bp, addr, len); +} + +static void bnx2x_init_wr_64(struct bnx2x *bp, u32 addr, const u32 *data, + u32 len64) +{ + u32 buf_len32 = FW_BUF_SIZE/4; + u32 len = len64*2; + u64 data64 = 0; + int i; + + /* 64 bit value is in a blob: first low DWORD, then high DWORD */ + data64 = HILO_U64((*(data + 1)), (*data)); + len64 = min((u32)(FW_BUF_SIZE/8), len64); + for (i = 0; i < len64; i++) { + u64 *pdata = ((u64 *)(bp->gunzip_buf)) + i; + + *pdata = data64; + } + + for (i = 0; i < len; i += buf_len32) { + u32 cur_len = min(buf_len32, len - i); + + bnx2x_write_big_buf(bp, addr + i * 4, cur_len); + } +} + +/********************************************************* + There are different blobs for each PRAM section. + In addition, each blob write operation is divided into a few operations + in order to decrease the amount of phys. contiguous buffer needed. + Thus, when we select a blob the address may be with some offset + from the beginning of PRAM section. + The same holds for the INT_TABLE sections. +**********************************************************/ +#define IF_IS_INT_TABLE_ADDR(base, addr) \ + if (((base) <= (addr)) && ((base) + 0x400 >= (addr))) + +#define IF_IS_PRAM_ADDR(base, addr) \ + if (((base) <= (addr)) && ((base) + 0x40000 >= (addr))) + +static const u32 *bnx2x_sel_blob(u32 addr, const u32 *data, int is_e1) +{ + IF_IS_INT_TABLE_ADDR(TSEM_REG_INT_TABLE, addr) + data = is_e1 ? tsem_int_table_data_e1 : + tsem_int_table_data_e1h; + else + IF_IS_INT_TABLE_ADDR(CSEM_REG_INT_TABLE, addr) + data = is_e1 ? csem_int_table_data_e1 : + csem_int_table_data_e1h; + else + IF_IS_INT_TABLE_ADDR(USEM_REG_INT_TABLE, addr) + data = is_e1 ? usem_int_table_data_e1 : + usem_int_table_data_e1h; + else + IF_IS_INT_TABLE_ADDR(XSEM_REG_INT_TABLE, addr) + data = is_e1 ? xsem_int_table_data_e1 : + xsem_int_table_data_e1h; + else + IF_IS_PRAM_ADDR(TSEM_REG_PRAM, addr) + data = is_e1 ? tsem_pram_data_e1 : tsem_pram_data_e1h; + else + IF_IS_PRAM_ADDR(CSEM_REG_PRAM, addr) + data = is_e1 ? csem_pram_data_e1 : csem_pram_data_e1h; + else + IF_IS_PRAM_ADDR(USEM_REG_PRAM, addr) + data = is_e1 ? usem_pram_data_e1 : usem_pram_data_e1h; + else + IF_IS_PRAM_ADDR(XSEM_REG_PRAM, addr) + data = is_e1 ? xsem_pram_data_e1 : xsem_pram_data_e1h; + + return data; +} + static void bnx2x_init_wr_wb(struct bnx2x *bp, u32 addr, const u32 *data, - u32 len, int gunzip) + u32 len, int gunzip, int is_e1, u32 blob_off) { int offset = 0; + data = bnx2x_sel_blob(addr, data, is_e1) + blob_off; + if (gunzip) { int rc; #ifdef __BIG_ENDIAN @@ -143,64 +273,59 @@ static void bnx2x_init_wr_wb(struct bnx2x *bp, u32 addr, const u32 *data, #endif rc = bnx2x_gunzip(bp, (u8 *)data, len); if (rc) { - DP(NETIF_MSG_HW, "gunzip failed ! rc %d\n", rc); + BNX2X_ERR("gunzip failed ! rc %d\n", rc); return; } len = bp->gunzip_outlen; #ifdef __BIG_ENDIAN kfree(temp); for (i = 0; i < len; i++) - ((u32 *)bp->gunzip_buf)[i] = + ((u32 *)bp->gunzip_buf)[i] = swab32(((u32 *)bp->gunzip_buf)[i]); #endif } else { if ((len * 4) > FW_BUF_SIZE) { - BNX2X_ERR("LARGE DMAE OPERATION ! len 0x%x\n", len*4); + BNX2X_ERR("LARGE DMAE OPERATION ! " + "addr 0x%x len 0x%x\n", addr, len*4); return; } memcpy(bp->gunzip_buf, data, len * 4); } - while (len > DMAE_LEN32_MAX) { - bnx2x_write_dmae(bp, bp->gunzip_mapping + offset, - addr + offset, DMAE_LEN32_MAX); - offset += DMAE_LEN32_MAX * 4; - len -= DMAE_LEN32_MAX; - } - bnx2x_write_dmae(bp, bp->gunzip_mapping + offset, addr + offset, len); -} - -#define INIT_MEM_WB(reg, data, reg_off, len) \ - bnx2x_init_wr_wb(bp, reg + reg_off*4, data, len, 0) - -#define INIT_GUNZIP_DMAE(reg, data, reg_off, len) \ - bnx2x_init_wr_wb(bp, reg + reg_off*4, data, len, 1) - -static void bnx2x_init_fill(struct bnx2x *bp, u32 addr, int fill, u32 len) -{ - int offset = 0; - - if ((len * 4) > FW_BUF_SIZE) { - BNX2X_ERR("LARGE DMAE OPERATION ! len 0x%x\n", len * 4); - return; - } - memset(bp->gunzip_buf, fill, len * 4); - - while (len > DMAE_LEN32_MAX) { + if (bp->dmae_ready) { + while (len > DMAE_LEN32_WR_MAX) { + bnx2x_write_dmae(bp, bp->gunzip_mapping + offset, + addr + offset, DMAE_LEN32_WR_MAX); + offset += DMAE_LEN32_WR_MAX * 4; + len -= DMAE_LEN32_WR_MAX; + } bnx2x_write_dmae(bp, bp->gunzip_mapping + offset, - addr + offset, DMAE_LEN32_MAX); - offset += DMAE_LEN32_MAX * 4; - len -= DMAE_LEN32_MAX; - } - bnx2x_write_dmae(bp, bp->gunzip_mapping + offset, addr + offset, len); + addr + offset, len); + } else + bnx2x_init_ind_wr(bp, addr, bp->gunzip_buf, len); } static void bnx2x_init_block(struct bnx2x *bp, u32 op_start, u32 op_end) { - int i; + int is_e1 = CHIP_IS_E1(bp); + int is_e1h = CHIP_IS_E1H(bp); + int is_emul_e1h = (CHIP_REV_IS_EMUL(bp) && is_e1h); + int hw_wr, i; union init_op *op; u32 op_type, addr, len; - const u32 *data; + const u32 *data, *data_base; + + if (CHIP_REV_IS_FPGA(bp)) + hw_wr = OP_WR_FPGA; + else if (CHIP_REV_IS_EMUL(bp)) + hw_wr = OP_WR_EMUL; + else + hw_wr = OP_WR_ASIC; + + if (is_e1) + data_base = init_data_e1; + else /* CHIP_IS_E1H(bp) */ + data_base = init_data_e1h; for (i = op_start; i < op_end; i++) { @@ -209,7 +334,30 @@ static void bnx2x_init_block(struct bnx2x *bp, u32 op_start, u32 op_end) op_type = op->str_wr.op; addr = op->str_wr.offset; len = op->str_wr.data_len; - data = init_data + op->str_wr.data_off; + data = data_base + op->str_wr.data_off; + + /* careful! it must be in order */ + if (unlikely(op_type > OP_WB)) { + + /* If E1 only */ + if (op_type <= OP_WB_E1) { + if (is_e1) + op_type -= (OP_RD_E1 - OP_RD); + + /* If E1H only */ + } else if (op_type <= OP_WB_E1H) { + if (is_e1h) + op_type -= (OP_RD_E1H - OP_RD); + } + + /* HW/EMUL specific */ + if (op_type == hw_wr) + op_type = OP_WR; + + /* EMUL on E1H is special */ + if ((op_type == OP_WR_EMUL_E1H) && is_emul_e1h) + op_type = OP_WR; + } switch (op_type) { case OP_RD: @@ -222,7 +370,7 @@ static void bnx2x_init_block(struct bnx2x *bp, u32 op_start, u32 op_end) bnx2x_init_str_wr(bp, addr, data, len); break; case OP_WB: - bnx2x_init_wr_wb(bp, addr, data, len, 0); + bnx2x_init_wr_wb(bp, addr, data, len, 0, is_e1, 0); break; case OP_SI: bnx2x_init_ind_wr(bp, addr, data, len); @@ -231,10 +379,21 @@ static void bnx2x_init_block(struct bnx2x *bp, u32 op_start, u32 op_end) bnx2x_init_fill(bp, addr, 0, op->zero.len); break; case OP_ZP: - bnx2x_init_wr_wb(bp, addr, data, len, 1); + bnx2x_init_wr_wb(bp, addr, data, len, 1, is_e1, + op->str_wr.data_off); + break; + case OP_WR_64: + bnx2x_init_wr_64(bp, addr, data, len); break; default: - BNX2X_ERR("BAD init operation!\n"); + /* happens whenever an op is of a diff HW */ +#if 0 + DP(NETIF_MSG_HW, "skipping init operation " + "index %d[%d:%d]: type %d addr 0x%x " + "len %d(0x%x)\n", + i, op_start, op_end, op_type, addr, len, len); +#endif + break; } } } @@ -245,7 +404,7 @@ static void bnx2x_init_block(struct bnx2x *bp, u32 op_start, u32 op_end) ****************************************************************************/ /* * This code configures the PCI read/write arbiter - * which implements a wighted round robin + * which implements a weighted round robin * between the virtual queues in the chip. * * The values were derived for each PCI max payload and max request size. @@ -315,7 +474,7 @@ static const struct arb_line write_arb_data[NUM_WR_Q][MAX_WR_ORD + 1] = { {{8 , 64 , 25}, {16 , 64 , 41}, {32 , 64 , 81} } }; -/* register adresses for read queues */ +/* register addresses for read queues */ static const struct arb_line read_arb_addr[NUM_RD_Q-1] = { {PXP2_REG_RQ_BW_RD_L0, PXP2_REG_RQ_BW_RD_ADD0, PXP2_REG_RQ_BW_RD_UBOUND0}, @@ -375,7 +534,7 @@ static const struct arb_line read_arb_addr[NUM_RD_Q-1] = { PXP2_REG_PSWRQ_BW_UB28} }; -/* register adresses for wrtie queues */ +/* register addresses for write queues */ static const struct arb_line write_arb_addr[NUM_WR_Q-1] = { {PXP2_REG_PSWRQ_BW_L1, PXP2_REG_PSWRQ_BW_ADD1, PXP2_REG_PSWRQ_BW_UB1}, @@ -405,14 +564,15 @@ static const struct arb_line write_arb_addr[NUM_WR_Q-1] = { static void bnx2x_init_pxp(struct bnx2x *bp) { + u16 devctl; int r_order, w_order; u32 val, i; pci_read_config_word(bp->pdev, - bp->pcie_cap + PCI_EXP_DEVCTL, (u16 *)&val); - DP(NETIF_MSG_HW, "read 0x%x from devctl\n", (u16)val); - w_order = ((val & PCI_EXP_DEVCTL_PAYLOAD) >> 5); - r_order = ((val & PCI_EXP_DEVCTL_READRQ) >> 12); + bp->pcie_cap + PCI_EXP_DEVCTL, &devctl); + DP(NETIF_MSG_HW, "read 0x%x from devctl\n", devctl); + w_order = ((devctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5); + r_order = ((devctl & PCI_EXP_DEVCTL_READRQ) >> 12); if (r_order > MAX_RD_ORD) { DP(NETIF_MSG_HW, "read order of %d order adjusted to %d\n", @@ -424,6 +584,10 @@ static void bnx2x_init_pxp(struct bnx2x *bp) w_order, MAX_WR_ORD); w_order = MAX_WR_ORD; } + if (CHIP_REV_IS_FPGA(bp)) { + DP(NETIF_MSG_HW, "write order adjusted to 1 for FPGA\n"); + w_order = 0; + } DP(NETIF_MSG_HW, "read order %d write order %d\n", r_order, w_order); for (i = 0; i < NUM_RD_Q-1; i++) { @@ -481,7 +645,20 @@ static void bnx2x_init_pxp(struct bnx2x *bp) REG_WR(bp, PXP2_REG_RQ_PDR_LIMIT, 0xe00); REG_WR(bp, PXP2_REG_WR_USDMDP_TH, (0x18 << w_order)); - REG_WR(bp, PXP2_REG_WR_DMAE_TH, (128 << w_order)/16); + + if (CHIP_IS_E1H(bp)) { + REG_WR(bp, PXP2_REG_WR_HC_MPS, w_order+1); + REG_WR(bp, PXP2_REG_WR_USDM_MPS, w_order+1); + REG_WR(bp, PXP2_REG_WR_CSDM_MPS, w_order+1); + REG_WR(bp, PXP2_REG_WR_TSDM_MPS, w_order+1); + REG_WR(bp, PXP2_REG_WR_XSDM_MPS, w_order+1); + REG_WR(bp, PXP2_REG_WR_QM_MPS, w_order+1); + REG_WR(bp, PXP2_REG_WR_TM_MPS, w_order+1); + REG_WR(bp, PXP2_REG_WR_SRC_MPS, w_order+1); + REG_WR(bp, PXP2_REG_WR_DBG_MPS, w_order+1); + REG_WR(bp, PXP2_REG_WR_DMAE_MPS, 2); /* DMAE is special */ + REG_WR(bp, PXP2_REG_WR_CDU_MPS, w_order+1); + } } @@ -564,6 +741,72 @@ static u8 calc_crc8(u32 data, u8 crc) return crc_res; } +/* registers addresses are not in order + so these arrays help simplify the code */ +static const int cm_start[E1H_FUNC_MAX][9] = { + {MISC_FUNC0_START, TCM_FUNC0_START, UCM_FUNC0_START, CCM_FUNC0_START, + XCM_FUNC0_START, TSEM_FUNC0_START, USEM_FUNC0_START, CSEM_FUNC0_START, + XSEM_FUNC0_START}, + {MISC_FUNC1_START, TCM_FUNC1_START, UCM_FUNC1_START, CCM_FUNC1_START, + XCM_FUNC1_START, TSEM_FUNC1_START, USEM_FUNC1_START, CSEM_FUNC1_START, + XSEM_FUNC1_START}, + {MISC_FUNC2_START, TCM_FUNC2_START, UCM_FUNC2_START, CCM_FUNC2_START, + XCM_FUNC2_START, TSEM_FUNC2_START, USEM_FUNC2_START, CSEM_FUNC2_START, + XSEM_FUNC2_START}, + {MISC_FUNC3_START, TCM_FUNC3_START, UCM_FUNC3_START, CCM_FUNC3_START, + XCM_FUNC3_START, TSEM_FUNC3_START, USEM_FUNC3_START, CSEM_FUNC3_START, + XSEM_FUNC3_START}, + {MISC_FUNC4_START, TCM_FUNC4_START, UCM_FUNC4_START, CCM_FUNC4_START, + XCM_FUNC4_START, TSEM_FUNC4_START, USEM_FUNC4_START, CSEM_FUNC4_START, + XSEM_FUNC4_START}, + {MISC_FUNC5_START, TCM_FUNC5_START, UCM_FUNC5_START, CCM_FUNC5_START, + XCM_FUNC5_START, TSEM_FUNC5_START, USEM_FUNC5_START, CSEM_FUNC5_START, + XSEM_FUNC5_START}, + {MISC_FUNC6_START, TCM_FUNC6_START, UCM_FUNC6_START, CCM_FUNC6_START, + XCM_FUNC6_START, TSEM_FUNC6_START, USEM_FUNC6_START, CSEM_FUNC6_START, + XSEM_FUNC6_START}, + {MISC_FUNC7_START, TCM_FUNC7_START, UCM_FUNC7_START, CCM_FUNC7_START, + XCM_FUNC7_START, TSEM_FUNC7_START, USEM_FUNC7_START, CSEM_FUNC7_START, + XSEM_FUNC7_START} +}; + +static const int cm_end[E1H_FUNC_MAX][9] = { + {MISC_FUNC0_END, TCM_FUNC0_END, UCM_FUNC0_END, CCM_FUNC0_END, + XCM_FUNC0_END, TSEM_FUNC0_END, USEM_FUNC0_END, CSEM_FUNC0_END, + XSEM_FUNC0_END}, + {MISC_FUNC1_END, TCM_FUNC1_END, UCM_FUNC1_END, CCM_FUNC1_END, + XCM_FUNC1_END, TSEM_FUNC1_END, USEM_FUNC1_END, CSEM_FUNC1_END, + XSEM_FUNC1_END}, + {MISC_FUNC2_END, TCM_FUNC2_END, UCM_FUNC2_END, CCM_FUNC2_END, + XCM_FUNC2_END, TSEM_FUNC2_END, USEM_FUNC2_END, CSEM_FUNC2_END, + XSEM_FUNC2_END}, + {MISC_FUNC3_END, TCM_FUNC3_END, UCM_FUNC3_END, CCM_FUNC3_END, + XCM_FUNC3_END, TSEM_FUNC3_END, USEM_FUNC3_END, CSEM_FUNC3_END, + XSEM_FUNC3_END}, + {MISC_FUNC4_END, TCM_FUNC4_END, UCM_FUNC4_END, CCM_FUNC4_END, + XCM_FUNC4_END, TSEM_FUNC4_END, USEM_FUNC4_END, CSEM_FUNC4_END, + XSEM_FUNC4_END}, + {MISC_FUNC5_END, TCM_FUNC5_END, UCM_FUNC5_END, CCM_FUNC5_END, + XCM_FUNC5_END, TSEM_FUNC5_END, USEM_FUNC5_END, CSEM_FUNC5_END, + XSEM_FUNC5_END}, + {MISC_FUNC6_END, TCM_FUNC6_END, UCM_FUNC6_END, CCM_FUNC6_END, + XCM_FUNC6_END, TSEM_FUNC6_END, USEM_FUNC6_END, CSEM_FUNC6_END, + XSEM_FUNC6_END}, + {MISC_FUNC7_END, TCM_FUNC7_END, UCM_FUNC7_END, CCM_FUNC7_END, + XCM_FUNC7_END, TSEM_FUNC7_END, USEM_FUNC7_END, CSEM_FUNC7_END, + XSEM_FUNC7_END}, +}; + +static const int hc_limits[E1H_FUNC_MAX][2] = { + {HC_FUNC0_START, HC_FUNC0_END}, + {HC_FUNC1_START, HC_FUNC1_END}, + {HC_FUNC2_START, HC_FUNC2_END}, + {HC_FUNC3_START, HC_FUNC3_END}, + {HC_FUNC4_START, HC_FUNC4_END}, + {HC_FUNC5_START, HC_FUNC5_END}, + {HC_FUNC6_START, HC_FUNC6_END}, + {HC_FUNC7_START, HC_FUNC7_END} +}; #endif /* BNX2X_INIT_H */ diff --git a/drivers/net/bnx2x_init_values.h b/drivers/net/bnx2x_init_values.h index bef0a9b1..f7d7b48a 100644 --- a/drivers/net/bnx2x_init_values.h +++ b/drivers/net/bnx2x_init_values.h @@ -47,16 +47,21 @@ static const struct raw_op init_ops[] = { {OP_WR, PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_1, 0x10100000}, {OP_WR, PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_2, 0x20100000}, {OP_WR, PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_3, 0x30100000}, - {OP_ZR, PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_4, 0x4}, + {OP_ZR_E1, PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_4, 0x4}, + {OP_WR_E1H, PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_4, 0x40100000}, + {OP_ZR_E1H, PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_5, 0x3}, {OP_WR, PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_0, 0x100000}, {OP_WR, PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_1, 0x12140000}, {OP_WR, PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_2, 0x22140000}, {OP_WR, PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_3, 0x32140000}, - {OP_ZR, PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_4, 0x4}, + {OP_ZR_E1, PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_4, 0x4}, + {OP_WR_E1H, PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_4, 0x42140000}, + {OP_ZR_E1H, PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_5, 0x3}, {OP_RD, PRS_REG_NUM_OF_PACKETS, 0x0}, {OP_RD, PRS_REG_NUM_OF_CFC_FLUSH_MESSAGES, 0x0}, {OP_RD, PRS_REG_NUM_OF_TRANSPARENT_FLUSH_MESSAGES, 0x0}, {OP_RD, PRS_REG_NUM_OF_DEAD_CYCLES, 0x0}, + {OP_WR_E1H, PRS_REG_FCOE_TYPE, 0x8906}, {OP_WR, PRS_REG_FLUSH_REGIONS_TYPE_0, 0xff}, {OP_WR, PRS_REG_FLUSH_REGIONS_TYPE_1, 0xff}, {OP_WR, PRS_REG_FLUSH_REGIONS_TYPE_2, 0xff}, @@ -70,27 +75,32 @@ static const struct raw_op init_ops[] = { {OP_WR, PRS_REG_PACKET_REGIONS_TYPE_1, 0x3f}, {OP_WR, PRS_REG_PACKET_REGIONS_TYPE_2, 0x3f}, {OP_WR, PRS_REG_PACKET_REGIONS_TYPE_3, 0x3f}, - {OP_WR, PRS_REG_PACKET_REGIONS_TYPE_4, 0x0}, + {OP_WR_E1, PRS_REG_PACKET_REGIONS_TYPE_4, 0x0}, + {OP_WR_E1H, PRS_REG_PACKET_REGIONS_TYPE_4, 0x3f}, {OP_WR, PRS_REG_PACKET_REGIONS_TYPE_5, 0x3f}, {OP_WR, PRS_REG_PACKET_REGIONS_TYPE_6, 0x3f}, {OP_WR, PRS_REG_PACKET_REGIONS_TYPE_7, 0x3f}, -#define PRS_COMMON_END 46 -#define PRS_PORT0_START 46 - {OP_WR, PRS_REG_CID_PORT_0, 0x0}, -#define PRS_PORT0_END 47 -#define PRS_PORT1_START 47 - {OP_WR, PRS_REG_CID_PORT_1, 0x800000}, -#define PRS_PORT1_END 48 -#define TSDM_COMMON_START 48 - {OP_WR, TSDM_REG_CFC_RSP_START_ADDR, 0x411}, - {OP_WR, TSDM_REG_CMP_COUNTER_START_ADDR, 0x400}, - {OP_WR, TSDM_REG_Q_COUNTER_START_ADDR, 0x404}, - {OP_WR, TSDM_REG_PCK_END_MSG_START_ADDR, 0x419}, +#define PRS_COMMON_END 52 +#define SRCH_COMMON_START 52 + {OP_WR_E1H, SRC_REG_E1HMF_ENABLE, 0x1}, +#define SRCH_COMMON_END 53 +#define TSDM_COMMON_START 53 + {OP_WR_E1, TSDM_REG_CFC_RSP_START_ADDR, 0x411}, + {OP_WR_E1H, TSDM_REG_CFC_RSP_START_ADDR, 0x211}, + {OP_WR_E1, TSDM_REG_CMP_COUNTER_START_ADDR, 0x400}, + {OP_WR_E1H, TSDM_REG_CMP_COUNTER_START_ADDR, 0x200}, + {OP_WR_E1, TSDM_REG_Q_COUNTER_START_ADDR, 0x404}, + {OP_WR_E1H, TSDM_REG_Q_COUNTER_START_ADDR, 0x204}, + {OP_WR_E1, TSDM_REG_PCK_END_MSG_START_ADDR, 0x419}, + {OP_WR_E1H, TSDM_REG_PCK_END_MSG_START_ADDR, 0x219}, {OP_WR, TSDM_REG_CMP_COUNTER_MAX0, 0xffff}, {OP_WR, TSDM_REG_CMP_COUNTER_MAX1, 0xffff}, {OP_WR, TSDM_REG_CMP_COUNTER_MAX2, 0xffff}, {OP_WR, TSDM_REG_CMP_COUNTER_MAX3, 0xffff}, - {OP_ZR, TSDM_REG_AGG_INT_EVENT_0, 0x80}, + {OP_ZR, TSDM_REG_AGG_INT_EVENT_0, 0x2}, + {OP_WR, TSDM_REG_AGG_INT_EVENT_2, 0x34}, + {OP_WR, TSDM_REG_AGG_INT_EVENT_3, 0x35}, + {OP_ZR, TSDM_REG_AGG_INT_EVENT_4, 0x7c}, {OP_WR, TSDM_REG_ENABLE_IN1, 0x7ffffff}, {OP_WR, TSDM_REG_ENABLE_IN2, 0x3f}, {OP_WR, TSDM_REG_ENABLE_OUT1, 0x7ffffff}, @@ -109,9 +119,12 @@ static const struct raw_op init_ops[] = { {OP_RD, TSDM_REG_NUM_OF_PKT_END_MSG, 0x0}, {OP_RD, TSDM_REG_NUM_OF_PXP_ASYNC_REQ, 0x0}, {OP_RD, TSDM_REG_NUM_OF_ACK_AFTER_PLACE, 0x0}, - {OP_WR, TSDM_REG_TIMER_TICK, 0x3e8}, -#define TSDM_COMMON_END 76 -#define TCM_COMMON_START 76 + {OP_WR_E1, TSDM_REG_INIT_CREDIT_PXP_CTRL, 0x1}, + {OP_WR_ASIC, TSDM_REG_TIMER_TICK, 0x3e8}, + {OP_WR_EMUL, TSDM_REG_TIMER_TICK, 0x1}, + {OP_WR_FPGA, TSDM_REG_TIMER_TICK, 0xa}, +#define TSDM_COMMON_END 91 +#define TCM_COMMON_START 91 {OP_WR, TCM_REG_XX_MAX_LL_SZ, 0x20}, {OP_WR, TCM_REG_XX_OVFL_EVNT_ID, 0x32}, {OP_WR, TCM_REG_TQM_TCM_HDR_P, 0x2150020}, @@ -141,11 +154,18 @@ static const struct raw_op init_ops[] = { {OP_WR, TCM_REG_N_SM_CTX_LD_1, 0x7}, {OP_WR, TCM_REG_N_SM_CTX_LD_2, 0x8}, {OP_WR, TCM_REG_N_SM_CTX_LD_3, 0x8}, - {OP_ZR, TCM_REG_N_SM_CTX_LD_4, 0x4}, + {OP_ZR_E1, TCM_REG_N_SM_CTX_LD_4, 0x4}, + {OP_WR_E1H, TCM_REG_N_SM_CTX_LD_4, 0x1}, + {OP_ZR_E1H, TCM_REG_N_SM_CTX_LD_5, 0x3}, {OP_WR, TCM_REG_TCM_REG0_SZ, 0x6}, - {OP_WR, TCM_REG_PHYS_QNUM0_0, 0xd}, - {OP_WR, TCM_REG_PHYS_QNUM0_1, 0x2d}, - {OP_ZR, TCM_REG_PHYS_QNUM1_0, 0x6}, + {OP_WR_E1, TCM_REG_PHYS_QNUM0_0, 0xd}, + {OP_WR_E1, TCM_REG_PHYS_QNUM0_1, 0x2d}, + {OP_WR_E1, TCM_REG_PHYS_QNUM1_0, 0x7}, + {OP_WR_E1, TCM_REG_PHYS_QNUM1_1, 0x27}, + {OP_WR_E1, TCM_REG_PHYS_QNUM2_0, 0x7}, + {OP_WR_E1, TCM_REG_PHYS_QNUM2_1, 0x27}, + {OP_WR_E1, TCM_REG_PHYS_QNUM3_0, 0x7}, + {OP_WR_E1, TCM_REG_PHYS_QNUM3_1, 0x27}, {OP_WR, TCM_REG_TCM_STORM0_IFEN, 0x1}, {OP_WR, TCM_REG_TCM_STORM1_IFEN, 0x1}, {OP_WR, TCM_REG_TCM_TQM_IFEN, 0x1}, @@ -162,23 +182,75 @@ static const struct raw_op init_ops[] = { {OP_WR, TCM_REG_CDU_SM_WR_IFEN, 0x1}, {OP_WR, TCM_REG_CDU_SM_RD_IFEN, 0x1}, {OP_WR, TCM_REG_TCM_CFC_IFEN, 0x1}, -#define TCM_COMMON_END 126 -#define BRB1_COMMON_START 126 +#define TCM_COMMON_END 148 +#define TCM_FUNC0_START 148 + {OP_WR_E1H, TCM_REG_PHYS_QNUM0_0, 0xd}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM1_0, 0x7}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM2_0, 0x7}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM3_0, 0x7}, +#define TCM_FUNC0_END 152 +#define TCM_FUNC1_START 152 + {OP_WR_E1H, TCM_REG_PHYS_QNUM0_1, 0x2d}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM1_1, 0x27}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM2_1, 0x27}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM3_1, 0x27}, +#define TCM_FUNC1_END 156 +#define TCM_FUNC2_START 156 + {OP_WR_E1H, TCM_REG_PHYS_QNUM0_0, 0x1d}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM1_0, 0x17}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM2_0, 0x17}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM3_0, 0x17}, +#define TCM_FUNC2_END 160 +#define TCM_FUNC3_START 160 + {OP_WR_E1H, TCM_REG_PHYS_QNUM0_1, 0x3d}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM1_1, 0x37}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM2_1, 0x37}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM3_1, 0x37}, +#define TCM_FUNC3_END 164 +#define TCM_FUNC4_START 164 + {OP_WR_E1H, TCM_REG_PHYS_QNUM0_0, 0x4d}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM1_0, 0x47}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM2_0, 0x47}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM3_0, 0x47}, +#define TCM_FUNC4_END 168 +#define TCM_FUNC5_START 168 + {OP_WR_E1H, TCM_REG_PHYS_QNUM0_1, 0x6d}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM1_1, 0x67}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM2_1, 0x67}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM3_1, 0x67}, +#define TCM_FUNC5_END 172 +#define TCM_FUNC6_START 172 + {OP_WR_E1H, TCM_REG_PHYS_QNUM0_0, 0x5d}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM1_0, 0x57}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM2_0, 0x57}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM3_0, 0x57}, +#define TCM_FUNC6_END 176 +#define TCM_FUNC7_START 176 + {OP_WR_E1H, TCM_REG_PHYS_QNUM0_1, 0x7d}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM1_1, 0x77}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM2_1, 0x77}, + {OP_WR_E1H, TCM_REG_PHYS_QNUM3_1, 0x77}, +#define TCM_FUNC7_END 180 +#define BRB1_COMMON_START 180 {OP_SW, BRB1_REG_LL_RAM, 0x2000020}, {OP_WR, BRB1_REG_SOFT_RESET, 0x1}, - {OP_RD, BRB1_REG_NUM_OF_PAUSE_CYCLES_0, 0x0}, - {OP_RD, BRB1_REG_NUM_OF_PAUSE_CYCLES_1, 0x0}, - {OP_RD, BRB1_REG_NUM_OF_PAUSE_CYCLES_2, 0x0}, - {OP_RD, BRB1_REG_NUM_OF_PAUSE_CYCLES_3, 0x0}, - {OP_RD, BRB1_REG_NUM_OF_FULL_CYCLES_0, 0x0}, - {OP_RD, BRB1_REG_NUM_OF_FULL_CYCLES_1, 0x0}, - {OP_RD, BRB1_REG_NUM_OF_FULL_CYCLES_2, 0x0}, - {OP_RD, BRB1_REG_NUM_OF_FULL_CYCLES_3, 0x0}, {OP_RD, BRB1_REG_NUM_OF_FULL_CYCLES_4, 0x0}, {OP_SW, BRB1_REG_FREE_LIST_PRS_CRDT, 0x30220}, {OP_WR, BRB1_REG_SOFT_RESET, 0x0}, -#define BRB1_COMMON_END 139 -#define TSEM_COMMON_START 139 +#define BRB1_COMMON_END 185 +#define BRB1_PORT0_START 185 + {OP_WR_E1, BRB1_REG_PAUSE_LOW_THRESHOLD_0, 0xb8}, + {OP_WR_E1, BRB1_REG_PAUSE_HIGH_THRESHOLD_0, 0x114}, + {OP_RD, BRB1_REG_NUM_OF_PAUSE_CYCLES_0, 0x0}, + {OP_RD, BRB1_REG_NUM_OF_FULL_CYCLES_0, 0x0}, +#define BRB1_PORT0_END 189 +#define BRB1_PORT1_START 189 + {OP_WR_E1, BRB1_REG_PAUSE_LOW_THRESHOLD_1, 0xb8}, + {OP_WR_E1, BRB1_REG_PAUSE_HIGH_THRESHOLD_1, 0x114}, + {OP_RD, BRB1_REG_NUM_OF_PAUSE_CYCLES_1, 0x0}, + {OP_RD, BRB1_REG_NUM_OF_FULL_CYCLES_1, 0x0}, +#define BRB1_PORT1_END 193 +#define TSEM_COMMON_START 193 {OP_RD, TSEM_REG_MSG_NUM_FIC0, 0x0}, {OP_RD, TSEM_REG_MSG_NUM_FIC1, 0x0}, {OP_RD, TSEM_REG_MSG_NUM_FOC0, 0x0}, @@ -222,106 +294,269 @@ static const struct raw_op init_ops[] = { {OP_WR, TSEM_REG_FAST_MEMORY + 0x18040, 0x18}, {OP_WR, TSEM_REG_FAST_MEMORY + 0x18080, 0xc}, {OP_WR, TSEM_REG_FAST_MEMORY + 0x180c0, 0x20}, - {OP_WR, TSEM_REG_FAST_MEMORY + 0x18300, 0x7a120}, + {OP_WR_ASIC, TSEM_REG_FAST_MEMORY + 0x18300, 0x7a120}, + {OP_WR_EMUL, TSEM_REG_FAST_MEMORY + 0x18300, 0x138}, + {OP_WR_FPGA, TSEM_REG_FAST_MEMORY + 0x18300, 0x1388}, {OP_WR, TSEM_REG_FAST_MEMORY + 0x183c0, 0x1f4}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x2000, 0x1b3}, - {OP_SW, TSEM_REG_FAST_MEMORY + 0x2000 + 0x6cc, 0x10223}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x1020, 0xc8}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x1000, 0x2}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x800, 0x2}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x808, 0x2}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x810, 0x4}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x1fa0, 0x4}, - {OP_SW, TSEM_REG_FAST_MEMORY + 0x4cf0, 0x80224}, - {OP_ZP, TSEM_REG_INT_TABLE, 0x8c022c}, - {OP_ZP, TSEM_REG_PRAM, 0x3395024f}, - {OP_ZP, TSEM_REG_PRAM + 0x8000, 0x2c760f35}, - {OP_ZP, TSEM_REG_PRAM + 0x10000, 0x5e1a53}, - {OP_ZP, TSEM_REG_PRAM + 0x18000, 0x5e1a6b}, - {OP_ZP, TSEM_REG_PRAM + 0x20000, 0x5e1a83}, - {OP_ZP, TSEM_REG_PRAM + 0x28000, 0x5e1a9b}, - {OP_ZP, TSEM_REG_PRAM + 0x30000, 0x5e1ab3}, - {OP_ZP, TSEM_REG_PRAM + 0x38000, 0x5e1acb}, -#define TSEM_COMMON_END 202 -#define TSEM_PORT0_START 202 - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x4000, 0x16c}, - {OP_SW, TSEM_REG_FAST_MEMORY + 0x4000 + 0x5b0, 0x21ae3}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x1370, 0xa}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x13c0, 0x6}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x1418, 0xc}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x1478, 0x12}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x1508, 0x90}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x800, 0x2}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x820, 0x10}, - {OP_SW, TSEM_REG_FAST_MEMORY + 0x820 + 0x40, 0x21ae5}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x2908, 0xa}, -#define TSEM_PORT0_END 213 -#define TSEM_PORT1_START 213 - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x45b8, 0x16c}, - {OP_SW, TSEM_REG_FAST_MEMORY + 0x45b8 + 0x5b0, 0x21ae7}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x1398, 0xa}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x13d8, 0x6}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x1448, 0xc}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x14c0, 0x12}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x1748, 0x90}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x808, 0x2}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x868, 0x10}, - {OP_SW, TSEM_REG_FAST_MEMORY + 0x868 + 0x40, 0x21ae9}, - {OP_ZR, TSEM_REG_FAST_MEMORY + 0x2930, 0xa}, -#define TSEM_PORT1_END 224 -#define MISC_COMMON_START 224 - {OP_WR, MISC_REG_GRC_TIMEOUT_EN, 0x1}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x2000, 0xb2}, + {OP_WR_E1H, TSEM_REG_FAST_MEMORY + 0x11480, 0x1}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x23c8, 0xc1}, + {OP_WR_EMUL_E1H, TSEM_REG_FAST_MEMORY + 0x11480, 0x0}, + {OP_SW_E1, TSEM_REG_FAST_MEMORY + 0x23c8 + 0x304, 0x10223}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x1000, 0x2b3}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1020, 0xc8}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x1000 + 0xacc, 0x10223}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1000, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0xa020, 0xc8}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1c18, 0x4}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0xa000, 0x2}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1c10, 0x2}, + {OP_WR_E1H, TSEM_REG_FAST_MEMORY + 0x1ad0, 0x0}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x800, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3678, 0x6}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x808, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3670, 0x2}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x810, 0x4}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5000, 0x2}, + {OP_SW_E1, TSEM_REG_FAST_MEMORY + 0x1fb0, 0x40224}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5008, 0x4}, + {OP_SW_E1, TSEM_REG_FAST_MEMORY + 0x4cb0, 0x80228}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5018, 0x4}, + {OP_ZP_E1, TSEM_REG_INT_TABLE, 0x920000}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5028, 0x4}, + {OP_WR_64_E1, TSEM_REG_INT_TABLE + 0x360, 0x140230}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5038, 0x4}, + {OP_ZP_E1, TSEM_REG_PRAM, 0x32bc0000}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5048, 0x4}, + {OP_ZP_E1, TSEM_REG_PRAM + 0x8000, 0x32e80caf}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5058, 0x4}, + {OP_ZP_E1, TSEM_REG_PRAM + 0x10000, 0xd191969}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5068, 0x4}, + {OP_WR_64_E1, TSEM_REG_PRAM + 0x11af0, 0x5ca20232}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5078, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x4000, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x4008, 0x2}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x6140, 0x200224}, + {OP_ZP_E1H, TSEM_REG_INT_TABLE, 0x980000}, + {OP_WR_64_E1H, TSEM_REG_INT_TABLE + 0x398, 0xd0244}, + {OP_ZP_E1H, TSEM_REG_PRAM, 0x310a0000}, + {OP_ZP_E1H, TSEM_REG_PRAM + 0x8000, 0x355c0c43}, + {OP_ZP_E1H, TSEM_REG_PRAM + 0x10000, 0x1a3b199a}, + {OP_WR_64_E1H, TSEM_REG_PRAM + 0x14200, 0x57c00246}, +#define TSEM_COMMON_END 285 +#define TSEM_PORT0_START 285 + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x22c8, 0x20}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x2000, 0x16c}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x4000, 0x16c}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0xb000, 0x28}, + {OP_WR_E1, TSEM_REG_FAST_MEMORY + 0x4b60, 0x0}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0xb140, 0xc}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1400, 0xa}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x32c0, 0x12}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1450, 0x6}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3350, 0x64}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1500, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x8108, 0x2}, + {OP_SW_E1, TSEM_REG_FAST_MEMORY + 0x1500 + 0x8, 0x50234}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1500 + 0x1c, 0x7}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1570, 0x12}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x9c0, 0x4c}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x800, 0x2}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x820, 0xe}, + {OP_SW_E1, TSEM_REG_FAST_MEMORY + 0x1fb0, 0x20239}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x2908, 0x2}, +#define TSEM_PORT0_END 305 +#define TSEM_PORT1_START 305 + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x2348, 0x20}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x25b0, 0x16c}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x45b0, 0x16c}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0xb0a0, 0x28}, + {OP_WR_E1, TSEM_REG_FAST_MEMORY + 0x4b64, 0x0}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0xb170, 0xc}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1428, 0xa}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3308, 0x12}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1468, 0x6}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x34e0, 0x64}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1538, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x8110, 0x2}, + {OP_SW_E1, TSEM_REG_FAST_MEMORY + 0x1538 + 0x8, 0x5023b}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x1538 + 0x1c, 0x7}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x15b8, 0x12}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0xaf0, 0x4c}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x808, 0x2}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x858, 0xe}, + {OP_SW_E1, TSEM_REG_FAST_MEMORY + 0x1fb8, 0x20240}, + {OP_ZR_E1, TSEM_REG_FAST_MEMORY + 0x2910, 0x2}, +#define TSEM_PORT1_END 325 +#define TSEM_FUNC0_START 325 + {OP_WR_E1H, TSEM_REG_FAST_MEMORY + 0x2b60, 0x0}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3000, 0x2}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x3000 + 0x8, 0x50248}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3000 + 0x1c, 0x7}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x31c0, 0x8}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5000, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5080, 0x12}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x4000, 0x2}, +#define TSEM_FUNC0_END 333 +#define TSEM_FUNC1_START 333 + {OP_WR_E1H, TSEM_REG_FAST_MEMORY + 0x2b64, 0x0}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3038, 0x2}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x3038 + 0x8, 0x5024d}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3038 + 0x1c, 0x7}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x31e0, 0x8}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5010, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x50c8, 0x12}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x4008, 0x2}, +#define TSEM_FUNC1_END 341 +#define TSEM_FUNC2_START 341 + {OP_WR_E1H, TSEM_REG_FAST_MEMORY + 0x2b68, 0x0}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3070, 0x2}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x3070 + 0x8, 0x50252}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3070 + 0x1c, 0x7}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3200, 0x8}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5020, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5110, 0x12}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x4010, 0x20257}, +#define TSEM_FUNC2_END 349 +#define TSEM_FUNC3_START 349 + {OP_WR_E1H, TSEM_REG_FAST_MEMORY + 0x2b6c, 0x0}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x30a8, 0x2}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x30a8 + 0x8, 0x50259}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x30a8 + 0x1c, 0x7}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3220, 0x8}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5030, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5158, 0x12}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x4018, 0x2025e}, +#define TSEM_FUNC3_END 357 +#define TSEM_FUNC4_START 357 + {OP_WR_E1H, TSEM_REG_FAST_MEMORY + 0x2b70, 0x0}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x30e0, 0x2}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x30e0 + 0x8, 0x50260}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x30e0 + 0x1c, 0x7}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3240, 0x8}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5040, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x51a0, 0x12}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x4020, 0x20265}, +#define TSEM_FUNC4_END 365 +#define TSEM_FUNC5_START 365 + {OP_WR_E1H, TSEM_REG_FAST_MEMORY + 0x2b74, 0x0}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3118, 0x2}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x3118 + 0x8, 0x50267}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3118 + 0x1c, 0x7}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3260, 0x8}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5050, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x51e8, 0x12}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x4028, 0x2026c}, +#define TSEM_FUNC5_END 373 +#define TSEM_FUNC6_START 373 + {OP_WR_E1H, TSEM_REG_FAST_MEMORY + 0x2b78, 0x0}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3150, 0x2}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x3150 + 0x8, 0x5026e}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3150 + 0x1c, 0x7}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3280, 0x8}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5060, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5230, 0x12}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x4030, 0x20273}, +#define TSEM_FUNC6_END 381 +#define TSEM_FUNC7_START 381 + {OP_WR_E1H, TSEM_REG_FAST_MEMORY + 0x2b7c, 0x0}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3188, 0x2}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x3188 + 0x8, 0x50275}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x3188 + 0x1c, 0x7}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x32a0, 0x8}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5070, 0x2}, + {OP_ZR_E1H, TSEM_REG_FAST_MEMORY + 0x5278, 0x12}, + {OP_SW_E1H, TSEM_REG_FAST_MEMORY + 0x4038, 0x2027a}, +#define TSEM_FUNC7_END 389 +#define MISC_COMMON_START 389 + {OP_WR_E1, MISC_REG_GRC_TIMEOUT_EN, 0x1}, {OP_WR, MISC_REG_PLL_STORM_CTRL_1, 0x71d2911}, {OP_WR, MISC_REG_PLL_STORM_CTRL_2, 0x0}, {OP_WR, MISC_REG_PLL_STORM_CTRL_3, 0x9c0424}, {OP_WR, MISC_REG_PLL_STORM_CTRL_4, 0x0}, {OP_WR, MISC_REG_LCPLL_CTRL_1, 0x209}, -#define MISC_COMMON_END 230 -#define NIG_COMMON_START 230 + {OP_WR_E1, MISC_REG_SPIO, 0xff000000}, +#define MISC_COMMON_END 396 +#define MISC_FUNC0_START 396 + {OP_WR_E1H, MISC_REG_NIG_WOL_P0, 0x0}, +#define MISC_FUNC0_END 397 +#define MISC_FUNC1_START 397 + {OP_WR_E1H, MISC_REG_NIG_WOL_P1, 0x0}, +#define MISC_FUNC1_END 398 +#define MISC_FUNC2_START 398 + {OP_WR_E1H, MISC_REG_NIG_WOL_P0, 0x0}, +#define MISC_FUNC2_END 399 +#define MISC_FUNC3_START 399 + {OP_WR_E1H, MISC_REG_NIG_WOL_P1, 0x0}, +#define MISC_FUNC3_END 400 +#define MISC_FUNC4_START 400 + {OP_WR_E1H, MISC_REG_NIG_WOL_P0, 0x0}, +#define MISC_FUNC4_END 401 +#define MISC_FUNC5_START 401 + {OP_WR_E1H, MISC_REG_NIG_WOL_P1, 0x0}, +#define MISC_FUNC5_END 402 +#define MISC_FUNC6_START 402 + {OP_WR_E1H, MISC_REG_NIG_WOL_P0, 0x0}, +#define MISC_FUNC6_END 403 +#define MISC_FUNC7_START 403 + {OP_WR_E1H, MISC_REG_NIG_WOL_P1, 0x0}, +#define MISC_FUNC7_END 404 +#define NIG_COMMON_START 404 {OP_WR, NIG_REG_PBF_LB_IN_EN, 0x1}, {OP_WR, NIG_REG_PRS_REQ_IN_EN, 0x1}, {OP_WR, NIG_REG_EGRESS_DEBUG_IN_EN, 0x1}, {OP_WR, NIG_REG_BRB_LB_OUT_EN, 0x1}, {OP_WR, NIG_REG_PRS_EOP_OUT_EN, 0x1}, -#define NIG_COMMON_END 235 -#define NIG_PORT0_START 235 +#define NIG_COMMON_END 409 +#define NIG_PORT0_START 409 {OP_WR, NIG_REG_LLH0_CM_HEADER, 0x300000}, - {OP_WR, NIG_REG_LLH0_EVENT_ID, 0x26}, + {OP_WR, NIG_REG_LLH0_EVENT_ID, 0x28}, {OP_WR, NIG_REG_LLH0_ERROR_MASK, 0x0}, {OP_WR, NIG_REG_LLH0_XCM_MASK, 0x4}, {OP_WR, NIG_REG_LLH0_BRB1_NOT_MCP, 0x1}, {OP_WR, NIG_REG_STATUS_INTERRUPT_PORT0, 0x0}, + {OP_WR_E1H, NIG_REG_LLH0_CLS_TYPE, 0x1}, {OP_WR, NIG_REG_LLH0_XCM_INIT_CREDIT, 0x30}, {OP_WR, NIG_REG_BRB0_PAUSE_IN_EN, 0x1}, {OP_WR, NIG_REG_EGRESS_PBF0_IN_EN, 0x1}, {OP_WR, NIG_REG_BRB0_OUT_EN, 0x1}, {OP_WR, NIG_REG_XCM0_OUT_EN, 0x1}, -#define NIG_PORT0_END 246 -#define NIG_PORT1_START 246 +#define NIG_PORT0_END 421 +#define NIG_PORT1_START 421 {OP_WR, NIG_REG_LLH1_CM_HEADER, 0x300000}, - {OP_WR, NIG_REG_LLH1_EVENT_ID, 0x26}, + {OP_WR, NIG_REG_LLH1_EVENT_ID, 0x28}, {OP_WR, NIG_REG_LLH1_ERROR_MASK, 0x0}, {OP_WR, NIG_REG_LLH1_XCM_MASK, 0x4}, {OP_WR, NIG_REG_LLH1_BRB1_NOT_MCP, 0x1}, {OP_WR, NIG_REG_STATUS_INTERRUPT_PORT1, 0x0}, + {OP_WR_E1H, NIG_REG_LLH1_CLS_TYPE, 0x1}, {OP_WR, NIG_REG_LLH1_XCM_INIT_CREDIT, 0x30}, {OP_WR, NIG_REG_BRB1_PAUSE_IN_EN, 0x1}, {OP_WR, NIG_REG_EGRESS_PBF1_IN_EN, 0x1}, {OP_WR, NIG_REG_BRB1_OUT_EN, 0x1}, {OP_WR, NIG_REG_XCM1_OUT_EN, 0x1}, -#define NIG_PORT1_END 257 -#define UPB_COMMON_START 257 +#define NIG_PORT1_END 433 +#define UPB_COMMON_START 433 {OP_WR, GRCBASE_UPB + PB_REG_CONTROL, 0x20}, -#define UPB_COMMON_END 258 -#define CSDM_COMMON_START 258 - {OP_WR, CSDM_REG_CFC_RSP_START_ADDR, 0xa11}, - {OP_WR, CSDM_REG_CMP_COUNTER_START_ADDR, 0xa00}, - {OP_WR, CSDM_REG_Q_COUNTER_START_ADDR, 0xa04}, +#define UPB_COMMON_END 434 +#define CSDM_COMMON_START 434 + {OP_WR_E1, CSDM_REG_CFC_RSP_START_ADDR, 0xa11}, + {OP_WR_E1H, CSDM_REG_CFC_RSP_START_ADDR, 0x211}, + {OP_WR_E1, CSDM_REG_CMP_COUNTER_START_ADDR, 0xa00}, + {OP_WR_E1H, CSDM_REG_CMP_COUNTER_START_ADDR, 0x200}, + {OP_WR_E1, CSDM_REG_Q_COUNTER_START_ADDR, 0xa04}, + {OP_WR_E1H, CSDM_REG_Q_COUNTER_START_ADDR, 0x204}, {OP_WR, CSDM_REG_CMP_COUNTER_MAX0, 0xffff}, {OP_WR, CSDM_REG_CMP_COUNTER_MAX1, 0xffff}, {OP_WR, CSDM_REG_CMP_COUNTER_MAX2, 0xffff}, {OP_WR, CSDM_REG_CMP_COUNTER_MAX3, 0xffff}, - {OP_ZR, CSDM_REG_AGG_INT_EVENT_0, 0x80}, + {OP_WR, CSDM_REG_AGG_INT_EVENT_0, 0xc6}, + {OP_WR, CSDM_REG_AGG_INT_EVENT_1, 0x0}, + {OP_WR, CSDM_REG_AGG_INT_EVENT_2, 0x34}, + {OP_WR, CSDM_REG_AGG_INT_EVENT_3, 0x35}, + {OP_ZR, CSDM_REG_AGG_INT_EVENT_4, 0x1c}, + {OP_WR, CSDM_REG_AGG_INT_T_0, 0x1}, + {OP_ZR, CSDM_REG_AGG_INT_T_1, 0x5f}, {OP_WR, CSDM_REG_ENABLE_IN1, 0x7ffffff}, {OP_WR, CSDM_REG_ENABLE_IN2, 0x3f}, {OP_WR, CSDM_REG_ENABLE_OUT1, 0x7ffffff}, @@ -340,21 +575,36 @@ static const struct raw_op init_ops[] = { {OP_RD, CSDM_REG_NUM_OF_PKT_END_MSG, 0x0}, {OP_RD, CSDM_REG_NUM_OF_PXP_ASYNC_REQ, 0x0}, {OP_RD, CSDM_REG_NUM_OF_ACK_AFTER_PLACE, 0x0}, - {OP_WR, CSDM_REG_TIMER_TICK, 0x3e8}, -#define CSDM_COMMON_END 285 -#define USDM_COMMON_START 285 - {OP_WR, USDM_REG_CFC_RSP_START_ADDR, 0xa11}, - {OP_WR, USDM_REG_CMP_COUNTER_START_ADDR, 0xa00}, - {OP_WR, USDM_REG_Q_COUNTER_START_ADDR, 0xa04}, - {OP_WR, USDM_REG_PCK_END_MSG_START_ADDR, 0xa21}, + {OP_WR_E1, CSDM_REG_INIT_CREDIT_PXP_CTRL, 0x1}, + {OP_WR_ASIC, CSDM_REG_TIMER_TICK, 0x3e8}, + {OP_WR_EMUL, CSDM_REG_TIMER_TICK, 0x1}, + {OP_WR_FPGA, CSDM_REG_TIMER_TICK, 0xa}, +#define CSDM_COMMON_END 473 +#define USDM_COMMON_START 473 + {OP_WR_E1, USDM_REG_CFC_RSP_START_ADDR, 0xa11}, + {OP_WR_E1H, USDM_REG_CFC_RSP_START_ADDR, 0x411}, + {OP_WR_E1, USDM_REG_CMP_COUNTER_START_ADDR, 0xa00}, + {OP_WR_E1H, USDM_REG_CMP_COUNTER_START_ADDR, 0x400}, + {OP_WR_E1, USDM_REG_Q_COUNTER_START_ADDR, 0xa04}, + {OP_WR_E1H, USDM_REG_Q_COUNTER_START_ADDR, 0x404}, + {OP_WR_E1, USDM_REG_PCK_END_MSG_START_ADDR, 0xa21}, + {OP_WR_E1H, USDM_REG_PCK_END_MSG_START_ADDR, 0x421}, {OP_WR, USDM_REG_CMP_COUNTER_MAX0, 0xffff}, {OP_WR, USDM_REG_CMP_COUNTER_MAX1, 0xffff}, {OP_WR, USDM_REG_CMP_COUNTER_MAX2, 0xffff}, {OP_WR, USDM_REG_CMP_COUNTER_MAX3, 0xffff}, {OP_WR, USDM_REG_AGG_INT_EVENT_0, 0x46}, - {OP_ZR, USDM_REG_AGG_INT_EVENT_1, 0x5f}, + {OP_WR, USDM_REG_AGG_INT_EVENT_1, 0x5}, + {OP_WR, USDM_REG_AGG_INT_EVENT_2, 0x34}, + {OP_WR, USDM_REG_AGG_INT_EVENT_3, 0x35}, + {OP_ZR_E1, USDM_REG_AGG_INT_EVENT_4, 0x5c}, + {OP_WR_E1H, USDM_REG_AGG_INT_EVENT_4, 0x7}, + {OP_ZR_E1H, USDM_REG_AGG_INT_EVENT_5, 0x5b}, {OP_WR, USDM_REG_AGG_INT_MODE_0, 0x1}, - {OP_ZR, USDM_REG_AGG_INT_MODE_1, 0x1f}, + {OP_ZR_E1, USDM_REG_AGG_INT_MODE_1, 0x1f}, + {OP_ZR_E1H, USDM_REG_AGG_INT_MODE_1, 0x3}, + {OP_WR_E1H, USDM_REG_AGG_INT_MODE_4, 0x1}, + {OP_ZR_E1H, USDM_REG_AGG_INT_MODE_5, 0x1b}, {OP_WR, USDM_REG_ENABLE_IN1, 0x7ffffff}, {OP_WR, USDM_REG_ENABLE_IN2, 0x3f}, {OP_WR, USDM_REG_ENABLE_OUT1, 0x7ffffff}, @@ -374,9 +624,12 @@ static const struct raw_op init_ops[] = { {OP_RD, USDM_REG_NUM_OF_PKT_END_MSG, 0x0}, {OP_RD, USDM_REG_NUM_OF_PXP_ASYNC_REQ, 0x0}, {OP_RD, USDM_REG_NUM_OF_ACK_AFTER_PLACE, 0x0}, - {OP_WR, USDM_REG_TIMER_TICK, 0x3e8}, -#define USDM_COMMON_END 317 -#define CCM_COMMON_START 317 + {OP_WR_E1, USDM_REG_INIT_CREDIT_PXP_CTRL, 0x1}, + {OP_WR_ASIC, USDM_REG_TIMER_TICK, 0x3e8}, + {OP_WR_EMUL, USDM_REG_TIMER_TICK, 0x1}, + {OP_WR_FPGA, USDM_REG_TIMER_TICK, 0xa}, +#define USDM_COMMON_END 520 +#define CCM_COMMON_START 520 {OP_WR, CCM_REG_XX_OVFL_EVNT_ID, 0x32}, {OP_WR, CCM_REG_CQM_CCM_HDR_P, 0x2150020}, {OP_WR, CCM_REG_CQM_CCM_HDR_S, 0x2150020}, @@ -401,23 +654,28 @@ static const struct raw_op init_ops[] = { {OP_WR, CCM_REG_XX_INIT_CRD, 0x3}, {OP_WR, CCM_REG_XX_MSG_NUM, 0x18}, {OP_ZR, CCM_REG_XX_TABLE, 0x12}, - {OP_SW, CCM_REG_XX_DESCR_TABLE, 0x241aeb}, + {OP_SW_E1, CCM_REG_XX_DESCR_TABLE, 0x240242}, + {OP_SW_E1H, CCM_REG_XX_DESCR_TABLE, 0x24027c}, {OP_WR, CCM_REG_N_SM_CTX_LD_0, 0x1}, {OP_WR, CCM_REG_N_SM_CTX_LD_1, 0x2}, {OP_WR, CCM_REG_N_SM_CTX_LD_2, 0x8}, {OP_WR, CCM_REG_N_SM_CTX_LD_3, 0x8}, {OP_ZR, CCM_REG_N_SM_CTX_LD_4, 0x4}, {OP_WR, CCM_REG_CCM_REG0_SZ, 0x4}, - {OP_WR, CCM_REG_QOS_PHYS_QNUM0_0, 0x9}, - {OP_WR, CCM_REG_QOS_PHYS_QNUM0_1, 0x29}, - {OP_WR, CCM_REG_QOS_PHYS_QNUM1_0, 0xa}, - {OP_WR, CCM_REG_QOS_PHYS_QNUM1_1, 0x2a}, - {OP_ZR, CCM_REG_QOS_PHYS_QNUM2_0, 0x4}, - {OP_WR, CCM_REG_PHYS_QNUM1_0, 0xc}, - {OP_WR, CCM_REG_PHYS_QNUM1_1, 0x2c}, - {OP_WR, CCM_REG_PHYS_QNUM2_0, 0xb}, - {OP_WR, CCM_REG_PHYS_QNUM2_1, 0x2b}, - {OP_ZR, CCM_REG_PHYS_QNUM3_0, 0x2}, + {OP_WR_E1, CCM_REG_QOS_PHYS_QNUM0_0, 0x9}, + {OP_WR_E1, CCM_REG_QOS_PHYS_QNUM0_1, 0x29}, + {OP_WR_E1, CCM_REG_QOS_PHYS_QNUM1_0, 0xa}, + {OP_WR_E1, CCM_REG_QOS_PHYS_QNUM1_1, 0x2a}, + {OP_WR_E1, CCM_REG_QOS_PHYS_QNUM2_0, 0x7}, + {OP_WR_E1, CCM_REG_QOS_PHYS_QNUM2_1, 0x27}, + {OP_WR_E1, CCM_REG_QOS_PHYS_QNUM3_0, 0x7}, + {OP_WR_E1, CCM_REG_QOS_PHYS_QNUM3_1, 0x27}, + {OP_WR_E1, CCM_REG_PHYS_QNUM1_0, 0xc}, + {OP_WR_E1, CCM_REG_PHYS_QNUM1_1, 0x2c}, + {OP_WR_E1, CCM_REG_PHYS_QNUM2_0, 0xc}, + {OP_WR_E1, CCM_REG_PHYS_QNUM2_1, 0x2c}, + {OP_WR_E1, CCM_REG_PHYS_QNUM3_0, 0xc}, + {OP_WR_E1, CCM_REG_PHYS_QNUM3_1, 0x2c}, {OP_WR, CCM_REG_CCM_STORM0_IFEN, 0x1}, {OP_WR, CCM_REG_CCM_STORM1_IFEN, 0x1}, {OP_WR, CCM_REG_CCM_CQM_IFEN, 0x1}, @@ -433,8 +691,80 @@ static const struct raw_op init_ops[] = { {OP_WR, CCM_REG_CDU_SM_WR_IFEN, 0x1}, {OP_WR, CCM_REG_CDU_SM_RD_IFEN, 0x1}, {OP_WR, CCM_REG_CCM_CFC_IFEN, 0x1}, -#define CCM_COMMON_END 373 -#define UCM_COMMON_START 373 +#define CCM_COMMON_END 581 +#define CCM_FUNC0_START 581 + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM0_0, 0x9}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM1_0, 0xa}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM2_0, 0x7}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM3_0, 0x7}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM1_0, 0xc}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM2_0, 0xb}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM3_0, 0x7}, +#define CCM_FUNC0_END 588 +#define CCM_FUNC1_START 588 + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM0_1, 0x29}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM1_1, 0x2a}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM2_1, 0x27}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM3_1, 0x27}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM1_1, 0x2c}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM2_1, 0x2b}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM3_1, 0x27}, +#define CCM_FUNC1_END 595 +#define CCM_FUNC2_START 595 + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM0_0, 0x19}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM1_0, 0x1a}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM2_0, 0x17}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM3_0, 0x17}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM1_0, 0x1c}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM2_0, 0x1b}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM3_0, 0x17}, +#define CCM_FUNC2_END 602 +#define CCM_FUNC3_START 602 + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM0_1, 0x39}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM1_1, 0x3a}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM2_1, 0x37}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM3_1, 0x37}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM1_1, 0x3c}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM2_1, 0x3b}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM3_1, 0x37}, +#define CCM_FUNC3_END 609 +#define CCM_FUNC4_START 609 + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM0_0, 0x49}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM1_0, 0x4a}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM2_0, 0x47}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM3_0, 0x47}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM1_0, 0x4c}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM2_0, 0x4b}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM3_0, 0x47}, +#define CCM_FUNC4_END 616 +#define CCM_FUNC5_START 616 + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM0_1, 0x69}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM1_1, 0x6a}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM2_1, 0x67}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM3_1, 0x67}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM1_1, 0x6c}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM2_1, 0x6b}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM3_1, 0x67}, +#define CCM_FUNC5_END 623 +#define CCM_FUNC6_START 623 + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM0_0, 0x59}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM1_0, 0x5a}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM2_0, 0x57}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM3_0, 0x57}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM1_0, 0x5c}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM2_0, 0x5b}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM3_0, 0x57}, +#define CCM_FUNC6_END 630 +#define CCM_FUNC7_START 630 + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM0_1, 0x79}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM1_1, 0x7a}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM2_1, 0x77}, + {OP_WR_E1H, CCM_REG_QOS_PHYS_QNUM3_1, 0x77}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM1_1, 0x7c}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM2_1, 0x7b}, + {OP_WR_E1H, CCM_REG_PHYS_QNUM3_1, 0x77}, +#define CCM_FUNC7_END 637 +#define UCM_COMMON_START 637 {OP_WR, UCM_REG_XX_OVFL_EVNT_ID, 0x32}, {OP_WR, UCM_REG_UQM_UCM_HDR_P, 0x2150020}, {OP_WR, UCM_REG_UQM_UCM_HDR_S, 0x2150020}, @@ -457,20 +787,23 @@ static const struct raw_op init_ops[] = { {OP_WR, UCM_REG_FIC1_INIT_CRD, 0x40}, {OP_WR, UCM_REG_TM_INIT_CRD, 0x4}, {OP_WR, UCM_REG_UQM_INIT_CRD, 0x20}, - {OP_WR, UCM_REG_XX_INIT_CRD, 0xc}, - {OP_WR, UCM_REG_XX_MSG_NUM, 0x20}, + {OP_WR, UCM_REG_XX_INIT_CRD, 0xe}, + {OP_WR, UCM_REG_XX_MSG_NUM, 0x1b}, {OP_ZR, UCM_REG_XX_TABLE, 0x12}, - {OP_SW, UCM_REG_XX_DESCR_TABLE, 0x201b0f}, - {OP_WR, UCM_REG_N_SM_CTX_LD_0, 0xa}, + {OP_SW_E1, UCM_REG_XX_DESCR_TABLE, 0x1b0266}, + {OP_SW_E1H, UCM_REG_XX_DESCR_TABLE, 0x1b02a0}, + {OP_WR, UCM_REG_N_SM_CTX_LD_0, 0x10}, {OP_WR, UCM_REG_N_SM_CTX_LD_1, 0x7}, {OP_WR, UCM_REG_N_SM_CTX_LD_2, 0xf}, {OP_WR, UCM_REG_N_SM_CTX_LD_3, 0x10}, - {OP_ZR, UCM_REG_N_SM_CTX_LD_4, 0x4}, + {OP_ZR_E1, UCM_REG_N_SM_CTX_LD_4, 0x4}, + {OP_WR_E1H, UCM_REG_N_SM_CTX_LD_4, 0xb}, + {OP_ZR_E1H, UCM_REG_N_SM_CTX_LD_5, 0x3}, {OP_WR, UCM_REG_UCM_REG0_SZ, 0x3}, - {OP_WR, UCM_REG_PHYS_QNUM0_0, 0xf}, - {OP_WR, UCM_REG_PHYS_QNUM0_1, 0x2f}, - {OP_WR, UCM_REG_PHYS_QNUM1_0, 0xe}, - {OP_WR, UCM_REG_PHYS_QNUM1_1, 0x2e}, + {OP_WR_E1, UCM_REG_PHYS_QNUM0_0, 0xf}, + {OP_WR_E1, UCM_REG_PHYS_QNUM0_1, 0x2f}, + {OP_WR_E1, UCM_REG_PHYS_QNUM1_0, 0xe}, + {OP_WR_E1, UCM_REG_PHYS_QNUM1_1, 0x2e}, {OP_WR, UCM_REG_UCM_STORM0_IFEN, 0x1}, {OP_WR, UCM_REG_UCM_STORM1_IFEN, 0x1}, {OP_WR, UCM_REG_UCM_UQM_IFEN, 0x1}, @@ -488,8 +821,56 @@ static const struct raw_op init_ops[] = { {OP_WR, UCM_REG_CDU_SM_WR_IFEN, 0x1}, {OP_WR, UCM_REG_CDU_SM_RD_IFEN, 0x1}, {OP_WR, UCM_REG_UCM_CFC_IFEN, 0x1}, -#define UCM_COMMON_END 426 -#define USEM_COMMON_START 426 +#define UCM_COMMON_END 693 +#define UCM_FUNC0_START 693 + {OP_WR_E1H, UCM_REG_PHYS_QNUM0_0, 0xf}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM1_0, 0xe}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM2_0, 0x0}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM3_0, 0x0}, +#define UCM_FUNC0_END 697 +#define UCM_FUNC1_START 697 + {OP_WR_E1H, UCM_REG_PHYS_QNUM0_1, 0x2f}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM1_1, 0x2e}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM2_1, 0x0}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM3_1, 0x0}, +#define UCM_FUNC1_END 701 +#define UCM_FUNC2_START 701 + {OP_WR_E1H, UCM_REG_PHYS_QNUM0_0, 0x1f}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM1_0, 0x1e}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM2_0, 0x0}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM3_0, 0x0}, +#define UCM_FUNC2_END 705 +#define UCM_FUNC3_START 705 + {OP_WR_E1H, UCM_REG_PHYS_QNUM0_1, 0x3f}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM1_1, 0x3e}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM2_1, 0x0}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM3_1, 0x0}, +#define UCM_FUNC3_END 709 +#define UCM_FUNC4_START 709 + {OP_WR_E1H, UCM_REG_PHYS_QNUM0_0, 0x4f}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM1_0, 0x4e}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM2_0, 0x0}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM3_0, 0x0}, +#define UCM_FUNC4_END 713 +#define UCM_FUNC5_START 713 + {OP_WR_E1H, UCM_REG_PHYS_QNUM0_1, 0x6f}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM1_1, 0x6e}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM2_1, 0x0}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM3_1, 0x0}, +#define UCM_FUNC5_END 717 +#define UCM_FUNC6_START 717 + {OP_WR_E1H, UCM_REG_PHYS_QNUM0_0, 0x5f}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM1_0, 0x5e}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM2_0, 0x0}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM3_0, 0x0}, +#define UCM_FUNC6_END 721 +#define UCM_FUNC7_START 721 + {OP_WR_E1H, UCM_REG_PHYS_QNUM0_1, 0x7f}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM1_1, 0x7e}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM2_1, 0x0}, + {OP_WR_E1H, UCM_REG_PHYS_QNUM3_1, 0x0}, +#define UCM_FUNC7_END 725 +#define USEM_COMMON_START 725 {OP_RD, USEM_REG_MSG_NUM_FIC0, 0x0}, {OP_RD, USEM_REG_MSG_NUM_FIC1, 0x0}, {OP_RD, USEM_REG_MSG_NUM_FOC0, 0x0}, @@ -533,87 +914,181 @@ static const struct raw_op init_ops[] = { {OP_WR, USEM_REG_FAST_MEMORY + 0x18040, 0x4e}, {OP_WR, USEM_REG_FAST_MEMORY + 0x18080, 0x10}, {OP_WR, USEM_REG_FAST_MEMORY + 0x180c0, 0x20}, - {OP_WR, USEM_REG_FAST_MEMORY + 0x18300, 0x7a120}, + {OP_WR_ASIC, USEM_REG_FAST_MEMORY + 0x18300, 0x7a120}, + {OP_WR_EMUL, USEM_REG_FAST_MEMORY + 0x18300, 0x138}, + {OP_WR_FPGA, USEM_REG_FAST_MEMORY + 0x18300, 0x1388}, {OP_WR, USEM_REG_FAST_MEMORY + 0x183c0, 0x1f4}, - {OP_WR, USEM_REG_FAST_MEMORY + 0x18380, 0x1dcd6500}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x5000, 0x102}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1020, 0xc8}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1000, 0x2}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1e20, 0x40}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3000, 0x400}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x2400, 0x2}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x2408, 0x2}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x2410, 0x6}, - {OP_SW, USEM_REG_FAST_MEMORY + 0x2410 + 0x18, 0x21b2f}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x4b68, 0x2}, - {OP_SW, USEM_REG_FAST_MEMORY + 0x4b68 + 0x8, 0x21b31}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x4b10, 0x2}, - {OP_SW, USEM_REG_FAST_MEMORY + 0x2c30, 0x21b33}, + {OP_WR_ASIC, USEM_REG_FAST_MEMORY + 0x18380, 0x1dcd6500}, + {OP_WR_EMUL, USEM_REG_FAST_MEMORY + 0x18380, 0x4c4b4}, + {OP_WR_FPGA, USEM_REG_FAST_MEMORY + 0x18380, 0x4c4b40}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x5000, 0xc2}, + {OP_WR_EMUL_E1H, USEM_REG_FAST_MEMORY + 0x11480, 0x0}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1020, 0xc8}, + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x11480, 0x1}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1000, 0x2}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x2000, 0x102}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x4f00, 0x40}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x8980, 0xc8}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x57f0, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x8960, 0x2}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x57d8, 0x5}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3228, 0x4}, + {OP_SW_E1, USEM_REG_FAST_MEMORY + 0x57d8 + 0x14, 0x10281}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3200, 0x9}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1c60, 0x20}, + {OP_SW_E1H, USEM_REG_FAST_MEMORY + 0x3200 + 0x24, 0x102bb}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x4b68, 0x2}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3180, 0x20}, + {OP_SW_E1, USEM_REG_FAST_MEMORY + 0x4b68 + 0x8, 0x20282}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5000, 0x400}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x4b10, 0x2}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x4000, 0x2}, + {OP_SW_E1, USEM_REG_FAST_MEMORY + 0x2830, 0x20284}, + {OP_SW_E1H, USEM_REG_FAST_MEMORY + 0x4000 + 0x8, 0x102bc}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x4000 + 0xc, 0x3}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x6b68, 0x2}, + {OP_SW_E1H, USEM_REG_FAST_MEMORY + 0x6b68 + 0x8, 0x202bd}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x6b10, 0x2}, + {OP_SW_E1H, USEM_REG_FAST_MEMORY + 0x74c0, 0x202bf}, {OP_WR, USEM_REG_FAST_MEMORY + 0x10800, 0x1000000}, - {OP_SW, USEM_REG_FAST_MEMORY + 0x10c00, 0x101b35}, + {OP_SW_E1, USEM_REG_FAST_MEMORY + 0x10c00, 0x100286}, + {OP_SW_E1H, USEM_REG_FAST_MEMORY + 0x10c00, 0x1002c1}, {OP_WR, USEM_REG_FAST_MEMORY + 0x10800, 0x0}, - {OP_SW, USEM_REG_FAST_MEMORY + 0x10c40, 0x101b45}, - {OP_ZP, USEM_REG_INT_TABLE, 0xb41b55}, - {OP_ZP, USEM_REG_PRAM, 0x32d01b82}, - {OP_ZP, USEM_REG_PRAM + 0x8000, 0x32172836}, - {OP_ZP, USEM_REG_PRAM + 0x10000, 0x1a7a34bc}, - {OP_ZP, USEM_REG_PRAM + 0x18000, 0x5f3b5b}, - {OP_ZP, USEM_REG_PRAM + 0x20000, 0x5f3b73}, - {OP_ZP, USEM_REG_PRAM + 0x28000, 0x5f3b8b}, - {OP_ZP, USEM_REG_PRAM + 0x30000, 0x5f3ba3}, - {OP_ZP, USEM_REG_PRAM + 0x38000, 0x5f3bbb}, -#define USEM_COMMON_END 498 -#define USEM_PORT0_START 498 - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1400, 0xa0}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1900, 0xa}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1950, 0x2e}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1d00, 0x24}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3000, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3100, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3200, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3300, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3400, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3500, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3600, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3700, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3800, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3900, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3a00, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3b00, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3c00, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3d00, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3e00, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3f00, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x2400, 0x2}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x4b78, 0x52}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x4e08, 0xc}, -#define USEM_PORT0_END 521 -#define USEM_PORT1_START 521 - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1680, 0xa0}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1928, 0xa}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1a08, 0x2e}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x1d90, 0x24}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3080, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3180, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3280, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3380, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3480, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3580, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3680, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3780, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3880, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3980, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3a80, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3b80, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3c80, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3d80, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3e80, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x3f80, 0x20}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x2408, 0x2}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x4cc0, 0x52}, - {OP_ZR, USEM_REG_FAST_MEMORY + 0x4e38, 0xc}, -#define USEM_PORT1_END 544 -#define CSEM_COMMON_START 544 + {OP_SW_E1, USEM_REG_FAST_MEMORY + 0x10c40, 0x100296}, + {OP_SW_E1H, USEM_REG_FAST_MEMORY + 0x10c40, 0x1002d1}, + {OP_ZP_E1, USEM_REG_INT_TABLE, 0xc50000}, + {OP_ZP_E1H, USEM_REG_INT_TABLE, 0xcd0000}, + {OP_WR_64_E1, USEM_REG_INT_TABLE + 0x368, 0x1302a6}, + {OP_WR_64_E1H, USEM_REG_INT_TABLE + 0x3a8, 0xb02e1}, + {OP_ZP_E1, USEM_REG_PRAM, 0x31fd0000}, + {OP_ZP_E1H, USEM_REG_PRAM, 0x23a40000}, + {OP_ZP_E1, USEM_REG_PRAM + 0x8000, 0x32a90c80}, + {OP_ZP_E1H, USEM_REG_PRAM + 0x8000, 0x31c708e9}, + {OP_ZP_E1, USEM_REG_PRAM + 0x10000, 0x38c0192b}, + {OP_ZP_E1H, USEM_REG_PRAM + 0x10000, 0x32a0155b}, + {OP_ZP_E1, USEM_REG_PRAM + 0x18000, 0x432275b}, + {OP_ZP_E1H, USEM_REG_PRAM + 0x18000, 0x394a2203}, + {OP_WR_64_E1, USEM_REG_PRAM + 0x18890, 0x4eee02a8}, + {OP_ZP_E1H, USEM_REG_PRAM + 0x20000, 0x6e63056}, + {OP_WR_64_E1H, USEM_REG_PRAM + 0x20e50, 0x3e3602e3}, +#define USEM_COMMON_END 825 +#define USEM_PORT0_START 825 + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1400, 0xa0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x9000, 0xa0}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1900, 0x10}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x9500, 0x40}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1980, 0x30}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x9700, 0x3c}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1d80, 0x48}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x2450, 0x48}, + {OP_WR_E1, USEM_REG_FAST_MEMORY + 0x1fd0, 0x0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x2770, 0x2}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1b40, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3080, 0x20}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1b60, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x8000, 0x12c}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x5318, 0x98}, + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x3238, 0x0}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x4b78, 0x52}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5000, 0x20}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x4e08, 0xc}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5100, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5200, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5300, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5400, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5500, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5600, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5700, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5800, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5900, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5a00, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5b00, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5c00, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5d00, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5e00, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5f00, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x6b78, 0x52}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x6e08, 0xc}, +#define USEM_PORT0_END 861 +#define USEM_PORT1_START 861 + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1680, 0xa0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x9280, 0xa0}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1940, 0x10}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x9600, 0x40}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1a40, 0x30}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x97f0, 0x3c}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1ea0, 0x48}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x2570, 0x48}, + {OP_WR_E1, USEM_REG_FAST_MEMORY + 0x1fd4, 0x0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x2778, 0x2}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1b50, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3100, 0x20}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x1be0, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x84b0, 0x12c}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x5578, 0x98}, + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x323c, 0x0}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x4cc0, 0x52}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5080, 0x20}, + {OP_ZR_E1, USEM_REG_FAST_MEMORY + 0x4e38, 0xc}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5180, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5280, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5380, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5480, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5580, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5680, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5780, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5880, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5980, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5a80, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5b80, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5c80, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5d80, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5e80, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x5f80, 0x20}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x6cc0, 0x52}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x6e38, 0xc}, +#define USEM_PORT1_END 897 +#define USEM_FUNC0_START 897 + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x26d0, 0x0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3000, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x4018, 0x2}, +#define USEM_FUNC0_END 900 +#define USEM_FUNC1_START 900 + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x26d4, 0x0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3010, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x4028, 0x2}, +#define USEM_FUNC1_END 903 +#define USEM_FUNC2_START 903 + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x26d8, 0x0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3020, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x4038, 0x2}, +#define USEM_FUNC2_END 906 +#define USEM_FUNC3_START 906 + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x26dc, 0x0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3030, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x4048, 0x2}, +#define USEM_FUNC3_END 909 +#define USEM_FUNC4_START 909 + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x26e0, 0x0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3040, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x4058, 0x2}, +#define USEM_FUNC4_END 912 +#define USEM_FUNC5_START 912 + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x26e4, 0x0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3050, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x4068, 0x2}, +#define USEM_FUNC5_END 915 +#define USEM_FUNC6_START 915 + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x26e8, 0x0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3060, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x4078, 0x2}, +#define USEM_FUNC6_END 918 +#define USEM_FUNC7_START 918 + {OP_WR_E1H, USEM_REG_FAST_MEMORY + 0x26ec, 0x0}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x3070, 0x4}, + {OP_ZR_E1H, USEM_REG_FAST_MEMORY + 0x4088, 0x2}, +#define USEM_FUNC7_END 921 +#define CSEM_COMMON_START 921 {OP_RD, CSEM_REG_MSG_NUM_FIC0, 0x0}, {OP_RD, CSEM_REG_MSG_NUM_FIC1, 0x0}, {OP_RD, CSEM_REG_MSG_NUM_FOC0, 0x0}, @@ -658,50 +1133,106 @@ static const struct raw_op init_ops[] = { {OP_WR, CSEM_REG_FAST_MEMORY + 0x18080, 0x30}, {OP_WR, CSEM_REG_FAST_MEMORY + 0x180c0, 0xe}, {OP_WR, CSEM_REG_FAST_MEMORY + 0x183c0, 0x1f4}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x5000, 0x42}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x1020, 0xc8}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x1000, 0x2}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x2000, 0xc0}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x3070, 0x80}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x4280, 0x4}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x25c0, 0x240}, - {OP_SW, CSEM_REG_FAST_MEMORY + 0x25c0 + 0x900, 0x83bd3}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x5000, 0x42}, + {OP_WR_E1H, CSEM_REG_FAST_MEMORY + 0x11480, 0x1}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x1020, 0xc8}, + {OP_WR_EMUL_E1H, CSEM_REG_FAST_MEMORY + 0x11480, 0x0}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x1000, 0x2}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x1000, 0x42}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x2000, 0xc0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x7020, 0xc8}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x3070, 0x80}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x7000, 0x2}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x4280, 0x4}, + {OP_WR_E1H, CSEM_REG_FAST_MEMORY + 0x11e8, 0x0}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x25c0, 0x240}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x3000, 0xc0}, + {OP_SW_E1, CSEM_REG_FAST_MEMORY + 0x2ec8, 0x802aa}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x4070, 0x80}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x5280, 0x4}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x6280, 0x240}, + {OP_SW_E1H, CSEM_REG_FAST_MEMORY + 0x6b88, 0x2002e5}, {OP_WR, CSEM_REG_FAST_MEMORY + 0x10800, 0x13fffff}, - {OP_SW, CSEM_REG_FAST_MEMORY + 0x10c00, 0x103bdb}, + {OP_SW_E1, CSEM_REG_FAST_MEMORY + 0x10c00, 0x1002b2}, + {OP_SW_E1H, CSEM_REG_FAST_MEMORY + 0x10c00, 0x100305}, {OP_WR, CSEM_REG_FAST_MEMORY + 0x10800, 0x0}, - {OP_SW, CSEM_REG_FAST_MEMORY + 0x10c40, 0x103beb}, - {OP_ZP, CSEM_REG_INT_TABLE, 0x5f3bfb}, - {OP_ZP, CSEM_REG_PRAM, 0x32423c13}, - {OP_ZP, CSEM_REG_PRAM + 0x8000, 0xf2148a4}, - {OP_ZP, CSEM_REG_PRAM + 0x10000, 0x5f4c6d}, - {OP_ZP, CSEM_REG_PRAM + 0x18000, 0x5f4c85}, - {OP_ZP, CSEM_REG_PRAM + 0x20000, 0x5f4c9d}, - {OP_ZP, CSEM_REG_PRAM + 0x28000, 0x5f4cb5}, - {OP_ZP, CSEM_REG_PRAM + 0x30000, 0x5f4ccd}, - {OP_ZP, CSEM_REG_PRAM + 0x38000, 0x5f4ce5}, -#define CSEM_COMMON_END 609 -#define CSEM_PORT0_START 609 - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x1400, 0xa0}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x1900, 0x10}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x1980, 0x30}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x2300, 0x2}, - {OP_SW, CSEM_REG_FAST_MEMORY + 0x2300 + 0x8, 0x24cfd}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x3040, 0x6}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x2410, 0x30}, -#define CSEM_PORT0_END 616 -#define CSEM_PORT1_START 616 - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x1680, 0xa0}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x1940, 0x10}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x1a40, 0x30}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x2310, 0x2}, - {OP_SW, CSEM_REG_FAST_MEMORY + 0x2310 + 0x8, 0x24cff}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x3058, 0x6}, - {OP_ZR, CSEM_REG_FAST_MEMORY + 0x24d0, 0x30}, -#define CSEM_PORT1_END 623 -#define XPB_COMMON_START 623 + {OP_SW_E1, CSEM_REG_FAST_MEMORY + 0x10c40, 0x1002c2}, + {OP_SW_E1H, CSEM_REG_FAST_MEMORY + 0x10c40, 0x100315}, + {OP_ZP_E1, CSEM_REG_INT_TABLE, 0x710000}, + {OP_ZP_E1H, CSEM_REG_INT_TABLE, 0x740000}, + {OP_WR_64_E1, CSEM_REG_INT_TABLE + 0x380, 0x1002d2}, + {OP_WR_64_E1H, CSEM_REG_INT_TABLE + 0x380, 0x100325}, + {OP_ZP_E1, CSEM_REG_PRAM, 0x322e0000}, + {OP_ZP_E1H, CSEM_REG_PRAM, 0x321d0000}, + {OP_ZP_E1, CSEM_REG_PRAM + 0x8000, 0x229a0c8c}, + {OP_ZP_E1H, CSEM_REG_PRAM + 0x8000, 0x23960c88}, + {OP_WR_64_E1, CSEM_REG_PRAM + 0xc810, 0x656402d4}, + {OP_WR_64_E1H, CSEM_REG_PRAM + 0xca30, 0x65200327}, +#define CSEM_COMMON_END 1000 +#define CSEM_PORT0_START 1000 + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x1400, 0xa0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x8000, 0xa0}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x1900, 0x10}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x8500, 0x40}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x1980, 0x30}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x8700, 0x3c}, + {OP_WR_E1, CSEM_REG_FAST_MEMORY + 0x5118, 0x0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x4040, 0x6}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x2300, 0xe}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x6040, 0x30}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x3040, 0x6}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x2410, 0x30}, +#define CSEM_PORT0_END 1012 +#define CSEM_PORT1_START 1012 + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x1680, 0xa0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x8280, 0xa0}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x1940, 0x10}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x8600, 0x40}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x1a40, 0x30}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x87f0, 0x3c}, + {OP_WR_E1, CSEM_REG_FAST_MEMORY + 0x511c, 0x0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x4058, 0x6}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x2338, 0xe}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x6100, 0x30}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x3058, 0x6}, + {OP_ZR_E1, CSEM_REG_FAST_MEMORY + 0x24d0, 0x30}, +#define CSEM_PORT1_END 1024 +#define CSEM_FUNC0_START 1024 + {OP_WR_E1H, CSEM_REG_FAST_MEMORY + 0x1148, 0x0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x3300, 0x2}, +#define CSEM_FUNC0_END 1026 +#define CSEM_FUNC1_START 1026 + {OP_WR_E1H, CSEM_REG_FAST_MEMORY + 0x114c, 0x0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x3308, 0x2}, +#define CSEM_FUNC1_END 1028 +#define CSEM_FUNC2_START 1028 + {OP_WR_E1H, CSEM_REG_FAST_MEMORY + 0x1150, 0x0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x3310, 0x2}, +#define CSEM_FUNC2_END 1030 +#define CSEM_FUNC3_START 1030 + {OP_WR_E1H, CSEM_REG_FAST_MEMORY + 0x1154, 0x0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x3318, 0x2}, +#define CSEM_FUNC3_END 1032 +#define CSEM_FUNC4_START 1032 + {OP_WR_E1H, CSEM_REG_FAST_MEMORY + 0x1158, 0x0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x3320, 0x2}, +#define CSEM_FUNC4_END 1034 +#define CSEM_FUNC5_START 1034 + {OP_WR_E1H, CSEM_REG_FAST_MEMORY + 0x115c, 0x0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x3328, 0x2}, +#define CSEM_FUNC5_END 1036 +#define CSEM_FUNC6_START 1036 + {OP_WR_E1H, CSEM_REG_FAST_MEMORY + 0x1160, 0x0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x3330, 0x2}, +#define CSEM_FUNC6_END 1038 +#define CSEM_FUNC7_START 1038 + {OP_WR_E1H, CSEM_REG_FAST_MEMORY + 0x1164, 0x0}, + {OP_ZR_E1H, CSEM_REG_FAST_MEMORY + 0x3338, 0x2}, +#define CSEM_FUNC7_END 1040 +#define XPB_COMMON_START 1040 {OP_WR, GRCBASE_XPB + PB_REG_CONTROL, 0x20}, -#define XPB_COMMON_END 624 -#define DQ_COMMON_START 624 +#define XPB_COMMON_END 1041 +#define DQ_COMMON_START 1041 {OP_WR, DORQ_REG_MODE_ACT, 0x2}, {OP_WR, DORQ_REG_NORM_CID_OFST, 0x3}, {OP_WR, DORQ_REG_OUTST_REQ, 0x4}, @@ -720,8 +1251,8 @@ static const struct raw_op init_ops[] = { {OP_WR, DORQ_REG_DQ_FIFO_AFULL_TH, 0x76c}, {OP_WR, DORQ_REG_REGN, 0x7c1004}, {OP_WR, DORQ_REG_IF_EN, 0xf}, -#define DQ_COMMON_END 642 -#define TIMERS_COMMON_START 642 +#define DQ_COMMON_END 1059 +#define TIMERS_COMMON_START 1059 {OP_ZR, TM_REG_CLIN_PRIOR0_CLIENT, 0x2}, {OP_WR, TM_REG_LIN_SETCLR_FIFO_ALFULL_THR, 0x1c}, {OP_WR, TM_REG_CFC_AC_CRDCNT_VAL, 0x1}, @@ -730,8 +1261,11 @@ static const struct raw_op init_ops[] = { {OP_WR, TM_REG_CLOUT_CRDCNT1_VAL, 0x1}, {OP_WR, TM_REG_CLOUT_CRDCNT2_VAL, 0x1}, {OP_WR, TM_REG_EXP_CRDCNT_VAL, 0x1}, - {OP_WR, TM_REG_PCIARB_CRDCNT_VAL, 0x2}, - {OP_WR, TM_REG_TIMER_TICK_SIZE, 0x3d090}, + {OP_WR_E1, TM_REG_PCIARB_CRDCNT_VAL, 0x1}, + {OP_WR_E1H, TM_REG_PCIARB_CRDCNT_VAL, 0x2}, + {OP_WR_ASIC, TM_REG_TIMER_TICK_SIZE, 0x3d090}, + {OP_WR_EMUL, TM_REG_TIMER_TICK_SIZE, 0x9c}, + {OP_WR_FPGA, TM_REG_TIMER_TICK_SIZE, 0x9c4}, {OP_WR, TM_REG_CL0_CONT_REGION, 0x8}, {OP_WR, TM_REG_CL1_CONT_REGION, 0xc}, {OP_WR, TM_REG_CL2_CONT_REGION, 0x10}, @@ -741,24 +1275,41 @@ static const struct raw_op init_ops[] = { {OP_WR, TM_REG_EN_CL0_INPUT, 0x1}, {OP_WR, TM_REG_EN_CL1_INPUT, 0x1}, {OP_WR, TM_REG_EN_CL2_INPUT, 0x1}, -#define TIMERS_COMMON_END 661 -#define TIMERS_PORT0_START 661 +#define TIMERS_COMMON_END 1081 +#define TIMERS_PORT0_START 1081 + {OP_WR, TM_REG_LIN0_LOGIC_ADDR, 0x0}, + {OP_WR, TM_REG_LIN0_PHY_ADDR_VALID, 0x0}, {OP_ZR, TM_REG_LIN0_PHY_ADDR, 0x2}, -#define TIMERS_PORT0_END 662 -#define TIMERS_PORT1_START 662 +#define TIMERS_PORT0_END 1084 +#define TIMERS_PORT1_START 1084 + {OP_WR, TM_REG_LIN1_LOGIC_ADDR, 0x0}, + {OP_WR, TM_REG_LIN1_PHY_ADDR_VALID, 0x0}, {OP_ZR, TM_REG_LIN1_PHY_ADDR, 0x2}, -#define TIMERS_PORT1_END 663 -#define XSDM_COMMON_START 663 - {OP_WR, XSDM_REG_CFC_RSP_START_ADDR, 0xa14}, - {OP_WR, XSDM_REG_CMP_COUNTER_START_ADDR, 0xa00}, - {OP_WR, XSDM_REG_Q_COUNTER_START_ADDR, 0xa04}, +#define TIMERS_PORT1_END 1087 +#define XSDM_COMMON_START 1087 + {OP_WR_E1, XSDM_REG_CFC_RSP_START_ADDR, 0x614}, + {OP_WR_E1H, XSDM_REG_CFC_RSP_START_ADDR, 0x424}, + {OP_WR_E1, XSDM_REG_CMP_COUNTER_START_ADDR, 0x600}, + {OP_WR_E1H, XSDM_REG_CMP_COUNTER_START_ADDR, 0x410}, + {OP_WR_E1, XSDM_REG_Q_COUNTER_START_ADDR, 0x604}, + {OP_WR_E1H, XSDM_REG_Q_COUNTER_START_ADDR, 0x414}, {OP_WR, XSDM_REG_CMP_COUNTER_MAX0, 0xffff}, {OP_WR, XSDM_REG_CMP_COUNTER_MAX1, 0xffff}, {OP_WR, XSDM_REG_CMP_COUNTER_MAX2, 0xffff}, {OP_WR, XSDM_REG_CMP_COUNTER_MAX3, 0xffff}, {OP_WR, XSDM_REG_AGG_INT_EVENT_0, 0x20}, {OP_WR, XSDM_REG_AGG_INT_EVENT_1, 0x20}, - {OP_ZR, XSDM_REG_AGG_INT_EVENT_2, 0x5e}, + {OP_WR, XSDM_REG_AGG_INT_EVENT_2, 0x34}, + {OP_WR, XSDM_REG_AGG_INT_EVENT_3, 0x35}, + {OP_WR, XSDM_REG_AGG_INT_EVENT_4, 0x23}, + {OP_WR, XSDM_REG_AGG_INT_EVENT_5, 0x24}, + {OP_WR, XSDM_REG_AGG_INT_EVENT_6, 0x25}, + {OP_WR, XSDM_REG_AGG_INT_EVENT_7, 0x26}, + {OP_WR, XSDM_REG_AGG_INT_EVENT_8, 0x27}, + {OP_WR, XSDM_REG_AGG_INT_EVENT_9, 0x29}, + {OP_WR, XSDM_REG_AGG_INT_EVENT_10, 0x2a}, + {OP_WR, XSDM_REG_AGG_INT_EVENT_11, 0x2b}, + {OP_ZR, XSDM_REG_AGG_INT_EVENT_12, 0x54}, {OP_WR, XSDM_REG_AGG_INT_MODE_0, 0x1}, {OP_ZR, XSDM_REG_AGG_INT_MODE_1, 0x1f}, {OP_WR, XSDM_REG_ENABLE_IN1, 0x7ffffff}, @@ -779,9 +1330,12 @@ static const struct raw_op init_ops[] = { {OP_RD, XSDM_REG_NUM_OF_PKT_END_MSG, 0x0}, {OP_RD, XSDM_REG_NUM_OF_PXP_ASYNC_REQ, 0x0}, {OP_RD, XSDM_REG_NUM_OF_ACK_AFTER_PLACE, 0x0}, - {OP_WR, XSDM_REG_TIMER_TICK, 0x3e8}, -#define XSDM_COMMON_END 694 -#define QM_COMMON_START 694 + {OP_WR_E1, XSDM_REG_INIT_CREDIT_PXP_CTRL, 0x1}, + {OP_WR_ASIC, XSDM_REG_TIMER_TICK, 0x3e8}, + {OP_WR_EMUL, XSDM_REG_TIMER_TICK, 0x1}, + {OP_WR_FPGA, XSDM_REG_TIMER_TICK, 0xa}, +#define XSDM_COMMON_END 1134 +#define QM_COMMON_START 1134 {OP_WR, QM_REG_ACTCTRINITVAL_0, 0x6}, {OP_WR, QM_REG_ACTCTRINITVAL_1, 0x5}, {OP_WR, QM_REG_ACTCTRINITVAL_2, 0xa}, @@ -820,13 +1374,27 @@ static const struct raw_op init_ops[] = { {OP_WR, QM_REG_WRRWEIGHTS_3, 0x1010120}, {OP_ZR, QM_REG_QVOQIDX_17, 0x4}, {OP_WR, QM_REG_WRRWEIGHTS_4, 0x1010101}, - {OP_ZR, QM_REG_QVOQIDX_21, 0x4}, - {OP_WR, QM_REG_WRRWEIGHTS_5, 0x1010101}, - {OP_ZR, QM_REG_QVOQIDX_25, 0x4}, - {OP_WR, QM_REG_WRRWEIGHTS_6, 0x1010101}, - {OP_ZR, QM_REG_QVOQIDX_29, 0x3}, + {OP_ZR_E1, QM_REG_QVOQIDX_21, 0x4}, + {OP_WR_E1H, QM_REG_QVOQIDX_21, 0x0}, + {OP_WR_E1, QM_REG_WRRWEIGHTS_5, 0x1010101}, + {OP_WR_E1H, QM_REG_QVOQIDX_22, 0x4}, + {OP_ZR_E1, QM_REG_QVOQIDX_25, 0x4}, + {OP_WR_E1H, QM_REG_QVOQIDX_23, 0x4}, + {OP_WR_E1, QM_REG_WRRWEIGHTS_6, 0x1010101}, + {OP_WR_E1H, QM_REG_QVOQIDX_24, 0x2}, + {OP_ZR_E1, QM_REG_QVOQIDX_29, 0x3}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_5, 0x8012004}, + {OP_WR_E1H, QM_REG_QVOQIDX_25, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_26, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_27, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_28, 0x5}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_6, 0x20081001}, + {OP_WR_E1H, QM_REG_QVOQIDX_29, 0x8}, + {OP_WR_E1H, QM_REG_QVOQIDX_30, 0x6}, + {OP_WR_E1H, QM_REG_QVOQIDX_31, 0x7}, {OP_WR, QM_REG_QVOQIDX_32, 0x1}, - {OP_WR, QM_REG_WRRWEIGHTS_7, 0x1010101}, + {OP_WR_E1, QM_REG_WRRWEIGHTS_7, 0x1010101}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_7, 0x1010120}, {OP_WR, QM_REG_QVOQIDX_33, 0x1}, {OP_WR, QM_REG_QVOQIDX_34, 0x1}, {OP_WR, QM_REG_QVOQIDX_35, 0x1}, @@ -853,36 +1421,169 @@ static const struct raw_op init_ops[] = { {OP_WR, QM_REG_QVOQIDX_52, 0x1}, {OP_WR, QM_REG_WRRWEIGHTS_12, 0x1010101}, {OP_WR, QM_REG_QVOQIDX_53, 0x1}, - {OP_WR, QM_REG_QVOQIDX_54, 0x1}, - {OP_WR, QM_REG_QVOQIDX_55, 0x1}, - {OP_WR, QM_REG_QVOQIDX_56, 0x1}, - {OP_WR, QM_REG_WRRWEIGHTS_13, 0x1010101}, - {OP_WR, QM_REG_QVOQIDX_57, 0x1}, - {OP_WR, QM_REG_QVOQIDX_58, 0x1}, - {OP_WR, QM_REG_QVOQIDX_59, 0x1}, - {OP_WR, QM_REG_QVOQIDX_60, 0x1}, - {OP_WR, QM_REG_WRRWEIGHTS_14, 0x1010101}, - {OP_WR, QM_REG_QVOQIDX_61, 0x1}, - {OP_WR, QM_REG_QVOQIDX_62, 0x1}, - {OP_WR, QM_REG_QVOQIDX_63, 0x1}, - {OP_WR, QM_REG_WRRWEIGHTS_15, 0x1010101}, - {OP_WR, QM_REG_VOQQMASK_0_LSB, 0xffff003f}, - {OP_ZR, QM_REG_VOQQMASK_0_MSB, 0x2}, - {OP_WR, QM_REG_VOQQMASK_1_MSB, 0xffff003f}, - {OP_WR, QM_REG_VOQQMASK_2_LSB, 0x100}, - {OP_WR, QM_REG_VOQQMASK_2_MSB, 0x100}, + {OP_WR_E1, QM_REG_QVOQIDX_54, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_54, 0x4}, + {OP_WR_E1, QM_REG_QVOQIDX_55, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_55, 0x4}, + {OP_WR_E1, QM_REG_QVOQIDX_56, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_56, 0x2}, + {OP_WR_E1, QM_REG_WRRWEIGHTS_13, 0x1010101}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_13, 0x8012004}, + {OP_WR_E1, QM_REG_QVOQIDX_57, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_57, 0x5}, + {OP_WR_E1, QM_REG_QVOQIDX_58, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_58, 0x5}, + {OP_WR_E1, QM_REG_QVOQIDX_59, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_59, 0x5}, + {OP_WR_E1, QM_REG_QVOQIDX_60, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_60, 0x5}, + {OP_WR_E1, QM_REG_WRRWEIGHTS_14, 0x1010101}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_14, 0x20081001}, + {OP_WR_E1, QM_REG_QVOQIDX_61, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_61, 0x8}, + {OP_WR_E1, QM_REG_QVOQIDX_62, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_62, 0x6}, + {OP_WR_E1, QM_REG_QVOQIDX_63, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_63, 0x7}, + {OP_WR_E1, QM_REG_WRRWEIGHTS_15, 0x1010101}, + {OP_WR_E1H, QM_REG_QVOQIDX_64, 0x0}, + {OP_WR_E1, QM_REG_VOQQMASK_0_LSB, 0xffff003f}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_15, 0x1010120}, + {OP_ZR_E1, QM_REG_VOQQMASK_0_MSB, 0x2}, + {OP_ZR_E1H, QM_REG_QVOQIDX_65, 0x4}, + {OP_WR_E1, QM_REG_VOQQMASK_1_MSB, 0xffff003f}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_16, 0x1010101}, + {OP_WR_E1, QM_REG_VOQQMASK_2_LSB, 0x100}, + {OP_WR_E1H, QM_REG_QVOQIDX_69, 0x0}, + {OP_WR_E1, QM_REG_VOQQMASK_2_MSB, 0x100}, + {OP_WR_E1H, QM_REG_QVOQIDX_70, 0x4}, + {OP_WR_E1H, QM_REG_QVOQIDX_71, 0x4}, + {OP_WR_E1H, QM_REG_QVOQIDX_72, 0x2}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_17, 0x8012004}, + {OP_WR_E1H, QM_REG_QVOQIDX_73, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_74, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_75, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_76, 0x5}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_18, 0x20081001}, + {OP_WR_E1H, QM_REG_QVOQIDX_77, 0x8}, + {OP_WR_E1H, QM_REG_QVOQIDX_78, 0x6}, + {OP_WR_E1H, QM_REG_QVOQIDX_79, 0x7}, + {OP_WR_E1H, QM_REG_QVOQIDX_80, 0x0}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_19, 0x1010120}, + {OP_ZR_E1H, QM_REG_QVOQIDX_81, 0x4}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_20, 0x1010101}, + {OP_WR_E1H, QM_REG_QVOQIDX_85, 0x0}, + {OP_WR_E1H, QM_REG_QVOQIDX_86, 0x4}, + {OP_WR_E1H, QM_REG_QVOQIDX_87, 0x4}, + {OP_WR_E1H, QM_REG_QVOQIDX_88, 0x2}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_21, 0x8012004}, + {OP_WR_E1H, QM_REG_QVOQIDX_89, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_90, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_91, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_92, 0x5}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_22, 0x20081001}, + {OP_WR_E1H, QM_REG_QVOQIDX_93, 0x8}, + {OP_WR_E1H, QM_REG_QVOQIDX_94, 0x6}, + {OP_WR_E1H, QM_REG_QVOQIDX_95, 0x7}, + {OP_WR_E1H, QM_REG_QVOQIDX_96, 0x1}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_23, 0x1010120}, + {OP_WR_E1H, QM_REG_QVOQIDX_97, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_98, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_99, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_100, 0x1}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_24, 0x1010101}, + {OP_WR_E1H, QM_REG_QVOQIDX_101, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_102, 0x4}, + {OP_WR_E1H, QM_REG_QVOQIDX_103, 0x4}, + {OP_WR_E1H, QM_REG_QVOQIDX_104, 0x2}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_25, 0x8012004}, + {OP_WR_E1H, QM_REG_QVOQIDX_105, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_106, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_107, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_108, 0x5}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_26, 0x20081001}, + {OP_WR_E1H, QM_REG_QVOQIDX_109, 0x8}, + {OP_WR_E1H, QM_REG_QVOQIDX_110, 0x6}, + {OP_WR_E1H, QM_REG_QVOQIDX_111, 0x7}, + {OP_WR_E1H, QM_REG_QVOQIDX_112, 0x1}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_27, 0x1010120}, + {OP_WR_E1H, QM_REG_QVOQIDX_113, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_114, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_115, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_116, 0x1}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_28, 0x1010101}, + {OP_WR_E1H, QM_REG_QVOQIDX_117, 0x1}, + {OP_WR_E1H, QM_REG_QVOQIDX_118, 0x4}, + {OP_WR_E1H, QM_REG_QVOQIDX_119, 0x4}, + {OP_WR_E1H, QM_REG_QVOQIDX_120, 0x2}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_29, 0x8012004}, + {OP_WR_E1H, QM_REG_QVOQIDX_121, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_122, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_123, 0x5}, + {OP_WR_E1H, QM_REG_QVOQIDX_124, 0x5}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_30, 0x20081001}, + {OP_WR_E1H, QM_REG_QVOQIDX_125, 0x8}, + {OP_WR_E1H, QM_REG_QVOQIDX_126, 0x6}, + {OP_WR_E1H, QM_REG_QVOQIDX_127, 0x7}, + {OP_WR_E1H, QM_REG_WRRWEIGHTS_31, 0x1010120}, + {OP_WR_E1H, QM_REG_VOQQMASK_0_LSB, 0x3f003f}, + {OP_WR_E1H, QM_REG_VOQQMASK_0_MSB, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_0_LSB_EXT_A, 0x3f003f}, + {OP_WR_E1H, QM_REG_VOQQMASK_0_MSB_EXT_A, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_1_LSB, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_1_MSB, 0x3f003f}, + {OP_WR_E1H, QM_REG_VOQQMASK_1_LSB_EXT_A, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_1_MSB_EXT_A, 0x3f003f}, + {OP_WR_E1H, QM_REG_VOQQMASK_2_LSB, 0x1000100}, + {OP_WR_E1H, QM_REG_VOQQMASK_2_MSB, 0x1000100}, + {OP_WR_E1H, QM_REG_VOQQMASK_2_LSB_EXT_A, 0x1000100}, + {OP_WR_E1H, QM_REG_VOQQMASK_2_MSB_EXT_A, 0x1000100}, {OP_ZR, QM_REG_VOQQMASK_3_LSB, 0x2}, - {OP_WR, QM_REG_VOQQMASK_4_LSB, 0xc0}, - {OP_WR, QM_REG_VOQQMASK_4_MSB, 0xc0}, - {OP_WR, QM_REG_VOQQMASK_5_LSB, 0x1e00}, - {OP_WR, QM_REG_VOQQMASK_5_MSB, 0x1e00}, - {OP_WR, QM_REG_VOQQMASK_6_LSB, 0x4000}, - {OP_WR, QM_REG_VOQQMASK_6_MSB, 0x4000}, - {OP_WR, QM_REG_VOQQMASK_7_LSB, 0x8000}, - {OP_WR, QM_REG_VOQQMASK_7_MSB, 0x8000}, - {OP_WR, QM_REG_VOQQMASK_8_LSB, 0x2000}, - {OP_WR, QM_REG_VOQQMASK_8_MSB, 0x2000}, - {OP_ZR, QM_REG_VOQQMASK_9_LSB, 0x7}, + {OP_WR_E1, QM_REG_VOQQMASK_4_LSB, 0xc0}, + {OP_WR_E1H, QM_REG_VOQQMASK_3_LSB_EXT_A, 0x0}, + {OP_WR_E1, QM_REG_VOQQMASK_4_MSB, 0xc0}, + {OP_WR_E1H, QM_REG_VOQQMASK_3_MSB_EXT_A, 0x0}, + {OP_WR_E1, QM_REG_VOQQMASK_5_LSB, 0x1e00}, + {OP_WR_E1H, QM_REG_VOQQMASK_4_LSB, 0xc000c0}, + {OP_WR_E1, QM_REG_VOQQMASK_5_MSB, 0x1e00}, + {OP_WR_E1H, QM_REG_VOQQMASK_4_MSB, 0xc000c0}, + {OP_WR_E1, QM_REG_VOQQMASK_6_LSB, 0x4000}, + {OP_WR_E1H, QM_REG_VOQQMASK_4_LSB_EXT_A, 0xc000c0}, + {OP_WR_E1, QM_REG_VOQQMASK_6_MSB, 0x4000}, + {OP_WR_E1H, QM_REG_VOQQMASK_4_MSB_EXT_A, 0xc000c0}, + {OP_WR_E1, QM_REG_VOQQMASK_7_LSB, 0x8000}, + {OP_WR_E1H, QM_REG_VOQQMASK_5_LSB, 0x1e001e00}, + {OP_WR_E1, QM_REG_VOQQMASK_7_MSB, 0x8000}, + {OP_WR_E1H, QM_REG_VOQQMASK_5_MSB, 0x1e001e00}, + {OP_WR_E1, QM_REG_VOQQMASK_8_LSB, 0x2000}, + {OP_WR_E1H, QM_REG_VOQQMASK_5_LSB_EXT_A, 0x1e001e00}, + {OP_WR_E1, QM_REG_VOQQMASK_8_MSB, 0x2000}, + {OP_WR_E1H, QM_REG_VOQQMASK_5_MSB_EXT_A, 0x1e001e00}, + {OP_ZR_E1, QM_REG_VOQQMASK_9_LSB, 0x7}, + {OP_WR_E1H, QM_REG_VOQQMASK_6_LSB, 0x40004000}, + {OP_WR_E1H, QM_REG_VOQQMASK_6_MSB, 0x40004000}, + {OP_WR_E1H, QM_REG_VOQQMASK_6_LSB_EXT_A, 0x40004000}, + {OP_WR_E1H, QM_REG_VOQQMASK_6_MSB_EXT_A, 0x40004000}, + {OP_WR_E1H, QM_REG_VOQQMASK_7_LSB, 0x80008000}, + {OP_WR_E1H, QM_REG_VOQQMASK_7_MSB, 0x80008000}, + {OP_WR_E1H, QM_REG_VOQQMASK_7_LSB_EXT_A, 0x80008000}, + {OP_WR_E1H, QM_REG_VOQQMASK_7_MSB_EXT_A, 0x80008000}, + {OP_WR_E1H, QM_REG_VOQQMASK_8_LSB, 0x20002000}, + {OP_WR_E1H, QM_REG_VOQQMASK_8_MSB, 0x20002000}, + {OP_WR_E1H, QM_REG_VOQQMASK_8_LSB_EXT_A, 0x20002000}, + {OP_WR_E1H, QM_REG_VOQQMASK_8_MSB_EXT_A, 0x20002000}, + {OP_ZR_E1H, QM_REG_VOQQMASK_9_LSB, 0x2}, + {OP_WR_E1H, QM_REG_VOQQMASK_9_LSB_EXT_A, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_9_MSB_EXT_A, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_10_LSB, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_10_MSB, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_10_LSB_EXT_A, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_10_MSB_EXT_A, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_11_LSB, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_11_MSB, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_11_LSB_EXT_A, 0x0}, + {OP_WR_E1H, QM_REG_VOQQMASK_11_MSB_EXT_A, 0x0}, + {OP_WR_E1H, QM_REG_VOQPORT_0, 0x0}, {OP_WR, QM_REG_VOQPORT_1, 0x1}, {OP_ZR, QM_REG_VOQPORT_2, 0xa}, {OP_WR, QM_REG_CMINTVOQMASK_0, 0xc08}, @@ -893,8 +1594,12 @@ static const struct raw_op init_ops[] = { {OP_WR, QM_REG_CMINTVOQMASK_5, 0x80}, {OP_WR, QM_REG_CMINTVOQMASK_6, 0x200}, {OP_WR, QM_REG_CMINTVOQMASK_7, 0x0}, - {OP_WR, QM_REG_HWAEMPTYMASK_LSB, 0xffff01ff}, - {OP_WR, QM_REG_HWAEMPTYMASK_MSB, 0xffff01ff}, + {OP_WR_E1, QM_REG_HWAEMPTYMASK_LSB, 0xffff01ff}, + {OP_WR_E1H, QM_REG_HWAEMPTYMASK_LSB, 0x1ff01ff}, + {OP_WR_E1, QM_REG_HWAEMPTYMASK_MSB, 0xffff01ff}, + {OP_WR_E1H, QM_REG_HWAEMPTYMASK_MSB, 0x1ff01ff}, + {OP_WR_E1H, QM_REG_HWAEMPTYMASK_LSB_EXT_A, 0x1ff01ff}, + {OP_WR_E1H, QM_REG_HWAEMPTYMASK_MSB_EXT_A, 0x1ff01ff}, {OP_WR, QM_REG_ENBYPVOQMASK, 0x13}, {OP_WR, QM_REG_VOQCREDITAFULLTHR, 0x13f}, {OP_WR, QM_REG_VOQINITCREDIT_0, 0x140}, @@ -910,15 +1615,29 @@ static const struct raw_op init_ops[] = { {OP_WR, QM_REG_BYTECRDINITVAL, 0x8000}, {OP_WR, QM_REG_BYTECRDCOST, 0x25e4}, {OP_WR, QM_REG_BYTECREDITAFULLTHR, 0x7fff}, - {OP_WR, QM_REG_ENBYTECRD_LSB, 0x7}, - {OP_WR, QM_REG_ENBYTECRD_MSB, 0x7}, + {OP_WR_E1, QM_REG_ENBYTECRD_LSB, 0x7}, + {OP_WR_E1H, QM_REG_ENBYTECRD_LSB, 0x70007}, + {OP_WR_E1, QM_REG_ENBYTECRD_MSB, 0x7}, + {OP_WR_E1H, QM_REG_ENBYTECRD_MSB, 0x70007}, + {OP_WR_E1H, QM_REG_ENBYTECRD_LSB_EXT_A, 0x70007}, + {OP_WR_E1H, QM_REG_ENBYTECRD_MSB_EXT_A, 0x70007}, {OP_WR, QM_REG_BYTECRDPORT_LSB, 0x0}, {OP_WR, QM_REG_BYTECRDPORT_MSB, 0xffffffff}, - {OP_WR, QM_REG_FUNCNUMSEL_LSB, 0x0}, - {OP_WR, QM_REG_FUNCNUMSEL_MSB, 0xffffffff}, + {OP_WR_E1, QM_REG_FUNCNUMSEL_LSB, 0x0}, + {OP_WR_E1H, QM_REG_BYTECRDPORT_LSB_EXT_A, 0x0}, + {OP_WR_E1, QM_REG_FUNCNUMSEL_MSB, 0xffffffff}, + {OP_WR_E1H, QM_REG_BYTECRDPORT_MSB_EXT_A, 0xffffffff}, + {OP_WR_E1H, QM_REG_PQ2PCIFUNC_0, 0x0}, + {OP_WR_E1H, QM_REG_PQ2PCIFUNC_1, 0x2}, + {OP_WR_E1H, QM_REG_PQ2PCIFUNC_2, 0x1}, + {OP_WR_E1H, QM_REG_PQ2PCIFUNC_3, 0x3}, + {OP_WR_E1H, QM_REG_PQ2PCIFUNC_4, 0x4}, + {OP_WR_E1H, QM_REG_PQ2PCIFUNC_5, 0x6}, + {OP_WR_E1H, QM_REG_PQ2PCIFUNC_6, 0x5}, + {OP_WR_E1H, QM_REG_PQ2PCIFUNC_7, 0x7}, {OP_WR, QM_REG_CMINTEN, 0xff}, -#define QM_COMMON_END 829 -#define PBF_COMMON_START 829 +#define QM_COMMON_END 1434 +#define PBF_COMMON_START 1434 {OP_WR, PBF_REG_INIT, 0x1}, {OP_WR, PBF_REG_INIT_P4, 0x1}, {OP_WR, PBF_REG_MAC_LB_ENABLE, 0x1}, @@ -926,20 +1645,20 @@ static const struct raw_op init_ops[] = { {OP_WR, PBF_REG_INIT_P4, 0x0}, {OP_WR, PBF_REG_INIT, 0x0}, {OP_WR, PBF_REG_DISABLE_NEW_TASK_PROC_P4, 0x0}, -#define PBF_COMMON_END 836 -#define PBF_PORT0_START 836 +#define PBF_COMMON_END 1441 +#define PBF_PORT0_START 1441 {OP_WR, PBF_REG_INIT_P0, 0x1}, {OP_WR, PBF_REG_MAC_IF0_ENABLE, 0x1}, {OP_WR, PBF_REG_INIT_P0, 0x0}, {OP_WR, PBF_REG_DISABLE_NEW_TASK_PROC_P0, 0x0}, -#define PBF_PORT0_END 840 -#define PBF_PORT1_START 840 +#define PBF_PORT0_END 1445 +#define PBF_PORT1_START 1445 {OP_WR, PBF_REG_INIT_P1, 0x1}, {OP_WR, PBF_REG_MAC_IF1_ENABLE, 0x1}, {OP_WR, PBF_REG_INIT_P1, 0x0}, {OP_WR, PBF_REG_DISABLE_NEW_TASK_PROC_P1, 0x0}, -#define PBF_PORT1_END 844 -#define XCM_COMMON_START 844 +#define PBF_PORT1_END 1449 +#define XCM_COMMON_START 1449 {OP_WR, XCM_REG_XX_OVFL_EVNT_ID, 0x32}, {OP_WR, XCM_REG_XQM_XCM_HDR_P, 0x3150020}, {OP_WR, XCM_REG_XQM_XCM_HDR_S, 0x3150020}, @@ -971,14 +1690,18 @@ static const struct raw_op init_ops[] = { {OP_WR, XCM_REG_TM_INIT_CRD, 0x4}, {OP_WR, XCM_REG_XQM_INIT_CRD, 0x20}, {OP_WR, XCM_REG_XX_INIT_CRD, 0x2}, - {OP_WR, XCM_REG_XX_MSG_NUM, 0x1f}, + {OP_WR_E1, XCM_REG_XX_MSG_NUM, 0x1f}, + {OP_WR_E1H, XCM_REG_XX_MSG_NUM, 0x20}, {OP_ZR, XCM_REG_XX_TABLE, 0x12}, - {OP_SW, XCM_REG_XX_DESCR_TABLE, 0x1f4d01}, + {OP_SW_E1, XCM_REG_XX_DESCR_TABLE, 0x1f02d6}, + {OP_SW_E1H, XCM_REG_XX_DESCR_TABLE, 0x1f0329}, {OP_WR, XCM_REG_N_SM_CTX_LD_0, 0xf}, {OP_WR, XCM_REG_N_SM_CTX_LD_1, 0x7}, {OP_WR, XCM_REG_N_SM_CTX_LD_2, 0xb}, {OP_WR, XCM_REG_N_SM_CTX_LD_3, 0xe}, - {OP_ZR, XCM_REG_N_SM_CTX_LD_4, 0x4}, + {OP_ZR_E1, XCM_REG_N_SM_CTX_LD_4, 0x4}, + {OP_WR_E1H, XCM_REG_N_SM_CTX_LD_4, 0xe}, + {OP_ZR_E1H, XCM_REG_N_SM_CTX_LD_5, 0x3}, {OP_WR, XCM_REG_XCM_REG0_SZ, 0x4}, {OP_WR, XCM_REG_XCM_STORM0_IFEN, 0x1}, {OP_WR, XCM_REG_XCM_STORM1_IFEN, 0x1}, @@ -1000,28 +1723,116 @@ static const struct raw_op init_ops[] = { {OP_WR, XCM_REG_CDU_SM_WR_IFEN, 0x1}, {OP_WR, XCM_REG_CDU_SM_RD_IFEN, 0x1}, {OP_WR, XCM_REG_XCM_CFC_IFEN, 0x1}, -#define XCM_COMMON_END 904 -#define XCM_PORT0_START 904 - {OP_WR, XCM_REG_GLB_DEL_ACK_TMR_VAL_0, 0xc8}, - {OP_WR, XCM_REG_GLB_DEL_ACK_MAX_CNT_0, 0x2}, - {OP_WR, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD00, 0x0}, - {OP_WR, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD10, 0x0}, - {OP_WR, XCM_REG_WU_DA_CNT_CMD00, 0x2}, - {OP_WR, XCM_REG_WU_DA_CNT_CMD10, 0x2}, - {OP_WR, XCM_REG_WU_DA_CNT_UPD_VAL00, 0xff}, - {OP_WR, XCM_REG_WU_DA_CNT_UPD_VAL10, 0xff}, -#define XCM_PORT0_END 912 -#define XCM_PORT1_START 912 - {OP_WR, XCM_REG_GLB_DEL_ACK_TMR_VAL_1, 0xc8}, - {OP_WR, XCM_REG_GLB_DEL_ACK_MAX_CNT_1, 0x2}, - {OP_WR, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD01, 0x0}, - {OP_WR, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD11, 0x0}, - {OP_WR, XCM_REG_WU_DA_CNT_CMD01, 0x2}, - {OP_WR, XCM_REG_WU_DA_CNT_CMD11, 0x2}, - {OP_WR, XCM_REG_WU_DA_CNT_UPD_VAL01, 0xff}, - {OP_WR, XCM_REG_WU_DA_CNT_UPD_VAL11, 0xff}, -#define XCM_PORT1_END 920 -#define XSEM_COMMON_START 920 +#define XCM_COMMON_END 1513 +#define XCM_PORT0_START 1513 + {OP_WR_E1, XCM_REG_GLB_DEL_ACK_TMR_VAL_0, 0xc8}, + {OP_WR_E1, XCM_REG_GLB_DEL_ACK_MAX_CNT_0, 0x2}, + {OP_WR_E1, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD00, 0x0}, + {OP_WR_E1, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD10, 0x0}, + {OP_WR_E1, XCM_REG_WU_DA_CNT_CMD00, 0x2}, + {OP_WR_E1, XCM_REG_WU_DA_CNT_CMD10, 0x2}, + {OP_WR_E1, XCM_REG_WU_DA_CNT_UPD_VAL00, 0xff}, + {OP_WR_E1, XCM_REG_WU_DA_CNT_UPD_VAL10, 0xff}, +#define XCM_PORT0_END 1521 +#define XCM_PORT1_START 1521 + {OP_WR_E1, XCM_REG_GLB_DEL_ACK_TMR_VAL_1, 0xc8}, + {OP_WR_E1, XCM_REG_GLB_DEL_ACK_MAX_CNT_1, 0x2}, + {OP_WR_E1, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD01, 0x0}, + {OP_WR_E1, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD11, 0x0}, + {OP_WR_E1, XCM_REG_WU_DA_CNT_CMD01, 0x2}, + {OP_WR_E1, XCM_REG_WU_DA_CNT_CMD11, 0x2}, + {OP_WR_E1, XCM_REG_WU_DA_CNT_UPD_VAL01, 0xff}, + {OP_WR_E1, XCM_REG_WU_DA_CNT_UPD_VAL11, 0xff}, +#define XCM_PORT1_END 1529 +#define XCM_FUNC0_START 1529 + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_TMR_VAL_0, 0xc8}, + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_MAX_CNT_0, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD00, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD10, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD00, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD10, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL00, 0xff}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL10, 0xff}, + {OP_WR_E1H, XCM_REG_PHYS_QNUM3_0, 0x0}, +#define XCM_FUNC0_END 1538 +#define XCM_FUNC1_START 1538 + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_TMR_VAL_1, 0xc8}, + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_MAX_CNT_1, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD01, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD11, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD01, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD11, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL01, 0xff}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL11, 0xff}, + {OP_WR_E1H, XCM_REG_PHYS_QNUM3_1, 0x0}, +#define XCM_FUNC1_END 1547 +#define XCM_FUNC2_START 1547 + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_TMR_VAL_0, 0xc8}, + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_MAX_CNT_0, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD00, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD10, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD00, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD10, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL00, 0xff}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL10, 0xff}, + {OP_WR_E1H, XCM_REG_PHYS_QNUM3_0, 0x0}, +#define XCM_FUNC2_END 1556 +#define XCM_FUNC3_START 1556 + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_TMR_VAL_1, 0xc8}, + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_MAX_CNT_1, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD01, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD11, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD01, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD11, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL01, 0xff}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL11, 0xff}, + {OP_WR_E1H, XCM_REG_PHYS_QNUM3_1, 0x0}, +#define XCM_FUNC3_END 1565 +#define XCM_FUNC4_START 1565 + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_TMR_VAL_0, 0xc8}, + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_MAX_CNT_0, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD00, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD10, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD00, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD10, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL00, 0xff}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL10, 0xff}, + {OP_WR_E1H, XCM_REG_PHYS_QNUM3_0, 0x0}, +#define XCM_FUNC4_END 1574 +#define XCM_FUNC5_START 1574 + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_TMR_VAL_1, 0xc8}, + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_MAX_CNT_1, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD01, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD11, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD01, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD11, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL01, 0xff}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL11, 0xff}, + {OP_WR_E1H, XCM_REG_PHYS_QNUM3_1, 0x0}, +#define XCM_FUNC5_END 1583 +#define XCM_FUNC6_START 1583 + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_TMR_VAL_0, 0xc8}, + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_MAX_CNT_0, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD00, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD10, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD00, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD10, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL00, 0xff}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL10, 0xff}, + {OP_WR_E1H, XCM_REG_PHYS_QNUM3_0, 0x0}, +#define XCM_FUNC6_END 1592 +#define XCM_FUNC7_START 1592 + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_TMR_VAL_1, 0xc8}, + {OP_WR_E1H, XCM_REG_GLB_DEL_ACK_MAX_CNT_1, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD01, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD11, 0x0}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD01, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_CMD11, 0x2}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL01, 0xff}, + {OP_WR_E1H, XCM_REG_WU_DA_CNT_UPD_VAL11, 0xff}, + {OP_WR_E1H, XCM_REG_PHYS_QNUM3_1, 0x0}, +#define XCM_FUNC7_END 1601 +#define XSEM_COMMON_START 1601 {OP_RD, XSEM_REG_MSG_NUM_FIC0, 0x0}, {OP_RD, XSEM_REG_MSG_NUM_FIC1, 0x0}, {OP_RD, XSEM_REG_MSG_NUM_FOC0, 0x0}, @@ -1065,157 +1876,404 @@ static const struct raw_op init_ops[] = { {OP_WR, XSEM_REG_FAST_MEMORY + 0x18040, 0x18}, {OP_WR, XSEM_REG_FAST_MEMORY + 0x18080, 0xc}, {OP_WR, XSEM_REG_FAST_MEMORY + 0x180c0, 0x66}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x18300, 0x7a120}, + {OP_WR_ASIC, XSEM_REG_FAST_MEMORY + 0x18300, 0x7a120}, + {OP_WR_EMUL, XSEM_REG_FAST_MEMORY + 0x18300, 0x138}, + {OP_WR_FPGA, XSEM_REG_FAST_MEMORY + 0x18300, 0x1388}, {OP_WR, XSEM_REG_FAST_MEMORY + 0x183c0, 0x1f4}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x18340, 0x1f4}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x18380, 0x1dcd6500}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x55d8, 0x2}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5000, 0x48}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x1020, 0xc8}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x1000, 0x2}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5128, 0x92}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x5378, 0x0}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x5380, 0x24d20}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x5428, 0x44d22}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x1518, 0x1}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x1830, 0x0}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x1838, 0x0}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x1820, 0x24d26}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x4ac0, 0x2}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x4ad8, 0x24d28}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x4b08, 0x4}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x1f50, 0x24d2a}, + {OP_WR_ASIC, XSEM_REG_FAST_MEMORY + 0x18340, 0x1f4}, + {OP_WR_EMUL, XSEM_REG_FAST_MEMORY + 0x18340, 0x0}, + {OP_WR_FPGA, XSEM_REG_FAST_MEMORY + 0x18340, 0x5}, + {OP_WR_EMUL, XSEM_REG_FAST_MEMORY + 0x18380, 0x4c4b4}, + {OP_WR_ASIC, XSEM_REG_FAST_MEMORY + 0x18380, 0x1dcd6500}, + {OP_WR_EMUL_E1H, XSEM_REG_FAST_MEMORY + 0x11480, 0x0}, + {OP_WR_FPGA, XSEM_REG_FAST_MEMORY + 0x18380, 0x4c4b40}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x3d20, 0x4}, + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0x11480, 0x1}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x3000, 0x48}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x28c8, 0x4}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x1020, 0xc8}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x2080, 0x48}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x1000, 0x2}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x9020, 0xc8}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x3128, 0x8e}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x9000, 0x2}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x3368, 0x0}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x21a8, 0x86}, + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x3370, 0x202f5}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x2000, 0x20}, + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x3b90, 0x402f7}, + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0x23c8, 0x0}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x1518, 0x1}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x23d0, 0x20348}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x1830, 0x0}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x2498, 0x4034a}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x1838, 0x0}, + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0x2ae8, 0x0}, + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x1820, 0x202fb}, + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0x2ad8, 0x0}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x4ac0, 0x2}, + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0x3010, 0x1}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x4b00, 0x4}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x4040, 0x10}, + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x1f48, 0x202fd}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x4000, 0x10034e}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x6ac0, 0x2}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x6b00, 0x4}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x83a8, 0x2035e}, {OP_WR, XSEM_REG_FAST_MEMORY + 0x10800, 0x0}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x10c00, 0x104d2c}, + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x10c00, 0x1002ff}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x10c00, 0x100360}, {OP_WR, XSEM_REG_FAST_MEMORY + 0x10800, 0x1000000}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x10c40, 0x84d3c}, + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x10c40, 0x8030f}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x10c40, 0x80370}, {OP_WR, XSEM_REG_FAST_MEMORY + 0x10800, 0x2000000}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x10c60, 0x84d44}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x10800, 0x3000000}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x10c80, 0x84d4c}, - {OP_ZP, XSEM_REG_INT_TABLE, 0x814d54}, - {OP_ZP, XSEM_REG_PRAM, 0x35774d75}, - {OP_ZP, XSEM_REG_PRAM + 0x8000, 0x36525ad3}, - {OP_ZP, XSEM_REG_PRAM + 0x10000, 0x27266868}, - {OP_ZP, XSEM_REG_PRAM + 0x18000, 0x5e7232}, - {OP_ZP, XSEM_REG_PRAM + 0x20000, 0x5e724a}, - {OP_ZP, XSEM_REG_PRAM + 0x28000, 0x5e7262}, - {OP_ZP, XSEM_REG_PRAM + 0x30000, 0x5e727a}, - {OP_ZP, XSEM_REG_PRAM + 0x38000, 0x5e7292}, -#define XSEM_COMMON_END 1000 -#define XSEM_PORT0_START 1000 - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x1400, 0xa}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x1450, 0x6}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5388, 0xc}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x5388 + 0x30, 0x272aa}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x55e0, 0x772ac}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5600, 0x7}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x1500, 0x0}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x1508, 0x1}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x3020, 0x2}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x3030, 0x2}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x3000, 0x2}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x3010, 0x2}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x3040, 0x0}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x3048, 0xc}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x3048 + 0x30, 0x272b3}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x30b8, 0x1}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x4ac8, 0x272b5}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x4b18, 0x42}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x4d28, 0x4}, -#define XSEM_PORT0_END 1019 -#define XSEM_PORT1_START 1019 - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x1428, 0xa}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x1468, 0x6}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x53c0, 0xc}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x53c0 + 0x30, 0x272b7}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x5620, 0x772b9}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5640, 0x7}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x1504, 0x0}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x150c, 0x1}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x3028, 0x2}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x3038, 0x2}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x3008, 0x2}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x3018, 0x2}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x3044, 0x0}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x3080, 0xc}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x3080 + 0x30, 0x272c0}, - {OP_WR, XSEM_REG_FAST_MEMORY + 0x30bc, 0x1}, - {OP_SW, XSEM_REG_FAST_MEMORY + 0x4ad0, 0x272c2}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x4c20, 0x42}, - {OP_ZR, XSEM_REG_FAST_MEMORY + 0x4d38, 0x4}, -#define XSEM_PORT1_END 1038 -#define CDU_COMMON_START 1038 + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x10c60, 0x80317}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x10c60, 0x80378}, + {OP_ZP_E1, XSEM_REG_INT_TABLE, 0xae0000}, + {OP_ZP_E1H, XSEM_REG_INT_TABLE, 0xba0000}, + {OP_WR_64_E1, XSEM_REG_INT_TABLE + 0x368, 0x13031f}, + {OP_WR_64_E1H, XSEM_REG_INT_TABLE + 0x3a8, 0xb0380}, + {OP_ZP_E1, XSEM_REG_PRAM, 0x342c0000}, + {OP_ZP_E1H, XSEM_REG_PRAM, 0x2ece0000}, + {OP_ZP_E1, XSEM_REG_PRAM + 0x8000, 0x38620d0b}, + {OP_ZP_E1H, XSEM_REG_PRAM + 0x8000, 0x38690bb4}, + {OP_ZP_E1, XSEM_REG_PRAM + 0x10000, 0x3e511b24}, + {OP_ZP_E1H, XSEM_REG_PRAM + 0x10000, 0x3a2d19cf}, + {OP_ZP_E1, XSEM_REG_PRAM + 0x18000, 0x22df2ab9}, + {OP_ZP_E1H, XSEM_REG_PRAM + 0x18000, 0x3b5a285b}, + {OP_WR_64_E1, XSEM_REG_PRAM + 0x1cba0, 0x468c0321}, + {OP_ZP_E1H, XSEM_REG_PRAM + 0x20000, 0x12f63732}, + {OP_WR_64_E1H, XSEM_REG_PRAM + 0x224d0, 0x3b660382}, +#define XSEM_COMMON_END 1712 +#define XSEM_PORT0_START 1712 + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x3ba0, 0x14}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0xc000, 0xfc}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x3c40, 0x1c}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x24a8, 0x14}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x1400, 0xa}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x2548, 0x1c}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x1450, 0x6}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x2628, 0x1c}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x3378, 0xfc}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x2708, 0x1c}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x3b58, 0x0}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x27e8, 0x1c}, + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x3d30, 0x100323}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0xa000, 0x28}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x1500, 0x0}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0xa140, 0xc}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x1508, 0x1}, + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0x3000, 0x1}, + {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5020, 0x2}, + {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5030, 0x2}, + {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5000, 0x2}, + {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5010, 0x2}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x5040, 0x0}, + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0x5208, 0x1}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x5048, 0xe}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x6ac8, 0x20384}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x50b8, 0x1}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x6b10, 0x42}, + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x4ac8, 0x20333}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x6d20, 0x4}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x4b10, 0x42}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x4d20, 0x4}, +#define XSEM_PORT0_END 1744 +#define XSEM_PORT1_START 1744 + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x3bf0, 0x14}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0xc3f0, 0xfc}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x3cb0, 0x1c}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x24f8, 0x14}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x1428, 0xa}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x25b8, 0x1c}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x1468, 0x6}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x2698, 0x1c}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x3768, 0xfc}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x2778, 0x1c}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x3b5c, 0x0}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x2858, 0x1c}, + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x3d70, 0x100335}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0xa0a0, 0x28}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x1504, 0x0}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0xa170, 0xc}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x150c, 0x1}, + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0x3004, 0x1}, + {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5028, 0x2}, + {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5038, 0x2}, + {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5008, 0x2}, + {OP_ZR, XSEM_REG_FAST_MEMORY + 0x5018, 0x2}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x5044, 0x0}, + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0x520c, 0x1}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x5080, 0xe}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x6ad0, 0x20386}, + {OP_WR_E1, XSEM_REG_FAST_MEMORY + 0x50bc, 0x1}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x6c18, 0x42}, + {OP_SW_E1, XSEM_REG_FAST_MEMORY + 0x4ad0, 0x20345}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x6d30, 0x4}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x4c18, 0x42}, + {OP_ZR_E1, XSEM_REG_FAST_MEMORY + 0x4d30, 0x4}, +#define XSEM_PORT1_END 1776 +#define XSEM_FUNC0_START 1776 + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0xc7e0, 0x0}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x28d8, 0x100388}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x5048, 0xe}, +#define XSEM_FUNC0_END 1779 +#define XSEM_FUNC1_START 1779 + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0xc7e4, 0x0}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x2918, 0x100398}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x5080, 0xe}, +#define XSEM_FUNC1_END 1782 +#define XSEM_FUNC2_START 1782 + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0xc7e8, 0x0}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x2958, 0x1003a8}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x50b8, 0xe}, +#define XSEM_FUNC2_END 1785 +#define XSEM_FUNC3_START 1785 + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0xc7ec, 0x0}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x2998, 0x1003b8}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x50f0, 0xe}, +#define XSEM_FUNC3_END 1788 +#define XSEM_FUNC4_START 1788 + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0xc7f0, 0x0}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x29d8, 0x1003c8}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x5128, 0xe}, +#define XSEM_FUNC4_END 1791 +#define XSEM_FUNC5_START 1791 + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0xc7f4, 0x0}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x2a18, 0x1003d8}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x5160, 0xe}, +#define XSEM_FUNC5_END 1794 +#define XSEM_FUNC6_START 1794 + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0xc7f8, 0x0}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x2a58, 0x1003e8}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x5198, 0xe}, +#define XSEM_FUNC6_END 1797 +#define XSEM_FUNC7_START 1797 + {OP_WR_E1H, XSEM_REG_FAST_MEMORY + 0xc7fc, 0x0}, + {OP_SW_E1H, XSEM_REG_FAST_MEMORY + 0x2a98, 0x1003f8}, + {OP_ZR_E1H, XSEM_REG_FAST_MEMORY + 0x51d0, 0xe}, +#define XSEM_FUNC7_END 1800 +#define CDU_COMMON_START 1800 {OP_WR, CDU_REG_CDU_CONTROL0, 0x1}, + {OP_WR_E1H, CDU_REG_MF_MODE, 0x1}, {OP_WR, CDU_REG_CDU_CHK_MASK0, 0x3d000}, {OP_WR, CDU_REG_CDU_CHK_MASK1, 0x3d}, - {OP_WB, CDU_REG_L1TT, 0x20072c4}, - {OP_WB, CDU_REG_MATT, 0x2074c4}, - {OP_ZR, CDU_REG_MATT + 0x80, 0x20}, -#define CDU_COMMON_END 1044 -#define DMAE_COMMON_START 1044 + {OP_WB_E1, CDU_REG_L1TT, 0x2000347}, + {OP_WB_E1H, CDU_REG_L1TT, 0x2000408}, + {OP_WB_E1, CDU_REG_MATT, 0x200547}, + {OP_WB_E1H, CDU_REG_MATT, 0x280608}, + {OP_ZR_E1, CDU_REG_MATT + 0x80, 0x2}, + {OP_WB_E1, CDU_REG_MATT + 0x88, 0x60567}, + {OP_ZR, CDU_REG_MATT + 0xa0, 0x18}, +#define CDU_COMMON_END 1811 +#define DMAE_COMMON_START 1811 + {OP_ZR, DMAE_REG_CMD_MEM, 0xe0}, {OP_WR, DMAE_REG_CRC16C_INIT, 0x0}, {OP_WR, DMAE_REG_CRC16T10_INIT, 0x1}, - {OP_WR, DMAE_REG_PXP_REQ_INIT_CRD, 0x2}, + {OP_WR_E1, DMAE_REG_PXP_REQ_INIT_CRD, 0x1}, + {OP_WR_E1H, DMAE_REG_PXP_REQ_INIT_CRD, 0x2}, {OP_WR, DMAE_REG_PCI_IFEN, 0x1}, {OP_WR, DMAE_REG_GRC_IFEN, 0x1}, -#define DMAE_COMMON_END 1049 -#define PXP_COMMON_START 1049 - {OP_SI, PXP_REG_HST_INBOUND_INT + 0x400, 0x574e4}, - {OP_SI, PXP_REG_HST_INBOUND_INT + 0x420, 0x574e9}, - {OP_SI, PXP_REG_HST_INBOUND_INT, 0x574ee}, -#define PXP_COMMON_END 1052 -#define CFC_COMMON_START 1052 +#define DMAE_COMMON_END 1818 +#define PXP_COMMON_START 1818 + {OP_WB_E1, PXP_REG_HST_INBOUND_INT + 0x400, 0x5056d}, + {OP_WB_E1H, PXP_REG_HST_INBOUND_INT + 0x400, 0x50630}, + {OP_WB_E1, PXP_REG_HST_INBOUND_INT + 0x420, 0x50572}, + {OP_WB_E1H, PXP_REG_HST_INBOUND_INT, 0x50635}, + {OP_WB_E1, PXP_REG_HST_INBOUND_INT, 0x50577}, + {OP_WB_E1H, PXP_REG_HST_INBOUND_INT + 0x20, 0x5063a}, +#define PXP_COMMON_END 1824 +#define CFC_COMMON_START 1824 + {OP_ZR_E1H, CFC_REG_LINK_LIST, 0x100}, {OP_WR, CFC_REG_CONTROL0, 0x10}, {OP_WR, CFC_REG_DISABLE_ON_ERROR, 0x3fff}, {OP_WR, CFC_REG_LCREQ_WEIGHTS, 0x84924a}, -#define CFC_COMMON_END 1055 -#define HC_COMMON_START 1055 - {OP_ZR, HC_REG_USTORM_ADDR_FOR_COALESCE, 0x4}, -#define HC_COMMON_END 1056 -#define HC_PORT0_START 1056 - {OP_WR, HC_REG_CONFIG_0, 0x1080}, - {OP_ZR, HC_REG_UC_RAM_ADDR_0, 0x2}, - {OP_WR, HC_REG_ATTN_NUM_P0, 0x10}, - {OP_WR, HC_REG_LEADING_EDGE_0, 0xffff}, - {OP_WR, HC_REG_TRAILING_EDGE_0, 0xffff}, - {OP_WR, HC_REG_AGG_INT_0, 0x0}, - {OP_WR, HC_REG_ATTN_IDX, 0x0}, - {OP_ZR, HC_REG_ATTN_BIT, 0x2}, - {OP_WR, HC_REG_VQID_0, 0x2b5}, - {OP_WR, HC_REG_PCI_CONFIG_0, 0x0}, - {OP_ZR, HC_REG_P0_PROD_CONS, 0x4a}, - {OP_ZR, HC_REG_PBA_COMMAND, 0x2}, - {OP_WR, HC_REG_INT_MASK, 0x1ffff}, - {OP_WR, HC_REG_CONFIG_0, 0x1a82}, - {OP_ZR, HC_REG_STATISTIC_COUNTERS, 0x24}, - {OP_ZR, HC_REG_STATISTIC_COUNTERS + 0x120, 0x4a}, - {OP_ZR, HC_REG_STATISTIC_COUNTERS + 0x370, 0x4a}, - {OP_ZR, HC_REG_STATISTIC_COUNTERS + 0x5c0, 0x4a}, -#define HC_PORT0_END 1074 -#define HC_PORT1_START 1074 - {OP_WR, HC_REG_CONFIG_1, 0x1080}, - {OP_ZR, HC_REG_UC_RAM_ADDR_1, 0x2}, - {OP_WR, HC_REG_ATTN_NUM_P1, 0x10}, - {OP_WR, HC_REG_LEADING_EDGE_1, 0xffff}, - {OP_WR, HC_REG_TRAILING_EDGE_1, 0xffff}, - {OP_WR, HC_REG_AGG_INT_1, 0x0}, - {OP_WR, HC_REG_ATTN_IDX + 0x4, 0x0}, - {OP_ZR, HC_REG_ATTN_BIT + 0x8, 0x2}, - {OP_WR, HC_REG_VQID_1, 0x2b5}, - {OP_WR, HC_REG_PCI_CONFIG_1, 0x0}, - {OP_ZR, HC_REG_P1_PROD_CONS, 0x4a}, - {OP_ZR, HC_REG_PBA_COMMAND + 0x8, 0x2}, - {OP_WR, HC_REG_INT_MASK + 0x4, 0x1ffff}, - {OP_WR, HC_REG_CONFIG_1, 0x1a82}, - {OP_ZR, HC_REG_STATISTIC_COUNTERS + 0x90, 0x24}, - {OP_ZR, HC_REG_STATISTIC_COUNTERS + 0x248, 0x4a}, - {OP_ZR, HC_REG_STATISTIC_COUNTERS + 0x498, 0x4a}, - {OP_ZR, HC_REG_STATISTIC_COUNTERS + 0x6e8, 0x4a}, -#define HC_PORT1_END 1092 -#define PXP2_COMMON_START 1092 - {OP_WR, PXP2_REG_PGL_CONTROL0, 0xe38324}, +#define CFC_COMMON_END 1828 +#define HC_COMMON_START 1828 + {OP_ZR_E1, HC_REG_USTORM_ADDR_FOR_COALESCE, 0x4}, +#define HC_COMMON_END 1829 +#define HC_PORT0_START 1829 + {OP_WR_E1, HC_REG_CONFIG_0, 0x1080}, + {OP_ZR_E1, HC_REG_UC_RAM_ADDR_0, 0x2}, + {OP_WR_E1, HC_REG_ATTN_NUM_P0, 0x10}, + {OP_WR_E1, HC_REG_LEADING_EDGE_0, 0xffff}, + {OP_WR_E1, HC_REG_TRAILING_EDGE_0, 0xffff}, + {OP_WR_E1, HC_REG_AGG_INT_0, 0x0}, + {OP_WR_E1, HC_REG_ATTN_IDX, 0x0}, + {OP_ZR_E1, HC_REG_ATTN_BIT, 0x2}, + {OP_WR_E1, HC_REG_VQID_0, 0x2b5}, + {OP_WR_E1, HC_REG_PCI_CONFIG_0, 0x0}, + {OP_ZR_E1, HC_REG_P0_PROD_CONS, 0x4a}, + {OP_WR_E1, HC_REG_INT_MASK, 0x1ffff}, + {OP_ZR_E1, HC_REG_PBA_COMMAND, 0x2}, + {OP_WR_E1, HC_REG_CONFIG_0, 0x1a80}, + {OP_ZR_E1, HC_REG_STATISTIC_COUNTERS, 0x24}, + {OP_ZR_E1, HC_REG_STATISTIC_COUNTERS + 0x120, 0x4a}, + {OP_ZR_E1, HC_REG_STATISTIC_COUNTERS + 0x370, 0x4a}, + {OP_ZR_E1, HC_REG_STATISTIC_COUNTERS + 0x5c0, 0x4a}, +#define HC_PORT0_END 1847 +#define HC_PORT1_START 1847 + {OP_WR_E1, HC_REG_CONFIG_1, 0x1080}, + {OP_ZR_E1, HC_REG_UC_RAM_ADDR_1, 0x2}, + {OP_WR_E1, HC_REG_ATTN_NUM_P1, 0x10}, + {OP_WR_E1, HC_REG_LEADING_EDGE_1, 0xffff}, + {OP_WR_E1, HC_REG_TRAILING_EDGE_1, 0xffff}, + {OP_WR_E1, HC_REG_AGG_INT_1, 0x0}, + {OP_WR_E1, HC_REG_ATTN_IDX + 0x4, 0x0}, + {OP_ZR_E1, HC_REG_ATTN_BIT + 0x8, 0x2}, + {OP_WR_E1, HC_REG_VQID_1, 0x2b5}, + {OP_WR_E1, HC_REG_PCI_CONFIG_1, 0x0}, + {OP_ZR_E1, HC_REG_P1_PROD_CONS, 0x4a}, + {OP_WR_E1, HC_REG_INT_MASK + 0x4, 0x1ffff}, + {OP_ZR_E1, HC_REG_PBA_COMMAND + 0x8, 0x2}, + {OP_WR_E1, HC_REG_CONFIG_1, 0x1a80}, + {OP_ZR_E1, HC_REG_STATISTIC_COUNTERS + 0x90, 0x24}, + {OP_ZR_E1, HC_REG_STATISTIC_COUNTERS + 0x248, 0x4a}, + {OP_ZR_E1, HC_REG_STATISTIC_COUNTERS + 0x498, 0x4a}, + {OP_ZR_E1, HC_REG_STATISTIC_COUNTERS + 0x6e8, 0x4a}, +#define HC_PORT1_END 1865 +#define HC_FUNC0_START 1865 + {OP_WR_E1H, HC_REG_CONFIG_0, 0x1080}, + {OP_WR_E1H, HC_REG_FUNC_NUM_P0, 0x0}, + {OP_WR_E1H, HC_REG_ATTN_NUM_P0, 0x10}, + {OP_WR_E1H, HC_REG_ATTN_IDX, 0x0}, + {OP_ZR_E1H, HC_REG_ATTN_BIT, 0x2}, + {OP_WR_E1H, HC_REG_VQID_0, 0x2b5}, + {OP_WR_E1H, HC_REG_PCI_CONFIG_0, 0x0}, + {OP_ZR_E1H, HC_REG_P0_PROD_CONS, 0x4a}, + {OP_WR_E1H, HC_REG_INT_MASK, 0x1ffff}, + {OP_ZR_E1H, HC_REG_PBA_COMMAND, 0x2}, + {OP_WR_E1H, HC_REG_CONFIG_0, 0x1a80}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS, 0x24}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x120, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x370, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x5c0, 0x4a}, +#define HC_FUNC0_END 1880 +#define HC_FUNC1_START 1880 + {OP_WR_E1H, HC_REG_CONFIG_1, 0x1080}, + {OP_WR_E1H, HC_REG_FUNC_NUM_P1, 0x1}, + {OP_WR_E1H, HC_REG_ATTN_NUM_P1, 0x10}, + {OP_WR_E1H, HC_REG_ATTN_IDX + 0x4, 0x0}, + {OP_ZR_E1H, HC_REG_ATTN_BIT + 0x8, 0x2}, + {OP_WR_E1H, HC_REG_VQID_1, 0x2b5}, + {OP_WR_E1H, HC_REG_PCI_CONFIG_1, 0x0}, + {OP_ZR_E1H, HC_REG_P1_PROD_CONS, 0x4a}, + {OP_WR_E1H, HC_REG_INT_MASK + 0x4, 0x1ffff}, + {OP_ZR_E1H, HC_REG_PBA_COMMAND + 0x8, 0x2}, + {OP_WR_E1H, HC_REG_CONFIG_1, 0x1a80}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x90, 0x24}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x248, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x498, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x6e8, 0x4a}, +#define HC_FUNC1_END 1895 +#define HC_FUNC2_START 1895 + {OP_WR_E1H, HC_REG_CONFIG_0, 0x1080}, + {OP_WR_E1H, HC_REG_FUNC_NUM_P0, 0x2}, + {OP_WR_E1H, HC_REG_ATTN_NUM_P0, 0x10}, + {OP_WR_E1H, HC_REG_ATTN_IDX, 0x0}, + {OP_ZR_E1H, HC_REG_ATTN_BIT, 0x2}, + {OP_WR_E1H, HC_REG_VQID_0, 0x2b5}, + {OP_WR_E1H, HC_REG_PCI_CONFIG_0, 0x0}, + {OP_ZR_E1H, HC_REG_P0_PROD_CONS, 0x4a}, + {OP_WR_E1H, HC_REG_INT_MASK, 0x1ffff}, + {OP_ZR_E1H, HC_REG_PBA_COMMAND, 0x2}, + {OP_WR_E1H, HC_REG_CONFIG_0, 0x1a80}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS, 0x24}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x120, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x370, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x5c0, 0x4a}, +#define HC_FUNC2_END 1910 +#define HC_FUNC3_START 1910 + {OP_WR_E1H, HC_REG_CONFIG_1, 0x1080}, + {OP_WR_E1H, HC_REG_FUNC_NUM_P1, 0x3}, + {OP_WR_E1H, HC_REG_ATTN_NUM_P1, 0x10}, + {OP_WR_E1H, HC_REG_ATTN_IDX + 0x4, 0x0}, + {OP_ZR_E1H, HC_REG_ATTN_BIT + 0x8, 0x2}, + {OP_WR_E1H, HC_REG_VQID_1, 0x2b5}, + {OP_WR_E1H, HC_REG_PCI_CONFIG_1, 0x0}, + {OP_ZR_E1H, HC_REG_P1_PROD_CONS, 0x4a}, + {OP_WR_E1H, HC_REG_INT_MASK + 0x4, 0x1ffff}, + {OP_ZR_E1H, HC_REG_PBA_COMMAND + 0x8, 0x2}, + {OP_WR_E1H, HC_REG_CONFIG_1, 0x1a80}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x90, 0x24}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x248, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x498, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x6e8, 0x4a}, +#define HC_FUNC3_END 1925 +#define HC_FUNC4_START 1925 + {OP_WR_E1H, HC_REG_CONFIG_0, 0x1080}, + {OP_WR_E1H, HC_REG_FUNC_NUM_P0, 0x4}, + {OP_WR_E1H, HC_REG_ATTN_NUM_P0, 0x10}, + {OP_WR_E1H, HC_REG_ATTN_IDX, 0x0}, + {OP_ZR_E1H, HC_REG_ATTN_BIT, 0x2}, + {OP_WR_E1H, HC_REG_VQID_0, 0x2b5}, + {OP_WR_E1H, HC_REG_PCI_CONFIG_0, 0x0}, + {OP_ZR_E1H, HC_REG_P0_PROD_CONS, 0x4a}, + {OP_WR_E1H, HC_REG_INT_MASK, 0x1ffff}, + {OP_ZR_E1H, HC_REG_PBA_COMMAND, 0x2}, + {OP_WR_E1H, HC_REG_CONFIG_0, 0x1a80}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS, 0x24}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x120, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x370, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x5c0, 0x4a}, +#define HC_FUNC4_END 1940 +#define HC_FUNC5_START 1940 + {OP_WR_E1H, HC_REG_CONFIG_1, 0x1080}, + {OP_WR_E1H, HC_REG_FUNC_NUM_P1, 0x5}, + {OP_WR_E1H, HC_REG_ATTN_NUM_P1, 0x10}, + {OP_WR_E1H, HC_REG_ATTN_IDX + 0x4, 0x0}, + {OP_ZR_E1H, HC_REG_ATTN_BIT + 0x8, 0x2}, + {OP_WR_E1H, HC_REG_VQID_1, 0x2b5}, + {OP_WR_E1H, HC_REG_PCI_CONFIG_1, 0x0}, + {OP_ZR_E1H, HC_REG_P1_PROD_CONS, 0x4a}, + {OP_WR_E1H, HC_REG_INT_MASK + 0x4, 0x1ffff}, + {OP_ZR_E1H, HC_REG_PBA_COMMAND + 0x8, 0x2}, + {OP_WR_E1H, HC_REG_CONFIG_1, 0x1a80}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x90, 0x24}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x248, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x498, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x6e8, 0x4a}, +#define HC_FUNC5_END 1955 +#define HC_FUNC6_START 1955 + {OP_WR_E1H, HC_REG_CONFIG_0, 0x1080}, + {OP_WR_E1H, HC_REG_FUNC_NUM_P0, 0x6}, + {OP_WR_E1H, HC_REG_ATTN_NUM_P0, 0x10}, + {OP_WR_E1H, HC_REG_ATTN_IDX, 0x0}, + {OP_ZR_E1H, HC_REG_ATTN_BIT, 0x2}, + {OP_WR_E1H, HC_REG_VQID_0, 0x2b5}, + {OP_WR_E1H, HC_REG_PCI_CONFIG_0, 0x0}, + {OP_ZR_E1H, HC_REG_P0_PROD_CONS, 0x4a}, + {OP_WR_E1H, HC_REG_INT_MASK, 0x1ffff}, + {OP_ZR_E1H, HC_REG_PBA_COMMAND, 0x2}, + {OP_WR_E1H, HC_REG_CONFIG_0, 0x1a80}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS, 0x24}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x120, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x370, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x5c0, 0x4a}, +#define HC_FUNC6_END 1970 +#define HC_FUNC7_START 1970 + {OP_WR_E1H, HC_REG_CONFIG_1, 0x1080}, + {OP_WR_E1H, HC_REG_FUNC_NUM_P1, 0x7}, + {OP_WR_E1H, HC_REG_ATTN_NUM_P1, 0x10}, + {OP_WR_E1H, HC_REG_ATTN_IDX + 0x4, 0x0}, + {OP_ZR_E1H, HC_REG_ATTN_BIT + 0x8, 0x2}, + {OP_WR_E1H, HC_REG_VQID_1, 0x2b5}, + {OP_WR_E1H, HC_REG_PCI_CONFIG_1, 0x0}, + {OP_ZR_E1H, HC_REG_P1_PROD_CONS, 0x4a}, + {OP_WR_E1H, HC_REG_INT_MASK + 0x4, 0x1ffff}, + {OP_ZR_E1H, HC_REG_PBA_COMMAND + 0x8, 0x2}, + {OP_WR_E1H, HC_REG_CONFIG_1, 0x1a80}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x90, 0x24}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x248, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x498, 0x4a}, + {OP_ZR_E1H, HC_REG_STATISTIC_COUNTERS + 0x6e8, 0x4a}, +#define HC_FUNC7_END 1985 +#define PXP2_COMMON_START 1985 + {OP_WR_E1H, PXP2_REG_RQ_DRAM_ALIGN, 0x1}, + {OP_WR, PXP2_REG_PGL_CONTROL0, 0xe38340}, {OP_WR, PXP2_REG_PGL_CONTROL1, 0x3c10}, + {OP_WR_E1H, PXP2_REG_RQ_ELT_DISABLE, 0x1}, + {OP_WR_E1H, PXP2_REG_WR_REV_MODE, 0x0}, {OP_WR, PXP2_REG_PGL_INT_TSDM_0, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_TSDM_1, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_TSDM_2, 0xffffffff}, @@ -1224,13 +2282,14 @@ static const struct raw_op init_ops[] = { {OP_WR, PXP2_REG_PGL_INT_TSDM_5, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_TSDM_6, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_TSDM_7, 0xffffffff}, - {OP_WR, PXP2_REG_PGL_INT_USDM_1, 0xffffffff}, + {OP_WR_E1, PXP2_REG_PGL_INT_USDM_1, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_USDM_2, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_USDM_3, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_USDM_4, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_USDM_5, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_USDM_6, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_USDM_7, 0xffffffff}, + {OP_WR_E1H, PXP2_REG_PGL_INT_XSDM_1, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_XSDM_2, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_XSDM_3, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_XSDM_4, 0xffffffff}, @@ -1245,9 +2304,12 @@ static const struct raw_op init_ops[] = { {OP_WR, PXP2_REG_PGL_INT_CSDM_5, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_CSDM_6, 0xffffffff}, {OP_WR, PXP2_REG_PGL_INT_CSDM_7, 0xffffffff}, - {OP_WR, PXP2_REG_PGL_INT_XSDM_0, 0xffff5330}, - {OP_WR, PXP2_REG_PGL_INT_XSDM_1, 0xffff5348}, - {OP_WR, PXP2_REG_PGL_INT_USDM_0, 0xf0003000}, + {OP_WR_E1, PXP2_REG_PGL_INT_XSDM_0, 0xffff3330}, + {OP_WR_E1H, PXP2_REG_PGL_INT_XSDM_0, 0xff802000}, + {OP_WR_E1, PXP2_REG_PGL_INT_XSDM_1, 0xffff3340}, + {OP_WR_E1H, PXP2_REG_PGL_INT_USDM_0, 0xf0005000}, + {OP_WR_E1, PXP2_REG_PGL_INT_USDM_0, 0xf0003000}, + {OP_WR_E1H, PXP2_REG_PGL_INT_USDM_1, 0xf0008000}, {OP_WR, PXP2_REG_RD_MAX_BLKS_VQ6, 0x8}, {OP_WR, PXP2_REG_RD_MAX_BLKS_VQ9, 0x8}, {OP_WR, PXP2_REG_RD_MAX_BLKS_VQ10, 0x8}, @@ -1257,6 +2319,7 @@ static const struct raw_op init_ops[] = { {OP_WR, PXP2_REG_RD_MAX_BLKS_VQ19, 0x4}, {OP_WR, PXP2_REG_RD_MAX_BLKS_VQ22, 0x0}, {OP_WR, PXP2_REG_RD_START_INIT, 0x1}, + {OP_WR, PXP2_REG_WR_DMAE_TH, 0x3f}, {OP_WR, PXP2_REG_RQ_BW_RD_ADD0, 0x40}, {OP_WR, PXP2_REG_PSWRQ_BW_ADD1, 0x1808}, {OP_WR, PXP2_REG_PSWRQ_BW_ADD2, 0x803}, @@ -1321,58 +2384,102 @@ static const struct raw_op init_ops[] = { {OP_WR, PXP2_REG_PSWRQ_BW_L2, 0x1004}, {OP_WR, PXP2_REG_PSWRQ_BW_RD, 0x106440}, {OP_WR, PXP2_REG_PSWRQ_BW_WR, 0x106440}, + {OP_WR_E1H, PXP2_REG_RQ_ILT_MODE, 0x1}, {OP_WR, PXP2_REG_RQ_RBC_DONE, 0x1}, -#define PXP2_COMMON_END 1200 -#define MISC_AEU_COMMON_START 1200 +#define PXP2_COMMON_END 2102 +#define MISC_AEU_COMMON_START 2102 {OP_ZR, MISC_REG_AEU_GENERAL_ATTN_0, 0x16}, -#define MISC_AEU_COMMON_END 1201 -#define MISC_AEU_PORT0_START 1201 - {OP_WR, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0, 0xbf5c0000}, - {OP_WR, MISC_REG_AEU_ENABLE2_FUNC_0_OUT_0, 0xfff51fef}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE1_NIG_0, 0x55540000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE2_NIG_0, 0x55555555}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE3_NIG_0, 0x5555}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_NIG_0, 0xf0000000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE1_PXP_0, 0x55540000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE2_PXP_0, 0x55555555}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE3_PXP_0, 0x5555}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_PXP_0, 0xf0000000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE1_NIG_1, 0x55540000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE2_NIG_1, 0x55555555}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE3_NIG_1, 0x5555}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_NIG_1, 0xf0000000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE1_PXP_1, 0x0}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE2_PXP_1, 0x10000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE3_PXP_1, 0x5014}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_PXP_1, 0x0}, + {OP_WR_E1H, MISC_REG_AEU_CLR_LATCH_SIGNAL, 0xc00}, + {OP_WR_E1H, MISC_REG_AEU_GENERAL_MASK, 0x3}, +#define MISC_AEU_COMMON_END 2121 +#define MISC_AEU_PORT0_START 2121 + {OP_WR_E1, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0, 0xbf5c0000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0, 0xff5c0000}, + {OP_WR_E1, MISC_REG_AEU_ENABLE2_FUNC_0_OUT_0, 0xfff51fef}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE2_FUNC_0_OUT_0, 0xfff55fff}, {OP_WR, MISC_REG_AEU_ENABLE3_FUNC_0_OUT_0, 0xffff}, - {OP_WR, MISC_REG_AEU_ENABLE4_FUNC_0_OUT_0, 0x500003e0}, + {OP_WR_E1, MISC_REG_AEU_ENABLE4_FUNC_0_OUT_0, 0x500003e0}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_FUNC_0_OUT_0, 0xf00003e0}, {OP_WR, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_1, 0x0}, {OP_WR, MISC_REG_AEU_ENABLE2_FUNC_0_OUT_1, 0xa000}, {OP_ZR, MISC_REG_AEU_ENABLE3_FUNC_0_OUT_1, 0x5}, {OP_WR, MISC_REG_AEU_ENABLE4_FUNC_0_OUT_2, 0xfe00000}, - {OP_ZR, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_3, 0x14}, - {OP_WR, MISC_REG_AEU_ENABLE1_NIG_0, 0x55540000}, - {OP_WR, MISC_REG_AEU_ENABLE2_NIG_0, 0x55555555}, - {OP_WR, MISC_REG_AEU_ENABLE3_NIG_0, 0x5555}, - {OP_WR, MISC_REG_AEU_ENABLE4_NIG_0, 0x0}, - {OP_WR, MISC_REG_AEU_ENABLE1_PXP_0, 0x55540000}, - {OP_WR, MISC_REG_AEU_ENABLE2_PXP_0, 0x55555555}, - {OP_WR, MISC_REG_AEU_ENABLE3_PXP_0, 0x5555}, - {OP_WR, MISC_REG_AEU_ENABLE4_PXP_0, 0x0}, - {OP_WR, MISC_REG_AEU_INVERTER_1_FUNC_0, 0x0}, - {OP_ZR, MISC_REG_AEU_INVERTER_2_FUNC_0, 0x3}, - {OP_WR, MISC_REG_AEU_MASK_ATTN_FUNC_0, 0x7}, -#define MISC_AEU_PORT0_END 1221 -#define MISC_AEU_PORT1_START 1221 - {OP_WR, MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0, 0xbf5c0000}, - {OP_WR, MISC_REG_AEU_ENABLE2_FUNC_1_OUT_0, 0xfff51fef}, + {OP_ZR_E1, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_3, 0x14}, + {OP_ZR_E1H, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_3, 0x7}, + {OP_WR_E1, MISC_REG_AEU_ENABLE1_NIG_0, 0x55540000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_FUNC_0_OUT_4, 0x400}, + {OP_WR_E1, MISC_REG_AEU_ENABLE2_NIG_0, 0x55555555}, + {OP_ZR_E1H, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_5, 0x3}, + {OP_WR_E1, MISC_REG_AEU_ENABLE3_NIG_0, 0x5555}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_FUNC_0_OUT_5, 0x1000}, + {OP_WR_E1, MISC_REG_AEU_ENABLE4_NIG_0, 0x0}, + {OP_ZR_E1H, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_6, 0x3}, + {OP_WR_E1, MISC_REG_AEU_ENABLE1_PXP_0, 0x55540000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_FUNC_0_OUT_6, 0x4000}, + {OP_WR_E1, MISC_REG_AEU_ENABLE2_PXP_0, 0x55555555}, + {OP_ZR_E1H, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_7, 0x3}, + {OP_WR_E1, MISC_REG_AEU_ENABLE3_PXP_0, 0x5555}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_FUNC_0_OUT_7, 0x10000}, + {OP_WR_E1, MISC_REG_AEU_ENABLE4_PXP_0, 0x0}, + {OP_ZR_E1H, MISC_REG_AEU_INVERTER_1_FUNC_0, 0x4}, + {OP_WR_E1, MISC_REG_AEU_INVERTER_1_FUNC_0, 0x0}, + {OP_ZR_E1, MISC_REG_AEU_INVERTER_2_FUNC_0, 0x3}, + {OP_WR_E1, MISC_REG_AEU_MASK_ATTN_FUNC_0, 0x7}, +#define MISC_AEU_PORT0_END 2153 +#define MISC_AEU_PORT1_START 2153 + {OP_WR_E1, MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0, 0xbf5c0000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0, 0xff5c0000}, + {OP_WR_E1, MISC_REG_AEU_ENABLE2_FUNC_1_OUT_0, 0xfff51fef}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE2_FUNC_1_OUT_0, 0xfff55fff}, {OP_WR, MISC_REG_AEU_ENABLE3_FUNC_1_OUT_0, 0xffff}, - {OP_WR, MISC_REG_AEU_ENABLE4_FUNC_1_OUT_0, 0x500003e0}, + {OP_WR_E1, MISC_REG_AEU_ENABLE4_FUNC_1_OUT_0, 0x500003e0}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_FUNC_1_OUT_0, 0xf00003e0}, {OP_WR, MISC_REG_AEU_ENABLE1_FUNC_1_OUT_1, 0x0}, {OP_WR, MISC_REG_AEU_ENABLE2_FUNC_1_OUT_1, 0xa000}, {OP_ZR, MISC_REG_AEU_ENABLE3_FUNC_1_OUT_1, 0x5}, {OP_WR, MISC_REG_AEU_ENABLE4_FUNC_1_OUT_2, 0xfe00000}, - {OP_ZR, MISC_REG_AEU_ENABLE1_FUNC_1_OUT_3, 0x14}, - {OP_WR, MISC_REG_AEU_ENABLE1_NIG_1, 0x55540000}, - {OP_WR, MISC_REG_AEU_ENABLE2_NIG_1, 0x55555555}, - {OP_WR, MISC_REG_AEU_ENABLE3_NIG_1, 0x5555}, - {OP_WR, MISC_REG_AEU_ENABLE4_NIG_1, 0x0}, - {OP_WR, MISC_REG_AEU_ENABLE1_PXP_1, 0x55540000}, - {OP_WR, MISC_REG_AEU_ENABLE2_PXP_1, 0x55555555}, - {OP_WR, MISC_REG_AEU_ENABLE3_PXP_1, 0x5555}, - {OP_WR, MISC_REG_AEU_ENABLE4_PXP_1, 0x0}, - {OP_WR, MISC_REG_AEU_INVERTER_1_FUNC_1, 0x0}, - {OP_ZR, MISC_REG_AEU_INVERTER_2_FUNC_1, 0x3}, - {OP_WR, MISC_REG_AEU_MASK_ATTN_FUNC_1, 0x7} -#define MISC_AEU_PORT1_END 1241 + {OP_ZR_E1, MISC_REG_AEU_ENABLE1_FUNC_1_OUT_3, 0x14}, + {OP_ZR_E1H, MISC_REG_AEU_ENABLE1_FUNC_1_OUT_3, 0x7}, + {OP_WR_E1, MISC_REG_AEU_ENABLE1_NIG_1, 0x55540000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_FUNC_1_OUT_4, 0x800}, + {OP_WR_E1, MISC_REG_AEU_ENABLE2_NIG_1, 0x55555555}, + {OP_ZR_E1H, MISC_REG_AEU_ENABLE1_FUNC_1_OUT_5, 0x3}, + {OP_WR_E1, MISC_REG_AEU_ENABLE3_NIG_1, 0x5555}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_FUNC_1_OUT_5, 0x2000}, + {OP_WR_E1, MISC_REG_AEU_ENABLE4_NIG_1, 0x0}, + {OP_ZR_E1H, MISC_REG_AEU_ENABLE1_FUNC_1_OUT_6, 0x3}, + {OP_WR_E1, MISC_REG_AEU_ENABLE1_PXP_1, 0x55540000}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_FUNC_1_OUT_6, 0x8000}, + {OP_WR_E1, MISC_REG_AEU_ENABLE2_PXP_1, 0x55555555}, + {OP_ZR_E1H, MISC_REG_AEU_ENABLE1_FUNC_1_OUT_7, 0x3}, + {OP_WR_E1, MISC_REG_AEU_ENABLE3_PXP_1, 0x5555}, + {OP_WR_E1H, MISC_REG_AEU_ENABLE4_FUNC_1_OUT_7, 0x20000}, + {OP_WR_E1, MISC_REG_AEU_ENABLE4_PXP_1, 0x0}, + {OP_ZR_E1H, MISC_REG_AEU_INVERTER_1_FUNC_1, 0x4}, + {OP_WR_E1, MISC_REG_AEU_INVERTER_1_FUNC_1, 0x0}, + {OP_ZR_E1, MISC_REG_AEU_INVERTER_2_FUNC_1, 0x3}, + {OP_WR_E1, MISC_REG_AEU_MASK_ATTN_FUNC_1, 0x7}, +#define MISC_AEU_PORT1_END 2185 + }; -static const u32 init_data[] = { +static const u32 init_data_e1[] = { 0x00010000, 0x000204c0, 0x00030980, 0x00040e40, 0x00051300, 0x000617c0, 0x00071c80, 0x00082140, 0x00092600, 0x000a2ac0, 0x000b2f80, 0x000c3440, 0x000d3900, 0x000e3dc0, 0x000f4280, 0x00104740, 0x00114c00, 0x001250c0, @@ -1464,4823 +2571,346 @@ static const u32 init_data[] = { 0x003e2000, 0x003e4000, 0x003e6000, 0x003e8000, 0x003ea000, 0x003ec000, 0x003ee000, 0x003f0000, 0x003f2000, 0x003f4000, 0x003f6000, 0x003f8000, 0x003fa000, 0x003fc000, 0x003fe000, 0x003fe001, 0x00000000, 0x000001ff, - 0x00000200, 0x00000001, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00088b1f, 0x00000000, - 0x51fbff00, 0x03f0c0cf, 0x3130ef8a, 0x22b1c430, 0x3b0143f8, 0x02ecdd01, - 0xdc406ec4, 0x19b7c404, 0x23dfd348, 0xf1476080, 0x03343031, 0x032f3731, - 0x423f2483, 0x4d5011fc, 0x02ef9025, 0xa40cdb15, 0x77280475, 0xf2c060fb, - 0x77629812, 0x056c1144, 0x58c8f22c, 0x4dde4d11, 0x44af950c, 0xe340ff40, - 0xfca8b235, 0x6d081948, 0x8b5f150b, 0x95051f26, 0xd0849577, 0xe76964eb, - 0x00607a36, 0x2726b9d6, 0x00000400, 0x00088b1f, 0x00000000, 0x7dedff00, - 0xd554780b, 0x333ef0b5, 0x64ccce67, 0x093c991e, 0x20f264af, 0xf09c0682, - 0x93a8a808, 0x07be3040, 0x0e22a5e4, 0x27902018, 0xf5e8bd48, 0x620c19bf, - 0x2f06d6b4, 0x93a45a2a, 0xb6968a80, 0x6c1a06c1, 0x822203b4, 0x6b06f5bf, - 0x368b6d7b, 0x2062a28a, 0xa5ebd8b9, 0xaffadaf7, 0x99def6b5, 0x91332673, - 0xfebffdaa, 0x5fa7f7df, 0xf7b3ecdd, 0xf5ed7bd9, 0xb3ef6b5e, 0xa66e6547, - 0x97d8ce5d, 0x9be507f8, 0x232c630a, 0xa1bbd65a, 0xed58cc9c, 0x9ef8731e, - 0xec66c65c, 0x4f2e44b1, 0x12ab7a87, 0xf4dd42b6, 0x4fda9d92, 0x7af5e56f, - 0x9743f773, 0xb9fb3b40, 0x05053d99, 0x589bb1eb, 0x6c276309, 0xf2f5ff8c, - 0xaf3b72fa, 0x5feeb6d6, 0x557fa0cc, 0xe1d995a7, 0x661d13fd, 0x3cd7d63f, - 0xc01984a5, 0x3eefbb50, 0xbf8c046d, 0xdbb4ac22, 0x0a7f50bd, 0xcafb421e, - 0xfb18730e, 0x33bbb9f7, 0x4ec64e03, 0x5798da36, 0x937ef843, 0xd8c453d9, - 0x59eef0aa, 0xaadfa023, 0x04cf8a5d, 0xaadaacf3, 0x8c9f2e44, 0x19b095cf, - 0xe9dea886, 0x1cb1de60, 0xcd192f86, 0xf358eb4b, 0xe30bcc24, 0x0b45b532, - 0x4dbe70b8, 0xc515d79a, 0x0f46c9cf, 0xb5eb23cd, 0xf03cc2cf, 0x144fdd5e, - 0xceb12e1f, 0x30ed82c4, 0xf67de9ff, 0xb89ddb85, 0xa15af5be, 0x258ebf4b, - 0xab1d717b, 0x2cdaadc2, 0xaad5c227, 0x8e8a2f2d, 0xcd33bd57, 0xfc96d708, - 0x7b5d4161, 0x91b2796c, 0xb4616f31, 0x7f318abe, 0x0fe113bb, 0x47c7b36b, - 0x29641f9f, 0x9deacf44, 0x45b5e666, 0x442c67c7, 0x17cccdcf, 0x2eb2bc41, - 0xb74f4f97, 0xdd231e33, 0x7788a4d6, 0x7df3c013, 0x024d8741, 0xf843df4f, - 0x7bf64ca0, 0xfeb0abd6, 0xa3cc99e4, 0x26fef10c, 0x1ed85b0b, 0x900bbd67, - 0x1630a619, 0xb7822664, 0xc26f058e, 0x50d4cfb2, 0x5fc3c005, 0xeb002b24, - 0xefe14fbd, 0xd4bccf5f, 0x9ad1beff, 0xe9bae91f, 0xe6ed92ca, 0x7496b15c, - 0xfa7f2fac, 0xb5321801, 0xbf10cfc2, 0x88ade22a, 0x43321e16, 0xca576bbb, - 0x7abc07c4, 0xc72d95fc, 0x4d93dcf9, 0xa678fa06, 0xa9ea1927, 0xf0635333, - 0xb89cf4eb, 0x4e01d440, 0x827fa9ab, 0x6958cf9a, 0xedf88db6, 0xe48d6c8e, - 0x38cb8ee6, 0x3b64775c, 0x7fa821c3, 0x08b85f17, 0x42f05aea, 0xc07c1c4f, - 0x859626cc, 0xa6c4d065, 0x466f6e0d, 0x941f023c, 0xf8517ce5, 0xa6f5941e, - 0x2814c2fe, 0x21a52b57, 0xc446cbc4, 0x330e9423, 0x3b75c06b, 0xd4f08cac, - 0x7b64a63c, 0xfba78748, 0xb94f0173, 0xb7ef71d1, 0x1f316434, 0xca840f63, - 0xc070ea43, 0xf7102e6f, 0x3cb78462, 0xf7802a12, 0x42c8ef73, 0x9034da7c, - 0x1afcfd03, 0xf3445fcc, 0x1f1e20b7, 0x9d8c7415, 0xcd3856df, 0xaf3dbf30, - 0x5dbf30ca, 0x2781f983, 0x2b5d089f, 0x8e3c07e6, 0xec07ec60, 0x96df9a5a, - 0x6fe68eb7, 0x619558d6, 0xf981a4fe, 0xd3ef38c3, 0x2e6fe609, 0xfeb8d8bc, - 0xf5c655bc, 0xcffd7c6b, 0xf989e685, 0x3ffd6893, 0xfaf8f362, 0xebe2eef3, - 0xfab8c2b7, 0xf803ddf9, 0xefbc476f, 0xdb7f804d, 0xeb8dd379, 0xae31afcf, - 0x7fe7cadf, 0x988b7421, 0xfff349df, 0xd7c2dd82, 0xcd377f9f, 0xf836b56f, - 0xcd64d03c, 0x23086a49, 0x7fe17b5f, 0x802ca0c3, 0x5942a679, 0xbc18ca94, - 0x47961dff, 0x2923b878, 0xfff61e78, 0xcdf8093c, 0x2c0bd519, 0xb94151bc, - 0x5d3c13af, 0xf6896bb9, 0xb2a5783d, 0x064beb93, 0xc00c74fa, 0xb3f3ba77, - 0xf000ffcf, 0xf628ee56, 0x8f24bd99, 0x265bdf0c, 0xe66f5296, 0x902c60f8, - 0xfa85db3d, 0x673d9029, 0x59f9353c, 0x4645e826, 0xe3e20e30, 0x13962d65, - 0x5af93a3d, 0x5f58c5b1, 0x25d63619, 0x24c8a5dc, 0xd8ca8650, 0xf79806d8, - 0x0623e804, 0xd07df27a, 0x647e5847, 0xdda2b761, 0x15f400f8, 0xb572f4d3, - 0x4272e89e, 0xb13ff8e5, 0xf8f241c5, 0x1ad5a6f9, 0x1c7847cb, 0x7cdd6480, - 0x1156f621, 0x58be73ac, 0x04b9e127, 0xcf5f15f5, 0x6bdaaefc, 0xdc02c4c0, - 0x4ef78669, 0xd416225b, 0xf0b0b75b, 0xfe3059bd, 0xb6ee0f6d, 0xf8ff4904, - 0xae489a47, 0xc81348d9, 0x968582f5, 0xef747bf7, 0x64d8ec2d, 0x8de50919, - 0x9bf3e341, 0xd3f58cab, 0x84c5b096, 0xc2a57976, 0x5bfc615a, 0x72ed8c1a, - 0x54b13f9e, 0xdf31674e, 0xf0c5a07c, 0x06575c54, 0xe1e82fd1, 0x3ebb00eb, - 0x87da246b, 0x53df14db, 0xfb05bf50, 0x1e3a444d, 0xe2f9f0d6, 0x07be2965, - 0x997860d8, 0xdf40930a, 0x78dd8577, 0x743cb557, 0xfe183291, 0x7e1c979e, - 0xebc184d3, 0x56fb8588, 0xdc3a21e6, 0x7cf8ceba, 0x7d762849, 0x3bea0f9c, - 0xd03ed34b, 0xbf6daf3d, 0x1d03ed32, 0x9cef54bf, 0x0cafa86d, 0xbfe868df, - 0x4312cb62, 0x9596b2fb, 0x9adbf686, 0x4bea1b57, 0xfa1a7742, 0xbd6ebadf, - 0x8696fda1, 0x37ed0dfb, 0xd4326d57, 0x6e3e0c6f, 0x6160bfe8, 0x795da1ab, - 0xfa0e6569, 0x305af537, 0xfde03867, 0xacacefd4, 0xb1f2894d, 0x1b8ff3e4, - 0xd93ca8b3, 0x3d72a5e8, 0xbfc82bca, 0xeb2f1f69, 0xa0e496db, 0xffbe4b9c, - 0x8d90d2c8, 0xdfcb1272, 0xcb18f2b1, 0x6837c8c7, 0xf3d91287, 0x5005851a, - 0x6e14fbee, 0x77f3e48f, 0xec65fe84, 0x1ab7921e, 0xcd63cb8d, 0x50cbc3f3, - 0x48b46a5e, 0xf1338361, 0xa15dacb8, 0x46d63075, 0x830cace3, 0x9ae81854, - 0x77b3806f, 0xafe699bf, 0x22e3e743, 0x2581f7b4, 0x791fce0a, 0xf186fb39, - 0x297f8f08, 0x48333bd5, 0x5636f62f, 0x22a07da4, 0x7e5402fe, 0xca90b8dc, - 0x2a418d13, 0xa2ac683f, 0x06c6fdf2, 0xd71a7b2a, 0x636ef951, 0x8d63ca88, - 0xbefe54cd, 0xb7ca85b1, 0xf950b71b, 0x9530c6db, 0x54fd1ba7, 0xb5a9f00e, - 0x43fd10bf, 0x432b07f6, 0x0ebd9717, 0xcdc816fe, 0x7737e919, 0xe11afaf2, - 0x4bc22737, 0xe213dd2c, 0x434c858f, 0x89292dd1, 0xc4c923d3, 0xf9c8182a, - 0xfaf6e303, 0x8abaf296, 0xe008032a, 0x0397fbd3, 0x860d22e3, 0xde3d357d, - 0xf683bb41, 0xd93365ef, 0x99f9163f, 0x1e9706ef, 0xd423401f, 0x8474bf37, - 0x35fd029f, 0x7e72f14a, 0x9cbc0af9, 0x8dddbc39, 0x964d747a, 0xa4c1f3c9, - 0x6dabebc4, 0x7538f5cf, 0x1a77d4f0, 0x945a67eb, 0x7a0fee0a, 0x478ee793, - 0x3e78f07e, 0x65ba4028, 0x59c72951, 0x3e79a593, 0x617ec348, 0x95db0f5a, - 0xf105fc42, 0xb6fbf508, 0x4e3448e1, 0x760e8e14, 0x1f27de1c, 0xff713f3b, - 0xfea17c84, 0x9a3f4349, 0x473e5975, 0xff856abb, 0x1401897f, 0xc72ea953, - 0x87376fad, 0xf3e217ac, 0xe0f9865d, 0xf58caf3d, 0x8a1bccbe, 0x427654ff, - 0xa4a807f2, 0xacde22a3, 0x18f769de, 0xa18a75f5, 0xdc39df5e, 0xf8dfd063, - 0x3657900f, 0x5ed15153, 0xe8b608d5, 0x0acd9d53, 0xf90bb7c0, 0xaf52e806, - 0xb6b57ef0, 0x8f082d1e, 0xcd3474ce, 0x3d8bc4bf, 0xb1bd685b, 0x3c6c9df0, - 0xc4d555ec, 0xcf9b57f0, 0xe38811dc, 0xf0ae7f97, 0xc4c6a538, 0x0b665ffd, - 0x584e51b9, 0x873dc856, 0x07399bf8, 0x0b7143f0, 0xcbaba3cc, 0xe9afc071, - 0x7acf678f, 0x8dafdc4d, 0x526ad79d, 0x757f09ce, 0xc2ce8ebb, 0xb1e2c775, - 0xb43ff3ae, 0xcc8dc520, 0xdf894780, 0x6ac04a5d, 0xed57f182, 0xf9434f7c, - 0x2a12d8fa, 0xc4dce7fc, 0xbf0c19f8, 0x2384eb33, 0x7b35ceba, 0xad5fe45c, - 0xede224d9, 0x79c6eb10, 0x13134e97, 0x74bd017f, 0x62e58070, 0x26dfa826, - 0x5dee326a, 0xfe4d51da, 0xa42c87d5, 0x89f53fa1, 0xfd04a5b9, 0xaded5583, - 0x3ce01f9a, 0x88154cc5, 0x4dec53af, 0xbd1d24f7, 0xd11a4c8a, 0xa366b6e9, - 0xa6fe00df, 0xa6fe0ea1, 0xcd9cbea1, 0x7638c4c9, 0xb80b66f9, 0x434eb4be, - 0x879328fb, 0x3582b0e8, 0x7afb446c, 0xfcd263bc, 0x3f0e904b, 0xf104b27f, - 0x479a14bb, 0x8f1e22a6, 0xd6ff1e12, 0xfbe257f9, 0x1bcf0713, 0x7c98dbe5, - 0xed43c080, 0x8e1fc54e, 0x991737c3, 0xfe4abf38, 0x4ff080da, 0x2dcdfa89, - 0x4d6bf531, 0x6b724a8a, 0xe3a46666, 0x642d8f29, 0x5f76a64a, 0x7a12f004, - 0x026beade, 0x12a3fafe, 0xbb226d98, 0x74c0991e, 0x04a8fefd, 0xf2af79e9, - 0x013472fa, 0xc04c8d4c, 0x06d80b3c, 0xd04d3be2, 0x60f08ad7, 0x1aa59cbc, - 0x728f59d6, 0x9dd8e30d, 0xb7df0c1d, 0xf1da637b, 0xc637681f, 0x8e1bb232, - 0x2776c6b1, 0x87f219b0, 0xbe7c67cb, 0x180fc842, 0x4c3be222, 0xebdfa17b, - 0x662339b6, 0x34d94bf0, 0xce2077b5, 0xc878c3c8, 0xfe91813d, 0x645e52f3, - 0xaff787ad, 0xb5847913, 0x4b0d94ef, 0xa97fc21d, 0x84b61b3f, 0xb57574d3, - 0xa97e435f, 0x12c3bb3f, 0xf40df49e, 0x989617a0, 0x279b9519, 0xca236094, - 0xd49bc4ad, 0x3c3d517f, 0xcb97a3ca, 0xfef431ad, 0x03a470da, 0xec70753d, - 0x482d8252, 0xbe3858f7, 0x8359f8f6, 0xadfadfc6, 0x68305f8e, 0xf0f19dfc, - 0x631c7a78, 0x0337a4dd, 0xfee80cc9, 0xa8f3dd9f, 0x8ff7444c, 0x85233e41, - 0x58f84fe8, 0x4b79e344, 0xb8f8cbac, 0x59e5ebaa, 0x81575718, 0xfe05eb7f, - 0x485ac95d, 0x294c448f, 0xb335cfc2, 0x55de0e88, 0xfea6bf5d, 0xff783aab, - 0xfd4ed66a, 0x3119bf31, 0xe1927bac, 0x7def293d, 0x9cd49ec2, 0x1d11612d, - 0x790b763f, 0xe087bf00, 0x106bcf93, 0xb26bcc3e, 0xb6a79a6e, 0xcf30cd3d, - 0xf6735f80, 0xf9d11662, 0x376ab53d, 0xd9ed77f1, 0x019e68cb, 0x6afe067b, - 0xfc6a1b44, 0xa3b80691, 0xc0334fe3, 0x3a7f1d1b, 0xcfc72bcd, 0xca72039a, - 0x2be513f5, 0xc293cb42, 0xb7a7804d, 0x91f7c1ac, 0x9b5cb25f, 0x76415f73, - 0x04f1fa5a, 0x744fc7d4, 0x1d34df6c, 0xea09fae8, 0x9b975c39, 0x739eb9b9, - 0x92174c86, 0x7c853afe, 0x18bfa030, 0x43f1afe8, 0xb7e8c7b4, 0x8c0af851, - 0x28f59a3f, 0x3746dfa8, 0x8e50f518, 0xef84dd33, 0x3e33ace5, 0x019ea2f7, - 0x521b95bd, 0x9f5ce263, 0x6fcfc709, 0x9f4f3e36, 0xc73aba51, 0xd3516e07, - 0x2798a533, 0xba505f4a, 0xb187a47b, 0x7957d40b, 0xe2d299fd, 0x79ff50e1, - 0x1532bad3, 0x7ff4d5fc, 0x86ce2d2b, 0x91b2d3ba, 0xca15abd7, 0xb7cc592b, - 0x89be8594, 0xcac0081e, 0x6294728d, 0x0a9cfc06, 0xccbf9b1c, 0x5fb47a8b, - 0x9e8478e3, 0xd3d19f80, 0x39467e38, 0xfc46ed8f, 0xd67a98e4, 0xc3f973a3, - 0x052bff17, 0xe62f4643, 0x1e0f013d, 0xf483c1b6, 0xbed34781, 0x8ebfc21c, - 0x5f2533f5, 0xf305b14c, 0x4b938e10, 0x167f7ec7, 0xeaa27d3c, 0x5b0dc500, - 0x71f9fe44, 0xf46eb710, 0x326f55bb, 0x3364e3f2, 0x0965d7cf, 0x378ceebf, - 0xfd487937, 0xa195959e, 0x53eae0ea, 0x9fc8ddfb, 0x5f1c5f7d, 0xd6237e8c, - 0x13d08653, 0x32a359f5, 0xa3139254, 0x749e667e, 0xc14aa3e2, 0x5b378847, - 0xb6cf3466, 0x7e510942, 0xc0b5fa44, 0xbf5c1e01, 0x7f31aa12, 0x8edfc179, - 0xe0d6e3a7, 0x775866d5, 0x83c85985, 0xbdb0b98b, 0xf08f2ab7, 0xf6836e96, - 0x6b3d688c, 0xe809cee9, 0x0398a4e7, 0xc37be2d7, 0xc6cd9f97, 0x43d98e7a, - 0xb4a2dbf8, 0x00f8470c, 0xc3cfb48f, 0x569d82f6, 0xdcc93168, 0xcf26f64f, - 0x69ce2219, 0x1f4acc6b, 0x55cf2fca, 0xde718b83, 0xf7bebdfc, 0xf1fc619b, - 0xf70f9a95, 0x9bafc65b, 0xccf88e99, 0xc03d7132, 0x72f390ee, 0xf82f5f3d, - 0xf8aacfae, 0x77ded0fd, 0x8435a7bb, 0xda0b33ed, 0xb519afd1, 0xfdc3ebce, - 0x42873e80, 0x7a35f7ef, 0xe7282f29, 0x1c95dd1d, 0x9e49bbb1, 0xf3c8373f, - 0xd07d633a, 0x3b7a5f7c, 0x7fbc707b, 0x9c42f8f6, 0x1d0f949e, 0x67d9e82d, - 0x725dfbe6, 0xb42cd1be, 0x7391fd1f, 0xcc5fef9d, 0x7fda74ae, 0xba037410, - 0x925e9084, 0xfbdf402e, 0x121b5f10, 0x78bef7d3, 0x6b6e5df4, 0x5db946c8, - 0x659f6815, 0xe625e781, 0xafd883e0, 0x21f76166, 0x50decd0b, 0xe927fc88, - 0x70d0d4ce, 0x740353d4, 0xfc21497f, 0x7c717667, 0xb7361fd6, 0xcb1e7ee2, - 0x40b7ae0a, 0x42ca99fb, 0xa22627ca, 0xfe75f8f3, 0x017cbd74, 0xfce2b7dd, - 0x9a8ebbe3, 0xef493e10, 0x49de44c7, 0xffecadca, 0xbdfa598c, 0x0f76be62, - 0xfc55f7cd, 0x166eb457, 0x7c780b8d, 0x80dfcf56, 0xff9c76c7, 0x1fe166c7, - 0x3b63c60f, 0x3c073ff6, 0x3c1739ee, 0x939de87e, 0xcfe30799, 0x7f093b32, - 0x87329f2b, 0xbea4b0ad, 0xf52fd2d9, 0x333c335f, 0x5e5627aa, 0xd71fb0d4, - 0x8549f2b9, 0x6bb2acf8, 0xc26c35c5, 0xf96378e0, 0xe3e910c2, 0xd903b8d8, - 0x5ab2f912, 0x7f13178e, 0xff07b354, 0x734e4cc3, 0xf54ef498, 0xbffb634e, - 0x9b30f945, 0x24ce04f2, 0xf1b1b79e, 0xf1d0b2f1, 0xe248be47, 0x8b26717c, - 0x619e1c91, 0xd0f7c429, 0xbb608bee, 0x33fca2e6, 0xdc6291db, 0x314cac9f, - 0x6e8e4fec, 0x4ff21930, 0xc9b1f3b1, 0x5fec4cca, 0x6730e42a, 0x6fb0c99d, - 0xee321b97, 0xa737e5eb, 0x5a63ea1a, 0x9ffa1846, 0xd0cf25b7, 0xbe7c2e3e, - 0x9d82fda1, 0xf1f50d13, 0xfa1b17ed, 0x6659d85f, 0xae4717a8, 0x749ff432, - 0x3ea18e78, 0x4326fba5, 0x2f6fa9ff, 0xd45fb435, 0x7ed0cab3, 0x0c6bc7c9, - 0xeffb4bf5, 0x2c8ff432, 0x00ac38a9, 0xff025efd, 0xe086f314, 0x67c8a857, - 0x99acfe07, 0xfc0e4f90, 0xa8c4d0b9, 0x2bc867dd, 0xa673f81e, 0xf81f9f1f, - 0xfb1f8973, 0xe7cb3295, 0x5952e2f1, 0xdb19b0ce, 0x0be05553, 0xc0d96fb4, - 0x569a9817, 0x7203f28d, 0x39454235, 0x0fc3a7fb, 0x469d0215, 0x46482cac, - 0x34f20d3b, 0xbd373d42, 0x27ef8394, 0x962da792, 0x290f1b96, 0xac7ded83, - 0x38e590be, 0x5bade655, 0xbad37de8, 0x65a7616c, 0xb230f17d, 0x5f9f9233, - 0x7a1c5333, 0xe3d70366, 0x86a43667, 0xdf9efef9, 0x0fe75c39, 0x24e8399e, - 0x9efdcefe, 0xaf01db93, 0x892cebd3, 0x7f2901da, 0x323f22f9, 0x7945582a, - 0xe3fe418f, 0xb8f59ea2, 0x1ff573ce, 0x99c6fd63, 0xff021e92, 0x05d1d709, - 0xf1f68972, 0x27da1483, 0x7161e35a, 0x36b6eff7, 0x16770f36, 0x4b2e7e0c, - 0xdce1cd65, 0xb40f30fb, 0xe159f14f, 0x1fd86dfd, 0xbc587bec, 0xb5ea26d7, - 0xbd454d21, 0xebe22b56, 0x521e71d8, 0x7e466f4b, 0xdd96a1d8, 0xc5d14eac, - 0xdc5a0dd3, 0xd077c7bc, 0x0473c089, 0x0d80efaa, 0xcf5fefe6, 0xff306d7c, - 0x0ca78b1a, 0xf4ee6beb, 0x9af21d12, 0x7ae1667b, 0x5dc13a73, 0x73fbd9d7, - 0xc056a780, 0xd4f08b53, 0xa714fda9, 0xb0a8bff5, 0x879c5cb6, 0x5f66bb8f, - 0x487e432e, 0xd51ce704, 0x72057c42, 0x738e3770, 0x4ed09aa7, 0xf28e7ddf, - 0x638d5eb0, 0xf2ec065f, 0xf15bed52, 0x137072c7, 0x9eb44a78, 0xe196d0ff, - 0x9d39b728, 0xc0a89fa5, 0x60e039b7, 0x9f22a726, 0xd1bef632, 0xebef623f, - 0xf344d0fc, 0x7689557e, 0xf1157def, 0x0631f7ce, 0xc7231dc1, 0xe46f75de, - 0xebe9a417, 0x4c17e7af, 0x10950012, 0x306c14bc, 0xe5e2db88, 0x95f6738b, - 0x2427561e, 0xbdefe786, 0x377881ce, 0x4bfd5e46, 0x7c8f5ec7, 0xb311fb77, - 0xb2845562, 0xc84178c1, 0xe677b2eb, 0xf0e8a664, 0xe5b1b5b3, 0xaf27556a, - 0xf7f012a3, 0x9ff72a9b, 0x5c3635b6, 0xe380595d, 0x3d7a4c7a, 0xca13dd90, - 0xd27988dd, 0x8c2f870e, 0x9327acfa, 0x702b58f0, 0xbe0a6c90, 0xf4bcfc89, - 0xd7ca6ec2, 0xe97c88e6, 0x297e7168, 0x2ae3be76, 0x97f847cf, 0x8c2958da, - 0x16cda7fb, 0x34b277f2, 0x08e28798, 0x5a5b9d07, 0x0a6c0636, 0x93db2fb4, - 0x0c53f5c6, 0xd0c6e15c, 0xa20a1bd5, 0xc71c02f3, 0x3dbc1e51, 0x7f3859c1, - 0x4451c22e, 0xe11276f2, 0xe84d48fb, 0x473c9dcf, 0xd21beb79, 0x43c6c4fe, - 0xf0e2fd09, 0xa7e485fd, 0x7e4dffe6, 0xa1c3fa31, 0x0c3fa8a2, 0xd058b2eb, - 0xeb8c594e, 0x8b55d9d2, 0x95d6dce5, 0xaeda1964, 0x92416e3e, 0x32407389, - 0x9ae1230f, 0x57f2e169, 0xe618d1ef, 0x4e51ead3, 0x54d9f0e3, 0xbb88628b, - 0x3138adbf, 0xede6553f, 0x7887bda4, 0xe5c2e311, 0x33a3e24e, 0x0bfbd6de, - 0x877c7327, 0xc8f7c086, 0x04322375, 0x0f887d5e, 0x16f1c789, 0xbc069ea3, - 0xb5e2e2fa, 0x326af006, 0x57ca75e0, 0x95fc95e0, 0xa98f9daf, 0x9cefee34, - 0xa5dff816, 0xde703304, 0x5bbc3753, 0xbab0f982, 0x086b9f79, 0x679ed7d7, - 0xe7e9b32e, 0x981ef991, 0x9cf383c7, 0x9aafe1be, 0xe825a7d0, 0x39ed3667, - 0x35cf192f, 0x93f38ad4, 0xfd5af6a7, 0x3e5f8e8a, 0x1e70f2fd, 0x1b4fa5ea, - 0xf2c7ccaf, 0x5bcf2a54, 0xf53bda9e, 0xa9d5f210, 0xb12d1c9f, 0x9ea738c0, - 0xd2a25a3f, 0x60d85b3e, 0xef2f6a7f, 0x203b412e, 0x7c03daf3, 0xdfaf8b67, - 0xfcfe0b56, 0x4aafebda, 0xc8d5e788, 0xef1ca707, 0xebfae096, 0x0f09675c, - 0x7cb9db0f, 0x6da1923c, 0xd32332c4, 0x17fa10f4, 0x4fc1a45a, 0x5b8788db, - 0x75265822, 0x7971fbb7, 0x23bbb7ce, 0xfa7bba58, 0xbd7618fd, 0xe201fe05, - 0x67b1f3d5, 0xbe1fd63f, 0x33e504f2, 0x1ab017d9, 0x80916380, 0x3b59f7e3, - 0x3a04a91e, 0xf37d2efc, 0x7e86e423, 0xf685eb01, 0xa0dff19b, 0x1e818e87, - 0xdc6c80f2, 0x7cfb72a4, 0xb512a553, 0x191ff853, 0xe9187947, 0x8a3545d3, - 0xeea5aec1, 0xd3f94199, 0x6429af3e, 0x61a47581, 0xbff81a56, 0x66ceeb4f, - 0xc5cec0df, 0x3883bf96, 0x9d9d7de5, 0x0952acfa, 0x67df30a9, 0x7fac8f42, - 0xd3f1127d, 0x178a65e6, 0xfefb18f1, 0xcb5eeb63, 0x727a099f, 0xf3879dd8, - 0x6efc8267, 0x90027916, 0xa7cf0537, 0x80f22c3d, 0x877b866b, 0x9ae3ede9, - 0x8252f323, 0x46defaba, 0x89d6dfbe, 0x7ca15ee7, 0xed7b9c41, 0xfaa2cc6a, - 0x2a5e8d4b, 0xe9638d23, 0x434b66f9, 0x7bdf9e0a, 0x3342c2cd, 0x77bf97c1, - 0xe51bff78, 0x1ddb42e0, 0x699b2fbf, 0x33d6f187, 0xd6f8cf3a, 0x13ddefbd, - 0x1df00e9a, 0x1929a4f8, 0xd2a740ed, 0xa61c478e, 0x23fdbe2a, 0xcb5d4f51, - 0x75a54f48, 0x306e742a, 0x3611cbad, 0xb7d3fce9, 0x765edc2c, 0x72de785b, - 0xb442da2a, 0x7fa5b32f, 0xef413fd7, 0x0fea0cc7, 0x7b9e1f81, 0xa98f9d8e, - 0x4ecf94fd, 0x7c30def4, 0xbfb9fc6f, 0xad4c77d7, 0x2a89f3a0, 0x66a77fb7, - 0x903eb667, 0xcfebfbcb, 0x79e1f497, 0xfa7238ce, 0xbdef3117, 0xc7f74e16, - 0x64768d72, 0x8fdb9597, 0x1df316ff, 0xa392dc68, 0x9651bf3f, 0xffe8dfc0, - 0x335ff2a6, 0xe488ff68, 0x68f596be, 0x3f72bcfc, 0x11fc49e5, 0x3619af8e, - 0x577d470e, 0xca04b2b1, 0x97ae4e19, 0xe50eb0d2, 0xeb9c550c, 0x689cfc66, - 0x2b56455a, 0xe28e5f9e, 0x5a73af81, 0x1c16bf4f, 0x7dc3dfcf, 0x7c0fb4df, - 0x29ebf20a, 0x7fee39a4, 0xfd11b6cc, 0xaa825b67, 0xbc52f486, 0x9d22578f, - 0x3a238cf6, 0xec958fd9, 0x5c3a464f, 0xde4cf2cb, 0x2dec1f28, 0x9c627a05, - 0xb6f14fb4, 0xa73ee8b1, 0xe340bf9c, 0x23e595f8, 0xc877e04a, 0xea5a05e7, - 0x784fdc0c, 0x82581ec4, 0x7e113247, 0x678c165b, 0x478cde0f, 0x5debedd2, - 0xf4e0154d, 0x3b40b5ed, 0xba360bd4, 0xfe00369b, 0x4704a6f6, 0x6b9796e2, - 0x30e9a3bd, 0xb970a7b6, 0x68e8d828, 0xd1c8b942, 0xe61f3c3c, 0x5f22e7f4, - 0x503dd40d, 0xdbabaf1f, 0xaf2aea62, 0xbed575cb, 0xc843e7fc, 0x5c5d75a7, - 0xd6f006be, 0xfea0ac59, 0x7e135f3c, 0xf4398392, 0x547fddfb, 0xbe341382, - 0xedc85d8f, 0x4a07dc98, 0x81f62ed0, 0x828b58b2, 0x1e04767a, 0xff47cb60, - 0x6cca9bba, 0xdca54fd6, 0x59dbc8df, 0xea04607c, 0x76605353, 0x35e7d239, - 0x18f7970b, 0x72b1efbc, 0x2d6bdd3e, 0xf985659d, 0x63d01e1e, 0x46ba5f7c, - 0x81b669e8, 0xc15eedeb, 0x9b369fbb, 0xc9c01a42, 0x79e83876, 0x553f388d, - 0x4c81cef3, 0xd4f8d7dc, 0xc9e22acf, 0x7b085cc5, 0x5b5f8f11, 0xb946822e, - 0xef907fa8, 0xcc7c819b, 0x21d57c45, 0xd937505c, 0x847ce9ba, 0x87f69ee5, - 0xff3718cc, 0x73c1e2d8, 0xbeb9d58e, 0xa2fe78fd, 0x0fae5f7a, 0xc3bde555, - 0x9d577c79, 0xd1399ed2, 0xbacbe519, 0x21d94dce, 0xfb27f7c0, 0x95f2477f, - 0x61ec878f, 0xa38edafc, 0xd79e105a, 0xa1a7bc75, 0x4524fd61, 0xda3e81fa, - 0xb877bdb7, 0x9c12f92f, 0x3c6657ef, 0xa7803859, 0x14ee96d1, 0xc3c979fd, - 0xa0fde7a0, 0x3d035fcf, 0xd021e58f, 0xf3d07eff, 0xd7f8be47, 0xaf3fd44c, - 0xccd7c25a, 0xcd9e71c1, 0xe15e60f7, 0xc1f84f53, 0xb4ff5089, 0x3d6f8c60, - 0x6b3e57d4, 0x7fbc600e, 0x96716d44, 0x6083ff40, 0x9dfde847, 0xc2f4eaff, - 0xdb0583f3, 0xf471bd33, 0xd36795dd, 0x60981f99, 0x7cef997b, 0x36078f94, - 0x976c9bfa, 0xbeb9f802, 0xea18ac55, 0x0d93795a, 0xa99365e4, 0x1f62d1fd, - 0xc73867d5, 0xce597f81, 0xf2b187e5, 0x278e52a6, 0x71b4dfaa, 0xdfdc0cd3, - 0x8a7bbb5b, 0xc89a7c82, 0x7d9d56de, 0xc825ce8e, 0x6b263e7a, 0xd4aaef80, - 0xaa59e510, 0xce84fece, 0x271acc33, 0x61fe68f3, 0x1f2dc68c, 0x8edd7886, - 0x13177c7b, 0xbdf843c9, 0x68b2f6c2, 0xabc1f51d, 0xd0be02a9, 0x41334d8d, - 0x0cb11fbe, 0xdcf1fbb4, 0xe12b9aa0, 0x523c2167, 0xfb26aafc, 0x099a6e2f, - 0xcd76ea41, 0x36867e38, 0x02afdfd0, 0x249abe1f, 0xfc682beb, 0x6293fd41, - 0xf1c997fa, 0xf3c2e3eb, 0xb75a3d88, 0x2ff57f41, 0x59fbe8d6, 0x3b68ff88, - 0xc727978d, 0x56f0475f, 0xf6f3370f, 0xbf65e850, 0x4dcfa51a, 0xeb4dfdda, - 0xdaaf6f01, 0x97a8a57d, 0xa465affa, 0x7cff916f, 0x49b87e3a, 0xb3aad9e8, - 0x39fd3157, 0x58b49b92, 0x90c75cba, 0xde3ee76e, 0xa2f186f9, 0x7a604ce3, - 0x7e047ffa, 0x6fb7584d, 0xedd762bf, 0x03ce90b3, 0xc510b3f3, 0xf35b55f3, - 0x07a75859, 0x5f1c3ffe, 0x027f0e17, 0x5ffe6638, 0x61ac6386, 0x451c28be, - 0xfefef806, 0x80259470, 0x02b7d663, 0x959dac47, 0x67617ee5, 0x0d5452fb, - 0xbdb63bf7, 0x8ffda564, 0x96c85374, 0xceba7687, 0x5b7a7644, 0xbf1f8b6a, - 0xc6b6d8bf, 0x1ee1e74b, 0x722a04b1, 0xdd0a7fc1, 0xabfda269, 0x6ebe796d, - 0xf6dadfdc, 0x26be792f, 0x8b3d349c, 0x071662ec, 0x3c5b6d81, 0x087e2aff, - 0xa3efef8d, 0x3e3b44e9, 0xf646c532, 0xe59cdb72, 0x9f4fff94, 0xda1c7673, - 0x0a7e9d49, 0x66531d91, 0xf3353f93, 0x3c26d6be, 0x149191ef, 0x2ffd1c78, - 0x74dad425, 0x76bc7878, 0x58667fae, 0xbe6066db, 0xcf595b68, 0x73938c38, - 0x803e702e, 0xfcf5abaa, 0xff311311, 0xbc1adc73, 0xbb780ad6, 0x1bf22aca, - 0xf2852c29, 0xc9051562, 0x6dd2c2a8, 0x5a253ed0, 0xa7caf87f, 0x3191cf29, - 0xefc860af, 0xaf814b18, 0xa67a3abc, 0xf641ffa9, 0x461afeb9, 0x8bf47179, - 0x172feff5, 0x027d7d7e, 0xb4e81dff, 0xad1ce11c, 0xd4c21cf4, 0xd1e75d61, - 0xd45f18d9, 0x139955ae, 0xe46d496c, 0x8bffdc77, 0xfd6207f1, 0x22de595a, - 0x7c44acfc, 0xf3958cf1, 0x25ff80e5, 0xe40fadfc, 0xb3f0a37e, 0x1ea2ed2a, - 0x9e506e73, 0xfe13ec17, 0xfc62df4f, 0x37d61268, 0xd769978c, 0xee7ce904, - 0xe5deb172, 0xd1334a5b, 0x7fdca9bf, 0xd963ad23, 0xf7e4d9e6, 0x84bcdf2f, - 0x784a7bce, 0x9bfc632a, 0x51265acf, 0x1d112bbe, 0xfd221fa4, 0x273f5899, - 0xde157bd1, 0x41cfa256, 0x58edafcf, 0xe67cc36e, 0xf67fa8c4, 0x7367c42a, - 0xf1a6dca0, 0xb31e09ef, 0x1b6d38f3, 0xb6005f7e, 0x399650ff, 0xb957d715, - 0xdf092329, 0x716b623f, 0xf91e5ca2, 0x61d7d7e2, 0xf093f43f, 0x9529ccbc, - 0x9eb2a5fb, 0xb72b9e08, 0x55e93f70, 0xe1accf31, 0xeff3661f, 0x1879c4ab, - 0xe97ca696, 0xec7efc48, 0xa69d9879, 0xaf903bb2, 0x9d7810ef, 0x873e0b62, - 0x155793f5, 0x5ea79f12, 0xc7cdd079, 0x79d79e37, 0xd3a5c44c, 0xee4dc3fb, - 0xbfdf3a74, 0x71e5e1db, 0x23ac1946, 0x653e4fed, 0x7f1e8ea9, 0xaf8978b1, - 0xc528fe31, 0x47d7a438, 0x702ce0f1, 0x0579f82f, 0x7e48df23, 0xa6f3eafb, - 0x2dff066d, 0x69f4de7a, 0x8b4edbf2, 0xacf5e5b8, 0x724be6c8, 0x51ef6c31, - 0xdebd4e31, 0xbf416e99, 0x16bcc030, 0xf5ae4b8c, 0x16eb9cc5, 0x11aedae7, - 0x7dc209fa, 0xfa0daefa, 0xaf15f619, 0xcfac669f, 0x37eb1bf6, 0x7effc454, - 0xee374d8b, 0xdf169fdb, 0xf0299e75, 0xb10ca726, 0x002d82de, 0x3bbd6eb4, - 0xae127f54, 0x9bcb4777, 0x26fe7d6e, 0xb0584f36, 0x4f212345, 0x900eee34, - 0xbca43c0f, 0x9d688580, 0x99dda94f, 0xc0a0b8fa, 0xb579ce22, 0x12f33aff, - 0x36c391a0, 0x9fea266c, 0xe7eb955e, 0x4afefbbe, 0x4b18ebf1, 0xcefc0de4, - 0x168bcc78, 0x2853ee2f, 0xff285a2f, 0x4edb3f51, 0xa5bf03df, 0xf7a1935c, - 0x3900c7c7, 0x5d33ae10, 0x5f3c8663, 0x9bacf73a, 0xb79ec5fa, 0xe7cdfbff, - 0xcec73c24, 0xe23e5ec7, 0x16007bc6, 0xf9d1366c, 0x5c8b85ab, 0xa4889df4, - 0x6338ec6f, 0xe171a8b6, 0x84ff844e, 0xb8f4b774, 0x74e6ff71, 0x4af299bb, - 0x6de3edb1, 0x5f8b37ca, 0xbaf31a17, 0x43fd9ea7, 0x57d60461, 0x375cf4ab, - 0xd8e2972e, 0x638c36f1, 0x5f719d37, 0x3fbe7a49, 0xaefba033, 0x86fdb7a9, - 0xe3cf20a4, 0x4903be18, 0x2f128fc4, 0xea70f089, 0x7e16edf0, 0xd164327e, - 0x28c6d7e7, 0xef9439fe, 0xa7b2a4db, 0xd1a77ce2, 0x7be71364, 0xc44c9ed5, - 0xfda5dd57, 0x2f2ab714, 0x41eee87e, 0x7ef160bd, 0x23e0e29f, 0xe97b0710, - 0x3c775efb, 0xfc1bfdfb, 0xc4ec10ee, 0x8fb71b02, 0x12f3edb1, 0x17f8a39c, - 0xecdf8741, 0x9bd1e4ff, 0xd013e087, 0x6f30733c, 0xd551ef35, 0x3aaef983, - 0xdbc90f4b, 0x3718affc, 0x76fc7f11, 0xa0f29dbf, 0xe9da160b, 0xf9d888fe, - 0x8f3dab4e, 0x9df30cde, 0xff707806, 0x00a8f4ff, 0x66f4f1e1, 0xf6fb83d5, - 0x983ae7f3, 0x54ffd74d, 0x08f9f1c7, 0x0cce99df, 0xba701f3a, 0x49df3e2b, - 0xfb655d3c, 0x45c57986, 0xf209fcc6, 0x8eadca1f, 0x3c57feff, 0xc70abbfe, - 0xd7e1c29e, 0xd53a8b9f, 0x8f1c9f91, 0x7c1f72ae, 0x1cf18b4c, 0x2ee80955, - 0x775eb71e, 0xb180acb0, 0x0c8eb261, 0xa075f30e, 0x7071e39e, 0xfb24f104, - 0xdd7cd43f, 0x8577dc4c, 0x03f11fba, 0x9d5bf9ef, 0x7762bfd4, 0xe8cfc211, - 0x059ab9bb, 0x3b01e64e, 0x74a399f4, 0x54f00db3, 0x43407dd2, 0x6475857f, - 0xc46bfad0, 0x6ef0b1fb, 0x68fd8bb3, 0xe4ca87bb, 0xc23ffdb7, 0xba3a4a7b, - 0x49f8bc93, 0xfc6a4756, 0x5d9a0073, 0x60039c31, 0xf1e50f6a, 0x3cf06632, - 0x473eff6b, 0x87894db8, 0x3bfcf59f, 0x2abb18af, 0x8d46b7e5, 0x11ad7d90, - 0xe6abf5f6, 0x5bdf10ef, 0x9ac492be, 0x355df46d, 0xbfe013e0, 0xb41717fe, - 0x7af9403d, 0x1cac9dfe, 0xf31164a7, 0x47fae9b7, 0xe33cf26c, 0x833d7cc3, - 0xbd70e7de, 0xfb033a02, 0x4cf6a667, 0x01bff250, 0x7e316e1f, 0xeb6b5267, - 0xf43d4429, 0x15fc1284, 0xedfeadd2, 0x77ac4c9e, 0xfc9279bc, 0x67c573ae, - 0x7f3205ee, 0xeed0d114, 0x3a5dddac, 0xb57f286c, 0x9d40e306, 0x7de28c7e, - 0xf187c516, 0x5abcc3c6, 0x2c11d9cd, 0xdd143694, 0x126859b2, 0x9fdf33c7, - 0xdf8099e8, 0x6e3ac1ef, 0x2ff5039d, 0x3fccf462, 0x69e9fc2a, 0x574cffdc, - 0x730d41d9, 0xdd376a6c, 0x214bf0bf, 0xf214bf2f, 0x33dff1d2, 0x74fa46ae, - 0xdcf269bc, 0x97e3ab93, 0xc1b21624, 0x7b5bd77b, 0x8efe827e, 0xebf6cbac, - 0x869d2fc1, 0x72e36afc, 0x66b5e523, 0x7d397c51, 0xfe26e6d2, 0xc476f61c, - 0xc7ce798d, 0xff23e951, 0x7f271fb7, 0xccd3a3a1, 0x61cd93f0, 0xa0e6828b, - 0xc1ff8a33, 0x2a3d70e3, 0x96a21de5, 0xde425c0b, 0xe57bdf91, 0x951e59f7, - 0xc2b5c7fc, 0x3c65ec7f, 0xfb11a87e, 0xf02a7fac, 0x1afe39d3, 0x5c600b3b, - 0x3f8f27f7, 0x78fc8539, 0xdf2d9fa3, 0xbdf67e93, 0xa55e39eb, 0x38a362de, - 0xf266647f, 0xaf296bfd, 0xf687ab2c, 0x207f24b1, 0x03d3c4ff, 0xd47a0a97, - 0xe819359c, 0x46a7a51a, 0xdfcf94f4, 0xd2127b07, 0xfa5cc39d, 0x377d0171, - 0x51f31b73, 0x66b6e33e, 0xe4e90b07, 0x3e51e3b6, 0xc63dc76f, 0x798967f9, - 0x3e38925b, 0xf877c43b, 0x91dfaa1d, 0x37d5145a, 0xae075f80, 0xabcbfd4f, - 0x79498f14, 0x95dce390, 0x7ee1f7c4, 0xadf357f1, 0x2bb67db2, 0x76a5deba, - 0x2f24b7d3, 0x27de437e, 0x24999f8a, 0xc5e58947, 0x92f215f3, 0x4d05f84e, - 0xf97b46ea, 0x9f1ff09c, 0x68aa6c3b, 0xdb7fc38b, 0xe73d7c6d, 0xec01a867, - 0xdb844177, 0x32fd44b3, 0x15f9c553, 0x3c589781, 0x3fc7e7a4, 0xd056b2ff, - 0x7f8ca6a5, 0x22f78ccf, 0xca0c3e60, 0xd78c1f6c, 0xd10ce65b, 0xef22cbf3, - 0xcd493ee2, 0xca2f56f3, 0xf6f3ef6f, 0xf49bcc2a, 0x6aad6f3e, 0xc7a60e73, - 0x1e8d6fe6, 0xebfd6f7f, 0xf42bf49f, 0xbecd3b63, 0xf3c1de31, 0x845dd927, - 0x93bd019f, 0x68d83fc0, 0x3b3c7273, 0x792d9e38, 0x5ba78f5c, 0xb1ff788d, - 0x33748790, 0xd7a0b644, 0xfe7905a6, 0x90bb39e9, 0x5b87900f, 0x4eec2f90, - 0x2c7efe03, 0xafa969fc, 0xc6575f1e, 0x7ee1a78e, 0x6ff6886c, 0xc91f7e3b, - 0x4b7a79c6, 0xb56fdfe3, 0x6309f05b, 0xea6eff46, 0xfb42af4c, 0x678aede8, - 0x9ff68b0c, 0xe7bfceda, 0x061ddb35, 0xf02cdbbf, 0x7638e521, 0x3cc40f9e, - 0x90cfa81d, 0xc31ece2e, 0x03e4bb3e, 0x7ae4d7a9, 0xfd911da4, 0x67f82f7e, - 0x8ccfe0ba, 0xfc1f3e26, 0xca9ac2b3, 0xdeff01ed, 0x7841eb9d, 0x9da2b21e, - 0x78f34160, 0xaddd67a0, 0x16f7d18c, 0x33fc1f62, 0xbb2df047, 0x07e81d6e, - 0x7e16fe92, 0xd738875f, 0xd407fd28, 0x7a9d134f, 0x0e1c43b8, 0x55f5c2b3, - 0x70927e8c, 0x7cfc3ac0, 0x138d171c, 0x8edc6fb5, 0xb58f42a9, 0x6322ef8a, - 0xfe7fe6e5, 0x569b911f, 0xe9025e71, 0xbcdf4f10, 0xc96eec25, 0x0562fedb, - 0xc04c6bf8, 0x624fc3e9, 0x1ce7ba4a, 0xb0bd40b0, 0x37cb414b, 0x82855720, - 0x45bc70df, 0x18f8a3e3, 0xf032e49d, 0x3e2a3fdf, 0x0366df0a, 0xa3a2dff0, - 0x2e2494e7, 0xf32a19c7, 0xc3fedf13, 0x80381fc2, 0x00d4efdf, 0xdf34505d, - 0x969bf01a, 0xbf4763dc, 0x43e66de7, 0xfb74e9bf, 0x8c78d312, 0xbf70b75f, - 0x6e2f4065, 0xbd07ebe6, 0x6d7a8ed6, 0x477edbcc, 0x2167d411, 0x5bce30fd, - 0xd379f8c4, 0xe3185776, 0x198f2925, 0xe0667b73, 0xa39d473e, 0xf75dbd61, - 0x277fa07c, 0xca8dcff4, 0x35ca0d75, 0x82b53bcc, 0x2b4eb3b7, 0x8b160fdd, - 0x47bec62f, 0xeff226f3, 0x7ae24c6e, 0xd234f50d, 0x6ec21ca9, 0x4afdc03b, - 0x798cc86e, 0xe4c657d4, 0x957dc44e, 0xa2c14943, 0xa67ef035, 0x29983738, - 0x26669bce, 0x126b72f1, 0x0e99cbd7, 0x5c1d065e, 0x79ba67bf, 0xef79d8ff, - 0x54defd12, 0xed7f064c, 0x7c3c8204, 0x38af9f30, 0x327e88cb, 0xed42bf4f, - 0x8002cdff, 0x9997456f, 0x4d3b07f2, 0xea24fac1, 0xfb1d12a7, 0x0f8b3d4c, - 0x1ef10123, 0xf3128ba5, 0xb167d493, 0xa3ea34fe, 0xfcf20d9b, 0x3be3825d, - 0x9190afb8, 0xfafcbfd8, 0x027e7d7c, 0xb7c26b7f, 0xfa496fe2, 0x8c80bccb, - 0x307f25bf, 0x6bad20f6, 0xbfce4cea, 0x6177afa0, 0xbafa0afc, 0xebc91a68, - 0x6bbc780f, 0x719178e3, 0x4f66667c, 0xc0b7c61d, 0xbc9ef487, 0xe4f729f7, - 0xe41e749b, 0xf537248d, 0xb7f0e5db, 0x5bc9c526, 0x6869a88d, 0x8487fba2, - 0x42f795dd, 0xafdf6a8d, 0x19be3aa8, 0xfee1c555, 0x60c59269, 0x7d443a17, - 0xd3971277, 0xa5115551, 0xd88dfa00, 0x015143ba, 0xfced119e, 0x0688f77c, - 0x0c9ff746, 0xf0e61bcc, 0x95870d8e, 0x70a28adb, 0x17669b37, 0xe69e0079, - 0x09af874c, 0xe0ce699e, 0xcd77080b, 0x039d08b1, 0x5bac7a9d, 0xd32978c5, - 0xf205ffe9, 0x6bd7849b, 0xbcc08cf6, 0x8718e3bd, 0x9fc065b3, 0x79e6c9ef, - 0x3c0aefc9, 0xc9fb09b7, 0x4efdd30e, 0x336f6e4e, 0xa6db19ef, 0xfd26673f, - 0xccd7e858, 0x72e3ee28, 0x614f799e, 0xb8ba03db, 0xb03f3cb1, 0x0f979f03, - 0xbf11371b, 0x307fcfb7, 0xc73ee2a2, 0x154d5b0b, 0xf6fc38e1, 0xa75394b6, - 0x2eb8d7ff, 0xc957ff09, 0x4967ec87, 0x1def9a1a, 0xb7060f82, 0xa5ed443f, - 0x84dfa64f, 0xd06cd6f0, 0x48f16e18, 0x033a67bc, 0x239f1027, 0xc4155bda, - 0x9f8e63c9, 0xae0e7828, 0xce798aba, 0xaef6d203, 0x7bc1cb6b, 0x7cee6a97, - 0x79ef072e, 0x38c0f092, 0x98d6ef84, 0x0fd28b73, 0x67e11ff9, 0x67033b94, - 0xcebafc70, 0xb7bfb44d, 0x5fbf0772, 0xcfbae127, 0x9eb02f11, 0xd5bfc8f5, - 0x5478bfc0, 0x8dfb0147, 0x6859acf4, 0x6a26efa3, 0x63fe7176, 0x18f0b41b, - 0x8eefb7ac, 0xe47da098, 0xa61f7edd, 0xed77abef, 0xf0e99656, 0x4c26b235, - 0xb9e77bfb, 0x97227ee4, 0x4bed11f7, 0xb38f886a, 0x63e43e1c, 0x71d92fcc, - 0xfdcecf3f, 0x1e52deaa, 0x425af49f, 0xafd0bd63, 0x87c93737, 0xbabd3bdf, - 0xdefa0afb, 0x35bcf5d0, 0x7ca3b8a2, 0x6f7ac0f3, 0x40f9c229, 0xdf20f339, - 0x835fde80, 0x2726f2f5, 0x1a9fbe43, 0x77a9c743, 0x3bf6be73, 0xc31ef2dc, - 0x63d7c889, 0x81aedc1d, 0xeebf205d, 0xf3c38590, 0xdd74e33c, 0x75c8149a, - 0x87f7e064, 0x54f18611, 0x86bb454a, 0x387608f9, 0xbd5bf095, 0x37d683b5, - 0x7bf71772, 0x92b577aa, 0x82fd4a3c, 0x7b7bc0f8, 0x457be2a7, 0x47040fc4, - 0x943b93e9, 0x927fd0e3, 0xbcf3ccc3, 0xc7ec775b, 0xf019887b, 0xd02fc60b, - 0xce4affbe, 0xe96e2a3f, 0xce3dc80d, 0x59e7c453, 0x097b93a6, 0xbff91c77, - 0x1e77e118, 0xe5c83eeb, 0x6fefc23f, 0xe921fc12, 0xf5c1c330, 0x21c7a48f, - 0xe300e80d, 0xa24bca1c, 0xa23ca471, 0xfa11ccfc, 0xc68ce4c9, 0x090e1249, - 0xd9472ee7, 0xb8298e15, 0x775a6eee, 0xe09556ed, 0x0502d72e, 0x3b7c75ab, - 0xfbf9c1cf, 0xb57782c0, 0xf9be781e, 0x9f0947e7, 0x3f0a2db5, 0x5472dac7, - 0x3e7a879b, 0xe319acf4, 0xff19ab9d, 0x51cf747b, 0x7757cfd2, 0x76d7bc70, - 0x736f56ec, 0xf728f946, 0x74c581e4, 0x95bb751f, 0xe9923fa1, 0x788cde0c, - 0x024fc418, 0x25cf520f, 0xf4871392, 0xf91a4253, 0xe421e029, 0xf520dc62, - 0xdf1156e4, 0xfe7f2730, 0x515d624f, 0x41ac10fd, 0xf927947c, 0xdf50d80e, - 0x3ce8544d, 0xe933b487, 0xf51e3833, 0x37bdc4f0, 0xd287e64f, 0xb25f8c98, - 0x63bee8e7, 0xe2b7d018, 0x5d04bbfd, 0x3f8479e1, 0x37687967, 0x74b1dc25, - 0x6bf081fb, 0x1351f0e2, 0x476b1fc2, 0xfac05f24, 0xf73db19a, 0x41ec89a4, - 0x86d6c86d, 0x98af26fb, 0x75df90e6, 0xf09b8160, 0xdf90b357, 0x67f9bc63, - 0x84d4af5c, 0x777f749c, 0x256e704d, 0xdba543ed, 0xc50fb87d, 0x79b50782, - 0xf774c1ae, 0xce9fbf3e, 0xcedd5c31, 0x8f4060e5, 0x4bfa73b6, 0x1fd72efd, - 0xcfc7375d, 0xec858d2c, 0x6dbc51a9, 0x7d08f24d, 0xdfe5cc10, 0x3ccd7fa3, - 0x7b1666f7, 0x88b3d29f, 0xcf5b5a8f, 0x2faadc21, 0xd35fbb79, 0xf2c727ef, - 0xd7baf557, 0xac2ed10a, 0xa54c3aca, 0xb7a0ff3e, 0x7d057b57, 0x8be5149e, - 0xa7985f48, 0xc93b727a, 0x0d07f54d, 0x0ace6f24, 0xc79c67ae, 0xd6307a8c, - 0xb4772a5f, 0xdefdc2cf, 0x9e2a1ff2, 0x5ed89626, 0xde7850ac, 0x2fada3f3, - 0xc19cf1bb, 0xe26bbdc0, 0x0e1bf03c, 0x3bbdffce, 0x97c4e101, 0xfe50da0d, - 0xc78d57e2, 0x74296f22, 0x7dc0808f, 0x1719aeef, 0xd2e7887d, 0x7e532677, - 0x375dd3e7, 0xc021f9dc, 0x72e3bbdd, 0x4de943b2, 0xfe9fe201, 0xf70fbb0c, - 0xa97e20df, 0xebee8050, 0xe3765fdb, 0x3f27e4fe, 0xda2270ba, 0x9c050fb7, - 0x5e667f27, 0xe7b97887, 0x865e9f99, 0x2561d5ed, 0xef6cf50d, 0x15fe1fce, - 0x8ed570f5, 0x9a9f8a7a, 0x0d4bf47e, 0xe14d39f7, 0x677cfe56, 0x7dfb07b2, - 0x65d37db2, 0xf6a6ef88, 0xb93f6a26, 0x07ea95bd, 0x4be9f99e, 0x33f68dff, - 0xbf61f6e0, 0x4fdb3f93, 0xaa09a974, 0x04f0defc, 0xeee8fd7c, 0xa19f5cfd, - 0xb07287bf, 0xc919eb90, 0x3f7f92d7, 0x8bd6e679, 0xc6bbfaf4, 0x60a5181c, - 0x1f5661ff, 0x7d07d79e, 0x15fbfa4e, 0xc4ed533b, 0xce9cadf7, 0xaf74d5e6, - 0xd73e7943, 0xdc61883b, 0x72febaf7, 0x91477d07, 0x4afb10e1, 0x293f1176, - 0xbcc3ed0a, 0x6d05e972, 0x217dba4d, 0x9457bf49, 0x1756a3d9, 0x8b379f45, - 0xb8939b79, 0xf514f93d, 0xd539c430, 0xac1efc65, 0x5f6c7f4f, 0xd6b5fe48, - 0xd76bf743, 0x34be7114, 0x9a3d393b, 0xb7e57e45, 0x39630ee0, 0xcf02e41e, - 0x8eeb40d5, 0xfadf292f, 0x1a6fd913, 0xbed357c2, 0x784752da, 0x0e7f11f9, - 0x8ee7c658, 0x354b06a2, 0x1b592f3c, 0xe91c5e3f, 0x3dfd3274, 0x663a2376, - 0xde92f28f, 0xe8c6fab1, 0x5511d2fc, 0x27dc26c1, 0x906d6ab8, 0xe17ea9ee, - 0x5ee937e3, 0x2ac667e3, 0x30df8893, 0x2f76847f, 0x6a79a4e4, 0x70078f31, - 0x7114ef9e, 0x17a987a3, 0x32aff1eb, 0x75fb49d5, 0x6a97a4fd, 0xdc5d859b, - 0x5b19e221, 0x6bde367f, 0x2f39ef0a, 0xc09bedd6, 0xd5274e7b, 0x8fe7b3fb, - 0x5a143b47, 0xabc87648, 0xa527bc11, 0x09a161fe, 0xa1e2e8b7, 0xf51738d8, - 0xca77e61b, 0xe77ea59d, 0xe3296894, 0xdd3c58df, 0x3877da25, 0xea277efd, - 0x16e79dc7, 0x7a09d687, 0x2cf4aa3f, 0xed0e3e47, 0x2f907bb3, 0x29eb2eeb, - 0x3bb1ebd4, 0x0b4e9e04, 0x41dfc13e, 0x64cdb8a0, 0xb5df110a, 0xa4dad05d, - 0xe77bb60c, 0x44757f09, 0xba41e2a7, 0xc73ad88c, 0x9bf03f40, 0x7f686bd6, - 0xe4252ac6, 0x7eae76cf, 0x11e61c6d, 0xaf586e81, 0x495d98eb, 0x833b03f8, - 0xe75d6cfe, 0x73840eec, 0x3eb5fa64, 0x3f0797dc, 0xe77d1664, 0xa0a6c351, - 0xda3a3efc, 0xad246fbf, 0x1e786143, 0x384b51f3, 0xa3f7ed0b, 0x787d0ae3, - 0x582ea63e, 0x0af24359, 0x2f7d2d7e, 0xfe40dc15, 0x26f79d6b, 0xc6a7ed1f, - 0x853ef9ca, 0x1be054fc, 0xab8b1dfa, 0x7c2cbbf1, 0x7920ec3f, 0x2dccebaf, - 0x9eaef845, 0x9e60f3e9, 0x8fc494ed, 0xf4dd2d2c, 0xf7a7183b, 0x27485958, - 0x03eeaf97, 0xf80266bf, 0xafc17b35, 0x3fdf8099, 0x1571d9fa, 0x0d7a71c6, - 0x5deab779, 0xcdef74b9, 0x7f8ed129, 0x2d7ddd5e, 0xe21195b5, 0xcfe11acb, - 0xc5fd5ba6, 0x26e8ebb7, 0xfa5894fd, 0xf6e4ee3f, 0xe727bce8, 0x00463d12, - 0x239f103d, 0xa26e9ab6, 0x863485f5, 0x8aaabbeb, 0xbe01ea45, 0x229ab6ab, - 0xfa884f97, 0x3de3b131, 0x4f7114e9, 0xf518a05a, 0xa702f95b, 0xca87af4f, - 0xbb26fc93, 0x2c628fce, 0x92e31930, 0x845d338f, 0xaf4e1df7, 0x7e0c87f4, - 0xd3b8e0cf, 0xe1f8c3ee, 0x04d0969a, 0xaf0e87dc, 0xf2885a4f, 0x49d47a08, - 0x781eebfb, 0xb6d6e31f, 0xb8f3b64b, 0xf9d689b5, 0xc247a77d, 0xe301b937, - 0x5ac0fcdc, 0xbe5c7f6e, 0xe5d6fb78, 0x2ee7e94e, 0xbef3c62e, 0x3e9d7375, - 0xff36af8c, 0xe38a5942, 0x746c85d7, 0x705d6e39, 0xf2579bed, 0x5fdf8038, - 0xbaa2fc23, 0x347d1bf4, 0x7a7e20ff, 0x4e8ddb8f, 0x4ebaaf4e, 0x1c642f6e, - 0x5e217a8b, 0x29ca5ede, 0x6b8c63ea, 0x39497f24, 0x3c79573d, 0xfc90096d, - 0x2375869c, 0xe1f00e3f, 0x630f9c0b, 0xff8934e3, 0x8bc2f8d8, 0xef7506c2, - 0x8f7d0776, 0xe69af52f, 0x3d451c0c, 0x6476d754, 0xd0abb123, 0xdc2f7543, - 0x3f94385f, 0x78f95365, 0x3d2b9036, 0x1359e0df, 0x432a44d7, 0xc0df3a4e, - 0xc6df5fb8, 0x1d8e8fef, 0x4f42b7ef, 0xbf4a7c49, 0xcf82f319, 0xc29ff943, - 0xfa227d7e, 0xcf29d5fd, 0xfc0d8457, 0xdf0535e7, 0x44f17dc3, 0xf7be56fa, - 0x7226f34d, 0x63efa97c, 0x99f325e9, 0x45d98eb8, 0xecb5fb89, 0x0c48f117, - 0x3e0b14ff, 0x80e7037e, 0x07724f75, 0xbea0b917, 0xd3f99928, 0x7e8bdf00, - 0x29f7e569, 0xc42fed8c, 0x655aaa78, 0x5797cc21, 0xf584b4ef, 0xa1f736e7, - 0xf5ef040f, 0x33216cb9, 0x3bb95df0, 0x0671c1e8, 0xcbbd87ee, 0xc1e1e74e, - 0x7282994d, 0x481ed23b, 0xf7e06575, 0x4f743d89, 0x1e0e63ec, 0x311ff44f, - 0xc5cbcf87, 0xe87bbe7b, 0xacce84f7, 0xea7ca7cd, 0x61fc2f3b, 0xede01fcf, - 0x1a3e7b53, 0xd493cfad, 0x55364cd9, 0xad3c6f97, 0x2b67dfc4, 0x167d7176, - 0xf3f65bcd, 0x438be5bc, 0x63eb41e7, 0xf3d1fbf2, 0xfdf9b1b3, 0x6fa878e8, - 0xfbf263eb, 0x6f5c5d07, 0xf9e7df47, 0xf14c77fd, 0xc7bd6fbf, 0x8bafdc65, - 0xc5cfbf6d, 0x8f23abf9, 0xe3ff45cb, 0xe4fd184a, 0x115d6be5, 0x396b8fbc, - 0x63bf463c, 0x311427b9, 0xf9ae51b9, 0xcdfc323e, 0xbe5f81b5, 0xe807d844, - 0xbe474ea7, 0xff68790c, 0xd0f42831, 0xff57ce92, 0x72f4f18c, 0xc3a6d995, - 0xbe6d4b38, 0x13fbf843, 0xba673a1f, 0x7e56ed51, 0x744c86e7, 0x6a2d86e6, - 0xf455bca0, 0xf374f57c, 0xfabe72df, 0x57302bb0, 0x7fd21bf2, 0x5f5cedd1, - 0x9756fec8, 0xe467373c, 0xd01377b7, 0x665dc739, 0x3ababe46, 0xc698b029, - 0x4194fdbd, 0x7a569caf, 0xf201fe9e, 0x7bfe6ae3, 0xd7efb147, 0x8afaf98a, - 0xc53ee9bb, 0xc97fd5be, 0xebaebf26, 0xff51b7d5, 0x817bcad5, 0x7b862c3b, - 0xfc932b81, 0xf7efc4d5, 0xfba14f4d, 0x73c186ce, 0x1ab82782, 0xf6fe41e1, - 0xdbf9eba7, 0x2ce78c9b, 0xba01b5ea, 0x921ef7d0, 0xcb946c2e, 0x23ae8f48, - 0x36a58f44, 0x701bdd3f, 0xf0403f9b, 0x4c8e4a2d, 0x5ff018f1, 0xf7dd37f4, - 0xf6e42958, 0xfdfe2d1d, 0x3e09f7e2, 0x8dfb283c, 0x4efafce0, 0x1e7aab36, - 0xff234ccb, 0x2ce42c3e, 0x71cbde2c, 0xbc421ffb, 0x18795e80, 0x8e7400f1, - 0xcaf5e8a4, 0xe7ba7ee4, 0x374a6fa2, 0xae7d1f7d, 0x80ac66f8, 0x8e784bd6, - 0xd1385e73, 0xf0b56f7a, 0xb5df0075, 0x47af48b9, 0x87bfebc6, 0x5b80b9ff, - 0x493be5ca, 0x142cbc46, 0xe091fbeb, 0x87974a93, 0xfd7c1be7, 0x3bce38d9, - 0xb8f1f1a9, 0x768f8a28, 0x7fb583c2, 0x6fd01a71, 0x6d35d83e, 0x12a7e122, - 0x938a0f9f, 0x49ff228a, 0x5c6b6dfb, 0x0bc5ed0c, 0xfdc9be72, 0x963f8f3c, - 0x885a0bcf, 0x57d96eff, 0xc2bd6de0, 0x3145e77f, 0x2b6844c3, 0xdf2f32c7, - 0x7fce980f, 0x203ecaaf, 0x195c8797, 0xcec4fc51, 0xc09b0c7b, 0xc4bb779e, - 0xe63e40f7, 0x1f16f7c3, 0x8b75ccfd, 0xf43df0d7, 0xef4e385b, 0x1fc8479d, - 0x0a45a63b, 0xda719c5b, 0xc7b6c8b5, 0x6b3b6894, 0xadc17ee0, 0xbbe99acf, - 0x9ea66398, 0x2d7f7047, 0xfc99a6f4, 0x3dde3fa8, 0xfa2bbe83, 0xffa30ef4, - 0x45d0527a, 0x20309f7e, 0x830b783f, 0xc5eff079, 0xcb9ce6dc, 0x3ee629e5, - 0x14164af6, 0xfb13fbbf, 0xe103427d, 0x893df079, 0xe73c87eb, 0x7ce6e995, - 0xf38269f3, 0xebfb8a19, 0x3ee327da, 0xc4bed45d, 0xf1f1d3ee, 0x474e6edc, - 0xf6fea769, 0x304aaef9, 0xe77175df, 0xba7cf393, 0xb3bafe3c, 0xd58edcdc, - 0x461becc7, 0xb3e795c7, 0xa49fa85a, 0x2cd9fd77, 0xd2eb2e7a, 0x37be8a8f, - 0xfd8bc68a, 0x13e6472e, 0xa7beff25, 0x9efd1b30, 0xf224db11, 0x78099e86, - 0x687bd0bf, 0x06df412f, 0xf52f60af, 0xfe4b8800, 0x9aa17879, 0xd8efe517, - 0x9d5f0075, 0xd51effd4, 0x4fb8b704, 0x217642ef, 0xf821177d, 0xe59df179, - 0xf25aee74, 0x854f546f, 0x71adbc78, 0xa7319e3f, 0x18b3ff41, 0x13a4b0fb, - 0xb204c1ec, 0xfc0e74cb, 0x12378bf8, 0x5f32571f, 0x17d1e926, 0xe93f74ad, - 0x120bb5d7, 0x4b421b9e, 0x8adefc2c, 0x6bc7ba74, 0x86ff988e, 0x981fee2e, - 0xfbfe7e6c, 0xf5e67e55, 0x03dff264, 0xca05fb21, 0xa5fa855d, 0x00cc8eb2, - 0x3162e9f5, 0xf00fbe0a, 0xb64a2a5f, 0xf2859834, 0xb7ffef26, 0x961670b3, - 0xbcf9174d, 0x04ae5e58, 0xa7070e54, 0x30d62cf3, 0x6c9bfb0a, 0xff9c663d, - 0x58da7991, 0x4fa01fbc, 0xdf89f249, 0x74fba3fb, 0xf3f303ad, 0x9dd64bba, - 0x0eefc32e, 0x7dc5bbd4, 0xa366360f, 0x4673ebdf, 0x057da13e, 0x616cda51, - 0x0701ddfa, 0xcdba448b, 0x8c00fbf8, 0x614f9bbe, 0x3dfc112d, 0xff17be8c, - 0x1e1c518b, 0x76fc0fbd, 0xef2194f7, 0xc7b6370b, 0x2a9e17dc, 0x7e634ae0, - 0xad221fba, 0x635f78c2, 0x42ad7386, 0x3016e13f, 0xc444cf3e, 0x0b61ff43, - 0x6f0bef63, 0xe1fc7051, 0x1b73e341, 0x5f7a463b, 0xbeb20489, 0x93de8b4c, - 0xdf8920b4, 0x22eff44b, 0x115b9c8e, 0x6f015728, 0xafd88bf3, 0xe8de50fc, - 0xe1177e09, 0x4370f1bf, 0x17d40d6d, 0xe3c6cebe, 0xc9c530f7, 0x185dea9e, - 0xefcadd7f, 0x3efe2d6b, 0xec361d67, 0xf0c78a3c, 0xc9b51707, 0x2b2ace78, - 0xb17d718c, 0xd48fb443, 0x7f18bda8, 0x3fdf1100, 0x95f74bcf, 0x74f38bd4, - 0x9a7987f8, 0xc333f3d6, 0x67d30768, 0x7ac46ff4, 0xee8cfdff, 0x19f79059, - 0x408ec76d, 0xbf4afa9f, 0x87da0325, 0xe23e64cf, 0x03bed149, 0xebcf9dff, - 0xdf889797, 0x5d47c08d, 0x2733ca9b, 0xc6fa9b13, 0x5cfcc1b0, 0x18bb35df, - 0x73f954f3, 0x297f13a7, 0xba0a2f82, 0x7c51ff14, 0x3f68c22f, 0x972bbeb5, - 0x1c17dfce, 0x719e51f6, 0xd4e1a981, 0x1bdf5c1e, 0x13effe3c, 0xc84cc6fb, - 0x7918d4f3, 0xafca24b9, 0xe72c5ed4, 0x7accfb97, 0x3ce046be, 0xfc44a0f0, - 0xc7bd12c4, 0x1662ece5, 0x6671c3fd, 0xbd25c744, 0xbdb45332, 0x3fdf0b72, - 0xf646aa9b, 0x225e1ca3, 0x4e5162ca, 0xe2330166, 0x7f73c4ab, 0x5177ce13, - 0xf21a68e0, 0xaf9b74fd, 0x9f46af19, 0xb86150bb, 0x4e9cc4af, 0xffb17ebe, - 0x3d8af52d, 0xfb67e799, 0xddbab3dc, 0xdf997dba, 0x30df85ba, 0xb98d8d96, - 0x24f7ff67, 0x3bffa517, 0xdb18dc91, 0x4066e463, 0x7d3f313f, 0x7dfb18b7, - 0xff3f3ce1, 0xc05e6a6e, 0x7e3e7cf8, 0xe71f97d7, 0x15d0ec77, 0x0b8e8ccb, - 0x78416472, 0x6ec77f62, 0x2ab7f48e, 0xa2d6fe8c, 0x8522fa7f, 0xa7b0c0ec, - 0xc1ccbf6b, 0xe25ce67c, 0xb12ebacb, 0x43fc0f3f, 0xfd89e3df, 0xe34efaf9, - 0xd77d7cfe, 0x74337b92, 0x9d75f3fb, 0xcf3fb55f, 0x5bbfeeed, 0xd30f74c2, - 0xd604afbf, 0x165e7982, 0x7107c2fb, 0x9462783f, 0x3cc5aeee, 0xe35073af, - 0x3107f4fb, 0x4bcba37f, 0xfcf070cc, 0x340b8ce8, 0xe5573e7a, 0x2129f2fb, - 0x0b92f927, 0x665defc4, 0x7e41d998, 0x1fe7847e, 0xeb3e22c2, 0xb40d7e16, - 0x47fca06f, 0xa465dc8c, 0x6547ca31, 0xf2963cdc, 0x8abb0b3a, 0x0d3e6327, - 0x7fe533f4, 0x7a5eddbb, 0x98b0617f, 0x395723f2, 0x8af3a46f, 0x6aad5df5, - 0x7adf4ea5, 0xf5f78d93, 0x9a5df9c4, 0xfa29e482, 0xe019a5df, 0x489e7a27, - 0xa7dfcb0f, 0x9bbe62ac, 0x7de2e597, 0x9d774001, 0x3194b79d, 0x53fb4f7e, - 0x5d2b9d0a, 0x76483ce5, 0x630ed578, 0xd45b943f, 0x6bafd57b, 0xcd537f74, - 0x467c41ae, 0x5de52d72, 0xa1b517de, 0x3ee0afd4, 0xe611df4f, 0x77fa436b, - 0xc05b8cc4, 0xe04f98ed, 0xa5e858b3, 0x3666f349, 0x24e53ee1, 0x565f9713, - 0x7fc91be9, 0xe7917377, 0xc7551d84, 0xfe50cad3, 0x63eb9f40, 0x067dfcb3, - 0xc4531fd4, 0x717ab1f8, 0x2e03f08a, 0x137d6153, 0x0a7d76a3, 0xa683f5e3, - 0xbddd332e, 0x3c9ce02f, 0x9fdc4720, 0xd24a7a90, 0xc6e5ef03, 0x92cb5df3, - 0x63c87e85, 0x184f4879, 0xc157f89f, 0x8d2a73cc, 0xbca1521f, 0xf407cc44, - 0x84df210e, 0x9dfa364c, 0x034a8d8f, 0xfa1b79e9, 0xa03e508d, 0xfd7f4904, - 0x46642abc, 0x1ac45ebc, 0x1726b86e, 0x03b758f5, 0xb07c05e9, 0x4d1fcf52, - 0x5bbd922c, 0xb509f031, 0xe8c4a6f7, 0x3d12a61d, 0xc238304c, 0xa5ad7669, - 0xc42bf47d, 0x6e53a273, 0xc9d51fb4, 0x3fb4618f, 0x87c01fea, 0xf52fddb1, - 0x93ea3309, 0x8f05f65c, 0xf43feed3, 0xfb0f8c1d, 0x8c5fc22c, 0xa1dd4ba1, - 0x641f8b93, 0xbe49fa51, 0x983598ba, 0xca1f00b3, 0xf75e792f, 0x2a5ba462, - 0xfc8c51fa, 0x892c69a7, 0xe64d8be4, 0x57c907f9, 0xa2255e92, 0x4fa484f6, - 0x7841cb0e, 0x53b4ed2f, 0xa462e9de, 0x58bdd013, 0x4aed2f8c, 0x6af4e4c4, - 0xb0174879, 0x7ec1e61b, 0x97aa665e, 0xe4c933e8, 0x614cfa27, 0xdba434be, - 0xd7ddf6cf, 0xe8eb7084, 0xe3192db0, 0x80e80545, 0x3ed8357c, 0xe463db18, - 0x94bbe259, 0x2c9fc979, 0x9c394665, 0x670d04e1, 0x8dcafba2, 0xa0b363f7, - 0x7b94f08a, 0x6f8fdd06, 0x41b1d232, 0xc8ae7845, 0x444bf632, 0xa7a41ccf, - 0x89690fb4, 0x6ae529e9, 0xa9d39db7, 0xfa84e81e, 0xd2afd266, 0x34813867, - 0x25ccade7, 0xc53bb0fb, 0xfaf584db, 0xc5f4851a, 0xcbdf6ee4, 0x106fcf58, - 0x337eb9ed, 0xafd683ee, 0xde53ede5, 0x7ac0cc0a, 0x5ede3ac1, 0xc9b04f7c, - 0xaddfe385, 0x2fd8bdd0, 0xcbc7727c, 0x47be1ed8, 0xcfca5fbc, 0xe06fd6e1, - 0xf9847fef, 0x3cf10bde, 0x7c0ccb44, 0x9739ae3e, 0xf0b00eff, 0xfc172e67, - 0xe3695bb2, 0xc83c20f7, 0xc8715dc7, 0xce28c496, 0x65cafee1, 0x6f979d62, - 0x3f4cebe5, 0x1785557e, 0x37b2a9f8, 0x2d95d740, 0x1109c164, 0x3372ef58, - 0xf1f9f204, 0x10bc1be4, 0x0d288f28, 0x500aa744, 0x72fbf49d, 0xc0b67cd3, - 0xc7ef9e78, 0x92fa79ef, 0xf329bc79, 0x35ffb8e5, 0xfb4f675b, 0x469e7992, - 0x654ccbf6, 0x09ef3f7c, 0x91a3f917, 0x7c8298c7, 0xfec0b88f, 0x57faf289, - 0xbd9037e4, 0xe64722ba, 0xa5d47bf3, 0x97f15f30, 0x178acd9f, 0xcc9e7f07, - 0x62c7e4ed, 0xaf3e4f1f, 0xbdfdf30a, 0xf4cbc8dd, 0x30e9ad7d, 0xe19853d5, - 0xb9ddab1e, 0xfe7aaebc, 0x28f35f7a, 0x06b35dfc, 0x36ca8435, 0xcc7da15b, - 0x679fe0eb, 0xffe14627, 0x2830d93f, 0x00800092, 0x00000000, 0x00088b1f, - 0x00000000, 0x7dedff00, 0x45947c09, 0xf37f78b2, 0x093215cd, 0x87213b93, - 0x98884013, 0x861c2184, 0x4109264b, 0xe8098414, 0x720d7282, 0xeb22dc85, - 0x97f75763, 0xd9110441, 0x73d6f8dd, 0x0160763d, 0x18896151, 0xc3824830, - 0x12a20882, 0x75040411, 0x0844ae22, 0xf1e20c49, 0xabaf2e1e, 0xbe667bba, - 0xfc38666f, 0xddbf7ffb, 0xdb2e23f7, 0xaaefafa9, 0xeaeaeaea, 0x084c8eaa, - 0x908238b9, 0xadc4b45b, 0x9680a1cf, 0xc8401bfe, 0xd5fa25dc, 0x3f02242b, - 0x213c6376, 0x33fe1277, 0x192d7aec, 0xf01dc844, 0x289085bb, 0x2afda4b3, - 0x9fdefe83, 0xd328bff4, 0xf3bfcf72, 0xc84d94a3, 0x3a558caf, 0xd50a1dd2, - 0x8459ece8, 0x9c9b359c, 0x7c84be9a, 0xcce2392e, 0x7d690903, 0x965cff76, - 0x64beceef, 0x47e696be, 0xb048d4d0, 0xefde62df, 0x13d2e27c, 0x977cdfda, - 0x918f0bee, 0xfd22ed0d, 0xa43a6a57, 0xae9a1a27, 0x232f7e57, 0x41e93d1e, - 0xf2ad7948, 0xe271257b, 0xe57acaf7, 0x91d99277, 0x845efd06, 0xf69f8a1f, - 0x5907cb67, 0xcfff6932, 0xe6147fbc, 0xb9346c57, 0x97129a65, 0xc193d5ae, - 0x1e7ce1eb, 0x4e157f34, 0xc8fba793, 0x64246f17, 0x6cc89752, 0xbb9095d2, - 0xe67e8ecc, 0xf99c4238, 0x146529e6, 0xe1e9cebf, 0x5c5025d6, 0x4c396536, - 0x6308fdb4, 0x8bce9b96, 0x4cc588d8, 0x79f12df1, 0x9f0c0d4a, 0x3c52471f, - 0x4832f8c3, 0xe699e006, 0x14d1f53b, 0x8448e3ee, 0x93881bf1, 0x88c23e00, - 0x4252112b, 0xbf1846ac, 0x42475e1f, 0x2179adff, 0x57ccaef1, 0x1f027de1, - 0xd36244cf, 0x47137f41, 0xa775f12b, 0xfbd22169, 0xfbf2bb4e, 0xcb1388af, - 0xc2ac9a4f, 0x24c9b12f, 0xe0aed7de, 0xca1cbb93, 0x9e041372, 0x3cf1ab47, - 0xc515fccc, 0x01309d2f, 0x54d24c7c, 0x58c9e3fd, 0xb30d6f0a, 0x1cf6c5ae, - 0xb852178f, 0xbac12eb3, 0x4b44c002, 0xfdb409d7, 0x926c404a, 0x3d22ae8f, - 0xab189d58, 0xe707e9ed, 0x93761991, 0xee389e0f, 0x1499a0d8, 0xcfe5d22e, - 0x06913c03, 0x29837ffa, 0xd210c53f, 0xb2f80994, 0x18262574, 0x52d47107, - 0xde92d3b8, 0xd814da35, 0x132b488f, 0xfdb4e313, 0xdb4bf8fd, 0x3e066911, - 0xb0cf20b8, 0x2a383267, 0x53f552f3, 0xc131b4e2, 0x5acf37fa, 0x91787809, - 0xa38e81e1, 0xadf943de, 0x2b5f7d73, 0x2a7210e5, 0x942468ce, 0xa67467de, - 0x1f5f52e5, 0xea2ee63e, 0x4a95ed86, 0xd0b6efae, 0xc764836f, 0x52cf3023, - 0xf8cf5b8d, 0xa13a6aa9, 0x6f3f96ed, 0xf748adb0, 0xf8d43fcd, 0x2d23f008, - 0xc93bffa2, 0x1d7ad2d0, 0xeaeb1752, 0x0bdefc74, 0xddca2ce8, 0x2b17451f, - 0x9185ef5d, 0xdd60278e, 0xe8b8c3b7, 0xa309697a, 0xaf8e86eb, 0x01932245, - 0x74e2549f, 0x7e02ca2d, 0x04eba3bc, 0x951297ca, 0x81d1c953, 0x351856fd, - 0x5e1fb764, 0x757d78db, 0x096655b9, 0x9989f7c7, 0x4dc7ff60, 0xdf30d5b6, - 0xae293d16, 0xe96c78a5, 0x9a48d3c2, 0xa01bfad2, 0xcf2840fc, 0x70e0edea, - 0xabe5868b, 0xbee517db, 0xdd9236ac, 0x545fac74, 0xf29bb213, 0x4369e597, - 0x4bb68b95, 0x147fd2a6, 0xa2dbed2f, 0x453e0156, 0xbce67dbd, 0xdd1c604f, - 0x802df64d, 0xcd35d98f, 0xfb5f877a, 0xe01f30ed, 0x579b1d13, 0x454b187b, - 0x45ccfb7f, 0xef1e209f, 0xbcdd20f2, 0xdb0160f0, 0xe1f6fdb1, 0x1fd21e4c, - 0x72c3ac0d, 0xc5cb0ebe, 0xae53ab7a, 0x04a64937, 0x63f9468d, 0x5aa0b941, - 0xc67a957f, 0x17ef844f, 0x4ebac4d3, 0xfb42d089, 0x64535953, 0x1fbec35a, - 0xa64248a5, 0x64b2c91b, 0x21a33f9a, 0x7175e501, 0x1997b3a4, 0x0cd23ce9, - 0x0ce489fb, 0x5f862f97, 0xe4b4bf8a, 0xd93e312b, 0xa9ed6fc7, 0xf6cf384d, - 0x81a63f55, 0x786f2ebc, 0xa875e507, 0x191f3979, 0x48f38516, 0xd6e0fb60, - 0xd9391b6a, 0x059787d3, 0x428f3666, 0x0f40acb9, 0x313664f2, 0x7ea7e81b, - 0xc3d3fba4, 0x57b95c28, 0x6f285c47, 0x93901a6c, 0x9c63c397, 0x7e2c435d, - 0x72612df2, 0xf0c96217, 0x688e49c1, 0xdc5c9c05, 0xb53e514d, 0xff22bbaa, - 0x147d45ba, 0x1ccee9f9, 0xf963dc05, 0xebf94510, 0x7015f26b, 0x536e67ef, - 0x35c1bf94, 0xc2770141, 0x9e3f202f, 0xca4e5d97, 0xbfae37a7, 0xde7f515b, - 0xbf4859be, 0x895ebe3a, 0x4994d6d3, 0xd05b30f1, 0x80686e9f, 0x670e52c7, - 0x68a3ded5, 0xb725b89f, 0xe1cfcb44, 0x69bb31fc, 0xf94258ee, 0x897d6fa3, - 0x67221fa2, 0xd28e30ca, 0xa18912ed, 0x46a73eac, 0x7bcc4fb9, 0x37170946, - 0x992cbe3c, 0xf407ea04, 0xdb4b4327, 0xac5d2129, 0xf5a8dfa0, 0x11519e84, - 0xdd0fc8b1, 0x57c63748, 0x79303e6a, 0x074861f1, 0xf4f5e83e, 0x3e3e01b0, - 0x19ebe2f0, 0xb9d5f109, 0x7b8e07b7, 0xee3a36de, 0x18fc40f4, 0x10fc9512, - 0x43f25166, 0x1f928678, 0x7e4aac22, 0xe4ab9ae8, 0xa3be3507, 0x20fe4a6c, - 0x105ffa1e, 0x568cc77c, 0xbca94df2, 0xefe00f72, 0x5f9e7872, 0x1fe90abf, - 0xf0a987a0, 0x1af01e3a, 0xff6bc3ee, 0x2625b6dd, 0x61df660b, 0xe478041c, - 0x197620f8, 0x046c52e5, 0x3e561dea, 0xcca7a14e, 0x107ae288, 0xd69fa76f, - 0xf7d613bd, 0xa049c932, 0x967fd09e, 0xdcd3bae4, 0xc639df14, 0xd520a02a, - 0xa2b3ec6f, 0xd32c1ca8, 0xdf21b3bb, 0xefc1ef4f, 0x417bd2ad, 0xa7411ef5, - 0x7281c439, 0xa61f0025, 0x2f50f427, 0x3f40ff80, 0xff8411ed, 0xed077ea8, - 0x5179f256, 0x7234b93a, 0x06a4be20, 0x0d911dc9, 0x72106cd3, 0x3fb171d6, - 0x157ca366, 0x4a0da2f8, 0xe84772fe, 0x817da28f, 0x448f211f, 0x255206bb, - 0xab7f0227, 0x50c913e4, 0xa9371de2, 0x223ff841, 0x35e80bd8, 0x416f9bc4, - 0x0899037e, 0xbc4de94a, 0xd30f723f, 0x06a48d4b, 0xb242b2e9, 0x7f69972e, - 0x4be975f2, 0x7f4ba508, 0x64ffd533, 0xa69b42d8, 0xd18d77c0, 0x773ec329, - 0xfe60b91d, 0x3f5a06ea, 0xc5f95d61, 0xbff2d098, 0x5b8d8dfc, 0x281f549d, - 0x2464f4d9, 0x5afaf4a1, 0xa56f135b, 0x2ed6cbf5, 0xb4d1b48d, 0x7d44eb45, - 0x3c976bea, 0x7f6415da, 0xed8a3f7e, 0x264274df, 0x7c153f90, 0x795fa72a, - 0xd7ac1c6c, 0xccead6ef, 0xb9522d32, 0xd036e0de, 0x375151f5, 0x46c92c7f, - 0x8fc199b8, 0x54f8037c, 0x5e4a1b9f, 0x82de327a, 0x5933a3fb, 0x3ba90893, - 0x62b4d099, 0x81463fcd, 0x3a49567e, 0xd4b8c196, 0x1fffa0f5, 0x595afee8, - 0x77d4cf2b, 0xe11e720d, 0xb5d05aeb, 0x6fb1eeb2, 0xcdf848e4, 0x557e07a3, - 0xbd062f97, 0x3b67ea8e, 0x89bb3c84, 0x45eb04dc, 0xe2b883e0, 0xdf93ef50, - 0x99bb2178, 0xf66badc2, 0x787e4a47, 0xc421e422, 0xaced674f, 0x0969bcbf, - 0xaa36874d, 0xfe5e90d7, 0xcf585cf5, 0x9ee12f52, 0x5a581a4a, 0x0e4773a6, - 0xb654aca5, 0x687a874a, 0xaebfc6d9, 0x33c533fb, 0x5eb06639, 0xdd2fdb4f, - 0x43c7f6f8, 0xa6bfbe40, 0xa6cb1d8b, 0x7de29261, 0xffa4a974, 0xe8f8e516, - 0xdbfaf250, 0xfb164b7a, 0x8fb460fe, 0xedafa51e, 0x40ac93d4, 0xeed4147c, - 0x414c7bd4, 0x3cdb52e8, 0x1e02648a, 0xdd03d27e, 0x9121debf, 0xf820f484, - 0xa476f55c, 0xe909e383, 0xa5e4e9c8, 0x5cfabd5b, 0x412bf4c9, 0x2bbe7527, - 0x0afa8cca, 0xca7a87b4, 0xf6ff1b1b, 0xf14fc526, 0xcc2b0627, 0xf76ff8bf, - 0x4e3cc245, 0x5f18ab69, 0xde34b0bf, 0xd62dfb46, 0x98cde339, 0x2fc5efb2, - 0x6df91afe, 0x8ebf87de, 0xd93fa827, 0x38b93492, 0xdf9824cf, 0xc4efe79c, - 0x0e25cdf9, 0x17e2bbe4, 0x9fe83b64, 0xf464b5e7, 0x45d6416b, 0x175b3441, - 0x15d356a7, 0x4a77e74d, 0xf38044cf, 0x8b5aeca0, 0x517bd287, 0x28dafc18, - 0x8402ffd6, 0x9d191bcf, 0xf86b45ba, 0xdf4ba2ba, 0x3cd75f9f, 0x39f404d2, - 0x004b6a9d, 0x6892af3d, 0xd21f1c9d, 0xfcaeda45, 0xa3026161, 0x8568b10f, - 0xa8f2a47c, 0xf943be00, 0x2c2d9d26, 0x5c8f515b, 0xbff5f74c, 0xc74ff790, - 0xd0f405dd, 0xf5c1f153, 0xa668caf2, 0x269fd327, 0x7e5fc7e2, 0xf7ad9beb, - 0xf5b28f35, 0xabbbd62d, 0x7fe43468, 0x1fad887b, 0x839c97a8, 0x602772e3, - 0x243bcefe, 0xe2060794, 0xd7aeb60e, 0x56baf8e8, 0xa13e0be6, 0xb9c2d6e3, - 0x842fcbc7, 0xf14e6f9d, 0x27dcc8f3, 0x7dbf3d68, 0x8bfa12be, 0xac4f6c0c, - 0xfd7c79db, 0xf7cd1cdf, 0xc9febe5d, 0xcf4171f3, 0x5b73eabf, 0xeeb5ce99, - 0xe95eb0cf, 0x605a74fa, 0x30eceabd, 0x761b33ef, 0x5d377c7d, 0xc56a6727, - 0x4fca553a, 0xde2d3af5, 0xa7f236fc, 0xa99e9d7a, 0xe83e3b7d, 0xeded7d3a, - 0xb0664f78, 0x2bbffa75, 0xe6fe053f, 0xa7e52b46, 0xf0a18790, 0x728796a8, - 0xa9f105b4, 0xe7f48796, 0xc8141910, 0x04ef827f, 0x5abc95bf, 0x1dc81d7e, - 0xbe0a5f2f, 0xe0a5f2f3, 0x957cf53b, 0x5be753f8, 0xf9472ce1, 0xf0edbec4, - 0xcf4a64a8, 0x6ac906b2, 0x3dbd60b0, 0xd93c5300, 0x35231b70, 0xfd63927b, - 0xae0a9761, 0xa9b79555, 0xbcaabb60, 0xa9570543, 0x5c70bbca, 0xf4bbf565, - 0x5b81e504, 0x10f75e51, 0x3d804671, 0xad7651a1, 0xa76ca8a6, 0xeb465e63, - 0x47486fb7, 0x12697b7d, 0xc474dbb3, 0xfc8197e9, 0x4477376a, 0x75fc5346, - 0xb373f184, 0xca3223bd, 0xdcd32ecf, 0xf5fca320, 0xdae8c8b8, 0xaa1af620, - 0x3cfd2249, 0x62fe5424, 0x4d90bf66, 0xef408b69, 0xa0ad91af, 0x3c5ecd0b, - 0xcef41229, 0xe31e86f6, 0x73efd327, 0x43baa1f6, 0x903db9da, 0x49b4039e, - 0x38b3fe94, 0xe710b63f, 0x7ce8c353, 0xa2943566, 0xa57b3e3e, 0x4d735e92, - 0x9ccf510b, 0x1efd04fb, 0xe12fdf44, 0xaf3f14ed, 0x2b212fcc, 0x1d289f91, - 0x297760f5, 0x77cca359, 0x2ecffb70, 0x48fde7c1, 0x87b9c53f, 0x3942d5cb, - 0xb064fc73, 0x0995ec57, 0x836749f0, 0xdcef788c, 0x9e08b920, 0xa83d986b, - 0x3ca07482, 0x8569f813, 0x2d0fa0f5, 0x7cb75a6f, 0x5a01e83a, 0xf1eb6ca4, - 0xda68e7ec, 0xaf58f5ba, 0x71bf00ed, 0x0938ed24, 0x08ed3fb2, 0x64dda1b3, - 0x00cb8447, 0x3f7c6ff4, 0xa3b401ed, 0xce30ac18, 0x67df1df6, 0x3fb4df03, - 0x79062864, 0xecca9ed5, 0xbf1a4b23, 0xe57266cf, 0x5b57a461, 0x37e99eb4, - 0x99fdff0d, 0x06fae704, 0xf7d82b3a, 0xf9e38477, 0x30cdf2ad, 0xbff6c117, - 0xfd30e41f, 0xd0a9f372, 0x61f20713, 0x19bc9904, 0x704517c6, 0x07db953e, - 0xed3175ff, 0xa76ebcbf, 0x2fcd167e, 0x6ca7eb78, 0x37db0fd8, 0x4da67d33, - 0x5dd2b847, 0xad1e68f2, 0x61c616d7, 0x056eefe7, 0x160db77d, 0x9e423747, - 0xab70d98e, 0x4f0c14d3, 0x5e21a53f, 0xd13f10ae, 0xfbe47a31, 0x48fc7d7f, - 0x2bf28236, 0x609465c2, 0x767e3fde, 0x0ec1e41c, 0x98a9f203, 0xc5da99ef, - 0x6e5c7fa8, 0xfe62fdde, 0x4ae2f85d, 0xafb92de7, 0x7ff6de64, 0xe21f7a71, - 0x5d7aa8fb, 0xe379f204, 0x8c6f08fd, 0xaf78e2b0, 0xfeabdf90, 0x337dd1af, - 0xe5e47ba5, 0x7fc7fde7, 0xa68779f1, 0x9ce9befb, 0xc3b066ee, 0x13f5be55, - 0xe56aef8e, 0x537fa6dc, 0xba7a17be, 0x3890befa, 0xf0a5a225, 0x744f0e70, - 0xd2e79e4a, 0xc388f77d, 0xd2113a79, 0xdd475048, 0xcad38f27, 0x2a4b24c3, - 0xde132828, 0x7a071dec, 0x8aa932cb, 0x4737eca8, 0x6476d3b7, 0x940c474d, - 0x2d0e242b, 0x217217bb, 0x3c91df1e, 0x15f9d768, 0xb4852db1, 0x9a8ed482, - 0x3bdd6902, 0x97b42547, 0x923f2184, 0x9e3df57a, 0x0d11f516, 0x1de8019d, - 0xce2b00a5, 0xbe9f5a77, 0x8bc20722, 0xa293d8e9, 0x313f7f2f, 0xcfccd63a, - 0x58bd1d7d, 0xc46fd33e, 0xfbe8727d, 0x66f8e55c, 0x4ba76699, 0xf36f41dd, - 0x8c15c71b, 0x291e0093, 0x3ca6de9e, 0x7bfaa463, 0xd1d1dc12, 0x618fecf1, - 0x72ef2df4, 0x141b63e2, 0xe694d01b, 0xa9563f7f, 0xec193627, 0xae0d5b24, - 0xad4fd0b5, 0x1b4ddef2, 0xa1dbcecb, 0xef13d0f1, 0x421e0453, 0x3efaabf1, - 0x1be80665, 0x667c6103, 0x74c6f8c5, 0x29631bb1, 0xf3d47a9c, 0xd5f1a495, - 0xd75b942f, 0x60fa073d, 0x2b7fd33d, 0xf57bb386, 0xda326d8a, 0x0c1ada0f, - 0xb18e892e, 0xde177eb8, 0x1b56b4c7, 0x9eb7dc09, 0xab48eba6, 0x55fe04bd, - 0x371c0df3, 0xcd67075b, 0xea86a746, 0xee5896d5, 0xb24d908f, 0x3fd31e61, - 0xcd31173c, 0x9ede7682, 0x5e76feb1, 0xab37fdef, 0xedcf9017, 0xedef54c0, - 0xcce2f20a, 0x65ef04fd, 0x6d23b689, 0x1cbf9642, 0x23a3ce50, 0xa9e3d186, - 0xb4167b68, 0xf294dcd7, 0x2857b414, 0x06e9ec37, 0xcec859f8, 0xc40c2359, - 0x64e94619, 0x56b5ef90, 0xde95c9f9, 0x9cf196bf, 0xfbc2e9fd, 0xfa6567a2, - 0x692dedda, 0x741eecec, 0xa5bf67f3, 0x988ef4ed, 0xd3daf78a, 0x93bcec0c, - 0xbbb87f7e, 0x6f5f5d07, 0xf81189e9, 0xeabdd74b, 0x4e70ade0, 0xabad928a, - 0x32b17f69, 0x217c0919, 0xce1b1bc6, 0xe7be23e6, 0x0246b0bd, 0x8fbe22f9, - 0x7fd1d258, 0xb1f54d01, 0xf8c53f8c, 0xf4741446, 0xf0f932af, 0xe7e466de, - 0xd716b319, 0xb4c3b093, 0xec0979c1, 0xeb0e7024, 0x3db7c84b, 0x5e1f786d, - 0x20ec4611, 0xdb35bef7, 0x7ce146ba, 0xb66f782c, 0xb7acacd0, 0x04fcd3f0, - 0xa0571f28, 0xe91787bc, 0xc76658ac, 0x4341fb29, 0xe2767e9c, 0x0f5bad32, - 0x1fb281f6, 0x77e9c4f4, 0x9d05fc0f, 0x5cefd3b7, 0x4f4b4f7e, 0x22cc27b4, - 0xcc27b456, 0x9c4e1e5a, 0x3aa2e77e, 0xbd350e3e, 0x56fa71cf, 0x96896944, - 0x2242abce, 0xdb954bf6, 0x9f764ffe, 0x23ff1eaf, 0x70e36eb0, 0x779fb87e, - 0xab5c1a34, 0x9dcb03d3, 0xb8f6618b, 0x3dc51bf4, 0xc5cf07bf, 0x25e5b70b, - 0x8aed2090, 0x1b07e2b4, 0xa5e1f971, 0x7983d682, 0x9230fc56, 0x6f07fab8, - 0x66f982cf, 0x81cede05, 0x5fe81a7c, 0x4df1163f, 0xb091c44f, 0x97a95e7e, - 0xf13d8347, 0xd19abd95, 0x678c83ab, 0x9f679f03, 0xf5f22d38, 0x5b626e8d, - 0xa29e8415, 0xdb347c5c, 0x459f0117, 0xa8788159, 0x074cf7cb, 0x2469b87e, - 0xefeb05b1, 0xc42f9c2f, 0x19a2ebb8, 0x18762b7e, 0xdb405ed0, 0x011455ed, - 0x71733ddf, 0x74959b3d, 0x8d863cfb, 0x4f36eea3, 0x76d3f41a, 0x083ff72b, - 0xe173df41, 0xe018f68e, 0x30b449c3, 0xda4187e5, 0xb7ecc92a, 0xbe94ae3e, - 0xd6ac3f15, 0x102bd3f9, 0xae74ebef, 0xc576befe, 0x22f3643d, 0xe6def519, - 0x95fefc83, 0x62eee3db, 0x499a4cac, 0x97b02ed5, 0x68495734, 0x41dbbbc7, - 0xdeba22c8, 0x14b87aef, 0x97d34ded, 0x8234bebe, 0xca907f7f, 0x0912bb8d, - 0x77a699b9, 0x09da56cf, 0xb70596a6, 0x3f7839a7, 0xfa0748d3, 0xa85f4cf9, - 0xfb702fb2, 0xe541e383, 0x17e02ff7, 0xc60fd72a, 0x0e43bb72, 0xbd7901c9, - 0x3d39e960, 0xf8a109a8, 0xc3ca85ba, 0x8b905a9e, 0xab5b4c46, 0x157e98cd, - 0xf604fb6b, 0x8eb1f3a5, 0xb6ee414f, 0x52e4c87f, 0x4c73cae7, 0x418f2f9e, - 0x2ef2c73b, 0xd78dff6c, 0xd3ea3b58, 0x3e3efe41, 0x8fc51c71, 0xeb5a2fe1, - 0x9b878a12, 0xc0d3353c, 0x35e84525, 0x905aac8f, 0x127e8b11, 0xefc041d6, - 0x32deafb1, 0x7133ec1a, 0x00db86af, 0x5cf22b7f, 0x62b18f78, 0xe7f41771, - 0x0fcdd232, 0x0d8f7ae4, 0x3fb81a79, 0xb16ea1bd, 0xd76d1ba6, 0x0dd3b0dc, - 0x35cb0efe, 0x6b3da0df, 0xf984cdf9, 0x287ef17f, 0x6919fb3e, 0x4c13f13b, - 0x171d2f78, 0x50d44aee, 0xbd46ee38, 0x17ea0975, 0xe0a95f4c, 0x2c976834, - 0x7e0a1c7f, 0x8264fb64, 0x16b13e7e, 0x087daf94, 0x0b92bfb3, 0x0f945f14, - 0x8fc40c60, 0x2dab5aef, 0x92fc9f68, 0xd0fb29db, 0xce8ea1f3, 0x4f8a2be7, - 0x6a1ecb80, 0xebe3051a, 0xabac48d8, 0xb7d89169, 0x912df292, 0xea337780, - 0x13aba7bb, 0x16e31531, 0x6bd947fb, 0x3f41a36b, 0x9999229e, 0x43d7095f, - 0x10121f05, 0x4c9e1456, 0x8bbf9c98, 0xa8539feb, 0xe3a30dd8, 0xd35887bd, - 0x46dddea0, 0xf8a1a912, 0x3b50529f, 0x5299f710, 0xe7ec145d, 0xe30542a0, - 0x8bfa5087, 0x72ea2758, 0x81af41a7, 0xc98db8f5, 0x11758a83, 0x6bbbb44e, - 0xecffb03a, 0x7b1ebe38, 0xd22e3f31, 0xfd60d893, 0xbde8ec54, 0xa062e80a, - 0xa5e303fc, 0x9b98ca72, 0xd19cfa83, 0x7f3fe748, 0x8a5b987b, 0xd9a7a3f4, - 0xfa034fd6, 0x1c9484fc, 0x4a3a97f4, 0xd80447e5, 0xb8693c71, 0xeb47419e, - 0x7d5cc306, 0x54ebdc1b, 0xfb30dc50, 0xee0ccbce, 0x2d6761c6, 0x7978d383, - 0x777066e2, 0xdbddff51, 0xc743fec0, 0x621fcbcb, 0x1f011f70, 0x45b3e566, - 0xce0c63f9, 0x1927f911, 0x7fb4483c, 0x1843c18a, 0xd3c9fc7c, 0x0f4139b7, - 0x8ffae289, 0xaee783d5, 0x6b7b378a, 0xde96fdfc, 0xf3726389, 0x772b1874, - 0x98cc9d3a, 0x08cbf400, 0x5e55fe5e, 0x02c5e85e, 0x493ea27f, 0x266f5e0c, - 0x80bf37af, 0x64e129eb, 0x5bf31879, 0xba524675, 0xbde86eee, 0xc617ca1a, - 0xd03a7345, 0xdaf80676, 0xed11f411, 0x244b7e89, 0xe9b497a6, 0xbbd89d98, - 0xfdb1c66f, 0x30f3f684, 0xd293d3f6, 0x909bda15, 0x81f80fd2, 0xf39681f2, - 0x80f81681, 0x7c6c5590, 0xc028ddb4, 0x3fa3b9b9, 0xbeedbff8, 0xfba7cb40, - 0xcbe6adc6, 0xcddf3807, 0x81cec25f, 0x703d511d, 0xce1118bf, 0x403244f4, - 0x380f8f39, 0x8b89de1e, 0xd2f4f362, 0x7ec24125, 0xa63c7096, 0xc84d7a78, - 0xff79faba, 0x97e78f9e, 0xbd1fb79e, 0xd7e4326c, 0xcd9ab0df, 0xd60bd187, - 0x85ea3447, 0x3bda2b8f, 0x3f5558bd, 0x98702e97, 0xac0f746f, 0x311848ff, - 0xdab277e2, 0x9b3d2f5b, 0xc7a0abe9, 0x27ca2f96, 0x74ff6127, 0x85f78cde, - 0x952a5c65, 0xe3d26f2f, 0x64ad6bfd, 0xef3cbf43, 0xe00ec73c, 0x79f334f3, - 0x5d3cd99a, 0x87257e0a, 0x88eed23a, 0x2f63e408, 0x65edbdfe, 0x14f6f0e6, - 0x7b582372, 0xd1422720, 0xd34bfdc5, 0x85538c45, 0x559e2f4f, 0x84f813e3, - 0x32f58df5, 0xc6297c95, 0xf5a87af9, 0xfb33fe9d, 0xcaf563cb, 0x08e9437f, - 0xc945a7fa, 0xe975e5d7, 0x7d327b9a, 0xae8036f5, 0xf3f3e717, 0xfdc71939, - 0x0a485286, 0x7cce0fec, 0xfec37562, 0xfb80d9b9, 0xfd92e7fe, 0x505c5c54, - 0xaefc20ff, 0x47b6173e, 0x1bec09e9, 0x7b40fb6a, 0x06c9b59c, 0x0967e5f7, - 0x550edffa, 0x6fc033d9, 0x57c9b373, 0x295fb7cf, 0x4cf111e1, 0xc3b40cbf, - 0xe68a7dd0, 0xb868300f, 0x018dd73c, 0x5c203d79, 0xf0d57705, 0xe0c8c4fd, - 0x293b0e04, 0x2034f14c, 0x3187e459, 0x3f513af8, 0x51bf958c, 0x5f70e794, - 0xa208fe55, 0xfdb28784, 0xb0a9e624, 0x20ff7031, 0x78d8a0f4, 0x2e43ce0b, - 0x4be010d0, 0x80d53803, 0xc196f5be, 0xa08d7a05, 0xce94a853, 0x3dd82ab3, - 0xf0bc6a7e, 0x977e6033, 0xbb40f2e8, 0x047615ca, 0x4761568f, 0x3a348f68, - 0xc768aee5, 0xadf605eb, 0xf747788c, 0x32bf5a78, 0x3a7a75bc, 0xff0a1f85, - 0x256cfd0c, 0x258fd31b, 0xa54c998b, 0x575a95e3, 0x23df41d8, 0x16a35625, - 0x4aedc4e9, 0xe94bf770, 0xcbc77db1, 0x6eb3240f, 0xc18e30ec, 0xee54ae5c, - 0xe3bbf1f8, 0x369fffb0, 0x7dfae159, 0xf7b3c370, 0xb838be81, 0x4c8fff61, - 0x5fa1304f, 0x60f718ac, 0xdfa29bf0, 0x380deb73, 0x370dc1fe, 0x43f281cc, - 0x01e86a3f, 0x84fc377c, 0x9988097b, 0x9237c6f6, 0xb91f281d, 0x25392c9f, - 0xd5c19c41, 0x7c5e45ea, 0x7e8f43fc, 0x231f141e, 0xcc2e3e19, 0xc5b4fc05, - 0x41e65c1d, 0x8b0a62a3, 0xe9f5e067, 0xb9fd03b9, 0x2b17493b, 0x23db5dd8, - 0x3b6a3b58, 0x3a22d1e4, 0x787dfa3f, 0x9f811d07, 0x07e23fde, 0x3e4c1523, - 0x29448f38, 0x926302e0, 0x39a17ca2, 0x4b7f915d, 0xfc8a0de2, 0x14fd2d5b, - 0xc18c98f0, 0x5bb7f28a, 0xf8f014f3, 0xe5155bdc, 0x0a456c8b, 0x56bb9fb8, - 0xdeffbe51, 0x21fe657a, 0x721d0322, 0x41775a8e, 0x1b4bf03a, 0xb507359a, - 0x7482ed54, 0x1d0cb7f0, 0x90ec3b6a, 0xc1776a1f, 0x15876177, 0xce30f0fa, - 0x3b2ec22f, 0xf4b93649, 0x89afedc1, 0x959e9a5a, 0x649f283c, 0xafed1d8d, - 0x078e61c9, 0x473d29e2, 0x2814aa91, 0xb0ec0237, 0x33850894, 0xfc01fece, - 0x32a73aad, 0x2051dc7b, 0xbbbbc80c, 0x788ed022, 0xf1b55754, 0xce43ea38, - 0xc3a39054, 0xe62b263b, 0x8707e23d, 0x6479de62, 0xf74e8abe, 0xf342e02a, - 0x6fe5146f, 0xc8ac5c49, 0xa8f2d5bf, 0x2b8f4e8a, 0xcfaddbe0, 0x4ab4e8aa, - 0x1597a745, 0x1bbf82f9, 0x076c7db8, 0x3a68b5d8, 0x0054d3cc, 0xa5b9b874, - 0xdb91e903, 0x74005354, 0x16b4721a, 0x6dc035e9, 0x3bf1002f, 0x2ed56f68, - 0x5cf4dd48, 0x4efef503, 0xee9035cf, 0xb023e7a6, 0xcea9ed8f, 0xb56f74c0, - 0x5bbfbf15, 0x7be98b9d, 0x3f4c36d5, 0x698d1ea8, 0xd31db553, 0x2c5aeada, - 0x9ebab9bf, 0xf862d7d9, 0x0bf1473e, 0x38368c76, 0x9cbca253, 0x0db2f28a, - 0x5f2850ce, 0x177066ef, 0x0c29930e, 0xebe5648e, 0xf2829a9f, 0x8cf83f74, - 0x30bf81c4, 0xd824cf4b, 0xdd3409ec, 0x8186e70b, 0x5a89b8be, 0xe4a7688d, - 0xb1eb9031, 0x525fbc31, 0x4296c632, 0x5ec5d2c8, 0xc18431f8, 0x2307eb28, - 0x1bc1f8b3, 0xe21b6b61, 0xc61edfab, 0x97c6f7f2, 0x4173818c, 0xf330fae9, - 0x29747e97, 0xc0528daf, 0xe649f595, 0x88e8fd2f, 0x7654c97e, 0xe5091492, - 0x36c3d09f, 0x20438e48, 0x1e8dca7f, 0x1aa627f4, 0x6c2bfa30, 0x8044b16c, - 0x85e0ea5d, 0xcf8011de, 0x672edc83, 0x3374fd23, 0xeda79a69, 0xff7d83a7, - 0x124f4aa8, 0xef2941e9, 0x56b76853, 0xf413bd63, 0x3a6de724, 0x413ffc02, - 0x51007662, 0xa604ddee, 0x6edfb4af, 0x21e0f3c0, 0xc60e6d8d, 0x9f024811, - 0x149f718b, 0x11c2f7f3, 0x7489df22, 0xf9128f6b, 0xe5538e1c, 0x1d60a927, - 0x5f19df2b, 0x05fe748d, 0x904ff9f1, 0xca7c6a0b, 0x97a66609, 0xa0a96db9, - 0x50f808c7, 0xe41cad91, 0xdb3ca1c7, 0x83ef30f5, 0x17930376, 0xf5d708f6, - 0x0db33768, 0xfecfd3bc, 0xc3a09d55, 0x1f00777a, 0xddc4fdc3, 0x3515ca32, - 0x604a5ffe, 0x15f22afa, 0x0aefbb9c, 0x21cd73c7, 0x1cde290d, 0x387b5e84, - 0x0974ce1d, 0x277df76e, 0xf9fbed81, 0x6e37cb13, 0x85cf7b81, 0xbb74d861, - 0x93ea37bd, 0xf31255ed, 0x3aa96903, 0x560df2cb, 0x33f4128e, 0xd1bf029f, - 0xf70d8dfc, 0xcb4c3f9d, 0xdc30b67f, 0xb9967b8a, 0x6eefe20f, 0x8c5a785e, - 0x69bff511, 0x61f35213, 0xfdc29e1f, 0x6847a79a, 0x59bdd1e3, 0xd337a51b, - 0xfa9b6676, 0x2418a32d, 0xf48b6373, 0x4e2e1451, 0xa41977b9, 0xd71f3d25, - 0x595dd5c3, 0x40cb6be6, 0x22a72f0d, 0x5bca2063, 0x74d5fbcf, 0xc916335c, - 0xe51e7616, 0xf4adb8fb, 0x045de2aa, 0xf1e21fbf, 0x78091447, 0xf1cbdede, - 0xe5edea2d, 0xe0482af8, 0x245922f7, 0xb8aca2eb, 0x0125b8f7, 0xbda63dee, - 0xbdc42bdf, 0xeb9f3288, 0x59eb1fbf, 0x75eba5bf, 0xb9104f2e, 0x9d812fbc, - 0x89e90f9b, 0x9d55ee0d, 0x277db377, 0x87b9f27b, 0x67f9d206, 0xe8359837, - 0x7ca33457, 0xb3a1d00b, 0x4751d39e, 0x4dfd61ea, 0xecfcce74, 0x96261230, - 0x5e1fc7f8, 0x36b67f6e, 0xf7fc0b99, 0x7b1e01e7, 0x9cfeff81, 0x005351db, - 0x8fd8b0fb, 0xbba83dc5, 0x03ef98ba, 0x77bf2855, 0x78422f57, 0xd313b54f, - 0xf9cbd5bd, 0xf983503e, 0xc33f55ef, 0xdf1701f7, 0xf7e3d607, 0x98c9ea86, - 0x6076a8ee, 0xbd8ba63a, 0x1df4e402, 0x47c60746, 0x81acfdbe, 0x675e7dc0, - 0x47e30183, 0xf1788ae8, 0x538858b9, 0x58579832, 0xd495e302, 0x1f978afb, - 0xb3fb7e54, 0x0b7ed8bb, 0x99e378fd, 0x2ebd3f40, 0x241d3f34, 0xdf390e5c, - 0xd0743945, 0x07d6e42c, 0x7808b60c, 0xa2ad833f, 0xf72807fc, 0xbe78da0e, - 0xed833f73, 0x601c9f3c, 0xefc043b0, 0x944ab831, 0x73dac03f, 0x063df80a, - 0x4df288d7, 0x7831760c, 0xa21fd3ed, 0xd223cc5c, 0x056f586e, 0x2091f4c6, - 0x79cd0b62, 0xdd9d61bb, 0x24733892, 0x826333ac, 0x56fcf905, 0x00dde2cb, - 0xa558c98f, 0xcdba1305, 0xa861efd4, 0xa45b1f97, 0x53237a85, 0xea187dee, - 0xb8f9ea8d, 0xe8debfd6, 0x061ed7cc, 0x9575ac78, 0x236bf416, 0xbe81c5c8, - 0xf22c0476, 0xe2213ec5, 0xd836faf0, 0xaeca3f71, 0x247ee3b7, 0x477f9cf0, - 0x9c3352d1, 0xb325ea03, 0x43b8e304, 0x404f06f2, 0x05c5630c, 0x1e291aba, - 0xe13c12ea, 0x2b3ce98b, 0xf0821e01, 0xd97f8b63, 0x109dd5fd, 0xc2383f64, - 0x2be807e5, 0x23ffb445, 0x3f835d74, 0x4bc70442, 0x88ccc365, 0x755e7899, - 0x189e8044, 0x0490f5c3, 0x2dfe6948, 0xbfcb1d3c, 0xef6c941f, 0x30f8bc82, - 0x03b79f81, 0x1861cde5, 0x73279507, 0xe40238d9, 0xcb9f328d, 0xdf62239b, - 0xb2e2c01a, 0x8b0d49cb, 0x7c4cbee7, 0xb8dc405f, 0x84a71e2a, 0xa5b1eed4, - 0x6f178b07, 0x2e2f1a0a, 0xfd031bfc, 0xb0b9f96d, 0x93cf930b, 0xc3d17641, - 0xb9686760, 0xab971dfb, 0xcca0f0a1, 0xe0e285ff, 0xf90e2389, 0xbc3c5423, - 0xf9c08be0, 0xb6f3b0d5, 0xea9fe196, 0x81c4c69f, 0x8823bf20, 0x6794ab1c, - 0xcf212f87, 0x97f1f2d4, 0x6693bb92, 0xfdc1a794, 0x98b91043, 0xcb54e30a, - 0xc93e6745, 0x7505fb80, 0x0a68f42a, 0xd3de213b, 0xed0c23b9, 0x8e31f514, - 0x0fd0448c, 0x83be3bf3, 0xeb122d78, 0x371c3c41, 0xf6846e39, 0xbff33d25, - 0x2dcdf110, 0x753f7d5e, 0x7923c62c, 0xfb0a7bf5, 0x9efdf7e9, 0xf20b1d49, - 0xdec9bbad, 0x1921da1f, 0xc85d1fcc, 0xbef1508f, 0x3ed91343, 0xff92981f, - 0x8e5838b7, 0xae7a369f, 0xf4e74dda, 0x62bf86ce, 0x57d9ccdc, 0x56c1c79a, - 0x265dba5c, 0xb68f8a46, 0x0dc4110d, 0xe52d1be7, 0xd4969a3f, 0x2b8c36c9, - 0x4d07bad2, 0x5bd7f08c, 0xe974ff98, 0xcadc08a6, 0x5c1b364b, 0x92fd6963, - 0xd1b327ad, 0x0ea1f5af, 0xbe730fbc, 0x22d75922, 0x13d93cfa, 0x1b594fc1, - 0x353e4edc, 0xad87e991, 0x8327c2db, 0xbf5a56bd, 0x25deed13, 0x707493b5, - 0x4dca2a0f, 0x3e21d44c, 0xa7b43968, 0xb8965f3b, 0xe41eeb1e, 0xfc2caf7f, - 0x665f5bb7, 0x7a92a976, 0xc60c2b9d, 0x36b5feb7, 0x3929c788, 0x4dfb406a, - 0xf46ffae5, 0x4d82c740, 0x1f01231b, 0xd932f595, 0x550fbcad, 0x97ac41c6, - 0xe3f006dd, 0x7f472baf, 0x23370a6e, 0x1e3c1b5c, 0xfafe72e8, 0xb71a9ba5, - 0x4b0a293a, 0x12297f5f, 0x374e29e2, 0xbc048dad, 0x192f76d3, 0xf7101487, - 0x25e8fb50, 0x134e1ee3, 0x134b03c6, 0xeb237155, 0xcb71b863, 0x3fdfc83d, - 0x274787c9, 0xf3c6f3a3, 0x5e5c422f, 0x2f33e6eb, 0xfecb78c2, 0xf045ee79, - 0xc23b26cf, 0xad0f60cc, 0xc630e57c, 0x7f7a8935, 0x627a6449, 0xe12fcbdb, - 0x31db6a3d, 0x35b7afa6, 0x6dbe429e, 0x78c7ed7b, 0xd85af388, 0x0efe8858, - 0x2414b70b, 0x02e72090, 0xbadf0291, 0x4d1e20ae, 0x755daf4d, 0xfc8fd0bb, - 0xe837a52c, 0x9638dea1, 0x171672da, 0x2bf1e164, 0xfdc7821b, 0xd4abc405, - 0x1c3f1c4d, 0x3a75e2ec, 0x415c85ab, 0x4a21cadc, 0x4057bec7, 0x728f0dbf, - 0xf4e0fe7f, 0x50bf0b3b, 0x2a26353a, 0xd7ce56e3, 0x9fcbf9cd, 0x262eaf21, - 0xfb8adc64, 0xe226f00a, 0xda24570a, 0x6c3c82f6, 0xc62afcdd, 0xc6dd0109, - 0x6db689d2, 0xf1069f3c, 0x8eba2d98, 0xc1efdce9, 0x25acf70c, 0xfd70478d, - 0x10f96db4, 0x8f08f6e3, 0xde236bef, 0x258f161f, 0x89ae79f1, 0x1c2ef160, - 0x030f10ff, 0x3bf4d0f7, 0x7c617b8f, 0x4261e22c, 0x4c5cc1c5, 0x2df6ceec, - 0xbe58ef1e, 0x2b8f38e6, 0xca4bd1f1, 0x5f353a05, 0xe048be32, 0xb8780cc1, - 0x2bae3fc9, 0x3791bc78, 0x0bd38ffe, 0x5cf107e8, 0x0a2db8de, 0x3a58430f, - 0x83c88242, 0x1e2c55b6, 0xe3ff7d4c, 0x3843cfa3, 0xd152ffaf, 0xf433cc59, - 0xd3ad9239, 0x6aff8dcb, 0xd12673f1, 0x127388a2, 0x10bd6a78, 0x26a78e5c, - 0x67eafdb1, 0x00b6b7eb, 0x092536fd, 0x66badbf4, 0xe62b7e85, 0x05754adb, - 0xafadef90, 0x960c77b0, 0x3942eed5, 0x141796ae, 0xf760b62f, 0x98937d0d, - 0x67a8aa9c, 0xe6eb44fb, 0xb6899708, 0x6df7fad3, 0x1b15cfc8, 0x8fb0f59a, - 0xbaff59ef, 0xb317f99e, 0x84fb03f5, 0xadfc6fcb, 0x8d99db7f, 0x09fa1b72, - 0xbce1d742, 0xe086ca9f, 0xf86e54fd, 0xa94fd146, 0xfccf56b3, 0xdfdd2e8d, - 0x126dad69, 0x49ba77b4, 0x7269a607, 0x6df996ba, 0x24b7fba9, 0x4abdf8e9, - 0xa8f7d70d, 0xc83f47bc, 0x9c271e61, 0x51c3735b, 0xc5e6b63e, 0x35a45da3, - 0x6965af55, 0x7fff842f, 0x935bfbdb, 0xbfac8d72, 0x371f1851, 0xd6e8c62e, - 0x8073f5d0, 0xaf513fbf, 0x00fff677, 0x8707cfee, 0x78e3dfa1, 0x4dbefcc9, - 0x6827bc0a, 0xdf3537dd, 0x5f781d92, 0x91912ad0, 0x65279512, 0xf0a59acd, - 0x0fef6aed, 0x477d16ca, 0xa19d1de0, 0x78102e8b, 0xefeae7df, 0xb3a29a13, - 0x70b7602d, 0xfa6d812c, 0x829ad6a6, 0x597216ae, 0x0edcef3f, 0x67b012d7, - 0xdec0b88c, 0xba4a18b7, 0x4daae158, 0xfccfddca, 0xbeaa79be, 0x31ae9877, - 0x83ddf4b9, 0xe7909fbc, 0xdc82481e, 0x867b8837, 0x8ac730e4, 0xf71081a4, - 0xc01beecf, 0xe4f915f3, 0x3fa6c7b7, 0x3081e780, 0xe71573f4, 0x27f58d99, - 0x9fac60e3, 0xb93dc537, 0x34af7e9d, 0x79f8877f, 0x8f9f8932, 0xf28ac4ac, - 0xf50f7e4b, 0xfb25cff8, 0xfb8a49b3, 0x08b9ef58, 0x63efabbf, 0x8cee7f85, - 0xec276597, 0x0dbf85a3, 0xc608781b, 0x03961751, 0xc31fd8e3, 0x980641fd, - 0xf1401f6f, 0xf5cb7673, 0x5b3fe039, 0x9eefb5e4, 0x88bcbd47, 0x338963db, - 0xafd876f3, 0xd7bd848a, 0xdcf961e9, 0xd9febbde, 0x3ac3b7de, 0xa1c1fe14, - 0xa2c56de4, 0x421f9137, 0xda12cbe6, 0xa6e4c939, 0xbd3f22b4, 0x072e4df9, - 0x397efdc4, 0xa78b0bf7, 0xf68dc8d3, 0xbc5791f9, 0xba46e611, 0xcec4d97e, - 0xe976dbc5, 0x09af1d99, 0xa78f21cf, 0x7c02de3a, 0x81da2c55, 0x762626f8, - 0x6c96396e, 0x1d31fee6, 0x0eae5099, 0x6eb027ce, 0x7da184b6, 0xd1eb4136, - 0x2ab8e95b, 0x8bf4128e, 0x33c7c638, 0xd40be9a8, 0x70e6bff7, 0x37e67ad7, - 0xd7c3c6a1, 0xf1aa1149, 0xc60c37bf, 0x2231f02f, 0xfdc2d49c, 0x958f9d30, - 0x98aac7cf, 0x814fd78f, 0x6ff74bd6, 0xebf0a2d7, 0x5b2af312, 0xdffc49d4, - 0x1c5d6ad3, 0xe311df7c, 0x97dbdf56, 0x840f7698, 0x2ae4a37d, 0x02a7fafd, - 0x3e01c46f, 0x871eaa59, 0x7ee32d3a, 0x17efea1d, 0xf67dc492, 0x7fae3b2f, - 0x69bd7bb7, 0xf9153b55, 0xbbed1633, 0x713f7ba2, 0x75bff71f, 0xdeea17ff, - 0xf66ec1ef, 0x8e946ecc, 0x29fcdfe3, 0x9df108f3, 0x1105eddb, 0xbe51c718, - 0xc8156135, 0x7e470fe5, 0xc2f60f14, 0xf71231fd, 0x1cb4bde7, 0xf7bb52b9, - 0x717bd567, 0x393f625c, 0x5846ed51, 0x3a9f076d, 0xa7bc31e2, 0xdb2dfc1e, - 0xb05e8637, 0xf2c9b91d, 0xc231edf3, 0x32ec230e, 0xd4cf3b6a, 0xefe4666e, - 0xec29bfe9, 0x9417fcca, 0xac472e7c, 0xffdc83d1, 0x17ee7cb9, 0xd65d3347, - 0xe2877b40, 0xce89bda1, 0xb0475ee6, 0xc23de51d, 0x7b8e2e98, 0x73134e80, - 0x88863f99, 0x5b942a5b, 0x7a049c9f, 0xfb8c934e, 0x7ddfc2d7, 0x2ce7b7f4, - 0x34a8f481, 0x131ca277, 0x5eeb1774, 0x86a543f0, 0x14e7b1f9, 0x097fd058, - 0x57d811e4, 0x0d34746b, 0x299ee742, 0x3c600bf9, 0x0e3afded, 0x8abf024f, - 0x669dff2d, 0x09aebd41, 0xb39779cf, 0xbffd80df, 0xd73b105b, 0xe8393cb2, - 0x298977fb, 0x6aceff4c, 0xbbfbb0d6, 0x7aeb92f9, 0x347973b0, 0x39acaa88, - 0xe0192ee9, 0x559f963a, 0x2892e51e, 0x8c38359c, 0x851bdfe5, 0x88d3df71, - 0xf3fb0747, 0xa60af00c, 0xc1624ce9, 0xf1b11674, 0xba3ae5f7, 0x9cfeb44b, - 0x83f32306, 0x309e9e25, 0xfa10ec9f, 0xcc6eceef, 0x3bb7d3be, 0xf37ddf93, - 0x19fc7295, 0x726eff9e, 0xef9849fe, 0x67b66ee9, 0xdd1bed21, 0x704fe2b4, - 0x21a2dcde, 0x1a9df7a0, 0x9bb41bfc, 0x24df7a8a, 0x8dd8bfe7, 0x3124dbd6, - 0x23674aff, 0x1d22a78f, 0xb6f6fef1, 0xd60b93d7, 0x02af7b40, 0xae3c815f, - 0x29be462d, 0x935c3332, 0x457cec91, 0xca5da5eb, 0xf857d20e, 0x5c87c2f7, - 0x86e117ec, 0xfdba4f3f, 0xbeef3a61, 0x073dfa1a, 0x02d8e5c6, 0xf74beae3, - 0xff8c1373, 0x40a71e05, 0xdee0d2aa, 0x068bde6c, 0xc79bec0d, 0xbf03bca8, - 0xa7e0e3eb, 0xb94fd34d, 0xdce7f63f, 0xfc19bb1f, 0x927a69ba, 0xe7482dca, - 0x842560fc, 0x64c8e7f2, 0x95f2235b, 0x883bf82e, 0x21e726ef, 0xb4ebb31e, - 0xd7678fb8, 0xfae7227b, 0x377f65d1, 0xb59a1f16, 0x5848cbe5, 0xef666d4f, - 0xed126cbc, 0x73b71c6a, 0x0736efee, 0xb26ef5e7, 0xe7cc24ed, 0x01c764f5, - 0xa3feb76c, 0x753f04ff, 0x7fde3eda, 0x4f1d4bb4, 0xf102950d, 0xa37f9dea, - 0xe39fcd9e, 0xd3545379, 0x69bfa80a, 0x2cc0774b, 0x2c7ee2c9, 0x0527e804, - 0xe7b33fc3, 0x0c74378d, 0xf8d17380, 0xff50728b, 0x3fef3131, 0xf38b3a0a, - 0x286ba70e, 0xcf9287ba, 0x80cc78de, 0x442e1377, 0xe22f5c82, 0xbafa9376, - 0x6fd0079e, 0xe04caf7f, 0x27ca23dd, 0x498efe0a, 0x48807a66, 0xf8f51ab3, - 0xc6a6cf5e, 0x36ce7aaf, 0xce7a1d21, 0xe4e5e5a1, 0x507a15eb, 0xff1fe0d6, - 0x2c58a7fc, 0x92412f0f, 0x42aac8bb, 0x629af7b8, 0x4c36f9dc, 0xb9b99a61, - 0x66bdee10, 0x207b4a24, 0x1f49699d, 0xe25df705, 0x232b38dc, 0xecb00f6f, - 0xca116b58, 0xc4583ce1, 0x814bfb7e, 0x1eee1c31, 0x39a170bc, 0x92df0146, - 0x7f28ac98, 0x2287a5ab, 0x8dc64c7f, 0x9faf7c8a, 0xefbfb5bc, 0x47c0777b, - 0xc3b07747, 0x9ca079d3, 0xb4656b21, 0x396d66db, 0x148ddb74, 0x4eeeb71e, - 0x9b036c2b, 0xcdb8fe78, 0x4fd82e05, 0xb00a5de1, 0x3ee4b463, 0xa09fd4fa, - 0x5f7b2d31, 0x74611e63, 0xebfc6b28, 0x799b6028, 0x3da1e6c3, 0x8c9de036, - 0xd5dfc135, 0x52c1f610, 0x65e9ecc2, 0xbbf6d41b, 0x550ecc95, 0xe54faca7, - 0x3c827fd1, 0x0ef5bbea, 0x6e97f833, 0x3763fc1a, 0x64d6e790, 0x284bbc65, - 0xbff2f17e, 0x1fe03964, 0x17e6a1e7, 0xe9120761, 0x6e2c83b8, 0xc5e56ae1, - 0xf85e403f, 0xe57917c5, 0x31fb9e98, 0xc41278f1, 0x3f1f0f47, 0x628e4b4f, - 0x5aaf67e5, 0xd0b8ef0a, 0x13c4277c, 0x4b9db291, 0x85efaec1, 0xf32b3617, - 0x2996941f, 0x95d387e0, 0x65bccaf0, 0xad43f5fe, 0x66fa8abb, 0xefca83bd, - 0x39d8278a, 0x639f7024, 0x992ee8eb, 0x6fdb0554, 0x4a31fe44, 0x7853f40b, - 0xc70bed83, 0xfef47aba, 0xc96527fe, 0xbb3b4f4c, 0x7ddff1ed, 0x6de27607, - 0xce46fd04, 0x5cfb3146, 0x8d29dd76, 0x177ae406, 0xb36caf86, 0xec7e0347, - 0x4ee1c5ed, 0x9cac83f0, 0x24fe811f, 0x866ce17d, 0xbfedc9e7, 0x7843d1b7, - 0xbf09efe5, 0x03ff0f57, 0xd13f379c, 0x46fb1468, 0xff9589bb, 0x6cede48f, - 0xeb67c8df, 0x83d03a63, 0x974261cb, 0xe252e566, 0xeeb0cb95, 0xbf003e60, - 0xf78edcf6, 0xd37b009f, 0x5a3eb63e, 0x29e3fb89, 0x4cd8bfb8, 0x95a3ebfe, - 0x7e77b2d4, 0x427dec2d, 0x7218bf71, 0xd1aeecbd, 0xbf8dfbc3, 0x2279baf4, - 0x843bdf99, 0xc7071f5e, 0xdca93e50, 0x3b1afcc6, 0x4aefae1b, 0x804bd6fc, - 0x068cf69e, 0x6dc05af9, 0x3bfdfc0d, 0xd8a17c55, 0x17b58837, 0xf78b13fa, - 0x3ae80f3e, 0x541fa026, 0xc6fd16a3, 0x092ce816, 0x6fea9751, 0xfc5886b9, - 0x68dbebfa, 0xe62df940, 0x73666ed1, 0x3e78dbed, 0x8171de1a, 0xc3ea3174, - 0x87fd8a35, 0x58ba73ee, 0xec455810, 0x6370ec5e, 0xe1d03e42, 0x199c44b0, - 0x309a9839, 0x35fb9bce, 0x27fc244d, 0xffeb4331, 0x6fd0b6ae, 0xf3bc6cef, - 0x3e87d07a, 0xcee7bbae, 0x24fbf401, 0xe29b9778, 0xfb7740f7, 0x81df9834, - 0x73f4255f, 0xfa91fc2a, 0x77f7acfc, 0xf307e50b, 0x65dd80c6, 0xfe83312a, - 0xfa665e3c, 0xad8b7916, 0x2a37212b, 0xe868a6a5, 0x09e4f5ff, 0xbce99287, - 0x01fd1613, 0x3df569f5, 0x5bea95f3, 0x26b0f285, 0xebede81b, 0x6e7f1625, - 0x31577c65, 0x9393ccec, 0x7d508e40, 0xf28ff41e, 0x1ef89dfa, 0xe6dcfa81, - 0xe7d5abd5, 0xf38dabef, 0xedcbd00f, 0x7071c96d, 0x7877388e, 0xcfd40912, - 0xcd56f27d, 0x021f5477, 0xdc36b479, 0xa6aef8c5, 0x6fce94ad, 0xb364dac1, - 0xf6e78a13, 0xa2d6f162, 0xdba7f0fc, 0xcbf3437e, 0x83370a5e, 0x9d30bdda, - 0x818de138, 0xa37aab85, 0xdeafbbbd, 0xd006eaf2, 0xa1d65eaf, 0xe06bf45d, - 0xbd7f0a1d, 0xd81706f9, 0x2c69e783, 0x8cf7847f, 0xf9193ac9, 0x060bd4ed, - 0x1fe75fdc, 0x2bfb81e9, 0xa50b23ac, 0x4254a9cf, 0xfcdeb4cc, 0x5db193d7, - 0xaf7625f9, 0x02537f3b, 0xfa0aa1c6, 0x8610bcb6, 0xd9c591f1, 0xf4dcbdb5, - 0x47449edb, 0xbc1c4a54, 0x975ae7ff, 0xf054f144, 0xc01f4fd2, 0x537f36be, - 0x47cbd21c, 0x61fbe0e7, 0xb60f4367, 0x84be39ce, 0xef05fedc, 0x0653120f, - 0x87895f82, 0xeece77bf, 0x7db8720f, 0xd977cd4e, 0x7e32ffbc, 0xd840c3ce, - 0x67cff058, 0xdca24cf1, 0x628d14a8, 0x4f942d3f, 0x3e076c54, 0xf9e037ad, - 0xb82c35b2, 0x0a486a9d, 0x8c2b57db, 0x49ec2adf, 0x507e8b15, 0x322b13d8, - 0xe7bbde09, 0xbff4b12c, 0x71f7a697, 0xd9c4a7fc, 0x4a7cc387, 0xfadf1f6a, - 0xf9f1e21e, 0x7e813ffb, 0x3bd89af7, 0x7c31ef6f, 0x6f02ff0b, 0xbe0ec67b, - 0xf429570e, 0x476db6cb, 0x7f781db2, 0x382bfc77, 0x3c6d9f0f, 0x25a654f2, - 0xc7cc7ec8, 0x658cec2b, 0x60fede30, 0x4b8db487, 0xb473b3f1, 0x5efc1d7f, - 0xeeaff44b, 0x53646cf7, 0xb6dbbc36, 0x07698200, 0x46cff2fa, 0x3ec36537, - 0x4437fc2b, 0x14cccedc, 0x4a947fee, 0xfbc44352, 0x0b8949cc, 0xdf83ef1a, - 0xe7de3aaf, 0x19f78b3c, 0x7de333fe, 0x0c9f393a, 0xef1e0988, 0x5fcf04f2, - 0x43d96a42, 0x43ee5c72, 0x077f0dd8, 0x67bc5658, 0x8899e5c9, 0xc0da18f3, - 0xb943ffec, 0x6364ab1f, 0x88432e71, 0x7aa7b59b, 0xe5640597, 0x89119054, - 0x113ae237, 0xc606fdef, 0x7be13425, 0x0e9337cd, 0xacc46d4c, 0x1ba29485, - 0x8ec491d3, 0x855228e9, 0x835268e9, 0x16a46de9, 0x09a4b1d3, 0x8dc7d253, - 0xff78c7ef, 0xf3adc67e, 0x0cffb034, 0x6f5c1498, 0xbfaf837b, 0x5243e04b, - 0x9578afbc, 0xd84518f8, 0xf121c5fb, 0x7e819292, 0xea2f0258, 0x9c31bfbf, - 0x119db078, 0x80f651b0, 0xef0594f3, 0x0d880a4f, 0xc42bc2e1, 0xa1c7ae47, - 0x2532f665, 0xe0e9025e, 0x1bd4854c, 0x19ee4607, 0x2b038ca7, 0x5e718719, - 0x5cec39fd, 0xe26ff2c0, 0xb1f79de5, 0x2824507c, 0x82ca45fc, 0x5c71fe71, - 0xef190f72, 0xb187261d, 0x6ef17ab8, 0x4230e4c9, 0xb5bf809a, 0xcf9438ce, - 0xde297a8b, 0x392530f3, 0x355ca00e, 0x142d23ba, 0x16670b7f, 0xb1c6ffa2, - 0xdb8dcb38, 0x7e3c5f25, 0xd75b0a4b, 0xc4aaa547, 0x8f1e743e, 0x77dfa7e4, - 0xbfafba7f, 0x04e7e82b, 0x3f755bac, 0x3c3ac46f, 0xf6313fd0, 0x2cfcf3c2, - 0xde6cafbe, 0xaadb343c, 0xaccd7e81, 0xdd67dfdf, 0x32cd3f77, 0x424edaa7, - 0x821496f9, 0x5da44deb, 0xf02dece2, 0x893bc45d, 0xbf33edef, 0xbe26eadf, - 0x531faa38, 0x5ca1671c, 0xd693c6a5, 0x571d0e5f, 0x5c46c4b6, 0x655be47a, - 0x2e3a993c, 0x3df7b68b, 0xee52abcc, 0xd3fc0b98, 0xfe91f516, 0xcaefea2c, - 0x1dc6acb8, 0x687114fb, 0xe3781d62, 0x1c593ad0, 0x438850da, 0xbff1f48b, - 0x7c134388, 0x10c3d62c, 0x72c34388, 0xf281cc37, 0x813a3fc3, 0x4e236871, - 0xda1c7878, 0x9a1c6511, 0x159ffbed, 0xb1de2687, 0xbd85b058, 0xdb80bfa7, - 0xfd060077, 0x5f7894e2, 0xc4579f86, 0xdf7ca4b9, 0xdf9eecdb, 0x041bff49, - 0xa7ec907e, 0xe859f9f8, 0x0fe0122f, 0x0cb5c279, 0x0fe01dc6, 0x09aff2a9, - 0x568277fd, 0xe9fbf506, 0x2bcfca93, 0x5c219f7c, 0xcbc7997f, 0xaec0fcc0, - 0x8f51a0b5, 0x1782d1fa, 0xfe82b3ee, 0x64d520b4, 0xf2b77945, 0x514be43e, - 0xfccf3c9e, 0x9b7ac473, 0xdea09cbf, 0xac4f3de5, 0xeff0d833, 0x404bac23, - 0x3e7bcafd, 0x0814f6e7, 0xebfb84d3, 0xdd1d514d, 0x536ddee1, 0xf4158663, - 0x5b220fbb, 0x71b14256, 0x5e9f0ce1, 0x0e98797d, 0x9603aff5, 0x74888298, - 0xf3b13adf, 0xf99e4275, 0x3af98335, 0x7bb136b3, 0xf6a39c85, 0xdc0b4882, - 0x84fbb02b, 0xefc12d41, 0x4ae7c7a9, 0xc08a7b8a, 0xcb16c9f7, 0x7fb8255d, - 0x6a10f760, 0xbfb8bd3b, 0x2985b22e, 0xdd423fee, 0x0ef38b67, 0x1e89efdd, - 0x118d7bf6, 0xc48337fd, 0xf7233dd3, 0xf663bdf0, 0xf3c0e48e, 0xa6c61dd0, - 0x4fabe034, 0x53731c63, 0xcb6e20e3, 0xce39416a, 0xf17ceae3, 0xbca06f40, - 0x073ef114, 0x20e32da5, 0x54deea1e, 0xa3d40547, 0x067b30d3, 0x9947def9, - 0xc5f27b99, 0xa7682dd7, 0xb7f54caf, 0x3bbff3d3, 0x1e2f5ea2, 0x59e3058d, - 0x5095bf9c, 0x8d0338af, 0x15f3c60c, 0x8a674ff2, 0xdbf98729, 0x4adefeaa, - 0xdfe5576c, 0xf167a95b, 0xad89a50d, 0x59b3af4c, 0xfa6e2cad, 0x959dfde7, - 0x9553ddcb, 0xf428b626, 0xe621b255, 0xbea6ec8a, 0xfdae5df9, 0x5a7f6c36, - 0x7e0a87d5, 0x98e8b198, 0x3a66cf82, 0xb5f9959b, 0xaf7838d2, 0x1567d28c, - 0x35b3c7d0, 0x0b14d469, 0xf01801f8, 0xf7cbbf5d, 0x77f11a7b, 0xcf09baa2, - 0x9f5e628b, 0xd8451f55, 0xc651ed53, 0xa979f067, 0x704f8bfd, 0xdc1399bf, - 0xf704e66f, 0xfdc1399b, 0xbf704e5a, 0x7c87e116, 0x4c8aa242, 0xe47f5074, - 0x828f8137, 0xc23723f8, 0xc8fe90f7, 0x0a71c7e4, 0xb7e7647f, 0xe47f0b08, - 0x91e7a95d, 0xec9bbb8f, 0xc43b436f, 0x9ffbd1e6, 0x23f943bb, 0xeeca9fbf, - 0xa5503e93, 0x22f3d29f, 0xb4f1a9fa, 0x0bd95e50, 0x37ac59df, 0xcb879010, - 0xf1a6d924, 0xb0f18fbf, 0x16ce5377, 0x1dfc28a5, 0x8b7f962a, 0x0f7e17f8, - 0xd0196f39, 0xdf7ca04f, 0xd7405ec1, 0xe71d53c7, 0x1dfd9952, 0xab2e87df, - 0x5fbfb033, 0xbf21cfc7, 0xebf139e0, 0x718181d4, 0x77e6a114, 0x53d34e76, - 0xe55e7499, 0xef153b91, 0x8af18b22, 0xfa718979, 0x5f8cb9da, 0xc50ef2c9, - 0xf6db6b3a, 0x63e02f48, 0x9c167ef1, 0xa904275b, 0xe8c69f1f, 0x5287cf42, - 0xa4bfed1a, 0x7d0f9d8a, 0xffb9adf4, 0x3ec7a013, 0x509dca13, 0x2cf3d5f5, - 0xf10fb1df, 0xd2173ea1, 0x0b4d7679, 0x3b9fcf32, 0x6bf5abbf, 0x4e217437, - 0x715097e0, 0x9b250751, 0x2d77c605, 0x4b5e96bd, 0xd2d7a5af, 0xf4b5e96b, - 0xbd2d7a5a, 0xaf4b5e96, 0x6bd2d7a5, 0xf4e5ffe9, 0xfffd007f, 0x8000c102, - 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x30001131, 0xafb00408, - 0x521cae88, 0x11447fea, 0x992c9a42, 0x326ebaf3, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0x7f6db6db, 0x98a102fc, 0x80005382, - 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x30001131, 0xafb00408, - 0x521cae88, 0x11447fea, 0x992c9a42, 0x326ebaf3, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0x7f6db6db, 0x98a102fc, 0x80005382, - 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x30001131, 0xafb00408, - 0x521cae88, 0x11447fea, 0x992c9a42, 0x326ebaf3, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0x7f6db6db, 0x98a102fc, 0x80005382, - 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x30001131, 0xafb00408, - 0x521cae88, 0x11447fea, 0x992c9a42, 0x326ebaf3, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0x7f6db6db, 0x98a102fc, 0x80005382, - 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x30001131, 0xafb00408, - 0x521cae88, 0x11447fea, 0x992c9a42, 0x326ebaf3, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0x7f6db6db, 0x98a102fc, 0x80005382, - 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x30001131, 0xafb00408, - 0x521cae88, 0x11447fea, 0x992c9a42, 0x326ebaf3, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0x7f6db6db, 0x98a102fc, 0x80005382, - 0x00008000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0x00002000, 0x000040c0, 0x00006180, - 0x00008240, 0x0000a300, 0x0000c3c0, 0x0000e480, 0x00010540, 0x00012600, - 0x000146c0, 0x00016780, 0x00018840, 0x0001a900, 0x0001c9c0, 0x0001ea80, - 0x00020b40, 0x00022c00, 0x00024cc0, 0x00026d80, 0x00028e40, 0x0002af00, - 0x0002cfc0, 0x0002f080, 0x00031140, 0x00033200, 0x000352c0, 0x00037380, - 0x00039440, 0x0003b500, 0x0003d5c0, 0x0003f680, 0x00041740, 0x00043800, - 0x000458c0, 0x00047980, 0x00049a40, 0x00008000, 0x00010300, 0x00018600, - 0x00020900, 0x00028c00, 0x00030f00, 0x00039200, 0x00041500, 0x00049800, - 0x00051b00, 0x00059e00, 0x00062100, 0x0006a400, 0x00072700, 0x0007aa00, - 0x00082d00, 0x0008b000, 0x00093300, 0x0009b600, 0x000a3900, 0x000abc00, - 0x000b3f00, 0x000bc200, 0x000c4500, 0x000cc800, 0x000d4b00, 0x000dce00, - 0x000e5100, 0x000ed400, 0x000f5700, 0x000fda00, 0x00105d00, 0x00000028, - 0x00000000, 0x00100000, 0x00000000, 0x00000000, 0xffffffff, 0x40000000, + 0x00000200, 0x00000001, 0x00000003, 0x00bebc20, 0x00000003, 0x00bebc20, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0x00000000, 0x00007ff8, 0x00000000, 0x00003500, + 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000003, + 0x00bebc20, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, + 0x00000003, 0x00bebc20, 0x00002000, 0x000040c0, 0x00006180, 0x00008240, + 0x0000a300, 0x0000c3c0, 0x0000e480, 0x00010540, 0x00012600, 0x000146c0, + 0x00016780, 0x00018840, 0x0001a900, 0x0001c9c0, 0x0001ea80, 0x00020b40, + 0x00022c00, 0x00024cc0, 0x00026d80, 0x00028e40, 0x0002af00, 0x0002cfc0, + 0x0002f080, 0x00031140, 0x00033200, 0x000352c0, 0x00037380, 0x00039440, + 0x0003b500, 0x0003d5c0, 0x0003f680, 0x00041740, 0x00043800, 0x000458c0, + 0x00047980, 0x00049a40, 0x00008000, 0x00010380, 0x00018700, 0x00020a80, + 0x00028e00, 0x00031180, 0x00039500, 0x00041880, 0x00049c00, 0x00051f80, + 0x0005a300, 0x00062680, 0x0006aa00, 0x00072d80, 0x0007b100, 0x00083480, + 0x0008b800, 0x00093b80, 0x0009bf00, 0x000a4280, 0x000ac600, 0x000b4980, + 0x000bcd00, 0x000c5080, 0x000cd400, 0x000d5780, 0x000ddb00, 0x00001900, + 0x00100000, 0x00000000, 0x00000000, 0xffffffff, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, - 0x40000000, 0x00088b1f, 0x00000000, 0x51fbff00, 0x03f0c0cf, 0x65e21f09, - 0x63e62860, 0x88237860, 0xcc2b4e2a, 0xfe9942ce, 0x0c0cccf3, 0x32f88117, - 0xe2055f10, 0xe9a48cd3, 0xb045e2b7, 0x30327377, 0x7df90358, 0x9b8b5a40, - 0xc8014181, 0xb3e201b6, 0x204bfe40, 0xadc40afe, 0xdc0c0c3c, 0x6a0c0c5c, - 0xc4042c40, 0xcdf8bcb6, 0xff2023b7, 0xaf951b9f, 0x17ca83cd, 0x3fafc6e6, - 0x7cbf0789, 0x6c790106, 0xf928b3f8, 0x4620e1f1, 0x2d43749f, 0xca86aeac, - 0x6065522f, 0xe7c40df8, 0x681ae2a1, 0x10aac5f2, 0x03329cfa, 0x7e1ab243, - 0xc80853b3, 0x000c060f, 0x4022bae9, 0x00000400, 0x00088b1f, 0x00000000, - 0x7dedff00, 0xd554780b, 0x733ef0b5, 0x27bcce66, 0x20212793, 0xf0841e4c, - 0x04242074, 0x11093a8c, 0x5076c403, 0xc2ab16fe, 0x25786784, 0x5ae5a911, - 0xc0133bff, 0x51b91688, 0x7e2da5a8, 0x68bc104e, 0x01226f69, 0x903a4483, - 0xbd08a5c0, 0x168b6ad1, 0xe088786d, 0x7e929205, 0xcfe956de, 0xe7dad6bf, - 0x9939cccc, 0x77e8f881, 0xbf41ffbf, 0xdecfb3ba, 0xd7b5ef67, 0xcfb5ef5e, - 0x30733d1e, 0xd7632776, 0x73941ff1, 0x4158c645, 0xf81d0ca4, 0x614b3ce2, - 0xc18b72ec, 0x6c64cc65, 0xe8431eca, 0x68afa84e, 0xd7588214, 0x3633301d, - 0x5b2bb181, 0xec46bd79, 0xb41b78dc, 0xb645d7b3, 0xd3b60a03, 0x8c8563a6, - 0xfe31379d, 0xb1d76f4f, 0x9916c634, 0xe3457579, 0x7e3839c1, 0x9991ab55, - 0x2df3fde1, 0x2beb07a2, 0x26410877, 0x27befb40, 0x7f180ca5, 0x32685071, - 0xe3bea0bb, 0x6765c959, 0x2f81cd6c, 0x0abce0ae, 0x4dfa9f5c, 0x7c2125cc, - 0x8d75a5ef, 0xb0696c66, 0x8c066a79, 0xe09774b3, 0x4b3cc1d6, 0x3ba10ab7, - 0x2173e027, 0xcbb8c228, 0x2b995a76, 0x9d70c38f, 0x8eb4bcd1, 0xbcc02f95, - 0x83670899, 0xe647b5e4, 0xa9f3f053, 0x72b981bf, 0xaf15f523, 0x5ef03cc0, - 0x3704aff5, 0xc75ab12e, 0xff304d7c, 0xd9e67d95, 0x7d70d92f, 0x3dae5275, - 0x7b951d7a, 0x834b1d71, 0x1b54d28d, 0x2d28d5c2, 0x6f191d1a, 0xcc4dced9, - 0x6b828a65, 0x5f00f64b, 0xfcb6bb54, 0xf054cfd4, 0xd3cc652c, 0x83f84364, - 0x9131ccd2, 0x22422de7, 0xbe38a963, 0xb19f1aa8, 0x99173d00, 0x6778843b, - 0xf477766d, 0xaa755dbe, 0xa2656df7, 0x781c6efc, 0x87de45fe, 0x2a4efd67, - 0xa9d3f937, 0x45dfb1fc, 0x9fc4fe70, 0xfd4fe547, 0x73fe7a6e, 0x2f95117f, - 0xbe543df8, 0xb2a72fe8, 0x7ea5efd1, 0x5367f92f, 0xa3efc3b9, 0xafeaffe7, - 0x7f15f2a2, 0x85ff3d2d, 0xbf95357f, 0xf9e807f4, 0x53d7f9bf, 0x04fb8cd9, - 0x16ff6ee5, 0x83f8f72a, 0xff75efd4, 0xf9f72a4e, 0x33f9e89b, 0x13283f88, - 0x3d3ace3c, 0x19424fec, 0xb0790273, 0xceb7af64, 0x59e4f500, 0xd7c03ebc, - 0x7e012750, 0x3a802c06, 0xdaa0dfec, 0xb4233ace, 0xdbc55a0f, 0x6b9c0687, - 0x743ed04c, 0x6ecf6f1d, 0x4331aef0, 0xde66f67b, 0xb0d83c3e, 0xc3ed02c6, - 0x51f6f3b7, 0xac6b9d4d, 0x85aa3ed0, 0x721adfb7, 0xfd41b5ae, 0xcf5e0ed6, - 0xb5aef4ef, 0x5dff3d43, 0xd5d89f5e, 0xef01d6b0, 0xdfc73c4f, 0xd9bde2d7, - 0x60cf9ce0, 0xee0736af, 0x4207e8f2, 0xc23e725d, 0x1cbd8cdc, 0x77d516f8, - 0xded4dc1b, 0x47aef81a, 0x92ea093f, 0x058fda9b, 0xc7bed47c, 0x53f6a5e0, - 0xbed42581, 0xfb52f247, 0x6a4ac095, 0x4b50dd7f, 0x87eeaced, 0x54bafed4, - 0x7549ed4b, 0xcfbea8eb, 0x8c196d00, 0xe33dd4e5, 0xcdfd0009, 0x511b7c11, - 0x6aeb747e, 0x12ca18ab, 0xf91d287d, 0xcd8149e9, 0x5d80fe46, 0xf27bba23, - 0x7c83c916, 0xc29bfcd7, 0x994cc497, 0xbeb052d6, 0x05a7e5e8, 0xd827e71a, - 0x71825baf, 0xce3e6fb2, 0xaa4563b8, 0xab1dc671, 0x1209c652, 0x8dfe963c, - 0xb26c7cd3, 0x4b639e1a, 0xa15e7195, 0x5bfd1c71, 0x8ab7b8d7, 0xb5bcf0d5, - 0x35e7195c, 0x7fa9271a, 0x1b7eecf0, 0xc64423f0, 0xe036fdd9, 0xd9c69327, - 0xf5a4e34f, 0x77fc9e0f, 0xe4e3548a, 0x8ca553bf, 0xce7841d3, 0xbb38dfe8, - 0x86ac99df, 0xcaa59de7, 0x9c682738, 0x575bfd21, 0xd58aeffe, 0xb96efcf0, - 0x69efce32, 0x8dfeac9c, 0x357de7b3, 0x3f79ecfd, 0xa27f3f4c, 0xb7fb7271, - 0xd40f82ae, 0x41f053f4, 0x102e7e98, 0x6ff6479e, 0xa81f3d9c, 0x07cf67e9, - 0x33f9fa61, 0x7fb633c1, 0xa3f82aeb, 0xfe0a7e9a, 0xcf9fa618, 0xfdf19e09, - 0xd3f5e783, 0x7ebcfc6a, 0x511f8c3a, 0xfb0a7840, 0x33c4cf07, 0x3c4cfc6a, - 0x8d8fc613, 0xbfdc99c6, 0xa33f5e71, 0x67ebcfc6, 0x1549f8c2, 0xf4775d70, - 0xcf135d6f, 0xf133f1aa, 0x433f186c, 0x19529e08, 0x8ce3061e, 0xbece3f89, - 0xecfc6a8b, 0x33f1c8bb, 0x3a27d3be, 0xce90dda0, 0xe4ce08dc, 0x0080de0b, - 0xa814faed, 0x30f4b0bb, 0x3d3bc81f, 0xf8d1ddea, 0x84405772, 0xc4aefb76, - 0xa2bb4ff1, 0x58e96ff5, 0x8263975c, 0x3877654e, 0x7aaa2d8b, 0x4a925952, - 0x6454a73f, 0xb369eaa8, 0xf4f554b2, 0xdeaa4707, 0x5e3058cf, 0x7cbc1f55, - 0x643eaab2, 0x7deaa955, 0x55d3e3d7, 0xeeeb59ed, 0x3673d555, 0xcf554f7c, - 0x554f3cdd, 0x54badbcf, 0xedc8de35, 0xd1f5552b, 0xd5531ebb, 0x51acb6c7, - 0x4f6dddd5, 0x3be3eaab, 0x3f8d539e, 0x54cff8e1, 0xb777c2f5, 0xa745eaa9, - 0x3fbd555e, 0x1a6bdcf9, 0x3ce6c6fb, 0x8bae4a3f, 0xc95acf68, 0x910e33ce, - 0x192d5ec8, 0xa3faa262, 0x7f546c43, 0x70df0ef4, 0x8fe3ec27, 0x6bd005f0, - 0x5bbe4a8f, 0x2fec319d, 0x4b1d39d8, 0x63a7d2c7, 0xd7db7d45, 0x80ce801b, - 0x5e874a2e, 0x650d3dcb, 0x3727ae8d, 0xe8dfca11, 0x2e916a4a, 0x4474151f, - 0xd591567f, 0x8d58dd22, 0xfd70e88c, 0x0297c2b0, 0x54f87451, 0xcaf39726, - 0x6a194fb8, 0x3eef51d3, 0x0066f756, 0x9993f2f5, 0x664cbc60, 0x9bc287ec, - 0xbc0e40a1, 0x3a68f99f, 0x09268bda, 0xf9e8d0ec, 0x347f9825, 0xf9c01fcd, - 0x6fcce3eb, 0xcd522dca, 0x52aace6f, 0x60966fcd, 0x4f63277e, 0xe7961dd7, - 0xffde9137, 0xe6987091, 0xa6ad6537, 0xac4bd7f9, 0x25bf354a, 0xf2037f3c, - 0x7f38f3c1, 0xe7f58c41, 0x3faf564e, 0xfd7aa96b, 0xcfff5f12, 0xf3c84eea, - 0x3ffd685b, 0xf5f04e17, 0xd7c63d67, 0xa371846f, 0xf18477e7, 0x5ff9c41f, - 0x69bf338e, 0xfd7ab178, 0xebd5cbd9, 0x5ff9f237, 0x9e4f7bad, 0xfff346df, - 0xaf8f7842, 0x9a71fb3f, 0x75ac68df, 0x38c9a13b, 0x441b52d4, 0x2fe600b9, - 0x050c801b, 0xc6444cf3, 0xde0c6248, 0xd164285f, 0x016a3c3e, 0x9ffe83ba, - 0xd0de8059, 0x72ed977e, 0xd017ac16, 0x6996af0e, 0x4aaec17a, 0x657819e9, - 0x57f72b41, 0xc333f818, 0xad2bbe00, 0x11fd9fbd, 0x7db05de0, 0xa025c91c, - 0x2def8674, 0x23529794, 0xe6307c72, 0xe413321d, 0x877bd329, 0x9a863bdc, - 0x2fd7683c, 0x1f630466, 0x60d85e3a, 0xc515df38, 0xa8b78b6f, 0xea824beb, - 0x097702ba, 0x81940912, 0x0b579652, 0x7f079ef3, 0x7ddd8180, 0x2c6dec06, - 0xb9b0313f, 0x0e7e785e, 0x452605fc, 0xed1d55f3, 0xabbd79cb, 0x73d61d3e, - 0xc3704abe, 0x0d81ec88, 0x3a196395, 0x7bcf0172, 0x77ef0039, 0x852ff298, - 0x7273e9d6, 0x003617f8, 0x7ff1477f, 0xb0bbc88d, 0x0ee08517, 0x7fbfe790, - 0xba054573, 0x83d7d0bc, 0x5e577def, 0xc92de2f7, 0xde98f7aa, 0xa9cdef44, - 0x1ea20c4c, 0xc36ceef8, 0x3b552eb9, 0xf1c03f30, 0xdd0fec91, 0xf1eebacf, - 0xdfb99e82, 0x75d7eea7, 0x8dd1eac0, 0xbb4b7285, 0x3dbec181, 0x8719a550, - 0x1f7f6879, 0xa878e192, 0x973edd56, 0x5fd42539, 0x9fab5773, 0xe3b40657, - 0xcf00f800, 0xf81c793c, 0xe6f844e7, 0xd7f36dcb, 0x7daa021b, 0x0a947a02, - 0xa22cf6e5, 0xbd0f5a02, 0x3fb7dd9f, 0x434041d0, 0xfb588107, 0xf9f7fffe, - 0xae7d8dff, 0x3e492d69, 0x8ad70517, 0xe7c969a6, 0xdb2dfaa2, 0x5f555339, - 0xd55fbc12, 0x4a96f17f, 0x86c2fb55, 0xf9f6aa25, 0xd5561feb, 0xa4ff032b, - 0x75773fea, 0xa1fdaa9d, 0xed54a7da, 0xab3d540f, 0xfbefdfaa, 0x77ffaaa9, - 0xdaaa3767, 0x864b0385, 0x46a8dc62, 0x881d0df2, 0x8df7aef1, 0xa1109b6c, - 0x2fae855b, 0xfca9d3f8, 0xb2a2efd4, 0xc830e50e, 0x5e3edd75, 0x1cab6cd6, - 0xa15bf28a, 0xb50c4ff3, 0x69fe5043, 0x672b55e9, 0x6325d0fb, 0x88bed083, - 0x2e596717, 0xf3ca2f30, 0x19db816e, 0xb213f3ca, 0x0d6c675e, 0x8972d7f1, - 0xd7f2dff3, 0x3f229606, 0xb942972c, 0xe3f8b6b5, 0xd68126b2, 0x1a36d8c1, - 0x10704967, 0xfbd17918, 0xf382ad9a, 0xe69141d2, 0x6e1f46af, 0xdec1da12, - 0x3f9c3a0d, 0xbee43ed4, 0xe78f0831, 0xc1c01d19, 0xdf49535a, 0x2797f25d, - 0xfe23d39f, 0xf05e54bc, 0xbcf2a6cf, 0x39e547df, 0x6795157f, 0x7654b5fc, - 0xf95357f9, 0xe5403f91, 0x2a7aff29, 0x5037f03f, 0x85bfd279, 0x83fbdfca, - 0x7bf15e54, 0xf4e854a8, 0xb57d96ff, 0xf2bdb8e8, 0xffafb8df, 0x16afbd1e, - 0x23c3939d, 0x0d06ebef, 0x55794abc, 0x61797027, 0xf31676e4, 0x788e2958, - 0xc3078955, 0x94571448, 0xf0ddc1e3, 0xd3f62777, 0x1831e537, 0xcfe8eaef, - 0x7b8e3173, 0xb191a4f5, 0xd3ebf8cc, 0x3c5c5fee, 0x46ee80b0, 0x3858b7f8, - 0x72aa015e, 0xdcec1e36, 0xf3dd7b11, 0x92cf5d78, 0x7726fdf0, 0x3c355c74, - 0xc072e22e, 0xd16af1cd, 0xdacf7b71, 0x847c722e, 0xb3efbb76, 0xc6b5e847, - 0x718b93d8, 0x2347f662, 0x36c63d43, 0x055871cb, 0x575e015f, 0x3a7ff5f0, - 0xfda04e3e, 0x1f1f105b, 0x47e0a5dd, 0x32bff0c4, 0x574aafc5, 0xae90439d, - 0x7bf4cab6, 0x027865b5, 0xe7191d1b, 0xd38b9d6e, 0x7ef04df5, 0x0e4be8f5, - 0xa657f3b4, 0xf2e79ceb, 0x456fe3e3, 0x16d3a653, 0xaab4a76d, 0x841b57eb, - 0x70371e72, 0x831acc25, 0x3ce9d1f2, 0x2c728397, 0x9c654a9d, 0xf392e995, - 0x0bf6325c, 0x2576f872, 0xea7e5f12, 0x6fbf5137, 0xe3788e1a, 0x6168e044, - 0x247de167, 0xf1d9ebd1, 0x3ba5c7fb, 0x8c245ffd, 0xc336b0c7, 0x985f6867, - 0xd1d7ffe0, 0xaa7a63ee, 0x34d6e32b, 0xade30189, 0x6a977cf8, 0xa5cf783e, - 0x67ae94e4, 0xf5be88dd, 0x7f42bcec, 0xa0e7ca20, 0x1079489d, 0xbf6d53b3, - 0x35eaaa24, 0x2a9d03ad, 0x00ff067b, 0x04cac739, 0x72c1d23d, 0xf5ba2c99, - 0xc002f5b6, 0x2e9d0937, 0xf78147a4, 0x92ea615b, 0xafa42e7c, 0xcdb9dfb5, - 0x681b3d85, 0x60f85abd, 0xf5ea66ff, 0x265fe1f1, 0x1bd47d5e, 0x22d7fe83, - 0xd01ea3fd, 0x999f3f71, 0x43e40e02, 0xdc701e96, 0x6cc3fc4b, 0x9ae0fc61, - 0x5513cc19, 0xff01c657, 0x5f6d47ad, 0xa4bbbe72, 0x76bbfee3, 0xbcf2cdde, - 0xf55fc337, 0xe2a7b7ae, 0xac78b5ba, 0xe4b3fd6e, 0x5314fca3, 0xefc151e1, - 0x59bbd124, 0xee97f984, 0x7f212d3c, 0x7204305d, 0xb903787f, 0x5b7e17df, - 0x646b79fa, 0xd8f72b9d, 0xf95fbec9, 0x0bd79cac, 0x779c4eb0, 0xf13c915e, - 0x0515e835, 0xa67c6807, 0xd3d88c2b, 0x5e6d7e4a, 0x27f232cb, 0x0901663e, - 0xc51792e3, 0x9fb44286, 0x4a353697, 0x32f3801e, 0xbe2395d3, 0x1c77b32e, - 0xb5fb51f9, 0x9f08944f, 0x899f6760, 0x6cec1386, 0x6cec1d55, 0xbb117d55, - 0x51f30d37, 0xc01b368b, 0xaa75a7c5, 0x9d115fda, 0x5662ee34, 0xc9768f5b, - 0xeffc96d9, 0xf0fb86dc, 0x88850bfa, 0x3cd079df, 0xf8f10928, 0xcbf1e136, - 0xdf04bfce, 0xde77df1f, 0xf26add08, 0x561e328e, 0xc13c14ec, 0x44737418, - 0x7d0ad796, 0x5f8641fd, 0xc59c0f89, 0xdea4417a, 0xa17fa9ad, 0xfe657fa9, - 0x4bba014d, 0x24f7ec8b, 0xe91677d1, 0x38f906ad, 0x5fb7c221, 0x3ef4fc79, - 0xa37f77e3, 0xf3560fe3, 0xc5ff8c0d, 0x4e7e3a37, 0xfa8df81f, 0x77e3be82, - 0x59631d9b, 0xc4a9d902, 0x3a71815f, 0x1fe9bbf2, 0xd2136bda, 0xc0a69fc9, - 0x39ddd638, 0xd9a38c41, 0x14e99dcd, 0x54bf07d7, 0x6024f30f, 0x0edf907f, - 0xf9f016e6, 0x2cd37ed3, 0xf8ca8794, 0xe55eb776, 0xe914267f, 0x7b28fe35, - 0x61f00737, 0x38a6a793, 0xfcedd41b, 0x5b6b666f, 0xe30b7c4c, 0x04e8fca8, - 0x2ffe45d6, 0x9e7aa78c, 0xa1d59a38, 0xa8f44a1a, 0x6d154f9f, 0x9c4b6f14, - 0x9c4e28c6, 0xfad7ae5c, 0xd2c315f7, 0x4740e0a2, 0x32c9ea1b, 0xcfa6e01c, - 0x67fde014, 0xf08cf4cb, 0xc5ff8012, 0xbc593380, 0x01f9c216, 0x39df155e, - 0x65f540f2, 0xe7aabc11, 0x4d19e700, 0xe50f207c, 0xb8b31246, 0x53801e71, - 0xdbd1eed5, 0x0e1e2853, 0xa3e517f2, 0xc989d4cd, 0xaaef9c7f, 0xf4ebaf0a, - 0x190b23e9, 0xfc385085, 0x942fa601, 0x83ef8bf7, 0xd313bfaa, 0x8f04d9d4, - 0xd8361c7a, 0x6f8f2d19, 0x8309fd95, 0xe9133bc1, 0xad6870aa, 0xa717f388, - 0xaec872bb, 0x3a214b68, 0xca5d5acc, 0x685d42ce, 0x9cf78460, 0x39ef1c0d, - 0xf71e3a3d, 0x0e09675c, 0x268cb183, 0x9c833016, 0x301cad02, 0x8259c78c, - 0x5ae49fb2, 0xcd3cc3a3, 0x7829a07a, 0x54a7adaf, 0xa73610b7, 0xfc609b09, - 0x3e3de96f, 0x67c1c63d, 0xe375d2fa, 0x9ae161f0, 0xa5a0c18e, 0xb8211b19, - 0x05080b41, 0xc2de8e87, 0xdf184a43, 0x790f4185, 0xd72ed46c, 0xdaed0859, - 0x2faf0b06, 0xae9417d7, 0x988ff787, 0x5d71cbbc, 0x891ce4cc, 0x4a162b79, - 0xb7c6f5a2, 0x0724024f, 0xb6f2b815, 0x4cb54d77, 0x2814fe40, 0x1ecc3fcf, - 0x24255bb6, 0xa5361dae, 0x6ed0921e, 0x2dbcb6f5, 0xa2bb7fa1, 0xd76a6de9, - 0xa1ca1d61, 0x07535dc9, 0xd4f88981, 0xf4d2b2ba, 0x4b5e3011, 0xd60eba65, - 0xb2badcf5, 0x4f75ea43, 0x1c51d35b, 0x775eb759, 0x77dd66b7, 0xcfdd70df, - 0x5d2eefe9, 0x75ffdc5f, 0x8b3fbec2, 0xa25199f8, 0xeefe510b, 0xf0282da4, - 0xec99bb78, 0xc69c7941, 0x1287f638, 0x7e718437, 0xe850eb8a, 0xa14f7947, - 0x9174789b, 0x79239ccd, 0x1f4d503e, 0x6d9ef4c7, 0x7a4bd708, 0x4054894f, - 0x787b25eb, 0x2ee7cf86, 0x2dd08fcb, 0xd1f2f9b3, 0xe61832be, 0x57e702fd, - 0xb2519ae0, 0x7802cc52, 0x21ec6177, 0xd49eb235, 0x2e7301d5, 0x03d533ac, - 0x7be177d8, 0xcf7c66be, 0x8427bb31, 0x32262647, 0x4620be5f, 0xaf995ee8, - 0xdf1e4dfe, 0x05d4afaf, 0xed5c90d7, 0x08bc7012, 0xe869743d, 0x43d387a1, - 0x87a269eb, 0x9cd3b6ea, 0x4aeb5a1e, 0xdbaa9e91, 0x85d1a704, 0x8719eaeb, - 0xebeffcfb, 0x61ea97e6, 0x7b5a879f, 0x1d0107ea, 0x69655818, 0x7af09985, - 0xb3ebe118, 0xca7c323f, 0x6fede2ba, 0x1facd1c3, 0x707d468d, 0xe61ee75c, - 0xe94de08a, 0xd12f4977, 0x7c906c3e, 0x295e90ef, 0xcb823aea, 0x3be8ed7f, - 0x1c5bb40e, 0x883defc7, 0xc1663bef, 0xf322b90e, 0x535f1c36, 0x1a67e78a, - 0x64381d60, 0xa009eb02, 0x1f1f13dd, 0xf8c25f9c, 0xf84d3968, 0x9e1d61d1, - 0xa7e72abf, 0x5ec8cf80, 0x7ee56a19, 0x1e7ac7ee, 0x5e9bfb3f, 0xef6e4b94, - 0x2abf1ea6, 0x5c4fd0b9, 0xa9fea3a7, 0x5e8e8e58, 0xf7ea3aff, 0x055e5437, - 0xfb287c11, 0x4813d0a9, 0x5fe62b4a, 0x577c5996, 0x6493f4d5, 0x4f1a8acd, - 0x9fa36f79, 0x7f8017b9, 0xde63b137, 0x81ff2823, 0xf543fe7e, 0x198318de, - 0x47f4a6f1, 0x3fb58cfa, 0x14331ef0, 0xd05c79f0, 0xa563b9bf, 0x7f617688, - 0xf650b5f7, 0xacad0b8f, 0xbf7835f6, 0xac4a0130, 0x01f5cb27, 0x2f107d72, - 0x75b94fb3, 0x946f3c02, 0x6e9effb8, 0x7a92e390, 0x3bcc48e7, 0x3db81ba5, - 0x923e9c58, 0xb7c2bee4, 0x2484be88, 0x58021b32, 0xe964f566, 0x3e14df70, - 0x42e8f7d6, 0x594a5076, 0x0dce977a, 0x61f98fcf, 0x9ff037dd, 0xbd108fa6, - 0xd1d1ecb1, 0xfcbf5d06, 0x5276b898, 0x6c3b1f57, 0xec9521b4, 0x42f78da3, - 0xaf447abd, 0xc6b5fb84, 0x8ddb7d5a, 0xe169efce, 0x13ed763f, 0x577bfa07, - 0x8f2c6afe, 0x5078f715, 0xff51dbc6, 0xb14f7a6c, 0x30ab68a3, 0x3ec0cfbe, - 0xd70bf0e2, 0x7d92548d, 0x3c890774, 0x3e80c7dc, 0x55a7f509, 0x777e73a0, - 0xebb3fa46, 0x8477e7c0, 0xb1b05696, 0xb72bf950, 0x3ff04c6f, 0xe98faff4, - 0xed1e747d, 0x9a79e318, 0x3b6d6b42, 0xd33199d6, 0xf985c3bd, 0xa29e753e, - 0x2ca1a130, 0x42489509, 0xc533cd26, 0x0e4f69a4, 0xb2fe51e8, 0xe71e4cec, - 0x945f3062, 0x44f40e9f, 0x7c3658f9, 0x3395d924, 0x65dd2af2, 0x48bdfbf2, - 0x731b7eac, 0xfae44426, 0xeefdd734, 0xd1dd9532, 0xfd3946e0, 0xe245dfd6, - 0x7f1e2d6b, 0x7d7ce065, 0x9775efd4, 0x63c5f4e5, 0x67584ba9, 0xa7c5f577, - 0xfc5a5f16, 0xc95fc3c6, 0x52597729, 0xf1693c0c, 0x46ff0c72, 0x06368f3c, - 0x9de20203, 0x4b98e9e3, 0x78188160, 0x29d2ec52, 0xa4683176, 0x9dd90f76, - 0x68f0c977, 0x4f17d6f1, 0xd2bb8a9e, 0x411ff022, 0x4e91e87c, 0x884aefdc, - 0xdb0304ff, 0xdd0ceb81, 0x6ab7f949, 0x434c1fb9, 0xf93bb579, 0x8375e150, - 0xf087707c, 0x386301bd, 0x6d55fd7d, 0xb83dde7f, 0x14a0dd72, 0xfb9803c4, - 0xd4671f1c, 0xf1b8c374, 0x7da4cd61, 0xdba8fc07, 0x587e3993, 0xcbbf6f32, - 0xd0d769a9, 0x0abd768d, 0x3e1bfcdd, 0x3f17d498, 0x30ecdd0a, 0x067276c8, - 0x1e788c1b, 0x02426fbb, 0x78da2dc5, 0x4f4b5ede, 0xc37a4f13, 0x47f4c8e3, - 0x5f3025f4, 0xfb33b9f8, 0x569bc86b, 0xf25166d0, 0x7be8b866, 0x51bc9623, - 0x7976fff6, 0x81676e9f, 0x4b03a283, 0x74c25ffd, 0xff591993, 0xda275c21, - 0x20d883e7, 0x8318e75c, 0x7969cb8b, 0xcb75e19d, 0xe58a09e7, 0xb64d8bf9, - 0x7acb8e10, 0xf8c297f4, 0x5cf8a2cf, 0xc08a4a40, 0xb3fb9061, 0xdb8cb521, - 0x79d20f5d, 0xbb0bc01c, 0xf1c08d6e, 0xa7a08307, 0xc70c9578, 0x80a69de5, - 0x57ac2b78, 0xf511fdf4, 0xf8e125d6, 0x3e9f5a58, 0x4a7a8b94, 0xdadbdedb, - 0xd0ed8d51, 0x93f5116f, 0x71865fe1, 0x9ea7a007, 0x6dc18d37, 0x8a48e231, - 0x4a6c093d, 0x83e15cf2, 0x6505513b, 0x92dfa5f7, 0x1c7af1d6, 0xa5b74b5f, - 0x1da159e0, 0xbbd7a5aa, 0x7c1ccf58, 0x4553a5ae, 0x7a597eaf, 0x30a9ec50, - 0x74d4845d, 0xd003d0a1, 0xfa42ffc7, 0xf1f09ee8, 0x9efe68f3, 0x169bd098, - 0xbd810f4b, 0xeca293a7, 0xb3f678e8, 0x48273762, 0xc7da333e, 0x595d797a, - 0x9e1d2e79, 0xf25dba8f, 0x62b9f058, 0x0fccdc4f, 0x80e01d60, 0x91cc7d02, - 0x83a4ddf1, 0xc0dbe006, 0xf288214a, 0x63d621e6, 0xaa1ef9c0, 0xc9fca835, - 0x8f9ee639, 0xe6fd087e, 0x3d270dd4, 0xbf28c3e4, 0x38f3ef48, 0xffcf3d44, - 0x5c9ebcb3, 0xaee6bff4, 0xd1fc6836, 0x39e3a224, 0x23ecfe4e, 0x09303be8, - 0x4d4aedc7, 0x76f94d1a, 0xfced7f55, 0xe3b43aca, 0x91abdf6a, 0xee78b2e3, - 0xf7851dca, 0x83b71251, 0x131ef0c2, 0x6f80bc39, 0x6aebac1d, 0xd3e088db, - 0x2954e831, 0x8e5d267d, 0xef52393e, 0x3b38d37a, 0x955f6318, 0x3f7c1479, - 0x7c153ac8, 0x0e8b1e7e, 0xffdc7d8b, 0x910e6dd6, 0x2f1dacbd, 0xec8ca7a7, - 0x81269cb0, 0x4de5deec, 0x2af9ba25, 0xa3fb9bfb, 0xa6efec7d, 0xf2de3483, - 0xfedc8396, 0x3b23aa6e, 0xf70b797e, 0xa43ec047, 0xc80463f3, 0x15cbb268, - 0x7983d33f, 0xb79815a2, 0xbd21ede4, 0xf3d5cf0b, 0x78d235fe, 0xf21ca9f1, - 0xc0ff7913, 0xa7e8b5c4, 0xa85afd86, 0xbab5fb47, 0x9576c2ba, 0x6c281b5f, - 0x5b5f91bf, 0x05385f53, 0x8fe05afd, 0xcdc15245, 0xe4b663f9, 0x797fa1ba, - 0x41ade4c4, 0x02e2533e, 0x6abffdda, 0xfd202572, 0xbdfb253d, 0x23cf57d3, - 0xfc3cde7b, 0xa37990da, 0x7df2de51, 0x76e24c7f, 0x7be88a4b, 0x3eebc70c, - 0xcf172d74, 0x7fb4d4cb, 0xbcf911ba, 0x1ec3ce4d, 0x5d9157f7, 0x13dfeca3, - 0xa777b712, 0xa077688f, 0xc14f7ffd, 0xcfe81cef, 0xbcf3d65c, 0x4922a5cf, - 0x18f66f65, 0xd7027aee, 0x1e8094ad, 0xf16ee511, 0x82938e84, 0x8ffcbe23, - 0x808f77c8, 0x7b5d9df2, 0x5bd70d3b, 0x81d872d3, 0x7e84bef8, 0x5bc9c610, - 0x8f30d3da, 0x77f9a2b8, 0x9e7bf40e, 0x7b5db897, 0x40e9df59, 0x1ef96ebf, - 0x5fc9dbb0, 0x003da50a, 0x32d4ba78, 0x3e69f0bf, 0xbf5a298d, 0x85f57fe1, - 0x76edbb11, 0xeb282053, 0x284e253b, 0xefa1875c, 0x663d116c, 0xedfb5f47, - 0x4dacd1f2, 0xcc0fb815, 0x0f861ee0, 0xec83acf5, 0x09962539, 0x21cf0a92, - 0xbf2b901d, 0xefbde96e, 0xe7162236, 0xda0251ba, 0x0c14be3d, 0x8db69592, - 0x9188375b, 0x73d950be, 0x12ef7b5a, 0x1b77dd73, 0x7aa3b9ca, 0xd6b37686, - 0xfdd163fe, 0x9f7fe387, 0xd6bcbc25, 0xfdc56d92, 0x59d320da, 0x54ef4b4d, - 0x166a97e4, 0x6f7e0efa, 0x3a22dd55, 0x7246ec43, 0xf85bdd77, 0x9b7753fd, - 0xd8f485c1, 0x34d876dd, 0x22adeb16, 0x4e6a99c5, 0x3a428f14, 0x2866d2ba, - 0xbcd7bc47, 0xf903b1f9, 0x57cfd15b, 0xde7a44da, 0x9e9676dd, 0x695ee32b, - 0x7a851e4d, 0xfdc759a5, 0x9f238ebc, 0x7fdf915b, 0x326aed7d, 0x7eb297f9, - 0xaaa7618d, 0xddad4eec, 0x6e19e53a, 0xb5494e47, 0xec579c93, 0xf8fa3ecb, - 0x67675b14, 0x6b1f425f, 0x4919f0f4, 0x616ef3b6, 0xd8af31e3, 0x19792d7a, - 0x9b7765f2, 0xe286b9d5, 0xe88edc1e, 0xb9f4f8ee, 0xb8fcf819, 0xee9c7148, - 0xf1d1226b, 0x86cb03a1, 0xf1a2d976, 0xf5fb4f5c, 0x5f3fc0d9, 0x3ffd0fd9, - 0x07716c3b, 0xf77a7d70, 0xd63daf28, 0x78e504be, 0x97432841, 0x4320658e, - 0xec35f457, 0xe27d93c4, 0x7f91d7f7, 0xa67a9857, 0xddcd18a2, 0xfe425a7a, - 0x057920df, 0x2687e923, 0x8075f22b, 0x73c20e95, 0x561655cc, 0x53d4f48a, - 0xa0db9cc7, 0x9d51cf75, 0x30fb04ce, 0x1ba64761, 0xf955edb7, 0xa692f35c, - 0x4a332906, 0xbf912c5e, 0x0860bb3b, 0x7a8a490c, 0xcb91a4fe, 0x97870bab, - 0xeef248be, 0x161b237d, 0x362dbf43, 0x5bb57d72, 0x85d8cc0a, 0xe8e8cefd, - 0x238ec1fb, 0xf3c11c6f, 0xba4e4b10, 0x28bea1c6, 0x6ffa7231, 0x3d6afe3d, - 0x3d690b9e, 0x76f478c5, 0x83a8a57b, 0x1733f779, 0xabbd3f8f, 0x1c23ff23, - 0x649e63b7, 0x461de75c, 0x1ff6672e, 0xc74795d5, 0xe7cbf605, 0x1a356e1c, - 0x4661fc68, 0x8ed7ca91, 0x23cf2696, 0x19e5f3be, 0x75ceef91, 0x915c3bd5, - 0xef629578, 0xb5f77a4c, 0xcfe06319, 0x4e749749, 0xbbd76edc, 0xaf5c44db, - 0x896302eb, 0x07fb5f42, 0xf88f1bc6, 0x7fdbc657, 0x70078f89, 0x54be421c, - 0xf41a0ff0, 0xbea1a347, 0x849f53bf, 0xf82813df, 0xcca1d657, 0x9e626aef, - 0x8eb11b46, 0xc41bb5e7, 0x8f52314d, 0x54ef91f4, 0x7449cef8, 0x29e486f9, - 0x1810f4e5, 0x870bf582, 0xec57642d, 0x4b11f596, 0xf88a1caf, 0xbe69f653, - 0x0513eb91, 0xcff3789e, 0xca54e191, 0xafd74b2f, 0xa2015c1a, 0xc5023d9b, - 0x90815c19, 0xfb053b29, 0xe739d365, 0x37d8de48, 0xbd87f707, 0xd6ffa6ab, - 0x8ace9d2e, 0x214df1f2, 0xfde0d291, 0x74c34fb4, 0xfa226fa6, 0x88c93d6b, - 0x7cee978f, 0x58cdc798, 0x728e9068, 0xc84181c8, 0x9c3fc8b7, 0x0503437f, - 0x35b52728, 0xf8441dae, 0xaf90390d, 0xbe027822, 0x41b6b2c1, 0xb25d7a42, - 0xe58b978a, 0x6c9647ef, 0x2e7f11f1, 0x15395ada, 0x98d5a7ed, 0x28bd40f4, - 0x59d32bd3, 0x4ebcf032, 0x85df6caf, 0xdd3897e1, 0xd4d96c5e, 0x7d02f38e, - 0x63e233fd, 0xcfb3eb72, 0xbd0ab823, 0xa06edc5e, 0xde90aa71, 0xad74f8a3, - 0xde7bafbc, 0x693ef4e5, 0x7bf4a1bb, 0x0149eeb0, 0xec38c4e6, 0x443bedfe, - 0x91fbdf94, 0x9f39339e, 0x70be9ea3, 0x63eb69f8, 0xeb4ecfa8, 0x777bc618, - 0x39aaac4b, 0x1a3a2f8a, 0xeff1575f, 0x33759dd2, 0x95dcae28, 0xa66ba024, - 0xf782adf0, 0x1a7b92dd, 0x34b7fff1, 0xdfc65ffc, 0x81ff87df, 0xfe649b7e, - 0xfc0e54df, 0xb7128f0f, 0xce380a27, 0x79f6296e, 0xfd8d57a1, 0x5710b73b, - 0x23ef1eae, 0x72355f57, 0x0d91dbff, 0x73df57f3, 0x30effc95, 0x6cdd327c, - 0x26e8532a, 0x7b71f053, 0xf8839753, 0x3d22bc02, 0xf289bd93, 0xb82b24b6, - 0x8f45884d, 0x967c946b, 0x72236f8a, 0x5f5fe14d, 0x5853c21b, 0xed16bb56, - 0x008ae4e4, 0xc145e9d1, 0xf4093437, 0xe7e445da, 0x67e17218, 0x333e5e32, - 0x1be754f8, 0x32c1c2fb, 0xc0abae90, 0x69f3a2e3, 0xee27055b, 0xdaeed28f, - 0xf782fdca, 0x9e573e65, 0xf915ffbf, 0x53f78c3e, 0xeface27d, 0x933eb91b, - 0xdcceb04c, 0x4c67d720, 0x60be2528, 0xc819e9ba, 0x8f404b6f, 0x8f4a2f7d, - 0x1034345d, 0x38782abd, 0x67fbd32b, 0xcfdd7c89, 0xc41e70c9, 0x5be12998, - 0x7a0947ce, 0x5af9c0bd, 0x8bbf3814, 0xc3c5fe38, 0xdd11a793, 0xee9b13df, - 0x246aed97, 0x772c4cfa, 0xb3b9438e, 0x2736ef49, 0x8f258e8e, 0xec765483, - 0x49f909f8, 0xf7c8c748, 0x0aa0f8f1, 0xa0c580f9, 0x7fd020ff, 0x7429fed4, - 0x1d717400, 0xd73ca5f1, 0x379285d2, 0x5bb2f053, 0x669b7793, 0x601a78e2, - 0x25def2e2, 0xfa78a9cb, 0xf3ef2be5, 0x2bf87dbb, 0xe6a054cd, 0x456fdc2f, - 0x13717c4e, 0xe2679b3e, 0xfa644fed, 0x780ede4e, 0xe4a0627a, 0xeb720b5a, - 0xe766d809, 0xa63e48f8, 0x595f9e49, 0xa09348c7, 0xf368dbca, 0x6f830629, - 0x9f0a2984, 0x8d73f798, 0x334bd08e, 0xd81cfce3, 0x43cf946e, 0x5f765538, - 0xc6912981, 0x40c1ea77, 0x967fd405, 0x0361d959, 0x0ceeeeb8, 0xe1718c54, - 0x5981db77, 0xbae264f7, 0x853e829c, 0x53ace5d6, 0xdf20ce8e, 0x7c50b71d, - 0x3ddb3f24, 0x974cfc8a, 0xf7c71f3b, 0xeca4fbc8, 0x6b75bc67, 0xfdbc5cf5, - 0x21e3279c, 0xcad76e55, 0x2e26418f, 0xf9657a37, 0xf83fe5a1, 0x526f9317, - 0x3b242fb7, 0x6d8c9d90, 0x326fde07, 0xff5179f0, 0x00d4bf40, 0x23ddfeff, - 0xdcec27ef, 0xc343c41c, 0xa39d2376, 0x31d7f850, 0xf18e9bcb, 0xe48a4713, - 0xaeb8c176, 0x7e1a6c59, 0xe8f2efbf, 0xd651bfc8, 0x26e1ff5f, 0x7ea26fba, - 0x7da19187, 0x57ef209f, 0x0c162cc2, 0xbaf9f109, 0xb1e80763, 0xd3fe2894, - 0xee89eb07, 0x5103bf80, 0xd93437fc, 0x2d806e97, 0xdbfac1fe, 0xc0b74cca, - 0x8ccc993c, 0xa82aea16, 0x347c006f, 0x96047924, 0xb675f548, 0x0fe3f181, - 0x2e4d303f, 0xbf04f3c3, 0x6fbe7a32, 0xc438a54a, 0x1c2cb00f, 0x28b22b50, - 0x1d99bdbe, 0xb1f955f3, 0xb0738e46, 0x69469036, 0x9ce2f8aa, 0x2f8a2e9d, - 0x507c8d3e, 0x79fe719d, 0x8da6ae1c, 0x078beb9f, 0x678c8a47, 0x17c4e790, - 0x115ade29, 0xcf857ffd, 0xc925379e, 0x3011ebfb, 0x1dd0aefe, 0x93da29f2, - 0xe31d7e4a, 0x2f8a762e, 0xb0ee8907, 0xc23e309e, 0x742a1b7f, 0x61e2b1e5, - 0xafb64cbb, 0xf23487a7, 0xb17db589, 0x4bd031f7, 0x48b7f835, 0x29976af2, - 0x54d81eca, 0xc78d2671, 0x439d19cd, 0xe39e447e, 0xffee35c5, 0xe1f28e18, - 0x947efcb7, 0x80294671, 0xfdc0aae7, 0xe4d33975, 0xda9d90f1, 0xfc1d9084, - 0xd1cf9add, 0xf37f0173, 0x2f951d73, 0x3cb7b3fe, 0x56d9ed13, 0x032c1b9d, - 0x5c93ebcc, 0x41650f70, 0x9373d013, 0x2a9b9f85, 0x9079b769, 0x1305bbfe, - 0x13e99b9d, 0x19ea2f8f, 0xd7da0bb2, 0x411f01b6, 0xb184bbb5, 0xef57844e, - 0x0ad0f3a6, 0xd89ec77e, 0x63df4794, 0x37dc1be9, 0xcbc55b8a, 0xb6af16df, - 0x894adc50, 0xf4f71593, 0xb5649d10, 0x61f8ea65, 0x5e8f3e29, 0xd792af5e, - 0xbef1926d, 0x226be8fb, 0xb2c2b1ea, 0xef68b586, 0xef7d1867, 0x2e4ddd23, - 0x1339db56, 0x3b76da84, 0x4634d7d2, 0x1fc2827e, 0x20ec5dc9, 0x4f12a986, - 0xcfd07976, 0x73c17c9a, 0x04a9fd10, 0x77f8132f, 0x24f3e192, 0x58ff70e7, - 0x07b8478a, 0x13fc29c6, 0xe328bc23, 0x2a5a3eec, 0xd2919da0, 0x46b82659, - 0x2defa5f7, 0xe04e77e8, 0x5f701ee7, 0xe8687f15, 0x6196462f, 0x2fe9487c, - 0xbd5cb99a, 0x429be7cd, 0xafa34fa1, 0x349de717, 0xa98ed83b, 0x81558997, - 0x84f10c76, 0xd184b3d7, 0x02ba8378, 0x27818eb4, 0x9658257d, 0xf7048948, - 0x3a210be4, 0x96a0312f, 0x5b9231d1, 0xfb25df3a, 0x4eda96e1, 0xf771f701, - 0xef0443d1, 0x5e0ecee0, 0x9af57cca, 0xb814ffac, 0xa27f644a, 0xd5c38e44, - 0x8e9f9e5f, 0xecd181fe, 0xa338c12b, 0x12fa8eb2, 0xbf9e3a5f, 0x3ce782dc, - 0xe73fc426, 0x14966691, 0x8cc1373f, 0xaeecee7e, 0x5a7b4823, 0xf8ed39bf, - 0xb48fda19, 0xdd1ddcd5, 0x80a57c72, 0xc1e5b5f4, 0x22b37ed8, 0x71c8b62f, - 0x14f3a8c4, 0x7ad1cd83, 0x9ac932b9, 0xc28f2515, 0x9e722672, 0x9e7cb762, - 0x6f7aa6c2, 0xa46613cc, 0x27834ea7, 0xdf2b9f07, 0xdf2abce1, 0x71f8a01b, - 0x961ebe0a, 0x9e68d3f7, 0x1086e749, 0xe3a04e4f, 0xbfb1cd57, 0xd6685987, - 0xd3977ac9, 0xf4e4eb0b, 0xb688eb82, 0xb999a633, 0xe3cdbd5e, 0x74e7a29b, - 0x9c788452, 0x476c1454, 0x1e589dba, 0xbffa4768, 0x5274c985, 0x4b44e9ce, - 0x939bf7ef, 0xa1e93a64, 0xe0260a7b, 0xe43145f7, 0xdb998563, 0xa59d2977, - 0x0fc03f44, 0x857ce177, 0x03456a83, 0x339cd0a5, 0xf0f8ef50, 0x9e7822f2, - 0x4769e45f, 0xbc7a737a, 0xa8db8e22, 0xc9ba7277, 0xb8c49ef4, 0xe4aa7d77, - 0x38d02b5e, 0xe0c736df, 0xa7e416ab, 0x4a7e11d1, 0x5a47e391, 0xc3229cba, - 0x1cf193e5, 0x43df1e7f, 0xa74a4f38, 0x33f783ce, 0x4c25b9e0, 0x055c4e46, - 0x96f912fa, 0xd2f9d275, 0x09672aa4, 0xe5a0ddf2, 0xf9f7016e, 0x016fbd25, - 0x3c76b3ee, 0x350c9f45, 0xbffe8879, 0x6268deb2, 0xf2ff8d26, 0xb5db99b0, - 0x7e512b1b, 0x8499f2bf, 0xf0a5d5f2, 0xd6f1d1e5, 0xf3745179, 0xf83a5f74, - 0xa07458a7, 0x3a5a7f95, 0xb50bc888, 0xadbc03fc, 0xedc3fbe5, 0x55ce94dc, - 0x6a1b9722, 0x7f6f1779, 0x0d0dc8fa, 0x3de98f1e, 0x097ae0cf, 0xf39105e9, - 0x74f4f1db, 0xae1ff9a3, 0x31cd1ba7, 0xd4ceb4f4, 0x9f3c1bf3, 0x744da2bb, - 0x5f225c61, 0xf6ba8f3e, 0x4f3a24f1, 0xe09362f0, 0xd1439746, 0x502244d3, - 0x6127b2bf, 0x4a15bb2c, 0x6ae78078, 0xb2250302, 0x08c759cf, 0x24d633ca, - 0x1bac70ca, 0xdbb7fa41, 0x51e600a9, 0x256063eb, 0x91d3fa01, 0x684b181d, - 0xf310783a, 0x988b6b2c, 0xb77000cf, 0x80f3f1b7, 0x485bd62f, 0x7e3eef9f, - 0x400f37f5, 0x1d71e73d, 0x0e047f1d, 0x4ab673a6, 0x03b145de, 0xe8590e3a, - 0xb32f703c, 0x7754d1b8, 0xf8790d8b, 0x21fbec02, 0xe8d983c4, 0xe2281fcb, - 0x77aec439, 0xf1eca38a, 0xccbfd6de, 0xe48ae439, 0x7d0e9a97, 0xdf6d185e, - 0x14a9f929, 0x3996f7d1, 0x963fdfca, 0x77cb9677, 0x055fb9cd, 0x9c5e309e, - 0x5da27f1c, 0x2375f04f, 0x48bf687c, 0x10fb861e, 0xe3d648f8, 0xfb94de32, - 0x0adbba0f, 0xbe80fa4e, 0x98393c5e, 0x7b5be1c7, 0xef7768cd, 0x214ef932, - 0xf4b7899d, 0xf6a9f9d0, 0xe811deb6, 0xf9fc834f, 0x1ef79f08, 0x9d149b3f, - 0xeb12feff, 0x3f5a24fb, 0x729f5bc4, 0x1f4b5e3e, 0xda167dda, 0x184dfe0e, - 0x50c07c4b, 0xb086054e, 0xf567fa20, 0x17adc663, 0x31672371, 0x341dc517, - 0x999fb479, 0x8e65ffbc, 0x4c679fe2, 0xde21bfde, 0x4efc1e71, 0x05f9d603, - 0x989ec7d6, 0xdb478f9f, 0xf53ac2be, 0x18fb9896, 0x215afda2, 0xe60567af, - 0x537cf0fd, 0x3852e18b, 0xef231ddf, 0x8091fb07, 0xdd4a05e3, 0x9fb87d27, - 0x6bdcd81f, 0x4efa1f11, 0x0091da27, 0xb3b6227f, 0x97ba4aa2, 0x50f060c7, - 0x3ad5f47e, 0x5bbd7e7e, 0x1e31b8b0, 0x6491dcd6, 0x33f87941, 0xfb1d2f93, - 0x9d5dd48f, 0x09fa7183, 0x3cdd5e9d, 0x41be53d2, 0xe753b216, 0x8e09eaf7, - 0xdfda315a, 0xcfeb12fe, 0xe7dcc4b1, 0xc790fb3e, 0xa1f7c5d7, 0xf462e7df, - 0x3e9c7bfc, 0x45d651f9, 0xfb83f6f1, 0x3cc5c93e, 0x4f81f552, 0x7ead3fc8, - 0x5b9b48c3, 0x0488c6f6, 0x252be3a4, 0x4b89edb1, 0x1eb75afe, 0x967199ec, - 0xcb9b922c, 0x23dd2759, 0x61e9a2b0, 0x5e4a3eb7, 0x71d3f62a, 0x8e056743, - 0x6440bc7f, 0xbd774075, 0x580389ee, 0x94ac390c, 0x097b45bf, 0xfd1f7f60, - 0x9f9bd4d2, 0x9de6d283, 0x338fb4fb, 0x42a11c53, 0xb3cc8763, 0x88f73d70, - 0x8fbc325c, 0xbcbce005, 0xe0e74ed7, 0xcf7f8f2e, 0x5c4b1f81, 0x7e5df96e, - 0xb0ffcf00, 0xbf3047ce, 0x8d8bf816, 0x718aa8fc, 0xd9d7e5ef, 0x3b76fc23, - 0xdbb0418f, 0x70e13f5f, 0xe68aff41, 0x144094f6, 0xa1e7b4fe, 0xc7d7911e, - 0x6e745df4, 0x98bfed84, 0x563ef786, 0x829c3bec, 0xec37fdeb, 0xaedfc318, - 0xf44d5d58, 0x9f22d533, 0x1960caa3, 0x8bfa0f28, 0x0573ed07, 0x5dc7c70f, - 0xf77a821c, 0xd23b1c4a, 0x75ebf72f, 0xf6801a4f, 0xca14854d, 0x55bf1589, - 0xbc2d2bfc, 0x3b373b37, 0x58f7e243, 0xb6af9f6a, 0xebdf3d70, 0xf000b336, - 0x068d23e9, 0xc4eeaefa, 0xcacc3fb5, 0x64f8fd87, 0x06b9c1ab, 0x85eaadf8, - 0x309bc1f6, 0x48ce395e, 0x5c4f97f1, 0xcba41ca1, 0xf3f02fc5, 0x7d6c9fb8, - 0xc8f30d24, 0xb5f409ff, 0xdc58e01c, 0x55e7a068, 0xe7a7df8d, 0x5bba6517, - 0xe52a42fc, 0x3c744f97, 0xaceb869d, 0xdf93fbfa, 0x966ffe41, 0x41c6a39c, - 0xa0977cb9, 0x74b7773a, 0x575559bb, 0xbacad2f2, 0x8f391099, 0x7e7802e7, - 0xe79af969, 0x89f57780, 0xc2d2fe5b, 0xdd6f8bed, 0x2eaeeb07, 0xaefb25e8, - 0x8c8588fd, 0x44db5fa8, 0x71a1dfd2, 0xadd6f5ff, 0x77f29f50, 0xd31f9bbd, - 0xb239274d, 0xece5c4c8, 0x70fa7d94, 0xff719cbe, 0x615776dd, 0x08797cfc, - 0xdbd200e4, 0xe18a9f94, 0x79f479bc, 0x5cde6d54, 0xf36b8fc9, 0x029c78e6, - 0xf2cdf1e5, 0x1c3f0ae6, 0x49cf84b3, 0x1fb7dd12, 0x45f279e1, 0x2f6e45c7, - 0xfc4e44dd, 0xe3d6e116, 0x107b1efe, 0x6427dde3, 0xf6b89c6c, 0xafbc3ac9, - 0x012293e1, 0x93ec2033, 0x58f2c66b, 0x2287707c, 0x659cf02f, 0xef5f645e, - 0xd7092f71, 0x5dbe0d91, 0x1ceab0f4, 0xd5e5ff68, 0x49f0f98d, 0x419eff0b, - 0xfcb4cf2b, 0x67928ff2, 0x0f0ee315, 0x7ca9d809, 0xcd4bcb19, 0xe568ae5c, - 0x14a7581b, 0xe4e55a87, 0xa5c0a2f4, 0x5fc57785, 0x3f3058b3, 0xf5177e1a, - 0x94efa15b, 0xf8acbe50, 0x260b2e6b, 0x50fea37f, 0x3f8635b2, 0xf095fa04, - 0x07d42815, 0xfd408fd1, 0xdb46fd8f, 0x0025c95c, 0x96673ad2, 0x2772e515, - 0x416b7fe8, 0x6a313e24, 0xe50e8357, 0x376fd845, 0xc577fda8, 0x72b2c95f, - 0x795a31ba, 0xddfc98fd, 0x5df3bc4f, 0x3c4af8ca, 0xf184bea4, 0xb91273ef, - 0x839ca6fd, 0x3967eb5c, 0x933e3df8, 0xd26bc3bf, 0xc8f0eff1, 0xfcf5c4a7, - 0x83fdc8d8, 0x5c5574bc, 0x29bf09f0, 0x792def07, 0xf7a4efd2, 0x53a7f29f, - 0x8bbf23f9, 0x79fc67ca, 0x135efc39, 0xc7c8fe46, 0xd18d2c87, 0xe49b04e7, - 0xb093cdbc, 0xd062d7de, 0xe55623e1, 0xf497a03c, 0xd8d2c2db, 0x567bfdf2, - 0xe4a5e13d, 0xa087fbf9, 0xc1f1f1dd, 0x097dd1ef, 0x83e26b1f, 0x6e6f250b, - 0x13f37d2c, 0xc9379f99, 0x32c7e5fa, 0xfd900d7f, 0x9e729047, 0x4f78d1e6, - 0xff773f30, 0xc31dfcac, 0xa9abfd4f, 0xf3cad3bc, 0x8ff76923, 0xf0073b7f, - 0x3f036e75, 0xa4ce749f, 0x6cf3bf23, 0x85bcadad, 0xfd8ef0e0, 0xde76511f, - 0xf1dc329d, 0xfd6355d6, 0x057e726a, 0xdea072eb, 0x876fd30a, 0x5c3e1e3a, - 0xfa432df4, 0x695d66eb, 0xe846afd8, 0x2315ddcc, 0x79209b8f, 0xff84ac6b, - 0x5f28219e, 0xed02fd95, 0xfefa2a31, 0xe72b228c, 0x7ce38fcb, 0xa65ab6ff, - 0xcf25dbdb, 0xfa9e3e6a, 0x195fc37e, 0xf2b43f3d, 0xb4ffe678, 0x8c02f9ca, - 0xce4894df, 0xdb9d7c70, 0xd635dedb, 0x78997118, 0x8e16bf7e, 0x9e9c6c5b, - 0xa500f1b4, 0xcf01e254, 0x65044da0, 0x7049d5a6, 0x1803e36b, 0x07158d27, - 0x8f2b4ff8, 0x3c7ba61f, 0x9f15d5a2, 0xcef8272f, 0x6c9b7dd0, 0x7bf3a336, - 0x0e9b8a03, 0x60643c62, 0xd90eb059, 0xcb513ea5, 0xc63301a7, 0xba7cb249, - 0xa4dbcc34, 0xa33f0275, 0x6a9781bd, 0xd69d22a5, 0x4f5d21d6, 0xf168e9f0, - 0x412c3a13, 0x54e67141, 0x660266e7, 0x0bfeef39, 0xda82f3c2, 0x1db718b5, - 0x797fbcb4, 0x9f7936f7, 0x84d9bc95, 0xc3c206ed, 0xa63fed84, 0xed84d6fc, - 0x2885eb77, 0x35693efe, 0x878bff50, 0xff250e97, 0xaa39ce38, 0x26dc794e, - 0xfc417bc4, 0xadc710f3, 0x8879f8df, 0xb8a8d6e3, 0xab8af54a, 0x5a77c724, - 0x39f8feb9, 0x9f0169e6, 0xe4a05f3f, 0xfe291b69, 0x9a6a5bb6, 0x40887986, - 0x43ce8eb5, 0x0bdcf386, 0xf08f79f8, 0x86ef98fb, 0xe2af3fe7, 0xc181eef9, - 0xf6df2967, 0x03e79999, 0x6461db3f, 0xf25d2798, 0xefe51376, 0xb1d72cb6, - 0xc364f758, 0x9cf9064c, 0xefcf018e, 0x7ca3fee0, 0x081df653, 0x08fdc24b, - 0xf9b5c3e7, 0x8bae193f, 0xe9723e72, 0x4869e6ce, 0x93cb1927, 0x563fbc04, - 0xeaebeb81, 0xbf506f91, 0xe5f7975e, 0x6f55fa66, 0xb55fa18b, 0xe0d3b57a, - 0x6f52da31, 0x641b5fae, 0x2ab5eafa, 0x78e406e7, 0x6247e637, 0xd633cbec, - 0x34ce713e, 0x738857db, 0x3149adfa, 0xf7ca9ce3, 0x6c490d9e, 0xfc18ccee, - 0x37cc98f0, 0x743dcdba, 0x4da5230e, 0x4a972988, 0x17c94924, 0xc545b08d, - 0x35f2b5c7, 0xd8dd7e06, 0xd0aec47f, 0x3e35ec21, 0x668ac731, 0x9c73e000, - 0xf2719f0a, 0x9533bf0c, 0xe4a27d90, 0xd49a2e15, 0x6c77dbf6, 0x6dcf3f4a, - 0xc4b78fb8, 0x6c53db91, 0x297f0282, 0xc5594bf6, 0x2572f154, 0x1b529e4e, - 0xaffbf010, 0x3f230f14, 0xafb26862, 0x7afd00ce, 0x36f73126, 0xe83c27a8, - 0x9779412c, 0x883ee554, 0xcbfadda1, 0x0fcaf7f2, 0x395efa33, 0x65f5ef9c, - 0x7883bd91, 0x4f0efe8f, 0xfaca0fd1, 0x6bdd6f40, 0xb2cd70e3, 0x7d6f40dd, - 0xcf317c83, 0x58be3fd6, 0xf769708c, 0x81ef1b2d, 0x7fd98d4a, 0xb0feac45, - 0xd9fdd5cf, 0xbc720de7, 0xa4f9bfbf, 0xf5f0bd46, 0xf17de5e2, 0xbc2c44f2, - 0xe5d0a86c, 0x009479e1, 0xe963b8b3, 0x7fb62d9d, 0x8b7edc78, 0x9edc462d, - 0xfebf24dd, 0x49773fe2, 0xe2560f18, 0x507b61cf, 0x9e575793, 0xf909b757, - 0xb49597e8, 0xb7fb235f, 0x64e7e0fb, 0x8fcdf6ff, 0x025779f3, 0xdc7f2279, - 0xbf6f9f25, 0xf7fb95ba, 0xa4fd7322, 0x39a8e018, 0x6841606a, 0x606f8abf, - 0x882116fb, 0x3d5f0bf7, 0x8bea853a, 0x192c09f7, 0xe9e02409, 0x160cefc4, - 0x425e3e30, 0x8f754e91, 0x7d47a275, 0x7972784f, 0xea9eaa92, 0x3e13df55, - 0xaa967660, 0xa46fa07d, 0xd5507daa, 0x96fd5578, 0xe13df55a, 0x457f4143, - 0xd30333d7, 0xd7b3fd55, 0x0faaabdf, 0x13df506b, 0xcbadf8ae, 0xdf0cf5e4, - 0x2f7d4f32, 0x61084877, 0xbca163be, 0x38e40bdd, 0x52e088c5, 0xc4cb38d5, - 0xbbf0470d, 0x57de9b8a, 0x7448dad4, 0x68afbdaa, 0x7d754ed9, 0x46fb89ec, - 0x5e0cf3f1, 0xc675373a, 0xdc5f8ea6, 0xc3035f74, 0x1abed6bf, 0x6afbd5d3, - 0x886e5976, 0x7a9e6b37, 0x6f7c999f, 0x766f168c, 0xbfff7ab7, 0xed19bc69, - 0x0c193c6a, 0xe31d8b3e, 0x44abad80, 0x5cb2defa, 0x4bee4e7d, 0xed93ddc4, - 0xcaeee231, 0xcf376abd, 0x0dffb4a7, 0xd04664f3, 0x173c0634, 0x8536e455, - 0x48e627f3, 0xaf2b5d9c, 0x75e41294, 0x2af29d8e, 0x5ad3bc91, 0xff21df86, - 0x2b708bde, 0xf7588979, 0x05ce6880, 0xbe71c68e, 0x4d0afdea, 0xd240e7f8, - 0xae76f983, 0x51ec0b07, 0x8739507a, 0x78c1e8a2, 0x897928e3, 0x4870a578, - 0x0f44b8a4, 0xc86257e6, 0xbfdb6ff1, 0x7be93ea6, 0xf6dbf38e, 0xe0bf2882, - 0x5047bdfb, 0xefde039e, 0xedd9f5c5, 0x888527a0, 0xd589fc9e, 0xf3d3fc41, - 0x3c38311b, 0x48be7233, 0xe1689fc9, 0x0f7cd62d, 0x87b9a6d9, 0xb73c7eb4, - 0xb9dae63b, 0xdf2c3d5e, 0xd7235143, 0x7a76346b, 0x8fee7acd, 0x6d15bde2, - 0x8d5ff651, 0xe7fd4edd, 0x106a4be8, 0xf70b46ee, 0x8105eaab, 0xa67d78f4, - 0x6e3ef340, 0x71f6a52a, 0x5c6a92f6, 0xacb930f7, 0x2a5e58c1, 0xed443bdd, - 0x5efb1892, 0x6e765582, 0x7896cf2f, 0xddfd2fff, 0x0ee60ad4, 0x9bbe44a5, - 0xd3be7162, 0x3d83c6d7, 0x140ece79, 0x3bf55f8b, 0x9a1fc42a, 0x3f1d0ade, - 0x43e70f63, 0xfaf9fbe8, 0x66e7aecc, 0x109ebee0, 0xdb1e78dd, 0x1d602a75, - 0x57c7829b, 0xa02256f1, 0x8d6cad93, 0x038bea19, 0x18f78a2e, 0x8fb25fc0, - 0xcbddf08f, 0xc7c24cf6, 0xd3219398, 0x789f6858, 0xe3107bca, 0x58b3b9c3, - 0x06ed8a12, 0x7f0530d6, 0x55b0291f, 0x5ab31bce, 0x19abfdfa, 0xe8a52b25, - 0x5ba94073, 0xe2f3a61f, 0xf87579ca, 0x28fc4167, 0x9e47dff7, 0x4338f3f3, - 0xe32f654d, 0x98e5297e, 0xc578ec60, 0xccbbf96c, 0x5ddef587, 0x5a63dfb8, - 0xbddee8ba, 0x5b1c8ac5, 0x9defa3a0, 0xe1f793ef, 0x0f3cadbe, 0xbf5daecc, - 0xce46162e, 0x0cf8c1fd, 0x2cf173f9, 0xb3bbdd3b, 0xbe932db8, 0x815e668b, - 0x6d351be2, 0xbf497b6f, 0x44e0984c, 0x01f3d37f, 0x4b7ef013, 0x039701c4, - 0x952efbea, 0x95efd37b, 0xa77ca7d7, 0x8372f20a, 0x78bbf015, 0x81a1dd6b, - 0x2f7bde30, 0xa18fba31, 0xf240acf0, 0x37168981, 0xcb85edda, 0x05cfba04, - 0xbdd1f40f, 0x6d862314, 0x7e3b8e8b, 0xb78bcb2a, 0xe5a078fe, 0x9c297404, - 0x2a48f952, 0xfda768ec, 0x5dfc54c2, 0x95fdc2a8, 0xa338648f, 0x7b2a9bea, - 0xde11bb07, 0x80cb530b, 0xe760fe4e, 0x85d74cf0, 0xd9bbfcf4, 0x543fca4e, - 0xd20f24d8, 0x9d2d8569, 0x80ae37ee, 0xf400bdad, 0xdfa3fd35, 0x9f2e51eb, - 0x05f7cbb2, 0x5c5cb2e4, 0x77c3b267, 0x2accf89e, 0xaf10339f, 0x0fb68d8d, - 0xe539f4a3, 0xacdbba47, 0xf9586994, 0x3fe53666, 0xfbb4f795, 0xdf9f9cfa, - 0xf0ec9873, 0x57fdc79c, 0xfade81fa, 0x93ddeb1c, 0x1db97f3f, 0xfc52bdc6, - 0x17082197, 0x677e8fe0, 0x4ebfb941, 0x296dc719, 0x3f2762b9, 0x3f717986, - 0xf9e3936e, 0xbb6d9d93, 0xebb7dd71, 0x0e516b42, 0xa9fef9be, 0x28671c64, - 0x3eb8e078, 0xf5d573f8, 0x4570bee4, 0xbf7abee4, 0xf9f0a70b, 0xef2bbf0b, - 0x8bc79b9b, 0x500df7bb, 0x0eed8bc5, 0xbfb86fbe, 0xc0937fd4, 0xcfd9f1ef, - 0x937c564b, 0x9055fef7, 0x05824f7f, 0xe577e844, 0xc00fde4d, 0x66a87f21, - 0x13a270ff, 0xb3cb839f, 0x51e7acc9, 0xb6e4e75c, 0x87efa77f, 0xf2792b27, - 0xb93cea0b, 0xe2a59f0f, 0xf43d23b5, 0xb5f7701d, 0x63796fde, 0x43a95bf0, - 0xfbf0fbc9, 0x837ec3f0, 0xf87e1f7c, 0xec5342bc, 0x7197f0fb, 0x89f120ca, - 0xc52f0fdf, 0xe12fe03a, 0xe907f9ef, 0xc166c1fc, 0xb04c798d, 0xcfef5483, - 0x87ded3c8, 0xf17fefcf, 0xe3df93c9, 0xc91f33ee, 0x1e194adf, 0x5dff1b5f, - 0xcf3c0e82, 0xdeea7803, 0x51377fc0, 0x777fcf7b, 0x05b7e739, 0x4ba085eb, - 0x553bfba0, 0xd6650bed, 0x6776085e, 0x3cec9328, 0x3dc477cd, 0x5c5f6c5e, - 0x041befcc, 0xded34fbb, 0x754fe0a0, 0xf961ec4f, 0xfe1671f7, 0xf237d658, - 0x64f32fbd, 0x590f31f8, 0xaf591692, 0xf9147fa2, 0xe16050b9, 0x1abee9f7, - 0xed463ef9, 0xbb95e7fa, 0x36f3cf09, 0x761c6e08, 0xd067aff1, 0x078053f7, - 0x2f995e95, 0x837e73af, 0x6ff3e740, 0xb2a98f76, 0xeeb845ee, 0xaef6becc, - 0x50587ef6, 0x5f842e6f, 0xc6b1f990, 0x49afe1c8, 0x885f7466, 0xba25ec90, - 0x125dc780, 0xf83b0f94, 0x0de10b39, 0xe627c923, 0xf2937b05, 0xe44e6574, - 0x85058143, 0xcffaa3eb, 0x30fbe1af, 0xf842e7c2, 0x12c98efb, 0xc74cdbf9, - 0xca3b6dfd, 0xd223d01d, 0x4e10dac9, 0xf2b126b7, 0x67bc0731, 0x20f06aea, - 0x342e58cb, 0x2cdcb085, 0x3e7bbbc7, 0xaffc1134, 0x846cbe0b, 0x2a18a27f, - 0xe79af927, 0xee93341b, 0xcaf9e3af, 0x167f328d, 0xaefa06b1, 0xa26b3260, - 0x527598b2, 0xa1eb0779, 0xac5f83d2, 0xe03da364, 0x798cb2a6, 0x6aca9ca9, - 0x0d672ca9, 0x712b7e54, 0xc002625e, 0x51359d35, 0x39e402bd, 0x32890bdd, - 0xf74de319, 0xeecec89a, 0xac1cd37e, 0x0e6af800, 0x38bcb918, 0x577d2560, - 0x08466073, 0x1fddf9e3, 0x7bf85cd9, 0xa7b176a0, 0xbf48e29a, 0xf7f93ab6, - 0xbdd52e34, 0x2bb935dc, 0x78e3f77b, 0x7c7f421f, 0xbaad9e90, 0xafe27ba7, - 0x7a8f907f, 0xe1ade260, 0xe81cf27b, 0xcb6d5fcf, 0xcafe3f26, 0x9446dd40, - 0x5219d5d3, 0x7ab7e23d, 0x95ee8598, 0x05d3cee9, 0x415b2824, 0xe9fde3fe, - 0x05efe06f, 0xff26d940, 0xf901c05e, 0xde10f57e, 0xdab60eaf, 0x951e7f21, - 0x95377e1d, 0x5445fc47, 0xa87bf51e, 0x397f31df, 0x5efdc795, 0x9d1eaf2a, - 0x77c7df4f, 0x839e9fa7, 0xc87427bf, 0x19a4f951, 0xb28fe1f4, 0x44fc2e7c, - 0xfdf4eb08, 0x45aec0c8, 0xd508fdf8, 0xd7d67f41, 0xd19dd2f9, 0x555352ed, - 0x92ea1db8, 0x7008fdfc, 0x629e93d2, 0xea4527a8, 0x118dfdf8, 0xbc199ce3, - 0x57f3065e, 0xfb5220bf, 0x303f7811, 0xc72bd618, 0x2e094ca3, 0x03461f2e, - 0x74e18cbd, 0x7c65df83, 0xea99d5d8, 0x69762310, 0x4e5c13e5, 0xedc0be54, - 0xec67cace, 0x9eeef7f2, 0xef0d2132, 0x89cb511d, 0xf94c45f9, 0xbded13fd, - 0xea2c45a5, 0x83b9983e, 0xe60f2475, 0xd3f756ae, 0x4ce807ca, 0x95aad3bf, - 0x643a1f0b, 0x8d9733fb, 0x97faefc1, 0x1d93b1cf, 0xa76ec976, 0x763f7a73, - 0x0164a475, 0x44fbd5bc, 0x0ab413ca, 0xb5b07640, 0xeab8de7f, 0xced0136e, - 0xd7a7159d, 0xbeb1b8a6, 0xaefc49fa, 0x4ff352e2, 0x233aa4a7, 0xf4ec59f5, - 0xdda007c6, 0xddf56eb9, 0x2ffac0f7, 0xb8c0bd23, 0xfc0d5b97, 0x12939b1e, - 0xded32efd, 0x0b21af4c, 0x763f7bea, 0xa6ff3c33, 0x99bbf5e0, 0xbddbfbfc, - 0x2b41be99, 0xa7deab47, 0x1afd61df, 0x6bf133ef, 0x00dc2fbe, 0x8a7bed7e, - 0x7efbdb5c, 0xa77f0dee, 0x6dead976, 0xcea27243, 0x37d32c15, 0x658279d1, - 0x921e5fab, 0xa5cdf603, 0xe88d96e2, 0x7835ef77, 0xf942ef12, 0x71e06cd5, - 0xec904366, 0x89af4f80, 0x02466f34, 0x0609fbd7, 0x7c249f6e, 0x3d446a68, - 0x1382f603, 0x6bdcafbf, 0xa439f0e6, 0xc112572e, 0xc2c3ebc9, 0x86f1f1ef, - 0xf7b97025, 0xb25eb5e9, 0xd76e7ba7, 0x8082efd3, 0xc4faa07c, 0x6884523b, - 0x226f67bb, 0x8af3de7f, 0xcc52fd48, 0xf1e8c49e, 0x2f1debb5, 0xdcd7b7cf, - 0xc53f1aa3, 0xd653dfc0, 0xe36f9da3, 0x9de51324, 0x496e289e, 0xb2ebfcc3, - 0x207bfe12, 0x8abc3245, 0xa3f1357d, 0xe1a3dba9, 0xeeff289b, 0x26e4ceb0, - 0x557079fa, 0x7dfa38e2, 0xe297a742, 0xe71e73fb, 0x38f269f5, 0xe08e4520, - 0xdcb9e772, 0xf20cd153, 0x28657c39, 0x79e417b7, 0x8afd608f, 0xf510a7a1, - 0x24aab886, 0x33de0030, 0x9f495e3c, 0xd5d719f7, 0x6f34b005, 0xe1036468, - 0xcdcdc2f9, 0xa13df70c, 0x8a176cf9, 0xefe69499, 0xaf6d7c53, 0xd813a641, - 0xfe51998f, 0xa96736d7, 0xd7e60137, 0x391db939, 0x4245ac7d, 0x467a607b, - 0xf5f9d906, 0xcc1cc1a5, 0x308cf70f, 0x3a627c53, 0x9f80258c, 0xc5886c72, - 0xd412fe83, 0xcf58893d, 0xa7fd4c98, 0x86591d8f, 0xc658f87a, 0xb78c74f7, - 0x9e2bc7af, 0x5fc0658e, 0xc21fda0e, 0x8969cf57, 0x963eafbe, 0xf92a74b1, - 0xbd382315, 0x6c78cb1f, 0xd22bf62a, 0xc2cbee05, 0xf289a176, 0x70278fae, - 0x0c5d3f3d, 0x09efc71d, 0xcef819ef, 0x566ff471, 0xc77ec826, 0x622b9018, - 0x5c981fc4, 0x9f8edcd4, 0xde7b15cb, 0xeaea829e, 0xb73ff28e, 0x26f1e963, - 0x2f7aa196, 0x03ae3d9d, 0xccdf32cb, 0xe8731032, 0xf88e3caf, 0x70f55a9e, - 0x01ffd607, 0x88e3cafe, 0x55c992e7, 0x9f37fbf4, 0xa3e5dfdd, 0x7024e93c, - 0x7dc463d4, 0x4b09f622, 0x781af7e2, 0x485f5092, 0xdf7db86b, 0x7b244fb3, - 0x39751582, 0xea6e5c74, 0x33aafe90, 0x9e90d2bb, 0x38f207eb, 0x976715cb, - 0xfdf2ea83, 0xf322ff02, 0x57624541, 0xc561d21a, 0x9e0261be, 0xe1e2bd3b, - 0x56a04a76, 0x3061e7e4, 0xff2694cb, 0xd51678ee, 0x93fceec9, 0xfcf5ebc0, - 0xf3d676ee, 0x23ed237d, 0x2f10cf8c, 0xe30f0f3d, 0xeabe0170, 0xb92f5ef1, - 0xb983c33f, 0x52abf748, 0x87f21ee9, 0xfc24a72c, 0xe3302469, 0xae3e50d2, - 0xe276ca68, 0xef06cdf3, 0x15f71a4c, 0x96e389c1, 0x3c966cef, 0x2a4fd236, - 0x90f41e3b, 0x7ba7eed6, 0x3e32e687, 0xd126dcdf, 0x9aba0663, 0x03fcd2db, - 0xeecd2e81, 0x8ff7c832, 0x4d6bdea9, 0xfa9f74e0, 0x4fba66cb, 0x87ce1976, - 0xee81ab65, 0xab365d95, 0xf1443245, 0x3dd6b2cb, 0x577cafd4, 0xcbc5e533, - 0x2f64ecf3, 0xeb0d634f, 0xdf2d5f28, 0x53e3e457, 0xc9add3b0, 0x65003fcf, - 0xbe399fc5, 0x3efc53d8, 0x0f83f9b5, 0xbb2f91d9, 0xfc53960a, 0x942143e7, - 0xf8bd001a, 0x0ee76650, 0xc92e1ff4, 0x0fd68ef6, 0x0b1dfad1, 0xa2a7335c, - 0xdfd7d149, 0x38e8b660, 0xb03f168a, 0xdef11b1d, 0xa24d45a3, 0xd131ef13, - 0xfe0a23fa, 0x953f78b4, 0xc7db2290, 0x3f706320, 0x20eca69b, 0xfa71933f, - 0xd6017b20, 0x987dc971, 0xd39ab3ee, 0x6279efc4, 0x8a14a13d, 0xb3f06b03, - 0x8cda1f41, 0xd60549f7, 0x02fee819, 0x5c02fe1f, 0x8dfdac52, 0xec4a27ba, - 0xeb2d3f5b, 0x5bcf3ecb, 0x7a775fb9, 0x1b9f28bd, 0xdbcfb751, 0xb3247f97, - 0x26fbe31f, 0xeed27df0, 0xcfd002c7, 0xdf8217e4, 0xafa97287, 0xdfa5e85f, - 0xfed9b883, 0xdffff828, 0xc7a90a29, 0x00008000, 0x00088b1f, 0x00000000, - 0x7dedff00, 0xc554780b, 0x3d9cf0d9, 0xcd8dcd7b, 0x09c246fd, 0xb8094404, - 0x9fb1dc24, 0x4a34021b, 0x414045d0, 0x2dc8d812, 0x088d9242, 0x59b6b696, - 0x5a4062e4, 0x7da5aac1, 0x2c142ea8, 0x11a0d05a, 0x86ec5d43, 0xba8b4508, - 0x8ad45cb1, 0x14178026, 0xb16d0042, 0xfbdfad1f, 0xbb2733be, 0x6a2364e7, - 0xffefefd5, 0x27a3cbff, 0x9cccce73, 0x997ef799, 0x6318c399, 0xb17fc39f, - 0x50dff876, 0x261d8ac6, 0xd8c21b27, 0x4fab569c, 0x8a6c61c9, 0xef74676b, - 0xa79cc624, 0x18564c0d, 0xedfd2e6b, 0xd543262f, 0x8ad79b24, 0xcb7693f7, - 0xcd942f0e, 0x3b58eef1, 0xdaf4b7b4, 0xd5f6c468, 0x512c490f, 0x6724ac62, - 0x618b126f, 0x9b0e576c, 0x7783cae5, 0xd0daefe1, 0x950ed135, 0x6cdb1992, - 0xfb622577, 0x1b32dee7, 0x1ec60f58, 0x87f5e78c, 0xe3db99bd, 0xfd5098b6, - 0x687f5841, 0xd5b23ca8, 0x467f58c0, 0xe8c79c3f, 0xb318a30f, 0xebdfca86, - 0xaf94d048, 0xa9a198bd, 0x68fac85f, 0x0759179e, 0xb38f9e68, 0xdfca6817, - 0xa9ad1b4f, 0xa4529d7f, 0x3fe84f29, 0xa27f5341, 0xbca6b263, 0xeb8ac8d6, - 0x63675e61, 0x8f4b5e8c, 0xd8463cd0, 0xb787040d, 0x478702d3, 0x683b584b, - 0x8576c572, 0xa98d5957, 0x7dec35a3, 0x9c38da0f, 0x819c5d58, 0x4eec630d, - 0xffa899f5, 0x58df0143, 0x7be0d599, 0xdd46a303, 0xb5bc046f, 0x160d941f, - 0x42f32fc0, 0xcec614bb, 0x1a17768b, 0xbe207a0b, 0x7f7e01d8, 0xdfdf8d91, - 0xded1f025, 0xc335e0df, 0x816b5bb8, 0xde85fa26, 0x660c56e3, 0xdd7e1843, - 0x8259b28d, 0x730370f2, 0x17dd7be3, 0x1059cccd, 0x5163071a, 0xde76bdfc, - 0xe64e3abf, 0x8defe68c, 0xaedff7e7, 0xec62e245, 0x5d2b5a9d, 0x82cf0e7f, - 0xc0633e38, 0x691fa0cc, 0x34f8cc74, 0x06f6b7a0, 0xfa016ec9, 0x366c6cac, - 0xed17f8e3, 0x316549cc, 0x5ea7e15d, 0x31a6d78f, 0x5aabfa05, 0xd52ab2dc, - 0x1f6ef401, 0x682bf752, 0xe303555f, 0xb1a91200, 0x965bab0f, 0xbb62d8cb, - 0x6716f442, 0x7f43f981, 0xbff4feef, 0xf0073ccf, 0xd4b3fe3b, 0xfd07e47c, - 0xffb559f3, 0x17e8f4fc, 0x27f77f3c, 0x83f63f7f, 0xd3ff6a2f, 0x65fbdecf, - 0xc6eef3d8, 0x932ebb3f, 0x30746129, 0xace1cccc, 0xe90cb7af, 0x3b3ffa0a, - 0x358f1fea, 0xb2497f43, 0xe01d997b, 0x27cd7edc, 0xc51e0cd9, 0xcc34bf0e, - 0x37e2131d, 0x095ffb7d, 0xb1bc037e, 0xfb338018, 0x15b7cd81, 0x0ddf06e9, - 0x924b63e5, 0x5e906b7d, 0x669ac15d, 0x95b1f718, 0xe06b1c7d, 0x0ec7e53d, - 0x86f7338e, 0x2f3cb1f2, 0x24cbfbc3, 0x2cfb8307, 0x3a446acd, 0x5703899d, - 0x2b2ef868, 0xd31674e0, 0xf9d02dd2, 0x7c61adfb, 0xb6a96b33, 0x96d5ee5c, - 0x61fce387, 0xd899cf1e, 0xbc30fab4, 0xeffcc4fb, 0x047c2f89, 0xce3b8be5, - 0x5376e54e, 0xfac85dc7, 0xbfb4f58c, 0x81fa2d1f, 0x32008e39, 0xb7b2f1c5, - 0x9fcf34ac, 0xf89183e1, 0xf2266f3f, 0x4f82dbe3, 0xd6c4c4cf, 0x6707c049, - 0x6f070e14, 0xd2e1cc8d, 0xed056013, 0x6e2777ab, 0xdfc0b822, 0xb3ee5451, - 0xa4c7cb19, 0xde17b240, 0xfb07265b, 0x28cffbe2, 0x1d630fad, 0x4668e2ef, - 0x53b491ed, 0x10fa7c04, 0x30f3148c, 0xe7801f01, 0x69d946cc, 0xf1f0441b, - 0x29a3e0ea, 0xa8d0fe8f, 0x43af7f29, 0xa2f6be5b, 0xb4c85cb6, 0xdaac8bed, - 0x8e02cbf2, 0xfbdaece3, 0x96d34fdf, 0x1e3a55df, 0x1d8bf2e2, 0xf3c30dca, - 0x259521cc, 0xcfe00e2c, 0x179c66ec, 0xb864f78c, 0xc11e2b1c, 0x3adb78e1, - 0x21cbe7c9, 0x5f9e6afc, 0xecab1cc7, 0xdaf74879, 0x418bf0fb, 0xe82b9a7a, - 0xed3aee67, 0x19dfebf3, 0xbc019e35, 0xe325d84e, 0x207f78fb, 0x4e78881b, - 0x419f738c, 0xc744f03e, 0xc37d420d, 0x46b9ede4, 0xabd9ff78, 0xe3990e6c, - 0x3b21cb81, 0x3938ff1f, 0xe7c011c6, 0x058768fe, 0xd3da2d6e, 0x8fe51527, - 0x37cf5eda, 0x52dc800f, 0x9c7be1fa, 0x99af4867, 0x25d20559, 0x28fa021b, - 0xe4c2c81d, 0xf6878f8c, 0xceb71dcf, 0x3be04772, 0xef955ce0, 0x77c8259c, - 0x35f4e63f, 0x1ec8cda6, 0x352c71c7, 0x9c20b26d, 0x8fc427eb, 0xb999fa03, - 0x5b9df38c, 0x3064ac0a, 0x647b99bf, 0x25cce782, 0x44498f92, 0xf435e72f, - 0xbea0f022, 0x5e71f00f, 0x329a5fc7, 0xfdd12850, 0xecc62683, 0x678ebef0, - 0x1466df25, 0x648d53d9, 0xbb6d542f, 0x337047c2, 0xef1117b2, 0x2a8f816e, - 0xa81e2323, 0x0658fe04, 0x4bd4e7f5, 0x178fae34, 0xa8067c5b, 0x261db55f, - 0xae3fcf08, 0x2824f931, 0x3328dc7f, 0xbeb10fce, 0x7db550be, 0x7c2f2f3b, - 0xf82d96fc, 0xff3c5dbc, 0x2db8fb78, 0xa2b5bef8, 0x9062ef7f, 0x6ddf504b, - 0x3e6b5664, 0x0259b75c, 0x63b7a076, 0x4757f651, 0xe8ed3d21, 0x3e0cf0f3, - 0xc618c524, 0xab59c74f, 0x85d0e109, 0x9f03b69f, 0x2be575c5, 0xa0f1d237, - 0x50b9f4ae, 0x839039aa, 0x9267e372, 0x95d2ab63, 0xa974f54e, 0xc17cedd2, - 0xd9b3d01f, 0x1bca1035, 0x1d38f5f4, 0x1fd635ac, 0xb9e715b9, 0x3bfea642, - 0xb71009e7, 0xdc2d4902, 0x28c8f7d1, 0xdabe5e78, 0x32efe884, 0x33f3aecf, - 0x6ce6fcd1, 0x673274e7, 0xa453e4a9, 0xcfd5f3ae, 0x98bccbb3, 0xa63d956b, - 0xcebafceb, 0x218fd383, 0xf1104876, 0xa2d1be75, 0x9dd1fda0, 0xab5d3b7e, - 0xff411b64, 0x675adbb6, 0x238c0732, 0x2575bb7e, 0x907688c8, 0x179fa8c1, - 0xec5ddfac, 0x2d39be05, 0x4a6f7971, 0xf95874e6, 0x5926ea74, 0x6953f50a, - 0x4073f40e, 0x15e3bbbd, 0x81a56382, 0xc1fa09eb, 0x4e0f4e38, 0xc606bcd8, - 0x856de601, 0x32679fa6, 0xe361c937, 0x8604b4ab, 0x3b41fa69, 0x7c9fbc26, - 0x1c19cfde, 0x9fa85e4f, 0xf1da5daa, 0x9a839954, 0xfb0954f1, 0x0ce7ed48, - 0x9fea078e, 0xf784f1c1, 0x3c769cf3, 0x66a09655, 0x769d553c, 0x9f27e895, - 0xae55d3f7, 0x73f634f8, 0xb64e7d55, 0x2b4f0c31, 0xfb1631af, 0x0f4dd822, - 0xbff973c4, 0x7ecd9b70, 0x557eac32, 0xeca6bc7d, 0x9fb74c69, 0x859fa30c, - 0x3bc807f8, 0x032418b6, 0x314ad3c8, 0xfbb291c4, 0xa3d47881, 0x011faf49, - 0x5b559a0b, 0xa748cc3b, 0xfcfa5d8c, 0x865861f3, 0xcf1c653f, 0x38450394, - 0x1d93469f, 0xf00cfd59, 0x71e017bf, 0xf5f061c6, 0x7fddf986, 0x119b83e9, - 0x4dbb313e, 0x7940f709, 0xab45e3ad, 0xdb5fe302, 0xe5f62a68, 0x67dddea1, - 0x5f261d9d, 0xfdb93ad7, 0xeb019ccd, 0xfba181e4, 0x8f5f8331, 0x0cf17b43, - 0x5e2316b3, 0xd6031ad7, 0x587061c1, 0x3eaa2a0b, 0xc5765c02, 0x5fd744cb, - 0xb54b2e1b, 0x01e15170, 0xf085d9f0, 0x535b58f1, 0xffbb4ed0, 0x6871e39a, - 0x360d15a7, 0x9ca7a44a, 0x9721e912, 0xabaff39f, 0x0d7f2644, 0x08525626, - 0xf441bbf0, 0xfa0ad677, 0xdbf06ae9, 0xd885091c, 0xbc71c6ee, 0xd2f978dd, - 0x9e50c9a1, 0xca993dfc, 0x4d99eeaf, 0xe2600d72, 0x27bc0008, 0xbf258d4f, - 0x3863fa0e, 0x9fa8a9be, 0xe126d481, 0xa937682d, 0xe005f258, 0x308e377d, - 0xf3e70f1d, 0x796d4e49, 0x0cb6b172, 0x335f91fd, 0xafbda5d5, 0xe28759da, - 0x07de9363, 0xb1458c17, 0xfed1cf8c, 0x6632fa11, 0x1f6b5ef0, 0x11d9d718, - 0xebcd0766, 0xeca9dfd2, 0xb6c0c6bd, 0xa7337b62, 0xb28d9ffb, 0x84e796fa, - 0x443dfbd3, 0x030e4db7, 0x37fb6133, 0x9bd43e2c, 0xbb33db7f, 0x77a08b17, - 0xd198ed43, 0x35e34690, 0xdcfeb832, 0xfd8c51d4, 0x067bfcff, 0x8ffa0cb6, - 0xfb76651b, 0x27bfb422, 0x4231f85e, 0xef072dde, 0x2f2dfd0f, 0x256c728b, - 0x3f2148bb, 0x58b7f54d, 0xab2a1f5a, 0x340c967e, 0x34fa4419, 0x9e3d1076, - 0x81e9f7f7, 0xe68d8ce3, 0xa07f3c78, 0x2f6e1ed9, 0x047fa234, 0xd01fc676, - 0xa36b823f, 0xb5fd7fb0, 0x00bf2a76, 0x035e0e7e, 0x4ff90ab5, 0xd3fb6b7b, - 0x075ac5f5, 0x8ed7f75d, 0x5a81eba0, 0xb97bd527, 0x07ae98b6, 0x75745d6b, - 0xf9f025c7, 0xec5db918, 0x920afe79, 0xdbafe073, 0x88e28612, 0x3e20066b, - 0x793e3bcf, 0x0af0b7f2, 0xafd3a8cf, 0xacf5c116, 0x735771d4, 0x3ff9fc98, - 0x3f074fcd, 0x7fc71728, 0xef5d7f39, 0xb73d542f, 0x70179763, 0x87a9e0b4, - 0xfbcc18e2, 0x0a5d7194, 0xadcae1ca, 0x709ce32b, 0x0e3bb305, 0x9f29e1f5, - 0x3e891c5c, 0xfa54134a, 0x2848c670, 0xabe718e7, 0xefb89e8f, 0xbfabe406, - 0x51d9356d, 0x7ec0785f, 0xae7e80b1, 0xf89db86e, 0xbc6dca12, 0x1939ef7c, - 0xfe5a8dcb, 0x87bbf059, 0xa2589452, 0xb74e4cbb, 0xdba44c81, 0x8def2dea, - 0xb0f23a47, 0xfad3d20e, 0x8bfef876, 0xbd4f7a00, 0xbd7e8e5c, 0xffcab9fe, - 0x9eae411e, 0xc9cefb86, 0xab57f871, 0xafaef119, 0x0e34815f, 0x41313c7c, - 0x3670f1f0, 0x156ded1c, 0x4c97cc1e, 0xf73f2cfc, 0xa86d419b, 0x39fcb7bf, - 0xcaebca4e, 0x67ebe7af, 0xa507fa3f, 0x176cfe7b, 0x6bd7af74, 0x200c234a, - 0x7e7e8a15, 0xe20534ad, 0xb9fda346, 0xacf244c9, 0x1f6fc772, 0xd3da35fb, - 0x7d1c5a6f, 0xf69bb415, 0xe505191d, 0x494d3b85, 0x311a7c25, 0x2f084a52, - 0x696ff81e, 0x0b0f087e, 0x5667d99e, 0x77fbf206, 0xb1f08427, 0x99936770, - 0x8f0aec0d, 0x7326faa2, 0xbc044c6b, 0x478db7d4, 0xfb9f96be, 0x7ef119a7, - 0xa58905ea, 0xe78044e6, 0x6e717da6, 0xa3c22701, 0xde2753c0, 0x803df574, - 0x1553a417, 0x57e7fa4f, 0xc67a7027, 0xa23c94fe, 0x00ff27e7, 0xcb78a9f0, - 0x57f9c0e2, 0x1c67793c, 0x6303e3ce, 0xdfeba70d, 0xc2714cac, 0xde4c2b7b, - 0xf95d3b14, 0x96478afd, 0x6fcdbd10, 0xc8c29259, 0x1ba670ee, 0xd33cd046, - 0x37737e71, 0xcdf9a54e, 0xbba26e63, 0x2ec8df8a, 0x353e2bb4, 0x119de2b2, - 0xc175e2f8, 0x066c1f17, 0xfbf3046d, 0xef73c840, 0xcb8fb2eb, 0xca183bcd, - 0xdcaa25c9, 0xfca88b64, 0xe9e395a9, 0xe08304f1, 0x70f2e02b, 0x6f72dd7a, - 0x51f3f110, 0xfd153396, 0xbf030f47, 0x7d21f797, 0x2dcafd0e, 0x7e3952e3, - 0xed4cbdb8, 0xc2290ec0, 0x683f58fb, 0xac3b7f22, 0x273cfb1d, 0xe2c5fef4, - 0x28ee30fd, 0x07f3e409, 0xd36edc29, 0x095fefcf, 0xbf028e3c, 0xafa30b20, - 0xfce6fe30, 0xe73565be, 0x7ddf956f, 0xf9f18a93, 0xff388727, 0x7cccbb60, - 0x9520571a, 0x914d379e, 0x58581e48, 0x6f5f1220, 0xd6be0931, 0x04e9573e, - 0x38c46dc6, 0x60bd2746, 0x7f0409ff, 0x3de787b2, 0xe4c2ed08, 0x17df07a1, - 0x953fb5d7, 0xfe0be76f, 0x3ff9057f, 0x6cffc43a, 0xeefbe723, 0xf097adf5, - 0x3df26957, 0x57e46bf6, 0x82af4fe0, 0xe1726afc, 0xdede3fbc, 0xf456e47c, - 0x3e55eb1b, 0x3d4fcad5, 0xbd3c569f, 0xcf53e88f, 0xefd71fa7, 0xa7c8894b, - 0xb4a5f73b, 0xd3e245e6, 0xaa7e56ef, 0x2754fbf0, 0xd879553f, 0xf2f51c1d, - 0x250481f0, 0xdf843ca2, 0x2bac3621, 0xa774a9fd, 0xdf82dbd2, 0xb942f557, - 0x2a9749d3, 0xa5d275dd, 0xf9fa774a, 0x7fa7e16a, 0x158047fe, 0xb90df9e2, - 0xf7da1863, 0x45b8c153, 0x03054dbc, 0x6b1f34a3, 0x4d5f11a5, 0xfef3e311, - 0xb7184983, 0x79c21241, 0xf4bff54d, 0x0df7be19, 0xdfa2f313, 0x2dcf767b, - 0xab57da0a, 0x990ead92, 0xe68f84e4, 0x5eec8efd, 0xb00f7189, 0x8e51aaa3, - 0xdb47f74c, 0xddb96ed1, 0x32709eea, 0x7f448411, 0x8dcbe489, 0x07b2656b, - 0x2e3c79ad, 0xf2611ae1, 0x9efa5fa1, 0x2be345c1, 0xfd5e1829, 0xf73d1a23, - 0xb93dd1cf, 0x2157c606, 0x8c3f87c6, 0xc2ceddd7, 0x0f5faa7e, 0x46bbce5d, - 0xa1c5440a, 0xe3b12c3f, 0xddb87061, 0xefe32da7, 0xfd4252bf, 0x777eae5e, - 0x5f4df47c, 0x3aba05df, 0x1b787e0e, 0xba7c8d5e, 0xcb3cf4e1, 0xa9e8e1cf, - 0x031fc894, 0x615c9bbc, 0x44bad57e, 0xbddef72e, 0xcce280bb, 0xec0ff785, - 0x2e6de5c1, 0x423cd7c5, 0x2af79e7e, 0xa8af503d, 0x03f9eef6, 0xe8efe445, - 0xe822d3c7, 0xdec22ffc, 0x5a563b3d, 0x9ddf0327, 0x3f641d65, 0xd8dac779, - 0x6f7e08d6, 0x7ea7624d, 0xd430f260, 0x86afea4b, 0x4f13b0f8, 0x329e276b, - 0x7f0aea0e, 0xe5571dfc, 0xc3effca0, 0xe109f915, 0x1d6b62d9, 0xcf308aef, - 0x4adc047b, 0x46667ef6, 0x3f937639, 0xb8f084c7, 0xb1acac69, 0x28947f63, - 0x2b0144e4, 0xec9571c0, 0x246e2ebd, 0xec80e3e2, 0x3d5c01b0, 0xf76673fe, - 0x11c3cbc0, 0xf5fb47fb, 0x0f31c984, 0x67e278e1, 0x3e05e636, 0x45c44578, - 0xf51391e0, 0x44e5741a, 0x225f7dfd, 0x9bbc078f, 0x4eb82768, 0x2534292e, - 0x1af37bc3, 0x6f3183ec, 0xbfea2191, 0xf3d0a89b, 0xad4ed14c, 0xebc95197, - 0xd5ed99b5, 0x23dfe691, 0x6a5f53b9, 0xdefb35f0, 0x0fe8cd3b, 0xabe16fff, - 0xc0d8fef0, 0x8d5f8c18, 0x746e4895, 0xfc4663a5, 0x63fc1e70, 0xfbcf13f4, - 0x7cf2bc79, 0x02c38f09, 0x735db93c, 0x8d764493, 0xf87ae74a, 0xabe0273e, - 0x28a8ffbe, 0x9db913fb, 0x8557c2a4, 0x6abc7eab, 0xd757907d, 0x1bfbcb86, - 0x293f071b, 0x2fc23e61, 0x55d00dd9, 0x8cd5b1b5, 0x5c69e77c, 0x667f426f, - 0x65fbc2ba, 0x29a0d746, 0x6ef37461, 0xdbde91a2, 0x267a3f9c, 0xb585c7d2, - 0x77f38616, 0x871739ce, 0x8315f37a, 0xc8d1b5e3, 0xe4caaf7f, 0xc707778f, - 0xafdad6bf, 0xef0c6b1f, 0x39c68737, 0x84d0b2b9, 0x654669ea, 0x8c352993, - 0x4c4dde8e, 0xfdeae7a0, 0xf2854a8c, 0x1a3ef062, 0x16e7f787, 0xd5e49bca, - 0xc344c707, 0xf13519f3, 0xc02afe9c, 0x8e72a6f0, 0xbea68f26, 0x5347cf47, - 0xe535a24a, 0x3dad45d9, 0x96252e11, 0x044762c0, 0xa926f4fa, 0xf535f9f4, - 0x37e81382, 0x5ffedd02, 0xab1617a7, 0x9355a17a, 0xa92ebecf, 0x8d485e8b, - 0x2d1617a4, 0x0f115253, 0xd165be6a, 0x2252e34b, 0xb5c385e9, 0x1472df3c, - 0xcf5e19e4, 0x70bd014e, 0x985e9875, 0xd13a2362, 0xba482bb7, 0xf1505e8c, - 0x99cb1df4, 0x2217a8c3, 0x24f8f5f0, 0xd9b85ead, 0xe17a4e5f, 0x533229e6, - 0x497df3c2, 0x56eefec2, 0x4ca6142f, 0x11c9b2a7, 0x106e811d, 0x3a17189e, - 0xf8eef22a, 0x3f0fd41e, 0xbc13b24e, 0x3ba27af4, 0x39799e39, 0x04bffe39, - 0x2f8e555f, 0xbd912a9a, 0x18ee95d7, 0xe9a2efd1, 0x16ade512, 0x7c72e1ed, - 0xf1c81951, 0xae45d61c, 0x0eae50ba, 0xbcab9709, 0xeb9bb57d, 0xce634f01, - 0xf9e14b2f, 0x0e4cebad, 0x35bfd42b, 0x85876724, 0x271fd9cb, 0x2b672375, - 0xe0bd9cb8, 0x45f1e82f, 0x4263cb71, 0xcafc82be, 0x8ba04475, 0x9ad1a569, - 0x06270375, 0x19ef29ff, 0x64578fe4, 0x27bc878a, 0xc1c1fdf4, 0xf6821a7f, - 0x0f1c61ff, 0x49b7efe0, 0x9f80ef5c, 0xe058fd71, 0xdc39a2fb, 0x2edaae5e, - 0x1baafc13, 0x6f57bf38, 0x3d0e2893, 0x3333ff3e, 0xf0f6ede5, 0x971a86b8, - 0xf0bff156, 0x9955d695, 0xc4937cf8, 0xfc0acce3, 0xcd87cb0b, 0xbf242c73, - 0xad06fe64, 0xe96250ff, 0x4aed8fd8, 0x3639277e, 0xec8bfc91, 0x7e89556f, - 0x3ed36e16, 0x16ac72af, 0xe48057fe, 0xf6bd5576, 0x5fc15ef9, 0xde40e573, - 0x7bcf9833, 0xd244764d, 0x4ebd6a67, 0x9bfc5478, 0x780168f0, 0xf0eaf90c, - 0x44dfddb8, 0x0baf9379, 0x5ffcfd07, 0x3e46e554, 0xf6fc821b, 0x7249c19e, - 0xcf32fbc3, 0xdf59ce3b, 0xfe3c3537, 0x8ba0bafc, 0x55ee0c57, 0x9aaf58e9, - 0x6fe73fe7, 0xca1a8704, 0x306cf5a5, 0x37f36efa, 0xa76bf568, 0x48506f3e, - 0xecd6975f, 0x43cb6e94, 0x5abcf3b8, 0xf8fd6f85, 0xb65e780c, 0xd437f414, - 0x716f9d9f, 0xc5a8fc63, 0x517241d6, 0x05cfcfa5, 0xe053fcbf, 0xc74644e3, - 0x8d3bd258, 0x2ef89d92, 0x087ae360, 0x728362f0, 0x8fbfc8f3, 0x5bb07817, - 0xde392f88, 0xe427803c, 0x517ef1db, 0xddf6e7ae, 0xee39ff0c, 0x4c9bfbff, - 0x91a2aed8, 0xa0236baf, 0x8c3be986, 0x84a61447, 0x1b4f73e1, 0x92adefa7, - 0xe0f86e83, 0xe7c197df, 0xdaa8f065, 0x9f165f23, 0x4f3e5c2a, 0xc0827e12, - 0x582d8b6b, 0xfc798052, 0x3363923d, 0x53c7f656, 0xbae4e15c, 0xd8df843e, - 0x3d578e64, 0x80dfa3dd, 0xf2d4a6eb, 0xfa201c24, 0x7636c5f4, 0x6f6f7d42, - 0xcb855f6e, 0xa3be351d, 0xbe6abf5e, 0x1482c3cc, 0x66f352af, 0x83f76523, - 0x7257a889, 0xa44f5a25, 0x4660cfe6, 0x40dfd7c4, 0xbe9313ff, 0x66967fa0, - 0xecedebe7, 0xe13b7dea, 0x6e5136e9, 0xb4761ace, 0xa17be014, 0xbae0764e, - 0xca0c5bb4, 0x9e506b91, 0xe43131ac, 0x4d070b8f, 0xa3df2e4e, 0xbf949f49, - 0xfa84c272, 0x82731cb0, 0x09ffc798, 0xc4271bd7, 0x3d02de78, 0x2898c4ec, - 0x093a1fab, 0xd1c53fde, 0x9cf30e34, 0xacb48753, 0xe4ee38c4, 0x2391fb22, - 0x32d5cf88, 0xaf1e7c43, 0xeb3f222b, 0xe2243bce, 0x6f0037af, 0x94ea7ed8, - 0xe047239c, 0xc97565bd, 0x75295314, 0x0d3cdf26, 0x6507a5ca, 0x66f50287, - 0x831b18df, 0xfd09d7f1, 0x830ee665, 0xae0b194f, 0x6957f8c4, 0x71531dcd, - 0xe7a015dc, 0xe15d1f30, 0x8a97196f, 0xb5128de5, 0xe6dd78f7, 0xe09d2054, - 0x21e67386, 0x5079fef0, 0xd9eec10f, 0xb679ebc8, 0x754c0e48, 0x27aff3cd, - 0x8b6f3879, 0x598970c4, 0x2b58ec10, 0x8567d7ef, 0xa11b837e, 0x63e7943d, - 0x4b77ec7b, 0x90d3cdfc, 0xd49c618f, 0xfdb2c47e, 0x41e72f28, 0x82cc783b, - 0xfea0ee5b, 0xb128df6e, 0x62afe834, 0x47cfce44, 0x4d077f60, 0xb47e7c0e, - 0x671457e9, 0x4bef099f, 0xcb67fe87, 0x9d68e3ad, 0x3b258fd7, 0xb92abbad, - 0x5677f099, 0x9b4b19f0, 0x47baf64a, 0x6f3daa62, 0x3edb8f0c, 0xe89bdc96, - 0x65d2de78, 0xad5e70ab, 0x031ce4de, 0x5a39d5d1, 0xe0127897, 0xf43b06ed, - 0x83c79984, 0xcc27bd9b, 0xb37261ad, 0xf10fb939, 0x42c69ce5, 0x3aea2f92, - 0x6e32f70a, 0xb4adb467, 0x36987ad1, 0xef1b3d93, 0xd0b4af37, 0x5c1df6fd, - 0xb567b4bf, 0xdc7e83be, 0xcc4d1b07, 0xbe5c630b, 0x88c3cfb1, 0x9bb60fc7, - 0xdfe4de88, 0xcd8e4898, 0x5be3c1df, 0xbf791bcd, 0x72e36c1f, 0x5337e8ad, - 0x9ebca3c7, 0x42c9f20f, 0xafcad3f3, 0x1e02ca79, 0x89b75d47, 0x9557cbf4, - 0x53e45d53, 0x5f1455cf, 0x7aef4eec, 0x77aa8c58, 0x5ebe31f2, 0x7335955e, - 0x196fd203, 0x03068c4f, 0x087d3fbb, 0x2c6569f5, 0x46d53bc3, 0xa712c3fb, - 0x96c7ca07, 0x8a7e77fa, 0x6a515ff4, 0xde1e2073, 0xbf23f847, 0x78a44dac, - 0x395f3cea, 0xab3e79c1, 0xdfcf3821, 0x356fa5a0, 0x2ddd386e, 0x9eb86733, - 0xce6688aa, 0x7f477ab0, 0xef0a7402, 0xf928d599, 0xdb96126c, 0x42192ff6, - 0x6b8d3b65, 0x6bfbd0a9, 0x8f8e8963, 0x4adcf0fe, 0x7799d3a4, 0x6eed0c4b, - 0x42af75e6, 0x41bd57bd, 0xd6bd7052, 0xfb79bbfc, 0xc71ed0f9, 0x9c57f47d, - 0x15ae809e, 0x8deafba4, 0xfd53f7eb, 0xfd82922d, 0x4e54dd1f, 0x57854276, - 0x4b7cf466, 0xa001f91b, 0xd30f2897, 0x905395ec, 0x5857abee, 0x57d798ec, - 0xc7a547e9, 0x661f9136, 0xc9a0c756, 0xb2516ed0, 0xe50e9112, 0xdea75269, - 0x78f17a44, 0xedb57d39, 0x25903930, 0x7c8f4f2e, 0x6f4a825d, 0x90dbd232, - 0x6f35bd10, 0xfd23322c, 0xebe3e07d, 0x5e908a11, 0x571f1e91, 0x262c2ae3, - 0xe9523edc, 0x07e80ab1, 0xe8e5f4e5, 0xd3fa3bb1, 0x02f81dd3, 0xcee47eb4, - 0x771a3695, 0x37ddaad1, 0xc47ce52f, 0xab459c70, 0x8179487e, 0xff1e4679, - 0xeb88e156, 0xd24f30da, 0x2e0f1c65, 0x997fa733, 0xf1c6e8f1, 0x10d8e48b, - 0x96e803fd, 0x01bac59b, 0xe5039443, 0x5698c4d3, 0x31e304a3, 0x51187525, - 0xe14f0f3f, 0xc23979fa, 0x3325eb0a, 0x67281f5a, 0xacee081a, 0xa3d7c297, - 0x876476e6, 0xa67b63c7, 0xb06efea8, 0x189fde27, 0x5851e50d, 0xff404db6, - 0x5745a26e, 0x60a061ee, 0xbc516313, 0x5eca2a9c, 0x4c9d0328, 0x479f54cc, - 0xd12f72f3, 0xebcd1bde, 0xc79f500f, 0xead5f2f0, 0x7f5e18f3, 0x99e7a334, - 0x7013b129, 0x14cf573d, 0x237c66bb, 0xfd0d4951, 0x62d957fa, 0x6eb489a8, - 0x9a8a6fa7, 0xaf146787, 0xf4fff976, 0x5cb5e606, 0xf90098d6, 0xe9d34e07, - 0x867b30d6, 0x13ca7589, 0xa4b23d04, 0xae0bb238, 0x2f01bfc7, 0x26818c13, - 0x06b06f6c, 0xb0573f08, 0xfbf7f615, 0xf65222e3, 0xdd05e7e0, 0x56a86bfb, - 0x6ff30fde, 0x4b632725, 0xc524ae81, 0xe590f94e, 0x46db994b, 0xed4b94eb, - 0xcc49bf68, 0xaf9cf869, 0xfbe17657, 0xefa8f1d5, 0x802e32ef, 0x7c2131b4, - 0x1fa91b5c, 0x07675c75, 0xb798bc5b, 0xfd618ef4, 0x74e0c26b, 0xf08ae916, - 0xe22264b4, 0x098daced, 0xac728bbc, 0x8447fcfa, 0xeaf1b3d7, 0xd64e5173, - 0x95d74f3d, 0xa4febc4d, 0x78272b94, 0x64b3bde1, 0x6814a4e7, 0xd0c73163, - 0x28baeaba, 0xbee5debe, 0xed17b764, 0x5a73a023, 0x32cde497, 0x76317f93, - 0x5f0ce488, 0xd043315f, 0xb114b1f5, 0xaeb2d94e, 0x0ded05a6, 0x4196c3f0, - 0x0ba5cf7d, 0x4c4f8c66, 0x9199b7f4, 0x401baaee, 0xcb15e26e, 0x68dd5798, - 0xf75a4676, 0x56452a76, 0xf59a17e3, 0xfab2fbc0, 0xb9424cad, 0xafcb873c, - 0xc7e3bb45, 0x39517961, 0xbd6ff7b7, 0x0438e766, 0x69ab9941, 0xb1675e25, - 0x8a687dd6, 0x74517ea3, 0x4edc25fa, 0xd449ab2e, 0x03ad6794, 0x75c20e6c, - 0xfef5da99, 0xa7b9e44c, 0xe30fd0b3, 0xde04d38d, 0xa5ada7a7, 0xb774f7bc, - 0x44e73d76, 0x026332ff, 0x2246bb8e, 0xb8e6093d, 0xf066ed82, 0x6c35c219, - 0x7dc0385d, 0x67d0a35c, 0x97ce5c95, 0xb4a97f0a, 0xdd17af82, 0xc2666597, - 0x7f71f2df, 0x84d8fd6a, 0xa3f71421, 0x7f1efef5, 0xcfeb098b, 0x137e0258, - 0x4ec97bf7, 0xda0ea598, 0x86e60ceb, 0xe3c61b8d, 0xe755fa45, 0x3ee50d35, - 0xf5edc3ae, 0x10ed09be, 0x5d668f98, 0x6d0a8ce9, 0x5b46acb9, 0xf733afd6, - 0x3b3908a5, 0x7e400d80, 0x19229adb, 0xf944ff89, 0x5791d674, 0xefae0a03, - 0x194b6d74, 0x0747eb4a, 0x295ca1a1, 0xf9dca9bb, 0xe6a81cdc, 0xc78c07fb, - 0x25cf895b, 0x26e5dfe2, 0xe310bda7, 0x0fdc5529, 0x35cf819e, 0x7d7806eb, - 0xcb5dcb2a, 0xfee14d7f, 0x6b9b72da, 0xc12dc531, 0xc13cc54f, 0x98d3a358, - 0x307c4790, 0x7b3c922d, 0xabffd05b, 0x8c15b40c, 0x25121fab, 0xe4dfa5e0, - 0xcf8c3e1e, 0xb963fbf5, 0xfd53e317, 0x0aef000a, 0x779e05ca, 0xaef2209d, - 0xb33e8037, 0x5c9fb5c1, 0xc7f48d3f, 0x176e66d5, 0x2aac7c8b, 0x6b8f9c4f, - 0x7a13b1f3, 0xe50cf81e, 0xd61b0dce, 0xdb99ff92, 0x1ebf99c7, 0x8d9f77c6, - 0xddbeffbf, 0xcea98fdc, 0x35f24fdb, 0xf4f229d5, 0x36ce4269, 0xe7559c82, - 0x454df80f, 0x64fe87b9, 0x37bd1e49, 0x87bd73bd, 0x14a4e493, 0x1cf86318, - 0x78aa57e4, 0x0a599def, 0x41652bc1, 0xcef384bd, 0x6865de62, 0x6819ff37, - 0xd7abef0a, 0x533ebdaf, 0x56ebf491, 0x541d2067, 0xf58ab5a5, 0xdfcf5faa, - 0xe7fe82fc, 0xf7d41ca2, 0xebe7d30f, 0xec4ced04, 0xf144b847, 0xde2e3540, - 0xad917e9d, 0x30dc8d06, 0xf234a3d9, 0xad7f4265, 0xd0e899bc, 0x471b99ca, - 0x9f3cd1f4, 0x79a01ce4, 0x40b8b93e, 0x1aea9e53, 0xcb7fa9ad, 0xd94d22b4, - 0xa6bd7692, 0x49b94dbe, 0x7fee8e53, 0xac7ea6ab, 0x73cd36e3, 0x4ecf4bcb, - 0x662e0093, 0x0dd5b7ab, 0xde03a870, 0xd2109118, 0xace2031b, 0xaa287eb4, - 0x6c7e46c0, 0x004b60dd, 0x832ea4e9, 0xbcb0d3ef, 0x002d24b4, 0x6c7b58fd, - 0xf5c216b7, 0x0c6f92f7, 0x62ac73c6, 0x7755f61d, 0xf95e8d33, 0x2be70665, - 0xaa657af5, 0x5c1a687b, 0x9929b6f3, 0xf068048c, 0x358fc42a, 0x6bbb718a, - 0x7437df17, 0x91cfea35, 0x64967ea1, 0xc54a0e15, 0xaf3b7776, 0x91b3bf23, - 0xbd42fbd9, 0x91bf62cd, 0xda999777, 0x1ab635e5, 0xfdfc619c, 0x0f2e5487, - 0xb98d721e, 0x32f8898e, 0x0deac3ea, 0xf7e8cdc7, 0x689bfb57, 0xd720e1dd, - 0x16f7da71, 0x9af42fba, 0xd70a23b1, 0x1f553d3d, 0xc2e23d79, 0x6bcd3354, - 0x65e390bf, 0x7f61644b, 0x2aa4f8f3, 0x7676cb97, 0x1b8c6404, 0x93e36954, - 0xf20d397a, 0xded76359, 0x7140223a, 0x11d3900d, 0x0f5545fd, 0x3cd6dc80, - 0x3af6859f, 0x7943275f, 0x9ae39023, 0x4553d3e7, 0xcb006b3c, 0x6fc275c3, - 0xe7110cb8, 0x1e0cdbf7, 0x5dc37ebf, 0x087f7044, 0xc21216e3, 0x0e2f0f53, - 0x69c1cbc7, 0x15bf9a87, 0x7bd7d2f8, 0x6be3832a, 0x3a723747, 0xceedca90, - 0x1f3052cd, 0x15c7a885, 0x033af445, 0x2014a5d7, 0x0ab6fe1e, 0x67b2a8fd, - 0xf4fa8625, 0xd12f4daf, 0xae33263a, 0xa438c24f, 0x6954bf58, 0x7fa19652, - 0x40e0f400, 0x31baa6fb, 0xaaafe340, 0xfbc2682f, 0xce3c8d55, 0xf1e069e2, - 0x4ad66acb, 0x6ee6dd7e, 0x2a6f75c6, 0x5207efa7, 0xc7bf1a15, 0xbd44ef0d, - 0xf9f160de, 0x2b7fc424, 0x76ca57c5, 0x941d6c4b, 0x4eb6af37, 0x3d2f648b, - 0xe2fde02f, 0xf5c3336a, 0x1ed095e6, 0x6b3fb1e7, 0x3be319bf, 0xca253b65, - 0x5bea7867, 0xd6be62a6, 0xd0c4d8b3, 0x77c7508e, 0x7e482b26, 0x84739be4, - 0xc787391f, 0xcc5cde2d, 0xee790fed, 0x9d57147b, 0xc8fc255e, 0x0e281739, - 0xf08566f4, 0xb8f2e723, 0xd43bf4c7, 0x8e968ebc, 0xd3d53a55, 0xf56e9e9f, - 0xe955faf4, 0xa76a4773, 0xf508319d, 0x1c7be03a, 0x1fdef1fa, 0x4c27ca32, - 0x426cd4bb, 0x2af7bf3f, 0x281ee3bb, 0x2b7d940f, 0x9ace5e31, 0x95c1f3f9, - 0x5f2e249b, 0x3e715b94, 0x86667599, 0x020239fb, 0x53c4014f, 0x43a94e32, - 0x357e468a, 0x1ca37b06, 0x0175c1ca, 0xc1a7c700, 0xf949dfcf, 0x065f2e25, - 0x69b6973e, 0xd6bd184d, 0xcaa2b908, 0xe66601bd, 0x017189de, 0xc6067d63, - 0xf8987717, 0xd16c963e, 0x1d3edf5f, 0xb5c127e3, 0x65ffbc4d, 0x7fcb5571, - 0x94fe10c9, 0x75c11673, 0x5da3c8a2, 0x8a5034bf, 0x744ec8f3, 0x6f315307, - 0x12a47d99, 0xef5d5af5, 0x1fd0f397, 0xabc3d751, 0x91e6f471, 0x13bc6c1f, - 0x32bb6be6, 0xdb69f08a, 0xf48edeb3, 0x243beb6b, 0x57de5235, 0x2a2e7abd, - 0x53fc0dcc, 0x5d37b17d, 0xbda4f2d5, 0x6dfd68a7, 0x78dcffb5, 0x698b8fe2, - 0xf76d5f74, 0x81ee3127, 0xf32cff62, 0x065e9127, 0x911c6cb9, 0xc2a7aa1f, - 0x68e75d41, 0xf085bbeb, 0x3c1de775, 0x7ad8c1bf, 0x654667ea, 0xfd0e548b, - 0x9a7262dc, 0x47de0062, 0x709b4c7a, 0xd5d71732, 0xc1c1b8f3, 0xa5c52b5a, - 0x53b5ad5e, 0x469b5839, 0x156bd7e5, 0xec915eba, 0x34e104fa, 0xbe9ac5f5, - 0xace6b708, 0xa7985d87, 0x44d07b3c, 0xaecc60f0, 0xc17de7d9, 0xea3c532f, - 0x5f5f0342, 0xe67f8ea2, 0x4ee60cc5, 0x8a6371e4, 0x0bfd2c57, 0xc54739c9, - 0xf7e8f1b9, 0x5b6cae0c, 0xd2cf6585, 0xee9d694f, 0x282fa03b, 0xe3c8d1ef, - 0x2d8d55a7, 0xf4b9ceb4, 0xb3f50262, 0x1e31d0c3, 0x82fbccf9, 0xde3beb44, - 0x4e673c69, 0xd288fae5, 0x7c451b3a, 0x3c5a4879, 0x1fe3c1c1, 0xe5f8e06c, - 0x8245d579, 0xfaae9a1e, 0xc3e21c47, 0xf5a154ba, 0x6407d522, 0x19acb38a, - 0x8f6711d3, 0x6e317720, 0xde93eb8d, 0xf494eb12, 0xbd99a7cf, 0xc07d717d, - 0xfde44334, 0x50b48ecf, 0x75d71f7e, 0xc7f53297, 0x3f83d7f7, 0xca88eb43, - 0x8ca745fc, 0x6ef9ad78, 0x196acff2, 0xfdf0c1fd, 0x320fe806, 0x34bdfbcd, - 0xae564b7e, 0x85d6ef26, 0x98335bfe, 0xaeaa7802, 0x20173003, 0xd7455f9d, - 0x2af7ddf6, 0xa8d637c8, 0x2f51878e, 0xf2067eb0, 0x5abcaa27, 0xe84b273b, - 0xee0cacad, 0x89a7173f, 0x2fc2b2fd, 0x4267ff02, 0xe27ff71a, 0x5f8d32f6, - 0x7e4fbfa4, 0xc7ec5591, 0x7978001e, 0xafb8c23a, 0xc2e318cc, 0x1d6cd976, - 0xfa0337d1, 0xcfd2ba46, 0x1f1a4673, 0xd3cfca97, 0x28f39f91, 0xacfc4ece, - 0x464877ef, 0xcfb40ce1, 0x5fb37756, 0xefc12aeb, 0xc1181b55, 0x8121b3cb, - 0x6d8674e0, 0x7a018d70, 0xd8e3033c, 0xd678f40c, 0x878e8ae5, 0xaedd67f6, - 0x109884e8, 0x886f57ff, 0x73ab76a2, 0x872c4a6f, 0xf7a08d72, 0x2b22c6f6, - 0x06e679c2, 0xfbea77ce, 0x4f4c09de, 0x6a1a3e44, 0xde6330ea, 0x2dbfa7ae, - 0xa1bbed0e, 0x222727bb, 0x4e3775ff, 0x779f3a77, 0xb445d2d5, 0xb87f155e, - 0xd0a1627e, 0x3a7b9e63, 0xd57ca11e, 0xdbf44652, 0xd5afebb4, 0xfeedbfc8, - 0x9e6bca68, 0x7a4d13d9, 0x3cd3ecf0, 0xd4c679af, 0xaa60eb4a, 0xf476cb77, - 0x7c2f3d07, 0x9ff230fc, 0xa1459767, 0xdeffbd78, 0xb6aeb873, 0xad1d7fd2, - 0xfedca8c3, 0xd541f2dd, 0xfec8bbd2, 0xd71fcb51, 0x37285d5a, 0x2e5c8ddb, - 0x867c6c2c, 0x9785d9ec, 0xfcc20c2e, 0xff3d99ef, 0x98e50c3d, 0x86178fe7, - 0xe7ec3ed1, 0xe7c30c2f, 0x6ba2e79e, 0xef25d922, 0x8e38f066, 0x0e731faa, - 0x9ef13519, 0x73fe8209, 0xc62bac56, 0xb6864d73, 0xaf84714c, 0xd7da1b1b, - 0x8617fb40, 0x389b1e1e, 0x8addac37, 0x392fdf20, 0xf46c65a4, 0x747a309c, - 0xb8d49866, 0xd38ad7d1, 0xa11fb130, 0x34132e33, 0xd5843ed0, 0x6f3f2341, - 0xa1f242a0, 0x8a7600ff, 0x4bd91dbe, 0xe44f6f67, 0x5d1832e7, 0x1d220613, - 0xf697dedc, 0x75af3387, 0x3d986e5f, 0xa0683d34, 0xfcd3ddf5, 0xefd90096, - 0xefad2341, 0x99a4ed56, 0xcd883ee7, 0x5dc42291, 0x0e3ebffa, 0xfe3eb6e5, - 0x6ec6b3d2, 0x2fef0898, 0x08ecc15d, 0x063c7d3f, 0xfb9db17e, 0xf8d75992, - 0xd07c128c, 0x5c95ed8a, 0xa7c71d83, 0xb78899da, 0x3efc0886, 0xb3f39d2d, - 0x822b47ca, 0x8ac7c206, 0x2e6b18e0, 0xe789275c, 0x7136a00d, 0xff0ae8df, - 0x1f18ade4, 0x96e97158, 0x9ef081e8, 0x626e8715, 0xdbbf20f7, 0x62fb58c7, - 0xb7df4bbb, 0xd10bcd4e, 0x4a7dfe89, 0x2127d73a, 0x7eb2207b, 0xfbfc178b, - 0xd8b9e95d, 0x3d6cfff4, 0x52757e07, 0xabf250fa, 0x07b8f067, 0xfaf5abf7, - 0x6abb9541, 0x7e04e3bf, 0x53ddcabb, 0xff80bf64, 0x5c77724b, 0x7af542ba, - 0x922527fa, 0x4a687c5f, 0xb5d312a2, 0x87463eff, 0x6baf2121, 0xe69daaff, - 0x59f73af1, 0xf2717fd1, 0x8a6796fc, 0x90a493e4, 0x4971e75d, 0xa9649f7c, - 0xd4f587c9, 0xf0a70571, 0xa754e9b8, 0xaa86f289, 0x87daa7fd, 0x3c1dcf9d, - 0x8bdaa8af, 0x74185daa, 0x94ec38f1, 0x15f9fc21, 0x106beec9, 0xf588ef5e, - 0xf247432d, 0xf6b98cfb, 0xcb747fa1, 0x7e2312cd, 0x4aa2f617, 0x527b7a9f, - 0x1ddf6f5d, 0xba0a371e, 0x5b2bf954, 0x9eaa17c7, 0xba7a11aa, 0x2274f51a, - 0x34cfe9ea, 0x5fbeb776, 0xf4aed3d0, 0x08c76c64, 0x1b0e43be, 0xeefc915d, - 0x375fa213, 0x3dae0fe2, 0xe2162f83, 0x7058b378, 0xdd8bfa19, 0xb0974fe9, - 0x5e7bba63, 0x5f9fc693, 0x08d78f8e, 0x7c577ffc, 0x9c3feabc, 0xbeed3b8f, - 0xba23ce6e, 0x7ef0a332, 0xb928dba4, 0x7c885826, 0xc51367f7, 0x4af5f5c9, - 0xff063e85, 0xfbbf4355, 0xf406ccb2, 0xdc153c77, 0x578bafff, 0xe4bf235e, - 0xd5d69925, 0x0eff042c, 0x1705b3ed, 0x44ad74ed, 0x33ae183b, 0xfe50b5b6, - 0x76854660, 0x831875fc, 0xe477f6c5, 0x32fc7ad0, 0x44e29636, 0x3b78fe65, - 0x4baf23ee, 0x86f5a7ae, 0xb2b2adde, 0xedfebc35, 0x8f2b7d6a, 0xf74d2d9b, - 0x6b79e72d, 0xab2fbe8d, 0x5af3dbd1, 0xc45a3ffd, 0x03b3ba7d, 0x71b26f9e, - 0x26407279, 0x78c6aefe, 0x998cd5d1, 0x4bd5f5d5, 0xdaa39c79, 0x23f68cbf, - 0x1fe78957, 0x4714831a, 0x5417fca2, 0x9f5fe53d, 0x9cc87c82, 0xd54f7cda, - 0x2724c396, 0x849f79f5, 0x3c8f2e06, 0xf3c8b295, 0x7d68930c, 0xa7d8a363, - 0x223728aa, 0xcc5c61dc, 0x863ee0a7, 0xce3fe413, 0xf325fdd8, 0x17f84e3c, - 0x7fb3cf31, 0xf972a65f, 0x63754f3c, 0x84fd098b, 0xde7be5cb, 0xc38cef49, - 0x97b09c50, 0x7b5fc791, 0xc63b25f9, 0xf5897a97, 0x4757c37e, 0xc77ff5f1, - 0xdf2224e6, 0x9f6978ab, 0xfed9e1c4, 0xd88527e6, 0xa331d86e, 0x3e11d71d, - 0xbfe2e6ff, 0xad32f264, 0x6c7f18d3, 0x25fa3471, 0x4516c7ed, 0x879f3c23, - 0xb9e3e22b, 0xe3118c37, 0x78a1e589, 0x7bd205f2, 0xb2788b77, 0x6c5ef411, - 0x6fa32e28, 0xd72153f7, 0x8adf30ea, 0xe79bb974, 0xddd2ebfd, 0x57f953d7, - 0x13ff69bd, 0xbcc279c3, 0xc63a019e, 0x9800cfb8, 0x9f95e62c, 0x302b628c, - 0xec9753cf, 0xe6f8997e, 0xf9050657, 0x7e53da06, 0x2153bbc8, 0x55a1883d, - 0x020cc3cc, 0x7da563dd, 0x8f944979, 0x2fe04ab9, 0xf452fc1d, 0x5334610f, - 0x403c8f30, 0x450663e4, 0x7ff62331, 0xe6bdc99f, 0x34ffcc4a, 0x88cb1d19, - 0x93891de8, 0x85e6bb62, 0x77cf2724, 0x3521f9ab, 0x7e5dddef, 0x0cf7c248, - 0xf945f4e2, 0x3094e620, 0x81e6ae1f, 0x4a2ecdd8, 0x511f2d4e, 0x7967e743, - 0x9d37d8b2, 0x8b4a29ff, 0xa5719f90, 0x6bef6131, 0xfa6b81f3, 0xfa744d3f, - 0x6b80f355, 0x71e9bfd2, 0xd5efdc2b, 0xfc487b8d, 0xa3f214f9, 0x3a77f9fe, - 0xffb560b7, 0xb3bde902, 0x0e71161d, 0x938f2b45, 0x2f144dfb, 0x58fe0b38, - 0xdd3e9872, 0xddfbc69e, 0xfa222feb, 0x8d8e086f, 0xc487fac6, 0xa687d5fd, - 0xde7b464c, 0xfa3a341b, 0x7fb848d2, 0x0e3410d5, 0x1be4fb45, 0x7a694bc4, - 0xa359f984, 0xf3d23eb8, 0xbfe09c51, 0xe70e0cb8, 0x5fb937a2, 0xf3cc59e5, - 0x1d75761f, 0x73cf0d70, 0x914acfef, 0x6a77f8d4, 0x6ec8fca4, 0xecbd2ebe, - 0x2df68976, 0xc8fcd97f, 0x7fb6c68c, 0x8fa23f2b, 0x219ddf3b, 0x790322f2, - 0xdd23b9dc, 0xa84bf34e, 0xfb885c19, 0x7ef9d49e, 0x901f7083, 0x43e6edf9, - 0xedf9efaf, 0x352fdff6, 0x837cdd02, 0xcb7d97fd, 0x96fc2ffd, 0xf52fbffb, - 0xdb7f85db, 0xcbffdcb7, 0x8fff72df, 0xff07d244, 0xf5ebe6af, 0xfe7d78f9, - 0xb7979f5e, 0x8bd734bc, 0xd695eecf, 0x6ae00476, 0x4d35db8d, 0x8c687902, - 0xbd4562df, 0xe7923259, 0xb58f56af, 0xa14936fa, 0xaf0abe3c, 0x3fdc5991, - 0xf39de7b3, 0x6ce356e2, 0x226c7067, 0x3246bbc6, 0xdacf6ff2, 0x198b1e78, - 0xd798e9ed, 0x37e99a82, 0x67521d81, 0x7d079c8b, 0xf7f0a7af, 0x4b1bd1ba, - 0xc8af0ab2, 0xfed5a64c, 0x59f648ce, 0xdb2f88ad, 0x17c5191b, 0xbf495199, - 0xa4abde89, 0xe3d3fda3, 0x2e3f7e45, 0x689b9cc0, 0x4dce4a5c, 0x928f6e74, - 0x407be383, 0xae1367e4, 0xf18397ef, 0x03b004e4, 0x1eb78f31, 0xa7e479f3, - 0xfa9ea9da, 0xdc99ddbe, 0xc4c07a4f, 0xef305ce8, 0x11dd7c95, 0xbd9156b3, - 0x0ee1e6a6, 0xcb27029a, 0x8dc3ca25, 0x62bff1c1, 0xce6de408, 0x449c4411, - 0x3f296dfb, 0xdfc8eaf8, 0x7bd377f5, 0x86fecd14, 0x6187f466, 0x29ee771c, - 0xb19dfa20, 0x6fed2477, 0x091ae4f0, 0x46fc5dce, 0x43780711, 0x38d431c4, - 0x7a8f9a80, 0xde3fc45b, 0x3f4ab8c1, 0xa1584f3c, 0xc34caceb, 0x5a9e77bf, - 0x159cfe57, 0x203d3f49, 0xf78fb8f1, 0x29f71e15, 0x84fa3b30, 0xccac7faf, - 0x0f2c78e4, 0x1a83bcf0, 0xcc4279c7, 0x7287e0a7, 0x687602c0, 0x6681aac1, - 0xab05ebd4, 0x3af0a2b2, 0xa433e9c8, 0xcfa7bc00, 0xf15069d9, 0xee8e8917, - 0x89f114ca, 0x8f941d03, 0x9797467b, 0xd7c99ddf, 0x7165e41b, 0x64ceeefc, - 0xafb3be54, 0x8b9a3971, 0xcbb1ae3d, 0x6541f291, 0x38e2f7e0, 0xb8f8ebcb, - 0x05977855, 0x4f7c2294, 0x558ebedb, 0xc8afcd78, 0x79b8a229, 0xb455b9e5, - 0x85d2e9bf, 0x1c52d7fd, 0xffa0accc, 0x1b55b330, 0xc5909b4f, 0xa0cfe7e3, - 0xbb708dc1, 0x6ffe48ce, 0xa24675c1, 0x1b32849f, 0x2609a7f9, 0x7960c726, - 0xf283b712, 0xb08a938b, 0x93c4a6cc, 0x407f97fd, 0x179b9f89, 0x5c256f8a, - 0xe11938b7, 0xa8bcb974, 0x22bb271a, 0xa44bf9d9, 0x179aafdf, 0x88783aad, - 0xf3aa7bd6, 0xe6a2e152, 0x8bcbbb37, 0x3c12ebaa, 0xd6689fc5, 0x1d8c7851, - 0x58ae31e3, 0xaccda7b0, 0xcb4b37ee, 0x0b4de509, 0x7ca39f76, 0xf51f9aa9, - 0x3b239cd4, 0xb199da1a, 0x3fa0017d, 0x4364e41d, 0xee9bcf2d, 0x1a7bfb12, - 0xae78fe61, 0xfe601ff6, 0xfcc3f578, 0xb50bfef1, 0xa81ae9fd, 0x6f75d075, - 0x7aba08ed, 0xcf28e7fc, 0x36a642fa, 0x8f99d75f, 0x084d5d93, 0x1d7cb0af, - 0x3af9f595, 0x63c78a39, 0xee303f70, 0xb41cf21f, 0xf42efc92, 0x7f42f797, - 0xee2d6fe0, 0x6aee385e, 0xd18597cc, 0x61d3bb45, 0xdb6c73c3, 0xe61b0e5d, - 0x4e9a0ac9, 0x6a847ed1, 0x15ce9063, 0xa6073ce8, 0x775f1ce1, 0x21b42feb, - 0xd79b2f7c, 0x79fffc6a, 0xd7932fad, 0x32f905ba, 0xf23f2439, 0x26e7065d, - 0xda701ebc, 0x87c986e6, 0x179e2ed5, 0x9bdb9d59, 0x5741eff8, 0x6139f8ef, - 0xe628adfd, 0xeb848a71, 0xf7e16d72, 0x79e2c89f, 0xb98904ac, 0xe4b1c922, - 0xbcb8df9e, 0xef648e4e, 0xf402bfb7, 0xc3d03578, 0x5abdf9ee, 0x71b4ae89, - 0x73c5d5b6, 0xdbb9e17a, 0xac2c37de, 0x69c38f2f, 0x974c6ce2, 0xde2eeb4f, - 0x40d8a336, 0x7bc2e2e7, 0xeb5f51b3, 0xd8cc62e3, 0xb9f5cd91, 0xe4739c53, - 0x582364cd, 0x5bdabc97, 0x173877cc, 0x362f4fea, 0xf3509e90, 0x46c5f96b, - 0x99f40b56, 0xa3e4d4bf, 0xb1b15abc, 0xff0b9e8d, 0x3f3d8570, 0x3bc9e513, - 0x8c76cd07, 0x60e3e9a3, 0x752de28e, 0xa3bda1bd, 0x6d7da252, 0x373fd65d, - 0xf8c38d36, 0xaeb660d9, 0x1bd42c6e, 0xe3b06b9c, 0xe5cbe57a, 0x3d85f2e1, - 0x219f8fa3, 0xa1fda15d, 0x2f5fa38f, 0xb0bd7ef0, 0xbf43ee97, 0x8fd43932, - 0x2f4f4eda, 0xbe94f68f, 0xbf7f2e30, 0x71456fe8, 0xc45ceafe, 0xa1818967, - 0x3c5158de, 0xd61b9ac6, 0x234f595f, 0x7986af5f, 0xbcf0a4bd, 0xe9dfcf1e, - 0x3caa79f3, 0x8cfa682b, 0x083efff6, 0x95f51972, 0xffc78d27, 0x3c285e0b, - 0x34227280, 0x1f9fae4e, 0x37bf534c, 0x7c6788e0, 0xd14fb45e, 0xb8a247bb, - 0x27c97e5b, 0xcca1a37b, 0x7fb4f15c, 0x773073de, 0xef939e39, 0xc50e3129, - 0x971e3afd, 0xc22799d4, 0xd7e4d07c, 0xf5c7ae2a, 0x075305fc, 0xa67e20b7, - 0x9d689a96, 0xa6d7e4de, 0xaae539d1, 0xba982b9e, 0x7c289ee9, 0xf3a25fde, - 0x56bf261a, 0x4f9f063c, 0x88c01ed8, 0xb3889b38, 0x3c193907, 0x7c88d278, - 0xfbb24572, 0x0537c827, 0xa89e4493, 0xa9e3eb94, 0xc62649fe, 0x7e8d46ed, - 0x1bface6c, 0xf3d479c5, 0x7d711204, 0x2f485e42, 0x7d01ec15, 0x57d21b15, - 0x7a9eaeff, 0xe09da7b4, 0x2be83579, 0x24c24f1c, 0x62ef4f9e, 0x77fc08bf, - 0x93ba7fa7, 0xc467a8bb, 0x529983f9, 0xad7d575a, 0x38673c60, 0x9d12e5da, - 0xfd1dd683, 0xcfec26bd, 0xb6ec6ef8, 0x76fd04d7, 0xf1a9aebb, 0xfd13c9bb, - 0x787fe7b9, 0x57f8489e, 0xf548be6a, 0x7b09fac7, 0x215ebd57, 0x7b7fbbfc, - 0xd12a013f, 0x1209fb88, 0x9827ef22, 0xbda12f59, 0xd827eea4, 0x3b856667, - 0xab3d7093, 0x73e44fd8, 0xefb41d91, 0x7aad6fd7, 0x7bce893c, 0xa0cc6dc0, - 0x9f485af7, 0x43fd8157, 0x63ff92f6, 0xe7ad3f1e, 0x1aabb1eb, 0xd496fbb5, - 0x5f616ceb, 0x50f9858f, 0x77ac459e, 0x91ce2f1d, 0xef21c508, 0x21c78632, - 0x59304a3d, 0xe3eb475d, 0x5c4d1779, 0x6438bbb2, 0x75a0eb35, 0x9215d5b3, - 0xb7c3f503, 0x91ec971d, 0xddaf5da5, 0x83cb9327, 0x42496e69, 0x706ad5fb, - 0xf8bad255, 0x6c7ef817, 0x66fa7c3d, 0x413c7971, 0x331e31e4, 0x6c787a73, - 0x5bfb4494, 0xe21c1f70, 0xf817b1f9, 0xf2c7973e, 0x35173ef9, 0x5feea16f, - 0xb79432b9, 0xea6ffda0, 0x1f7517be, 0x780fba8b, 0x00a886d2, 0x99f707da, - 0x1db8d3ea, 0x3c3a25eb, 0xf3d193dc, 0x6f3f0b28, 0xf8ce3f5d, 0x28c3c2ac, - 0xf37f0f87, 0xac88d176, 0x25a67108, 0xaffc2fc2, 0x98fb2eac, 0x30bffb54, - 0xfec6a86b, 0xfedeb2a7, 0x16f2a6ff, 0x6f9f0141, 0x32abde70, 0xe6f8ddbf, - 0xfc72df67, 0x7b247cfa, 0x4b88b976, 0xd9e7e9e9, 0x68bf552c, 0xbac34bbf, - 0xfae43fec, 0x8e524ebb, 0x2f6bb9d2, 0x542573f1, 0xcb175a39, 0xe4215ffb, - 0x547d7aa7, 0x914ceb5c, 0x884f5fe3, 0xe764b3e7, 0x0193a472, 0xc8f1b4db, - 0x78daf581, 0x098dd5e4, 0x40e0f29a, 0xc17ea686, 0xe79ade81, 0x69578343, - 0x237f0f9e, 0xd91e535f, 0x7f534a3a, 0xb46387f4, 0x68755ae7, 0x5ed791e3, - 0x2fb749bc, 0x2bf047d2, 0x6f0dca04, 0xad9d6457, 0xa15997a9, 0x8d56579d, - 0x96bd5e76, 0x2fcee826, 0x78e6fde1, 0x53ebf3b5, 0x025f9da7, 0xbef2d3e6, - 0xd4cd3e7e, 0xecf7a153, 0x61b1f7f5, 0x738a07bb, 0xa99f686d, 0xc1db99fb, - 0x6411786e, 0xffb69fdf, 0x9cd7d696, 0x06eda279, 0x79e6cf3a, 0x0379e199, - 0x5963dbed, 0xa3e3de80, 0x34162873, 0x661ef4c8, 0x1c9b0c0c, 0x9d1afe76, - 0xe9f28f4c, 0x911258a9, 0xf8b69e0b, 0x82fda04a, 0xe106275d, 0x7bf692fe, - 0xfbcb3e78, 0x31f14484, 0x841d6de6, 0x60584bdf, 0xa89dfc8c, 0xbcb8b2d7, - 0x9a3bbd3b, 0xdb49ebd6, 0xbf52669a, 0x3098b7f5, 0xdbd6a69f, 0xa849fc2f, - 0x3d3df7c7, 0x5e77d12e, 0x71e17c70, 0x27bbf54d, 0xfae71fa7, 0x89a3416f, - 0xb059efce, 0x9e3b676d, 0x0de0bd57, 0xe65b9d0b, 0xf48e76d9, 0x3b53d16a, - 0x469ece08, 0xd5a8bd99, 0x8273da57, 0x5db8f1b7, 0xe9154375, 0xff932841, - 0xf91f5d55, 0x9dcbecbc, 0xa9f0bb67, 0x00bcbb3d, 0xfccf85c2, 0x1ee30e2e, - 0xc6b7051f, 0xedbedf91, 0xeee9cf8b, 0xfd702e72, 0x173c2fea, 0x03fc23f8, - 0x2cc5cbe4, 0xdbcab9dd, 0xa9f7c512, 0xf7c2c302, 0xe8e087f9, 0xf1de78e5, - 0x6e7823e9, 0x3fa7e9fd, 0x5bc7047e, 0x8f0baff9, 0xadf498fc, 0xc3728ecd, - 0x3a61c4f3, 0x976d5bf7, 0x40e5cd90, 0xa3bfe3fb, 0xdfdbd2f3, 0xb7b038b4, - 0x641f3df6, 0xefb77d23, 0xe3052cfc, 0x8cf78b5c, 0xe2f078a3, 0xf0be8b67, - 0xb7486b7b, 0xe3e17ebe, 0x3e7375f2, 0xcd5f16b1, 0x38d9cd0d, 0x6f8033ce, - 0x9e75f38c, 0xc55f5cf3, 0xc456cdcf, 0x23dbcef9, 0xe5df8b9f, 0xc986e73c, - 0xed0f7e37, 0x2e7e069e, 0x75cf65cc, 0xbc78043e, 0x6fe04bfa, 0xbe716afb, - 0x9dfc6449, 0x4f003fc1, 0xb9ed6c8e, 0xcc369fce, 0xf8d7f47d, 0xdbb121ac, - 0x5f039d73, 0xb9ea6e02, 0x72ccfffb, 0x3e46ce8e, 0x74f7fa7c, 0xade2368e, - 0x3a73c144, 0x7f46cd3e, 0x075343ee, 0xb1d72b9d, 0xefc762c7, 0x73d82d37, - 0xfda7f894, 0x64b71e59, 0x76fbfce2, 0xe7e3f9d6, 0x8a988b95, 0x3f2c4b67, - 0x1fc05a0f, 0xe2568bcf, 0x1738bee8, 0x7ab1d39a, 0xe777745e, 0xeeca2f44, - 0xf89cf5cd, 0x96d5401e, 0x9fb99abf, 0x3497c21a, 0x7fe9f682, 0x2adbf9e1, - 0xbfc2ec1c, 0x96dbc4eb, 0x7771e7c8, 0xf02f8f9e, 0x73c3f885, 0x35cf3a3c, - 0x5435f287, 0x08b28e96, 0x137da0f2, 0xbdbd2f3f, 0xeea9fd1b, 0xd6caaa0f, - 0x6798a9f1, 0xf2a1fc77, 0xffc6e5e9, 0x3333e155, 0x8bd0d15b, 0x97d3a70a, - 0x75f1cb22, 0xb6bfef82, 0x62ece3fd, 0xf48fdcff, 0x66d0d558, 0x44d9fbe6, - 0xf7cc547e, 0xf4dfd834, 0x6427a4fd, 0xd557e3b2, 0xd71c9337, 0x6eea8bcb, - 0xb39b6df2, 0x7153bac5, 0xa7e9c14e, 0xefb87d63, 0xdddef4ea, 0xf6effd7c, - 0xfa17b336, 0x19edbfdb, 0x721b8f33, 0xe13d41fe, 0xe9ff1b0b, 0x91069b27, - 0xdd66eedc, 0x8f78bd77, 0x3df91fc7, 0x34e7ed9e, 0xade859ef, 0x72efff27, - 0xe8c8fbef, 0xfbfb05bc, 0x3bf7c828, 0x4ffb847e, 0x17ffbc23, 0x176126d9, - 0x22eb13ae, 0x3f03de41, 0x9ee02bbf, 0x3cf5cbd6, 0x9d1999c2, 0xe3be1083, - 0x2725917e, 0xaf979f01, 0x7fa8ec95, 0x4c18af67, 0x9ccf9274, 0x89652744, - 0xfa937bfc, 0xe6cf1cf7, 0x1ab6fc7a, 0xc3fa4313, 0x280cded3, 0xb624eb7f, - 0x3197fb86, 0xe7425313, 0x6ead56d1, 0x0abc2389, 0xef3d533f, 0x3e66a2b6, - 0x39fd07c9, 0xdeac9538, 0x2d6fe78c, 0x2dcfcb58, 0xa38b9fd4, 0xcf5dab97, - 0x85fb5a89, 0x956df672, 0x81cc1cef, 0x07e7377c, 0xd7e456b1, 0x4a68f0ae, - 0xb3ca05be, 0x07a4c80f, 0x2eb0b854, 0xebcbfddf, 0x7f3cf881, 0x973f2fa0, - 0xb152515c, 0x3c1e9cde, 0xdd19282e, 0x597ef1c3, 0x19b87ba2, 0xb19beae5, - 0xb596c7b8, 0x7c50345d, 0x36595980, 0x59d9938e, 0x537db876, 0x60a7b26e, - 0x16cbc4de, 0x58fc51a5, 0xeb0addff, 0x1eff20da, 0x157bf683, 0x5f9c8965, - 0xeff3763a, 0x1e46b1ef, 0xeb32b6bf, 0x9c778c32, 0xe0a5d652, 0x95ae5411, - 0xc53dfe26, 0x4714f1ed, 0x91456db8, 0xba5fcf19, 0xf69e21ad, 0x93af30b5, - 0xe2a8cfbe, 0xc1456db1, 0xf7e834fe, 0x871cfab6, 0x269fc5ac, 0xaea0bc1e, - 0xc9dbc54d, 0x64ede0cb, 0xbe01bc24, 0x7a13f734, 0xeec5f169, 0xe94cf6e6, - 0x62fafb1d, 0x0d7ceefe, 0x77631eff, 0x340e92f2, 0x35c5094a, 0xe33a338b, - 0xef4829b5, 0x250ed617, 0x55f1e9bc, 0xc3d9affc, 0x7b337f71, 0x05ce962b, - 0x66c3eb2e, 0x6ff184dd, 0xd953f389, 0xa316262f, 0x8bd01ade, 0xb56bfdf3, - 0x82d9fe3c, 0x787ecff1, 0xca9dba6e, 0xf3fc4587, 0xe13fc628, 0x3fc626fa, - 0x7c527ae1, 0x33e5433f, 0xd7a20020, 0x7f38bdc1, 0x8925ee0d, 0x34e2ddf8, - 0xff8a4bb4, 0x73f38b25, 0x61637d7e, 0xce878d0c, 0xa3fef9cb, 0x7bd1bebf, - 0x3a37630d, 0x69b4f1b5, 0xb4f1b453, 0x663915f2, 0x736fd7f4, 0xa3d4d68d, - 0x0f5abc88, 0x925e98ba, 0x337e79a8, 0xbfcc34be, 0xf0a5ee2f, 0x1f7147f8, - 0x4b5bbd4d, 0x2a5bdfb5, 0xb3c668bf, 0x62dbd985, 0x26b3309f, 0x87bfc219, - 0xf1ca4402, 0x3e6de762, 0x416e3a31, 0x60e4fc7a, 0x5e7284b2, 0xaf150f8f, - 0x080037b3, 0x1b39dfa0, 0xbd97940c, 0x55e3b66b, 0xaeeccf3c, 0x7bf7f8a7, - 0x467bae4e, 0x39805df3, 0xbf84994f, 0xa1fb2763, 0xf232c568, 0x607dca3b, - 0xcb88022f, 0xa23ef45f, 0x467e3196, 0x0f91594b, 0x80bec90e, 0xe2727844, - 0x4fbd83f7, 0x7e47eff0, 0x0ed86208, 0x2b7677fa, 0x1287c71f, 0x53e5815b, - 0xfdfbb7b6, 0x6675e600, 0x0679bae2, 0x307c8dc4, 0xd3e2e499, 0x2cfa4332, - 0xe744c3bd, 0x587ede39, 0x31f4efa6, 0xc5533f29, 0xd9cbe62b, 0x1dfe1613, - 0x04a00e9b, 0x71f8b7a8, 0x8f9f7d0b, 0xcfcb0328, 0x11adf40e, 0xf2f48874, - 0xc6733c61, 0xfe7960d3, 0x6496a3e0, 0x82119f5a, 0xce106f9b, 0xfae09bd7, - 0xa3a02f51, 0x06f9e68f, 0x3bbafc91, 0x0f47f899, 0x2e6693df, 0xef48bc9f, - 0xea2e4852, 0x26d996ed, 0xc7df7d07, 0xa3a486cb, 0x96b93a5c, 0xf40f477f, - 0x3f5f1c4a, 0xabd134f3, 0x46939efa, 0xef8e3c65, 0xe90e5d64, 0x0ad6dbaf, - 0x06f4137f, 0xfae3efaf, 0x46ecbd6a, 0x275bc3bb, 0xaf9db9b9, 0x4db78fa5, - 0x688b9ede, 0xd68db1fd, 0x6809dcaf, 0x9dca3cc5, 0x2ec9533b, 0x5bec2998, - 0x2ddbc696, 0x3b3a73b6, 0x0f4fa07f, 0xea7ad7dc, 0xea01e010, 0x75f3a7b4, - 0xacc6a705, 0x3747861b, 0x1dec369d, 0xffb803f6, 0xfbef44f1, 0xc8dbc046, - 0x5ee6f76c, 0xac329f18, 0x4473c6cd, 0xfc4fface, 0xf50fbf1c, 0x83930ed1, - 0x97e974d8, 0x0c4ed3b3, 0xeb835d8d, 0xf2eb67c2, 0x3f042704, 0x5bf8293c, - 0x8b6fcfd5, 0xa7036cf2, 0x2482f63f, 0x34c46bbe, 0x9e217872, 0xe4872a43, - 0x2b872aa5, 0xc7fadd85, 0x3e6edc5e, 0x60a5d6c5, 0x4fa005bd, 0x3b3cfef1, - 0xb72a4bb7, 0x7ee7eff1, 0x4c9c7c84, 0xf5c31a7d, 0xe4167cf2, 0xea014e7a, - 0x77dd0949, 0xc0388b45, 0x409fbe3a, 0xb9e7f72f, 0xe06ffb7d, 0xa3003bfd, - 0x7cffe45d, 0x8f1b1ae6, 0x3c6deb71, 0xff97ac9e, 0xb9b7e84c, 0x3d7a7de2, - 0xbbe85730, 0x377d3ab9, 0xce8e71cf, 0x0edca91d, 0xb2b945ef, 0xc2efab4e, - 0x9a44a9e6, 0x872f3ce7, 0x873f3cf7, 0x769d7bcb, 0x08fda30d, 0x3d59dc2a, - 0x77b4d3fc, 0x791c61c5, 0xc33283fe, 0x78aa1cef, 0x823e66a8, 0xb02cc7f7, - 0x8f18ed0a, 0x062e31bc, 0xa1f0ba70, 0x2dc7ecbf, 0xa06b944a, 0x7efef3f3, - 0x9427b3bf, 0xa4b2f37b, 0x6f7efdfc, 0xd570aecf, 0x829bf1c3, 0x6ef9131b, - 0x9863076a, 0x377f85bb, 0xc91eac3a, 0x0901fffb, 0x00d0a8f5, 0x0000d0a8, - 0x00088b1f, 0x00000000, 0x3bedff00, 0xe5557469, 0x73dcfbb5, 0xe1dc8487, - 0xc2040464, 0xc06e49b9, 0x612f4865, 0x1213d41e, 0xde0d4b22, 0x00c10580, - 0x86120137, 0x7c07504c, 0x0040e3e2, 0xaa1a4583, 0xf50af8a5, 0x22d28342, - 0xb04a0834, 0xc141170c, 0xd6de8ba7, 0xa44f7d6a, 0x40932861, 0xd2bb6a52, - 0xf7b79457, 0x3b939df7, 0xed83a404, 0x58b593af, 0x9ef37efb, 0x77f7bdbf, - 0x52015000, 0xaaa8e601, 0xd08eceb5, 0x092bd00c, 0x72c06e60, 0xd80e35b6, - 0x37fc0ddf, 0xbb746b7f, 0x01e5e696, 0xf7473754, 0xa41c5fe3, 0xbfe6cc01, - 0xff5616a1, 0xd845cc41, 0x766f3d12, 0xe890eadc, 0x556679a4, 0x086e17eb, - 0xa1e6ca0c, 0x840cfada, 0x9f12a24d, 0x6e0f351b, 0xca7a01b8, 0x7773948e, - 0xde0bc361, 0xc5c2221b, 0x002300c9, 0x5c78174a, 0x439c1cfe, 0x2186f77f, - 0xb09e7468, 0x39cd23c0, 0x098a6584, 0x68c79cf0, 0xb1c6994f, 0x477f788d, - 0x617c67e2, 0xc1864ef6, 0x15483f08, 0x3a6f3c54, 0xeba236e1, 0x71eb15be, - 0xdf8841e7, 0x11f8137a, 0xcbbf5b9e, 0xfe3e47e9, 0x695dc5fe, 0x88772b04, - 0x66084410, 0xdcf015bf, 0x2f65f582, 0x56fb833f, 0xdaf78d6c, 0x88e2bbb0, - 0x3c7008bf, 0x252b7c0f, 0xe3d7971c, 0xe070c341, 0x71dd8445, 0x8428f23d, - 0xdfd982fd, 0x513de68f, 0xd927efe1, 0xd187faa3, 0xf4cc4fbe, 0xee3f7cff, - 0x04b6c4fb, 0x9248caaf, 0x44e1a682, 0x84041489, 0x7b7f0bd5, 0x04fc8cd2, - 0x9e8f83f1, 0xf2b8014a, 0xb6c408ba, 0x817f24ec, 0xcfdc4a9c, 0x703d05eb, - 0x5d29b89e, 0x22f6c4ca, 0xeff9ecec, 0x8d4ce7e7, 0x4fc4e59f, 0xd599e914, - 0xf3a50e1f, 0xbe70374f, 0x4d99face, 0xf397a7e3, 0xe7e73573, 0x339f8d4c, - 0x7e35788f, 0x4f892bca, 0x9f8d6af2, 0xeace1c0d, 0x3a7537c2, 0x4fc4f5e1, - 0xa7155e6c, 0xa60f885c, 0x173f909a, 0x4f508a76, 0x12a80b6d, 0x4485c3da, - 0xdf511250, 0x3f8d04ff, 0x7e610a0e, 0xe50ecdce, 0xd29e9106, 0xc49d47b5, - 0x453bb9d7, 0x3f2c704e, 0x73eee941, 0xc81f9e44, 0x24d53c25, 0x087942df, - 0x408aa5c0, 0xb7fbe12e, 0x825a7df2, 0x79e3e522, 0xde2dfbed, 0x36efc8cd, - 0x85c01587, 0x8384f676, 0x227265c1, 0x3a81679b, 0x505f3c00, 0xf8845814, - 0xdd3e50db, 0xb2159e90, 0x5905c6cc, 0x87ec5282, 0x7e13200d, 0x24288282, - 0x1d2fed75, 0x3e462283, 0x814c3bb5, 0x67ff48cd, 0x3c80d0d6, 0xffaf187b, - 0xe913b192, 0x03c835f8, 0xd252bce8, 0xccafc235, 0xfc8cd815, 0x6c4c0879, - 0x0cc087df, 0x982708a5, 0xd8713541, 0xba224f60, 0x3fa85990, 0xf1bf35e3, - 0x7410e1ed, 0xef82af21, 0x3fae7081, 0x73a55d30, 0xc14d0726, 0x1e0fe87e, - 0x090f0732, 0xb2714d08, 0x7c73c245, 0x913c84e3, 0x660cb0e4, 0xf15decf8, - 0x21f846db, 0x1326a5bd, 0x8129ebc7, 0x0a28f1d1, 0xdd32f89d, 0x8444470c, - 0x4439e28f, 0x5904b4f7, 0x0816f365, 0xa30ccdde, 0x54df8614, 0x2881bf0d, - 0x4bc87387, 0x0df76ddc, 0x3547d3d4, 0x069f707c, 0xf1cf5b27, 0x1edf9588, - 0xad004f8d, 0xcd6be256, 0x227fef63, 0x71359d20, 0x49f920f6, 0x6e5cb168, - 0x39f9afed, 0x48afe1e4, 0xc05f384e, 0xf4f90083, 0x04db06a8, 0xb87b3bb4, - 0x1e0d21ff, 0xa5ace8d7, 0xde0bca36, 0xdc5b0212, 0x03e73fb7, 0xd3ad8939, - 0x3b0347f7, 0x1026e34d, 0xed6bfc80, 0xb2562dfe, 0xbf5a79bf, 0xb22187ee, - 0x5dacde2d, 0x169f912a, 0x41ba6fc0, 0x8b3edad0, 0x13dc2958, 0x7afb25ef, - 0xa1ecdad4, 0x5e76277b, 0x5874df2c, 0xef53805c, 0x3e75f9a0, 0x03c03465, - 0x0bdbd3df, 0xcbda0a7c, 0xe39de1a4, 0x8e164a8d, 0x8e7f177f, 0x7828e864, - 0x452fc133, 0xd7253ede, 0xfce39685, 0x8a728f0a, 0xdcd39ffc, 0xa0fecc0a, - 0x58bbf191, 0x28061324, 0x28a37d1c, 0xb858f911, 0x6c9e605b, 0xe636e8ea, - 0x50f13a77, 0xd478619f, 0x76f413ec, 0x71bbc148, 0x36ceeeea, 0xb070a3c3, - 0xf27c6a2b, 0x9f1a8868, 0x1be91d78, 0x6a71b5a9, 0xd194f488, 0x4a8d9ff1, - 0x235b6c6f, 0x42dae3e6, 0x4ba74f3a, 0x65ffef0e, 0x835f19e0, 0x9d75d199, - 0xcc5075f9, 0xba6101be, 0x91df665c, 0x5dff223f, 0xe2a48229, 0xfc5f1aba, - 0x6117f26a, 0x3d181a7a, 0x8f9d78a1, 0xf1a37cd1, 0x06bfa442, 0x8d55f1f4, - 0x67cdf20a, 0xd2af9cea, 0x3f3ab1fc, 0x337f7d70, 0x7d6c4973, 0x4686a6d2, - 0x9fa61ed5, 0xbe18b3b5, 0x7c21ee49, 0x295fd339, 0xc42f48ff, 0x4ef906b3, - 0x5ca74557, 0x5f8c75d5, 0x6d1131a1, 0xa62337c2, 0xff022ddd, 0x52fc11de, - 0x59f949d7, 0x7cd2f811, 0x8b4a67c4, 0x127fbd10, 0xb4ddcf1f, 0x1d1d51ae, - 0x90fc036e, 0x5e8227f1, 0x9d299fc6, 0x9be75ef2, 0x6ac7eb85, 0xfee019fc, - 0x45e88fa1, 0x7d3972fa, 0xd2fd2881, 0x65bcaef5, 0x14b48aed, 0x2004b38a, - 0x68f2c37a, 0xe7fc91f2, 0x9bff3a4b, 0x586f8442, 0xa13dbc1e, 0xa9bf3f59, - 0x64abf491, 0x6f2f4eb7, 0xf70bf587, 0xbff216fb, 0xea7c7a21, 0x53f5e8f2, - 0x667f73a0, 0xf53a5357, 0xfa43cf17, 0xbcfc69e6, 0x4853537f, 0xbf76fae5, - 0x67ac353b, 0xad12b365, 0xed85bf74, 0x6be31b71, 0x93b8de27, 0xbc0fe380, - 0x07c7cd1f, 0xb27b79ea, 0xc1af9b7b, 0x4d7ed91e, 0x7764e3e7, 0x7d72bd94, - 0xc4fd1df9, 0x4024f37b, 0x161fbd94, 0x4487dba3, 0x437baf9d, 0xa750e58f, - 0x1f5efe7e, 0xfc0fb7dd, 0x719f1a30, 0xc7bdbd36, 0x6fe91857, 0x5f1937d4, - 0xf9f4fc74, 0xd7a25f45, 0xddaaf3c3, 0x729afa6f, 0x320cdee8, 0xc49a56ff, - 0x71c75c21, 0xb56a47bc, 0xbf68a938, 0xbcd00be8, 0xc2cf416e, 0x873d309c, - 0xff99169e, 0x8085eb56, 0x196cfd07, 0x04ba56c8, 0xa5628267, 0xcb90f5fb, - 0x9c15e8b5, 0x7169f87f, 0x3df70051, 0xc59928b9, 0xadb81f9b, 0x5d87ff8c, - 0x6366d37d, 0x0cc250fb, 0x0ef38cab, 0xc1963b3d, 0x7fe93bb7, 0x337a47d7, - 0xc9a5ce2b, 0x97e65df9, 0xf6f0250e, 0xbedbf72a, 0xd5af28a5, 0xe7ed996e, - 0x5ad2924f, 0x39e13f50, 0x09916c0b, 0x098fef4f, 0x6de7b2bf, 0xfc239f03, - 0x4695de96, 0x41ff2ef2, 0x9c4f5149, 0xe2c2be57, 0xab5e7015, 0x7c274a49, - 0x658dcffd, 0xb96b30fa, 0x18fbd506, 0x4fd5f83c, 0xcf749dea, 0x1c58146e, - 0xcd17f773, 0xbb62e7ef, 0x4bd321b2, 0x30e81ea8, 0x9ce78481, 0x202fdf5e, - 0x899dcaa2, 0x3c777baf, 0xbf340f9f, 0x7c7cbaf2, 0x2f9a60fc, 0xfe70cb4a, - 0x7017ec39, 0x712adcfc, 0x397840b3, 0x2404dd1d, 0xc097dce9, 0x2b73f0ae, - 0xb865816c, 0x7fbb69cf, 0x673a7afa, 0xd29605bd, 0x93d7413a, 0x4e5f198f, - 0x3f5cba4b, 0xa1cfcc6e, 0x2dbd3679, 0xca9f2195, 0x157a9d4c, 0x2aefbc04, - 0xb5fb7912, 0xb6f91f4d, 0x2f73fae0, 0xaaf163f5, 0x276ca19c, 0xa19d3d7d, - 0x3ffb20ec, 0x462ed5f8, 0x3c4bfb5f, 0x51d03b6e, 0x111e569e, 0x315c5427, - 0x68387d33, 0x7c231f95, 0x23eb760f, 0x6a2f2ca8, 0xf8a12e4e, 0xe28cf511, - 0x45ebd46d, 0x1f126ebb, 0x2645ba36, 0x4ddf43af, 0xea472d1d, 0xf9867ab7, - 0xde64e289, 0x6d6eea3e, 0x9cafd154, 0x33822db5, 0xfaf5e159, 0xe8aef9fe, - 0x39983938, 0x81d128e1, 0xca30c679, 0xeb7cf453, 0x0733f533, 0xf533f1c9, - 0xe3630653, 0x43a74ad4, 0xde7fe725, 0x1c9330e1, 0x9c979a4e, 0x62b938a3, - 0xb9f985a3, 0x8ba98d8a, 0x414e29db, 0x5740f17d, 0x2c32927a, 0xda5b9e8c, - 0x2beedaa5, 0x07191dec, 0x5dad7fb4, 0xf36a6eb6, 0x6d6fd935, 0x5b129597, - 0x2d1b4503, 0xcaabb23e, 0xa0330e21, 0xf1b31cbf, 0xefa42d9d, 0xf3e20b95, - 0xe578886c, 0x53931b46, 0x4aa1c3ab, 0x3a77ee38, 0xaf0889cc, 0x6e8c4dba, - 0x60cc8657, 0xb8e60881, 0x5397063c, 0xf10d711e, 0xc5f6c649, 0xa3ac2f45, - 0x0412e4b4, 0x3d430d26, 0xfd70a6bd, 0x0c5bb6bc, 0x66047e50, 0xf98c5cc5, - 0x7ee01cd3, 0x5dbdfaa2, 0x39fc7cd6, 0x41f2aea7, 0xf9f965c8, 0xfcfc98e9, - 0x8e1e7474, 0xfe51a61b, 0x30aaffcd, 0xc43b24de, 0x5e6a3d7c, 0xd51e7e44, - 0xf2d0c96f, 0xa3c83ceb, 0x9d5aee38, 0xdd829b25, 0x13da3b4a, 0x41b059d2, - 0x2e56f860, 0xc4360312, 0xe79920b7, 0xa0976747, 0x5e8caddc, 0x2576c255, - 0x37c4b1e5, 0xf8710210, 0x0b0dbef3, 0x1767e4cc, 0x4ca57e6b, 0xdbe91f00, - 0xfa6f7899, 0x36c78a02, 0x56be33c6, 0xc7ee78fe, 0xd6bae12f, 0xa229c5a5, - 0x5e87d61c, 0xfee03e9a, 0xde149710, 0x67d2fce7, 0x0bdf49d2, 0x4857ee5e, - 0x22657871, 0x26e298ec, 0x974cf539, 0x9579e1ed, 0xe6ce9ecb, 0x8083e2f3, - 0x2ad970f1, 0x6f01d191, 0x521e02d8, 0x4520fec8, 0xf2d66df2, 0x1cd6acf7, - 0xd34a5bfe, 0xfc991ee2, 0x9c5faf37, 0xced171c6, 0xc676a7f8, 0x066ff8bd, - 0xf993d5ed, 0x57d13f09, 0x4c66126a, 0x5bb4fb60, 0x328b8ec9, 0xb7701e78, - 0xbdd2cb06, 0xea8f09d3, 0x32ef3635, 0x1c47df37, 0xb181e1aa, 0x5429b54d, - 0xf3c223f1, 0x0b779b4d, 0xbc796dc9, 0xb924ef12, 0x0e7af282, 0xad98c7ab, - 0xa72fb449, 0x76e64ab3, 0x989ffd8c, 0xc1dabfb1, 0x227560fd, 0x15cedbf2, - 0xb7fb84c4, 0xbe4cafd1, 0xf0dccf5f, 0x85f3cefa, 0xb99df8f0, 0x49e4afc4, - 0xdb1e108f, 0xc8af6645, 0x29c3358c, 0x0e2ed96e, 0xf1a64e7a, 0x57e445c3, - 0xc81cefe7, 0x1db2b6e2, 0x617bb21f, 0x56e726be, 0xc7296f2d, 0x33844ef6, - 0xf8bdb832, 0x666ba845, 0xe8bf9e6d, 0xabc7d6f2, 0x9c985957, 0x937fd1aa, - 0xfa5ea8e3, 0xb56fb65b, 0x79469423, 0x961bf556, 0xcb6fe4a1, 0x97cbfc35, - 0x09fd19f6, 0xc5b94fea, 0x543dd125, 0xa95b16a5, 0xb028d55d, 0x6a5d7876, - 0xe7e3e93a, 0x4938f7cb, 0x07c4ce4f, 0xb4df743d, 0x52f7882f, 0xc0da887e, - 0x97cf93ee, 0x873f367b, 0xc85259ed, 0xacf8e021, 0xc89332c7, 0x82949f2f, - 0xd93f1a56, 0x5b5136ec, 0xd4d1a491, 0x62dfcc56, 0x55d1cfed, 0x43fa6b35, - 0xe046a5fe, 0xed7aacf2, 0xcf0335b0, 0xffc9a95b, 0xb30ff6ca, 0xa756cfc9, - 0x397db287, 0x14d9de4c, 0x04cfc2ff, 0xbcd6df76, 0xba60ebc6, 0xde486bbc, - 0x34f35f68, 0xdeecd739, 0x7de924f3, 0xaf3bc90d, 0xdea0beab, 0xaffd611e, - 0xbe022a6f, 0xc5e908fe, 0x53cc7899, 0x05b97b79, 0xbcacc7db, 0xbfe6acfd, - 0xf790bfb0, 0x4f3c39ab, 0xac6b79e3, 0xbe4adfbe, 0x263f244d, 0xa7f31b0f, - 0xadbd1a4d, 0x9270deab, 0x3f6caefc, 0xc1c8eefc, 0x57e61784, 0x5ef44df2, - 0xd12d47e3, 0xb3f864ef, 0xe896a1b8, 0xefe98675, 0xdecd73d4, 0xa7d3816a, - 0xd66b5bd3, 0xb5c7d7e8, 0x3a345bf5, 0xd7e340ab, 0xbedc7eee, 0x7b227b34, - 0xa749fca5, 0xd7c49fcf, 0xbef9faeb, 0x4d6edf46, 0x766a414f, 0xbe487f12, - 0x7f5067e4, 0xcd50eb14, 0x2b94e06f, 0xfcb1373b, 0x8e979751, 0xfbe1a7ff, - 0x0a4c4942, 0x04d5b1cb, 0x5ded9a73, 0x1a23c5ef, 0xe8ad4f1f, 0xfc82de9e, - 0x06f31cfb, 0xbea36e96, 0xd3ce239a, 0xaf3f46f5, 0xfdc95b60, 0x86600eac, - 0x9fafed20, 0x304d527b, 0x81273ed3, 0xbf8e87db, 0xf505976e, 0xe81feed3, - 0x1c5779a4, 0x37443999, 0x0cd3ff3f, 0x5457ad89, 0x4af3f307, 0x7010108b, - 0xebc094e8, 0xec56a782, 0x84e79671, 0x327ffdf5, 0x62ff4e84, 0xa78aeb4e, - 0xfa117fae, 0x782cf0cc, 0xd4fdf276, 0x7a16f4fe, 0xd74df3a9, 0xca9c584f, - 0x3d5893e2, 0xca7dedad, 0xf6c5e74a, 0x19caf1eb, 0xfec97bca, 0x10faf2f7, - 0x5923872c, 0xeeb0f711, 0x0ecff1d7, 0x84f7c343, 0x65e72f7e, 0x2efa3066, - 0x1f35b341, 0x85d578fd, 0xa6539150, 0xf5644fb8, 0x08bfbba0, 0xb3d42e8a, - 0xbceeddaa, 0xeaad7bc8, 0xa7a611f2, 0x756210d5, 0x1f55b2cb, 0x7d230f16, - 0x45c629fc, 0x8c5757e4, 0x3d5c52b5, 0xa1cccb77, 0x0dd3e724, 0xb8badefc, - 0x142bc87c, 0x786e9f17, 0x0e666d21, 0x1a282bad, 0x6b65fd89, 0x9e393207, - 0x53150f89, 0x1171fdbb, 0x6a358ea8, 0x53c590cb, 0xd1ca3db1, 0x39e89137, - 0x8e1624d9, 0x2cfb908c, 0xa54f1690, 0x92eccc78, 0x6a4e0ec8, 0xc2deabfe, - 0x933bd2e5, 0x277279eb, 0xa0bafee4, 0x44db3ebe, 0x7e84db7c, 0xc5aee913, - 0xd507a018, 0xff1e054d, 0x5c42b1cc, 0x1fd63ccf, 0x4dfb13d7, 0x09aa2709, - 0x13c7b6ff, 0x4ddbaa24, 0x883781b3, 0xfb0769ed, 0xa6e851e4, 0xc6287168, - 0x9d5cecab, 0xbdf9fa4f, 0xc51eb932, 0xf5e20bee, 0xc76fa4a1, 0x19d63ab4, - 0xcb8bef0d, 0xee893a7f, 0x3d5b8ba5, 0xf9f74449, 0x140df1fd, 0x70b79cc7, - 0x7fefa57f, 0xd88f77bb, 0x77d88ef7, 0x0c65800d, 0x189901af, 0x6740253f, - 0xe3eba4fc, 0x70baeaed, 0xcdd78d22, 0xfaf53db5, 0x5ecd1ffa, 0xd64de257, - 0x12f2f0e9, 0xce365864, 0x9e083aa3, 0xe5f0985f, 0xd9c510ae, 0x86c9368d, - 0xbd259ef4, 0x86fab6c6, 0x1481eac8, 0x9f9e9313, 0x8050637d, 0x138ab7f2, - 0x2cd15dbc, 0x7884a804, 0x22b3ed64, 0x718d9fcd, 0x2221775e, 0xed717d6e, - 0x6bff5224, 0x9ecaff5e, 0x56daff38, 0xe037bd81, 0x5e263db0, 0xfca7b77d, - 0xf5578bef, 0xe754bffc, 0xa42ef6bb, 0x57cf5bf3, 0x0c5ea20e, 0xedf30bcf, - 0x2c3992ea, 0xc4bcbd5e, 0x709b60cf, 0x5628cd6a, 0xbab176e7, 0x5e5a2fef, - 0xdc917b10, 0x4ebc0f77, 0xbb48e779, 0xbdbb224b, 0x401164ba, 0x63abad36, - 0x5ebb9750, 0xf77bb9df, 0x6aeeb621, 0xa37da0cb, 0xbb01dd70, 0xcee7f98b, - 0xf79892f7, 0xbc58ef91, 0x7dd913dd, 0x7451dfc1, 0xd772ebf9, 0xded4abe9, - 0x2ffc7445, 0xdee5c53d, 0xd33aded9, 0xfa1ef449, 0x11bef251, 0x9704ef24, - 0xb9da7144, 0x5c5fdcf5, 0xf2bd7388, 0xc2fbca20, 0x80698986, 0xa1f6727e, - 0x7f512787, 0xa2417ec5, 0xbfbbdcf8, 0xd3f949c4, 0x4eadcdef, 0xbf7ef3ca, - 0x0abf7f5e, 0x469fe488, 0x3489838e, 0x0cd0647f, 0xe233ee32, 0x2337ae41, - 0x0a039b2e, 0xcfd83bc5, 0xbbd716ea, 0xfe05bab1, 0xfde09725, 0xaf2f7b39, - 0xd072e873, 0x1a51adf3, 0x9333079d, 0xfeb4ff38, 0xffbce182, 0xe35d86fc, - 0x4d8bbf69, 0xbef08916, 0xfb6164da, 0xc93cc3cf, 0x5b33ef44, 0xed421e79, - 0x37d93778, 0x35e637cf, 0x7aa37cf3, 0xbab14581, 0x4167eaba, 0xe7ca3cc4, - 0x73a64fb0, 0xa7fa6ae7, 0x853cedeb, 0xef0f37d3, 0x5637a235, 0x99a1138f, - 0x4edddbbd, 0x3d56ff9f, 0x37e31dde, 0xa982584e, 0xef9f8993, 0x77565e89, - 0xe87e85b9, 0x403f257c, 0xc3ebac7a, 0x0517d43c, 0x079a9287, 0xea3e93e6, - 0x9bfba1fa, 0xa5e35bf9, 0x2dfe51b3, 0xdb5daa31, 0x1b3a53d2, 0x7a69e719, - 0x99823908, 0xe9d2abe8, 0x535d6b8b, 0xf8a6b082, 0xc421150f, 0xafe88473, - 0x9152a4f0, 0xc05e8bef, 0xc69ed964, 0x642091de, 0x061ef601, 0x6a17ff4c, - 0xa2b1b075, 0xe519bfbd, 0xf3742a58, 0x96d93e52, 0x2e4d50ef, 0xf9327796, - 0x04253e96, 0xc44ffb00, 0x9ea9733b, 0x0e420330, 0xbb3fb637, 0x464d7643, - 0xf5ebd5f9, 0x2d63b56a, 0xe65767d5, 0xfffb5a8b, 0x3aa8944a, 0x8afdffc8, - 0x530f20ea, 0xffb5943d, 0xf6f5425a, 0x71b477b6, 0xe3425eb8, 0xab402b6d, - 0xdbc57d8b, 0x85c7d03f, 0xdb5fb409, 0xe45c7d2a, 0xfdf5e7ed, 0x98daf6b5, - 0xe331a5f1, 0x1ff6f12f, 0x504e227e, 0x88f5c273, 0x9ef7b527, 0x7d5a65d2, - 0x8336f4c2, 0x93df2cf6, 0x1d17cf54, 0xe7941d67, 0x27947914, 0x7bf0dde9, - 0xcd7ffd7d, 0x44af3844, 0x9f78ad50, 0xd9026fc1, 0xda75e7c4, 0xe1ffdd7c, - 0xc9bac83c, 0x6f3439bc, 0xcb3cd448, 0xda7de6cd, 0x376ebf75, 0x89e2979b, - 0xe77f4fde, 0x9c56e29d, 0x278f5f34, 0x94afef62, 0x8c471e2c, 0x699254ca, - 0xb40b239e, 0xe9bc42b8, 0x16615a3b, 0xbb4a038f, 0x99b677f1, 0x32711d43, - 0x37e431e2, 0xf9077afe, 0xbe3c0db3, 0x98efb57a, 0xf41fb43e, 0xc757be8e, - 0xcc43ef21, 0x3cb3b5af, 0x86fb8ff2, 0xd1bfc8b8, 0xebaf24db, 0xea9f7da5, - 0x759dc5ee, 0x67dfbea6, 0xacb74def, 0x409df543, 0x5f71a875, 0x66f3bd71, - 0xc93efcf5, 0x01b0da75, 0xb48fc8dd, 0x25effba4, 0xbb0da63c, 0xf9da88bb, - 0xaef662b6, 0xefafa3dd, 0x6b3fea1e, 0xa1089e52, 0x6346fb3e, 0x7f611b20, - 0xa2130a13, 0x983f0fda, 0x3d844a0c, 0x57b87a4e, 0xd291fb54, 0x53f9a8cc, - 0x3515dd67, 0x0d0b6c5e, 0xf69c7966, 0x78ab7cce, 0xc61df3a2, 0x9f3debc1, - 0xc7d3fbed, 0x6a1fa28f, 0x5d59126b, 0x2dfeee77, 0x70828f1f, 0xec46805c, - 0x74bdfb22, 0x93ca044c, 0x5757eb63, 0xb46eb420, 0x80f135f0, 0xe5c58474, - 0x8d1fa8ff, 0xc6a34bc8, 0xfb4567a7, 0x1f756bd3, 0x23180ba5, 0xac7568d5, - 0x594f7b2b, 0xbbff5e65, 0xeafd0371, 0xde90b47d, 0xfe903b3b, 0x2d7fa841, - 0x38adaca7, 0xe64b23de, 0x05ef4779, 0xe5007966, 0x4acc0b11, 0xa1171e84, - 0xbea8b81d, 0xde3f71d2, 0x83474878, 0x74d7d6c2, 0xb8bb5898, 0x5465b4d7, - 0xc336aa6f, 0xc754dd80, 0x6e2c1d90, 0x7df9fe2a, 0x67e580e3, 0x63f74282, - 0xe7c2a355, 0x4c1ebf8b, 0x1db1b0f5, 0xc53ed8e3, 0x50131c22, 0xe0281f37, - 0x31d5d17e, 0x76d7f581, 0x6e0f9b00, 0x54ace2ff, 0x7144aefe, 0x29aefe6f, - 0x72888985, 0x86795bb2, 0x2297ebf4, 0xfbbb222c, 0x86f7bde5, 0x5f7a1494, - 0x32283418, 0xc59358ff, 0x6a400ddf, 0x5df74ebf, 0x990481ed, 0xc5eac8e4, - 0xb7ed0f14, 0xec7c77b1, 0xda90f567, 0x94cdb603, 0xdb3ad5e7, 0x0afec9b3, - 0x8907c60e, 0xe307438e, 0xcdbf2ccd, 0x73a1aff4, 0x2bf60e0b, 0xd9537ca4, - 0xf3033367, 0x98f7ca63, 0xca589e3d, 0xd25d3ae4, 0xea37fb04, 0xbfbf6c63, - 0x4cabf381, 0x872ebbe3, 0x7eef8d72, 0x1a659f8d, 0xdf1067df, 0xc5f2ee91, - 0x587b6fc8, 0x29a2c52e, 0xb260fd7b, 0xca5e3e8f, 0x15bf743f, 0x8eaaf7cb, - 0xeaf7c638, 0x7c9a1e8e, 0xa1c945bb, 0xb58323bc, 0xdb7dba07, 0x7ae2ce89, - 0x5fee2f94, 0x287a0f6e, 0x17519a3f, 0x87f7a5ef, 0x45dd8b6b, 0xab85d7c4, - 0xfee6e1b0, 0x8ab5ee8b, 0x74add4df, 0x4a65c844, 0xb8c82e47, 0x2c8ec4df, - 0xebed5f06, 0x2e724bdf, 0xcecf18eb, 0x66c8ef29, 0xa95c62e7, 0x23fef8b0, - 0xfbffbe3d, 0x20b9c7be, 0x21811b30, 0x75dfca8a, 0x26ef3602, 0xcbfdfc21, - 0x54238c4c, 0x1696673c, 0x5b650e7f, 0x6c9b7f22, 0xf8424381, 0x72ff18fb, - 0x9da86a91, 0x3be5d7f6, 0x678c7c99, 0x26e5dd70, 0xd543930b, 0x950f5fa1, - 0x9092fc70, 0x4eec9ddf, 0xc47ff24d, 0x810995ee, 0xcf6c161d, 0x73977e7f, - 0x8fd61c84, 0x43d07366, 0xf919a67e, 0xe6b5f548, 0x00b8e2d5, 0x942667af, - 0x9eb5b80c, 0x83b8ebcc, 0xb79febf1, 0x286b4dd3, 0x66cb869f, 0xed879796, - 0xb78ef375, 0xb8127f48, 0x6ecadcfe, 0x58912cf7, 0xbf6b167c, 0x959eddba, - 0xf9227ffd, 0xcfadbbde, 0xfee11fe0, 0x584a5363, 0x99ef1cbd, 0x87583ca8, - 0x7f31eec9, 0xb3b7f9a1, 0xcac7bb6f, 0xcf6b12f8, 0x6db37d7a, 0xb2019dff, - 0xf68093f7, 0x2fb47a4f, 0xd9a2de41, 0xdd07f33b, 0xb3af815c, 0x339951f7, - 0xddef14ed, 0x9e1ddec4, 0xdece6fd4, 0xf23939bf, 0xf85201bc, 0x1c846afb, - 0xa43d50d7, 0xc9852db8, 0x2e9b9751, 0xba7e5d47, 0xfd963ebc, 0x637d1177, - 0xd775fdb6, 0xd55762ff, 0x53073deb, 0x793b767c, 0xfee1e3dc, 0x8f285ff6, - 0xf7373c7b, 0xfe7af7bf, 0x7e8bff09, 0xe26ec072, 0x5bc3a64f, 0xa3f9872f, - 0xb741e3cb, 0x2433d8bf, 0x68241fcc, 0x6f4fd530, 0x9ee98fc7, 0x99fefc6f, - 0x67fa0b7e, 0xfff433fc, 0x1292f9c3, 0x78b12f9d, 0x49e50466, 0x5527963e, - 0xfc83bd53, 0x4fe818df, 0x15bd59f1, 0x9aa43e58, 0xee4979ba, 0x42d97625, - 0xc5259771, 0x3afd216b, 0xbea211ea, 0x48f56bef, 0x2496087d, 0xbd0ddfe8, - 0x128cf2cd, 0x43cb4997, 0x30f6f30e, 0x09bdfc7d, 0x0c94d794, 0x18e1c6d2, - 0x6c089f1f, 0x472df9fc, 0xcdb25e59, 0xfc20aca3, 0x4c48f05e, 0x74b7173e, - 0xfde7e3ef, 0x5747c40d, 0x04bbffb2, 0x5676ad6b, 0xda136b4f, 0xc3b91773, - 0xdfb57ff3, 0x8817f271, 0xaca3c877, 0x502f79a1, 0x12352231, 0x16ad79f2, - 0x84e6f748, 0x5601cbfb, 0xae58bdd0, 0x6044fd1e, 0x1c3c1df1, 0x1fbe9437, - 0x959f7604, 0x35b1dfeb, 0x06c77f44, 0xb3e3175e, 0xfea11dfe, 0xb09de09d, - 0xd7bed25c, 0xf92370db, 0x866ce4eb, 0xafdf1173, 0x2e9059b5, 0x22efd757, - 0xff477d85, 0xabd6fb42, 0xf2cf1ad0, 0xd7efe8d9, 0x4f3013aa, 0x7b287e45, - 0xca3b411c, 0x04f6e171, 0xab986756, 0xa47b8fd7, 0x31f44bb0, 0x3d03d389, - 0xfd7dd8d2, 0xe74ba6b8, 0x2cff4097, 0x6fcdc533, 0x1e23355f, 0xeff1f66f, - 0x99543925, 0x285f483e, 0xdea45d53, 0x95d0f749, 0x4a97a21d, 0x9d5a5530, - 0xb5529a1e, 0xbc188afa, 0xb98fc717, 0xf54cdcef, 0xfe1ec3bd, 0x0dd9714e, - 0x5d519dec, 0x10b6936a, 0xa70fd72e, 0x71ed8d3f, 0xe979f719, 0xcef2eefd, - 0xa366b367, 0xc05ad01c, 0x00fae2c9, 0x36c1675b, 0xd2b91f7d, 0x96ba42fd, - 0x4220fbbf, 0xbb9f3a1e, 0xa28f1ff0, 0x0e29bdfa, 0x09dede98, 0xc78a241b, - 0xa58c3975, 0x838a53c7, 0xc8efe0de, 0x6ce8050b, 0x3e725c53, 0x5dfbe78e, - 0xb0ef8beb, 0x52cd017c, 0x6cdbaa8d, 0xfcf37998, 0xa5602522, 0xbae9bfad, - 0xf68f25e3, 0x06103e4e, 0x791deff2, 0x9b52a35d, 0x952c5633, 0x6a4f44cd, - 0xbfe4979c, 0x77666370, 0x7c3043f2, 0x83ce441d, 0x2f4cc90d, 0x1845ba56, - 0xb7367a8e, 0xfba4c905, 0x160ee5a8, 0x92d83df7, 0xe313a0c4, 0xf8bfea4e, - 0x7983fbca, 0xa7cb871d, 0x63eed5f8, 0x6afb1c58, 0xf563063f, 0x4fb9fcd6, - 0xd84b77a1, 0x123ab023, 0x75ca12f9, 0xc7563d75, 0x6eac8378, 0xeec096f7, - 0xbf9b293d, 0x75495463, 0xd20e1dec, 0xc22f2c7d, 0x2ec94b25, 0x6cddf45d, - 0x8faeff12, 0xf7dacce5, 0x3e4d4eb1, 0x7df9d009, 0x881bef6c, 0xccb67277, - 0x3d208bbf, 0x264949c1, 0x5cfc9bb7, 0x393fb66a, 0xe6bde29b, 0x9f54459d, - 0x4aea0b9a, 0x13d94770, 0x6ae848dc, 0x77b497a7, 0x2b0f5d31, 0x852173b5, - 0xc6855feb, 0x3e8d4ad6, 0x2b5418cb, 0x4772cfa4, 0x377ae6f6, 0x80fe8691, - 0x1f0adf7d, 0x40fe3dfc, 0x3f7407bf, 0x2cf535fd, 0xc7d2cfc6, 0x7ce3ddb9, - 0x0ffd175e, 0x511f5021, 0x6faceac7, 0x77b0233d, 0x326ebd6d, 0xbd0a0ccd, - 0x095422ef, 0xd2f7d296, 0x8598e104, 0x62e38b9d, 0x8cc3ab12, 0x63ebfc62, - 0xd39d5952, 0x9830ebce, 0xfd43dc27, 0xbf66ead7, 0x7920f8cb, 0xc51bf7d9, - 0x6c4f5e36, 0xdf644f7f, 0xee8add1f, 0x555e5af1, 0x6f62e07b, 0x5f71dbb2, - 0xf7e27e89, 0x11e38b71, 0x67c753ca, 0xf197f7f3, 0x9828a6d9, 0xe98bfb2e, - 0xea3b3fdc, 0x5f909ba6, 0xc167be7f, 0x8771df2b, 0xae887ae9, 0x40a7ba2c, - 0x4d3e90b6, 0x371de504, 0xf06df56e, 0x5064f6b3, 0xf7496c19, 0xa54eca4f, - 0xac0310ef, 0x7dc47c7d, 0x8b125eac, 0x655e2c7f, 0x2c5efcd9, 0xc14536cb, - 0xcfdfb271, 0x5e1852f1, 0xd1365fb8, 0x24f5e3a5, 0xdfea4ee9, 0x88555f25, - 0x7ccaef90, 0x02d7df91, 0xf2c3afbf, 0x25496b1d, 0xbd108ef9, 0x0c17ab4c, - 0xe0f48479, 0xa5eadd9a, 0xbe5d3b77, 0x9bde8108, 0x638e72c3, 0x88ba52fa, - 0x6c91cbeb, 0x6a0baf37, 0x580e4772, 0xf942ae28, 0x9a7c4d3f, 0x75e44237, - 0x3fe50938, 0x4addc980, 0x82995e36, 0x2ae8cf72, 0xde2d5adf, 0x66e2d1ad, - 0x66f51fbd, 0xeae9f105, 0x89fd61de, 0x4607b53f, 0x7a9fc4c8, 0xd4dbcf13, - 0xd0ead6ff, 0xa38bc99a, 0x47ef62ee, 0x297af660, 0x45be2aff, 0x9355b29e, - 0x961ef1cb, 0x5fb60171, 0x4076bbf4, 0xa6809fd3, 0x9c70ff57, 0xe2a21fd5, - 0xffa211ac, 0x754fe265, 0xf32b55dc, 0xfe7bda63, 0x19b37a56, 0xd11fd612, - 0xb26ff0ea, 0xf5cbe247, 0x55f9f506, 0x44e7ff5a, 0xa64ce7d4, 0xef28e7cf, - 0x75e56e3c, 0x156456e7, 0xff107ffd, 0xccbbfccb, 0x3e9a77f0, 0xbc512b06, - 0x8042e704, 0xbad0f9c1, 0x9fce1072, 0x469658d8, 0xfc9854f8, 0xa2ad3eec, - 0x3be9bc2f, 0xec2f681b, 0x76fcfc81, 0x7a77d2c3, 0x5e538a20, 0x5c285b74, - 0xb041b49b, 0x97be40f4, 0x41582d34, 0xb78fb46d, 0xb70f4e48, 0x0ee77a6c, - 0xe39d17ec, 0x8f1c7d98, 0x1cac5391, 0x45fc6b0e, 0xd39b787b, 0x70ba30a5, - 0xa1ed4dfd, 0xe12bdd06, 0x01ffffa5, 0xd5b93efd, 0xefd023ff, 0xe3781b15, - 0x7a6ec8e2, 0x3fbfcc83, 0xf3e7f68f, 0xfa27df80, 0x923afa7e, 0xf397dd20, - 0xf4979ba1, 0xfb8592ea, 0x807d4bcd, 0x0125c1d9, 0xf0bcec2f, 0xfee906fd, - 0xe199791e, 0xf4d6a37b, 0x39f92e5a, 0xc77e57bc, 0xe699e2fc, 0xe4dd0395, - 0x64e903ff, 0xd99f96af, 0x735ff5bc, 0x9510ccbf, 0x80ceb4d3, 0x01a03406, - 0x0340680d, 0x0680d01a, 0x0d01a034, 0x1a034068, 0x340680d0, 0x680d01a0, - 0xd01a0340, 0xa0340680, 0x40680d01, 0x80d01a03, 0x01a03406, 0x0340680d, - 0x0680d01a, 0x0d01a034, 0x1a034068, 0x340680d0, 0x680d01a0, 0xd01a0340, - 0xa0340680, 0x40680d01, 0x80d01a03, 0x01a03406, 0x0340680d, 0x055ff01a, - 0x328d1fff, 0x800060f6, 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, - 0x30001131, 0xee300408, 0xd80ea5ea, 0xabdef271, 0x964d2104, 0x5dbbcce4, - 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, - 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, - 0xee017e3f, 0x0014ab55, 0x000014ab, 0x00088b1f, 0x00000000, 0xc5edff00, - 0x30001131, 0xee300408, 0xd80ea5ea, 0xabdef271, 0x964d2104, 0x5dbbcce4, - 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, - 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, - 0xee017e3f, 0x0014ab55, 0x000014ab, 0x00088b1f, 0x00000000, 0xc5edff00, - 0x30001131, 0xee300408, 0xd80ea5ea, 0xabdef271, 0x964d2104, 0x5dbbcce4, - 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, - 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, - 0xee017e3f, 0x0014ab55, 0x000014ab, 0x00088b1f, 0x00000000, 0xc5edff00, - 0x30001131, 0xee300408, 0xd80ea5ea, 0xabdef271, 0x964d2104, 0x5dbbcce4, - 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, - 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, - 0xee017e3f, 0x0014ab55, 0x000014ab, 0x00088b1f, 0x00000000, 0xc5edff00, - 0x30001131, 0xee300408, 0xd80ea5ea, 0xabdef271, 0x964d2104, 0x5dbbcce4, - 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, - 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, - 0xee017e3f, 0x0014ab55, 0x000014ab, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000000, + 0x00000000, 0x00007ff8, 0x00000000, 0x00003500, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, - 0x40000000, 0x00088b1f, 0x00000000, 0x62f3ff00, 0x51f86063, 0x408cc10f, - 0x7f120cb6, 0x66476028, 0x48107d08, 0xf3e2061f, 0x2fe9a48c, 0xb9b04160, - 0x40afec80, 0xa8597833, 0x88a1bee7, 0xcfd2738f, 0x81ae792e, 0x66322ff7, - 0xe86067e6, 0x6ff047e4, 0xb3caa3f2, 0x3dd7d3f0, 0xb000c6b4, 0x00eeff4a, - 0x0000eeff, 0x00088b1f, 0x00000000, 0x7dd5ff00, 0xc554780b, 0x3d9cf0d9, - 0x3764dd97, 0x2485cd9b, 0x200d8410, 0x125c40a2, 0x126e20ee, 0xc3116088, - 0x65e28145, 0xb201ae41, 0xdb3f6911, 0x5cbb7ffa, 0xc6d6a444, 0xa0b45b4b, - 0x06a2828b, 0x82482459, 0xa5c8ba1b, 0x5835b5b4, 0x0da978aa, 0x24c4dc88, - 0x97f4b004, 0x3bef3fca, 0xce7bbb33, 0xf4bc4c6e, 0x7d6f9ffb, 0x7339867c, - 0xef3bccce, 0x6779de7d, 0x313b10a2, 0x0ae42775, 0x64246efc, 0x19084c99, - 0xbbc32d14, 0x32413cbf, 0x46bcf909, 0x08f39a75, 0x86a1d929, 0xc5f5a46f, - 0xd400a41b, 0x0893bb4d, 0xd3484819, 0xcaf7563a, 0xa08e8f0d, 0x4ca764ed, - 0x8482d136, 0x4592266d, 0x610b09c8, 0xd60a673f, 0xeab126e7, 0xee7b0de2, - 0xd7e7fe82, 0xfd12499a, 0xec8d44fe, 0x4d92fa86, 0xb4488052, 0xad21eebd, - 0x5e7fed0b, 0x39260a40, 0x63d37d69, 0x9085339a, 0x6cbfbbe5, 0x5c057182, - 0xe2167c67, 0xbfbe00d4, 0x23f63565, 0xadb03ca4, 0xa7ed0bb4, 0x99725abc, - 0xebe538e8, 0x038df0a4, 0x9014b9e1, 0x370bbf69, 0x0fb3895b, 0xc10ae183, - 0x4b1e7171, 0x6971d3d6, 0xd2a9447f, 0xe3a252ca, 0xf19cfc09, 0x4471c5ad, - 0x744bf17d, 0xc55dfa1c, 0xa60b92ab, 0x9e226158, 0xa9bf1d20, 0xf3da692e, - 0x32df9836, 0xec4a77ad, 0x0ebe663c, 0x6c0f28f3, 0x006d4ad0, 0x6e6d06d7, - 0x0b7f68bf, 0x0f56ff37, 0xd99edad7, 0x6376989e, 0x5147c679, 0x2f5a3bda, - 0xb41dc427, 0x6d01fc01, 0xf3e8ff62, 0x908d295a, 0x4cbfd04e, 0xff68969c, - 0xb9f1f884, 0xc0615c4c, 0xb8a5093b, 0xead6e962, 0x496dd3d0, 0x0db6ff1a, - 0xe9c97e78, 0x81cf98f0, 0x1cbe13e5, 0x73e57f2c, 0xf1bf9c22, 0x29f2c1f5, - 0xff9f0b9f, 0xcb1437d6, 0x96373ef5, 0x62c6facf, 0x8657c1b9, 0x9bef3def, - 0x9f26e586, 0xe8bf9f07, 0x4be58f9b, 0xfe7c4abe, 0x2c7eef8a, 0xf8fcf8b7, - 0x356fab7c, 0x557cdb96, 0xf4e76e58, 0xe00be1da, 0x9b7d3b7b, 0x05f3acb1, - 0xbe1bf9f1, 0x017f2c5a, 0xaa65a478, 0xa14cb1db, 0x4d1d4a74, 0x484d941c, - 0x32d95946, 0xa633d695, 0xa7b67ab0, 0xf146996a, 0xd69b3d94, 0x2b731d29, - 0x6999961b, 0xd652ee7b, 0x58efddde, 0xddeda16e, 0x9ef6b257, 0x93cb6555, - 0x27cf7b68, 0x8135fb59, 0xb4c9e5aa, 0xac8d9afd, 0x61b06fbd, 0xf7b695b9, - 0xd7ed61ad, 0x6c2b1d87, 0x3efd7eb4, 0x286c2f56, 0xeb42915b, 0x7d598785, - 0x0ad56348, 0xc87efd3b, 0x88fdf671, 0x4ceca096, 0x55db1fc0, 0xd2843dd7, - 0x52fed7ee, 0xd68c32b7, 0xc47dd735, 0xff66c845, 0x33a56ead, 0x865a87c5, - 0xd3fcbbed, 0xc32b5d58, 0x33fcb7f6, 0x6a9dfdf1, 0xec7fb625, 0x9df6c72f, - 0xb7b6255a, 0xf6c3eff8, 0xdb0ab53a, 0x601ecb4d, 0xdb0aad75, 0x883d9733, - 0x52a1bfef, 0xd2138760, 0x6ea3d97b, 0x966f853f, 0x7d02a9e4, 0x9caa6cd2, - 0x28b7404f, 0xaf901ce1, 0x0d322487, 0xc4a7e5e4, 0xa1e6fa89, 0xc83734ab, - 0x8343f6e1, 0xc539079f, 0xe7d4265f, 0x0f26b0be, 0xfb0a79fb, 0x3d3f68d1, - 0xf0a7efdb, 0x7ebaa19d, 0x2f99df0a, 0xf80e79fa, 0x63b939be, 0x677f6cfd, - 0x779e1eb8, 0xaf3f45ca, 0x8ef63f60, 0xaff0abcd, 0xfcf0f523, 0xa7e89175, - 0xde95e706, 0xbc767831, 0x1793f14f, 0xfbc767ed, 0xf6123f14, 0x64fd8f53, - 0x419e0c75, 0xf5d50c1f, 0xf983e833, 0xd8039fa2, 0xf58e974f, 0xe183e3b3, - 0x283e787a, 0x8dbcfd17, 0xd8eb74fd, 0x387d06bc, 0x87cf0f52, 0x473f448b, - 0x1d1e9fb0, 0x51e767eb, 0x1e767e3d, 0x28e7e08d, 0x63bbd3f6, 0x4c721af3, - 0xc7219f8f, 0x8339f822, 0x63aebf74, 0xa63cecfd, 0x63cecfc7, 0x479cfc11, - 0x363bf278, 0xe89f21af, 0x93e433f1, 0x632e7e08, 0x831d053f, 0x1eb4eea7, - 0x23a7753f, 0x982551f8, 0xc18ee0d7, 0x1e8cec33, 0x44cec33f, 0x009763f0, - 0xeb1de19e, 0x1e8ceea7, 0x2267753f, 0x7846c9f8, 0x5e6c7546, 0xe3d33ec3, - 0x1167d867, 0x9e1138fc, 0x08cdcae2, 0xf4fda10f, 0x379fbb6f, 0xcff5e9ce, - 0xfe98e71b, 0x8fc47819, 0x21cd57fa, 0x6467002e, 0xa25f994b, 0xd6932575, - 0x89ba509d, 0x055fda87, 0xf83f70ec, 0xd32fd1b8, 0xb4ea94f6, 0x58ce3582, - 0x02ec5c7b, 0x4d03ec78, 0x18ef7b3a, 0xa7abac99, 0xd9d74e8f, 0x5df1cceb, - 0x29acf574, 0x9cf5743d, 0x7dd3ae3b, 0x817665df, 0xd175deae, 0xdbbd5d70, - 0xf7dd62d2, 0xd66e07ce, 0x3958f7b5, 0xf5ef5749, 0xf5750fc8, 0xd2ce4fde, - 0x2bacfbd5, 0xdd77f5d7, 0x7aba25c6, 0xea9feabf, 0xcb35f9ea, 0x68577575, - 0xb05eae8d, 0xff5d71ef, 0x5a7adf03, 0xf87c1f57, 0xe87d5d39, 0xbeeb2f47, - 0x35fc7e1f, 0xd9e47d5d, 0xc7ff065d, 0x97d138e6, 0x77f065d7, 0x9a07e8ad, - 0xcfe869bb, 0x60b37516, 0x6cddc7fd, 0x28f1ff58, 0x4a0e35cf, 0x07c39fd7, - 0x58fdeed4, 0x48ef5cf3, 0x25297f60, 0x4a07244d, 0x8d0c898f, 0x52ad5f6f, - 0x527ca3be, 0xef72fddc, 0x9af4b4a3, 0xd1a77a5a, 0xa2a6eff2, 0x3f17c0a5, - 0x97e84c95, 0x09526559, 0x1335647c, 0x57d5cbe4, 0x1fde7e0f, 0xe70fdfc3, - 0xfd14be31, 0xe656ac3e, 0xeffe1d80, 0x83f3bf65, 0x4f287e1d, 0x93ec3b43, - 0xf7f6177e, 0xfde7dfa2, 0x49fc0738, 0xd4fd468b, 0x3a35f1d8, 0x7f1c3f7e, - 0xa6bf8c25, 0xbd2df18d, 0x4fc6ea87, 0x375f31ea, 0xc746927e, 0xe8f21077, - 0xf1f3dfb2, 0x50bafe29, 0x3dfa50bf, 0x71e96f8e, 0x5abf8e3f, 0xe375f323, - 0x7fc64727, 0x69fde412, 0x82507f18, 0xae1ef7f9, 0x728f7f9f, 0x3635fcfd, - 0xbd9667ff, 0xc64fc7cd, 0xbd2b3ff9, 0xe3dfe6cd, 0x66fe6ca7, 0xf8ec6fda, - 0x37fe08f6, 0xb72ff8c2, 0x9ae5be31, 0xf7f9fa91, 0xbf9fa45c, 0xeaff8d99, - 0xf8f8f7b2, 0xab7f1c36, 0x7f9b1ef4, 0x7c7007cf, 0xe5d2b9b3, 0xeee64da0, - 0xd00195c9, 0x263dd413, 0x746020d9, 0x2820219c, 0xefd084e9, 0x903d4817, - 0xa64e3f0e, 0xffdf477c, 0x1bf29922, 0x6fdcf7f8, 0x12558127, 0x1dd74c19, - 0x5767a79c, 0x417ed4cf, 0xcb5d993f, 0xae8433d6, 0xf0a6ae77, 0xff9ed535, - 0xef0a43e2, 0x50038dec, 0x274e514f, 0x3e1cddf0, 0xf0ccaf15, 0xb7594841, - 0x12bf5489, 0xa4dbaca5, 0x06e4d8fe, 0x411e7fbf, 0x78f8e318, 0xa27a954e, - 0xe6fe4631, 0x17d7d5ad, 0x0175f404, 0x09301177, 0xa4c5fd2d, 0xf71d254f, - 0x10275d18, 0x447f97ea, 0x594270fd, 0xdc9513f6, 0xf2f1465d, 0x404f5d31, - 0x27ae91bd, 0x4cae9da0, 0x14c72e91, 0xb63bf382, 0x7a001ada, 0x0193f17c, - 0xbb87d81a, 0x1bf2a7ef, 0x727edf2b, 0x5fc28738, 0xd339e7c6, 0x076fa19f, - 0x4c3c53bc, 0x0b2bf3e4, 0x974f1e2d, 0xd59ee4c4, 0x459954b9, 0xf24a6bdf, - 0x54ffd0a8, 0xe9b356e2, 0x9d2e7778, 0x5f107aa8, 0xca135cee, 0x5135c939, - 0x56e89f39, 0xf4c6358f, 0x8066a93f, 0x93227b4a, 0xdf9feac7, 0x37afa656, - 0x44d56ea9, 0x5134d3e9, 0xdda81b22, 0xdf4d3a99, 0x2339c62e, 0xc5fce3a5, - 0x6e746578, 0x9e61d39d, 0xeffa63f4, 0x3cd83a1f, 0x34bc3ae8, 0x3f73d617, - 0x689b5c90, 0x57bc2a7d, 0xa83d7400, 0xb769f3c1, 0x90d6b9a4, 0x92897878, - 0xe11cfd83, 0xca23bceb, 0xcd0c5fa6, 0x83ff878b, 0x29b756dd, 0x461e7e3f, - 0xa093a7b8, 0xba76f60a, 0xc67cff47, 0x18fce37c, 0x74e09c5f, 0x407c063e, - 0x07c093cb, 0x39c7cf14, 0x2bf5441f, 0xc01383e3, 0x4eb09907, 0xa7307c66, - 0x6ffd312a, 0x479ff4e7, 0x29676afc, 0x9ca9f74a, 0xba73b7ee, 0xe7ab5bcf, - 0x3cf9b88f, 0x1cc1e1b9, 0x3cf98267, 0xa62547b2, 0x657979f8, 0x2ff91f06, - 0x8e89b029, 0xbea5677b, 0xfd0376fd, 0x777e9c3c, 0x7165e846, 0xbf3e5197, - 0x011927eb, 0x7c7133d0, 0x31f5e9c1, 0xb5b4d7a7, 0x4cefed8f, 0xe46be1e2, - 0xf6b13af4, 0xfb44d579, 0x112f9c6b, 0xf08c6ff0, 0x9bbbe11a, 0xdfa03438, - 0x9febf7dd, 0xa627f4cf, 0x28b6b79f, 0xf3cc78e3, 0x1971c1c5, 0x68e463c7, - 0xba89e6e1, 0x74c082fa, 0xd6f3fbdd, 0xcfb5d4ce, 0x6ba05aa9, 0xbdf567bf, - 0xff4cfaba, 0xdfef744f, 0x5d32ff7d, 0x0f959dfb, 0xcc67daeb, 0x9f574c7f, - 0xf74a79ee, 0x1b69d4fe, 0x95b7ed74, 0x9f6ba4bd, 0xae9b763c, 0xa75dd13e, - 0xbdda5f7b, 0x9fc43ba0, 0xd9e79abc, 0xbd9b886c, 0x49cf266f, 0xe84c7af1, - 0x273ee3bb, 0xebe13f3e, 0x9f29e583, 0xf19f9f0b, 0x1972c50d, 0x176a71e8, - 0xf4ac754c, 0x3bb33e3e, 0x07217fe8, 0x6eaea89f, 0x7a8d3fa0, 0xc4e7a8cf, - 0x46bd46fb, 0xa7e0b97f, 0x59cf15b4, 0xb0329124, 0xf312cd0b, 0x43f3c457, - 0xb2123edc, 0x1a45cb1c, 0xaf45d393, 0x39062e75, 0x7b85a45a, 0xeedada57, - 0x9c250497, 0x9eaa9ccf, 0xade7383a, 0xef806bed, 0x05abe439, 0xf3dd4281, - 0xe8479b85, 0x47bb3bbe, 0x402af846, 0xff8187b6, 0x04deb65d, 0xb7bc31f6, - 0x00fee4db, 0x1319fbaf, 0x09db5bc0, 0xdf59eaed, 0x0ae38cd8, 0xcb0cb9e0, - 0x5869be53, 0xb079f09e, 0x8f9bee3c, 0x255f31e5, 0xfbbe8d96, 0xe7d8fcb1, - 0xdf23f2c7, 0xf03f2c6a, 0xc4796155, 0x77cb16b7, 0x0f2c017d, 0xf96336fb, - 0x65882f8e, 0xcb16af83, 0x4b1b9f26, 0xfc312f21, 0x0c73bdd2, 0x277d08bf, - 0xce29e1f4, 0x5f80672f, 0x73c5f112, 0xa938be7a, 0x185f2256, 0x0e91a1f5, - 0x6df77d46, 0xf4dd21f9, 0x9443f0fd, 0x7a06b9de, 0xde8f6cf7, 0x397d221f, - 0x0e4dd3bd, 0xf7a70f06, 0x45780623, 0x041281a9, 0x7e6665bd, 0x595b711e, - 0xabc453dc, 0x7b8b3249, 0x337578f2, 0xbc0377fd, 0x10fb04a7, 0xbf6b5fda, - 0xe21bdbff, 0xcc47adcc, 0x3db5e484, 0xdafd233f, 0x9bf103c4, 0xc9ff0ebe, - 0x14af0cc9, 0xda84b1aa, 0xbed73587, 0xeac59aee, 0x423b010a, 0xb8d8ae82, - 0xc05fa46f, 0x78fb7665, 0x7f31374d, 0x6657bad3, 0x776f08f8, 0xf2894e4d, - 0xd2dcd7ab, 0x95f833bb, 0xd8099a1f, 0xe9b01233, 0xf5a7e5f1, 0xb57c51c1, - 0xf4f68f35, 0xfc2fffde, 0xda8fa7b4, 0xa48743d3, 0x735fc7af, 0x24f75d31, - 0x008e2f58, 0x6df41c3e, 0x1ba1b0f8, 0xf81061f0, 0x5adff69d, 0xe92a4d73, - 0x66e7ed17, 0x13af9393, 0xde4e9ebe, 0xd37e0854, 0x1334537e, 0xcbae9eb9, - 0xf24dcf65, 0x5dcff020, 0x6f4a7e8d, 0x6bab6eff, 0x49d61385, 0x7612fe67, - 0x75fa17c2, 0xe7c1eb73, 0x59aeb0ed, 0x1c726392, 0x3e9b6c2f, 0x0e79838b, - 0x547fac5b, 0x56b7afab, 0xdc596349, 0xa53a99c4, 0x8769e83f, 0xd02f78e3, - 0x8a58399b, 0x68e4967e, 0xf019e38e, 0x79c9805e, 0x81ea1a75, 0xbe0b3e33, - 0xd1c37df7, 0x38513f56, 0xf427c86a, 0x2b89107b, 0xbf7edb3d, 0x2e56be4d, - 0x228f1068, 0x580bf521, 0xffd1252f, 0x7e80f4af, 0x7e8bac15, 0x6fd941bd, - 0x579e1ebe, 0xdfa3c6eb, 0x1b1ec539, 0xfcb6d77c, 0xe084e428, 0x3f374a5f, - 0x2fb8a7f8, 0xfbd0e494, 0xbaba696d, 0x43b3b6b7, 0x3fc1c7e7, 0x2d1cd1c0, - 0x8b47c029, 0x2b355b38, 0x8512d5b6, 0x322c066f, 0xf6259f81, 0xa34b62de, - 0x968fa1e6, 0x7f4148ec, 0x7c63c978, 0x1a4fcd9f, 0x4359fbe0, 0x29970779, - 0x51fd3154, 0xb44c470b, 0x89af0f7e, 0x3559aefd, 0xff5fd10b, 0xdd71f894, - 0x1aae5a77, 0x796a7e0c, 0xa6e68370, 0x989cfb74, 0xffbe82c6, 0x2f63bc9c, - 0x57b7918c, 0x7be70d64, 0xffbd6acf, 0xbab1d74a, 0xeac75d3a, 0xa4c973ea, - 0x9a17d82c, 0x974aa4fb, 0xd5aeb8d4, 0x7656ffb5, 0x91e77ce0, 0x876055ca, - 0xbc29a93f, 0x71e0047d, 0xb0c1fae7, 0x9b459c4e, 0x29fea973, 0x03487cdf, - 0xe3a6f939, 0x0bef802f, 0xf315c7e2, 0xe407db8a, 0x59bc5878, 0xd8120772, - 0xf76e5abd, 0x3bfa5e84, 0x1eb31fc0, 0x23e7cd3f, 0x3f9adfea, 0x65c32932, - 0x4339e945, 0xc1921cf6, 0xa49f008e, 0x5be2f946, 0xd7139ff7, 0xd7bfdfff, - 0x1d12bbfe, 0x4ffed37f, 0xdefc5e83, 0x0715effa, 0xf044c5ff, 0xb22c3a0b, - 0x17c01c34, 0xbe096e1d, 0x14dcb853, 0x7c60714d, 0x725ab9aa, 0xc4fbe999, - 0x2c8e9c4d, 0x3d601fa6, 0x6a5afcd9, 0xe1bd413e, 0x1f3a6e20, 0x552e7f2b, - 0xd123d9ef, 0x3b4ae175, 0xfe51a771, 0x9953e954, 0x692ad1ca, 0xe5a24580, - 0x7f739ae2, 0x9bf68379, 0x88099214, 0xa1853374, 0xdd97f701, 0xac776069, - 0x03b411e4, 0x257ec7b0, 0xd1a70a23, 0x0578103e, 0x8d8397ec, 0x61b6463b, - 0x9d75a6fc, 0x9955718c, 0x919bf75c, 0x0f782f54, 0xeda2f952, 0xb405f0ad, - 0x5d7095af, 0x04b07adf, 0x24eaf3eb, 0x6beb4192, 0x60f9ec93, 0x26dcd2af, - 0x63373c5d, 0x4e7e3eac, 0x5806eefc, 0xf3e6cfff, 0x1c00c405, 0x53bd790b, - 0x7de1ba59, 0x5c4c5ffa, 0xee67b66c, 0x93f14278, 0x771f4d3d, 0x723f285f, - 0xed3ae200, 0x06ed6dca, 0x9463900d, 0xf59b85db, 0x21b78175, 0x09e64a4a, - 0x6236c9b0, 0xadb5bc03, 0x67c1dbc7, 0x8cdfef63, 0x7c71d81c, 0xce64f11a, - 0xc935e3d1, 0xb5abc7a9, 0x066f018f, 0xf4b8a6bc, 0x3a66a2f8, 0xa9af0890, - 0xfae87b43, 0x7af1bef9, 0x6fb3e017, 0x57f49f14, 0xa262c966, 0x56767007, - 0x46ffc8c2, 0x85b5c979, 0x55f7f825, 0xf8658199, 0xf5052b95, 0x5f870e40, - 0xb3becd9a, 0x60c8bc82, 0x2f285d55, 0x3b046910, 0x391f256e, 0xf2268e80, - 0xb7d2b909, 0x37de3a6d, 0x59d1df71, 0xc075abf4, 0x1f23d7cf, 0xe9fc5d20, - 0x0f22b024, 0x00e5d1e4, 0x59f416bb, 0xbae9b39c, 0x711f55f1, 0xcdfea6ce, - 0x96073e6b, 0xf7b0168f, 0x0091fb9b, 0xe1831bac, 0x884e590b, 0xeba1cf67, - 0x1fffaa34, 0x80265ad5, 0x9517fc3f, 0x55eecfad, 0xab772c35, 0x47ffae26, - 0x79f201ff, 0x00ffa99a, 0xd0e6a5f1, 0x50d5cb26, 0xbf3195af, 0x75569bc0, - 0x14df8c2d, 0xb35c1952, 0xf64f182d, 0xc768abd6, 0xc48f669b, 0x9f311a7c, - 0x163c90a6, 0xa1cdd9e2, 0xc4f7ec4f, 0xdaa69dd8, 0xbb05ae27, 0xb12994f7, - 0x628cfbff, 0xc87e6efa, 0xfa3d38ba, 0xf509d28c, 0xe83da3e7, 0xb6262a3c, - 0x9becbf22, 0x77ce337b, 0x9a724847, 0xf2a5dc29, 0x0fe83f1d, 0x537f86fb, - 0xee24de98, 0x58b333f1, 0x5f563ce8, 0xabd4888c, 0x7ec32afe, 0xc3c45d25, - 0xcac0e2be, 0x8c87e8b9, 0x0292490e, 0xc108ebfa, 0x0fc8467e, 0x7f32c094, - 0xe3a28350, 0x0921c1c7, 0x91b836f1, 0x90d37e60, 0x61f6fa23, 0xae218a8d, - 0x9f819016, 0x3fd29c46, 0x6d7c13af, 0xd7c05927, 0x25965e4f, 0x5b9a4ff0, - 0x1d396b88, 0x977679bf, 0xf9a78022, 0xd046ec02, 0x363cb2f2, 0x8ff7fad1, - 0x9e87f30a, 0xc6fed8d2, 0x816d7353, 0x6fbe9465, 0xb8c72dce, 0xf13f17c4, - 0xbfb44f74, 0x5287a315, 0xdc83684d, 0x75cfb0a9, 0x1295c4df, 0xd552031a, - 0xfe252cb9, 0x82bfc17d, 0x771f059f, 0x09ec9b9e, 0xb2671824, 0xe294fcca, - 0x8d247db9, 0x5bb4d7c2, 0x4da57422, 0x747b969a, 0xe9630ef1, 0x0173cb27, - 0x79ed6f1e, 0x2594ec0d, 0xfa0fd894, 0x3ca3b14c, 0x2ff72d34, 0x1fb5bc83, - 0x3bf46153, 0x27dfaebf, 0x48723e31, 0x2cefb271, 0x9e813355, 0xe42c732d, - 0xd6379639, 0xf00a5279, 0x55b8c97b, 0xcba7de14, 0x9f37684c, 0xbf085d52, - 0x7961317f, 0xa2ff7c71, 0x61b204eb, 0x5cfc8c4d, 0x95248a54, 0x0ea92bf6, - 0xe3c33fec, 0xd77e0092, 0x8769ffbf, 0x4be690fd, 0x1763a466, 0xdf10f71e, - 0xfad95575, 0xfeea8371, 0xd0f58152, 0x0b944cfc, 0x9ceec797, 0xf5f2ed4d, - 0x09ef14b5, 0xffe146fc, 0x98e87ba5, 0x9b749e14, 0xb892f909, 0xd5074edd, - 0x7e225e77, 0x8883947e, 0xa225845c, 0x51ea8e0c, 0x53852429, 0x681c3ea8, - 0x5a6585b1, 0xf3a7cfa6, 0x6231fd86, 0x2835fd61, 0x40fb2367, 0x7ca1aeb8, - 0x4d821839, 0xaef587f4, 0xafd0bfd8, 0x84af2f42, 0x67ed36b8, 0x604a63e5, - 0x9d67ed05, 0x357498d2, 0xcedcf32d, 0xba412062, 0x5003f4e2, 0x2e27cd57, - 0xf6b1210a, 0xf1169f5c, 0x0ed0a847, 0x78c64af8, 0xd38e9180, 0xf4f2f822, - 0xf3fce952, 0x09bcb60f, 0x892b8b6e, 0x6fdae78d, 0xca593b41, 0x4fb0eaed, - 0x17d0014d, 0xee237c24, 0x112d799b, 0x17d3a0fd, 0xc4686ec3, 0xef61ae7c, - 0x54a87833, 0x41fde1b9, 0x7d723c11, 0xa136fdc2, 0x8284863f, 0x2eaeb085, - 0xb5ee1508, 0x3e0bf1d1, 0xa71b7262, 0x15d20e3f, 0xaf6f8f5b, 0x307c8c37, - 0x90e54c20, 0x1d1fa5d3, 0x23a0f0bf, 0x52f68752, 0x7019ea95, 0xc99eb916, - 0x1b30389c, 0x7f38bdf7, 0xe42af119, 0x05e728d9, 0x9af6bbf7, 0x0c885c19, - 0x8a4438e3, 0x09ece1c2, 0x392de87a, 0x1157f415, 0xeb8503c5, 0x696f2e73, - 0x60e30217, 0x6e864ffe, 0x65df224a, 0x7e99b25d, 0xc62f631d, 0x20d99ec9, - 0xd85ed477, 0x7b150f01, 0x8f4c682e, 0x11de9185, 0x0172a7be, 0x10b909df, - 0x6fe46efc, 0xe82b0f21, 0x189ea657, 0x4760249f, 0xce082965, 0xeb61d52e, - 0xe157801c, 0x1a7f1337, 0x3a9663c6, 0x78eb38d8, 0x24d2ca5e, 0xd7fa7677, - 0x25ef5fe8, 0xc4c40913, 0x8b4abc39, 0x7bd17a06, 0x8c812349, 0x8d9f80ef, - 0xad59f871, 0xcfc78a76, 0xebf3c86c, 0xfe02bff4, 0x87fe1180, 0x5ff8519c, - 0x421456b7, 0xe70efe9d, 0xef9bd2c4, 0x15f90a13, 0xb6b43af2, 0x9cb52f72, - 0x2719f271, 0x0c80a197, 0x4f978a78, 0xccf41932, 0x23f33088, 0x817a728c, - 0xf6f9a3cf, 0xefc0de96, 0x0ea7b2f9, 0xf7def7e0, 0x2fe83745, 0xc63249df, - 0x6bf32053, 0x2bd81765, 0xb3a190d2, 0xda76f107, 0xf5c4e8cf, 0x9f9f057a, - 0xd4f94b54, 0x9e05fb0e, 0x0affd07d, 0x41ff5b07, 0xc7f41e40, 0x7bf3c545, - 0x852b0b90, 0xa7e2192d, 0x1879c27d, 0x45c832a7, 0x3560725b, 0xce9079f0, - 0x9f8cec17, 0xa5ab99da, 0x5879e1b6, 0x52f0634d, 0xa23f07e9, 0x06c260eb, - 0x8fb820ab, 0xe59f35da, 0x602d74af, 0x729fd6f9, 0x50c27e7d, 0x3eca545e, - 0x0aa97986, 0xbe0b9bf1, 0x2a00dc3d, 0xaa4e5fc4, 0x1f008fee, 0x9c6eb196, - 0xb883ae47, 0x72276a24, 0xa2e4a095, 0x722fa470, 0x9fc6bda2, 0xbfb49fb0, - 0x22cef1dc, 0xd52e77a0, 0xcaf71089, 0x91247f05, 0xc22aa85c, 0x3ef9adfd, - 0x5f07e710, 0x407f7ce1, 0x18cdf3a3, 0xbcb1a2df, 0xd4ce2a85, 0xdbf0092e, - 0x4e3b7294, 0xc4a2e9b6, 0x8634fcfc, 0x08bae367, 0x52f30608, 0x8d41fd78, - 0xb8e94928, 0xbec3f16e, 0xc164dfb2, 0xb8958b75, 0xbae7a082, 0xbe1e2c68, - 0x86ad724a, 0x16952ffa, 0x78f9e40b, 0xfefd6cad, 0x2e49c8e8, 0xbf62be85, - 0xd61f35a1, 0x3bcf949e, 0xa6fdf469, 0x57bdad91, 0xba5a0ce2, 0xcb737e31, - 0x27c12f30, 0xb56e8215, 0x496e8eaa, 0xa1888f10, 0xad148adb, 0x4dc5f80f, - 0xd60bb252, 0x240b4d29, 0xe164a706, 0xff9053f3, 0x1e127122, 0xf2d42857, - 0x6f423f10, 0x86acf9d3, 0xfb0dc052, 0xf92fd0fa, 0x89b0359d, 0x8f1bfabe, - 0x81c433a5, 0xed8e67b3, 0xaf67710c, 0x491ba5bd, 0xf3a60710, 0xcbf3001b, - 0x40d32b56, 0x79df65cf, 0x30f40edc, 0xd7f62dc2, 0x4bfb07f0, 0x586c656f, - 0x7125fe83, 0xe7cf7ab3, 0x05094eb0, 0x60e39978, 0x2a49cff0, 0xb7d58acb, - 0x132cfa4f, 0xef5a2515, 0xec4bc914, 0xffe7cba3, 0x89daefb5, 0xbd7be9a3, - 0x59372635, 0x9fe3f5a4, 0xd6e671d1, 0x3f105d58, 0x8cf65478, 0x773fb803, - 0x70975f3b, 0x01295d1d, 0x959f8b1c, 0xf079d3c8, 0x43fb611d, 0x1f943f1c, - 0xd98ecf3a, 0x2ef3a037, 0xd3c506d3, 0xb52559b5, 0x7212e710, 0x2ca7c999, - 0x4ba082f4, 0xea9bd026, 0xe5465205, 0x8dce2634, 0xdc6166af, 0xe8527f0a, - 0xbf02fff7, 0x31437ed1, 0x1ba09dca, 0x48f4c3e9, 0x4c75c812, 0xfeb9aabc, - 0x14fcabbd, 0x9fffbf8e, 0xb68429f3, 0x496943ff, 0xf53e3901, 0xdc535fc0, - 0x00f60f90, 0x977acf5b, 0xeebce2a4, 0x8ff77ee2, 0xb46a9e38, 0xd79872b2, - 0x637fbedd, 0x6fa2379c, 0x8efb67ef, 0x8ffaa80b, 0x4b6a2fdd, 0x1479c32f, - 0xfd7793a2, 0x8562ecbe, 0x7e30eb9d, 0xeb6349bf, 0x1bd505e6, 0xc0275cb4, - 0x806ff9e3, 0x5f5f14e7, 0xf161aa9c, 0xacdf011e, 0xf81a01ea, 0x9908ffdc, - 0x1fed9849, 0xb95f4ca9, 0xb7c5126d, 0x08d1e387, 0x179e01f7, 0x3257e739, - 0xe933c1fa, 0xb953f758, 0x601684f7, 0xff08c71c, 0x52bcba9c, 0xf3987fc8, - 0x29eb84b0, 0xaa01ff78, 0x3ff73d3f, 0x68e80e74, 0x9f319f9c, 0x171f18c4, - 0x43c8b37e, 0x983c4d9b, 0x27171297, 0xfb1cfd0a, 0x9e8bc637, 0x797af8d5, - 0xfb021930, 0xbef96725, 0x621b9c3a, 0xcb04ebfb, 0x14925072, 0x1e968b9f, - 0xb926052a, 0xc61b72a3, 0x33f8c5eb, 0xf833f8f8, 0xaae15438, 0xe633c7c0, - 0xf36217ab, 0xdc68b6dc, 0xc7421e6f, 0x89e3a393, 0x39731671, 0x7a0be314, - 0xe72abe0a, 0x7f515d74, 0xd3235bb2, 0x0c498703, 0x9ff88c7d, 0xca2b3bf7, - 0xa1cf0447, 0xfd039c5f, 0x51736738, 0xec271769, 0xc28e545f, 0xcfe269fc, - 0xe16af961, 0x1bb7581c, 0x36a4def1, 0xd8257376, 0xfee2689f, 0xb9717b5c, - 0x03c89a1d, 0x94f2c2a8, 0x67e07552, 0x191b87c0, 0xb9de2c1f, 0xb79075e5, - 0xb2bfadf2, 0x569dbc83, 0xbc60b2aa, 0xb41e9b45, 0x29c57ec3, 0xbd076fc5, - 0xe4c03a78, 0x8aefc8ce, 0x305bec59, 0xe0f6157e, 0x9f3fcbcc, 0xc5f9fc00, - 0x7a01d526, 0x1cd9bbde, 0x547c5336, 0xd0fc30d4, 0x7f5651fa, 0xade2f108, - 0xfe5dc3d5, 0x9cb2afe2, 0xe7969f6c, 0x9d7185f3, 0xd3f1b15f, 0x2f0f9052, - 0x1d7dc169, 0xfe3077e3, 0x97dc74a5, 0xc6a5a99b, 0x11be0bb7, 0x8d6f05eb, - 0x3c469be0, 0x7f7c665f, 0x172fd73e, 0xfe72bf05, 0x0120f811, 0x9de457a6, - 0xd28ff3eb, 0x7f8dd9fa, 0x62fd4bb2, 0xbfcb09f5, 0xf3de0d68, 0xdb672eec, - 0xe71360fe, 0x0177e8c3, 0xcb59cefc, 0xac4230f3, 0xed86a45c, 0xb4591710, - 0xecf5c541, 0xbfcf2da2, 0xbdd834f0, 0xabaecdf7, 0xb70bff69, 0x38777fec, - 0xa6dc2fad, 0xd3678e66, 0x763149b0, 0x5a7c0bda, 0xf943a510, 0xb39afdf6, - 0x40fe7b3f, 0x0b1e947a, 0x48d1edb7, 0x947c78ff, 0x8c68f704, 0x09740dff, - 0x7d852d1e, 0xbfe7796e, 0xe9fba035, 0xbc8112dd, 0x6e7c38cc, 0xd2fb8fd8, - 0x23a42780, 0x6e8453a7, 0x94bdf786, 0x39e7682e, 0xefed8c9d, 0x3fe40e69, - 0x5dce0fe8, 0x757e7e51, 0xfccfc517, 0x982ecc0f, 0xef57fcff, 0x4e3cc3b3, - 0xaf8c952a, 0x05983fd7, 0xeabe6476, 0xc96072cf, 0xe67fcf9e, 0xf36fc847, - 0x8b28fd0e, 0x99d2fd30, 0x9dfcd1c5, 0xd6737e61, 0x9bf386dd, 0x77c83c4b, - 0x65cbd7f3, 0xa8babf10, 0x12dbb190, 0xb94fc5c8, 0xce7c9c5c, 0x27f8fb8c, - 0xb8531ec1, 0xccc8effc, 0xa2f721cf, 0x9f11fd7d, 0x58fcb50b, 0x18e3c8bf, - 0x1e22cd13, 0x2c72b54c, 0xa87c6ebf, 0xe673e801, 0xc436772a, 0xf144bd01, - 0x57487c73, 0xa1f2bf68, 0x3f5cd931, 0x7f189539, 0xc39e04b7, 0x3baa0dfb, - 0x1df75f29, 0x1d1792b9, 0x9f1f297f, 0xfb0c9dc2, 0x12b327c6, 0x305f87c7, - 0xd611624b, 0xa303f3a0, 0x7de4cdf2, 0xbe4cc3e3, 0x2607bc85, 0x0bf6858e, - 0xc0fc9987, 0x53c7e077, 0xd8d9c2b8, 0x848a67be, 0xc3da80fa, 0x51bd7244, - 0x6fad72e5, 0xe1427c17, 0x897fc056, 0xfb610bf0, 0x7e7927bc, 0xe927dcfb, - 0xc1763177, 0xe3d9e30b, 0x3b7213fb, 0x6617f84f, 0x7593fcbd, 0x5bc6129d, - 0x22c47e8c, 0xd3c2f035, 0x3e54af20, 0xda2edf41, 0xbcc196a2, 0xfbdeab3f, - 0x9ca90fee, 0x7214167c, 0x469fd7aa, 0xdaff9d39, 0xa34fe47e, 0xdc167e9c, - 0x4e50959f, 0x73c7edb7, 0xfa72f1b7, 0x053fab3f, 0xf01bd6fe, 0x5b61f427, - 0xc3ea3478, 0x4fc410e1, 0xb7090fa0, 0x13fe46c3, 0xadf8277c, 0xddc595fc, - 0xf844ef41, 0x845df052, 0xc5df052f, 0xf0ead1e5, 0x083f3717, 0x589f01a2, - 0x75828ed6, 0xf6c5c586, 0xcb39ae13, 0x819693e2, 0x67d6fd6c, 0x43f582ad, - 0xb020c726, 0xec4613fb, 0xa427ecfc, 0xbef9fe6d, 0x963e9dcb, 0x65075fa3, - 0x895f042f, 0x1090e3a5, 0x16fbd383, 0x7d40f409, 0xf76396e0, 0x930b640b, - 0xbd1f9df7, 0x2c780856, 0xca97ee6a, 0xae1babf8, 0xb5fc445b, 0x054cefd5, - 0xea1ada7d, 0xad4f7989, 0x4494e507, 0xe25fa5e7, 0xfb857df4, 0x491bcd5b, - 0xadf94c95, 0xdfa0b499, 0xc168dfe0, 0xbe38b67c, 0xe67f3330, 0xe803e2bb, - 0x2978f80f, 0x5134b1a9, 0xf9f09a3c, 0x5ff3784e, 0x0baf1f68, 0xbf81306d, - 0x9346dd7e, 0x24be4fce, 0x1480baf8, 0x784f5f00, 0x20652933, 0x2ecaf3ee, - 0x0dee5738, 0x093cd39d, 0xf38c95f2, 0xdfc1fe87, 0xe0716fea, 0xc1a86fb8, - 0xdbdcf07b, 0xeb0216e7, 0x6aad3a85, 0x3b382261, 0xeb383125, 0x7cba338e, - 0x6a29785f, 0x618b85b6, 0x61237a7f, 0x3a38f671, 0xde0eb613, 0xaa7f704c, - 0x7ab32435, 0xa347db35, 0x2462fca0, 0xf699777c, 0xd79f231a, 0x057b6ed4, - 0x8455e7ce, 0xb6898724, 0x1a8d2857, 0x36b78bf0, 0x363d064d, 0xcbce29c0, - 0x894ffa3b, 0x16febfe1, 0x77b9e705, 0x00331bf8, 0x6acfe72f, 0xddd5f604, - 0x60ec5afb, 0x0a87ceef, 0x9adadf91, 0x191f76d7, 0xfee9eb05, 0x78a77f00, - 0x4eabf63a, 0x9447d5d6, 0x5c00ba78, 0x4b8dcc13, 0xfef0095d, 0xf7d9858a, - 0xdb3e4bef, 0xbf2c3b2b, 0x7afc8587, 0x7c41bf70, 0x378700ff, 0x13b37e46, - 0x6592efc9, 0xf7986cce, 0xd99efa92, 0x7f25cf80, 0xe2253b50, 0x963e2dab, - 0xee15b4df, 0xadf90017, 0x7d7bf2a1, 0x50d6fc8c, 0xff8bcdf9, 0xfbe5ae6e, - 0x202ddf95, 0xfbe009bf, 0x90af9f09, 0x51d0fcdf, 0x1afcdf94, 0x4acef9fd, - 0x2bf27b4b, 0xf2c29a75, 0x04d65c60, 0x00f01afa, 0x795bb2f9, 0x038c387e, - 0x37c2fc72, 0x24bce394, 0x4a7fef06, 0x20ec978e, 0x4f128798, 0x4bc7266f, - 0x4b1ca8ea, 0xc7267740, 0xcb09ea4b, 0x6fc83407, 0x65f9389f, 0xd98457df, - 0xbcdadef7, 0xc741dcdf, 0x2eab702b, 0x20bf7d0b, 0x6283cf2a, 0xb685f9e5, - 0xc760f9e4, 0x970779e4, 0x3da72a67, 0xeae8095c, 0x63f3e90a, 0xb27618de, - 0xe5f03b7a, 0x275c659f, 0x0f79e21d, 0x7276197f, 0x3fc5f020, 0xff8a1e00, - 0x9a6f9c3d, 0xbfec7e7c, 0xe853f874, 0xabec9547, 0x03ec35fa, 0x12a8de2e, - 0x351587d0, 0x328fd147, 0x5f85bfae, 0x0b875c65, 0x7e5ed23d, 0x776e61cc, - 0x088dca26, 0xc65b792f, 0xf38c3ffb, 0xc1c5ef17, 0x5deab079, 0xc042afb8, - 0x407c5ed9, 0xb83da3cc, 0x15debcc4, 0x148032f2, 0xe286dc42, 0xffc5e511, - 0xb5cf1947, 0xad5d1595, 0x23e51fbb, 0xaac2cf8e, 0x870812a2, 0x37e7e44f, - 0xf7bdaee7, 0x18af9c00, 0x0059c474, 0xe188f4ee, 0xa7ac0f66, 0x416a4a5e, - 0x49741679, 0xb974624d, 0xa379fbc4, 0xf031654b, 0x7256b79b, 0x86f1dd80, - 0xc1f785ff, 0x8bea7dec, 0x05a3e052, 0x8cc392f5, 0x834e787c, 0xb5295e75, - 0x854fc0bf, 0x7eb873a1, 0x245f505b, 0xea0bf7c3, 0xa3c0bc24, 0x9474fc3d, - 0x0edc296e, 0x6df8016f, 0xb30b6700, 0xd13e1c6b, 0x3afc55ee, 0xbe9e4bf8, - 0xc1972ab4, 0x571704ed, 0x02283bc0, 0xe7194cef, 0x057841d5, 0x3783dbde, - 0xc74f4935, 0x679e47b7, 0xb4a110fb, 0xbe6bad0e, 0x97887ee9, 0x4cfae034, - 0x90cc8bec, 0xac0b663d, 0xf3e97b6f, 0xc1690995, 0xa1efebbc, 0xf5d7ff7f, - 0x0037d91f, 0xece41dff, 0xcbae2a4f, 0xb338a497, 0x1df1dce1, 0xb75d2af0, - 0xfb336d34, 0xff313de1, 0xabb73e13, 0xc3710297, 0xf19e58b1, 0xf57ab995, - 0x4f6fb18a, 0xbe43b79d, 0x821f7357, 0x294d2179, 0xda274e2c, 0x0b3249dd, - 0x587e73fa, 0xf57c34a4, 0x1b49f821, 0x5c03061b, 0xbcf32e27, 0xb1e6cb92, - 0xd3ddd689, 0xe7109db9, 0x3802ef28, 0x2fb2249d, 0xe59f377a, 0x927e705d, - 0xad6667ae, 0xf8852b4b, 0xa0bcf1b2, 0x83403827, 0xde31a438, 0x11b88738, - 0xd0f9718f, 0xbf1611e4, 0xeedff034, 0x273b0724, 0x706a54aa, 0x3ac4f65e, - 0x8829f889, 0x8f88db0b, 0xf1e24c6f, 0x1fc20ec8, 0x46b1ce77, 0x11b978c2, - 0x971b79ee, 0x6042eaad, 0xf15e6cbe, 0xb579b3f0, 0x78d20f35, 0x8bb58923, - 0xbcec420b, 0x3223c576, 0xaf3c83b3, 0xe02bc044, 0x2a5dc233, 0xa7ff422f, - 0xfa8cad79, 0x607f2ef7, 0xba479c15, 0xfb84a56b, 0x54f9c62e, 0x009cced4, - 0xdf43c0fa, 0xf3693887, 0x69ed0447, 0x00296af3, 0xd73f8c78, 0x4bfb66e9, - 0x427bbc7c, 0x7e7351f2, 0x1ea2f4db, 0x3665d20e, 0x849acba5, 0xd5c8a3fa, - 0x168e462b, 0x7ab9c604, 0xe20bc6e9, 0xe6e17eba, 0xbfe7ba89, 0x74f1e249, - 0x4f6fbf1e, 0x6265489e, 0x47e422bd, 0xaf9093c8, 0x817ce0dd, 0x0702519e, - 0x4f00f372, 0x1a7ea18f, 0x4c5e7b27, 0x8f217962, 0x54afa74e, 0xe79e753c, - 0x0cbc7085, 0x2399f465, 0x6de7c78f, 0x078a31e9, 0xb6c0fedd, 0xe27c7d24, - 0xcc47cebb, 0x9881c843, 0x8c0e519f, 0x21e91bdf, 0xba46c0e2, 0x6721e918, - 0x7e40fa9b, 0x5d939121, 0xb9cb77e0, 0xe8d7caa6, 0x5a7772b8, 0xcbf703f6, - 0x65a4cf25, 0x7928c955, 0xa8572d16, 0x30ad2f4c, 0x1898b8b1, 0x970e5dff, - 0xcb923328, 0x3ec1270e, 0x830ddbe3, 0x0c2f2cad, 0x5c7145f7, 0x9215a78a, - 0xe83f809b, 0xfed04fdf, 0xbd926417, 0x712b7f80, 0xd6fdc50f, 0x9e3e7124, - 0x5fd2e1e5, 0x582e942e, 0x35a70fc7, 0x83473fff, 0x8ab2ecbf, 0x4f5625fa, - 0x153de135, 0xab25ffc4, 0xb93af367, 0xa2b9eacc, 0xfc29d69d, 0x7bfceeae, - 0xef566ff2, 0xcdffda2b, 0xb45ebfde, 0x21dac57f, 0x7fb69481, 0xa357f0f5, - 0xae7f30fd, 0xbbb548c7, 0x62bbf02f, 0xe529eb62, 0xdcf30d4d, 0x15fe3e44, - 0x96ab97ce, 0x8562bf15, 0xb762a23c, 0x67c4f213, 0xdf3b73f0, 0x90f414b6, - 0xf7bc26ad, 0x9ba04a01, 0xc0e2cc96, 0xc6a49e82, 0xcbce17dd, 0x2fbba091, - 0x246635e4, 0xc192927b, 0x61ab7abf, 0xcd47c814, 0x060c1f3b, 0x0ee80bff, - 0x05be14fd, 0xfa50da77, 0x436abced, 0x46705e6c, 0x193d9172, 0x6cdd1af2, - 0x3a724adf, 0x14051dc8, 0xadf6b80e, 0xf4d68427, 0x8035b2fb, 0xfb0f6a3a, - 0xc1659527, 0x986ba478, 0x9cb8fbc5, 0x2e9ecbe4, 0xb8b9bcf0, 0xe061d1f1, - 0x7ed89997, 0xef48693b, 0xe5a13f90, 0x74798fdf, 0x47b5b9e9, 0x3e3ee166, - 0xdc90cfdb, 0x6e838c6e, 0x24179c8d, 0x25603f98, 0x6fdc2ec9, 0x7f1c9177, - 0x307fcf16, 0x1cccbe31, 0xccffb31c, 0x1fbf45e7, 0x870fe70d, 0x375e5958, - 0x710ca79d, 0x89c401b8, 0x33e42165, 0xf55604f4, 0x09177d60, 0xed19f91e, - 0x7624f1ff, 0x336585ef, 0x4c87e5d1, 0xd876664f, 0x21f9656f, 0x12706ac9, - 0x73e4ede8, 0xbb7a01c4, 0xe0a6bd79, 0xf1c50ef9, 0x3c5fcc03, 0xef002260, - 0x01c06a8b, 0xd72d7479, 0x48e7ce2a, 0x4e66bfb4, 0xe3efd17f, 0xc85af39a, - 0xcad078cb, 0xb1162fea, 0xd396833c, 0x5af2005a, 0x952d73d3, 0x93b3f9b1, - 0xf13f9992, 0x78f14a62, 0x3eb043a0, 0x43f8c099, 0xa2065376, 0xbaa579f4, - 0x63f80920, 0xe288e02b, 0xb8ecdd21, 0x3f4bfa17, 0xc3cde14f, 0xafc46ee7, - 0x4a901ce2, 0x66fc3bf1, 0x47ee139b, 0x7829317a, 0xcb41c833, 0x839e1316, - 0x26b9aade, 0xab6b7d42, 0x257901d3, 0x9305e62f, 0x4c5b3e71, 0xc9ad9f38, - 0xa12dd72d, 0xa3e9af70, 0x14f8058c, 0xe92c512b, 0xcec54f20, 0x99f3e97b, - 0xacaf4cc9, 0x7a793134, 0xf589d93c, 0x7e3a25c7, 0x8457bc01, 0x4fce24f2, - 0x75b0b734, 0x0d29a76b, 0xf275f032, 0x25de7144, 0x3c7f832c, 0xbda08cb2, - 0x0353691c, 0xb9538c4e, 0xfd29336d, 0x07661147, 0x08b47d46, 0x0528c3f3, - 0xfda08f0e, 0x04a9b5ed, 0x1e7845e6, 0x4f9c8de8, 0xb28d206e, 0x70dfb685, - 0x74c2b889, 0xe92f1bbc, 0x2ddcbff3, 0x8d14d18e, 0xb62488a4, 0x78f863c7, - 0x00adc4c5, 0xf45894ff, 0x7b018def, 0xe318e14c, 0x49339c30, 0x1bb476e6, - 0x2e7b16e9, 0x8dede447, 0x853dfb91, 0xcd58c0fe, 0x66d87805, 0xfb07bf73, - 0x9506fe7f, 0x46175a24, 0x6a3ed7d6, 0x61537a39, 0x798c94b9, 0x6d1f947b, - 0xadd707c0, 0xfdc3f2ad, 0x62f5d787, 0x81df03fd, 0x7d66b95e, 0x87d80666, - 0x511f4e02, 0x7e033e0a, 0x7e32a472, 0x951f5c72, 0x79c9f5c7, 0xbe429fc8, - 0x9fa0cf80, 0x46606a5d, 0xe50738a2, 0x9fc0f5cf, 0xfd046cdb, 0xb6779fdb, - 0x12b9034c, 0xfce31ce3, 0x2d572c6f, 0x8547b25b, 0x76645f79, 0x4b977466, - 0x3c8c635a, 0xc1852bfe, 0x4d5675eb, 0x1bf1009e, 0x2dfb8a9b, 0x162e3c59, - 0x639d1fcb, 0x59f043f8, 0x51e58d93, 0xa9297e08, 0xbbae2bfb, 0xe2122e4a, - 0x3f1123c8, 0x28cbf04f, 0x61f3187f, 0xd7e61147, 0xe8a5f919, 0x7d015382, - 0xb4bf1ed4, 0x089027c5, 0xc8d27605, 0xb992072f, 0xbf26d29f, 0x5e03b65c, - 0x6497d696, 0xa4fc5d7f, 0x5b47f396, 0x4cacc3ed, 0x5f9f19ef, 0xa8f66148, - 0x41faab4e, 0x5b85e83e, 0x7b902e4c, 0x70b90dca, 0x325d513f, 0x95288efb, - 0x4dbea13d, 0x5b667a61, 0x667a8cc8, 0xc1e3cd9b, 0x161cd07d, 0xa78a241f, - 0x5c9af211, 0x35ce2c5d, 0x0cfcfc31, 0x1aa0bfe7, 0xe212761e, 0x74607f0b, - 0x014b7a1f, 0x9d25189c, 0x1fb93367, 0x00db4a78, 0x6c3dcbf7, 0x7c0d3a2d, - 0x04b20c95, 0x35c74f79, 0x38ad77dc, 0xdbfea1ae, 0x2950fbb9, 0x9e0afdd8, - 0xd76431e7, 0xd062d2a1, 0x37a65627, 0x29fd71cf, 0x4e60c3ea, 0xf70d0fa0, - 0x4c230d15, 0x53ddc54f, 0x1f937c04, 0x77bb8f6d, 0x0635d1a8, 0xef771ac8, - 0x98f711d0, 0x7bdc2714, 0x797bc1e3, 0xe1efeee2, 0x67bc60fc, 0xc7927fa6, - 0xf83f0562, 0x36dd8695, 0xb3276be0, 0xb2ad41c7, 0xa92bcb2f, 0x23fc09ec, - 0x147f0ce4, 0xf7bfc15f, 0x7cf62e79, 0xbe7c2dc3, 0xb614b88f, 0x61a8dd3f, - 0x082fe81e, 0xedc82efb, 0x1e6b6f52, 0x5f4b0bd3, 0x5d7c019d, 0xf98ddf38, - 0xc8a58fb6, 0x2497fcf8, 0x7409e96c, 0xaf182972, 0x92ceaa0a, 0x3df45293, - 0x81f594a2, 0x4eaed4b8, 0xfe3085c9, 0xb5cf56c3, 0x5a513f00, 0x4377c20e, - 0x82141786, 0x580db65e, 0x4a760199, 0x1ae14dc0, 0x8516c9bb, 0x6595c043, - 0xb0f87c65, 0xd6b5e675, 0xd03bec4e, 0x4f47b53b, 0x417be058, 0x39fd60ff, - 0x3e18f746, 0xf947ba00, 0xea1bba40, 0xdc050f02, 0xbff2dede, 0x25c60f87, - 0x87e103e2, 0x76ecbf51, 0x1ff78fc0, 0x73b37b97, 0x6fcf2c1d, 0x24778c88, - 0x9b25f246, 0xb05d8a72, 0xf9d1597f, 0x3e525887, 0xa067ff3a, 0xff766ee7, - 0x04e7f0b0, 0x45cbe4df, 0x234bafd8, 0x2e83de78, 0xe21fb0d8, 0x823cc349, - 0x63060eed, 0x744fdff3, 0x59282ea3, 0x72674d60, 0x1bb5efc9, 0xefd09610, - 0xc715401c, 0x75d7e81d, 0xe2e8bd45, 0x242725f8, 0x03c5ce09, 0x05c95f2b, - 0x019c33ff, 0x8f300fe3, 0xed3ec30f, 0xb951d66b, 0xeb029f30, 0x8fc09ec8, - 0xfa59f7af, 0xaf693027, 0x7dbf9977, 0x4fea33a3, 0x97b8fd09, 0xbfc62b77, - 0xcbf4cadf, 0xcfb66e8d, 0x163d7a0e, 0x801f610e, 0x1487008c, 0x62ba6a9e, - 0x6a1dbd45, 0x11be78a4, 0xd8f4a0e0, 0xf01a9123, 0xee4c8a17, 0xfbf012cc, - 0x8015853a, 0x5ffeb9b3, 0x340e20dd, 0x23fbf43e, 0x9178ef00, 0xe7d2eb1f, - 0x6cfd1ac7, 0xf588ffe1, 0x148ff086, 0x47e1088a, 0x7874fb41, 0xe0e9f14e, - 0x0c8de0f7, 0xfefe305b, 0x5af3ab78, 0x85779737, 0x98bc63ce, 0x572be5c7, - 0x4cba5246, 0x5a3f3120, 0x0a4a05bf, 0x2483f8ff, 0x82f18c9c, 0xe7f80516, - 0x8e449716, 0xadd9f0c5, 0xf875f543, 0xf68aca8d, 0x46fbded7, 0x2242323b, - 0xff1f9b5f, 0x3e83cb4d, 0x47f62fb6, 0x18f7db1f, 0x2bf643de, 0xed0db0e0, - 0x1c3bf6cc, 0xb5070f0c, 0x73ed76c4, 0x4dc3ef2e, 0xef10f98d, 0x4bebb3dd, - 0xee6fa3b4, 0xf05df2fa, 0x569d871b, 0x8767c408, 0x8a981e9f, 0x39a1d271, - 0xf442be78, 0xc6b4fdeb, 0xe473d84a, 0xdfff711f, 0x5b8f0a01, 0x582cf803, - 0xf1f671be, 0x0bbfa027, 0xdbc615c7, 0xcd52fc7c, 0xebe20bd3, 0xc81efca5, - 0xa7f31203, 0x7e01fb44, 0xd6bbdaef, 0x31105e48, 0x3497d2c7, 0xe820bfa0, - 0xb1a9cb78, 0x78fc95a7, 0x98efc0ba, 0x39afbfe0, 0x295edccf, 0x714e97f6, - 0xefbd91bc, 0x4ddb3ee3, 0xe02af735, 0x2394dfa7, 0xb8cc7713, 0xe2569ce3, - 0xfc6b898e, 0x63f06ac3, 0xc4f4bef6, 0xbf8b8804, 0x2f91e325, 0x9fdb686f, - 0x20dea1f2, 0x3377dc27, 0xd0a6f5e2, 0xfdf00abd, 0x97931b38, 0x7e1fc6f6, - 0xeb8fe51d, 0xf984de81, 0x9425837f, 0xdf5d231f, 0x8cdbf5dc, 0xf8f17ec6, - 0x02de8b6e, 0x6f0e82ef, 0x054e2d9c, 0x0747b47c, 0xa6ee9f23, 0x79d3f3f3, - 0xfcfce985, 0xd37b4fd4, 0x3efac0e7, 0x05d60e5f, 0x9feb7a7f, 0x4f3f00cf, - 0x0c98e5f0, 0xeac327c6, 0xb620c89e, 0xf88c9d28, 0x74636eea, 0xc0e9fc9b, - 0x7e3e5414, 0x6ce700d2, 0x536c38ca, 0x57ef1389, 0xbdfcfc24, 0x954dbed1, - 0xea0318ef, 0x8cdf68d2, 0x738a6d76, 0xd7c3de26, 0x6384bdde, 0x2052aadf, - 0x5954b3dd, 0x80fbb0aa, 0xe02e9f99, 0x6ff3d231, 0x09b6eca4, 0x19f0db52, - 0x67071de9, 0x3d353caf, 0x3fc2bc01, 0x4e10f717, 0x78f686f9, 0xd7cf4db8, - 0x7e8d4fe7, 0x5b6ad41b, 0x8ba46472, 0x83e85db1, 0x00a01852, 0x23f83f4b, - 0x48596ce3, 0x1a4bd2bf, 0xb579c371, 0x93e449ae, 0xc642bb18, 0xba7e4777, - 0xb59ec1cf, 0x97154fc5, 0x1193c44c, 0xf6b52be5, 0x55f02b31, 0x8565529d, - 0x6c1babfd, 0x52a45713, 0xb4fe8c3c, 0x5bee0a78, 0x84089a35, 0xce84c6c6, - 0x813885ed, 0x1c5d5f38, 0x7c0253da, 0xc0694fb8, 0x05f35375, 0xf8c61bea, - 0x15a1b599, 0x6ac3f056, 0x0b8c6533, 0xba23481c, 0x6dc7a073, 0x3daaefcc, - 0x9dc13ade, 0x0a73bda0, 0xdc4c9f6b, 0x6768f999, 0x51be3053, 0xf384daba, - 0xf6b92d1f, 0x321f8267, 0xd9afdd9d, 0x7f643f5c, 0xe9b78526, 0x1fd434ce, - 0xba1f6a63, 0x110941d7, 0x3e2177fc, 0xb929996f, 0x95efa39e, 0x2f585d3a, - 0xeb879d9d, 0x655f21b8, 0xed0f1e4c, 0xd75c54e3, 0x2917918c, 0x3cfa6f10, - 0xf5802a47, 0x71a92ee1, 0xe4fc1999, 0xe21c6c89, 0x7ac067f0, 0x19f19df3, - 0xcf20d603, 0x05d5fa88, 0x75ea186b, 0x3ba5b3eb, 0xbf81efce, 0x36f4b04f, - 0x8e51cf09, 0x7f12e471, 0xae94ff0c, 0xfea4f4a6, 0x7650a4d7, 0xe4f1f031, - 0xc40932b1, 0x656df1f0, 0x5d881256, 0xb1f3f20f, 0xde2af52d, 0xf8e42037, - 0x53bfce66, 0xdee865a7, 0x0ede6fa7, 0x886267f6, 0xfcb841c7, 0xd9cb80fc, - 0x3bfd7ccd, 0x1bab93dd, 0xbf308cb7, 0x65a4cfe6, 0x671d2a74, 0x960f4a76, - 0x70d2d51f, 0xe5f07318, 0xcf4083ae, 0x618fa0fd, 0x5a2f2b3d, 0x2390fc89, - 0xb77f00b9, 0xb7edf4b8, 0xe3d7d50e, 0xe8353fee, 0x74e0db81, 0x0faf1c94, - 0x56dfdc84, 0xc710ab2f, 0xe288adb9, 0xbd61fd17, 0x5eaede7f, 0x107cecb8, - 0x5bef86dc, 0xb2a4ec2f, 0xefca9436, 0xae1fa16e, 0x7e815722, 0x3f572318, - 0x4cd2fc01, 0x01399eed, 0x21fb08bf, 0x54a5f3d6, 0xc83f815e, 0xab8c4cd9, - 0xe544b98e, 0x9eba2336, 0xea0be88f, 0xf812b84f, 0x7ad81f39, 0x221df6ea, - 0xd4fe83fa, 0x9fdddfc1, 0xb550a318, 0x75700052, 0xd442fe25, 0x2c571857, - 0x10450385, 0x8739cbdf, 0x42af1b71, 0x5768a7d7, 0x8c7a679f, 0xd2ae0bfe, - 0xf46ffc15, 0x789c4433, 0x7ff08a52, 0x89117cf4, 0x31514e17, 0xa1f8238e, - 0xf208f014, 0x38c6453d, 0x21fc7b7e, 0xe29fffc6, 0xe3c2920b, 0xaf48bd7f, - 0xe083f08e, 0x4617c103, 0x4347f1fb, 0xfb2da75c, 0xf5f29691, 0x1f7f63f6, - 0x7b74f515, 0x6764887e, 0x7363d97a, 0xb5f37960, 0x0fc0d9b7, 0x83f5c499, - 0xf89143b0, 0x17c65ad4, 0x29671bfb, 0x05e46fb0, 0xc51790bd, 0x0adf88bb, - 0x4d58ac3e, 0x9e397e30, 0x7aa6a5eb, 0x8ef3cf16, 0x12900396, 0xec7a1252, - 0xf9675609, 0xb79e822e, 0x5228be70, 0xf7f028f6, 0x49756e5f, 0xb913882e, - 0x82703c79, 0x6078c25b, 0x7f823e9c, 0xc75bf6d0, 0xd758014a, 0xa093f519, - 0x7fde64f7, 0x7df09f1c, 0xdc9f2357, 0xbee5c290, 0x9ffee93b, 0x03c60bf4, - 0x4db53b5d, 0x7b7df157, 0xbe0d9d74, 0x5ed9c82d, 0xfe02bf96, 0xa6f5d035, - 0x3bf60a4b, 0xe7ef4535, 0xf05b385c, 0xf20b5c4b, 0xaf798df7, 0x37b4f9c6, - 0xc7e124fe, 0x8c5ebf73, 0xf2c2b37b, 0xa6768df9, 0xbfc2bb5d, 0x32abd233, - 0x26bfb125, 0xde1c6bf4, 0x8b6dfeb9, 0x5fe9ed6e, 0x53feefa1, 0x2bf457fa, - 0xcf1882ec, 0x5adb97a8, 0xbb3d09cf, 0xe309836a, 0xf5f03727, 0xae3c0df2, - 0xc3f70cfb, 0xdede3c02, 0xf782d17c, 0xb6550653, 0x63dfe53f, 0xd6d038c3, - 0xe97fccdd, 0xfbe2756d, 0xc6324a0f, 0x641c1e29, 0xd74c3d42, 0x3f308526, - 0x3e9098a5, 0x85dacfb0, 0x2b56b3ed, 0xe3d432e1, 0x7e40852e, 0xf1959e54, - 0xfa6f83c1, 0x0fff4067, 0x5a6deb1e, 0x70e37181, 0x4331f803, 0xa7dc140a, - 0x313b334a, 0x6f54dcce, 0xe6aabcc6, 0x03daffba, 0xf9aa277f, 0xf2c17122, - 0x39bd5f66, 0x7a044fb2, 0x96fc8c62, 0xcd11790c, 0x0ef3042d, 0x970b4e47, - 0x06e97ac0, 0xd602b0d2, 0x7635c3e1, 0xa788dd8e, 0xc6de7ca3, 0xbec8847d, - 0x1bcb3d41, 0x79e14929, 0x06fb7123, 0x6fb8250d, 0x15ae48a0, 0xd33ed124, - 0x60df667f, 0xf29ce038, 0x7a0c5ff3, 0x7fb1b488, 0xfb6355b0, 0x54872d4c, - 0x39327e02, 0x5e309995, 0x423eded3, 0xb764eedd, 0x82fb0ed3, 0xdbaf9fcc, - 0xccedc5dd, 0xfcfdfb6f, 0x986296c6, 0xd36ad6c6, 0x47632b4a, 0xe246bb8c, - 0x727c4671, 0xbfedc7bc, 0x61a35c84, 0x63c462dd, 0xe2194b71, 0x4fe29bf7, - 0x13d6c5c8, 0xebe06ec9, 0xb8ba27ad, 0x3c63dc61, 0x3b32e70e, 0xbf7604fe, - 0x326b78ee, 0x6e6ab3ee, 0x5a1bac27, 0x762e2cd2, 0xf3e3110f, 0x78dee760, - 0x3c07fc6f, 0xb935b7ae, 0x337d8fe5, 0xd851f763, 0xc51349be, 0x0faa3eeb, - 0x3cfd5f7f, 0xfe7e03e6, 0x13cc51f2, 0x4c86f85a, 0xadaf102c, 0x85e7e14e, - 0x03f81a03, 0xee3235e5, 0x18b9534f, 0x5625393c, 0x7960acdf, 0x3dd95b34, - 0x99afe59f, 0xf7e9e303, 0x927fafe5, 0x4df6f90f, 0xc00e5bcb, 0xbff01fdf, - 0x33bfb12c, 0x87cc6fe7, 0x95cb9afb, 0x2eb271c4, 0x9d7fe676, 0x034eb3ad, - 0xccda40ff, 0x79605efe, 0x8e6aaa70, 0xd9a5ef59, 0xd31ef155, 0xec492f0b, - 0x5f0a097e, 0xe2bf7dec, 0x7d9c06ef, 0xd5f06249, 0xbbf801aa, 0xb79be583, - 0xbe39c135, 0x5c6623f2, 0x9f3779bf, 0x4b33fbc3, 0xfcc16eb6, 0x4cad6f60, - 0x09d619f6, 0x9b53f3ba, 0x45e430e5, 0xbfb0d455, 0x98eb4023, 0x4c115527, - 0xbdb08e7c, 0xb70b3e73, 0x87eebfd6, 0x2feda83c, 0x9dbec1da, 0x0764d869, - 0xbf7ed3bc, 0xdc62fcf6, 0xc3e0a979, 0xea5e7b5f, 0x5a72610c, 0x379c3762, - 0x37c19cdb, 0x6383c223, 0x78a3faf3, 0x70b9fc64, 0xe067c5cb, 0xd7d9ef3c, - 0xe0067b3e, 0xf9d5f45d, 0x0d7f6067, 0xbd60f512, 0x6ff97dea, 0x7c521e78, - 0xdff72777, 0x117a5e9a, 0xbd3691cf, 0x6f41766f, 0xbb27f54d, 0xa6ca79c1, - 0x82caff6d, 0xfad2deb8, 0x2e77e831, 0xcffd41dd, 0xa2bafb04, 0x83e8326c, - 0x1ab1ceb6, 0x66b7b5e9, 0xf380376f, 0xf06f4a73, 0xdfe7237b, 0x2ecf2c82, - 0x3aadee72, 0xb8e179f1, 0x93356e73, 0x2061bd6f, 0xd40baa94, 0xdde7bb46, - 0x5e3a530e, 0x55fa01df, 0xeaf3cc3f, 0x73efd312, 0xd3a507f8, 0xf3faeccf, - 0xe66b17e6, 0xb434fb3c, 0x79b464d5, 0x01dc2dde, 0xc8f389bc, 0x55eeed63, - 0xd79b9076, 0x85f3c15e, 0x74f1b740, 0x2e5b4da2, 0xdc738376, 0xbb96d4a7, - 0xda836f30, 0x940b8843, 0xf287bfd7, 0x10e3b4d3, 0x3f0969c6, 0x2244dc17, - 0x538e763f, 0x98dcf3e2, 0x71c9cec2, 0x3a39c3fc, 0x39f4e3d0, 0xf8c72f3f, - 0x6ba39c58, 0xbd5cfceb, 0xefbf07bd, 0x77bb13ba, 0x1a87e378, 0x4a20dfbb, - 0x3468692f, 0x3a2dbd0f, 0x00383c09, 0xcf62430f, 0xa73e2683, 0xcc373918, - 0x03f405e9, 0xde722fff, 0x6247d693, 0x248f7a5d, 0x1b4d07d0, 0x26d239d8, - 0xf53df135, 0xad687ce2, 0x9e62ce81, 0x9087c96d, 0xffe0f6d3, 0xc979f8a6, - 0x8bf1d4ee, 0xcbd9d3c0, 0x87f8f589, 0xddbbe976, 0x8c96e36b, 0x607cdaf7, - 0xd3f704ef, 0x98f9e51e, 0xcc5acf2c, 0x96f82cf7, 0xbecf4f94, 0x17fde32c, - 0x517b82ab, 0x85f51b8f, 0xc23597d8, 0xb78739fb, 0x89d996a2, 0x04a5afb3, - 0xb39fb46c, 0x3f21d66f, 0xd51f5457, 0xc0ef8f20, 0x8b1aede6, 0x01f933d7, - 0xc71b113b, 0x9eeafb3a, 0x24dbd47c, 0x97f27e71, 0x437a1f5c, 0x56f1c789, - 0xb38dd39f, 0xfbc41fd0, 0xef1bdab1, 0x0a9ee28c, 0x50699dfd, 0x4cfa3f31, - 0x8d41c590, 0xedcc7fe3, 0x203ee466, 0xcf412f6a, 0x5768fb88, 0x3cf30468, - 0xe79626fd, 0x6a7efc69, 0x00d3c32a, 0xee04b387, 0x82d9750b, 0x52b8b9b8, - 0xd4cdc32e, 0x6c7b9115, 0xf6f7f85c, 0xe4977922, 0x2f309b91, 0x925de452, - 0x50bd5927, 0x613703d4, 0xfe10e51e, 0xdac03fbe, 0xeb4c2161, 0xecf97eb3, - 0x2c7efe4d, 0x3320b26f, 0x9cffcfea, 0x829630fa, 0xd5a67ee8, 0xa049fc4c, - 0x3ebdf82f, 0x22b27f22, 0x3575e449, 0x9ef7f3b2, 0xfa5f9d6c, 0x77a7bb47, - 0x5b73ec2a, 0x552776c2, 0xc6eb4b29, 0x4e2a1da0, 0xfabe2075, 0x03911f6e, - 0xc1ffc1fb, 0x76a707f1, 0xa57f1f8a, 0x6ab7faca, 0xe074dfb4, 0x4025be97, - 0x09ddbee7, 0x831773e6, 0xa3bf4a13, 0x9e7c14cb, 0xfec1c944, 0x073b995e, - 0xd22b1fe2, 0x2c63cc34, 0xdd00b0a6, 0x5e5c658c, 0x72a9aa68, 0xa5c72d1b, - 0xcdc875b2, 0x1ebe4ea9, 0x277f6169, 0xffc2d1cc, 0xe7db184e, 0x9682e597, - 0xe981d830, 0xecbfcc29, 0xdc31f2da, 0xb4eef1ff, 0x37582ebe, 0x7a4c0d4d, - 0x21b7e610, 0xf00933d5, 0xeeb4befb, 0x9b5f946a, 0x34fc0527, 0xfcb1ddc9, - 0x8871f8d0, 0xdbf4fc05, 0x61057187, 0xbc18f763, 0xe955943b, 0xa7c01e78, - 0xae323f18, 0x03d8bf21, 0x13883d71, 0xf11efbf1, 0xce3a7afe, 0xcc26e3f6, - 0xb64a6f8f, 0x59b47bf3, 0x00b608dc, 0x3fc7def0, 0xbef9972f, 0x5f775f96, - 0xa7bb2d5c, 0xb89eee3e, 0x08129e83, 0x8bef1839, 0x3b37de33, 0x4f300494, - 0xdc7f78d4, 0x307ebe08, 0x40f71bde, 0x5d0fb72a, 0xbddd1748, 0x5fd616db, - 0xf03d5beb, 0x09dc1b9c, 0x6b3c5325, 0x4d0c994e, 0x0d73ca8f, 0x3e708fd5, - 0x4e7e75f8, 0xc761ffb8, 0x2d7f003d, 0x79435fdc, 0x1dfc177b, 0x072a2d13, - 0xbb930ffd, 0xb9a75ec1, 0xacd4ff99, 0xd3cb7bb2, 0xbf4058e8, 0xc98fb834, - 0x89c4fa0e, 0x9bfe1b79, 0x3c7bee09, 0xa0499729, 0x92e9721f, 0x5c47ee1b, - 0x3dc7cfc9, 0xf6e9326a, 0xca9d7e61, 0xf96fe3f4, 0xefb1633d, 0xb7a04a4d, - 0xeb654d9f, 0x552cdb85, 0x9f198557, 0x9f740b3d, 0x70a8f26e, 0x599a9b4f, - 0x331c42a9, 0xce4fca35, 0x13e2092b, 0xeecedfef, 0xab5f7f4b, 0x81ebf39a, - 0xef66f3d1, 0xc7814600, 0x6fb8e92c, 0xbee38d3b, 0x4d4ce9d5, 0xd5a7818b, - 0x99dbe426, 0xeadb720a, 0x91e589e9, 0x1f719a1f, 0xcfa688e9, 0x02f71783, - 0xc480fb89, 0x7da2417d, 0x291586fe, 0xe91f1fe0, 0x74e77443, 0xd2ff5c42, - 0xf9039ef5, 0xf3a3047f, 0xa67f73fb, 0xff15dfc2, 0x82f48fab, 0xc5f187bf, - 0x4cdd73f4, 0x73cddf14, 0xd7f8b9ff, 0x79a3ddb4, 0xdcbc04de, 0x1578db9d, - 0x531dd7c8, 0x4dfa41ce, 0xf9bf7cdc, 0x9e3f653c, 0x61250ecb, 0xef3bc23c, - 0x4f180acb, 0xe6f687e8, 0x1d972f9b, 0x2a70bd06, 0x8bde09f0, 0xf626c646, - 0x8dfe8d5f, 0xe71773e0, 0x0db231f3, 0x493356ed, 0x5cac7966, 0x73ee636e, - 0xb37ee273, 0xe209fc9b, 0x98f62b3a, 0xd99fec08, 0xe1778941, 0x87754882, - 0x8af6165d, 0xf5942db8, 0xda1fcd21, 0xb95ea54f, 0x17c42569, 0xc8682fe0, - 0xfa80faf1, 0x56296e2b, 0x4f2bec0f, 0x79d607ac, 0x5a96c056, 0x58607a7b, - 0xdb7e84d8, 0x5f07d537, 0xe281f419, 0x82be2270, 0x605033e0, 0xc43e1fff, - 0x8000938b, 0x00008000, 0x00088b1f, 0x00000000, 0x59edff00, 0xe554707b, - 0xef773f15, 0xc3cdddde, 0x210366e4, 0x804d8404, 0x85701020, 0x5c7c0188, - 0x94422101, 0xd6da0300, 0x02101ba9, 0x16a52d79, 0x9b8cea9d, 0x8e233480, - 0xd29dad13, 0x542cce96, 0x2ec4952a, 0x4dd0689a, 0xd15c04ba, 0x63e02711, - 0xb46d63a0, 0xec083a2d, 0x98f8a71a, 0xe739ec76, 0x647dd7bb, 0xeffa7471, - 0xe5f98617, 0x7cebdfbb, 0xe3cefce7, 0x648a12fb, 0x40a50307, 0x676a733f, - 0xf1d31c02, 0xee016bb7, 0x0d1c442a, 0x00f250e0, 0x007f73e6, 0xd63c03c6, - 0xe9b6dc06, 0xdb007b5a, 0x2ed8c9ae, 0x95d6c801, 0xfc76edf6, 0x06dbb8fd, - 0xbab60173, 0xc00f77f0, 0xf9e9b1f0, 0xffbf8150, 0xbe956be7, 0x16bcea57, - 0x373f4d7c, 0xb772b025, 0xecf7000d, 0xb5ddc372, 0x9d701e34, 0x913ac4a2, - 0x46383668, 0x9dbac401, 0xef289d7b, 0xb1b0b870, 0xddc3db13, 0x5a64d759, - 0x1e17c2cf, 0x40074ec2, 0xf3e36e8d, 0x91bdb05c, 0x35eb8157, 0x87973cf5, - 0x33c685c7, 0xd752e6a7, 0x64df0e9b, 0x4e7dcf1d, 0x9aee5bd9, 0xc1ed1d84, - 0x508fa459, 0x87df2ca4, 0x43b4ccf2, 0xe47b3ec0, 0xf8ddfefa, 0xcb400e71, - 0xcce3376e, 0x987a9cf0, 0xe223df85, 0x8687b43c, 0x817ad35d, 0xb77b17db, - 0xff3d69bb, 0x7c4afa5f, 0x470700b9, 0xc4219dc3, 0x2e98be67, 0x4ec1dbe6, - 0x05e9e7e3, 0xd0402f2c, 0x39170ab6, 0x9c38e1a8, 0x1b0bf177, 0x9ff6b38f, - 0xaab37bd9, 0x222a89a3, 0xfa80031d, 0x3d3b0ac8, 0xa7accf64, 0x676e1400, - 0xfdc14105, 0x528297fa, 0x002bfa89, 0x5dfd82af, 0x01f7f1d9, 0xa73ef1db, - 0x67f61f67, 0xc6e01de9, 0x421cbbf5, 0x8c00d3ff, 0xdf1372e7, 0xc2b2fdad, - 0x65c806bf, 0xea411bbb, 0x0dc077b7, 0x9b7e89b9, 0xfdcb057e, 0xa7f05d43, - 0xcb623b2b, 0x53e23945, 0x5cb1f600, 0xf7813909, 0x169ce4b5, 0x7fb4280c, - 0xa303ecfc, 0x9f7d2e58, 0x7210e487, 0x67aa7842, 0x0dd7cd3f, 0xee96473e, - 0x74f8d2f1, 0x20b3fcb9, 0x9e09f908, 0x55018fe2, 0xd13b3df8, 0xfb855d76, - 0x42de0994, 0xe2fb7660, 0xc4da93eb, 0x7cc4aaf3, 0xfb6d7ebf, 0x1db9e40e, - 0xa9a2afed, 0x70af1073, 0x7c3d39d3, 0x31bca43e, 0x83d0b67a, 0xe394f517, - 0x8cdffd12, 0x52e6fe47, 0xf38c573b, 0x659cf53a, 0x400feca5, 0x8202d0fe, - 0x912af7df, 0x00a937b3, 0xcdaf1fe7, 0x9d73c0af, 0xeb6c0db7, 0xd49f71c4, - 0xd823ca85, 0xfdf3ceae, 0x5efdc75c, 0xaedd6f7c, 0x739fa899, 0x06b79a5d, - 0xe050c1e7, 0x8fa87189, 0xcf346786, 0x007e4923, 0xc445e3e3, 0xfc7df4df, - 0x189eda67, 0x58747e47, 0x1db0b8f1, 0x4813e2d3, 0x47f096ee, 0x7978830e, - 0x078703f8, 0xf81715e7, 0x543f9276, 0x222eb6f5, 0x8e83cebd, 0x0ce23aed, - 0xaf88f81b, 0x0f5c62a1, 0xbb7e1df7, 0x926b5f7c, 0x85753a1d, 0x7dc407e3, - 0x0a916b13, 0xfaffd361, 0xf631721f, 0x24c1f91c, 0x1347bf5a, 0xb5e6b33c, - 0xd238c0c2, 0x631c1b7b, 0x82c7beb4, 0xd9e26af6, 0x775d778c, 0x9fe3491b, - 0x69f9fd36, 0x41710fda, 0xc90f6f81, 0x43e478db, 0xf39d1e47, 0x8009a19f, - 0x4f764243, 0xf97b9ebe, 0xf34fe0f8, 0xee3dbf27, 0x8ffef1a0, 0x7415df91, - 0x079f0f1e, 0x1f23beed, 0xddf078ed, 0xd875e9de, 0xfc2a53df, 0x1dab47b1, - 0xdf5be347, 0x086b34b9, 0x123231f1, 0xd7d4bf8e, 0x86f49138, 0x4d985ffc, - 0xf908767e, 0x69f849ef, 0x8a29f905, 0xaffc415e, 0x8e34f6a4, 0xc18e5dc3, - 0x3d97ec65, 0x44bf2036, 0x203fb3fe, 0x40fdf5ff, 0x781fd1e3, 0xf3f654fe, - 0x419b41ae, 0xf1c600ed, 0xb85edc29, 0x835dda9a, 0x73f6758b, 0x3679f21b, - 0x80646bf9, 0x4c0109d7, 0x5029d321, 0xf648aa1b, 0xa3d63cdb, 0xdba7d4cd, - 0x55d0dff4, 0x9e2f7c9e, 0x53554723, 0xb54f23fc, 0xb502f225, 0x3fdc2bb7, - 0xed0df1e6, 0xc13fa24f, 0x740799a0, 0x2d383bc1, 0x5d4ff9e2, 0x7d6ffe22, - 0x4e8afe65, 0x13d6e73c, 0x13f7f72a, 0xce31ca4f, 0x78193c9b, 0xe536e748, - 0xe7da0f05, 0xfcc543d8, 0x1b6c5afd, 0x1ae74718, 0xba51165b, 0x38eeaaa9, - 0x36bf384a, 0xbc4348b4, 0xa3c1cefe, 0x19f3709a, 0x81eebfc4, 0x29d8675b, - 0x42719dee, 0xfdd88a16, 0x67fdfc55, 0xfadb0f50, 0xf219ff51, 0xf9871e06, - 0x0e3b5007, 0xc7f6478a, 0xdc8e2b14, 0xbc7c4d5f, 0xda26add8, 0x120b4828, - 0xf417da9b, 0x6c01ed6d, 0xc46057df, 0x71bf9789, 0x8d44e2fb, 0x8aafc9d8, - 0xde7b2dc8, 0xe28f30fe, 0x98c3b77f, 0x2ee9fc41, 0x0ca14d83, 0xd74f7d3c, - 0x4e954f98, 0xdfa992d8, 0xa0fc205d, 0x88bb003c, 0xaadd2d47, 0x5fbb441e, - 0xc70d56e8, 0x431f00d5, 0x8a02ed60, 0xb0630137, 0x01bff518, 0xc8031fac, - 0xa6894d1e, 0x68daf641, 0x6b1c3736, 0xd63ca1a8, 0x20e83ea4, 0xa4f8da3f, - 0x55d0e1f6, 0xffc6ee66, 0x27686153, 0x53ff11c5, 0xed82378a, 0xfb527b4d, - 0x7887c21b, 0xa953c35e, 0xb13a9bdf, 0xddb44aed, 0x3a8c5705, 0x997f033b, - 0x42b09304, 0x5c711e20, 0xdc70ecd0, 0xd97dbc89, 0x6f4953ed, 0x3f426d07, - 0x0fd94f18, 0x2cbf2b55, 0x7e287114, 0x2fec8201, 0xf3474207, 0x9df9ae50, - 0x63da5ea5, 0xcff45dbe, 0xfce52def, 0xbaa0f602, 0x65500d12, 0xde9096f8, - 0x176f2f51, 0x9937b9e3, 0xfc7411f1, 0xa6cded87, 0x1e91361e, 0x073635d0, - 0x079ee553, 0x4fb4edc1, 0x3f3c01fd, 0x903c6bce, 0xd7e96fda, 0xb4d3ae6f, - 0x2c7464fb, 0x75287362, 0xfd1e1f9c, 0xa17aa554, 0x73fbf537, 0x5cc09bc0, - 0x60133f4b, 0xeb07e902, 0x97b1802b, 0x8ee4678f, 0x344f97a4, 0x329c5751, - 0xd7fab1d7, 0x41697c9a, 0x344e28f1, 0xf120d505, 0xc8129365, 0xcfb79503, - 0xd7b943ad, 0xe0f0bc5b, 0x3dc7d43f, 0x9bd67ea6, 0xe173e0bc, 0x4a3de6fc, - 0xeff38230, 0xfe553479, 0x25baa10d, 0x79233ce3, 0xab53a9b3, 0x6e7e6073, - 0xb40e2d80, 0x98de48f9, 0x70e800fa, 0xe74afe50, 0xb94f8b4f, 0x6e46dc8c, - 0x5fffdcdd, 0xe22d46ee, 0xf8da7ca0, 0x201bc52b, 0xe27fbbf9, 0xe791b280, - 0x60dbecb0, 0xd73cc4f1, 0x56cf3df7, 0x61d3becb, 0xbab7db3a, 0x37d93bf0, - 0x6f463ebd, 0xc618ff63, 0x9150577c, 0xfcfa4fe0, 0xbd9d6625, 0x5e303774, - 0xcf2cfde8, 0x8362f383, 0x68c079c3, 0x47bca6ab, 0xf149c9ed, 0xcec0ada6, - 0xfe2ceefb, 0x500b63c7, 0x690f4b3f, 0xa0e0ac5e, 0x96ad4ae9, 0x95d373f2, - 0x4e4d14af, 0xe6ed27ca, 0x3687a5f8, 0x9c5165b4, 0x25e293f8, 0x7f858bf7, - 0x40ed4036, 0x829de2a7, 0xc383a3f3, 0x7b202e6f, 0xa5cce714, 0xb77dfcf5, - 0x76c2e8cc, 0xaf1cdf74, 0x17ac49ea, 0x2df38b75, 0x7ce352bd, 0xe724be79, - 0xbf68350f, 0xfb2f6306, 0x9e97f9f1, 0xc79f9077, 0xc62814ba, 0x47c5a28d, - 0xbea00d9f, 0xd270bfcf, 0xa2f84541, 0xa18e93ee, 0x2e03a96f, 0x50885504, - 0x3877b03c, 0xdb52bee8, 0x10c72ff3, 0x7d4f45d5, 0x34bd20e0, 0x471c2af4, - 0x41a8f61a, 0xb47afe0f, 0xf10745ef, 0x8153a5a8, 0xfdc9a531, 0xe663f71a, - 0xc23e7964, 0x092adffe, 0xf933ae7e, 0xe2d3f168, 0xce333aeb, 0xe54f6fac, - 0x763046e3, 0x0dfce096, 0x4f1c759d, 0x8e647437, 0xaabc5633, 0x28ead88f, - 0x4eefd7ee, 0x1bf9b71d, 0x941c061e, 0xd9e3d317, 0xd3878b51, 0x70f11a60, - 0xa26eb238, 0xe97f791d, 0xa844c364, 0x37afa918, 0xe56d7ccc, 0xf5e9cbcb, - 0x0e67ef62, 0xf1fe73ca, 0xfc17df1a, 0x48edffe3, 0xe209c9e6, 0x25b7e609, - 0x3ed94fe1, 0x8b23e135, 0xc0dbbf69, 0xbdfa44d7, 0x53a39c2d, 0x24335bfd, - 0xd85976fc, 0x242a0c19, 0xdbf38d9f, 0x41da106d, 0x3bf58ff6, 0x92f03fb9, - 0x981075c2, 0xd4deac71, 0xdfa9bd77, 0x8d5fbc7a, 0x30f54d9b, 0xfae283ea, - 0x6ea37b55, 0xbf316fec, 0x3476bd37, 0x0cbcf48f, 0x16599c44, 0xb2c67112, - 0xd2279597, 0xd0331cfd, 0x8ddec98f, 0x823c2761, 0x719b97e3, 0xc6277966, - 0xdfa46519, 0x30e6c6c7, 0x423d025f, 0xd8bcf4de, 0xfe3a9dd2, 0x2ba8814c, - 0xf67acd87, 0xd57b34cb, 0x02a721c4, 0x51e65bd7, 0x359e41bd, 0x8ffda768, - 0xe1fe42cf, 0x933dc7fa, 0x397b1ef8, 0xd669bd3b, 0x057b56e9, 0xc3ea8b12, - 0x5b91de90, 0xf737e490, 0x3921d860, 0x01a9e61a, 0xbdd27fd2, 0xd2ecc565, - 0xdd16f78c, 0x1d5fe38d, 0x6bd1febf, 0xc62def92, 0xe1e272de, 0x597f8a2f, - 0x43e29b33, 0x172788a7, 0x7cdd70ab, 0xeb81c3aa, 0x33a77f5a, 0x3f0bf748, - 0xadea88f2, 0xf213c4a5, 0x0b72b0cf, 0xfeeb04f1, 0x4afeb4f1, 0xe146192c, - 0x8af657f9, 0xe2e5647a, 0xaf77994f, 0x46e7164d, 0x74c98dbd, 0xffeab00f, - 0x9d442f96, 0xb16f7d69, 0xa03df10f, 0x6f30ac25, 0x9cbe07bb, 0xc6f28a50, - 0x509f3efa, 0x16eb5887, 0x54f5b479, 0x797d5036, 0xa0ceaff1, 0x74bce513, - 0x1f0fe5f8, 0x2ea5f6c0, 0xf2e63117, 0xc1d95c71, 0x0da2d37e, 0x721d7115, - 0xebbceb18, 0x7c73bd68, 0xc81ee88f, 0xbc40dbba, 0x5137ceb8, 0xb5bb16ff, - 0xa9d71b42, 0x9183b06d, 0x3ae499ea, 0xcac75eae, 0x8d864b14, 0x566bfe66, - 0x7bc42373, 0x57346e2b, 0x883dc625, 0x6b88dffc, 0x533b38dc, 0x5cec08fc, - 0x1b8c8ca0, 0x777b158d, 0xfd5321ba, 0x977ce113, 0xe3dcef5e, 0x24e6de46, - 0x1e2a1b78, 0xde84b67a, 0xa13b4e71, 0xffce94b5, 0xafb204d5, 0x9ceb7e75, - 0x9e7e4ce7, 0xc601fba7, 0x952ad69d, 0x279b65f5, 0x708baad0, 0x7626f31e, - 0xf5483732, 0x17fe8cfe, 0x8d0788cb, 0xb25c7007, 0x7d1da1ff, 0x90438854, - 0x421cdcf9, 0x3ce492a1, 0x74e2ffd8, 0x97d91be2, 0xa6fc9dde, 0xb2e5d37d, - 0xfdc45150, 0xfb88a6d5, 0x287d8f6b, 0xfe4dee8f, 0x306d6ac3, 0xfcd67ec9, - 0x80fe4d7b, 0xefd3dc5d, 0x7c4420a7, 0xd81e0b0a, 0xef2204fa, 0x1a778ad6, - 0x334aca0d, 0x7e442ff4, 0x035e4b7c, 0xea6d0b92, 0x33cce2d7, 0xcb1b49ff, - 0x5c393fe3, 0x03df9c94, 0x8a18eeb4, 0xc04dad7b, 0x28072471, 0x0b1c62ce, - 0xf97b63e4, 0x97ae2ce9, 0x6abb65a2, 0xa9956e38, 0x5b6b7140, 0xc9a9e6ff, - 0x05bfe1f9, 0xe91738aa, 0x95aa98a1, 0xa6fec527, 0x9560da1e, 0xbc17cf79, - 0x7888140d, 0x27a3f782, 0x47ee19dd, 0x6ddeb5df, 0x3d8273ed, 0xfa974ec9, - 0x0dfef9ea, 0x52a6f85f, 0xef9f019c, 0xfd6dc26a, 0xfbe953f5, 0x57cdfea5, - 0xd2a4bbf3, 0x02bf9296, 0xd5315f24, 0x7914ef45, 0xefb9bfb0, 0xd460229d, - 0x276a7e58, 0x6efdafe7, 0x8ec4e751, 0x84fbf164, 0x07826502, 0xdd653930, - 0xb857eea6, 0x55ea688e, 0x583e648d, 0x22dc7af3, 0x1e261e0f, 0x1486b620, - 0x487ced83, 0xf3ef5360, 0x16a34f2c, 0x76b63b62, 0x4bbfa26a, 0x3c97d620, - 0x00ee002f, 0x39feafc9, 0x52754c3c, 0x87964f73, 0x3eb14bde, 0xc4b1f914, - 0xfa8fdc19, 0x99c2f459, 0xcd5b8a22, 0xf50a682f, 0xbbea50c3, 0x679b736d, - 0xbde88fc5, 0xe81575e0, 0xda55e1dd, 0xc4b0ed02, 0x4d54d181, 0x1d66efca, - 0x5f9bb560, 0xc8d4abaa, 0xcb06dbef, 0xe6ce512b, 0x3b4abafe, 0x78b4f419, - 0xb634ba0f, 0x3009eb91, 0x95b65d84, 0x27f0a634, 0xf7290300, 0xb14e506e, - 0x8d61631e, 0x03a281df, 0xfde9ca67, 0x6fe4b9a8, 0x7347e4e5, 0x537bc50a, - 0x554bbd33, 0x7de27c90, 0x4d7f9aca, 0xafb3f0a1, 0x0b7b7f4d, 0x7bcda3bc, - 0x9e1b2ece, 0x4d1aadff, 0x05eb847f, 0x6edd9f51, 0xb7d5cdc6, 0xbc5f5c69, - 0xc78d1e05, 0xcca18a1b, 0xfac8bce5, 0xa78cddb9, 0xe352aa2b, 0xf03dcadb, - 0x91a11670, 0x635b4eb9, 0x0c0abfae, 0x7575775e, 0x6635b8ea, 0x36a6b69d, - 0x56e7fbf5, 0x930c9cdc, 0xc2ea6e39, 0x66c75b9e, 0xb90c7e71, 0x0cdef93c, - 0xb475e279, 0xf541c78f, 0x683c0b9a, 0x1c66e3a7, 0x01c92b6d, 0x177e28f7, - 0xa3fd9209, 0x53bfbed9, 0x719f8ade, 0x34553bf2, 0x1565ce2d, 0x29cd3f0a, - 0x514a7114, 0x9b276ca2, 0xa3ed9c72, 0xed9baf28, 0xe7ec5237, 0x533bc4d7, - 0xfc937914, 0xacc27c8e, 0x788aa223, 0x7b974b47, 0x8778a17c, 0x34dfa11a, - 0x5fd08ebd, 0x36a2de9a, 0x6ec5c751, 0x5ffef856, 0xc519f58e, 0x958bb5af, - 0x14f141a0, 0x2bfdc0f5, 0x54c3d615, 0x62704f88, 0x8f981dff, 0x4d8beea8, - 0xb6fd7513, 0xefe2f9b5, 0x9b780124, 0x64f168ec, 0x57e45d85, 0x286b0f8b, - 0xdf12cebf, 0x6ede9f29, 0x7755d3e6, 0x850af35e, 0xadaf4b45, 0x2f9ca7e4, - 0xb1463146, 0x475e20be, 0x53c7eafb, 0x917d23dc, 0xf32f479f, 0xadc2742e, - 0xa72e7eb1, 0x2fd36abf, 0xa839476e, 0x7adefdae, 0xeba5e734, 0x9530bab3, - 0x2b581887, 0xf2138fc8, 0xc7e6333b, 0x943ca6d5, 0x47e80363, 0xedfd4d6b, - 0x2eadf7cd, 0x0477efc4, 0x7e4c3d57, 0xb3d94675, 0xce2410ff, 0x9d187a4d, - 0x85addeb4, 0x090c3de2, 0x9b7ef192, 0x16f0179e, 0xd7b8e016, 0x54af718f, - 0x241777bc, 0x933eebe9, 0xb161d7d7, 0x079c764a, 0x25de9501, 0xdc3b03ae, - 0x443b6d45, 0x200b88ec, 0xfe81dfc2, 0x4fc45608, 0x9d73fcea, 0x9944723d, - 0xeff8e3c5, 0x9061f343, 0x7108ddc7, 0x3b740346, 0x32f042e1, 0xcb22b956, - 0x08af6ca9, 0x4baa5485, 0x82f64523, 0x5213a8b3, 0x2473a665, 0xb38763ce, - 0xd2a2fd56, 0x0b6011df, 0x3cfd3dd9, 0x0c79d61d, 0x0d4a4bc1, 0x555ca177, - 0x93695210, 0x1548601b, 0x39f32ff1, 0x4ddd6016, 0x01b8b77f, 0xfacd9fed, - 0xebf8f208, 0xa66a3ce9, 0xaf2d0cf3, 0xeb1615e0, 0x29129f24, 0xf39d7db2, - 0x2b11cfdd, 0x6f375e02, 0x03e2fc7d, 0xfbbf8995, 0x9eafc378, 0x2a3d3fa6, - 0xd3f70186, 0x665c4ddf, 0x9fb11add, 0x788f86ff, 0xe17dfd3f, 0x5215dfba, - 0x7ce8f23c, 0x8781f04e, 0xf60638f8, 0xb23f74e8, 0x7142b8d1, 0x128b8fdc, - 0x5c103bbc, 0x2f21b1e5, 0xf2e518ee, 0x43cca5aa, 0xab8d675e, 0xcf7a4ae3, - 0xe14e4d43, 0x91e4c1ba, 0x6aab7f25, 0x2af891fc, 0x8944a251, 0x944a2512, - 0x44a25128, 0x4a251289, 0xa2512894, 0x25128944, 0x5128944a, 0x128944a2, - 0x28944a25, 0x8944a251, 0x944a2512, 0x44a25128, 0x4a251289, 0xa2512894, - 0x25128944, 0x5128944a, 0x128944a2, 0x28944a25, 0x8944a251, 0x944a2512, - 0x44a25128, 0x4a251289, 0xa2512894, 0x25128944, 0x5128944a, 0x128944a2, - 0x28944a25, 0xffe12251, 0x72255300, 0x008000ab, 0x00000000, 0x00088b1f, - 0x00000000, 0xc5edff00, 0x30001131, 0xee300408, 0xd85aa12a, 0xaa66f6b1, - 0x964d2113, 0x5dbbcce4, 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x3d017e3f, 0x009b1baa, 0x00009b1b, 0x00088b1f, - 0x00000000, 0xc5edff00, 0x30001131, 0xee300408, 0xd85aa12a, 0xaa66f6b1, - 0x964d2113, 0x5dbbcce4, 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x3d017e3f, 0x009b1baa, 0x00009b1b, 0x00088b1f, - 0x00000000, 0xc5edff00, 0x30001131, 0xee300408, 0xd85aa12a, 0xaa66f6b1, - 0x964d2113, 0x5dbbcce4, 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x3d017e3f, 0x009b1baa, 0x00009b1b, 0x00088b1f, - 0x00000000, 0xc5edff00, 0x30001131, 0xee300408, 0xd85aa12a, 0xaa66f6b1, - 0x964d2113, 0x5dbbcce4, 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x3d017e3f, 0x009b1baa, 0x00009b1b, 0x00088b1f, - 0x00000000, 0xc5edff00, 0x30001131, 0xee300408, 0xd85aa12a, 0xaa66f6b1, - 0x964d2113, 0x5dbbcce4, 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x3d017e3f, 0x009b1baa, 0x00009b1b, 0x00088b1f, - 0x00000000, 0xc5edff00, 0x30001131, 0xee300408, 0xd85aa12a, 0xaa66f6b1, - 0x964d2113, 0x5dbbcce4, 0x6db6db15, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x3d017e3f, 0x009b1baa, 0x00009b1b, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0x00001000, 0x00002080, 0x00003100, - 0x00004180, 0x00005200, 0x00006280, 0x00007300, 0x00008380, 0x00009400, - 0x0000a480, 0x0000b500, 0x0000c580, 0x0000d600, 0x0000e680, 0x0000f700, - 0x00010780, 0x00011800, 0x00012880, 0x00013900, 0x00014980, 0x00015a00, - 0x00016a80, 0x00017b00, 0x00018b80, 0x00019c00, 0x0001ac80, 0x0001bd00, - 0x0001cd80, 0x0001de00, 0x0001ee80, 0x0001ff00, 0x00000000, 0x00010001, - 0x000e0004, 0xcccccccd, 0xffffffff, 0xffffffff, 0xcccc0201, 0xcccccccc, - 0x00100000, 0x00000000, 0x00000000, 0xffffffff, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x00000000, 0x00007ff8, 0x00000000, 0x00001500, + 0x00001000, 0x00002080, 0x00003100, 0x00004180, 0x00005200, 0x00006280, + 0x00007300, 0x00008380, 0x00009400, 0x0000a480, 0x0000b500, 0x0000c580, + 0x0000d600, 0x0000e680, 0x0000f700, 0x00010780, 0x00011800, 0x00012880, + 0x00013900, 0x00014980, 0x00015a00, 0x00016a80, 0x00017b00, 0x00018b80, + 0x00019c00, 0x0001ac80, 0x0001bd00, 0x0001cd80, 0x0001de00, 0x0001ee80, + 0x0001ff00, 0x00000000, 0x00010001, 0x000f0604, 0xccccccc1, 0xffffffff, + 0xffffffff, 0xcccc0201, 0xcccccccc, 0x00000000, 0xffffffff, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x00000000, 0x00007ff8, 0x00000000, 0x00003500, 0x0000ffff, + 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, + 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, + 0x00000000, 0x0000ffff, 0x00000000, 0x00100000, 0x00000000, 0x0000ffff, + 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, + 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, + 0x00000000, 0x0000ffff, 0x00000000, 0x00100000, 0x00000000, 0xfffffff3, + 0x320fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0000cf3c, + 0xcdcdcdcd, 0xfffffff1, 0x30efffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, 0xfffffff6, 0x305fffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, 0xfffff406, + 0x1cbfffff, 0x0c30c305, 0xc30c30c3, 0xcf300014, 0xf3cf3cf3, 0x0004cf3c, + 0xcdcdcdcd, 0xfffffff2, 0x304fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, 0xfffffffa, 0x302fffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xfffffff7, + 0x31efffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0020cf3c, + 0xcdcdcdcd, 0xfffffff5, 0x302fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, 0xfffffff3, 0x310fffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, 0xfffffff1, + 0x310fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0001cf3c, + 0xcdcdcdcd, 0xfffffff6, 0x305fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, 0xfffff406, 0x1cbfffff, 0x0c30c305, + 0xc30c30c3, 0xcf300014, 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, 0xfffffff2, + 0x304fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0008cf3c, + 0xcdcdcdcd, 0xfffffffa, 0x302fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xfffffff7, 0x30efffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, 0xfffffff5, + 0x304fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0040cf3c, + 0xcdcdcdcd, 0xfffffff3, 0x31efffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, 0xfffffff1, 0x310fffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, 0xfffffff6, + 0x305fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0002cf3c, + 0xcdcdcdcd, 0xfffff406, 0x1cbfffff, 0x0c30c305, 0xc30c30c3, 0xcf300014, + 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, 0xfffffff2, 0x304fffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, 0xfffffffa, + 0x302fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0010cf3c, + 0xcdcdcdcd, 0xffffff97, 0x056fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cc000, + 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, 0xfffffff5, 0x310fffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, 0xfffffff3, + 0x320fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0000cf3c, + 0xcdcdcdcd, 0xfffffff1, 0x310fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, 0xfffffff6, 0x305fffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, 0xfffff406, + 0x1cbfffff, 0x0c30c305, 0xc30c30c3, 0xcf300014, 0xf3cf3cf3, 0x0004cf3c, + 0xcdcdcdcd, 0xfffffff2, 0x304fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, 0xffffff8a, 0x042fffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cc000, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xffffff97, + 0x05cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cc000, 0xf3cf3cf3, 0x0020cf3c, + 0xcdcdcdcd, 0xfffffff5, 0x310fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, 0xfffffff3, 0x300fffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, 0xfffffff1, + 0x300fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0001cf3c, + 0xcdcdcdcd, 0xfffffff6, 0x305fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, 0xfffff406, 0x1cbfffff, 0x0c30c305, + 0xc30c30c3, 0xcf300014, 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, 0xfffffff2, + 0x304fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0008cf3c, + 0xcdcdcdcd, 0xfffffffa, 0x302fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, + 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xffffff97, 0x040fffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cc000, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, 0xfffffff5, + 0x300fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0040cf3c, + 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, + 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, 0xffffffff, + 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0002cf3c, + 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, + 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, 0xffffffff, + 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0010cf3c, + 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, + 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, 0xffffffff, + 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0000cf3c, + 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, + 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, 0xffffffff, + 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0004cf3c, + 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, + 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xffffffff, + 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0020cf3c, + 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, + 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, 0xffffffff, + 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0001cf3c, + 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, + 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, 0xffffffff, + 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0008cf3c, + 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, + 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, + 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, 0xffffffff, + 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0040cf3c, + 0xcdcdcdcd, 0x00100000, 0x00070100, 0x00028170, 0x000b8198, 0x00020250, + 0x00010270, 0x000f0280, 0x00010370, 0x00080000, 0x00080080, 0x00028100, + 0x000b8128, 0x000201e0, 0x00010200, 0x00070210, 0x00020280, 0x000f0000, + 0x000800f0, 0x00028170, 0x000b8198, 0x00020250, 0x00010270, 0x000b8280, + 0x00080338, 0x00100000, 0x00080100, 0x00028180, 0x000b81a8, 0x00020260, + 0x00018280, 0x000e8298, 0x00080380, 0x00028000, 0x000b8028, 0x000200e0, + 0x00010100, 0x00008110, 0x00000118, 0xcccccccc, 0xcccccccc, 0xcccccccc, + 0xcccccccc, 0x00002000, 0xcccccccc, 0xcccccccc, 0xcccccccc, 0xcccccccc, + 0x00002000, 0xcccccccc, 0xcccccccc, 0xcccccccc, 0xcccccccc, 0x00002000 +}; + +static const u32 init_data_e1h[] = { + 0x00010000, 0x000204c0, 0x00030980, 0x00040e40, 0x00051300, 0x000617c0, + 0x00071c80, 0x00082140, 0x00092600, 0x000a2ac0, 0x000b2f80, 0x000c3440, + 0x000d3900, 0x000e3dc0, 0x000f4280, 0x00104740, 0x00114c00, 0x001250c0, + 0x00135580, 0x00145a40, 0x00155f00, 0x001663c0, 0x00176880, 0x00186d40, + 0x00197200, 0x001a76c0, 0x001b7b80, 0x001c8040, 0x001d8500, 0x001e89c0, + 0x001f8e80, 0x00209340, 0x00002000, 0x00004000, 0x00006000, 0x00008000, + 0x0000a000, 0x0000c000, 0x0000e000, 0x00010000, 0x00012000, 0x00014000, + 0x00016000, 0x00018000, 0x0001a000, 0x0001c000, 0x0001e000, 0x00020000, + 0x00022000, 0x00024000, 0x00026000, 0x00028000, 0x0002a000, 0x0002c000, + 0x0002e000, 0x00030000, 0x00032000, 0x00034000, 0x00036000, 0x00038000, + 0x0003a000, 0x0003c000, 0x0003e000, 0x00040000, 0x00042000, 0x00044000, + 0x00046000, 0x00048000, 0x0004a000, 0x0004c000, 0x0004e000, 0x00050000, + 0x00052000, 0x00054000, 0x00056000, 0x00058000, 0x0005a000, 0x0005c000, + 0x0005e000, 0x00060000, 0x00062000, 0x00064000, 0x00066000, 0x00068000, + 0x0006a000, 0x0006c000, 0x0006e000, 0x00070000, 0x00072000, 0x00074000, + 0x00076000, 0x00078000, 0x0007a000, 0x0007c000, 0x0007e000, 0x00080000, + 0x00082000, 0x00084000, 0x00086000, 0x00088000, 0x0008a000, 0x0008c000, + 0x0008e000, 0x00090000, 0x00092000, 0x00094000, 0x00096000, 0x00098000, + 0x0009a000, 0x0009c000, 0x0009e000, 0x000a0000, 0x000a2000, 0x000a4000, + 0x000a6000, 0x000a8000, 0x000aa000, 0x000ac000, 0x000ae000, 0x000b0000, + 0x000b2000, 0x000b4000, 0x000b6000, 0x000b8000, 0x000ba000, 0x000bc000, + 0x000be000, 0x000c0000, 0x000c2000, 0x000c4000, 0x000c6000, 0x000c8000, + 0x000ca000, 0x000cc000, 0x000ce000, 0x000d0000, 0x000d2000, 0x000d4000, + 0x000d6000, 0x000d8000, 0x000da000, 0x000dc000, 0x000de000, 0x000e0000, + 0x000e2000, 0x000e4000, 0x000e6000, 0x000e8000, 0x000ea000, 0x000ec000, + 0x000ee000, 0x000f0000, 0x000f2000, 0x000f4000, 0x000f6000, 0x000f8000, + 0x000fa000, 0x000fc000, 0x000fe000, 0x00100000, 0x00102000, 0x00104000, + 0x00106000, 0x00108000, 0x0010a000, 0x0010c000, 0x0010e000, 0x00110000, + 0x00112000, 0x00114000, 0x00116000, 0x00118000, 0x0011a000, 0x0011c000, + 0x0011e000, 0x00120000, 0x00122000, 0x00124000, 0x00126000, 0x00128000, + 0x0012a000, 0x0012c000, 0x0012e000, 0x00130000, 0x00132000, 0x00134000, + 0x00136000, 0x00138000, 0x0013a000, 0x0013c000, 0x0013e000, 0x00140000, + 0x00142000, 0x00144000, 0x00146000, 0x00148000, 0x0014a000, 0x0014c000, + 0x0014e000, 0x00150000, 0x00152000, 0x00154000, 0x00156000, 0x00158000, + 0x0015a000, 0x0015c000, 0x0015e000, 0x00160000, 0x00162000, 0x00164000, + 0x00166000, 0x00168000, 0x0016a000, 0x0016c000, 0x0016e000, 0x00170000, + 0x00172000, 0x00174000, 0x00176000, 0x00178000, 0x0017a000, 0x0017c000, + 0x0017e000, 0x00180000, 0x00182000, 0x00184000, 0x00186000, 0x00188000, + 0x0018a000, 0x0018c000, 0x0018e000, 0x00190000, 0x00192000, 0x00194000, + 0x00196000, 0x00198000, 0x0019a000, 0x0019c000, 0x0019e000, 0x001a0000, + 0x001a2000, 0x001a4000, 0x001a6000, 0x001a8000, 0x001aa000, 0x001ac000, + 0x001ae000, 0x001b0000, 0x001b2000, 0x001b4000, 0x001b6000, 0x001b8000, + 0x001ba000, 0x001bc000, 0x001be000, 0x001c0000, 0x001c2000, 0x001c4000, + 0x001c6000, 0x001c8000, 0x001ca000, 0x001cc000, 0x001ce000, 0x001d0000, + 0x001d2000, 0x001d4000, 0x001d6000, 0x001d8000, 0x001da000, 0x001dc000, + 0x001de000, 0x001e0000, 0x001e2000, 0x001e4000, 0x001e6000, 0x001e8000, + 0x001ea000, 0x001ec000, 0x001ee000, 0x001f0000, 0x001f2000, 0x001f4000, + 0x001f6000, 0x001f8000, 0x001fa000, 0x001fc000, 0x001fe000, 0x00200000, + 0x00202000, 0x00204000, 0x00206000, 0x00208000, 0x0020a000, 0x0020c000, + 0x0020e000, 0x00210000, 0x00212000, 0x00214000, 0x00216000, 0x00218000, + 0x0021a000, 0x0021c000, 0x0021e000, 0x00220000, 0x00222000, 0x00224000, + 0x00226000, 0x00228000, 0x0022a000, 0x0022c000, 0x0022e000, 0x00230000, + 0x00232000, 0x00234000, 0x00236000, 0x00238000, 0x0023a000, 0x0023c000, + 0x0023e000, 0x00240000, 0x00242000, 0x00244000, 0x00246000, 0x00248000, + 0x0024a000, 0x0024c000, 0x0024e000, 0x00250000, 0x00252000, 0x00254000, + 0x00256000, 0x00258000, 0x0025a000, 0x0025c000, 0x0025e000, 0x00260000, + 0x00262000, 0x00264000, 0x00266000, 0x00268000, 0x0026a000, 0x0026c000, + 0x0026e000, 0x00270000, 0x00272000, 0x00274000, 0x00276000, 0x00278000, + 0x0027a000, 0x0027c000, 0x0027e000, 0x00280000, 0x00282000, 0x00284000, + 0x00286000, 0x00288000, 0x0028a000, 0x0028c000, 0x0028e000, 0x00290000, + 0x00292000, 0x00294000, 0x00296000, 0x00298000, 0x0029a000, 0x0029c000, + 0x0029e000, 0x002a0000, 0x002a2000, 0x002a4000, 0x002a6000, 0x002a8000, + 0x002aa000, 0x002ac000, 0x002ae000, 0x002b0000, 0x002b2000, 0x002b4000, + 0x002b6000, 0x002b8000, 0x002ba000, 0x002bc000, 0x002be000, 0x002c0000, + 0x002c2000, 0x002c4000, 0x002c6000, 0x002c8000, 0x002ca000, 0x002cc000, + 0x002ce000, 0x002d0000, 0x002d2000, 0x002d4000, 0x002d6000, 0x002d8000, + 0x002da000, 0x002dc000, 0x002de000, 0x002e0000, 0x002e2000, 0x002e4000, + 0x002e6000, 0x002e8000, 0x002ea000, 0x002ec000, 0x002ee000, 0x002f0000, + 0x002f2000, 0x002f4000, 0x002f6000, 0x002f8000, 0x002fa000, 0x002fc000, + 0x002fe000, 0x00300000, 0x00302000, 0x00304000, 0x00306000, 0x00308000, + 0x0030a000, 0x0030c000, 0x0030e000, 0x00310000, 0x00312000, 0x00314000, + 0x00316000, 0x00318000, 0x0031a000, 0x0031c000, 0x0031e000, 0x00320000, + 0x00322000, 0x00324000, 0x00326000, 0x00328000, 0x0032a000, 0x0032c000, + 0x0032e000, 0x00330000, 0x00332000, 0x00334000, 0x00336000, 0x00338000, + 0x0033a000, 0x0033c000, 0x0033e000, 0x00340000, 0x00342000, 0x00344000, + 0x00346000, 0x00348000, 0x0034a000, 0x0034c000, 0x0034e000, 0x00350000, + 0x00352000, 0x00354000, 0x00356000, 0x00358000, 0x0035a000, 0x0035c000, + 0x0035e000, 0x00360000, 0x00362000, 0x00364000, 0x00366000, 0x00368000, + 0x0036a000, 0x0036c000, 0x0036e000, 0x00370000, 0x00372000, 0x00374000, + 0x00376000, 0x00378000, 0x0037a000, 0x0037c000, 0x0037e000, 0x00380000, + 0x00382000, 0x00384000, 0x00386000, 0x00388000, 0x0038a000, 0x0038c000, + 0x0038e000, 0x00390000, 0x00392000, 0x00394000, 0x00396000, 0x00398000, + 0x0039a000, 0x0039c000, 0x0039e000, 0x003a0000, 0x003a2000, 0x003a4000, + 0x003a6000, 0x003a8000, 0x003aa000, 0x003ac000, 0x003ae000, 0x003b0000, + 0x003b2000, 0x003b4000, 0x003b6000, 0x003b8000, 0x003ba000, 0x003bc000, + 0x003be000, 0x003c0000, 0x003c2000, 0x003c4000, 0x003c6000, 0x003c8000, + 0x003ca000, 0x003cc000, 0x003ce000, 0x003d0000, 0x003d2000, 0x003d4000, + 0x003d6000, 0x003d8000, 0x003da000, 0x003dc000, 0x003de000, 0x003e0000, + 0x003e2000, 0x003e4000, 0x003e6000, 0x003e8000, 0x003ea000, 0x003ec000, + 0x003ee000, 0x003f0000, 0x003f2000, 0x003f4000, 0x003f6000, 0x003f8000, + 0x003fa000, 0x003fc000, 0x003fe000, 0x003fe001, 0x00000000, 0x000001ff, + 0x00000200, 0x00000001, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00007ff8, + 0x00000000, 0x00001500, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, + 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, + 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000003, + 0x00bebc20, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, + 0x00000003, 0x00bebc20, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, + 0xffffffff, 0x00000003, 0x00bebc20, 0xffffffff, 0x00000000, 0xffffffff, + 0x00000000, 0xffffffff, 0x00000003, 0x00bebc20, 0xffffffff, 0x00000000, + 0xffffffff, 0x00000000, 0xffffffff, 0x00000003, 0x00bebc20, 0xffffffff, + 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000003, 0x00bebc20, + 0x00002000, 0x000040c0, 0x00006180, 0x00008240, 0x0000a300, 0x0000c3c0, + 0x0000e480, 0x00010540, 0x00012600, 0x000146c0, 0x00016780, 0x00018840, + 0x0001a900, 0x0001c9c0, 0x0001ea80, 0x00020b40, 0x00022c00, 0x00024cc0, + 0x00026d80, 0x00028e40, 0x0002af00, 0x0002cfc0, 0x0002f080, 0x00031140, + 0x00033200, 0x000352c0, 0x00037380, 0x00039440, 0x0003b500, 0x0003d5c0, + 0x0003f680, 0x00041740, 0x00043800, 0x000458c0, 0x00047980, 0x00049a40, + 0x00008000, 0x00010380, 0x00018700, 0x00020a80, 0x00028e00, 0x00031180, + 0x00039500, 0x00041880, 0x00049c00, 0x00051f80, 0x0005a300, 0x00062680, + 0x0006aa00, 0x00072d80, 0x0007b100, 0x00083480, 0x0008b800, 0x00093b80, + 0x0009bf00, 0x000a4280, 0x000ac600, 0x000b4980, 0x000bcd00, 0x000c5080, + 0x000cd400, 0x000d5780, 0x000ddb00, 0x00001900, 0x00000028, 0x00100000, + 0x00000000, 0x00000000, 0xffffffff, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, - 0x40000000, 0x40000000, 0x00088b1f, 0x00000000, 0x1113ff00, 0x51f86066, - 0x423ec08f, 0xac9d0c0c, 0xc4b462a8, 0x1818990b, 0x12b102fe, 0x3c430333, - 0x203aded0, 0x2388107d, 0x16181858, 0x2fd610b0, 0x022bd404, 0x2c4062c4, - 0x19b7c401, 0x9cdfb348, 0x1f0f680b, 0xc8037f82, 0x3f4024be, 0x1c360fff, - 0xfb5f40ad, 0x1819d502, 0x8aa06bfe, 0xf2a26831, 0x9bf13519, 0xcf2684c1, - 0x2167c68c, 0x63247fa0, 0x0d75b600, 0x000400f1, 0x00000000, 0x00088b1f, - 0x00000000, 0x7dd5ff00, 0xd554780b, 0x673ef0b5, 0xf3399cce, 0x00fde4cc, - 0x108f0992, 0x2104e034, 0x0432b445, 0x3b69488c, 0xc514543c, 0xf791e109, - 0xb14a3e44, 0x44033bd2, 0x350af808, 0x0380a050, 0xed168d02, 0x06823ca0, - 0xfda2901c, 0x5a1bdedb, 0xcb6ab7bd, 0x880b851f, 0x52d11921, 0xf77ac5ea, - 0xcc9f7b5a, 0xd0049339, 0x9fdffed6, 0xcfb3767e, 0xd6bdaf7e, 0xf7b5ebda, - 0xa441c448, 0x84be421c, 0xfc8471bf, 0xa484205e, 0x83bf52c6, 0xa908a3a6, - 0x2d0867d9, 0xc26425cf, 0x5c64633e, 0x136fcd0a, 0x179a2642, 0xbcb19b0f, - 0xfbcb3373, 0xdd4f6d0d, 0x01c9cb4a, 0x1349d903, 0x49116f92, 0x1467211a, - 0xd146fec2, 0xf321117c, 0xb35b2ccd, 0x426cc8ed, 0x98b797eb, 0x3fb69988, - 0x81e0d7b3, 0x429dc2fc, 0xd439d088, 0x67255c1c, 0x8417fed1, 0x45d9b084, - 0x47e93bf3, 0xd7b15e5a, 0x5dfa8210, 0xaf34b68e, 0x01f3908d, 0x9864b885, - 0xed693bdf, 0x86548405, 0xd16494f6, 0x05bb957a, 0xa9c748b7, 0xc6442cdc, - 0x42ef828d, 0xa8bb40c8, 0x5712b66a, 0x97c39b3e, 0x75c5c704, 0xc742dc2c, - 0xa912fda5, 0x61daf651, 0xcbb2b5bc, 0xf9cf831e, 0x51c71380, 0xd3cf35f3, - 0xdabb6871, 0x2c370497, 0xbe2456b1, 0xf3bf1d30, 0x73e679a0, 0x32df5836, - 0x5daecf39, 0x587ee947, 0x9b686547, 0x7983625c, 0x17e7936d, 0x6aabfac4, - 0x6bcfd64e, 0x9f74a0c3, 0x3d3e3ca6, 0x95c4201f, 0x1257cb17, 0x60db09e2, - 0xea7921fe, 0x63f7d8f0, 0xb3f71124, 0x5c40d9aa, 0x427fac4a, 0x40ddf882, - 0x2b8011dc, 0xb5bbb569, 0xa9d176fb, 0x8985b7df, 0xf31f6dbc, 0xc3ef9a79, - 0x27a70e5a, 0x4d347e61, 0x499738f0, 0x1309fd74, 0x4ab85389, 0x3246b5fb, - 0x7acbdc33, 0x186405ef, 0x888f884d, 0xe25adf38, 0x2ed21fbb, 0x4e9caeb1, - 0x3245fe9e, 0xabbd74bc, 0xfbfed604, 0x57f585c4, 0xb03d900d, 0x2aef6baf, - 0xcb90ce7a, 0xf90292d7, 0xd0d6bbf9, 0x7926932e, 0x0257c008, 0x614015b8, - 0xcb40d07b, 0x4713bbed, 0xe16971ae, 0xc61f3c57, 0x75128c73, 0xcdbce3fb, - 0x4d27cba2, 0xaf838a4c, 0x46e679cd, 0x34f3a79e, 0xd211d189, 0x67c64220, - 0x8b6f882b, 0x9ba465b3, 0x79b3b7c5, 0x85b6ce2d, 0x38ff3482, 0xe685b834, - 0xce4ddf65, 0x4741e05e, 0xa4064916, 0xe98c913e, 0x7000de59, 0x9c5078a4, - 0x03ef2573, 0x68c5fa9a, 0x1f4d225e, 0x0107c616, 0x8e012b2e, 0x481ab534, - 0x6adbac1d, 0x86a70822, 0x05cf4521, 0x9d5a7035, 0x1b94e14b, 0xb1b577eb, - 0x09b8832e, 0x23bc1359, 0xf8526528, 0x1dcdd2e6, 0x23bdf30b, 0xdb4c1c12, - 0x00ce2ee7, 0xa5322a78, 0x32f8ed03, 0xc700bf1d, 0xae38046f, 0x3f18fbe7, - 0x463792be, 0x6079be37, 0xb37c6eb9, 0x38a7c74c, 0x5df829b9, 0x63853e3e, - 0x233f2116, 0x95f1c5df, 0xfc704b81, 0xeb949906, 0x8f74b7c6, 0x7771821f, - 0x437e31f5, 0xfafd58de, 0xd7ea5607, 0xbff5b32f, 0x8f9bbc10, 0xfff5c16f, - 0xd6cddc82, 0x6c47f03f, 0xafda26fd, 0x37477c76, 0xf700c3fc, 0x5fc07dfd, - 0x7e9b7a19, 0xf5aa83fd, 0xf1b137eb, 0xc83e0d5f, 0xf8e1b7c7, 0xd90791af, - 0xc52d07fa, 0x3aa64df1, 0x991693b7, 0x21752c72, 0xfd176bc0, 0x074d3a5f, - 0x45be71d3, 0x422482d3, 0x901ffb68, 0xc5870881, 0xa850df16, 0xf142c97f, - 0x0be316cd, 0x0052b424, 0x38e5afba, 0xa977773d, 0x326d24fc, 0x4bf185b7, - 0x10e9f942, 0x96cebf3a, 0x4fbd2f4f, 0x47773be7, 0x42e0dba1, 0x6ed0247a, - 0xdf8a5f1e, 0x8841e0c0, 0x1daa7b37, 0x7b3793f8, 0xf22c70da, 0x40599f00, - 0xf03d8e70, 0xf1a35e78, 0xbe86bb4c, 0xe7d06c16, 0xbcfa422b, 0x80f1ef3a, - 0x160d3424, 0x3a3afc93, 0x8fca19ee, 0x1f93e508, 0xe9047e52, 0x08792359, - 0x94d38dce, 0x4b59115f, 0x5f70cb57, 0xfe0c48ce, 0x91583667, 0x7dad2f1e, - 0x60832658, 0x640a563e, 0xf24178cd, 0xff9d3e76, 0x089d7c3d, 0x57e022e7, - 0xb4f73d6c, 0x47a14cd6, 0xb2779d2c, 0x31a75dae, 0xf5be0462, 0x963d0920, - 0x7b2ffb41, 0x87d18f62, 0x4fd3c7fc, 0xfd26ba44, 0xf7d74a44, 0xd87e34ce, - 0x733769ae, 0x3f635aef, 0xd3e7de9a, 0xae559f7f, 0x431a77cf, 0xe5ce1146, - 0xa36c810a, 0xa7583ffd, 0xf9c7572f, 0x7db1248c, 0x43dde3e6, 0x049992d7, - 0xfe91fa59, 0xeb64e7db, 0x497ae7a0, 0xca1f383f, 0x9a4ef704, 0x8dea107f, - 0x4b7c7d84, 0xe7b3ef86, 0x90d7ba25, 0x5225f39e, 0x9273f606, 0x25271b9f, - 0x08b753e3, 0x7edfe73d, 0x4711ead8, 0xfc475cf4, 0x4e221fbc, 0x968787dc, - 0x0697bfe8, 0xf0c7d7e3, 0x3e32dfc0, 0x7be6b4f9, 0xe4aef84d, 0xa97c1ad3, - 0xcbaa9e6a, 0xd3ee8457, 0xa1b05fd5, 0xaf3e5754, 0x5e5742b1, 0x2eb0f0d6, - 0x447c1a5f, 0x25a1ff57, 0x0fe574cb, 0x95d6add6, 0xab5f2acf, 0xdbe7dfcb, - 0xef7faba8, 0x72ba6dcc, 0x0e4570e1, 0xd97e37c8, 0xe1499397, 0x135de17e, - 0xf0c42ed9, 0x73f3c558, 0xcf4c0c81, 0x2e985c07, 0xf4a57a03, 0xa9641e2f, - 0x0e697b7f, 0xf78ab9d0, 0xd9758d67, 0xf8f12740, 0xf18f4f1d, 0x03780c78, - 0xe75f50e7, 0xbc40b579, 0x025df740, 0xefd48f3b, 0x97fce67f, 0x6f48e590, - 0xc7a332d5, 0x8b3397ea, 0xe5aa5e81, 0xad9d5e48, 0x58497eef, 0xb21075c0, - 0x08a9fb1d, 0xedd0aa51, 0x3cdd20eb, 0x70188e3b, 0x3e105afc, 0xdef3816e, - 0xf8c02a5b, 0xa7b23791, 0x78f9870f, 0x25be60e6, 0x4762f915, 0x69f25260, - 0xc5e7e009, 0x26605cf4, 0x3e0267a6, 0xca074f4c, 0x5030fd31, 0x607b6987, - 0x0327a609, 0x14ff4c41, 0xbdf4c068, 0x7fa62340, 0xf4c06c0c, 0x4c21033f, - 0x4c1e033b, 0x14d4f1bb, 0x90f903cd, 0x20226fbc, 0x2e1492e2, 0x3372a97f, - 0x5c85f961, 0x2e0bee6e, 0x27defbf1, 0xbc5048fc, 0x2c59beda, 0xa8e83f6c, - 0xf3a50893, 0xbbf6c335, 0x44bcb0e7, 0xdd843f90, 0xbbb2f95a, 0xf483d85f, - 0x9fc7ef6b, 0xf381dce1, 0x9e030def, 0x8af2247f, 0x0b5dba7b, 0xc047ba0f, - 0x86b75e6f, 0xd5fe5276, 0x7c31705f, 0x2e5c06b9, 0x039cf5be, 0x0cc2e8f8, - 0xe6fa79d1, 0x1357d7be, 0x34da75ce, 0xe8b7f1f3, 0x851b17f3, 0x741e4c49, - 0x0e18cc25, 0x9e74e0f8, 0x96fb0c1e, 0xcfdaa981, 0x79d90cc2, 0x85ea193a, - 0x77643d70, 0xd517e222, 0x3fdeb047, 0xf57d1e7b, 0x5ec79b13, 0x47b68a72, - 0xdf507b19, 0x0bc4fbf5, 0xe41933e9, 0xbc6ad268, 0x85aae704, 0x40e5f7fe, - 0xbcc257e8, 0x6c3fafda, 0x826e9a08, 0xe375bbef, 0x552e76d1, 0x7d7683d7, - 0xce449fe3, 0x5941f8a8, 0x6fae09d2, 0x9d9b3556, 0xa89d7e7a, 0x325bfbcb, - 0x0dfe3a9d, 0x4af4a0ff, 0x9c120a26, 0x2b1cd5bb, 0x835b24ba, 0x1bb7e740, - 0x8bee86f0, 0x6af5605f, 0x47d97694, 0x67dc2d3f, 0xe17df3c7, 0x05efae5a, - 0x9fb41b49, 0x70778633, 0xd34ace85, 0x449ce51f, 0x9e32f9a4, 0x39aef553, - 0x7cf0ab7b, 0x94126fff, 0xc8ff3ce1, 0xe70458d0, 0x9b786553, 0x76fba1ec, - 0x80938881, 0xbf205cef, 0x91acdc77, 0x3208afe3, 0x41acb7ae, 0x79516e7f, - 0xf2a79747, 0x9f3f2e8e, 0x3d034b4c, 0x91937e6a, 0xff285e8a, 0x043bcae8, - 0x80bbf627, 0xfe04add4, 0xcdef6a7e, 0x700adcf7, 0xc8a5b03c, 0x6873f347, - 0xbf4a3f71, 0x6427cd95, 0x3aaf93a0, 0x1fb4057e, 0x755c73d9, 0x51f43d5d, - 0x669a870e, 0x85ea13c1, 0xa6459b9f, 0x9f74a9d7, 0x72753a25, 0x7e5c5e5b, - 0xf6fe5c64, 0xc6d7fcb8, 0x908a149f, 0xdefdb169, 0x44f2f82d, 0x478043e0, - 0xf9bc3109, 0xf467fdda, 0x3fe47fe8, 0x44feffb5, 0xffb4ff87, 0xfda9ffdb, - 0xff31ee0f, 0x5ff5bdc9, 0x149e8a6b, 0xdd7b1ce0, 0xe198e78c, 0x7a0839b0, - 0x19ab7f82, 0xf637dcf5, 0xd01775fd, 0x26b3e75d, 0x8e7a6262, 0x93bff280, - 0xdf767bf5, 0x0ffeb75f, 0x8d0b3f2d, 0xb60b7f69, 0xef80fad2, 0x64c8adbb, - 0x184e5eba, 0x2f5d2841, 0xefd1fd78, 0x2e2f2a11, 0x91dee2b0, 0x0f4cbf05, - 0x51fb00ad, 0x799fcb2a, 0x08284071, 0xed979e76, 0x1808c311, 0xa3ed40f7, - 0xad2fee30, 0xa42d1e84, 0xd61375f3, 0xa305fceb, 0x2ee78a7f, 0x24415e9d, - 0xe77e3757, 0xb5241c02, 0xe052f85c, 0xf0e22840, 0xd55ef4a1, 0x8f31e092, - 0xfbeaf800, 0x2e8c60b9, 0x0eff2376, 0x5bc88966, 0x77205922, 0xcb53d7c7, - 0x5540e2fd, 0xb6ec581e, 0xfd53eac5, 0x37cb3e79, 0xa0fd3166, 0x052feb0d, - 0x958d49fa, 0xd597ecf7, 0xcec891ff, 0xac3f58db, 0x53d72d7d, 0x1572e9e3, - 0xe6aacba7, 0xa6f6862f, 0x7f32f55f, 0xa65fbefc, 0xafdd0582, 0x10e6cbe0, - 0x23b5616c, 0x6bef7a82, 0x6d511edc, 0x9e1ea089, 0x3905c7c5, 0x6944f20f, - 0x8ced097f, 0xf404cc07, 0xedd79add, 0x9adfd81e, 0xf33d7ffd, 0x63bdfa33, - 0xf80dd59f, 0x0ffaf350, 0x4c6bdf71, 0xdd02d991, 0x2a1ee8bf, 0x1dfad2ff, - 0x4d9d7e7b, 0xc61d3f68, 0x55d27648, 0x613565ec, 0xcafc9c53, 0xe03e7de6, - 0x98f2019e, 0x3b5447ca, 0x53fb7c5a, 0x45cff162, 0x4417970a, 0x7c88b34f, - 0xa9df6f4b, 0x5d39525c, 0xfdabde7b, 0xbecc4a54, 0xc43f7ea4, 0x1ba87be1, - 0x2e935fce, 0xf2e83d6d, 0x02ebcc10, 0xf3834b69, 0x13f9b6a8, 0x4aed4419, - 0x2e813590, 0xbee032df, 0xa12b9b10, 0x4d4df937, 0x4cc605cf, 0x75de5097, - 0xfedfea63, 0xc28b2381, 0x4f86fe7f, 0xe91ce1b2, 0x199e643a, 0x7f39fd42, - 0xbf1834ba, 0xa0f5dca3, 0x51eb8ac1, 0xe3a4abc7, 0xf5b10bd5, 0x755c6b5f, - 0xaefc753c, 0xcfac9f8d, 0x69f8e174, 0xb8fc7e30, 0x5c753b6a, 0xde7c572a, - 0xd886978d, 0x414b96fe, 0x72c3ce19, 0x947ee122, 0x14797a93, 0xcd8841d2, - 0x74ed4977, 0x97ca9f90, 0x4a5d3edc, 0xf900f366, 0x6901e60d, 0x5ef1c6d7, - 0xfb7fa380, 0x3a520554, 0x305f5c0f, 0x221a16d3, 0x3ca0f9b0, 0x7d414c1f, - 0x777be257, 0xe9fdf026, 0x17b87f4c, 0xb81d39fb, 0xf1c6f313, 0x1437c875, - 0x85a988d2, 0x1ffd3184, 0x8f9c46f1, 0x90238a8d, 0x98f81aa7, 0x0e11c359, - 0xb6245979, 0xe913f87e, 0xcdbf2b38, 0x572ddad7, 0x30e1c53d, 0x580679c5, - 0xbe47d066, 0x08ae5da4, 0xa3f364cc, 0xbe5128f8, 0x517f84e5, 0xc79d3a78, - 0x103826ff, 0x4a7ad9ef, 0x5d056848, 0x7c73248f, 0xbe184c99, 0x5e265c34, - 0xdd3c1d8d, 0x090ef8c0, 0xe83e411e, 0x5fc1fde0, 0x9451e694, 0x245655a7, - 0x7802df64, 0x089270e1, 0x91b7638c, 0xd8047588, 0x5af3a551, 0x1b79c1f9, - 0xa8ecebcd, 0x3a78f2fa, 0xb14bed53, 0x7e70db71, 0xe2cfdfb4, 0xae2cfdfa, - 0xd6aecfdf, 0xbf270aaf, 0x740bddb2, 0x87c058fc, 0xa78ea6fb, 0x7c28f1f0, - 0x113f51f2, 0x429dee2d, 0xd616ae0c, 0x22633d15, 0xc0337fb8, 0xf4e14ce8, - 0xe8e1c278, 0xb29050a3, 0xd7fe0081, 0xfd353b73, 0xed34daf3, 0x7a415388, - 0x99c7cd5e, 0xa1fc6061, 0x9ecff39e, 0xee78cdf5, 0xee6fa8f7, 0xf7a5beab, - 0xe6bef6fa, 0x3e75ed63, 0xd55f955f, 0xff5ffebe, 0xf869711e, 0x52829396, - 0x30ccaf2f, 0x126b7ed0, 0x1dbdfccf, 0x0f5144bf, 0xf7ebfa51, 0x4af802cb, - 0x5832c7f1, 0xa056ddff, 0xf05ee7df, 0xd74996c5, 0x63af9331, 0x14e97366, - 0x86264738, 0x526496a6, 0x5abfbf3c, 0x17709b70, 0xbce8ffe9, 0xbaf3e3ee, - 0x3a4051bf, 0x21917fb8, 0x6ec5eae4, 0x41fe0b35, 0x09d567cb, 0xd3d088a1, - 0x1b4b057e, 0x3e760696, 0x3b4f6e36, 0xeaf1045c, 0x6cde3e21, 0x0c1a4a42, - 0x845bed3d, 0xef2957e3, 0x35dede27, 0x2ed1b887, 0xffcf2f16, 0xe463e419, - 0x91b921c7, 0x46c1afee, 0x31e416f1, 0xfe8dc583, 0x3037fe90, 0xdc2159fd, - 0x2e5047ce, 0xa4040722, 0x573e8bfb, 0xec55d242, 0x33025b30, 0x62f0ced1, - 0xd9a60360, 0xce043c8b, 0x412f6961, 0xa05b7f79, 0xdf0fbf1c, 0xd1942edb, - 0x176ce4bc, 0x6774d3e6, 0x1f7e0960, 0x3fafaf58, 0x644baf7c, 0xd4225cf5, - 0xc3e0367b, 0xea05cf7a, 0x7cf5bed0, 0x3ff301a0, 0xcd31040f, 0x95f3626b, - 0x2fe82a96, 0x11a045fc, 0x18fed1eb, 0x41427aff, 0x2f7c3cfe, 0x79b797ab, - 0x2dd6084c, 0x777e7939, 0x197fe639, 0x377f6108, 0xb5fde0ec, 0xb30b9412, - 0xb3afdd17, 0xce96b863, 0x030fc9d1, 0xe5752beb, 0x3f063aea, 0x6f5750b1, - 0x5890def8, 0xfdf30056, 0xe4bbee91, 0xffe0890c, 0x5cbcdfcb, 0x3b0dcfd7, - 0x15eae8d6, 0xae89feec, 0x4ddec47c, 0x75bbbcba, 0xeeaf2ebb, 0xca65f54f, - 0x5679e9d8, 0x4205f975, 0x2fdb3f28, 0xf4375e79, 0x075cb722, 0x76bca05e, - 0x69f87c2d, 0x5c7083c0, 0x4840f545, 0xb3fcb833, 0x3493ec1a, 0x27d838ff, - 0xecc82fd1, 0x3b734f54, 0x3e40dad5, 0xe0267f7e, 0xc0bafcc6, 0x0c6fcc18, - 0xcffcc24c, 0xdfcc5e02, 0x09bf3123, 0xf00da9e0, 0xda3359f4, 0xe9671087, - 0x525b5d7f, 0x923f2043, 0x32f1c68c, 0xa2e637e4, 0x3f709a5d, 0xb3a70543, - 0x955687b3, 0x7122a6ac, 0x288beb55, 0x9939511f, 0x4e9adc80, 0xefd6bd79, - 0x037f2d77, 0xfef58395, 0x0721b987, 0x258aadf0, 0x0a29c993, 0xcfcda3ef, - 0xfae9da39, 0x432c762b, 0x3abcbb7d, 0x6d20bb28, 0xd3fd067e, 0x0dc4d5e5, - 0xb6e547c7, 0x4b9eff6d, 0x99f55dc7, 0x0f80da40, 0x0107214b, 0x91b376bf, - 0xde58ae72, 0x009cfcdc, 0xd93b34f3, 0xee9d98be, 0x0a79e208, 0xc5710f71, - 0x519cdaf0, 0x7f6e7e87, 0xe825f47a, 0x3c87dcdf, 0x2ee92bfb, 0xe50d1a41, - 0x8a30c46d, 0xf7d80cd1, 0x78582f1f, 0xe791ec04, 0x80b7201f, 0x6bf1e73f, - 0xe74ecbcc, 0x4eeded05, 0x93bb0b06, 0xf36393fb, 0x1d96ff42, 0x9b1b95e6, - 0xe5e89d97, 0x52bccd62, 0x772854a4, 0x4ece780a, 0xf04f1824, 0x79fa6df4, - 0xb2f30d3d, 0x44af3df5, 0xebc02f3a, 0xc4af0e44, 0xfd42f09e, 0x5e0e3134, - 0x6bc37d89, 0x912bcc28, 0xf4230578, 0xebc18333, 0x79fa2999, 0x780d733d, - 0x4179d2a5, 0xaf0e54fb, 0xc2f09ed4, 0xbc1c6a7c, 0xd786fb52, 0xd2979858, - 0x0df1d45f, 0x8e8b60cb, 0xefc0d82f, 0xfb5729a7, 0xd2ca8c73, 0xfddf4f7d, - 0x005150b0, 0xdd40d3f2, 0x3789a4f7, 0x5329f2e8, 0x4ffaea46, 0x9756319b, - 0x58a078cf, 0x3b9acf97, 0x7fbed759, 0x795d34f5, 0x191103fa, 0xcb9a8bf4, - 0xd6f9e3db, 0x7c2f523d, 0x0728cbab, 0x35d7cec1, 0x4163c99c, 0xbd63ca81, - 0x3e8baff0, 0x5b17db86, 0xff436f87, 0x39789fea, 0x1fb40bc7, 0xe0f03d83, - 0x55f7f450, 0x13ddfa73, 0xf3be4668, 0x7c8c204a, 0x6fb71f68, 0x8738801d, - 0x0381823c, 0xd378df68, 0x82788215, 0x19e6dfea, 0xfceb3ce0, 0xfc13329d, - 0x8be69dae, 0xefc8230e, 0x3771d452, 0xa94107cd, 0x8905b881, 0x1f6dea4c, - 0xb7f38dff, 0x9ecf07e5, 0x1d2f7e84, 0xb44cbb34, 0x56af09df, 0xf9a7643c, - 0xdd98f7da, 0xfbfe2fa4, 0x63f7c92b, 0x97e62706, 0x93f97da9, 0x5f8e8411, - 0x00d13bb8, 0x180aa7fc, 0x07f82a44, 0x1f41b3db, 0x05ec791a, 0xfd47fc1d, - 0xfedd65f6, 0x230b1e14, 0x43f752df, 0x7ee84f3d, 0x8538c034, 0x56e3e07d, - 0xe225db89, 0x067f74f9, 0xa7c0b3af, 0xbfe59569, 0x9697eca3, 0xda6cdfcf, - 0xbf9ceb0e, 0xe071d961, 0x1cb767cb, 0x0bbefe38, 0xdbe3a1a7, 0xb9435f54, - 0xe7f36bf0, 0x53dcf07f, 0xbd7e22f1, 0x119b9755, 0x70f9dd2e, 0xbdcef6ef, - 0x7b53d312, 0x57b7d3c2, 0x18587f42, 0x2eaa8ee3, 0x7bdf84bf, 0xd42eb1ca, - 0xd539172f, 0xfdc9b5f9, 0x601d0f80, 0x8545d97e, 0x2fc812e1, 0xbdd1317a, - 0xf95faa02, 0x46834bf2, 0xda345ece, 0x2af0be93, 0xddea91f6, 0xc5ea1226, - 0x4625d23e, 0x48d2996b, 0x578a50e5, 0x2768965d, 0xf5477fe4, 0x986349fa, - 0x12e20abd, 0x62daa59a, 0xbf36ac69, 0xfaca58b0, 0x4d42faea, 0xdfc7c7eb, - 0x817d3127, 0x427f07ea, 0xf5e814f8, 0xe84f5506, 0xae703d6b, 0x0cec3ea3, - 0xbbaf5af7, 0x728d75dc, 0xd2e51ae5, 0x45ffca35, 0xcf29f7e3, 0x55ea66bf, - 0xe058bf9e, 0xd03e074a, 0x76098f45, 0xe064468e, 0x2d0d555f, 0x1adf3f0c, - 0x8ff9009d, 0x7d5abeb9, 0x72f8c439, 0x5cd79588, 0x788108a6, 0xd426e2ca, - 0x49163f7e, 0xe17c6f79, 0x1fd32356, 0x20ff5a6b, 0x73cf80bb, 0x7ce1a93a, - 0x4532e6a4, 0x695f4a28, 0x1bd61346, 0xfe233466, 0xef491915, 0xad8d9f72, - 0x8027e54f, 0xce4fc093, 0x3cc5cc6e, 0xf5f227e5, 0x8e1a93f0, 0x9f955f67, - 0x02f30adc, 0xf3da54bc, 0xf7905e30, 0xdaeebf13, 0xa9c20746, 0xfe80ce9b, - 0xed7e066f, 0x02a63429, 0xf71809dd, 0x4262dd58, 0xa356e439, 0x5eebed8b, - 0xbeac4fe6, 0x03f18bbc, 0x17d38d89, 0x538fc7be, 0xe3a2d8d5, 0x16f83d4b, - 0xff8c578f, 0xf1919f7e, 0xe2848bef, 0xfc4f4147, 0xafa2f150, 0x5b2e6b7e, - 0xdee8f374, 0x767deeef, 0xc6c73ee0, 0x953c7053, 0xa470aa1f, 0x38dbb9f0, - 0x627c27ba, 0x38412970, 0x48fb7276, 0xc98d5f3c, 0xc55edc0f, 0x81e3d9f9, - 0xb5adde3f, 0x38fb5af7, 0x387156c7, 0xd1040eac, 0xf51d242e, 0x5aaec138, - 0x6f07766f, 0x49f0c437, 0xa164d8e6, 0x9d035e62, 0x849525a7, 0x16a6d196, - 0xe7f02b98, 0x2af8825c, 0xfe1d24d9, 0xaf3429c8, 0x288db7e3, 0x13069b27, - 0xe957f001, 0x615f2faf, 0x6b3af164, 0x4b3bb7f2, 0x927fbce9, 0xb820fbff, - 0x6d601dd2, 0xebfda033, 0x63bfaea2, 0xca64dcd2, 0xfcf8132f, 0x72d1b79c, - 0xc1e6f8cd, 0xade4014e, 0x76fa89a4, 0x0cb070f1, 0x8abfeba6, 0x1c524cdd, - 0x20a197e8, 0xc2317662, 0x612230e5, 0x272ae8dc, 0xadcb47e3, 0x95d7a40e, - 0x63ee2239, 0xadb7b713, 0xc81b3b07, 0xfc848a52, 0xeac894cb, 0xb44109cb, - 0x4ec199a3, 0x8a7d806b, 0xda4ede60, 0xeb009f31, 0xb8f2041e, 0x4c9fd70b, - 0x6f412b22, 0xbedf1aef, 0x164fbe18, 0xfe02cf7d, 0x3b6cca5c, 0xd53d8029, - 0xf40a1beb, 0x2c10c1be, 0xcffad174, 0x5085a21a, 0xfd169b2f, 0x39a58931, - 0xd3e4d710, 0xff987ff8, 0xf437963b, 0x912ce7cc, 0x5721fce2, 0x5fcb6a86, - 0x012f3d10, 0x129ca79d, 0xba909e50, 0x09bd4de3, 0x2bf70f10, 0xb1878f23, - 0x2fe93d31, 0x8f4cb9ad, 0xeac721ed, 0xf70537f9, 0x79ba63f4, 0x63f2e3b9, - 0xd8d31fa6, 0x2797fdc3, 0x0ec1f8ea, 0x1d8d03a0, 0x11e4b07d, 0xa4355fc1, - 0xcabf7e91, 0x6dd6bf7e, 0x601a0cbf, 0xf8f1f77e, 0xb3d5220b, 0x22f78f3c, - 0xff744bb0, 0x6cd455df, 0x593bcb3d, 0xf9873fce, 0xc0f9baf3, 0xec045361, - 0xce1eef7b, 0xdcfb062c, 0x51e8c66b, 0x3ff5c82b, 0xfdcdf260, 0x5a331cef, - 0xedefba69, 0x4b9076ed, 0x9cfa724f, 0xd846a24d, 0x0f8f1f47, 0xaafaed53, - 0x55ca8c5d, 0x0f9be046, 0x7f774244, 0x3c1ee697, 0x1c2efa16, 0x8adfb397, - 0x9ad80afe, 0xb12cec2f, 0x16bb4d12, 0x679671f7, 0x45eb34ed, 0x57ad8e7c, - 0xd668f5c1, 0x5b15fb8b, 0x50f082af, 0xfc19fbd7, 0x787ce69f, 0x14fbe8db, - 0xdd7e33f0, 0x5b344ad5, 0xfbf8881a, 0x5a9bc057, 0x8d272f83, 0x00c2e3ae, - 0x5854d0df, 0xf2325b4f, 0x6ff8bebf, 0xf466fc77, 0xcdb71606, 0xf386a7f1, - 0x86fb15fb, 0xe11d8026, 0x220daffc, 0x21e7ddc8, 0xbf7e921e, 0x81343cd8, - 0x73bec55c, 0x2e75db8e, 0xe8095d3a, 0x911d094f, 0xbec00b4b, 0x539e4471, - 0x9a9eb3d0, 0x91ed0f2f, 0xb20ed14b, 0xa2388647, 0x1af71e1a, 0x993f7fdf, - 0x6379c1d1, 0x20e804b8, 0x04e0a2fa, 0xeed55eff, 0x5ed1c73d, 0x247123b2, - 0x710d2f8b, 0x08db473f, 0x908a9fd8, 0x146f1f41, 0x91057266, 0xb0cc46da, - 0x8f52e16b, 0x63fd34ed, 0xed57dcfc, 0x31496cbf, 0xbb720539, 0xfa0f1cec, - 0xc32b7043, 0x1e89b2cf, 0x33f69d83, 0x7f4041b6, 0xdba72de5, 0xaca98e31, - 0xbf409129, 0x472c8f65, 0x9b6d533f, 0xf81da5ab, 0x0f704864, 0x794fe021, - 0x14c7f0b8, 0xb28eeb1e, 0xc3fc807d, 0xb8f32fe8, 0x6fbb1a6c, 0xd0aeb187, - 0xa0f0f409, 0x5cf203cd, 0xbbcf0ce9, 0x205957e0, 0xfe008e45, 0x7d2ceba8, - 0x0e0635c0, 0xd9b0d285, 0x2442a983, 0xa56be50b, 0x4d205112, 0x86648997, - 0xffcfeb7c, 0x6c289cc2, 0xa216e9bd, 0xfebfefb0, 0x8de1e01b, 0x8edeb2cd, - 0x6fe7d619, 0x0be7d16a, 0xcdfcfa23, 0x4ff3e96f, 0xf74941c0, 0x0c2fb5f7, - 0x37f088c4, 0x47fe0085, 0x8588990f, 0x97eaabae, 0x2703d466, 0x9cf0d954, - 0x7305f8f8, 0xde47f208, 0xec08b57b, 0xb4bf954b, 0x6f01b8b3, 0xaf2825f8, - 0x811fa97a, 0x0dff7273, 0x8cb7b544, 0xff64b900, 0x3ed80ddf, 0x9fed3cfa, - 0xe0f8ffd6, 0x947a5fcf, 0xf9f8ffb6, 0x1210497e, 0xdf87d594, 0xef59aabb, - 0x41ba1e1f, 0x2161ff3f, 0x664abe7d, 0x2f0bfafa, 0x187e2ac8, 0xdba5df18, - 0x17f5c695, 0x907f9697, 0x6e20fd45, 0x8182e400, 0x4455efb1, 0xbf46afd3, - 0xe1e9c89f, 0x019dc05c, 0xc88a63e7, 0x85cfeae2, 0x7a0348de, 0x1bc768fa, - 0xe74f4069, 0x4fd04b03, 0x6767bd55, 0xd5e79c12, 0xf0e1bfcf, 0xaedf7a40, - 0xdc82c6a7, 0x0c21bcf4, 0xd3dfa0f3, 0xf8477be0, 0xf4598e57, 0xc91db9fb, - 0xd17def88, 0x30a8457b, 0x7c0e7b43, 0x8ee87c55, 0x383272a3, 0x9de3181c, - 0x0fba5dfe, 0x780d9b55, 0x7c2aa65f, 0x038677f7, 0xa2366c1d, 0x8f7aabdd, - 0xbe3ea091, 0x7bb456ed, 0x813eed55, 0x8dfec771, 0x5e5718a5, 0x61af1124, - 0x664cba24, 0x75ae7a40, 0xb7ec039f, 0x926e7f55, 0xefc81725, 0x78a3fdfa, - 0x548c7180, 0x069a28f2, 0xb2cf494e, 0xa9bff022, 0x57ae7bdf, 0x5f7e3edf, - 0x78d5915e, 0xddaf9225, 0xc97af8df, 0x37688253, 0x5cb25ea9, 0x7d500f17, - 0xfe0651ba, 0x4a0e3f1a, 0xfa739a90, 0x017f0835, 0xeb917f3a, 0x51ce5439, - 0xc3cfa2e8, 0x3cb106bf, 0x80952b9c, 0x1bfeb047, 0x851744c8, 0x3234d547, - 0x032cd209, 0xe42c7bc1, 0xefefe615, 0x7a0473a0, 0x237dd8e8, 0x84bab7da, - 0xc33f5df6, 0xb7c8edfe, 0x07119c3a, 0xb6544dc4, 0xe2ee319a, 0xf2320be3, - 0x37e1658d, 0xdc6f101c, 0x145992f1, 0xf1f5b0a9, 0x8362e49e, 0x37e7f003, - 0x4e19aecc, 0x571d962e, 0x7b9a2fd1, 0x00f8b78f, 0xafcf49fe, 0x273d94ff, - 0x7d678064, 0xe98b9e32, 0xbd8575c9, 0xedaafdc5, 0x42bae452, 0xb3d3c817, - 0x5aefdc6d, 0x72f80b9f, 0x06e197d1, 0x6054a979, 0xf4480efd, 0xed7e849e, - 0x924bd6cc, 0x076c32de, 0x70653a7c, 0xf852762f, 0x945e25cd, 0xf28ee60b, - 0xa48740c9, 0x96fdc59e, 0x51222449, 0xf80cb039, 0xa3cc08ea, 0x59b65efc, - 0xb9a2f8c0, 0xe775184f, 0x69e1c400, 0x1a4e57d7, 0x124adfb1, 0xb37cb4c6, - 0xf802bcbe, 0xa5578534, 0x95e0fcc2, 0xf0718c3b, 0x5a3ea089, 0x930bfbbd, - 0xfd751c76, 0xfaea217f, 0xd1e5973c, 0xfd45fd4c, 0xf70129be, 0xd8c8ffd9, - 0xe65f380c, 0xf8e0f699, 0x985cfc55, 0x7e58ea4f, 0xa00c8922, 0xeba3cfe3, - 0x9e607382, 0x918e8242, 0x92309f2c, 0xdf93c7ad, 0x0eb03d73, 0x36f277ed, - 0x56aaafdb, 0xd61c3221, 0xf20de743, 0x5b47ac37, 0xb3af9aaf, 0xaefd377a, - 0x7690ffb5, 0xf7bb5fac, 0x5fae930b, 0xe7a0cf6e, 0x7dd33110, 0x37cdd758, - 0x71b4c343, 0xe1bdaa23, 0xbac78724, 0x0267e7bb, 0x720d3dbd, 0xd8071658, - 0x8127aa18, 0x032c676f, 0xb7c742ac, 0xc79ddcdc, 0x2ce5a2f2, 0x76b4c83f, - 0x54fe86c2, 0x32fa310f, 0x3329ae41, 0x68438f78, 0x37c54ece, 0x29c744d4, - 0x12d93d93, 0x1e4f75f2, 0xb09659da, 0x6474fff5, 0x5ebab0dd, 0xbf7518e4, - 0x08e10bd6, 0x641d43c6, 0xbd7c41f2, 0x4fc62671, 0x1fb68e12, 0xdd173e07, - 0x5a11e547, 0xc1f0a36f, 0x6de3b071, 0x5645cbbc, 0xdd067cd0, 0x1b77e01f, - 0x502f5205, 0x4bda8cb8, 0xa3d01be5, 0xd4378ef7, 0x4cdd70d8, 0x6dd6b06e, - 0xfa47fb03, 0x0123f943, 0xb930ef5f, 0xdd741e70, 0xe5a34d0f, 0xb983cb19, - 0x384bff60, 0x0ede6a1a, 0x8b70efe7, 0xa74bc61b, 0x6127b1b0, 0x7fe700da, - 0x023c2906, 0xc5319574, 0x88ec1235, 0xffac1ceb, 0xd0f0d154, 0x46539054, - 0x28d27cb2, 0xfb8ed9e2, 0x49c716b3, 0x30499137, 0xf20ef83f, 0xb3d6ed17, - 0xc4349107, 0x5d4275f6, 0x3e9f8c21, 0x7064a588, 0x8bcbca06, 0x9eaa7cb8, - 0xf7f59f6f, 0xea3f0024, 0x3f01f7e2, 0x201279b3, 0x1b1c8c8e, 0x9fed6a26, - 0x0345fd6a, 0xdf50e93c, 0xc124597f, 0x287fe464, 0x5e67fa5f, 0xff857b42, - 0x1a824cb2, 0x9cbfec3e, 0xd777cfa4, 0xb1f6c34b, 0x4a12167a, 0x839eadee, - 0x11fd7484, 0x7f2d7f7d, 0xec24f5e5, 0x77698c8f, 0xe9d91c80, 0xdb3e476a, - 0x46831215, 0x1174f7aa, 0x9dc1f182, 0x6d5df64e, 0x265339df, 0xa2679411, - 0x40474fd8, 0xb2630881, 0xf413f5a9, 0x1eb7561f, 0x35ef8129, 0x7ce30da4, - 0x1256c26b, 0xdbffc5ec, 0x970b0011, 0x3f29fce6, 0xfdd4ed8a, 0x9037b588, - 0xb38fd690, 0x52222da2, 0xeab75a5a, 0xc00a2bd7, 0xd3947704, 0x2b37f04d, - 0x72d1b73c, 0x23a3a883, 0xba6ea8eb, 0x275f3242, 0x061d181a, 0xe262bb7f, - 0xaf3c9a6d, 0xf83edddf, 0x291309bb, 0x602a8ddd, 0xf55d9fed, 0x972c6fef, - 0xae807c62, 0xd76bdb3f, 0xbcb895e4, 0x6b87e68d, 0xf2b8cef2, 0x8cf2b894, - 0x567f7cb8, 0xc91ec3bf, 0x1ca9b836, 0x13f7eab7, 0x3a4fca24, 0xa9b32332, - 0x309e4f04, 0x226133bc, 0x6a8f8dc4, 0x5a79c0f3, 0x59b82adb, 0x5f830fb8, - 0xb9e19bad, 0x832eddcd, 0xaa3adf7f, 0x7688b8ed, 0x7209c12a, 0x27bc2da6, - 0xe7687982, 0x330bb4d2, 0xfc3aa4fd, 0xb3ebb601, 0xe9117cff, 0x87fe4d7c, - 0x765aef58, 0x8faf9274, 0x6e2bef83, 0x3be0b770, 0x92bd026a, 0x77bf9144, - 0x992ff9ec, 0x7c633fdd, 0xf3d333ab, 0x43adf206, 0xb7cb5382, 0xa41f30fc, - 0x0e5c65e7, 0x935c7062, 0xb886517f, 0xb787f78d, 0xa9c703be, 0xcb27d175, - 0x73fb1e40, 0x20d1d9cd, 0x1f2d809f, 0x217af4f8, 0xd6f18664, 0x7861a18b, - 0xc866adff, 0x7a05d111, 0xf016fb7c, 0x75574417, 0xda4ffc22, 0x284007db, - 0x9755c5fb, 0x7db53e59, 0x5dc7ec0b, 0x009b7f0d, 0x0e4f1ef7, 0xd2201f68, - 0x8355a5fc, 0x487e6227, 0xf7c816fb, 0x3f2c1c53, 0x81807dbc, 0x0921cfb6, - 0x76ff6113, 0x8abf193a, 0x3967bfe7, 0xf7e755ff, 0x29cf7f4e, 0x66a90b80, - 0x1c0b7dfc, 0xed9f94cf, 0x73b538ec, 0x9d9fdd17, 0x9fc8cc4b, 0x10bc6429, - 0xe1ce938f, 0xf20ee78c, 0x8df50953, 0x926b384c, 0xcf68fb62, 0x7f21736e, - 0x0f6ea1be, 0xb3e9d79c, 0xff3f900b, 0xac99ec87, 0xfdd2c6a4, 0xfad29a36, - 0xe3271593, 0xed1106a7, 0xda8fe99e, 0xda78fe51, 0x0561d6cc, 0x1b534afe, - 0x7c2b8fdf, 0x4c4c571d, 0xdf24b91f, 0xdacdfd81, 0x950cf946, 0x240966db, - 0x309c80a8, 0x81394655, 0x3341a3aa, 0xdc5537cd, 0xddd27180, 0x335ad2fa, - 0xd0a9bfce, 0x26760993, 0x9a693f55, 0xd44cc9ea, 0xdb4d65c8, 0x67cab958, - 0x5e69729b, 0x12102e73, 0xad9779c6, 0xbb424dcf, 0xf3eec4bc, 0x743b5fac, - 0x573c1afb, 0x9b3ae1a7, 0x68664312, 0x2fffc2a7, 0xf0c93dfd, 0xbef57efd, - 0x7507df28, 0xd30ac9dc, 0xec0cca87, 0xf1527e3c, 0x44cb3ae1, 0x39a208cf, - 0x4d03279f, 0xa448e068, 0xfdf0d1f6, 0x8c7843ff, 0xa3fdf586, 0xf1daf8f0, - 0x84fc71c5, 0xa0bb8df2, 0x67259aff, 0xf30cdc79, 0x5df0a9bf, 0xe98c442f, - 0x77b06f8c, 0xd077e804, 0x3e4c0abb, 0xe753b42f, 0x1ad1fb3d, 0xf5d4d794, - 0x60787f58, 0x9d99dc12, 0xc5fe795d, 0xecfdb49d, 0xf775591f, 0xa4be5581, - 0xae46bde2, 0x11eec618, 0x4fbb29ab, 0xe80a7208, 0x3aeaed77, 0xc4264f24, - 0x18afaf8b, 0x609e8228, 0x828ff805, 0xb7432efb, 0x9c18132f, 0x9caa9e60, - 0x08bb8843, 0x2953b3d6, 0xf97d86ae, 0xa05e2952, 0xf071b2a4, 0xa75e097c, - 0x03d78dfd, 0x7aeae779, 0xfc72610d, 0xefa604a6, 0xd0f10249, 0x8dffcdf9, - 0x811adb71, 0x13e21f03, 0xb0bb30b6, 0xc357972a, 0x79f74ee9, 0xe7e3973e, - 0xc17e3973, 0x1deea306, 0x3e908a82, 0xbcd89a4f, 0x523eb9aa, 0x9fb0da45, - 0xbd7d66aa, 0xd82faa6a, 0x83bf701d, 0x8690f1ca, 0xf9eae5f5, 0xc2f96fe1, - 0xa0f77fa4, 0xa361f711, 0x09f1c999, 0x8fb93d23, 0xb5fc7f01, 0xffcde511, - 0xc2a2fbe6, 0xf1624061, 0x8b5f00c3, 0x9ff84441, 0xec394916, 0x95c0676f, - 0x93307831, 0x02f5a76f, 0x9aaf35bf, 0x361f01cb, 0xffcea22b, 0x64628f78, - 0xcce5c37e, 0x4fbd1e9e, 0xc8133b46, 0xffbd5ac1, 0xe7d54539, 0x10ff72d7, - 0x129a33d3, 0xa9bedc99, 0xe9077049, 0x2b4d277c, 0x5ff800af, 0xc021699c, - 0x3d72e76a, 0x746a42f3, 0xfaadc031, 0x76bb4bbe, 0x7c37d011, 0x74be022f, - 0xc7ecd18a, 0x967fd172, 0x0fb3fe00, 0x7cef8c43, 0xfdc0eb48, 0x9dab6098, - 0x4f1355c5, 0xefda3ce6, 0x6ee9d5a9, 0xe3533b88, 0x641d4e49, 0x46f5cbfe, - 0xf3dc096f, 0xfa63ee0d, 0x574687c3, 0xeb23dc36, 0xd011caf2, 0xd744cbbb, - 0x7b2025d6, 0xaaf6b61d, 0x5a9ff85f, 0xfeae7180, 0x23dfa5ca, 0xfdd3d157, - 0xbd3d7a2d, 0x61b34493, 0x07ca9b5d, 0xfc742386, 0x6e61d6ce, 0x40cad666, - 0x93ad4be3, 0xd54d3dd5, 0x7187bc3a, 0xbdf088c8, 0xff91fede, 0xf0fc7ed1, - 0x684bf06f, 0xef681fed, 0x7a43dbd0, 0xfabed9e6, 0x7e674d5f, 0xeff2b892, - 0xb093becb, 0xf93fb50f, 0x0825c9eb, 0x37d228d7, 0x3e7a6469, 0xa144779d, - 0xb46f4fed, 0xdda77f23, 0xf9fdbde1, 0xbe053654, 0xd194b393, 0xf486f55b, - 0x4837606d, 0x57eac89c, 0x768a186f, 0xfedcb184, 0xea40df3b, 0x133ba015, - 0xa1390069, 0x696ae4cc, 0x9c63c4d7, 0x5bd267b9, 0xbcb45f40, 0x0dabca1e, - 0x82fcdeec, 0x8da2b6b6, 0xecc22f30, 0x02cde5c3, 0x78c53881, 0xdad115fb, - 0x3560a889, 0x80cdbc36, 0x55d83f4a, 0x55df63f2, 0xbf79ee3a, 0x3d26efe5, - 0xbf2a82dc, 0x7abd31f1, 0x9ff83a70, 0x901c7a54, 0x48cc95e8, 0xe074ae07, - 0x3e0c67a7, 0xe02c97b4, 0xb82b1bf7, 0x478eaf9e, 0x3be30df9, 0x281fb70a, - 0x2d70aecc, 0x47daa3fe, 0x0f403b54, 0xf294b3be, 0xf37d119d, 0x0aea421d, - 0x80f84ed1, 0xd2740dcd, 0xfe70ff83, 0xba53eea6, 0xd8d0f8cc, 0xd10321a5, - 0x6497b9c8, 0xcd3697cf, 0xa3ffe2b9, 0x826eb8a2, 0xb40c97bc, 0xbe365c81, - 0xf70a91d2, 0xcebf98dc, 0xdb3c46da, 0x662df7e8, 0xfed02f2a, 0x90b871ee, - 0x0cc8647f, 0x97928c0f, 0xa2f2d214, 0xfb9436e2, 0x09c4a9a3, 0xc6decefc, - 0xa762dffa, 0x3b4246ed, 0xdbba77c6, 0xa2dea42b, 0x2afc5f69, 0xe9725fbb, - 0xdfed1da0, 0x734b1297, 0xbe748f80, 0xa77e476a, 0xba53bbfa, 0x8958d5df, - 0x1e1db9eb, 0xd5854a45, 0x3d03f715, 0xfb93088b, 0xd86277b1, 0xf46358b9, - 0xe9ff00e5, 0x9644d778, 0xe08b7ed3, 0xbc54a231, 0xef0257b7, 0x2ebed536, - 0xca486400, 0x8216772b, 0x5864d91d, 0xf7428f74, 0x34b0c4a7, 0x576d08fa, - 0x04e6c033, 0x9cc4c293, 0x7de7fd3f, 0x5ed1ff34, 0xaba7de23, 0x266139d8, - 0xa2fad1d8, 0xa2fbf8ff, 0x7975bf74, 0xbcbabfba, 0xbf9f45bf, 0x814f6cd7, - 0x36942cfb, 0xd8cf70dd, 0xb73baa64, 0xf4d7ce8d, 0x354dc99a, 0xd9b37211, - 0xe81980f7, 0x071e8c5d, 0x3a729978, 0xe17c8046, 0xc044fd6f, 0x559250f7, - 0x072f80ff, 0x9992e7e8, 0xf3efb3c1, 0x9eec289b, 0x6967551d, 0xc36d94da, - 0x597a68fd, 0x6f8c0908, 0x045d194f, 0xf7e130e7, 0x97183c4f, 0x265367e5, - 0x4cfefc4d, 0x68437ed3, 0xded79c19, 0x5c27bc72, 0x856bcf4b, 0xb87177e6, - 0x8b47d557, 0x53445ee0, 0x3061a4d2, 0xc90be92f, 0x0abbfb0b, 0x17c8d13a, - 0x3fe2cdcb, 0x115a3f76, 0x2d89efe2, 0x7b873a07, 0xf8e9e39b, 0x0cf8bee3, - 0xe8532ee3, 0xc9cfc030, 0xee376656, 0xfda21652, 0x43ae6fda, 0x44b8d5bf, - 0x60b5d709, 0xa0242d80, 0x9f20991d, 0x3932260c, 0xcb41611a, 0xffb986cf, - 0x0b4e0e3a, 0x9ab930b6, 0xbbe033ec, 0xc1400b31, 0xd5fbb902, 0x700f18a9, - 0xc9a7f376, 0x5b6e01e3, 0xbb0270ef, 0xccbdf5a2, 0x8369e78f, 0xada4bbf7, - 0xbd0172df, 0x6262db1f, 0x765448f3, 0xfb8f7ec1, 0x837280c2, 0xc81f1224, - 0x67b24d0d, 0x6b91d018, 0x8012cef3, 0x59a9d9eb, 0x517fd622, 0x37184e20, - 0x7c1a4971, 0x5e48205f, 0xfdfa3f46, 0xa26bf753, 0x05c99939, 0x7f782b86, - 0x4db4d8fa, 0x3e3dcf18, 0xc6f7f367, 0x8d3b7f42, 0xd2846f78, 0x3e703dc7, - 0xc0f5d0d4, 0xbcb66a7c, 0xb38cc693, 0x628a4484, 0xa3fcdbef, 0xaab26074, - 0x07975c78, 0xf2c16c7c, 0x3bed3cba, 0x78f03d1e, 0x1b9ba533, 0x166078a9, - 0xaf2097c8, 0x35ea4ff7, 0x1e5e293e, 0xc54af555, 0x6d3b3c4d, 0x08f3d768, - 0x329d3f94, 0x4e47c84b, 0x27ac6599, 0xf3616dfd, 0x3f105cef, 0xd02dfbeb, - 0x60f10e5f, 0xea2b853c, 0x0ee2a62c, 0x69cf0080, 0x9fc599b2, 0xf51f73d1, - 0x44a9f5a0, 0xffd1aef7, 0x3a51fde5, 0xb2f0077e, 0xc72bddf3, 0xd9b5ae01, - 0x8f40231d, 0x0cfe5ff0, 0x56b65eed, 0xb9b4f766, 0x0d9e64bd, 0x992a7be8, - 0x83e3105b, 0xcfe3377e, 0xd1baebf1, 0x63f16462, 0xc7ec5129, 0xd7f4656a, - 0x4df6f5c4, 0xf7a82c4b, 0x99094a6d, 0x955fd261, 0x573f54ce, 0x2a63b705, - 0x7b415e3b, 0x4e09090e, 0x2e296bf0, 0xe55d2746, 0x3fcf11b3, 0x882831da, - 0xd1e3bdf9, 0xf1db65af, 0x8040c35c, 0x83f30b53, 0x0eeddcd9, 0x3b47df58, - 0x7d60394e, 0xb80c3be5, 0x27d0f2ee, 0x620af369, 0xf049bd74, 0xfaf3c15d, - 0x46b59d0a, 0xc768fb4f, 0x6d7369a7, 0x730a4f4c, 0x706f417b, 0x2f1952f9, - 0xc65c2858, 0x751d9839, 0xf7c453dc, 0x386de232, 0x4f6f6b5b, 0x6af3b0b5, - 0x0dc9859c, 0x7ad0d6e3, 0x7c618788, 0x1ebe29cf, 0x57a32079, 0xf8fc6d3b, - 0xb4441be7, 0x26ac56a3, 0xff3d6768, 0xf46c81fc, 0x903cee6b, 0x5f53473d, - 0x6f8c3f8d, 0xf1616d9f, 0xa7f1a41f, 0xe20d251e, 0x7378d83d, 0x2007cabc, - 0x3b86909f, 0x1e38fa3c, 0xbd4d130a, 0xa7c40dae, 0xefd58a0c, 0x01dcff2a, - 0x5a736a71, 0xb413110d, 0xa70678f7, 0xebcbbc80, 0x2f77f7c7, 0x45a123c7, - 0x5ac93d40, 0xfa3e4510, 0x1134f9b5, 0x4d3e5a6c, 0xe324f7f7, 0xf0e3d1d3, - 0x19d813ee, 0x6b933ce1, 0xf5c8126d, 0x5e182b69, 0xa2207f45, 0xc435ddfc, - 0xf9522f52, 0xb0cace45, 0xb14aff01, 0x01acb8b0, 0xbf58f959, 0x1a679efb, - 0x4999e7bb, 0x8a7e30ea, 0x1f51db38, 0x38863fee, 0x580d0e41, 0x41911c98, - 0x830c1bdc, 0x7a3c9820, 0xf10151ea, 0x8e7c03c4, 0xa9ea0a88, 0x3f185f14, - 0xfa33e477, 0xf952f0e6, 0xa02ad0a8, 0x92db371c, 0x862bf5c8, 0xa3c2d757, - 0x3c62ffd9, 0x778ea05a, 0x12e478bd, 0x5be1f5c8, 0x1fc2761f, 0x845fb828, - 0xf0a771fb, 0x3628a67e, 0xb880af7c, 0xf1dd1d8d, 0xcd9fb464, 0xfd04de54, - 0xf62bb541, 0x62ea515b, 0x76b6e07e, 0xdface790, 0x7c5cf052, 0x05cb6c5c, - 0xcede3a79, 0x11367748, 0x533801ce, 0x1f94bd61, 0x5797fb30, 0x9d71fbc6, - 0xe21b8f01, 0x44880607, 0xcfdf3e02, 0x35ef8b90, 0xdd380bf6, 0x59dc182b, - 0xbb1e631c, 0xb12b5c0f, 0x075942fb, 0x1772c912, 0x5f4cc7c8, 0xcb8eface, - 0x78b52e0d, 0x225346ff, 0x7ea987b3, 0x69ecbef7, 0x9f4f41a4, 0xcbad5daa, - 0x537e174e, 0x0659ce0c, 0x85049f3e, 0x41ee4fdf, 0x35c00ae7, 0xff510c6d, - 0x4b3e4036, 0x14fe37cd, 0xae957bcf, 0xbd9d7b55, 0x736b9bc0, 0x7abb9213, - 0x8be031dd, 0xb8e7efd7, 0xfdd5e57f, 0x025dff1c, 0x9e7a0e7e, 0xb4c39776, - 0xe6ab39e9, 0xae12203d, 0x21cac7b2, 0x11695ece, 0x2575fb78, 0xde5c4877, - 0x3ee7f1c2, 0x3caaef06, 0xf1ba266d, 0xe293f3b4, 0x629087fa, 0xdfad4b9b, - 0x5bfa1138, 0x83e79237, 0x5f83d41f, 0xbea369e7, 0x6f29043f, 0x029a990f, - 0xc9f07fd6, 0x1a9fc741, 0xe1ef3b1c, 0xa97807fc, 0xf7aafee7, 0x44de34a6, - 0x3f3ab2c7, 0xf50778c5, 0xf4a7f6fc, 0x24e22f7e, 0xff5fe3e7, 0x761e841d, - 0x261693ca, 0xc90096df, 0xf9003d51, 0x17a97fb2, 0x9ca825e3, 0xb7cc21f1, - 0x338eddf3, 0xe7796847, 0xf78fcfb4, 0x7d6e3c03, 0x31e83678, 0xfa03b7e0, - 0x501b37f1, 0x055a55ce, 0x462d6f86, 0x7f1517a4, 0x7f1c9d2a, 0x7f788312, - 0x3090e9b0, 0x5445ec1a, 0x9bbecd3f, 0xd5b165ee, 0x31c70173, 0x533fdfea, - 0xeccad953, 0xe2fcfe56, 0xffd0798d, 0xf9c0810e, 0xc3ff26bf, 0xbfa8b9b4, - 0x4f36907c, 0x65a2aed3, 0x691f8b1d, 0x470af636, 0xfa606ad9, 0x1e7dc1dc, - 0x43e70be0, 0xca4b1618, 0x906ad0a5, 0x45cbcb57, 0x8546efd4, 0xbe43ef4a, - 0x2026533d, 0x5c587787, 0xd3cd1e6c, 0xe42f1083, 0xbf81ffa7, 0x7e77936a, - 0x3347ca29, 0xd5c41b15, 0xce2fcf9e, 0x5795fb44, 0x061c0276, 0x926537bc, - 0x149ef80b, 0xadb4b8c6, 0x2091b6b5, 0x83efadd7, 0x63693ecf, 0x782f5cfb, - 0x7e67df83, 0x5bb5a271, 0xf930b4e5, 0xe4cac32e, 0x867bf541, 0xb79dc995, - 0x0026db05, 0xda961c3a, 0xfaf720ad, 0xd013e789, 0xe6d7894b, 0x0f7089da, - 0x129ddea3, 0x4d3da170, 0xfc7f6949, 0x4dbf2826, 0x223b38c2, 0xe3033fb5, - 0x894eae76, 0xfc850bdd, 0x6f680523, 0x1beacc7b, 0x14e3a562, 0xf3b27971, - 0x10859de0, 0xe1ce38d7, 0xe824c9fa, 0xed0973e7, 0x8a9ee33a, 0xf8004db6, - 0xd9903e7d, 0x08e895b9, 0x9376b9ed, 0x9e93ad95, 0x92ef286f, 0xfbf237c3, - 0x1d9eb40a, 0x5a16f1ba, 0xb8de4153, 0xfd18f458, 0x24694c6c, 0x7d549f80, - 0x9282bb40, 0x872025e2, 0x4a96084c, 0x271cb718, 0x71e04c87, 0xf4a4881d, - 0xfbc7317b, 0xe1777421, 0x558a2dfd, 0xc7265ff5, 0xaeb792e4, 0xa3e090cc, - 0x8a88af2a, 0x1399ed0f, 0xc6085a67, 0x1e8cafd3, 0x9e2ec117, 0x0a7af942, - 0xf160cbde, 0xb32ff9a2, 0x466120fb, 0x3ffeddb7, 0xa8fd1da9, 0x7e56ad93, - 0xfc33d7ae, 0xb7186d21, 0xb0900940, 0xd6cf68fd, 0xfd5057de, 0xf27f6a86, - 0xad8f6672, 0x7c17f6e1, 0xdf9696f9, 0xb2ed556d, 0x467e75cb, 0xf0bedc75, - 0xc6aac2ab, 0x804b4453, 0xd507a31e, 0x4a4f8a78, 0x8cfa2f00, 0x5778e0a7, - 0x78f572db, 0xd195bf0a, 0x4f1d37c9, 0x913588f1, 0x11f44bc5, 0x471f114f, - 0x911999d1, 0xda4b5ed0, 0x7d04eeb7, 0x7e84c5bc, 0x6f2d29db, 0xcbce11fe, - 0x43090a29, 0x5cbc56dc, 0x5f4d35e1, 0x75def80e, 0xc056cce1, 0xef7775c3, - 0xb03f3377, 0xd7885e5e, 0x7cabb60f, 0x1b73cb97, 0x1fa7d7ad, 0x29bef5a8, - 0xcbe54eb9, 0x5187ae7e, 0xb9c072fa, 0x23d383b3, 0xd1c41250, 0xdd6dcbc5, - 0x1c9c7ef2, 0xd19eff11, 0x9d6f69a4, 0x61a47bc1, 0xa87100b3, 0xde0919af, - 0x63ee0dd3, 0x85b56dfa, 0xc3ea93f1, 0x2ca9fdec, 0xe3ed1793, 0xf22315e4, - 0xf9e57f0d, 0xfd114497, 0xdc00af04, 0x27e5a653, 0x5faefd40, 0xd50e901b, - 0x85b690f7, 0x2a74fc98, 0x94c88c5f, 0x79c1b7ce, 0xa13ce30c, 0x3d741bf7, - 0x31f18fd9, 0x5ae837ee, 0x9706fccd, 0x6033e3cc, 0x330ecaf3, 0xb7197ffb, - 0xf14aafff, 0xae8332fd, 0xc64ff16b, 0x1e75dda3, 0xd65a61f1, 0xc71bb7a0, - 0xbfccbdec, 0x78af0554, 0xcc05fbb3, 0x8fb1a7df, 0xae523bc1, 0xce18a906, - 0x5ce25ca5, 0x15d97c0e, 0x16fdd0a4, 0xbbf9eb4d, 0x802882c3, 0x4ead213c, - 0xac7ec0b1, 0x012717aa, 0x45eb05bd, 0x5bb88f7c, 0xd7e7e00e, 0x29ffce25, - 0x8e3042c8, 0x77f3d69a, 0x96fed57b, 0xa9023111, 0x9574b028, 0xdbd49a53, - 0x57f6a8b9, 0xc653ac6f, 0x4034be83, 0x25ecbb44, 0xe01333d9, 0x8f29297a, - 0xbd645c40, 0x1261aebd, 0xbf1c472b, 0xb17a8e64, 0x1312dbfc, 0x092b88d8, - 0xfcdbd9f8, 0xdb878edc, 0x3838c6bc, 0xe3f3d9c6, 0x88cb3ee3, 0xa0e6686f, - 0x6f92719e, 0x69733e73, 0xbfbf2e4d, 0xaeaee0c0, 0x067f597f, 0x4b007137, - 0x9e280e07, 0x303ffb09, 0xa04d8651, 0xd223b329, 0x07fce095, 0xef053b7e, - 0xb7cfc513, 0xc023841e, 0xbdecd5ab, 0xff3aaf8f, 0xddff79f8, 0xcce9c69a, - 0x5f780193, 0x3df194e6, 0x17d96baf, 0x705cb972, 0xd6a1fe2d, 0x07f806fb, - 0x1b578bd3, 0x13adbc78, 0x97bc08f9, 0x04a77f08, 0x9e08aef7, 0x79d5a1df, - 0x06d5aeb0, 0xc27e1f7c, 0xef9e1b74, 0xfbd987b5, 0xdb4b3576, 0xad9ce1b3, - 0xf7c76e2d, 0x0de1e36b, 0xfe5495b3, 0x49cdeb43, 0x1c6ef821, 0x79fbd069, - 0x3cb3fa7a, 0xd3e03645, 0x37aec8c6, 0x654338e9, 0xd7c858df, 0x02ee8d2e, - 0x91e3b579, 0x5e404af7, 0xd26f539b, 0x2792a7c5, 0xd2227ef4, 0x65768490, - 0x5effa4d2, 0x5dae39be, 0x2351bf0f, 0xd97ae3e2, 0x7be80c37, 0xd3f9839c, - 0xef88a549, 0x01db75fc, 0xe1ce1a9e, 0xeed3cee7, 0xee7d03ef, 0xef67ad2f, - 0xf77aef59, 0x2fec02f7, 0xbe6ad7dd, 0x7df617bf, 0xb7f60f2b, 0xf2b7cf63, - 0x1bd77f60, 0x3f403d1b, 0x0f9f153b, 0xefa73cfc, 0xa39ca2f0, 0x0b5c45c6, - 0x275d172f, 0xe6fa2e5e, 0xe7aaf2f0, 0xcaa6c05a, 0x5ced5f49, 0x9ead3f83, - 0x218af87d, 0x34bf4668, 0x3d98ffc3, 0xf077fcec, 0x0a2cb95c, 0xabe8f7e0, - 0xae5c51bf, 0x104850cc, 0xc54513ec, 0xe8aed8ed, 0xdc809173, 0xf179caa4, - 0x9f09f870, 0x4f36f3ff, 0x5f879c02, 0xce5aeed7, 0x4fa128eb, 0x43b9fc99, - 0x6bbb3370, 0x1dd5c598, 0x9d82752a, 0xd9885cf5, 0xb1f76b5d, 0x422bea77, - 0x5df0446f, 0x09c156f3, 0x8ec541fa, 0xeef01c0f, 0xae4e2690, 0x448ce819, - 0x9deceff5, 0x40729d0b, 0xb79d1bbc, 0x6b78e415, 0x7a06544a, 0xf1172da8, - 0x295ab3dd, 0xb5bcf18a, 0x241dc429, 0xf5ea5f20, 0x6c2e352d, 0xba465793, - 0xdecad4d9, 0x7d934ca1, 0x0f11fdb9, 0x6dfbe3fb, 0xb7edfd2a, 0xf800fe79, - 0x7ad3f31b, 0x8b576c5a, 0xc32ff91b, 0x617fe636, 0xccd97fe5, 0x6e3502e4, - 0xce8ff544, 0xf3eef1e7, 0xf83bbc79, 0xf81a236d, 0x9b56df82, 0xd5b6fd57, - 0x88322f10, 0xe5b56df9, 0x8d687edd, 0xae5b56df, 0xe889178d, 0x93234df8, - 0x310b0d77, 0x25d2864e, 0x579163c6, 0x88ced505, 0x74a7e9f4, 0x0c6464b0, - 0xf0fdd57f, 0x12b87f97, 0x3cfcf3e2, 0xf01ab2ee, 0x61c60477, 0x5fc04c46, - 0x355f14c3, 0x4b6a2efc, 0x7d7374e4, 0x37e8c8f6, 0xedf1df4c, 0xe3c7573f, - 0xb3aead74, 0x02ad5d7b, 0x75b8c3a3, 0xf189ebc5, 0xcf5569f6, 0x4bdf16bb, - 0xdf1f5fb6, 0xabfdeb53, 0xfdb65ef9, 0xbef7c39f, 0x47fffb29, 0x3034c6ae, - 0xe87b3e05, 0xd083df87, 0xad8312a4, 0x4c9477fb, 0xae3fe1d7, 0x437062d9, - 0x21cd4ddc, 0xaaf21bbb, 0x7fde323f, 0x94f64958, 0xfde3c800, 0x5710d588, - 0xfedae831, 0xb77b62c4, 0xfb573d5f, 0xb151785e, 0x61bf5f9e, 0xa7d934fb, - 0x02e2d3c1, 0x82f7e02a, 0x24148ab7, 0xa9f638da, 0x7eb7e676, 0x9fefbf83, - 0x88069321, 0x6eda7893, 0x14467bc5, 0xa62e306b, 0x6e9dead8, 0x9afc0d1f, - 0x83d9efc1, 0x0b8812f7, 0xc618d67e, 0x1ac13efb, 0x5727de1b, 0xff6a23ed, - 0xa97ea96f, 0xcd73e06b, 0xcd73e275, 0xf1cf8c37, 0xe3ab17ed, 0x61dfaf5d, - 0x06918503, 0xb3f1e3df, 0xf17d76af, 0xef765581, 0x91d23b72, 0x5eb9ef07, - 0x11e8ff2f, 0xf1b92987, 0x4dc41d5e, 0xfc559c42, 0x74f7a87e, 0x6b70b954, - 0x97a1fb9f, 0xc57eb707, 0x3c96b8fd, 0x0de2a4f8, 0x8f4f7ac1, 0x3e81e4f7, - 0xeccecabb, 0x0ccd9b2e, 0x0c0b372f, 0x13e07b1f, 0xe2a3efbf, 0xf5fb01d5, - 0x7ad43bd9, 0x78fe6aff, 0x2d7c2ed4, 0x69fc077b, 0x886c90f1, 0x7d767be2, - 0xfe9ec7f2, 0x5977162e, 0x517a86dc, 0xef8090f4, 0xf6f3ab33, 0xd63b31b7, - 0xd45c39ef, 0x1cb8fbef, 0xfcf0e398, 0xf10a9ec1, 0x8f028a49, 0x59028c3b, - 0x2f28e40e, 0x0da9378b, 0xda8fb8b3, 0x70e304a5, 0xb511fbd4, 0xc809532d, - 0xbecd0b6d, 0x55fb433f, 0x8682d9ef, 0x4fa3b004, 0x75a72023, 0x37f2cbbe, - 0x401f7d9b, 0x3b697fb9, 0xa69bfdda, 0xa138c79d, 0x5d3f2fa2, 0x3a5df609, - 0xa40bb45f, 0xd3f7f498, 0xc7c60e1d, 0x50ead4d4, 0x7b41ebe1, 0xfb950778, - 0xa7f2de40, 0x5f609c78, 0x56cded50, 0xe1da1b57, 0x6732f76b, 0xad81915f, - 0x9fda3c87, 0x8ef6d1f9, 0xe415fc2f, 0x9042e6c3, 0xb7de8b57, 0xe3a8fda1, - 0x138c2c91, 0xbbeacc78, 0x1f6af80c, 0xe40bba15, 0x0e3a1ccb, 0x7b1dadc8, - 0x79842aee, 0xe0a17d77, 0xccecbaba, 0x24f5d0bf, 0xcaf88999, 0x665dd1ed, - 0x9f022786, 0x666ad76f, 0xba1e0a9f, 0xdd03bf91, 0x38368f6d, 0xd1ecc746, - 0xa5407cf1, 0x08fbeeff, 0x1ff414b3, 0xbd61fcab, 0xeaa39d91, 0xeece77f9, - 0x3c16f1e2, 0x2a75aeae, 0x79e0d78b, 0xf8554f1b, 0xe3bb6f3e, 0x9cf3ac1c, - 0xdec7fa5d, 0xe24cbec3, 0x2fd8e7fd, 0xe36939c4, 0xdfe0add5, 0x53897b01, - 0x37b2bc46, 0xa1dfe610, 0xf9f20578, 0x09b6d16d, 0x839d7409, 0x01b7229b, - 0x165f0fbc, 0x53a0bbd9, 0x92f78b7f, 0xde360413, 0x57da27a0, 0x8afb050f, - 0xc36fedf3, 0x9d1abad6, 0x5b92e0c5, 0x870ef668, 0xd52241b8, 0xc578c3e5, - 0x3c5918ef, 0xda2b21df, 0xabb29a09, 0xbb691273, 0x684cf7ce, 0x03e789af, - 0xcb241a6a, 0x606f8e31, 0x0ed01fcb, 0xe82bdf6f, 0x93a6a6e0, 0xf7e6361c, - 0x6095b609, 0x296dc9ac, 0x0e6e77ec, 0x7f041fbd, 0x5f1ab4bd, 0x46f52486, - 0x7572088f, 0x7b411970, 0xa72690e4, 0xc395fb08, 0x0eba44e3, 0x1f08cfff, - 0xddaa9f9e, 0x64a9843d, 0x7a095f6c, 0xfdacb495, 0xc7ec20f6, 0xb6b144de, - 0xd68bfa00, 0x12b27c32, 0x5a739f38, 0x95bf2d06, 0x9c1a73e6, 0x7aea3fe8, - 0x0de30ab5, 0x439d7483, 0xa167597a, 0xdce5c583, 0xa520e3c8, 0xfc115643, - 0xb85ad2d2, 0x5341440d, 0xd29671ef, 0x129c43f6, 0xc38e7de2, 0xd4f00b37, - 0x5902f9ca, 0x9c7f4162, 0x6d78625d, 0x8bdef25f, 0x55bfcf10, 0x1d4fef66, - 0x34e37c3d, 0x96addfb4, 0xc6ab5ed0, 0x74e02e51, 0x47de13dc, 0xe0725e31, - 0xbf303fa1, 0xfa0b1d0d, 0x3f0c8c97, 0xf829d5a4, 0xc87fe07e, 0xfd0b8c3e, - 0x80c47d76, 0xe9e728fe, 0xaeb92667, 0xebc4b7ad, 0x891ccb29, 0x622e295f, - 0x3d9be399, 0x3fdbe24f, 0x55f78eae, 0xd7a210f5, 0x63e87acf, 0x5c7572f1, - 0x0ee4befb, 0xf542ee35, 0x504f1177, 0xcc526f17, 0xbe8a21c7, 0xef0b6abf, - 0x50a3c78f, 0xf205c439, 0xd70ada4e, 0x8ebf8832, 0xdfa098fe, 0x09978d46, - 0x9738b316, 0xbde0a8a0, 0x88d20cab, 0x48fd3271, 0x1ed01044, 0xd3b6e2c6, - 0xb6865e21, 0x8818ef5b, 0xee216ffd, 0x41f20306, 0xa4abbe17, 0xfdd055c6, - 0xd3243a41, 0xc13f1e64, 0x566b37f0, 0x70e2085a, 0x9f7edcfd, 0x7f1f2b35, - 0x3f135567, 0x33feecc1, 0x7d4f882d, 0x10aa53de, 0xd6253df9, 0x1710d36f, - 0x4d7ff3de, 0x693e6bb5, 0xe2e3ed67, 0xaa38542c, 0xfc2a1671, 0xf14c7bd4, - 0x79314c70, 0x57bc02df, 0x7dd425e3, 0x0d8fdeee, 0x55d82ecc, 0x1cbbe221, - 0x155d7f6a, 0xdc83679f, 0x626adc50, 0xefd712f8, 0xaefbeea6, 0x67c63321, - 0x96bd7df3, 0xdfbeaa1c, 0x23bf9475, 0xd7bf8c75, 0xc21665de, 0x399f8006, - 0xc9381b3a, 0xee4784f6, 0x5d817b84, 0xdc3668f6, 0x78dcdc2b, 0xa7cc24ff, - 0xfe424f46, 0xc3ff84b5, 0x5ba243f2, 0x89e19ee1, 0x1e58b3a7, 0x908b2e70, - 0x49848e33, 0xe07f82c1, 0xe3d73a5c, 0x022e1a77, 0xfb486b1c, 0xd3b436ca, - 0x146973f0, 0xa26463e3, 0x44ecc429, 0x13ffdc2e, 0x631dec99, 0xbdc0fe5b, - 0xdfde506d, 0x5a2df684, 0x627bf88e, 0xee5678c8, 0xfa4dfb62, 0x029c59db, - 0x13d33dff, 0x1fd1e3b9, 0x4df8035e, 0x462b85e5, 0xc740989f, 0xe1b420bf, - 0xee27593b, 0xe00161f8, 0x8ffd85eb, 0xe2b9060e, 0x77f7b94e, 0x72731ee1, - 0x7ec8c239, 0xa34de5f7, 0xf9409acf, 0xb3ad1fc3, 0xff69124b, 0xcbc79333, - 0xe0ef3089, 0x51eef8f3, 0xc4bfdf2a, 0x4bee4c19, 0x2015e89c, 0x3363f17e, - 0x1f54b3a3, 0xe2063dfb, 0x3ddc219b, 0x12d7235c, 0xc4113bf6, 0x7b804ae7, - 0x68eff108, 0x6b5e12dc, 0xf7f73900, 0x780ce881, 0xfefd5552, 0x38f7a107, - 0xc604828b, 0x5c19a6c7, 0x141f01c3, 0x29cdf1b1, 0x2bc6c4b7, 0xfbf17048, - 0x70a375c5, 0x51ba86dc, 0x28f4c7a0, 0xd072d1b7, 0xe5a09e93, 0x97297bc3, - 0xd67afb78, 0x938ef35e, 0xa974e01b, 0x2fbc03f4, 0x04eb38b4, 0xc27647be, - 0x0ef03c48, 0xfb93304e, 0x0739e8f5, 0x273c7dfb, 0x3b4fc591, 0x40704c37, - 0xffdb107e, 0xfd0848bb, 0xb06653bc, 0x21df597b, 0xb4edf56d, 0xfa199dde, - 0xcbb963df, 0x277fcfa5, 0xc29f9f5f, 0xebbe07e3, 0x1eff7fd6, 0x0f804a89, - 0xffa31fdf, 0x441797dd, 0x0be0094f, 0x2f8c27e5, 0x2aee3c0a, 0xf9c20845, - 0x2c81e37e, 0xc61a9ef5, 0xf5c0bdb3, 0x7fbf3f11, 0x91aa6701, 0x8586e3ae, - 0x1bdc9dec, 0x93928833, 0xf92bfc04, 0xf07bbe08, 0xa729f711, 0xf4789bc0, - 0xd713a97b, 0xf419e2af, 0x1f7c3b75, 0xe2e0cf9d, 0xd2538321, 0x418eefd8, - 0x6b2309d9, 0x84b1fc1b, 0x7d684e7c, 0x3e2c6ff3, 0xf184bc62, 0xd7ab0277, - 0x4ff86665, 0xfefc524f, 0xe21ede53, 0x27c89caa, 0x4abfdc2d, 0x8be85df0, - 0x78d8d2a3, 0xfa8b0f1c, 0x5bc01629, 0x7cbb5df5, 0x1bf6e127, 0x7069a64a, - 0xe794103e, 0xfd54bc54, 0x3c380348, 0x7f327e28, 0x1f872671, 0x06f7f091, - 0xcfda8932, 0xadc61374, 0x04bafcf1, 0xde2a6f46, 0xb5ec7fae, 0x5f00a737, - 0xc03f5c12, 0x3bb2ee7e, 0x74f9bd61, 0x804999ac, 0x78d829bf, 0xf449e707, - 0x247927bb, 0x8c5d8798, 0xb09a1b18, 0xbf7f307c, 0x4fa4fa6c, 0xfe1a4866, - 0x61adfb45, 0xfdf55afd, 0x459ba3c2, 0x68337e9a, 0x7e9a49bf, 0xf2c2689f, - 0xbfe5fbbe, 0xe7e92147, 0xaf8fb6a7, 0xf3f5ea4f, 0x7c7dabec, 0x14f7f53d, - 0x4df87326, 0xf329e356, 0x640f71f5, 0x7e615b8c, 0xc39c7d6c, 0x8edf1c9b, - 0x306dff5b, 0x09250be8, 0x2844a70f, 0x1a524c3d, 0xf408dbeb, 0xd0fa461b, - 0x802ff5d0, 0x7e652e2e, 0xb6fbbf80, 0xd989e078, 0x97a519d0, 0x7ba309dd, - 0xe7c547ce, 0x3c5179ee, 0xf1543c06, 0xdd9e7e38, 0x30bdfc78, 0xa16d7206, - 0xaaa407f2, 0x9d48423c, 0x0d70eb80, 0x2283ad88, 0x87528961, 0x22b37ff3, - 0x33bdf388, 0xff8c19f1, 0x3be49319, 0x799af302, 0x3dec27d3, 0xa1d28c93, - 0xf9d10720, 0xfd484d1e, 0x355f377f, 0xe1dc796e, 0xbd82373b, 0xe3ee9bb4, - 0x5fed5ce8, 0xf234d395, 0x2af73b15, 0xf2be5545, 0x19642900, 0xe57cb832, - 0xacd678c2, 0xf10dcb80, 0x8af91aaa, 0x44d547c9, 0xeece07bd, 0xa060fced, - 0x987abe5e, 0xb76ebc60, 0x271a557c, 0xede3cd5f, 0xc42092a7, 0x93d936c5, - 0x805e2c42, 0x162d39ce, 0x8db4dbff, 0xb74d8dc9, 0x82419cb8, 0x33d31672, - 0xe87bf166, 0x6bde4cb9, 0x77c98fba, 0xbaea1ce3, 0x6b78fa2c, 0x133567ee, - 0xb8b12f2a, 0x99abb40c, 0xa5d97d9d, 0xb53576f4, 0xf202ffde, 0x007f0832, - 0x00007f08, 0x00088b1f, 0x00000000, 0x7de5ff00, 0xd5547c09, 0x73b9f8b9, - 0x64cacb67, 0x109848df, 0x424e3b08, 0x875b3612, 0xe22948b0, 0x3cb888b0, - 0x4240b21c, 0x3eb44196, 0xc33fedad, 0x0d220222, 0xc168d46d, 0x2a14180e, - 0x0431a0d8, 0xa4587049, 0x141a87d0, 0x2f1f682d, 0x48145840, 0xad88a0c6, - 0xbefbffcb, 0xef726e73, 0xf6b42264, 0xfa7fb6ff, 0xef7397b3, 0x6df3be59, - 0x39ce5be7, 0xd78deec3, 0x1ec658b1, 0xacc630b4, 0x98eb458c, 0xb19436b3, - 0x96eff0ef, 0x95e5e7ae, 0x6289e63a, 0xa31574ac, 0x47d7e5e7, 0x7a83cfa6, - 0x4c8c7697, 0x66e783cf, 0x92d433b3, 0x50e158cd, 0x2fa18a7b, 0x7b46f963, - 0x9b19933a, 0xbeb45e64, 0xcc9eba19, 0xd393f516, 0x5b09fb18, 0xcf074c74, - 0x48ce9151, 0xc8673fac, 0x287a2967, 0x0379f8b3, 0xfd8c611c, 0xc28f675e, - 0x19b98cf7, 0x718535c2, 0x4398a6b8, 0xf870f2bd, 0xa5c340f7, 0xfe8c8196, - 0x1c7183be, 0x4b6f6726, 0x1155630c, 0x67971fb5, 0xa35cf631, 0xe2b6e6c9, - 0xec1496d7, 0x11deb18f, 0x043086e7, 0x543ce185, 0x39e814f0, 0x4cb2d13c, - 0x040bf4f0, 0xc65e630f, 0x68e0ba72, 0x94ae8437, 0xb1e0a97a, 0x00d17eb3, - 0xc7be24a7, 0x06895ab1, 0x6a5383f3, 0x1257e3fc, 0x33d38fd4, 0x63265877, - 0xea97981b, 0x1ce75efd, 0xb3c6e381, 0xb8e1894a, 0x112b6c2b, 0x96e0dd4f, - 0xbf30c901, 0x1ec977d9, 0x0ae60c13, 0x7ace1f09, 0xd4fb3d61, 0xba7f1804, - 0x2af67f18, 0xac0884c7, 0x78e25d37, 0x00ffc2f0, 0xfbe219fe, 0xa9b2c6f4, - 0x3198e00c, 0x13ba70c1, 0xa66ff83e, 0x0181ba65, 0xc2a6b39c, 0x7bd7737b, - 0x61d2209c, 0x2cffd28e, 0x6c39bb6d, 0x387267cd, 0x10191696, 0xd5ee735f, - 0x09669f7e, 0x42173e8b, 0x077c076d, 0x60603af3, 0x79f68f34, 0xe609b3cc, - 0x82cc56f1, 0x3347f7f5, 0x43b7e036, 0x7fe86533, 0xcd716c62, 0xf4bf283a, - 0xbf2a60dc, 0x83cf7b15, 0xf3fbf147, 0xa09e54e9, 0x6e504683, 0xb3ce99ff, - 0x9cd01529, 0x5494d773, 0x9040ff18, 0x467ef7e8, 0x9d83e3ef, 0x5ea1d355, - 0x99bef0fc, 0x04d3e0cb, 0x0aede323, 0xde9ff7f9, 0x9ce54614, 0x191eacfb, - 0x6c109cba, 0x30f7d375, 0xaa09b6c9, 0xd130c91e, 0x53e361f7, 0xccbef7f9, - 0xe7df851e, 0x23fb5185, 0x0b5e2199, 0x47f2f78c, 0x01fbe883, 0x0eb9b3e9, - 0x595b5120, 0x52e91ea8, 0xe336689e, 0xc940c873, 0x3df0083b, 0x5f8c5221, - 0x353de7c6, 0xca226b73, 0xdf5c84cd, 0x6850c75c, 0x670e6897, 0xfe1f1137, - 0x8879f90c, 0x34aadc6d, 0x5f16afe4, 0x150f9a8a, 0xf8574f3a, 0xcf96826f, - 0xc51e7e40, 0xfa9f0af6, 0x87c2a7f3, 0xea0b3e1a, 0xb97f33e2, 0xd7009e57, - 0xb18f924a, 0x97721f20, 0xe38e747c, 0xe3fe2727, 0xf8bf24f6, 0xdca2c527, - 0xc2777f88, 0xd0f24b57, 0xb9e9b99b, 0xcb83e501, 0x8708b3cb, 0xc56cd751, - 0xdb247df7, 0x33c20b60, 0x0c7666ca, 0x0a372eeb, 0x783ac97c, 0x2e1dd991, - 0x3943d3fc, 0x45fe7589, 0xb8e0e747, 0xb3b43bfc, 0xb82ec8b3, 0xa4adfc60, - 0x7870569f, 0xb88b4836, 0xd09763bc, 0x5768b94f, 0x41b7ccae, 0x0678df3b, - 0x2ffa8778, 0xc4967ec4, 0xfe18dddb, 0x82b87995, 0x4f81ee41, 0x611d9966, - 0x1dd39846, 0xb724f911, 0xebf73277, 0xb38f8011, 0xc2136706, 0xae643c77, - 0xed7e1191, 0xf757a146, 0x74285f20, 0xc7f4e052, 0x7a0f794f, 0xfe1e7fcd, - 0x57a2e978, 0x133e0273, 0x2b2a22d8, 0x79e1bdf3, 0xae5e0ff6, 0x69bdf983, - 0x147c9df0, 0x6fcdebe4, 0xeb3736cc, 0x20cdf382, 0xbc3d12eb, 0xd992ff77, - 0xb3e00736, 0x051f8168, 0xb32e772e, 0xcebeb19b, 0x8a9659ec, 0xe06af674, - 0xcfe88fca, 0x7f174c58, 0x5eeb31c5, 0x2afb3154, 0x3d56b6ec, 0x57a487ad, - 0xcf50c2d8, 0xab9f6866, 0x99c4e5e7, 0x50a59eb1, 0xdce8f76e, 0x3c6f1806, - 0x347375e8, 0xefe74fbe, 0x38230b59, 0xc20b3147, 0x90011559, 0xbbaaf7c2, - 0xd1c03dd2, 0xd95bfeac, 0x7ddf041d, 0x0fa4c1c5, 0xc16032aa, 0x83efc2cb, - 0x896efbe9, 0xd62ee38f, 0xd355b8d1, 0xeaa8feb9, 0x53b8f16f, 0x54ceb271, - 0x8daaf7e4, 0xd04884f6, 0x5b328923, 0xa47a0b54, 0xf0ca152a, 0xeec65d8c, - 0xf4c47d43, 0xc3d3e1f6, 0x78fbf0ba, 0x11deb8d8, 0x84b71fc0, 0x96fe75f3, - 0x2af9ccb5, 0x29b563d6, 0xd57587d3, 0x00008a8b, 0xd4305eb0, 0x596efe83, - 0x6286f50d, 0xac2f507f, 0x83763d7b, 0x68a7c476, 0xac608c47, 0x9f11d858, - 0x8299dd6e, 0x9b27c476, 0xa9e4a677, 0xd8945fea, 0xbfd71c1c, 0xbc656f7d, - 0x66ec67ca, 0xa0926f18, 0xf98724fb, 0x50eb8494, 0xe77b44fc, 0x1a7c85fa, - 0x0235bf61, 0xef9061f5, 0xb47ba445, 0xf90e77d1, 0x6261bd8a, 0xa3ae199b, - 0x1a5d72be, 0xf7876faf, 0x1bc8efe5, 0xdb7e0357, 0xdbfe3862, 0xbe041976, - 0x2dff9e5b, 0x0c34af94, 0x3c61ab60, 0x0231bc17, 0xd71cbbff, 0x853d702a, - 0xbfce333f, 0x57112854, 0x55d98983, 0xfc1b60eb, 0xc5d99457, 0xd04ced2f, - 0xe88421b7, 0x1b372e5b, 0x75caff91, 0x70875d92, 0x59ec1c2c, 0xa7e97526, - 0xe8af4512, 0x132972d8, 0x262cede9, 0x9827bcbe, 0xfdf0966d, 0x80c5f4e9, - 0x9af352af, 0xa18f5c66, 0xd70901de, 0xb407a41c, 0x53ed885f, 0xbcb3e3bb, - 0xad54e00e, 0xb4dba5f7, 0xc6642f70, 0x0784efae, 0xd7cbc937, 0xc414e706, - 0xb730596b, 0xcd4b2e43, 0xf03f0839, 0xf017b79d, 0x2649afa9, 0xc0c426be, - 0xbe8a79f8, 0xdc7ce6a9, 0xb3c7d55e, 0x09e7be04, 0xca35e5ba, 0x0b3c135e, - 0x5a7bbce3, 0x2d4addb0, 0xfbc74b1d, 0x3952ea0e, 0x1ea38e1e, 0x4dc152af, - 0xa7054e7a, 0xa25cbddc, 0x7d45eef7, 0xc63f3fe0, 0xeba935be, 0x4ab689dd, - 0xe709f236, 0xf495667b, 0x0797d066, 0x4ca15d05, 0xe62499f3, 0xf5f23466, - 0x14ef9fdb, 0xd08eaefc, 0x8eba3971, 0xbe412dbc, 0xbcbeb98e, 0xb3fef529, - 0xdff56de4, 0x06ec6f29, 0x8267c1d7, 0xf8083b98, 0xd8ca5ab3, 0xfab27a8b, - 0x465b6636, 0x37ebb55f, 0x088673ac, 0xc035fd7c, 0x85987403, 0x9d7906ff, - 0xad3f7d1d, 0xfc97607b, 0x9cd9f516, 0x776ec201, 0x2424bb70, 0x9b19f38b, - 0x61fd3cc0, 0x1ca2610a, 0x23d9b932, 0x1eb91f03, 0x006765ce, 0xf8fb311f, - 0x32f5f2fb, 0xe51375d9, 0xa865d8bf, 0x659431db, 0x5cc80582, 0xd53f4417, - 0xa633f512, 0x24fee371, 0x6e4c4728, 0x7016464e, 0x6674bc3d, 0x9c0208eb, - 0xd058b1e8, 0xdfe1f163, 0x67c5bd50, 0x7d827979, 0x57942f60, 0x799921d7, - 0xa1c761a0, 0x2f2c7a99, 0x28b125d8, 0x104cf718, 0xd501a397, 0xc955663a, - 0x304f20e3, 0x75f8aab3, 0x4d4896c8, 0xa26d5879, 0x0d4dfea6, 0x33df357d, - 0xdf3583bc, 0xd4ca1c47, 0xc79bb394, 0x3c8fea68, 0x8f29ab9e, 0xa9a2996e, - 0x0cc2f63f, 0xbe47f94d, 0x99f535bb, 0x103cdedb, 0xe82050f0, 0x8a0ff8af, - 0x5ae5bafe, 0x2c3da69e, 0xe8095ec7, 0xb15fc85a, 0xc80b3582, 0x2d07193f, - 0xc896fdd4, 0x8da20e6b, 0xf5a95856, 0x6b54164f, 0x1b0dc5cb, 0x5609408d, - 0x2fbed1ec, 0x0f2da2d9, 0x43a79e88, 0x011b3abe, 0xf820c9fe, 0x428b1447, - 0x2ec9eff9, 0x44efa7f1, 0x00758fe1, 0x7e8098df, 0x33dface9, 0x7d234737, - 0xdf03cc0d, 0x7e05b03b, 0xf5c1be07, 0x03d0e3a3, 0x8523e43a, 0x3278fede, - 0x1ee96bc5, 0x3dd2d564, 0xee96a064, 0xdd2d3661, 0xd2d28d7b, 0xa5aec23d, - 0x2d64d47b, 0x5a1c63dd, 0xd1cdc7ba, 0xa9c13dd2, 0x91527ba5, 0x8bc9ee96, - 0xf3ef74b4, 0xa9ae96b0, 0xbe5a85ee, 0xc503e3f0, 0xb95b4b4e, 0x8e9eafd8, - 0xe0fcd4e9, 0x40ca9a28, 0xfcaff4cf, 0x7fffa6b9, 0x45a43f36, 0x92353f0a, - 0x7e477e45, 0x645fbd86, 0x46ff7776, 0x7f6a6bd1, 0x65d39f42, 0xefa4f67f, - 0xd3cbd9ba, 0x47a09c78, 0xdc9ad97b, 0xf5272f65, 0x982797cc, 0x4bd689bb, - 0xf08746b6, 0x70e165dd, 0xa357c15c, 0xd59bbb19, 0x13dfb01a, 0xc0146750, - 0x03e7027b, 0x9acbdfe3, 0xe65cfde9, 0x5993a7a3, 0x63ccf88c, 0x30167a36, - 0xe8a73d07, 0x1e22b79c, 0x392dcd4a, 0xceaf6fa8, 0x42527a3b, 0x21448ea0, - 0x2f23dfd0, 0x4ea75a6e, 0xd999cc57, 0xd6b18fda, 0xb44ce70a, 0x16e33ba7, - 0x568d6676, 0xbc6f2de1, 0x7a8f5034, 0xa1b60e56, 0xa777943d, 0xde6cf644, - 0x3739fc97, 0xfe43af92, 0x2b0f65cf, 0xfe14ab78, 0x1e43f707, 0xbb0ab48e, - 0xc943399e, 0x7059b3be, 0xb8fe805d, 0x9182ff3d, 0x82582eec, 0x2e80d7f5, - 0x4f4e24db, 0x4dda2ba4, 0x7cccf4c3, 0x9843ca0d, 0x27ccfc93, 0x7892a0f4, - 0x1fb1833f, 0xa0dbda17, 0x75234a02, 0x8e394e34, 0x3cd4f007, 0xaa20cccb, - 0xe98126ac, 0x9afb4207, 0xf12ca225, 0xbce1fe32, 0x454cdfc9, 0x4d2b6d78, - 0x4858af64, 0x4ccd923e, 0xe3dc91c4, 0x493ef0dc, 0xed090d06, 0xbfc01bd6, - 0x6b942488, 0x2198c3e6, 0xfaf99ce2, 0x934c157e, 0x51f8539d, 0x0a2f7c26, - 0x1dbfdeb4, 0x9595edc9, 0x40efc715, 0xcdef297a, 0x84b3377a, 0xf7825ea2, - 0xeb31b92a, 0xb0f11d99, 0x533dc2a2, 0xc8d9ff5d, 0xf1e7ea48, 0x4e2d8bde, - 0xdf723ef8, 0x720428a2, 0xd9739067, 0x10a1658f, 0xe9458962, 0x069ad46f, - 0x1ec3fb99, 0x919afd19, 0xd4e7f5c7, 0x2dd1a471, 0x0bd8f2da, 0x0f42b2da, - 0xc177f376, 0x82650728, 0x00f14caf, 0x195eaa97, 0x67c0f63a, 0x0fdcf165, - 0x84c1be63, 0x1b90a377, 0x0de49d53, 0xc130f902, 0x0a61925c, 0x9ccc0c2b, - 0xedeb7480, 0x6e5da0b4, 0xd0ebd44c, 0x2ff2603f, 0xf800ce6c, 0x78a69e53, - 0x7eb555fd, 0x17ea03f9, 0x48d86bb0, 0xdff11236, 0x41e02f09, 0x1a3a7802, - 0x46ae36e2, 0xcdcc9c78, 0x613603cb, 0xb3fea7b9, 0x7a59becd, 0x0b6cc110, - 0xbc3fc67f, 0x447e9674, 0xa3af7af7, 0x64e3075d, 0xd93db8eb, 0x8e5cde9d, - 0x6bb3e93a, 0x01646c81, 0xb0d553e8, 0x7fd4e3ff, 0x25793e9c, 0x51e22ba9, - 0x6fc092ee, 0xcd698787, 0xf8009612, 0xc75aac2e, 0x092e3f90, 0x8f325c38, - 0x24d7b1c3, 0xb5e8a7aa, 0x10022c97, 0x875a1af3, 0x62f04407, 0x0eb72f7a, - 0x6bd2f2e5, 0x2fae88bd, 0xf1474efe, 0xa3cc41b8, 0x610cf9c3, 0x8c3efa5e, - 0x26f950b5, 0x67281514, 0xdbf12b30, 0xbb23e608, 0x2b5cf411, 0xd972b9ea, - 0x2820bbf9, 0xbe764e5f, 0xe84e7a44, 0x4fc174fd, 0xaf7e8ae9, 0xddc7fbd6, - 0xf8a48d3e, 0xad0b6f4a, 0x54ce4223, 0x3af82674, 0x7f91448e, 0xe768e209, - 0x544db4e5, 0xc688303e, 0x587c1429, 0x8d88ec98, 0xc5ebd154, 0xf5336b8a, - 0x7802f92a, 0x5bbf28ec, 0x4d66822a, 0xa397bd50, 0x32071e38, 0xa18fd5df, - 0x2175f9ff, 0xe047b436, 0xf97ec68d, 0x4729c90f, 0x5b97bc01, 0x9a3af5ac, - 0xf50ea567, 0x24efd962, 0x33c01cf6, 0x66b97180, 0x7035e2fd, 0x9848a96d, - 0xf9f40135, 0x0fdc917b, 0x1c7cc971, 0xe28433b6, 0x8cc98531, 0x853f4385, - 0x7c91a7af, 0x0bd0c40d, 0xcc32b1c2, 0x8c2f7683, 0xdd95151b, 0xf1ff1e1d, - 0x35df43df, 0xb733f49b, 0x1ef543bf, 0xdd9973f4, 0x7bc7556e, 0x19bb0b56, - 0xe39213fc, 0x3b9fd160, 0x7aff7197, 0x84fb8f30, 0x296ae6b2, 0x62f5e7ad, - 0x9a651a20, 0x014c02f5, 0x36ce5718, 0x16ae5c93, 0x47acc472, 0xe18fe8ad, - 0x3a184673, 0x8f0e9cfd, 0x1cfbb187, 0x24fd7a2a, 0x3f0baf8a, 0x6a78e289, - 0x077b7337, 0x2a19f5e3, 0x31af387f, 0x251bec9f, 0xec2edfbe, 0x9503f6c9, - 0x27e8c1b9, 0xbe388a57, 0x058a9fb0, 0xfa682d2b, 0x4ad78e4d, 0x3e91587d, - 0xfe7de2f9, 0x535dad4a, 0xf649c5b8, 0x24ecf5cf, 0x09c514c0, 0x49a4edfd, - 0xd96f4251, 0xefc60658, 0x3b49accf, 0x307a8c18, 0x1e305995, 0x9abf249f, - 0xf11428b1, 0x871cace0, 0x4f543df2, 0x67afeb72, 0x1a87041e, 0xe245b9e9, - 0xe7f774f4, 0xd92db4f1, 0xb2dcefdc, 0x7f5a63b7, 0x58cbe7e8, 0xdda52f8e, - 0x6a06b197, 0x38e828f7, 0xd8cb5f7c, 0x6e7e40e4, 0xc977c091, 0x7a8b2096, - 0x8dab2a7d, 0x0d5d94d0, 0x7af51609, 0x2c28f640, 0x4c146caa, 0x7e2ba721, - 0x72d0d653, 0x768ac430, 0xca017381, 0xbfc1fb49, 0x3a250f86, 0xff5072f8, - 0xf9c7183d, 0x02b6e113, 0x9f743b3c, 0xffd355cd, 0x80bd28d1, 0xffa7af9b, - 0x2d765c30, 0x1e87975c, 0xe1c29d8b, 0xd5c239fa, 0x8b1d3de6, 0x8cb805f4, - 0xe476b86a, 0x3f9ff8f2, 0xa1fc9e9e, 0x88f564f0, 0x87df35a7, 0xc0c61da7, - 0x74126cf0, 0x6e80f97b, 0xfac027b2, 0xcfc849b4, 0x1aef0c3f, 0x6b6dfc3f, - 0x15618d9e, 0xe1137780, 0x9635be2f, 0x7f021672, 0xe04e22b5, 0xc6fa12ce, - 0xfd03ba06, 0x7a468fba, 0xead40f50, 0x2c54d459, 0x96d814e7, 0x46af3cc0, - 0x5da0fb38, 0xfe21eae4, 0x7f8091f2, 0x7014a247, 0xef881ffe, 0xf5e48f7b, - 0x89ff75c1, 0xf28626e3, 0x09ebe0af, 0x1339ad4b, 0xe6fa37fb, 0xf59cb0db, - 0x1a1ad9b9, 0xef1d7fa0, 0xf27e57ff, 0x3caff4a1, 0xc81a8ddf, 0x01d247e3, - 0xfb209419, 0x9ac7cdd5, 0x7f9cc3c7, 0x9d27a595, 0x79e30ffa, 0x79fe36b9, - 0x762c7bd9, 0x778be71a, 0x4b97df51, 0x876fc367, 0xbdf24bb2, 0x97f31433, - 0xd7cd2746, 0x6d8991f5, 0xbce7600c, 0x9942f821, 0x057f329f, 0x151fb0ee, - 0xee0091f4, 0x5a2613b0, 0xf5103e0c, 0x97a07595, 0x5e71a3b0, 0xacdc0eb4, - 0x6ca071e7, 0x57f7d13d, 0x1c50c6a3, 0x27c88768, 0x291b46fa, 0x870fe95e, - 0xff8f9a21, 0x9bf7b5c4, 0x8d3f62fb, 0x33e78a06, 0x4cfc4b7d, 0xdbd717e0, - 0x9427877a, 0x8ef266f8, 0x4763a450, 0x753c0b78, 0xa76a06d1, 0x7287bd43, - 0x8c9e4d71, 0xc8fdae7a, 0xc55916e7, 0xccb472e7, 0xb9ac6be3, 0xbff42c79, - 0x30599336, 0xd62a1cbe, 0xad23d0df, 0xe87f0845, 0x249b9fa8, 0x4af6fc55, - 0xadda8994, 0x6d62fa35, 0x09ab9fd0, 0xf78a051c, 0xb1b118b7, 0x85970782, - 0xeb3ca1e3, 0xe866e800, 0x4760d1a7, 0x2b68e578, 0x7700a7d7, 0x1e0fbc3d, - 0x1f25b9f4, 0x78c167bf, 0x87dabb7d, 0x833d3859, 0x439e61b3, 0xb3de5f91, - 0x97b3c014, 0xdf081cc4, 0x3f5cd183, 0xc455702b, 0xfc02fd71, 0xf114321e, - 0x7ca3ac9a, 0x66fae3ea, 0x96e3dfc2, 0x8c25967e, 0x79c76ef0, 0x299b46f9, - 0xed1d56ee, 0xf9c6898c, 0x1e1cd818, 0x8c766cf7, 0x32587c27, 0x07002356, - 0xf0bd9106, 0xc38bc133, 0xb21cf358, 0x168cb20b, 0xf594475c, 0x8ede8bf9, - 0xcd37685e, 0xd076e68d, 0xd742b7f9, 0xc0abbae0, 0x2c02b677, 0xb957633a, - 0x8498e6d0, 0x9ccf9978, 0xe78e502b, 0x551e0157, 0xc0de7efc, 0x16bc2dfb, - 0xaa51bccc, 0x36eea376, 0x6bc2bb62, 0x760bcce1, 0x5e20f9f7, 0x5f187cef, - 0xf18ac6cf, 0x33fc156f, 0xea07fa33, 0x7c9f9b31, 0x8bf3f86d, 0x8d8f5c79, - 0x4995bc45, 0x7bb4462d, 0xabf98ed7, 0xb3e9ed11, 0x4de61615, 0x4679beff, - 0x9c6aaf31, 0xccd77ace, 0x3ca51f34, 0x5b24f917, 0xc250df3d, 0xf88ad9c3, - 0x4931e0eb, 0xfeaec783, 0xd8f06afb, 0x1a74ffbd, 0xc0c56cff, 0xa43ff4eb, - 0x1aadfe87, 0xedfabbf8, 0xedb6e347, 0x04297bcb, 0x779f7bf8, 0x31bb73e9, - 0x64c7bb1e, 0x373ca131, 0x3f22e6d4, 0xbc0edd5e, 0xd0f4fc04, 0xff28af9e, - 0xa326d0f8, 0x3768c70d, 0x02dae6f8, 0xcc7eefe8, 0xea8dd6e2, 0xa746167a, - 0xdffd9d11, 0x0b1ef59b, 0x03cd95c6, 0x375c16f5, 0xb3d9accc, 0x4cd7f894, - 0x3f8944fa, 0x8b4efd28, 0xccfa3592, 0x5fd9f425, 0x9047cef5, 0x5f3aedde, - 0x89da1e7d, 0xb70f3f03, 0x41117f92, 0x3f12ba76, 0x892383d0, 0x3989ad76, - 0xde4de618, 0xa3ba758e, 0x82dfbfa1, 0x411c62b8, 0xc4e3561e, 0x2293fb78, - 0x5064ffee, 0xa54dbc73, 0xeb45d697, 0xb09d987f, 0xb35f8fd2, 0xcbd17c3f, - 0xc47583d7, 0x2bf372af, 0xb58bbf08, 0xc55c7918, 0x5e67f64a, 0x94e3c1d6, - 0xacfc520f, 0x05fbfe95, 0xbfd02392, 0xe11de252, 0x9ae2ace8, 0xd68c36bd, - 0x5e10fceb, 0x28b7ffce, 0x8a819fca, 0x6ac43d26, 0x162f9e65, 0x310e9671, - 0xdaf37687, 0xda1ff414, 0xa3ab1e45, 0x46e83f71, 0x4fecae78, 0xf37fcf74, - 0x9f6869d1, 0x79e33e83, 0x5a30a6ab, 0x624df227, 0x9106279c, 0x9123b17f, - 0x7ab57fdb, 0xcaa6786f, 0x77bc7c1e, 0x685f736e, 0x7f656977, 0x5dcbda1d, - 0x0efbcdfa, 0x39dae7f6, 0x574df888, 0x39e9e83f, 0xd7489718, 0xdcebb0d9, - 0x31eaaffa, 0x16b650de, 0xef1801ec, 0xa469e812, 0xc4feae93, 0x705f5c70, - 0xcb3f5c6c, 0x9fc893ea, 0xd1f10fcc, 0x60b293fe, 0xea05ba5b, 0x4d8fd7e5, - 0xf33fbe47, 0x5c14a0e4, 0x58c74e0f, 0xdc4f3053, 0x192024fe, 0x69ba79e6, - 0x6abf7f00, 0x17d470e4, 0x9c436b61, 0xadfc009e, 0x95fcf7e8, 0x14767226, - 0xcc48ef3a, 0x7c406b68, 0x7e93320c, 0xf6450507, 0xdf21fe53, 0x17786b0c, - 0x473f159e, 0xa15ac7c1, 0x3ffe954f, 0x79517a16, 0xd299fac2, 0x31ef7082, - 0x1ccffd11, 0xc38d7bd1, 0xf1b21ed1, 0xd08556f1, 0x0730f978, 0x29cbc80b, - 0x8e9d8eb1, 0xbc470eb4, 0x2832ebe7, 0xe443ba0f, 0x7c5956e5, 0xe41eb8e1, - 0x194ad9eb, 0xbe62afea, 0xf8d508f0, 0xd7b28df9, 0xfbddf448, 0x4d5ff90e, - 0xabe90c61, 0xfc8c337b, 0xa69bd773, 0x018f684d, 0x6821ddfe, 0x91371e17, - 0xc9afb2df, 0xfb617644, 0xd7f21089, 0x42c3f1fc, 0x3f48297d, 0x44499bd7, - 0xdf64f6df, 0x0c8edcf3, 0x680f9862, 0x891cea3f, 0xd1694274, 0x9ec3e3c5, - 0xd5cd7680, 0xda2f20a6, 0x60f4f035, 0x6acdd07c, 0x9efde9e2, 0x347e8610, - 0xa8643d3c, 0xe0f17549, 0x1082a0b3, 0xfda99bed, 0x01ce2943, 0x4a1f1fa8, - 0xb143fe83, 0xbbd52b7d, 0x9379d7da, 0x1221c785, 0xd48978c5, 0x5fb7326f, - 0x8d39f499, 0xef89fd03, 0x65ddf4cd, 0x79a48e72, 0x36c61c7c, 0x61679806, - 0xa0bcb6a5, 0xf62e5b5a, 0x5b25cb68, 0x745f65b4, 0x814fd114, 0x7f73e15b, - 0x70c4a4bc, 0x87c142bb, 0xd2769f3f, 0x61f03af3, 0xcbf1013c, 0x571d391a, - 0x929aba0f, 0x0f2de387, 0x9753e4d6, 0x3e279d34, 0x9fd8376c, 0x77c075c1, - 0x9136c0d4, 0xd50360fe, 0xf8ffb6fe, 0xe7adf3dd, 0xbcf5be45, 0x26dadf26, - 0x160c2ef4, 0x5084f18e, 0xe11c359b, 0xad4ba1d8, 0x3d5f22f5, 0xbe7c4419, - 0x21cbf716, 0x401baddf, 0x054452f0, 0xf0b3cfc6, 0xfd08cff1, 0x54c5e677, - 0x642d33ca, 0x4b4fa4b5, 0x44bef399, 0x5887e78c, 0x57ff9073, 0xcdfb02d9, - 0x27baf8fe, 0x34e3d386, 0x7d8ac6b3, 0x6fcc564d, 0x80bfe114, 0x74fd4504, - 0xdfbe20f6, 0xd175f48f, 0xd481137a, 0xd8ccf7c9, 0xf3ff9655, 0x0d0077cb, - 0x3655fe11, 0x67ae3877, 0xde7c2c17, 0x91593f60, 0x9f3245be, 0x8875fa07, - 0x2f120bc7, 0xd942fa2b, 0xdf00b12f, 0x989e7ccb, 0x518f2fa7, 0xc7ae38fc, - 0xf75e925c, 0xd693e830, 0xf2386b08, 0xb4aaeb53, 0xb79825c8, 0x66c6b088, - 0x3aecf0aa, 0xd026bcc0, 0x0946d65f, 0xf0ddbf63, 0xf39223b5, 0x085d6fa3, - 0x8eaf2bad, 0xf6ab996b, 0x8635ff13, 0xc58f91db, 0x16a6ff70, 0x40ec826d, - 0x5a74e078, 0xcab4e820, 0xf931fce6, 0x16f57e4b, 0xf412f754, 0xb95f7bf3, - 0x2f295ffb, 0x0fc55eb5, 0x8a4edeb0, 0x385de3e5, 0x374b7464, 0xfb4a5f91, - 0x82eb7c9a, 0x70bf6ec8, 0xae3a4a68, 0x82eb4543, 0x155f5122, 0x8b135e1d, - 0x8db8c8f6, 0x3ae2c58f, 0x6269b055, 0x9fe2533a, 0x482a3e2a, 0x3da3a7b1, - 0xb6567be4, 0xd5453f60, 0x4ab5c132, 0x167e695f, 0x36ab9fde, 0x24549d90, - 0xdbd73ae0, 0x2f788e19, 0x11bd33d2, 0xef4e7ef0, 0xf03b270c, 0x2ffc9959, - 0xbd40f9ff, 0x00ccfa63, 0xfa0b3278, 0x00b48be2, 0x47547bfc, 0x66082a74, - 0x36e75724, 0xb9edfcf2, 0x587de764, 0x157f056e, 0xaaad77f7, 0x0eb70e2c, - 0x73f78eed, 0xddf12766, 0x051f3102, 0x28e3feaf, 0xbc476d78, 0xe871fda2, - 0x2768c9b9, 0x91929eb8, 0xc6ded933, 0x8e47e42b, 0x72789a6b, 0x075fbe2c, - 0xd7158076, 0xdcefbec7, 0x4ad4eb83, 0x909da199, 0xcb1694d7, 0x57d76a86, - 0xdef22fb4, 0xa3ae159e, 0x90d31df7, 0x6d5b4e9f, 0xfb2a99b1, 0xcfc11dee, - 0x5fc974fe, 0xec70b7f7, 0x818d68af, 0xdff057e0, 0xfd93630e, 0x41e21953, - 0xedef6f3e, 0x7a157ea3, 0x2116fd28, 0x81fe15be, 0x2c63577a, 0x7c795f82, - 0x99d535b1, 0x0fc00b63, 0xe3037ff3, 0x61d57f62, 0xdcbfcc76, 0xbccab8e8, - 0xc8aae93b, 0xafd399ad, 0x8a54f9f5, 0xea8eeadf, 0xe9e99369, 0x50535bca, - 0xfd61f2de, 0x5f3a7f46, 0xfe449df2, 0xe315b285, 0x4aebf9d5, 0xf2f1c3ee, - 0xf874984f, 0xadcf75bd, 0x3f2e09c3, 0x529e01fa, 0x7b75f102, 0xa6c52faa, - 0xfbac1fc2, 0x7ccacf24, 0x1c137054, 0xe4307fe0, 0xa054f6ff, 0xbfee4a9b, - 0xf50f7210, 0x63e2462d, 0x5fc470fb, 0x7e2d7ce7, 0xcdf8b5f3, 0x3e2318f7, - 0xcd273666, 0x9323e0a7, 0xfc17df0e, 0x28e9a7fa, 0xc7abad9f, 0x235abcd3, - 0x8e51c3ed, 0xffa0535a, 0x59e7dda1, 0xe7986bf0, 0x6799efd0, 0xabd11065, - 0xfa4679c7, 0x33df679e, 0xed58c8cf, 0xadeacf3c, 0x5c5fa8e1, 0xfb8664bb, - 0x8ec95cc3, 0xd97963b5, 0x768614b2, 0x05d0f589, 0xd5e912fa, 0xb8a068d6, - 0x30ef22a1, 0x83f20dde, 0x35a1f88e, 0x28f4fad7, 0x0b656f5a, 0x575bd9c6, - 0x51e7788f, 0x95aeb728, 0xb407682d, 0x81fc72e6, 0x0f50ebdc, 0xa638a6b4, - 0xc18f7951, 0x39fa14b2, 0x0fb7f953, 0x0c0bf225, 0x73f34656, 0xbe3b45ac, - 0xfd45e01d, 0xcd997805, 0xcd034aed, 0xa7cad57f, 0x7777e256, 0xfe964df5, - 0xa7eb40d6, 0x6b45cf16, 0x321c8d64, 0x73c695bd, 0x8ac93afd, 0x0cf050f3, - 0xc67d349a, 0x607c2eb0, 0x2eb0d679, 0xfd94b8bc, 0xeb3d626c, 0x9f885bd4, - 0xc05d7cbe, 0xafa8ea7d, 0xa77d3f70, 0x57affb3c, 0xdfc67a7e, 0xd04db89e, - 0x16ef5fd3, 0x7ca9cbab, 0x5cbaa15f, 0x4a37a7e2, 0xbac3befd, 0xfc502d3b, - 0x78e77774, 0x02796f1c, 0xaf5c4a6f, 0xd68949fd, 0xd5bd3cd5, 0xabc17e88, - 0x155c78e3, 0x8ff301fc, 0x683b0e49, 0xb67a793e, 0xef8994dc, 0x994f546d, - 0xdcb7f427, 0x8ef46b04, 0xa077ae60, 0xaaa364de, 0x0557e8ac, 0xfe44479e, - 0xc3fe7942, 0xad64f3fe, 0xb38aacff, 0x201b123f, 0xf7299ece, 0xc608ed7d, - 0x64c976db, 0xf30eba37, 0x7d7d8575, 0xf06de9e5, 0x1a4f7cbe, 0xe6555bed, - 0xf6c78fef, 0x7de12b86, 0x21db7de1, 0xcbc63063, 0x72a31af2, 0xf48a2fc9, - 0xaffbc405, 0xfe94fcc4, 0xe12df4da, 0x2df6d5d3, 0xa19f096b, 0x86bc8fe2, - 0x164fb42b, 0x5596e7f0, 0x534cfb7a, 0x79fa2e4c, 0xcc4a7ff9, 0x55f3c1d5, - 0x06b5cf41, 0x506b0beb, 0xc899764e, 0x3c3b6f6f, 0xdbed8747, 0xe789170e, - 0x9e7a7643, 0xe382933d, 0x7f38eb87, 0x14bde32b, 0x7ca5edcb, 0x7fe7a9dd, - 0x8dfefa84, 0xaa65d4b8, 0x2ebe69f8, 0x6dc4fc93, 0x845cdf06, 0x95f1ec1b, - 0xe943efb8, 0x2b58d5e7, 0xebb6d1c1, 0x0fa8f3fc, 0xce4dacce, 0xb6d23544, - 0xcc70c06b, 0x189db7fb, 0x3fe78e91, 0xb04c9eda, 0x66d81ea1, 0xfc443eb0, - 0x86cc2ab6, 0x87f4ae72, 0xac7e60e3, 0x1cc8d76d, 0x4edbb3f4, 0x4ca17870, - 0x73d4377e, 0xa50efee3, 0xf59d70df, 0x8c8fb857, 0x7940c9fd, 0xa4dfc5b4, - 0x1abfa1c5, 0x5f9c0c6e, 0xbb5dfb40, 0xc1296a7f, 0xf1e3ecad, 0x7d95efb7, - 0xd17efe3d, 0xf80bd07c, 0x2b7fdfde, 0x702b9562, 0x1fbf917f, 0xdc7e40c7, - 0xfa62beca, 0xbdf5a5ab, 0x2677cb64, 0x0fb13d4d, 0xbe031a88, 0x571e40f2, - 0xc3c65c53, 0xe52b5fe3, 0x5f42f980, 0x3ec7cf2c, 0xdcedf213, 0x4f5d1516, - 0x1e3e98eb, 0xc8da7af0, 0x7f99f1cc, 0xaf973fbf, 0xbacc57de, 0x73a777fb, - 0x00b9953d, 0x32d5e9d7, 0xa1fd47ed, 0x7b7f9dfe, 0xf3e88480, 0x4effb099, - 0x3e705cc3, 0x5ab3fb3d, 0x067c1578, 0xfe057d89, 0xfe22cdf5, 0x991bf03e, - 0x9bee51d9, 0xcfe41e0c, 0x3f9f8d90, 0x67f20f7d, 0x6a92c1a3, 0xed017ca5, - 0x64bb6573, 0xb75c7f4f, 0x2f84cf1a, 0xd76575c4, 0xd34e3a08, 0x92ecbfe9, - 0xd6dfee29, 0xf3162570, 0xe50fd003, 0x4f4d5d3b, 0x7b7f90d9, 0x4e312382, - 0xeffa61fe, 0xa1f8bf66, 0x6db67bc8, 0xfa8e973c, 0x6260f41d, 0xfa67ca1c, - 0xff9e46d7, 0x7da1c96c, 0x273f1bbf, 0x73ddbcbb, 0x7349ec95, 0x940f6ca3, - 0x671a1c57, 0x4df061fc, 0xf007c2d0, 0x1478450c, 0x3eadcb38, 0xbd737f3a, - 0x5d84ffbc, 0x1cf14b85, 0xd1f9e608, 0x94682fbe, 0x582add69, 0x40ac7b2f, - 0x7e030997, 0xed082fb1, 0x8a24a7d1, 0x6f924e0b, 0xd40e70fe, 0x4ca4f05f, - 0x1f1bbde5, 0x7480d0fa, 0xbca06f5d, 0x99a682e1, 0xfc57da46, 0x122cc494, - 0x37d9ab8d, 0x12972c50, 0x09f6dd5c, 0x680fedf8, 0x7d0b76cb, 0xe37ef7e0, - 0xa2fb198a, 0x9267a9f1, 0x017efbb5, 0xcb103bfc, 0xdfe047cf, 0x126bfe96, - 0x416d0e91, 0x5ca3358c, 0x5fc85bea, 0x3e7e5e61, 0xd9d76db3, 0xeb97a414, - 0x5e292f8d, 0xb01c93d9, 0xf33fbe46, 0xfc8938ce, 0x5cdf81d2, 0x5008e699, - 0x6fc8b67f, 0x13b8316f, 0xb7dd3ed1, 0xe38f2af1, 0xae71e2ec, 0xee67fb1e, - 0xf26f1e20, 0x2c1c5106, 0x0532d6ab, 0x3cec01e5, 0x36b93fcc, 0x09b198ad, - 0x0dbb41ca, 0xabab4456, 0x05c9287f, 0xaaa141ca, 0xb61e455f, 0xb2947c88, - 0xd8b661bf, 0x6feca397, 0xf83bf650, 0x77eca1c3, 0x3bf62d98, 0x78eb1dbc, - 0xc19e0e28, 0xd9385f3a, 0x5ffb7eb1, 0xe2cfda7a, 0x3fd1efbf, 0x4f9fee6e, - 0xcbecad5b, 0x47146088, 0x8dfac237, 0xcd86c395, 0xabf51778, 0xfe4c98e1, - 0xef23ded0, 0xf1f5aac5, 0x38737d0a, 0xd72f31c6, 0xd1fe4419, 0xc316f947, - 0xa98dcf91, 0x862597a4, 0xca0bae76, 0xb375def8, 0x338eaede, 0xe7c71d3f, - 0x9d2e22bb, 0xfb7ab7af, 0xb7afcc21, 0x688cf259, 0x148e1b8f, 0x367e464c, - 0xf919e7c4, 0x54e6b9f8, 0x9e844ba4, 0xa3457ff8, 0x05b36e32, 0x7bf257fb, - 0x2cc71161, 0x598577c8, 0xbf3fbeb3, 0x4a83f227, 0xdf33af7e, 0x7be33f17, - 0xe33b7bf3, 0x8bf71d38, 0xff71bbe7, 0x3b7bf2cf, 0x5265fe91, 0x30f1a4cb, - 0x8ef88ac4, 0x6ebdf9c0, 0xfcb1bcf3, 0x567147de, 0x9ceb7f9e, 0xbdf90f6f, - 0x58dffd6e, 0xff7baf7e, 0xbaf7e43d, 0xf9837ff5, 0x797ecebd, 0x50f96f7e, - 0x5b3fed1d, 0xe3c4dc7e, 0xffbe66e4, 0x65e424c3, 0x668277b9, 0x74f284ff, - 0x184909b3, 0x275e5f27, 0xbcfe464f, 0xa0b3c96c, 0x78221a7c, 0xb064c83c, - 0xd43f464f, 0x85191114, 0x711ff97c, 0xabaf3469, 0x3f888b11, 0xc87982af, - 0x722d89cf, 0xef797960, 0xca649902, 0xd6177f2f, 0xd57cf324, 0x7758b368, - 0x87e4b7df, 0xf3fbfe52, 0x3d1e5538, 0xed00fb2c, 0xce0d648b, 0x8fbf283e, - 0x127f405b, 0x7c50b79f, 0x7f3928c6, 0x76217187, 0xbb639f82, 0x601ce41a, - 0x3ea5c951, 0x2eec28de, 0x33ea126f, 0xa7a2ab37, 0xe10ae1ab, 0x2a478959, - 0x47cc5ddf, 0xa5794778, 0x7a09b8c3, 0x706f7d2b, 0xb573a00e, 0xbb4e8e02, - 0x6ea18fe0, 0x6a69a73c, 0x8ff286fa, 0x34df7aed, 0x36d4eb8c, 0xfc6a21ca, - 0xb973c526, 0x9cfe4dc8, 0xd8e556f2, 0x57e617ae, 0x7ca0064b, 0xc37c9b96, - 0x7b7dee11, 0xf51c36fe, 0x92a6d5ca, 0x0b7ef83e, 0xdc75a7d4, 0xe7572be8, - 0xaaf3fd5d, 0xf381f1d1, 0x969a5bad, 0xdb1c2225, 0xf6005e30, 0x3fc3f955, - 0x663a73a7, 0xea0dff66, 0x837a060f, 0x99868afc, 0x93b438f2, 0x01db003e, - 0xf8bb59ca, 0xcc959bfa, 0x2d37983c, 0x0e60fa6f, 0xdb3cabd2, 0x32974168, - 0x6de78338, 0x16cdb383, 0x45a6ff5c, 0xe2303e71, 0xed869b3a, 0xdd214627, - 0x3031c41e, 0x7b73b9cf, 0xb7f01bbd, 0x854f0ff0, 0x27dfc033, 0xafda4afa, - 0xb1f9ba51, 0x2f3c3b70, 0xc714dde8, 0x0723c4fc, 0x1794ffdc, 0xf6b7f8af, - 0xfe754950, 0x3fdfd3e0, 0x6ef88d31, 0x7982c1b3, 0x1316d77f, 0xaf2b9f9d, - 0x33f3a62b, 0xcbc53e50, 0xfe867f8f, 0xbb41ab95, 0xe97c2f4e, 0xad2b58a9, - 0xb124ee0b, 0x941f11ee, 0x849d9cd7, 0xc1f857f8, 0x8f8e1dbf, 0xb55de5fb, - 0xaf633cf2, 0x7b15dfee, 0x5dff5943, 0xfb884f75, 0x3fc85a01, 0x845faff0, - 0xb19a3232, 0xfddaf199, 0x983e0ad1, 0xa3f48627, 0xf0c373bc, 0x54be5053, - 0x92e16ff3, 0xbf8a4f0a, 0xff9b51d3, 0x3dac37bb, 0xb06defaf, 0x7574b02e, - 0xb3b50f3b, 0x177e0836, 0xf06a5f7c, 0x955ca386, 0xdcd8346e, 0xfb74baf0, - 0x973e2f0b, 0xc3667245, 0xfb64ac75, 0x818e1f5b, 0x430ec972, 0x8d3e54f4, - 0xde754950, 0x61ff05cd, 0xc3a1405e, 0x32ded7c2, 0xf7f1875a, 0xa2ec88bf, - 0xbd8ec947, 0xfc5e7446, 0x76be31f1, 0xbbf291af, 0x3da974fe, 0xef2b7245, - 0xbbec86fc, 0x2c48f64f, 0x3e00352e, 0xee15be37, 0x3a227814, 0xd2753a0a, - 0x92beafcd, 0xe4e8577f, 0xde3b3dff, 0xfd85f242, 0x3f023ca1, 0xc606f2bf, - 0xd9323ffb, 0xaf45fe70, 0xf38e103c, 0xc45faf38, 0x63c37af9, 0xb71876b1, - 0xb58ee0c8, 0x2fbf93d0, 0xc467fe7a, 0xfe8e0b6f, 0xcc7fdb8c, 0xfca3a09e, - 0x7bf29ba5, 0xd0efeb85, 0x0da2ffe8, 0x85ffae3c, 0x11de4d9e, 0x0b8e2e40, - 0x937e72bd, 0xe7d9f289, 0xf6860f31, 0xdf327bcb, 0xa7eec7b7, 0xdf629078, - 0xe54d2780, 0xfe1e842f, 0x894ebc43, 0xfc359b7f, 0x3378f35a, 0x64d3e7d2, - 0x25ea1c7b, 0x05bbd317, 0xa0efa43e, 0xc4e8f95f, 0x1e1f4e38, 0x6076a33f, - 0xf7c78e8f, 0x40d9bf58, 0x3b5550f1, 0x8f966e71, 0x1f18a0ff, 0x7cc60ee0, - 0x5658f9ca, 0xd44fc814, 0xe7c67427, 0x29e7359b, 0xcb9be4bb, 0x2e2acd7b, - 0x7bbc8adf, 0xefc64fa6, 0xf2e31f9f, 0x3292ed83, 0x1c6f2e09, 0x4b3bdf7d, - 0x27cfce1a, 0x75c9037b, 0xb5c8418d, 0x27c2bbf6, 0xee9eb700, 0x05f85021, - 0xfc248ffb, 0xbad2d517, 0x1dd8d26d, 0xbc2f1c2e, 0xdc8a7f7b, 0xfff2102e, - 0x7f38bc7e, 0xad9fe425, 0xf3a1b98f, 0xcf06a545, 0xbca1cf8b, 0xbef7e09e, - 0x90376e94, 0xdb717e5d, 0x06ef0ffe, 0xab58b939, 0x7f56a9c8, 0xd169cbfa, - 0x7f116fab, 0xc5e9cbfa, 0x0362b7da, 0xb78ee9ca, 0x2eee0ec8, 0xfab9ffa7, - 0xdfdfc153, 0xe8a7f0fc, 0xe8f09ec3, 0xe3ab0faf, 0x21f501ad, 0x9f531dfc, - 0xa5f0537b, 0x6fc29df0, 0xeb2e5f0b, 0x93a77a83, 0xebbe152f, 0xef854be4, - 0xd73bedba, 0xfbffcfe0, 0xe00df85b, 0x60faec72, 0xb3d01252, 0xc9fb91b4, - 0x9620eed0, 0x5a764f01, 0x41e558c6, 0x55db6f3c, 0x6b95f8f6, 0xfddbeafd, - 0xfabf0eca, 0x22f2bf4e, 0x821efabf, 0x3f61b4ab, 0xbcc96fdf, 0xa586fa9a, - 0xdd161dcc, 0xf31e0e75, 0xcfd02b58, 0xf4f3c6df, 0xb8f0258f, 0xb8c62fa9, - 0x891ff682, 0xe13e2a7d, 0xb43bb467, 0x354e54fb, 0x5b7fa4ca, 0xf8f3813c, - 0x3c9209e0, 0x3fb0f4b4, 0x4d3b895e, 0x1e534394, 0x2a3a3806, 0x60a0fc79, - 0x94e19dc9, 0xbb4c69cf, 0x850ae31d, 0x2c31f987, 0x73143f65, 0xaa09f5db, - 0x98170efd, 0x319be9fb, 0x4258d64f, 0x35828bf1, 0x0fcd7a5a, 0x0be2907d, - 0xf7b4abf3, 0xad7c2900, 0xd68b0bc4, 0xc42fbf6b, 0x1ee8847b, 0x47da4a85, - 0xfb46b0b4, 0x0e7c89dd, 0x41273c7c, 0x2c1909d8, 0xf9bde443, 0x57a11239, - 0x6f43ca27, 0x21cbfca7, 0x1da5f299, 0xbde1328d, 0xfb449b63, 0x863b9869, - 0xf99ca5e4, 0xf8299f48, 0x60f284b9, 0x5cdf59ec, 0x73dffd7a, 0xa52a851e, - 0xff0f1ff5, 0xd52f3c2d, 0x8ddf489f, 0x4e7f9de5, 0xaf7598f9, 0x104f7e3f, - 0xdf6a1fed, 0x35f74613, 0x9dbd37b5, 0x85e528f2, 0x07ba364c, 0x9497cf61, - 0x6a5f6b7f, 0xd57d422a, 0xcafdcc9e, 0x0e5f4d65, 0x39657ae7, 0xc098df3f, - 0x34744dcf, 0x94f28dfe, 0xca268d1d, 0x84f6b933, 0x7ae11f90, 0x9cfc8823, - 0x292fa6f6, 0x9acffcbe, 0x3788b94f, 0x3cf187b7, 0xbfb8bb4f, 0xf47bb5c4, - 0x2d87980b, 0x446bdbab, 0x9bfc65bf, 0xdf5d90df, 0x67b72afe, 0x1eded0da, - 0x5bae7883, 0x7dc44e33, 0x4d0ecca8, 0x0db77b45, 0xb1912385, 0x9d5dcfa1, - 0x081a1eea, 0x5e50df4f, 0xf3f146f5, 0xfc18ffd2, 0xb9dfb448, 0x63cc31b4, - 0x5fde7096, 0xf518fc9d, 0xd79e1ec1, 0xb17be657, 0x1fd90976, 0xc1f79bd7, - 0xfddfee04, 0xe4b799ef, 0x9f7991bd, 0xef4e6ffd, 0x98d43c62, 0xba2e5ddd, - 0xcf1379f3, 0xb30f6d17, 0xc837bc11, 0xffc486ef, 0x157f7465, 0xfd7e1ee8, - 0x6ffbf779, 0xe99eef3e, 0xa0ae787e, 0xf3e305bb, 0x21bf37ae, 0x3d5efef8, - 0xe87fe137, 0xfd3b15fc, 0x6fd7c67d, 0x91c3a257, 0xee9efb88, 0x5f02bc38, - 0x274e74b9, 0xcd12c3c5, 0x4d9fee74, 0x8e87e28d, 0x33618ef5, 0x57877586, - 0x25fe1bf1, 0x31273ed1, 0x07feaba6, 0xa619efb3, 0x7d57779e, 0x58d1be3e, - 0x379d3f7b, 0xfca50b29, 0xc18f6e2c, 0x36cc2f76, 0xf713fe71, 0x990f1c3c, - 0xa606307b, 0x738347f2, 0xe739c23e, 0xc0ac9fce, 0xca2fb4b2, 0x35e718ba, - 0xdc4725af, 0xc710b08b, 0xfb3b352f, 0x72f9aa60, 0x2f4073b2, 0x511c47b4, - 0x1ccb9e3c, 0xe1011cc3, 0x37ce6b77, 0x994bf62a, 0xea3aa1b0, 0xbe517ad2, - 0x645ed5e4, 0xb8e9b57f, 0xe026d87f, 0xb767e0bd, 0x1a8e7917, 0x5c58ff31, - 0xcea8d473, 0x7389963f, 0x3fe3fea9, 0x23f3c891, 0x87f6be9f, 0x8bf748ab, - 0xa3a7d45f, 0x5d2256bd, 0xdd5d79a2, 0x98ae747a, 0xff9c0adf, 0x14be1d43, - 0xb4abcc23, 0xc791af76, 0xf4fcc523, 0x9beff4be, 0x79ae9b5f, 0xaabb9d12, - 0x8e7ce897, 0xeeacaed2, 0x93b424e8, 0xe8226a8b, 0xa7dc473e, 0xca9dcfc2, - 0x7860fb7e, 0x8eb2493f, 0x4bf7dbf8, 0xd21bf689, 0xe9dfb41f, 0xbee0f08e, - 0xcaee936a, 0x676899b1, 0x8ce7e30f, 0x438307d6, 0xbbc77e0f, 0xc41b5f02, - 0xbf780779, 0x07c7df12, 0x4ff1f6f3, 0xfedf68eb, 0x9409b90b, 0x7bdd543f, - 0x72075291, 0x36b26494, 0x49b8c0b4, 0x0f28bd15, 0xb9d13dbc, 0x5f71f105, - 0x18e52e94, 0x421ce1c1, 0x8e6f80e7, 0x753f21ba, 0xf818b306, 0x9e7e527e, - 0x4f85867d, 0xb5d850a5, 0xee9d9933, 0x3983b8e1, 0x6d7bdea9, 0xd7da3b46, - 0x336e61ef, 0xa3f7ee93, 0x0f3177f7, 0x5e61ef3d, 0xac2fffaa, 0x5f0aca85, - 0x17de3f02, 0x3cf1f9cd, 0x8e8160a6, 0x47dc226f, 0x3f278643, 0xfe9ef80c, - 0x94fe80cc, 0x76e2ad2f, 0x9ee0f5f0, 0x574bfc2e, 0xf210f3a2, 0x2fe4c77b, - 0x7e82af9e, 0xf12f6674, 0x91ee7283, 0x7c11884d, 0xdb72fdf1, 0x0f99d1dc, - 0xe2bf450d, 0x5bd24156, 0x509fdced, 0x2edc0dce, 0xd9ef01e4, 0x343a0489, - 0xa7bdf95b, 0x3dbd2acc, 0xc793ca02, 0xe59fb4c9, 0x20d6e08f, 0x4331fc7f, - 0xd9a5f716, 0xd134fda9, 0x3371d4ef, 0x7a82f797, 0xc96ebe93, 0x9327f3c2, - 0x8afd6b7b, 0x5c6f449f, 0x29cf011e, 0x7fefb4fd, 0x88f59aca, 0xb543a9d7, - 0x2cb4cdfe, 0x38bdbd6d, 0x2a962466, 0x4b845ee9, 0x193fc289, 0xfdab06cc, - 0x1d3e6513, 0xd118af53, 0xe493ec17, 0x597482bc, 0xb9d9db7c, 0xcf4ede74, - 0x4d111ede, 0xbcd1cff7, 0xe6f02b5a, 0x55cec646, 0xa179e998, 0x20ecc2c2, - 0xc4569ff7, 0x8552f3d3, 0x55b7de95, 0xf8e7a40c, 0x90dfc724, 0x9f95053e, - 0x670fd1e9, 0xee34e955, 0x9acf8203, 0x9d1d5e75, 0xd124d85f, 0x82079a7e, - 0x8ef1739a, 0xa73607ac, 0x61739c52, 0x0c41ed43, 0x1d78141f, 0xf39c9093, - 0x883a2d0f, 0xc06bb2cf, 0x158023e9, 0x24a61c12, 0xa763eb94, 0x7ac6df67, - 0xe37b1be6, 0xd05183a9, 0x1b0af9ff, 0xc549f5c1, 0xac5e7a28, 0xb3dc13b0, - 0xa4961c92, 0x67d2a46c, 0x6db73fc4, 0x824fa53b, 0x12ad13fa, 0xb63f2bad, - 0xe4078f33, 0xd7c0daab, 0xb304ea85, 0xdc74e50d, 0x1e1b19b0, 0x9df7a864, - 0x1dc70889, 0xe2278a53, 0xcd46d338, 0xeeb47ba3, 0x7bf19afc, 0x58dc2695, - 0xe9f988dc, 0x247bcbdd, 0x3acbcbe2, 0xff18edeb, 0xa649ff75, 0xde0740fc, - 0xe3fe80d3, 0xe32f7e71, 0xe2d3d7e2, 0x362f3f50, 0x5fd0e358, 0x79f62ddf, - 0xe97a045c, 0xc5eceb55, 0x9cce7fed, 0x25bfd2a7, 0xfabaecaf, 0xf2fbf411, - 0xea1b48c9, 0xe2918bbd, 0x28b6467e, 0x9b48f504, 0x19623bc8, 0xd65015ef, - 0x5833d45d, 0xebcc18be, 0x9492bce7, 0xe382728b, 0x7a5d8d59, 0x6795fd28, - 0xed6a3efa, 0x6d4b6f1a, 0x41cf47e1, 0xe747b2f9, 0x723ac036, 0x61b6d599, - 0x135dd6dc, 0x066dfb4a, 0x87e0fa4a, 0x7c3d6f89, 0xd56488bf, 0xeb6c3c63, - 0xd1121b2b, 0x392dd80e, 0xfa823ee6, 0xffaf037b, 0xe48fd3d2, 0x53e7c2ed, - 0x823eaf65, 0xa08a4f78, 0x2b9ff376, 0x36fc8c1e, 0x5d5efd6c, 0xa9bfbc22, - 0x7c52d4e6, 0xc2a240ce, 0x926d8cf7, 0x8cdd778c, 0x865d4ba8, 0x1fb898af, - 0xfbc0b06e, 0xed9ff5d0, 0xf4107703, 0x08e2ed6b, 0x525757ca, 0x671bd7bb, - 0xc10f7fbe, 0x7bc04ee1, 0x8cf3dd35, 0xb8f03edc, 0x5c9f2237, 0x51b40e76, - 0x7ee1cd7e, 0xd973e916, 0xf5c36b19, 0x0ee75ea0, 0x4ff5831f, 0x76087bf2, - 0xc70d1cd6, 0xeabd11fd, 0xed082c0c, 0xad1f0c95, 0x56c9654b, 0x259659bc, - 0x64eb7f3f, 0xd7927946, 0xa53f5237, 0x99e61b66, 0x42bf5e8b, 0x13f61cf1, - 0xfc8feb66, 0x4fcbc751, 0xfd13b04c, 0xc17e368a, 0x2a0ecdcb, 0x2a77643b, - 0x0f945fdd, 0xfbf40c76, 0x5877588c, 0x47d270cb, 0x2ed672c4, 0x9f013f7c, - 0x3abdf02d, 0xfb809dd5, 0x0af594c3, 0x219f99d6, 0x839ba37f, 0xef739bed, - 0xf775a149, 0xa519d706, 0xfc8c679f, 0x46f5bd7e, 0xb66e1ebe, 0xf42778f0, - 0x4fe514bf, 0x64931759, 0xae1d5869, 0x6c98cf73, 0x3e37accb, 0xfee2ddce, - 0x2af813ae, 0x430d6c41, 0xf8ffba42, 0xe9ffc636, 0xfbf23dfe, 0x15675799, - 0xf941ecf7, 0x4fc3a4e9, 0xe619bf2e, 0xe003f82d, 0x83013820, 0xf2a7f50c, - 0xe38b2c3e, 0xb669d233, 0x2e2b7e61, 0x33dd116a, 0xd307f0a1, 0xdda0477b, - 0x995bfab0, 0xffb94bce, 0x7f714a1a, 0x4ddf787f, 0x7af471e2, 0x639e07c0, - 0x7bf07772, 0x5ac31a9f, 0xf403fe5e, 0x9bdc58df, 0x0dbbc6e2, 0xf756fefc, - 0xdc5df174, 0x5778dd27, 0xa27dc92c, 0x7601eb89, 0xd38d304f, 0x7e6cf068, - 0x8f4fbf1a, 0x85c7f6a7, 0xde671d9c, 0x955f707b, 0x7ba467db, 0x1822ab39, - 0xb55367dd, 0xfdc50064, 0xe07dbfea, 0xbda186df, 0x639f84b2, 0xacf0caab, - 0x55ff7dc4, 0x70e34cbf, 0x1724de48, 0x260e2fb6, 0xdd355d3d, 0x4071809e, - 0xba10b4e7, 0xfba7ba57, 0x28323f5e, 0x09ec89e7, 0x0ae78f88, 0xfdf533fa, - 0xca4e7f41, 0x57748c3d, 0x3a73d1f2, 0x8ecc22f3, 0x21de5bf7, 0x6e15770a, - 0xbb7e420e, 0x14e828a3, 0x178f6bc6, 0xb8c30d2d, 0x7e4e1de3, 0x359b273f, - 0x8f3eaed1, 0xfb24e7f9, 0x5657e461, 0xdeedd8a0, 0x1ed3c47c, 0xbdce999f, - 0xa847f901, 0x7f8544ed, 0xbe77aafe, 0x8ddaed87, 0x92e35ee2, 0xb6cda6af, - 0x6bf1faaa, 0xf27edfe7, 0x37bf330c, 0x7644cea9, 0x8ec27dc1, 0xb3bc9972, - 0xad5a0ed1, 0xf607fe73, 0xe9f85aef, 0xa277b470, 0x17fbf067, 0x09be31db, - 0x7a0a4f75, 0xff7c649d, 0x98517ba0, 0xb2f11bc8, 0x0f28d1f3, 0x9ec7a7bf, - 0x07e58850, 0x1f70d886, 0x99e45390, 0x7c44b958, 0xf9c2d272, 0x146364e4, - 0xe33e8fdf, 0x30e9d3da, 0xab8e938f, 0x7a848f6f, 0x79f81b27, 0xcc3cbf8e, - 0x2f9619cf, 0x60d2913b, 0x7baf3eed, 0xd97bf297, 0x0bf85def, 0x93da6f3a, - 0xaa5bddfc, 0xd21987dd, 0xce15fedb, 0xb5c67a33, 0x1287a849, 0x2d9f4a4b, - 0xdbdabd44, 0x2fbe2df9, 0x2394b637, 0xff77ca3e, 0x7fda0a7b, 0xda5ebbed, - 0xaf9e1071, 0xdeba9d19, 0xade97df8, 0x67618fa9, 0xd72f9ec2, 0xae403d03, - 0x34edea9f, 0x717e06f6, 0x63a6f04d, 0xe6864bbb, 0xf6378849, 0x1bb31b8b, - 0x5cdc6d3f, 0x115fa12f, 0x4f4e58dc, 0xe11c33d9, 0xc37928b8, 0xa71e1ef1, - 0xc97e8fd8, 0x188f0de2, 0x72c7f78a, 0x1f3ff5fe, 0x8ac5a048, 0xaed0327d, - 0xe71656a4, 0x27143c97, 0x025faff6, 0x0ddea9ef, 0xcbce57be, 0xac344495, - 0x66f44b1d, 0xee166f5e, 0xf74feceb, 0xfd7e5d32, 0x5fb574a5, 0x0eecffe5, - 0x9d3f9f2f, 0xa9bcc6e7, 0x7bf7df87, 0xe4068a09, 0x71266db3, 0x51f38f8e, - 0xc104d6db, 0xda8f9c67, 0xa8f00eb6, 0x9cf3b6e5, 0x8736ada0, 0x6bdbedf6, - 0x501ed073, 0x6b999fe4, 0x36677ee9, 0xda3876b0, 0xc23d8add, 0xf4e9b51c, - 0x8e9b53de, 0x3c75ebf5, 0xbb8ca73f, 0x7e24e5f0, 0xeb9998df, 0x0f2f85c5, - 0x94c6fba1, 0xcf37af7e, 0x4d46d501, 0x5b479079, 0xef9bd69e, 0xeffdf85b, - 0xcbf1f73b, 0x93c61ec2, 0x40f79d85, 0xbd73de76, 0xf2f05255, 0xfa0e5260, - 0xaaf28ca3, 0x0be07bbb, 0xbd21ae05, 0xf30b3fb9, 0xbbceb863, 0xbbfae23f, - 0xf331c33e, 0x6fd72836, 0xb6fb2348, 0xe9f8e74d, 0x79e71c30, 0x3ebaafbe, - 0x9cf947c2, 0xfdb967fa, 0x5de62e5b, 0x424ce11f, 0xc2a17a7d, 0xffee2f16, - 0xe96c3b26, 0x98e11589, 0x61dfaff7, 0xd5f8c0c8, 0x63fb3527, 0xad3e2f91, - 0x37ee9878, 0x75e3bc1c, 0x6e94a3ca, 0x1c7de07d, 0x8336d2f7, 0xd2acdd0d, - 0x8b5c5ebb, 0x56e948f6, 0x5be716b9, 0xe53f75ba, 0xbed52fc7, 0x71fb8e15, - 0x9144d42f, 0x53f08c1f, 0x1cf7fafe, 0x2ff8fe0f, 0xabc464f6, 0xc91591f7, - 0x7f78b5ee, 0x5a2d90c9, 0x3c7d17bc, 0xedea10e9, 0x18cff50b, 0x1fbc56f5, - 0xa6fdfb56, 0xeff96d06, 0xe4abaf3d, 0xd4e39091, 0xdcc85c74, 0xdda9f507, - 0xb5645feb, 0x3f18edb3, 0x9727bce8, 0xdae8edcb, 0xbb379475, 0x6e6e78fe, - 0xe9da853c, 0xa379ab9e, 0xe231b7f8, 0xe6b65efe, 0xdbc424e8, 0x5a2427bc, - 0x36bde6ef, 0xcfea00e0, 0x9aee3b53, 0x93d9cf42, 0xe8f91f09, 0xd67ee085, - 0x061bc946, 0x8e28cb65, 0x9e6ac2ef, 0xee5bca17, 0x8d69ee77, 0x2af8fedf, - 0x0d05f7ed, 0xbcc2bf7b, 0x79f99176, 0x3f741f8a, 0xfba1e3c7, 0x605e177f, - 0xac2dcfe4, 0x2814cef9, 0xcca851be, 0xda63fdc3, 0x264dc01f, 0xfff0fff0, - 0x4daee346, 0xe1ea3d47, 0x651b5531, 0x731957c4, 0x2349643e, 0x021bc5bf, - 0x8137cfe3, 0xeb4992dd, 0x4ae7cd21, 0x8f3a2f75, 0x5059ef0e, 0xda03de26, - 0xe4eb839c, 0x1b30ba95, 0x9cd69fdf, 0x02d57683, 0x21f9d328, 0x0bce2956, - 0xf1fee87b, 0xcd06d505, 0x1ec5e07d, 0x7255996d, 0xef14b0fb, 0xfa470ed3, - 0x92bb50b7, 0xa57ada2d, 0x91e39f30, 0xfb51ffb8, 0x5b7cc5de, 0x2b7da45f, - 0xefd498df, 0xb1547b15, 0x0e38958f, 0xe460b228, 0x7237bb97, 0x04b77a3d, - 0x0c3b45f3, 0xafb234ed, 0x420e3b3c, 0x2878aab9, 0xdff54fd9, 0xca5bfdf2, - 0x0caad4f9, 0x279e3a7b, 0x88375aab, 0xb25bbfe6, 0x7a863ea7, 0xd859ba60, - 0xe1ee8c57, 0xa44e2aaf, 0x1c23fbf5, 0x2ced0132, 0xf729ef6e, 0xeea227f5, - 0x18e371c2, 0xb53f8fbf, 0xb37a8bd6, 0x3fae29ea, 0x81563b14, 0x4f675f3b, - 0xb36e75c1, 0xcdebe9d9, 0x23a56ff7, 0x09bff9dc, 0x4557bc22, 0xfce8c2f8, - 0x0dd4517f, 0xc59ba7ad, 0xabcca0fa, 0x7dd07255, 0x293d4ae8, 0x9cdbeb99, - 0xa28bfb5c, 0x0b39c51e, 0x6fab1d72, 0x3c147c01, 0x1fa2b3ad, 0xbb6789dd, - 0x13ef1d3d, 0x94175d68, 0xcc9cf089, 0x47367ae0, 0xf6061bdc, 0x3c137dbb, - 0x9a759383, 0x32706578, 0xc163a7b7, 0x5af1c27f, 0x5438f227, 0xfc839658, - 0xe6a9c079, 0x19e53c1e, 0x302be02b, 0xa3f4fe3a, 0xd274f000, 0x7bc7027b, - 0xad12fdeb, 0xa21f3047, 0x83afce5f, 0x2ad00e28, 0x4e8503d6, 0xb4d92fc0, - 0x54bd09ce, 0x21f80ab5, 0x2da1ed15, 0x6afa835b, 0x0be286f8, 0x3ebe2eec, - 0x7c704554, 0x4c393d56, 0x6f82e5d8, 0xbf120c9e, 0x6cedc0c7, 0xec51fd65, - 0x3d3e6570, 0xef40e1d9, 0x7c2ac961, 0xe999d3f9, 0x7dead93d, 0x5e74fe94, - 0xd2986e60, 0x0bc1550a, 0x5c067825, 0x6b7d91d2, 0xde0892ce, 0x2a7ad581, - 0xb259d51f, 0x8da6ee51, 0x11f179dd, 0x7e7857d4, 0xebf47907, 0x39bbbeef, - 0xa951f707, 0x7dc472fe, 0xeb0fc8ca, 0xef183799, 0xd894afd9, 0xa03acd69, - 0x8fdfe32d, 0xb9fabb63, 0xf89efd5e, 0xdcfd9ff7, 0x69d8c159, 0xf85d8590, - 0xebc347ec, 0x4665fbd5, 0xb93c7236, 0x5f4f308e, 0x597677d2, 0x0467ef8d, - 0xcbfcee1f, 0x6e3023ab, 0x687dae31, 0xe9679e2f, 0xd3ef53a7, 0x5ed660ed, - 0xa3b4efb8, 0xee17ad31, 0x2438eb4b, 0xf0033987, 0x038056f5, 0x572ff1e3, - 0x5ed9e998, 0xf0652ac3, 0x8f99da2b, 0x6bba67f6, 0x5f902ccc, 0x73b934ba, - 0x739319ff, 0x3ba5f7d4, 0xa4ec7d68, 0x9fa9a5d3, 0xc77787e8, 0x569dfe3f, - 0x87f913d6, 0xebf715e3, 0x06b75e20, 0x740a4cb5, 0xe04aafde, 0xafbeda6d, - 0xe0e33f68, 0x943a8dc6, 0x3a35c1f7, 0x26b93acd, 0xca43ec59, 0xd7089964, - 0x61417db4, 0x438f4859, 0xe6082db2, 0xccfc6ae7, 0xd7e00ce8, 0xfb11e3f9, - 0x8702fdc7, 0xa7842d93, 0xf25a86dd, 0x365f772b, 0xbb29fdd3, 0x8125958c, - 0x23eccce0, 0xd8ebc405, 0x5f6833f3, 0x5e157fca, 0x7a87b5c7, 0x588e3173, - 0xbb1c78c3, 0x7d71bf1b, 0xd185b1d4, 0x710ef739, 0x1b63a80e, 0xa01ebca3, - 0x77dc49e2, 0x8b7df203, 0x80d63f7a, 0xe32f1d86, 0x28de5efa, 0x72e4fed1, - 0xf7118b7d, 0x221aba5b, 0x65bfcc64, 0xae3dc558, 0x59b0cb7a, 0x9c38392a, - 0x17e7e7ac, 0x07beecc6, 0xc972bdc7, 0xec87e748, 0xef747c07, 0x11c695c0, - 0x3cefbebd, 0x6c156bce, 0x7b3bde0a, 0x5f119938, 0xd0c1f3f8, 0xf29ac16d, - 0x8899d958, 0xd4cd34f2, 0x002da0f2, 0xc4528add, 0x7aa370fa, 0x89fff3cc, - 0xe8a63b1e, 0x8eaca731, 0x74a46487, 0x817163d3, 0xc962d8f4, 0x5ef8871a, - 0x871694dc, 0xd87c5cf4, 0x8f481310, 0xac38076d, 0x007f7720, 0x7b67c3f9, - 0x9bb1e81d, 0x0eac7a54, 0xbf0058f4, 0x3ae52924, 0x5ff3cc7a, 0x51db6f23, - 0xe798058f, 0x1fae14f0, 0xbc363d14, 0xb1e914f1, 0xcd3a75e1, 0x29feda39, - 0x5263d3d7, 0x2c68accc, 0x01216c1b, 0x89f106f8, 0x27c47779, 0xd41c713e, - 0x9629f967, 0xfd9f4bbf, 0xecfa7af8, 0x8abf08bf, 0x3afc5b3e, 0x3ba37f23, - 0xdfe231df, 0xfd18bbc5, 0x26e2cfce, 0x3716cfae, 0xcf0fbe31, 0xec0d8f4f, - 0xff18c7a6, 0x6f2f165d, 0x7d486aef, 0x2fe85ee6, 0x99b06ed3, 0x97667ea1, - 0xeb56cb5e, 0x1e94fcb5, 0x1ba1daf4, 0x0baf6bd3, 0xaafa06bd, 0x7f51ea2f, - 0x6a35b0be, 0xf763977f, 0x5edbf3e8, 0x5b78f943, 0x4701f3a6, 0x9dfebe45, - 0x90b3e7d1, 0x1e11eaaf, 0x4235d390, 0xdc2adb5e, 0x03f8ffd4, 0xdb657e7c, - 0xca0f5a24, 0x57bdb8eb, 0xf07b235e, 0x31a4e180, 0xff3ed15f, 0xe18926e2, - 0xa6e9b2d1, 0xfef1a7ca, 0x8192f630, 0xd4e53889, 0x143f150c, 0xf8a12a8c, - 0x999e8161, 0xc96ddf71, 0xb73fbe28, 0x7b959444, 0xf53b0ba2, 0xcdbedfa0, - 0xf7e9fb86, 0x7bcffc34, 0xdcf7134e, 0xf2417b4d, 0xdd5ffde0, 0x712a7bcf, - 0x97fbed38, 0xcba77cc5, 0xf61f842d, 0xde73e06e, 0xe5e3fb2f, 0x8d4bc090, - 0x478bc5ac, 0xe517880a, 0x8782ad5c, 0x565bb7e2, 0xf8a75c60, 0x32fc8959, - 0x782b79ff, 0x761f76ea, 0x909dff23, 0xdb62f7ee, 0xd25bbf35, 0x144477ed, - 0x7fcdfb3c, 0x323fa2bb, 0x37bc08d8, 0xf482f81b, 0xfc4ffb87, 0xb8c7421e, - 0x3d6a71fe, 0xc3c09afc, 0xe371ca88, 0x2e99add1, 0xd5f98afc, 0x804c1ff7, - 0xb71f67f9, 0x6303fdd2, 0x9ee898c7, 0x3e41adbe, 0x9f0a6fd2, 0x3e70fa19, - 0xecfd116b, 0x4b945c4e, 0x241a74fb, 0x2e13da0b, 0x37bf106f, 0x082df805, - 0xf67fecaa, 0x478124ea, 0x689efd0b, 0x006f5883, 0x4e57e8ef, 0xc01fd652, - 0x88cfca3b, 0xd7074e46, 0x2c874e16, 0xe567e3c6, 0xf30d92d5, 0xf70de5ea, - 0x8a3e711b, 0x50bf85de, 0xfc545d35, 0x27f357a9, 0x7bad547d, 0x34fbe225, - 0x1887e553, 0xfc06993f, 0x0cd891be, 0xfc3df7fe, 0x5f77eddb, 0x2f7bf3ae, - 0xa78e1f72, 0xf44788ed, 0xdc7d12f3, 0xbac2f26e, 0xddf5d610, 0xf06b77a5, - 0x6bb9fe38, 0x249abf9c, 0x3b01c62b, 0xefc354f1, 0xf056cf6d, 0x788afc84, - 0x63279c6f, 0xf8837e79, 0xf9bf1fdd, 0xb5083ee2, 0x9d37171c, 0x906ffde2, - 0xbcc02c6c, 0x7fdfe47b, 0x927b6f90, 0x2d1f435f, 0xe413beff, 0x2efb823b, - 0x77e24ddc, 0x34231a19, 0x7dfec279, 0x35b01db8, 0xfd1cf808, 0x1b06c3e8, - 0x2fe0a7de, 0x3d62b1ef, 0xaadf7b43, 0x420f97ca, 0xb12e3180, 0x28ceccc5, - 0x76e5f470, 0x6edf5aa5, 0xb331620f, 0xbfee7ab2, 0x4f5ba09f, 0x1e528df6, - 0x5ea1e386, 0x54f1806c, 0x7d7f2cf9, 0xd7e5f8af, 0x0fc6579b, 0xce32979c, - 0xd87e7bdf, 0xfe799ac5, 0xd0245f02, 0x26dfe179, 0x9fa9bc63, 0x7bdf57a4, - 0xfe6fdcae, 0x3b3fe84f, 0xfee7a625, 0xf685bc59, 0x4efb2937, 0x0e3cfd94, - 0xf3fb130b, 0xae33fe6f, 0xfcec57e3, 0x8e9641fc, 0xae33707d, 0x3a06b90f, - 0x88e57ac7, 0x573fe281, 0x2e7bf026, 0xbf7b7f6f, 0xedf2f51e, 0xff0114a8, - 0xe44b67b7, 0xaec51d1f, 0x6d1da347, 0x80257da6, 0x1f9811bf, 0x1ca9a8c9, - 0x333ee78f, 0xe19678b7, 0x17de36d3, 0x6dd20efd, 0x7bf74c9c, 0xc6a3db34, - 0xc0fa3ae3, 0x71819659, 0xa9ef5877, 0x1621e67d, 0xd8c6f583, 0x18fdc863, - 0xb1f9f75d, 0xe8c70099, 0x0acdb223, 0x0fefa6f5, 0xf77cc50d, 0xe63af5c0, - 0x0c6be154, 0x73c32cf3, 0xed5ba33e, 0x22ee1133, 0x2e305fb0, 0x71b8d45f, - 0x2e439e19, 0x7b512f5a, 0x2939db97, 0xbdb3e61c, 0x4349b3fa, 0x3d401f50, - 0x9eb5c6ec, 0x48d573d7, 0xcf394c36, 0x24675c6f, 0xefc3517d, 0x91eed86f, - 0xebf79998, 0xdbbf4331, 0x2cfb43d7, 0xd05b638a, 0x7cd5720e, 0x5cdffb46, - 0xdfb52700, 0xccc5cfc6, 0x94567687, 0xa9fb9a97, 0x12f5e2bf, 0x457323c3, - 0x543af8db, 0xc360c474, 0x9f7b75ef, 0x2a74f5a5, 0x8a90978c, 0x02778eeb, - 0x884739c5, 0xffc77b7d, 0xed5df90f, 0xd58fd38c, 0x2feb92fc, 0x9fbf2989, - 0x4f9f57ab, 0x97d3e8eb, 0x2db10bef, 0x3f414631, 0x498a8cef, 0x7d5f11d5, - 0x71b4e746, 0xf013935f, 0x179c547d, 0x8cea3fdb, 0x409f7d51, 0x4f3f2b2f, - 0x8e30d05b, 0x321551ce, 0x9aa39d07, 0x8fdb9a36, 0xc828feef, 0xde33fb83, - 0xe37af835, 0xe23ffdfb, 0xb6dcd3bf, 0xb6dfeb9d, 0x1fda16e4, 0x307f1e7b, - 0xb65c6009, 0x717d265e, 0xce819b7e, 0x7018c90d, 0xe76dfc44, 0xf5fec5f6, - 0x5bf3dfbc, 0x7e361db8, 0x70931dc3, 0x59b05dbd, 0xf5c46739, 0xce3fe2b3, - 0x62f388b7, 0xfc8d1b95, 0x5fefacde, 0xac3d1477, 0xbf911efc, 0xfceb2d9e, - 0xc92f6cfd, 0xffad594f, 0x2ed0ccf9, 0xefe9043f, 0xb9f88afd, 0xa18188fc, - 0xb99d221f, 0x4f8ff944, 0xef871d70, 0x3b251ba3, 0x3a2a3b9e, 0x1d90f26e, - 0xdf7799ed, 0x393d71cf, 0x3afba261, 0x1cf055ce, 0xef9328f6, 0xf781bf2f, - 0xe3351c9f, 0x97e03cce, 0x05ef8479, 0x3be1116c, 0x473f336b, 0x2ab47597, - 0xe7ae3e76, 0x7fdc7813, 0x9cccb541, 0x89f0fd2a, 0x37799f64, 0x1ee8175f, - 0x598e856b, 0xb8f9cac6, 0xe562de9e, 0xd9bad8fa, 0x2fcde740, 0x760cfd08, - 0x5103dd3e, 0xac5d6bbc, 0xe2ff4551, 0xf8b175a6, 0xc42b2853, 0xe265b439, - 0x91b17a9c, 0x47bc538f, 0x8d546cb2, 0xf4a3f4a3, 0xdbc5dc6b, 0x67f135a5, - 0x2317fd4f, 0x2fcf347c, 0xfc27a88c, 0x7e36e9fb, 0x7a8cfd0f, 0xee155aff, - 0xaef51817, 0x8c72974c, 0x2d35333a, 0x0f643ef0, 0xd31fcf8f, 0x747f7e69, - 0x35825fd4, 0x6cba91f9, 0xdfa07790, 0x4edc0d6d, 0x653ecbab, 0xb2a2cb2c, - 0x5cbbe505, 0x27cb85c4, 0x75f57df0, 0xa3974719, 0x92cd4fbc, 0xdb981f88, - 0x29dfc469, 0x8accbb07, 0x5905a779, 0x6802fdbc, 0xf758728f, 0xd04b972c, - 0x1fd4560f, 0x830017ff, 0x8000007b, 0x00008000, 0x00088b1f, 0x00000000, - 0x7cedff00, 0x55537c7b, 0x393ef0b6, 0x526d3479, 0xa0fa5b42, 0xb4db4e50, - 0x9494b14d, 0x27457897, 0x880b5a3c, 0x46107006, 0xf4228206, 0xbd185499, - 0x35fde338, 0x9c414415, 0x0e7c570b, 0x42d2d37a, 0x1429a2c1, 0x20d5b16c, - 0xb47441d2, 0x3bd15ef6, 0x0f8afea3, 0x52d25a04, 0x8ef4f987, 0x6b5adfa3, - 0xa126d39f, 0xdf7ef515, 0x37f5375f, 0xef6758b3, 0xbdeb1fb3, 0xce275ef6, - 0x620a3b5d, 0xd67318e3, 0x319e920a, 0x6abd54d6, 0xc614f273, 0x2c8ba68a, - 0x67e7c242, 0xf01192b4, 0x2c7133e6, 0xd3e3b187, 0x1939db3f, 0x74339dda, - 0x7ff41d26, 0xc637d357, 0xf3ec6064, 0x991cc64a, 0x5ea5b388, 0x698459c0, - 0x8c09e2c2, 0x060e313d, 0xead8ca99, 0x0c0599e6, 0xeccddf9e, 0xf8bfb19b, - 0x7981f436, 0x47a20d5d, 0x2e9c0027, 0xc60dba8e, 0xc680f77d, 0x7e3b280a, - 0xfdda8e83, 0x153da007, 0x4faed8e0, 0xdcbfc004, 0xe86e61a5, 0xc89771b0, - 0xb2fff418, 0xc5f7a05e, 0x90597ee7, 0x3adaf804, 0x2983aac1, 0xad9aef8f, - 0x1efec24d, 0xd9bc61c0, 0xbc6869cf, 0x7f78fbb5, 0xc5e433f8, 0xf186b633, - 0xe2a635bf, 0x632e599b, 0x65a7cce5, 0x69efd0e9, 0x115da7cd, 0xf87bedbc, - 0x1827b15f, 0xc60fad2f, 0x4bb6d9cb, 0x6f403462, 0x750ef3f0, 0xef386dd7, - 0xb4f41bfa, 0xb637d9ee, 0xeb8f5e9c, 0x5c30d06e, 0xef1bece7, 0xba02ef8f, - 0x963351ae, 0x8e90693c, 0x0cc788e5, 0x559d8eb1, 0xb31fa4da, 0x1c75909e, - 0x3b8c6719, 0x63fc0d7b, 0x3df49b12, 0xb8dcee90, 0x628d8c91, 0x740b5dcc, - 0xb67e0049, 0xf00f360a, 0x4765b8a5, 0xf3d616bc, 0x02fdfe3d, 0xf11db6f0, - 0xb6d73c22, 0xbd2fd408, 0xad62c38d, 0x60aff16d, 0x0aafc51f, 0xb0696aa6, - 0xb9ce32bf, 0x7df10271, 0xbfef3373, 0xb5e015b1, 0xac5f8fc3, 0x0ac6bedd, - 0x65dd4a70, 0x72b864ad, 0xb17e651c, 0x739c782d, 0x8e857cb2, 0x2c1a2f97, - 0x10bba46a, 0xaf7e4569, 0xadbcb817, 0xdc799bbf, 0xacc94f20, 0x87406042, - 0x9013e644, 0xbd29c0df, 0x86fce41d, 0xcb55903e, 0xf17edd20, 0x1d5b0475, - 0x6c99c740, 0x3b3e1064, 0x7fa82922, 0xa83529be, 0xecc4a6fd, 0x52b9f6a0, - 0xdf3e105e, 0xff505d72, 0x4199d605, 0xe7d3adf8, 0x685ff506, 0xdb84185b, - 0xeb8d4998, 0xba5cad6f, 0x999073f8, 0x041d2b57, 0x70287a15, 0xd8c54e86, - 0xee0bc13f, 0xa036ec9b, 0x19288ccf, 0x3e397367, 0xd8d1f002, 0x06ddb37e, - 0x20919d74, 0xc7016ce3, 0x05f69593, 0xe538ffbc, 0xfb785bfd, 0x2dfb4a35, - 0xd2a27dbc, 0xafc72b7e, 0xf1eed467, 0x03776adc, 0x8ed1ebfe, 0xb6f8096a, - 0x138aebe4, 0xfde9a023, 0xa77745aa, 0x45583f02, 0x18d36306, 0x0034875b, - 0xed182ed6, 0x351a4a78, 0x7ff4aed8, 0xe357b255, 0xd14bdef3, 0x63226cb9, - 0x51dfc80d, 0xe6321f3f, 0x716779a3, 0x1159b2d2, 0x33ea1f06, 0x0cf4d08b, - 0x631a51e8, 0x0db18d82, 0x906f4831, 0x0477a213, 0x89a55f41, 0x8995ebe0, - 0x94a8df04, 0x63336ad8, 0x821695ed, 0xf4ad2b27, 0x74e554fc, 0xda576f82, - 0x5953be08, 0xd2a3b048, 0xe290504e, 0x9f1872d8, 0xa23eb1ed, 0xd5b87a41, - 0xfcc2cf23, 0x7e40cff8, 0xd4c64286, 0x1722acec, 0xcabf79d0, 0x65f48ad6, - 0x6ce98c6c, 0x5ef3e0d4, 0x815243a1, 0x46a7bade, 0x0f40eb58, 0xf37a0f8c, - 0x4617a04c, 0x11bac1a7, 0xe59c6168, 0xbb43524b, 0xbad69d71, 0x029fda11, - 0xf587ab73, 0xda991ad4, 0x1cc9f602, 0x34f1100f, 0xf7aa8d0e, 0x7fec0552, - 0x1ff5045f, 0x0236c603, 0x196825fa, 0x7de0f7c3, 0x1ffd8116, 0xdfd81163, - 0x684024fc, 0x10e1adaf, 0x37f48224, 0x43cde741, 0xe2e09efb, 0xd555d8eb, - 0xee304921, 0x5c7ca9ae, 0x29f13158, 0x8119cc5f, 0x499fb2f6, 0xb8394c23, - 0x005abd1f, 0x83d5e881, 0x2bb009df, 0x45034f59, 0xdb24f402, 0x01d4c113, - 0xbd4d757a, 0xe09f0829, 0x3fea0c4d, 0x6a0a59b1, 0x8259f3cf, 0xb49f27da, - 0x3b53e106, 0xbff507a6, 0x105b43f6, 0x61575d7e, 0xcfebff50, 0xfef083d9, - 0x618fd81c, 0x94defe78, 0x9ff50428, 0x703ade0b, 0x89aac67c, 0x232df33e, - 0x1bf79e83, 0x1b869d38, 0x78358177, 0xb71f855c, 0x7f1e0f4e, 0xdc782da1, - 0x3d87cb1f, 0x906a27a0, 0x13d07aff, 0x4f41fb84, 0x0de720d4, 0xbf8827a0, - 0xd0827a08, 0xcf827a0b, 0x209e820f, 0x827a04de, 0x13d011f8, 0x4f419bc4, - 0x3d051e10, 0xa357e7c1, 0xef3cbb57, 0x53de7949, 0xed8cbcf2, 0x8d5d3a20, - 0xefcb6f2e, 0xdfbf23bf, 0x079bef81, 0x30bcb0e5, 0xc835f543, 0xf398ccf3, - 0x87582eda, 0x01575d6d, 0x6f7d4dc6, 0x8246ac8a, 0xc9cf0e6e, 0x5aab8c4a, - 0x9456d962, 0x5bdf7b5f, 0xa70fc42a, 0xfb42b69b, 0x78ffe696, 0x4dfddb07, - 0xcdf184a2, 0x459fcdeb, 0x5f3d38e3, 0x2c753247, 0x3459f7be, 0xdf654bc6, - 0x42b7c230, 0xb9c5fa3b, 0xe5f3228d, 0xb57bbaa0, 0x5663ded8, 0xe3168f70, - 0xa3437b33, 0x5a52f916, 0x6fed48df, 0xedc1357a, 0xed41d5f5, 0xb00fec26, - 0x4689ed54, 0x56685e7a, 0xff51f3c6, 0xc3f73332, 0x6f8fea17, 0x5bd61ebe, - 0x562ab8de, 0x3697f584, 0xd77f17bc, 0xe2ffd00f, 0x1c721791, 0x0b797ef0, - 0x1c18678c, 0x2345bcaf, 0x65fd7ce3, 0x1882c6e6, 0x621a1ba0, 0x87acfcb0, - 0xc01b676d, 0xd736942e, 0x577c6195, 0xc343b96a, 0x5ebd3e80, 0x01d710b1, - 0x71062a7f, 0x9189995b, 0x7ef1e87f, 0x8c177d15, 0xc4f79afb, 0x7a87e82d, - 0xe3478f5b, 0xd04dbdbc, 0xabbf803f, 0xb11c7953, 0xfc4b553a, 0x1e3a69eb, - 0x16fb412d, 0x774e71ef, 0xfff68fb5, 0x02f78cba, 0x8b377a24, 0x5afa2e3c, - 0xc6507c45, 0x9a33a173, 0x4619ed8a, 0x97a757dc, 0xaa7f77cf, 0x579b9fc4, - 0x9ff5c6ad, 0x55365c4a, 0xae05fb24, 0xf1def01a, 0xc2b6ebf3, 0x30bd4a52, - 0xf7f210ee, 0xbb6e3ca8, 0x69bf471c, 0x1a3ed43e, 0x30aa7ee8, 0x807c8f36, - 0xaa636fdc, 0x6815fa8a, 0xe80ae61d, 0x8c9069d7, 0x160fcf28, 0xbf911ba6, - 0xe7c423af, 0x0eb5bb85, 0x7c4d2580, 0x47534ebe, 0x675dca34, 0xe31164d3, - 0x7fbc6551, 0x901de791, 0xb9be01ef, 0x9e454f89, 0x338e036a, 0xfcfe3fc8, - 0xbd1354fe, 0xdef3ca77, 0x7f603b92, 0x2b28969d, 0xcb5da5f2, 0xa5fd708a, - 0xbe7160e8, 0xa46ae4d6, 0xfddf3283, 0x2d7a3f32, 0xbfabe22a, 0xbbf72359, - 0xf5058ea3, 0xd57e70d3, 0xe4c7af06, 0x3bfbf339, 0x73d97fa0, 0xbef8c322, - 0x8f11534c, 0x20fcc7fb, 0x9d32dd68, 0xf8be34cb, 0x2d7900f8, 0x1bd0196b, - 0x8b79c903, 0xf11227a2, 0xa763e153, 0x4aebe445, 0x2c1879d4, 0x8eb1acb9, - 0xced41ae4, 0x4d3907ad, 0xff20ea8e, 0xdccffc97, 0xfc0ad54f, 0xfb2559b9, - 0xb5c7154d, 0x3e2fd100, 0x7853fb27, 0x1f00999f, 0x00146c0b, 0x4fa614d7, - 0x917c4155, 0x21e6362c, 0xb6a9753f, 0xff9854a6, 0xc87ec97d, 0x6489f142, - 0x553e43b4, 0x66e0d97e, 0x7efed023, 0xdbce24f4, 0x047904df, 0xd11e5bcc, - 0x9073ef3c, 0x282b7ecf, 0x7fb7ac08, 0x5ce28697, 0x00833b10, 0xe99acd71, - 0x94be5f5c, 0x8844d31c, 0x54abcb17, 0xc832afb4, 0x5f98f4bf, 0x62eef6c9, - 0x28adea63, 0x452765a7, 0x2be60453, 0x9d7fd4de, 0x86837881, 0x57a72af2, - 0xff30fab0, 0x255a326b, 0x9deacfc0, 0x9d379869, 0xe2d3eaad, 0x3e21677b, - 0xcbcf9c7f, 0xa7cb4f50, 0xd4519f73, 0x193da3bc, 0x57e60960, 0xafc8cfe2, - 0x3a99f242, 0x8c75c7fc, 0xf21539fd, 0xb26f8c1a, 0x37c63659, 0x048ce2f9, - 0x7f995fd2, 0x1710276c, 0x13f5a612, 0xdfa809ac, 0x3cd2d45b, 0xab6f77dc, - 0x71f484c6, 0xc62a1db5, 0x22ca7b75, 0xafd82aad, 0xa251c373, 0x815fef63, - 0xf65710ce, 0x33ca3226, 0x67a7197b, 0x6797336f, 0x44f04697, 0x9e20fbe0, - 0xe0845e34, 0x5ea682a9, 0xd9347f77, 0x510ac621, 0xcb2dd7fe, 0x68bc6150, - 0x80337203, 0x57b91447, 0xf5c0a5fc, 0x977546fc, 0x7bde1238, 0xe7fdc343, - 0x48d353df, 0x9968e7ee, 0x46f5f103, 0xc62bf92b, 0x887de8aa, 0x52fe28a7, - 0x67c435fc, 0xc7254f14, 0x147e497a, 0x6d50bc3f, 0xab8e04d2, 0x821bdfbc, - 0x0580f32b, 0xe0ede3e1, 0xf8c0def1, 0xa6fc7923, 0x1e740f8c, 0x6afe7481, - 0x70fc958a, 0x91f042ca, 0xa41577a4, 0xf59e8a77, 0x01cd5c80, 0x3810cab9, - 0x1d76cabf, 0x728073a3, 0x00e741d6, 0xde7cd105, 0xf11f9c02, 0xd2130e48, - 0xedffda04, 0xdb5e9c69, 0xa7d8a864, 0xc4b66913, 0x698d8034, 0xa469318e, - 0xb792261f, 0x408cb2f5, 0x35d0927c, 0xf75d7d84, 0xf06e7e27, 0xda3dc815, - 0x08575f99, 0xfe203992, 0x6ed3fd29, 0x69c34b2d, 0x18161d6c, 0xbd7188af, - 0xc5d9e451, 0x1b95b2bb, 0x303992f4, 0x7fc3b2fe, 0x72c567a0, 0x279e117b, - 0xd8e0fe40, 0x27992f10, 0x8f627bc3, 0x4fd73c16, 0x73577396, 0x73d3ee30, - 0x0519f379, 0xffc9c60f, 0xf5e72694, 0xc8a7fcb2, 0x10ed58f2, 0xabdf683c, - 0xee1355bf, 0x90782e5e, 0x8784bf07, 0x45e4621b, 0x99a2bf62, 0xbf47f41e, - 0x8ef29404, 0x2fa4719d, 0xb9fb08d4, 0x2fffde4d, 0x0263bed5, 0xc684e7ec, - 0xc2f98a9b, 0x2b08f289, 0x418cbf8e, 0x64f60180, 0x7820eb39, 0xd879ca3a, - 0xc7bb8347, 0x81ff3c62, 0xf8c56743, 0x8d537aa7, 0x2e66ed11, 0x3cc264db, - 0xff514805, 0x9f1fe4fd, 0x0b8830cf, 0x5f0aff90, 0xcbecd31b, 0x073f00d2, - 0x749c493c, 0xefa5fbe5, 0x3e468e1f, 0xd0e6ff76, 0xda19db92, 0x3bb23e9d, - 0x1a551525, 0xa8c41c9c, 0x906d32c3, 0xe0bf0abf, 0x1f1052df, 0x90630f61, - 0x42cf622e, 0x177ffbd2, 0xabb1fa19, 0xf3a151f1, 0xac7e642f, 0x21f6e16d, - 0xdd0abf94, 0xa21e676f, 0x5daff81f, 0x23a617c4, 0xffca147b, 0x0407f1ab, - 0xcd363971, 0xe431d38e, 0xdb8ab26b, 0x2035e4ab, 0x3beeb02f, 0x0bada398, - 0x8fa892e0, 0x32e72434, 0x7ccb969f, 0x167980fa, 0xdfff5258, 0x9a44e9f1, - 0xe91a7b63, 0xfd4869ad, 0x32c7d50c, 0xe2aefac9, 0x67a43c6f, 0x3579fac1, - 0xf85664bd, 0x8e7f802f, 0x7fa4d10d, 0x625d7f0a, 0xd5f7e903, 0xad18f3cf, - 0xf059bcab, 0x847f52f8, 0x10b00a5e, 0x884363e0, 0x1afc2a3e, 0xf6291ece, - 0xfb96b4ec, 0xa27df763, 0x8ff2f307, 0x1309df05, 0xceeca7da, 0xd282640c, - 0x8eaae3ff, 0x38c0f7b1, 0xf0e4cf1f, 0x0159c634, 0xad922db8, 0xa49e23b4, - 0x3f7ee373, 0xa167b216, 0xf858fe7f, 0x9e385be7, 0x5f1095a0, 0x04cb3096, - 0xef0d69f8, 0xc57dd8af, 0xecbc7fde, 0x4fd439da, 0xbee06f60, 0x47a25c60, - 0xa782fddf, 0x256a4406, 0x5f5c6a98, 0x0aa7acea, 0x27f9e0d3, 0x43cf4dbf, - 0x05d6d87e, 0x2e7e878f, 0x3ce22275, 0xebf1baef, 0x9caacd3e, 0xfc0679c1, - 0xf44b9cd4, 0xfd53f15c, 0xb25a1965, 0x2833ab53, 0x69922fde, 0x1ec98b6d, - 0x87f829f1, 0x08fa4f7e, 0x5fa0ce55, 0xc8793fe9, 0xefa008e0, 0x4c3bf079, - 0x3f67801b, 0x97e81296, 0x3479ed8e, 0xa451f913, 0xb9e2e775, 0x3feab9e3, - 0x2edfa0a4, 0x2670f3da, 0xb67b8dc5, 0x5ffc6264, 0xa668f354, 0x0728f08d, - 0x4e6a1fe5, 0xd703ee87, 0x101adeed, 0xf26526a7, 0xc47979f8, 0x1f8c7cb1, - 0xf1735de7, 0xcbf41321, 0x4260adf8, 0xeb35f831, 0xddfd0878, 0x77970b0a, - 0xec8233b6, 0x43678c31, 0x2f65d7be, 0x3d7d45a8, 0xb34cf965, 0x74bfe31a, - 0x056bd135, 0x804b6cf3, 0x6088f676, 0xfd8163aa, 0xff6356c7, 0x6d049b55, - 0xb1fa1c62, 0x97987991, 0xd247d2e9, 0x247cee3a, 0xaf9f1daf, 0x9f3f8078, - 0x7534f3a7, 0x694f38e2, 0x37a475ad, 0x278c34f6, 0xd2ebf595, 0xcadef4b5, - 0xcbc5026d, 0x4f193cca, 0xee0757c6, 0xfdce9753, 0x8db29b32, 0x32adcfec, - 0xe07e6e5f, 0x611237bd, 0x1d6349dc, 0x7f6874c6, 0x66b389e7, 0x139f3c1f, - 0xf3073e73, 0xe3ad0c86, 0x77dc62d9, 0xfb8ace8d, 0x2c9b9298, 0xdfff6026, - 0xe11c7ccc, 0x3d5607ca, 0xf2768c5b, 0x73ca08e9, 0x13adf594, 0x83e61524, - 0xbf6fabc7, 0xee76e913, 0x778a0889, 0x256755d7, 0xdfc81fb0, 0xa5ff02f7, - 0x41f6c64c, 0x05f08efe, 0xd825dfc8, 0x44ca81e2, 0x94aa5fc2, 0x5ca5b208, - 0xb899d6be, 0xbc6e193d, 0x4b9790c9, 0x3ca64760, 0x7c41e302, 0xcd9c6f38, - 0xcaf40e92, 0xb35e5f18, 0x0657de45, 0x4ee79fbc, 0x98748d9d, 0x769ee5b2, - 0xd2e31d0c, 0x56f2fe79, 0xa82923e7, 0x381f6bc7, 0xb4317cf3, 0xe7b74aaf, - 0xbb11fbe1, 0x7e3e512e, 0x15e1e5bc, 0x1aa2ef48, 0xbc9fdf1d, 0x644f73ef, - 0xe78b3c26, 0x286a6f75, 0x3aed763f, 0x8016fcf3, 0x47bb6d77, 0x3fef281b, - 0x7113bf76, 0xba7f533d, 0x97470d9e, 0x8f67ae9f, 0xd53e90a6, 0xfce59e80, - 0x3d733d7c, 0xdcf44550, 0x15ff6e9c, 0x8d39dbca, 0xebf5053b, 0x240df65c, - 0x8136eef7, 0x5fd8a1f8, 0xf2a5fde5, 0xde554bfe, 0xce02336d, 0xc6432f15, - 0xd63ef486, 0xc62665f2, 0x979b97b5, 0x47dc088d, 0xfb023c28, 0x35864c86, - 0xda7dbd03, 0x69a7db2b, 0xd856e91d, 0x8f1534df, 0xabdb4367, 0xbdb255d2, - 0xcf0ffc85, 0xc5ff1433, 0x0f78b43a, 0xf82ad651, 0xaa3ef122, 0x6af3a6f9, - 0xd81257ba, 0x7de741a7, 0xe01a7d8c, 0xe75b8777, 0xc713a0d5, 0xe3da0f51, - 0x31543f6b, 0xbdbf805f, 0xf9922bae, 0xc81de602, 0x114f6023, 0x4b7f1fc0, - 0xd87d9052, 0xe7042e9e, 0x36aef013, 0x15f21fa0, 0x2dfc65ef, 0x9f8835d9, - 0xfb3e72d7, 0xc47c408f, 0x389849cf, 0xe71e906d, 0xd173ba5b, 0x70f42b2e, - 0xb926ed1e, 0xf87e6b29, 0x99f44092, 0x7b9d5e7b, 0xdb1cfa75, 0x7c8b9dd3, - 0x9ae9af3d, 0x5f947986, 0xfc8b95db, 0xedc2be71, 0x93a54ffe, 0x11f8bcf2, - 0x05d800d8, 0x3ca260a7, 0xa1ec5f2f, 0x927fdcbc, 0x96cee5e7, 0xfb7764dd, - 0x88b9f95b, 0x9051d54b, 0x1508e780, 0xeed1da67, 0xfcf227f5, 0x21b7c609, - 0xcba466bd, 0x97dd53fe, 0xdfec10b2, 0xe1390189, 0xd439da79, 0xe38e2d73, - 0xc17b432d, 0x1d58a372, 0xf501778c, 0xd8af9e1e, 0xe519ba90, 0xd4679cff, - 0x6fa3b424, 0x49ddfee5, 0x45af68e7, 0x638a4499, 0x7f0069e0, 0x11e1f607, - 0x1e282d99, 0x80b6628a, 0x74ad2e7e, 0xa7bfc52b, 0x74c7ba44, 0xc67ae78d, - 0x2b3d728e, 0x9b4c74df, 0xa35e3018, 0x7894f76c, 0x7f6bde70, 0x345d7d27, - 0xf023b991, 0x14f597bd, 0x2031b0e7, 0x7a2f80ff, 0xf283c139, 0xdca8f7e0, - 0x178bc81a, 0x87fee64d, 0x7ef1d21d, 0xa454d289, 0x6af31f87, 0x4c794fa0, - 0xc00c6647, 0x2b89df23, 0x4e4f98ed, 0x2be01c02, 0xf2cf9702, 0x23991d45, - 0xd0495cf1, 0xa4bcf0ab, 0x77b786bc, 0x54bc78aa, 0xf7dfc69e, 0x7b57dc0f, - 0xde821653, 0x9cbdb6f5, 0x5be02772, 0x9c35be0d, 0x7c4cbe0f, 0xb99eda0e, - 0x46efe608, 0x5cf74d9f, 0x5ed08be5, 0xdc151b75, 0xf78c71c9, 0xb5cd9ee9, - 0x5baae508, 0xbc15e0af, 0x5c64105d, 0xe5c15f79, 0x8c8547f7, 0xb4859237, - 0x0a4ff487, 0x3dca35c1, 0x58ff3c9c, 0xb517fefe, 0x7bc22cf7, 0xcf3af9b7, - 0x57f44ac9, 0xd218692f, 0xf0e07f55, 0x697fa459, 0xb33bf70b, 0x39ee1c0e, - 0xd872f288, 0xb1e6f748, 0xe3e254e6, 0xdbbd96c6, 0x375ca126, 0xada073f2, - 0xff3fef0d, 0xc3a7ea3b, 0x57183163, 0xe69eb759, 0xebca2f9d, 0x1e39eb66, - 0xdfb3b725, 0xb2847c72, 0x3c71dfaf, 0x6b7fb796, 0xa75a17fe, 0xfb81f0ff, - 0x9fa05e50, 0x17a5e29b, 0xa2605e40, 0x73d94392, 0x1bf59e30, 0xfce0563b, - 0xab3afdce, 0x09e7c25b, 0x95be30b3, 0xa4dcfccc, 0x14f6fc78, 0x4754a7cc, - 0x1df9edf7, 0xd7efbb9e, 0x2ba139d3, 0x12a5db86, 0x3dda7ab1, 0xf7bb3f24, - 0xb5f701fc, 0xf6e74f4f, 0x1edcd1c5, 0xa0c9ef15, 0xfe579ef3, 0x940ad9f1, - 0xd7717c83, 0xd7fe7c1e, 0xe90abd5a, 0x8db5a9d4, 0x4cfd01b8, 0xa9e286a7, - 0x3e2f1962, 0x13d7cb1d, 0xf24055d5, 0x653db713, 0x4948c811, 0xe0b7fdec, - 0xdb8be7ba, 0xce7f479f, 0x0ce8eaf6, 0xa03efceb, 0xbe77bc2b, 0x2da7434e, - 0x35467dfe, 0xb0b76bca, 0x38b3c57d, 0xd7ef1d7e, 0xf44edfad, 0x3165d776, - 0x31fa0f9c, 0x16ea9f3c, 0x3f3d0476, 0x1737b75f, 0xfb0bade3, 0xa5dc53e7, - 0x97a293e8, 0x20bab525, 0x293fc7fd, 0xf963f31e, 0x8666e4cf, 0xc2e9fc80, - 0xcffc6791, 0x85f5e806, 0x0b4f8d06, 0xb1d62a34, 0xa7af784d, 0xf24963e8, - 0xbfb8854d, 0xe6755512, 0x278bc03a, 0xbd40ad77, 0x1167af3c, 0x2defd089, - 0x2e0f3f15, 0x885aaa69, 0xf5b87b76, 0x7c799b14, 0x9f913979, 0xd66e5f97, - 0xa9cf027b, 0x9547e143, 0x3d5b7a4c, 0x42baff88, 0x19473e47, 0xb7ad2def, - 0x670ee30c, 0x9fc3f70c, 0x3306ff40, 0xee6661c4, 0x086e56a7, 0x1cdcbfee, - 0xda9dcf43, 0xcbb44cae, 0xcccbf8ca, 0xd4cf6e26, 0x9fe8995d, 0x7923df43, - 0x82f57b47, 0xa4aaf640, 0xf7433849, 0xf8d248c7, 0x44967a41, 0xee623db8, - 0x9c487cd0, 0xc601f326, 0x77ac87fa, 0x9b7a0d25, 0x8d29c61e, 0x7f468aec, - 0x8aec6655, 0xff6f73c6, 0xc8d59151, 0xc6538bec, 0x4f9c1b4f, 0xbd8b8fc9, - 0xa87e9b1a, 0x183b60f9, 0x7fc5adef, 0x32622903, 0x3514deb8, 0xcc7cd147, - 0xe50d35d4, 0xf05768b6, 0x534fb87b, 0x9bfa3e80, 0xc607c777, 0x75c7bfa1, - 0x8677de53, 0x1ff7a6f4, 0x1ca0a69f, 0x26d8a894, 0x20bee73c, 0xc0617bf0, - 0x82f85ee9, 0xf25e5e7c, 0xca244337, 0x65cb85cf, 0x01fec7a4, 0xd928fb3b, - 0x6762bf07, 0x15c70d59, 0x7076cb3b, 0xeecec07c, 0x3762b8e2, 0x42a3fe95, - 0x1d0a4fde, 0x9077a94f, 0xe6ed93c7, 0x6e7abaa2, 0x7f7e4537, 0x4c6b76c7, - 0xfce27f3c, 0x19d32b5a, 0x95d3b412, 0x123577e4, 0x19c5b1fa, 0x76a579ca, - 0xa0e27e90, 0x7499fa3e, 0xbbf509a0, 0x10f940c8, 0x070d15c4, 0x59791cf1, - 0x07ef15bc, 0x9caee943, 0x7cc5c777, 0x7cf906b3, 0x8af1d6ab, 0x7269ef19, - 0x82afc8ba, 0x74bf90b6, 0xb8a3aabe, 0xb7d357aa, 0x965fed07, 0xf61af1d6, - 0x6c76d32b, 0xea4b029e, 0xe3b574d1, 0x943cd091, 0x5c43b257, 0xbb39fd5e, - 0x39527ce9, 0xe6577f2f, 0x5ea70323, 0x7025f28d, 0x7cde3939, 0x57b46de8, - 0xf2748efe, 0x03e45703, 0xa3478fcd, 0xe210f9dd, 0x5c407714, 0xbdaae1fc, - 0x14b50f74, 0xde011fef, 0x7f7829b9, 0xa62edffd, 0x0b6d8838, 0xbcf28e78, - 0xa50f1833, 0x2fb5ca0b, 0x24dc8f48, 0x9ba5dfc7, 0xeace9608, 0x061d2270, - 0x8b8045f0, 0x21ebf801, 0x667f4878, 0x1e6266f7, 0x08d61dfa, 0xc6ca3d01, - 0xbc534efa, 0xd0c3407a, 0xbf046c3f, 0x28e1f849, 0x1d532baa, 0xc718bf00, - 0x9bfa22fd, 0xca0ee8d2, 0x7587fceb, 0x60f0df74, 0xb82997cb, 0x8ba6bf7f, - 0x96d295f2, 0x9e31e397, 0x344b358d, 0x78dff83e, 0xdc3d8fba, 0xb6318f12, - 0xe54cbcf2, 0x94eb94cd, 0x28fed172, 0x5f45cbcf, 0x54bfae26, 0xf6c5c8e8, - 0xd453b458, 0x7111701f, 0x1328fb46, 0x2d60ddb8, 0x5089f922, 0x706745be, - 0x25f60bbb, 0x8f11ee97, 0xb15978f2, 0x605f6427, 0x79f1d7bc, 0x261fb70e, - 0x5e14fce5, 0x31bb462d, 0xa4d99d84, 0x41564dd8, 0x06644d79, 0x3ef2b75f, - 0x30f3cb8d, 0xd2be776a, 0x83969b9d, 0x7bf249ef, 0x7d2cf601, 0x1da13ed0, - 0xf23b2449, 0xf61e26a0, 0x60bcf255, 0x14af08dd, 0x802aaf2f, 0xfaad6cee, - 0x2fca029e, 0x19ee9b99, 0x8575d742, 0x7f39997e, 0xd2f3e44b, 0xbcfc3d92, - 0x9f8682f4, 0xf2bd832f, 0x3b5afda1, 0xf500aaa7, 0x72b8eeef, 0xdcb9e06d, - 0xb35fc6d5, 0x5b5f1833, 0x30905551, 0x6c979e84, 0x8a3ed1d8, 0x1d17e10d, - 0xd2f105d5, 0x7595cf95, 0xeb2bd05f, 0x1519a59c, 0x55a58f48, 0xae00a305, - 0xf4b9f88d, 0xd0befbe0, 0xdfa1f3a2, 0xf9d2fa06, 0x575f8de9, 0x5c3f9d04, - 0xe662bc6d, 0xe1c2f3a1, 0xcb0a1fd6, 0xcc69df04, 0x57e818a3, 0xe819e91d, - 0x2f7cc04d, 0xb4fbfeca, 0x9e78a04a, 0x871aad15, 0xac7301f9, 0x6b7e871a, - 0x0c0178b8, 0xdd1568e5, 0x8209ba49, 0x0eb0ae1e, 0xffa50f41, 0xbcfc191d, - 0xaf5945e1, 0x7d2fcf46, 0x9fb420e6, 0x19456c96, 0x5c28a8c0, 0x8945e623, - 0xda183c23, 0x7203be53, 0x036394ed, 0x5f7cab43, 0xbb522858, 0x586459ab, - 0x8d12caa7, 0x57d80c9e, 0xf54edb21, 0x7798f37b, 0xa9791506, 0x3d7f7ebb, - 0x4d7fcfb4, 0xd195bc9c, 0x37e50f7d, 0x330e9105, 0x5fb055c6, 0x4ef43f39, - 0x7e701859, 0x37f647b7, 0xfc814433, 0x14525f40, 0x5dced39d, 0x503cbe5a, - 0x10853b4e, 0x72fa79ba, 0xf5f1bf29, 0x6dd206e5, 0x15516bc9, 0xbcc80e74, - 0xcc049653, 0xaf0672f3, 0x696af89f, 0xb8979d06, 0xd27bf32e, 0x27dbf17c, - 0xd7588f31, 0x80af7906, 0x407ea7e3, 0x2f906675, 0x0dd09c62, 0xcc1ce9f9, - 0x66cc1df5, 0x61387b43, 0xae7be514, 0x7ac30203, 0xae8b6733, 0x9d9bef06, - 0x8c78ae9a, 0xbf34b673, 0xec3f45af, 0x569efc3a, 0x92abbcc2, 0x2637f5c9, - 0x05d7d215, 0x5bbf40ec, 0x01f59cde, 0x93f2b5da, 0x5cb0d4fc, 0x3fdd1efd, - 0xce14b9e2, 0x48d4da57, 0xcc658df7, 0xd65f7247, 0xf6ff9c10, 0x075d0e27, - 0xa76cb2f4, 0xd3ee7c14, 0x225fcf3c, 0xb72f0ab2, 0xce9f148b, 0x73a04c4d, - 0x38f7c1d8, 0xf7626d7d, 0xdb6e7843, 0x0558269b, 0xd237aa18, 0x26e309bd, - 0xc73f2677, 0x85f57ded, 0x7ce86b29, 0xeb0533c4, 0x73e57ba4, 0xec8fb9fc, - 0xeb018b50, 0xebcadb99, 0x59237a17, 0xbbe211d1, 0x23f20c63, 0x92ded52b, - 0xb6967181, 0xf1eb9def, 0xaf8e59de, 0x57b1f743, 0x253e6fbe, 0xbacae9c7, - 0xf32727e7, 0x21e618f3, 0xf3976a39, 0xda0a9b62, 0x4cd3ee03, 0x77528299, - 0x046befc7, 0x9c3e8f7e, 0x17bd617e, 0xbd623bd6, 0x72fdc217, 0x7bd6245d, - 0x5ca2fe21, 0x5ef58917, 0xbdeb1cf8, 0xeb926f10, 0x0bdeb122, 0x42f7ac71, - 0x8bae5478, 0xa54b853c, 0xbfd2eef8, 0x3edb9e61, 0xfc721f10, 0x3e084c74, - 0xe9ffb83a, 0x1f182118, 0x33ff502d, 0xcdfe9775, 0x1675839d, 0xf0dfd926, - 0x9ce50b3a, 0xb670b3ab, 0xb1f20779, 0x3c24c275, 0x69266747, 0xb74bea04, - 0x56ffe7cc, 0x1da02fdb, 0xe47d1160, 0x64c4e797, 0x78bb408f, 0xba62e4f2, - 0xd38feb87, 0x93bc3e91, 0x7ec3e8ee, 0x9e6f98ae, 0xeb06cc3f, 0x265a66e6, - 0xfc029a6f, 0xe4106998, 0x44fb7238, 0x059f72bb, 0xbadd99fc, 0xdb9a8a6a, - 0x994e130b, 0xc6ad962f, 0xe925d771, 0xaa1e6327, 0x1dfc734b, 0x5fe855c7, - 0x19ad7a30, 0x48d76fe7, 0xeabc601f, 0xf3cf13fe, 0xa501fa95, 0x33a927df, - 0xdef099f5, 0x26fa4b5c, 0x2819ebcc, 0x4dbc8a1f, 0x3e501acb, 0x6128aa6c, - 0x4933d923, 0x67d5fb8d, 0x92cefdf2, 0x4f80fdf8, 0x6063a92b, 0xcce45f7c, - 0xdb77cc38, 0x949fbe65, 0xe64a7ef9, 0xcdd1d63b, 0x3a3af351, 0x87475884, - 0x20ea10f0, 0xdd2fbfcc, 0x7149931e, 0xd20a5f72, 0x984ba95d, 0xedc67a87, - 0xf5d20a4f, 0x27c72c90, 0x99d3fb64, 0xefe24f66, 0x54acf8f1, 0x96e81fae, - 0x7d9473cf, 0xbe0def2a, 0xfb05e7cf, 0x6ffee12d, 0x5f645510, 0x5b38e543, - 0x788efb96, 0xbd4abde3, 0x3739c608, 0x261fdc88, 0x41dffaab, 0x6f1c93bb, - 0x90c23694, 0x78a3b3f9, 0x09bd36bf, 0xdb6f6c4d, 0xddce7437, 0x296190fb, - 0x30314fbf, 0x3da11efc, 0xe04d4271, 0xe51fe979, 0x908fc079, 0x9a2cba5e, - 0x3923f61f, 0x423f01c6, 0x144e66f9, 0x9bf923dd, 0xa4fca2bf, 0x09aa75b7, - 0xe1dfd4e5, 0x715fa031, 0xc4ffe3fd, 0xb7f0bfa3, 0x6cf5417e, 0xa4bf6ffe, - 0x722db73a, 0xcdebe1bd, 0x87589d72, 0xbde7c464, 0x60159f85, 0x1c32adbf, - 0x3cfc23b4, 0x686f814f, 0x681de66c, 0x51509ecf, 0x8dd8a2fe, 0x98597d50, - 0xf78e5239, 0x676831ec, 0xc4ec5f40, 0x597d01b7, 0xc1798316, 0x12917da0, - 0x132ea87e, 0xcd598bed, 0xb4420bed, 0xb733662f, 0x7da3882f, 0x05f68841, - 0x417da39f, 0xe20bed1c, 0x47105f68, 0xed1082fb, 0xebff3e0b, 0xd3a75e52, - 0x3f29810b, 0x5c5035c7, 0x7f8ebebf, 0x8dbeb27f, 0xafaddbdf, 0xac0ea816, - 0x94dfe607, 0x509d4439, 0xe4275c93, 0xa2f741dd, 0x15a2c3ae, 0xd6017859, - 0x6dcf09bd, 0xd0277d35, 0x051ab82f, 0xcf84956b, 0xb63ad297, 0x60fd4eb4, - 0xd3af3e39, 0x2fe85558, 0xa3c72f5a, 0xad692bdf, 0x2735ff23, 0xbfcb4da1, - 0x9e181197, 0x71d12f1f, 0xe11728fd, 0x3fba24e9, 0xae5ffb26, 0xad73a0eb, - 0x0a417ad2, 0x35c08efc, 0x7fc512fd, 0xf2b9fdca, 0x57b94bdd, 0xca0ead2f, - 0x6ebc6c9f, 0x4aff718b, 0x9e406579, 0xc3277cab, 0x74d56fc4, 0xc08afe3f, - 0xd7ab8562, 0x36b49573, 0xaffac66e, 0xb4767bd0, 0x16d75424, 0x44febf72, - 0x95d75ca6, 0x6f30f2c7, 0xf5627c2e, 0x5f30c381, 0xe51d76ff, 0x774f609d, - 0x409efea1, 0x9cba0439, 0xb9d3d368, 0xb23be7db, 0xde1f1046, 0xf6489914, - 0xb7d90c72, 0xf2811a75, 0x3597b031, 0xc2ecdef8, 0xceaec8bb, 0xfc8abb06, - 0x93eee454, 0xca2d7b54, 0x1209bae7, 0x1d7cb9f9, 0x93c697bb, 0x9200c5eb, - 0x146fe5de, 0x57c02a3c, 0x2f7d2b31, 0x86c812b4, 0xc6af50f1, 0x75d608f0, - 0xaebc64ad, 0x75a39143, 0x8eef943b, 0x577d10c6, 0xd95cf4c8, 0xb06fc7fa, - 0x1d2ee36e, 0x56490f3f, 0xe4803af1, 0xe7bebcad, 0xf5e0e66e, 0x8b4d9872, - 0xdabd2f94, 0x511dcf05, 0x79f85263, 0xe380948f, 0xa1a53aaf, 0x84fce33a, - 0x8a0e9905, 0xfd50e64f, 0x43bbe086, 0x1f9afefc, 0xeb83878a, 0xec684e37, - 0x3b573df4, 0x73d925ca, 0x9553c107, 0xbb150445, 0xf63fd4ad, 0x88dcbdb6, - 0x0cbbe7f3, 0x62b7a456, 0x83a8ae07, 0xa950e48c, 0x100b1c83, 0xc0cc0aeb, - 0xda0c5363, 0x44ec8967, 0xb273aab2, 0x1bfffb84, 0x3f200eff, 0xe30f2da1, - 0xfc7974a6, 0x43fd92d3, 0x9a2d9fe4, 0xbc3df1b9, 0xf40eda4f, 0x080dc02c, - 0x6d7b2f18, 0x6dbfc622, 0x1a46a982, 0x78ee8eca, 0x5c97eb08, 0x7184c166, - 0xf6e44159, 0xbf1878fc, 0x8ad52d20, 0xccd5dc76, 0x403f2de3, 0x3debf7ce, - 0x55dfc0a2, 0xce9c63c7, 0xea9596f9, 0x351ccee8, 0xacbe7cf8, 0x5fadbd4f, - 0xabe3faf1, 0x38b563c7, 0xade99bbe, 0xc8f8f275, 0x8cd7f9f7, 0x914cb8a5, - 0x8486fe9b, 0xef9b941a, 0x7cbbff65, 0xcc1a7bf9, 0x1cd33b03, 0xaff38dff, - 0xa1e97d58, 0xd0e7da78, 0xd3a9507e, 0x4a83f50f, 0xabfff37c, 0xcaedff3e, - 0x54ef820a, 0x51d8206e, 0x51f6a6e9, 0x735cfc59, 0xfc0ab8b8, 0x10d65c43, - 0xbf4294f1, 0xe4aae221, 0xae3ca9ac, 0x89473cc2, 0xa388aeab, 0x0155df40, - 0x75bb3efa, 0x608f9de4, 0x6b53b3dc, 0xeb0090c5, 0xc81bd7a8, 0x4d64643e, - 0x529e2a1d, 0xf8a069e8, 0x27e99fab, 0x2cb3fce1, 0x1fbc6ae9, 0x0425989f, - 0x3fa80be5, 0x1fd46fb8, 0xea3fa884, 0x39e7b880, 0x14f6a82d, 0x29b82f1e, - 0xbf13d05e, 0x5d815737, 0x662efc01, 0x3d2bb20a, 0x31857621, 0x1d70affb, - 0x9d795a6b, 0x3a5f5297, 0x93d7c00b, 0x5e33b086, 0x46c6676e, 0x3ce1f77a, - 0x54919d63, 0xc3427caf, 0x16c4eee5, 0x9ab82f5e, 0x8ff7f9d9, 0x689bda57, - 0xb15defa4, 0x01fc9f7d, 0xa8f5dffa, 0xcd9ee281, 0xfda66b49, 0xf8cdec4f, - 0x7f0f4e2c, 0xe7de6fa5, 0x22731f20, 0x905cf7f9, 0xee2859bb, 0x7e924555, - 0x8ed97e40, 0x6bac57df, 0x8ed0f211, 0x77d9d1cf, 0x6a9d3ae1, 0x27167ebe, - 0x3baa27df, 0xbf42f78a, 0x2b64f8ce, 0x1263cfe6, 0xffac308f, 0xe61577ca, - 0x64ecbda0, 0xbf7be9db, 0x5dc73a8d, 0x39c5e7c8, 0x7b9d0215, 0x5897faca, - 0x95b35518, 0x153591f8, 0x2708bef9, 0xe6e473a3, 0x2e8f98c5, 0xf1c10a8a, - 0x8dce8b1e, 0x6c78e55f, 0xd2827b48, 0x1cc9e32e, 0x2f356777, 0xd2e573c6, - 0xf3e9bd7a, 0x91cffaa0, 0x39abb841, 0x6079f4c9, 0x03fe2a7d, 0x822daecf, - 0x93dc059a, 0x078e0837, 0x85e53f70, 0x2e39f917, 0x5abf23eb, 0x7d112595, - 0x7ccebd47, 0x737dff28, 0x902e748d, 0x87915b10, 0x472c09e7, 0x52fd8a9a, - 0x17147d34, 0x96ab7ef6, 0x8be8b3bf, 0xef202dbe, 0x7f95be7f, 0xcfca117f, - 0x7b970b3c, 0x0db0d997, 0x8c4ce6f9, 0x7ad82088, 0xa616e289, 0xdef19bb6, - 0x3a0af214, 0x3f7d08b7, 0xb7efc2dd, 0x656b3753, 0x90ff813a, 0x8e337ae4, - 0xc674d9bb, 0x948befaa, 0x266ccae9, 0x866d3ff8, 0xfcffc64a, 0x0113e638, - 0x7fd86dfd, 0x6b5f9db0, 0xf77bef2b, 0x26f8fbbe, 0xca1f3cb3, 0xf1461ad7, - 0xa0f7e873, 0x06625a9f, 0x2e5033ea, 0x53d38b9e, 0xf7583f9e, 0x6ba0ebcf, - 0x7f3d72f5, 0xf83fbd68, 0x8ae7f43b, 0x725f7b9f, 0x52bf1d50, 0xf9d4aff7, - 0xcd2f3127, 0xe027b4a7, 0xda88baed, 0x3847a1db, 0x2193f303, 0x659376e8, - 0x91647fe6, 0x17d9b8de, 0xfee7c1ea, 0x810de8a8, 0xe486727c, 0x66593737, - 0xfbca7bd1, 0xb1661be5, 0x26e3262f, 0xaccc38e5, 0x14e7ff22, 0xd9021bd9, - 0xa28f5e11, 0xec1a77bc, 0x9ff7ce3c, 0x7e11f760, 0x0bfef608, 0xc19fe7a0, - 0x08fc21de, 0xff3e1dec, 0xc21dec04, 0xf803f02e, 0x03f053fc, 0x61dc9708, - 0xe57a829c, 0x5f62ae6a, 0x3b3dd704, 0xd3bfe302, 0x97968733, 0x9e2a598b, - 0xdd0ea5bf, 0xe9e596ae, 0x6f9c8df4, 0x4f3377bd, 0xdfc92a4d, 0x86178c26, - 0xd7b7eefb, 0x5afbedc8, 0x37bc1cf9, 0xb2e7e389, 0x473cfc34, 0xf7c69ec5, - 0x3af066d7, 0x2b8ec539, 0x1fc82af9, 0x63acaf8d, 0x29d79c9c, 0x55663cfd, - 0x0a48f7d0, 0xfde1639c, 0x5f313e48, 0x0d4c7947, 0x44a74f90, 0x172a19f2, - 0x1d385a9f, 0x772e3acc, 0xa09768c9, 0x9e82727f, 0xe361c6e2, 0x51ef90b0, - 0x394f90ae, 0x32c64b1e, 0xf3e1988f, 0xf7aca363, 0x7e3f3a3f, 0x943150d8, - 0x3ff998fd, 0x3e80ffdd, 0x8affef06, 0x8e876b7d, 0xf7db873f, 0xca2bbd40, - 0xc1f610cf, 0xb81f603a, 0xb164dcfc, 0x1d4cb78d, 0x05483bfe, 0xebe0cdae, - 0x6a83e456, 0xc5ee3094, 0xee0fa57d, 0x91fd6067, 0xcb5bfb21, 0x94225ee8, - 0x13df018f, 0x05fafb29, 0x1ba147ae, 0xa38a3e58, 0xa81994c7, 0xc590fbce, - 0x4769efc4, 0x0762b97d, 0xf645feb4, 0xf1507f13, 0x6ec51a7a, 0xc4173c0f, - 0x82730b95, 0x513339ec, 0xfd23ad9c, 0x7bbc41f2, 0x4f7830d0, 0xb7f7eca9, - 0xcbf63eb2, 0x6fffb5f9, 0x8ff65f3c, 0x73dfa3ee, 0xefcd3ff0, 0x9bc460d1, - 0x6eee0eb1, 0xcc253bf9, 0x9e5ad5af, 0xcf21ab37, 0x7d2f7bf6, 0xae01f782, - 0xaa3c4467, 0x9733e262, 0xd3fc5097, 0x7e6131a6, 0xc7e9f1be, 0x9dbca24f, - 0x7424126d, 0xd826fed9, 0x3ba7e636, 0xf43d1e8d, 0xe7e2682f, 0x45eb6b27, - 0xfcff048f, 0x696efe42, 0xfa1a33f6, 0x234d699e, 0xfe3977af, 0x6bca7af4, - 0xcf207acf, 0xc40b7186, 0xbcf1da07, 0xfe39e4be, 0xfb2512bb, 0x1efc5adc, - 0xa05aa4af, 0x97c9537c, 0xaf75e4cb, 0x6c7909d9, 0x30483dd0, 0x14bccc5e, - 0x06d4955f, 0x086b2f3f, 0xb5ef7fce, 0x94d77c0c, 0xf9c8ebc7, 0x3f62acbd, - 0xdcab8caf, 0xfac1a7c4, 0xe3c6bfeb, 0x76d8be79, 0x0353e539, 0xf8ca17c7, - 0xca2fc019, 0xfacaf6e7, 0x62e8fc95, 0x85e29b12, 0x2e313afd, 0x50efe495, - 0xc8aedf81, 0x1f485bae, 0x8c268a8f, 0x8b34b6b3, 0x7967a46e, 0x7d377eab, - 0xf4e78537, 0x3df3a446, 0xc26ff7e4, 0x273c267b, 0x83b67c84, 0xce83a6e4, - 0x6fad99e5, 0xb697dd0d, 0x4fe84de8, 0x683f479d, 0xfd06efc7, 0x57860587, - 0x7cefcaf8, 0xd78679ac, 0xcddfc199, 0x229afdf8, 0x5f006217, 0x436bef91, - 0xc33e2af8, 0x8d35f3f3, 0xdedf2823, 0xf568b4f8, 0x39785ca1, 0x17be157f, - 0x3ce8db88, 0x7c48f805, 0xdd4cfd9e, 0x07289193, 0x05fdf8fb, 0xfdf101c8, - 0x77ce2eec, 0xc443db6d, 0x2cb57f77, 0xf7fc2d07, 0xf8ea4a49, 0x17e81079, - 0xf1abc9f9, 0x5f7c6aff, 0x7c83db20, 0x3889c671, 0xe5ef778c, 0xe988adf3, - 0x9a07bf2e, 0x20bb993e, 0x7975f515, 0x26c6eee1, 0x07891980, 0xce621999, - 0x51db3a53, 0x5cb9e04b, 0x79d79e9b, 0xca045103, 0x4bfae433, 0x53dd4ce9, - 0x5e47af68, 0xfe31f143, 0xf79c0445, 0x60cf3f00, 0xb23bd09e, 0xd8cbc0fb, - 0x7e8e946f, 0x55bca58f, 0xa2e5d3e7, 0x9bf2e45f, 0x715bedaf, 0xafddc60f, - 0x433ee8ea, 0x45dff1b0, 0xe3fd6d28, 0xc84f7887, 0x416df29a, 0xff209bbf, - 0xfe2941ae, 0x37b602ae, 0xe8067a68, 0x3fa6ed80, 0x165d7bd1, 0x9e92875e, - 0x71848370, 0xcc65c6ec, 0x943e9911, 0xe764679d, 0x8729ef95, 0x3986c38d, - 0x2fe2506f, 0x12331ee6, 0x7df94cf5, 0xad0ec505, 0x3c5bbf95, 0x7529df71, - 0x96afd22c, 0x714c8eff, 0x389fd82b, 0x7922df3a, 0x38aee73b, 0xbf9782a2, - 0x468ab944, 0x0e68fab9, 0xc7db2ff6, 0x3c0683fb, 0xdf871919, 0x4f286b29, - 0x7937d01b, 0xa3df867c, 0x05f3bb40, 0x0ea6c581, 0xab6a2f61, 0x421e8f37, - 0x2e214a6e, 0xca8745c3, 0xb829b38f, 0x768377df, 0xf8f7c264, 0x9726567d, - 0x662cf72f, 0x0d5ffdc1, 0x40d8f92a, 0x947e067e, 0x19e660ea, 0xc972df29, - 0xd5ced2e7, 0x51273a26, 0xed538dfc, 0xf299b33d, 0x43972332, 0x63dfa335, - 0xb68d54e9, 0xef380d6e, 0x4e979ce8, 0x6fc59fdf, 0xdc70faf4, 0xb58205be, - 0x44e69a06, 0x5f2efcf1, 0x0bdb2f65, 0xb8a86fed, 0xf30e7ddf, 0x17fd1137, - 0xff419397, 0x93cfcfc6, 0x7f3c8d0b, 0x9adca8f3, 0xa61df489, 0xdd94eb1b, - 0x2bd52d76, 0x1d291ced, 0x677c0268, 0xefd90e71, 0x73f1df23, 0x5a65bef4, - 0xf33bf3f2, 0xae51cbec, 0x4f1b2e77, 0xd208afed, 0xe33f7863, 0x7da48e2e, - 0xcfc85cec, 0x4c2e771b, 0x5967f6a4, 0xdf1a955f, 0xd9fbe6ab, 0x3a04d8f9, - 0x39d38dff, 0xbef1b372, 0xd8c7be58, 0xc24b6a99, 0x0527d37a, 0x71bbb2fb, - 0x1a0609bc, 0xe24590ef, 0xc6cb12f7, 0xe907b63f, 0x8a9a4634, 0x7e0fdb76, - 0x7ff00def, 0x4dd86c7f, 0xf71732f5, 0xc705b99f, 0xe4057d2f, 0x37f7c60f, - 0xebbe8318, 0x66efbe57, 0xc5b4df6a, 0xb0bf40c6, 0xbcb5d791, 0xeaf6e464, - 0x3373cea0, 0xe4725fbc, 0xebb45cb3, 0xdafb07fe, 0xdaee3193, 0x243af02f, - 0xde2e5777, 0x87a89647, 0xce6faf8e, 0x4f4bf1e6, 0x8c52d44b, 0x63fa84e7, - 0xe252df54, 0xe7435dbd, 0xd9bf7254, 0x866e3cd9, 0xed1f747e, 0xdfc827de, - 0x05a6f8bb, 0x752b5bde, 0xb8fb3dcd, 0x6b34951c, 0x92e47be8, 0x51ff46fa, - 0x59d43fc4, 0xf55d7c51, 0x783ee897, 0xe8074bf6, 0x3fef02de, 0x473a08de, - 0x3b39dfe6, 0xaae63b65, 0x395ec917, 0x77f9ca9b, 0x19e2f55f, 0xd28fbdc2, - 0xf15d34ef, 0x27731d5d, 0x5f4912ab, 0x29e6b193, 0xa5f4bdb4, 0x206e23b6, - 0xbda1e961, 0x2ee7e8d1, 0x2345d474, 0x55dc61dd, 0x5e7c11da, 0x2b883dfc, - 0x7d05b5c7, 0x6ef2e69f, 0x02ebc4b9, 0x845fc8bb, 0xff80bff6, 0x6f7f3f00, - 0xd91dfcb6, 0xf25aecb5, 0x14b1f5ff, 0xa6fac157, 0x13b77e05, 0x0f4bffea, - 0x0dde7e5c, 0xbb073ded, 0x96f5c79f, 0xd515f77d, 0xf557b123, 0xdae6b754, - 0x73f93eff, 0xcd7fbde5, 0x7fa871e6, 0x583ddedf, 0x2fffea97, 0xf347159d, - 0x22997db7, 0xe36839e1, 0xf10f7437, 0xfa7cb69b, 0x8737e6de, 0xd0fc2767, - 0xb7281177, 0x75c0cc9e, 0x92bf8879, 0xac503bfc, 0xfc218655, 0x3c74de3a, - 0x1179d705, 0xba754df8, 0x72f73f12, 0xbee9cb7a, 0x8007f101, 0x8786cebe, - 0xb8ffa12f, 0x4d9cff1a, 0x61bd6f8b, 0x2b43d90a, 0xf58b95aa, 0xe87ffdd1, - 0xfb7c037b, 0xc4e3e04f, 0x86bfc11f, 0x70ff342d, 0xff88bbfc, 0x081d3e00, - 0xa6e5dfe1, 0xeb1dffbb, 0x6c535968, 0x8128f7d0, 0x08fdf374, 0x7c0915ba, - 0xdb66dffc, 0xf4bed19a, 0x0f617c1c, 0xdf2309d6, 0x2eb0966e, 0x330a72ed, - 0x7d30f7e2, 0x697f282b, 0xaed099d3, 0x407db495, 0xeb97e3fa, 0x80cfe029, - 0x06cfce7e, 0x2fc83afe, 0x55d9b6c9, 0xa2e9f46b, 0xf4efe907, 0xa2942c2c, - 0x7a19f9e9, 0x8c72e1ee, 0x2ddfc3f4, 0xdd8e7a73, 0x97c10c26, 0x9e34ecde, - 0xd1467927, 0xff6bcbbe, 0x00c0e3c2, 0x91d3097e, 0x6e28674f, 0x0a4f8e1c, - 0xeff24c1d, 0xadf00d88, 0x685feb96, 0x87f0177f, 0x7e653fee, 0xf7f0ff21, - 0xceb85cd4, 0x20cf8e68, 0x0d80f85c, 0xd5fc0f61, 0xfce3ca3a, 0x83c9f721, - 0xd79079fc, 0xa9ea855d, 0xf4e1cfbc, 0xabd3d143, 0xd2a7ffad, 0x52d92fe7, - 0x7428bc90, 0x6876f9ea, 0xcf1c6e3b, 0x9f67fef5, 0x3504da3f, 0x7f3a0f8b, - 0xf3c78c34, 0x4133a6c7, 0x7eca8fe7, 0xda73e47b, 0xf922fd9e, 0xeff2cdc7, - 0x0bda84ac, 0xd0983be5, 0xd7938ef5, 0x7f7f94eb, 0xd1a0e7a1, 0x7a718063, - 0x79216f5e, 0xd19c3676, 0x7b6a79e2, 0x9efa21fd, 0xf41fd14e, 0xf5809e13, - 0x2c78bcf7, 0xce36ec97, 0x275f0433, 0x33cf978c, 0xc79e875b, 0x682970d5, - 0x57b7529e, 0x57ab754b, 0xda82ef99, 0x778e3b76, 0x7eff83a1, 0xd0ef05e1, - 0xf1a6a9e7, 0x615cf91a, 0x2fe0873b, 0xbcfe01ed, 0x1b4db053, 0xc30c2a3f, - 0x30c30c30, 0x0c30c30c, 0xc30c30c3, 0x30c30c30, 0x0c30c30c, 0xc30c30c3, - 0x30c30c30, 0x0c30c30c, 0xc30c30c3, 0x30c30c30, 0x0c30c30c, 0xc30c30c3, - 0x30c30c30, 0x0c30c30c, 0xc30c30c3, 0x30c30c30, 0xc1b7ff0c, 0x8dca0bff, - 0x8000e737, 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x20000131, - 0x22b0030c, 0xb0131302, 0x14e7ff1b, 0x93c9084d, 0x26ebaf39, 0x6db6db63, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xf6db6db6, 0x10192fc7, - 0x8000dcb1, 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x20000131, - 0x22b0030c, 0xb0131302, 0x14e7ff1b, 0x93c9084d, 0x26ebaf39, 0x6db6db63, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xf6db6db6, 0x10192fc7, - 0x8000dcb1, 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x20000131, - 0x22b0030c, 0xb0131302, 0x14e7ff1b, 0x93c9084d, 0x26ebaf39, 0x6db6db63, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xf6db6db6, 0x10192fc7, - 0x8000dcb1, 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x20000131, - 0x22b0030c, 0xb0131302, 0x14e7ff1b, 0x93c9084d, 0x26ebaf39, 0x6db6db63, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xf6db6db6, 0x10192fc7, - 0x8000dcb1, 0x00008000, 0x00088b1f, 0x00000000, 0xc5edff00, 0x20000131, - 0x22b0030c, 0xb0131302, 0x14e7ff1b, 0x93c9084d, 0x26ebaf39, 0x6db6db63, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, - 0xdb6db6db, 0xb6db6db6, 0x6db6db6d, 0xdb6db6db, 0xf6db6db6, 0x10192fc7, - 0x8000dcb1, 0x00008000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x00000000, + 0x00007ff8, 0x00000000, 0x00003500, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0x00100000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0x00100000, 0x00000000, 0xfffffff3, 0x314fffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x00000000, 0x00007ff8, 0x00000000, 0x00001500, 0x00001000, + 0x00002080, 0x00003100, 0x00004180, 0x00005200, 0x00006280, 0x00007300, + 0x00008380, 0x00009400, 0x0000a480, 0x0000b500, 0x0000c580, 0x0000d600, + 0x0000e680, 0x0000f700, 0x00010780, 0x00011800, 0x00012880, 0x00013900, + 0x00014980, 0x00015a00, 0x00016a80, 0x00017b00, 0x00018b80, 0x00019c00, + 0x0001ac80, 0x0001bd00, 0x0001cd80, 0x0001de00, 0x0001ee80, 0x0001ff00, + 0x00000000, 0x00010001, 0x000f0604, 0xccccccc5, 0xffffffff, 0xffffffff, + 0xcccc0201, 0xcccccccc, 0xcccc0201, 0xcccccccc, 0xcccc0201, 0xcccccccc, + 0xcccc0201, 0xcccccccc, 0xcccc0201, 0xcccccccc, 0xcccc0201, 0xcccccccc, + 0xcccc0201, 0xcccccccc, 0xcccc0201, 0xcccccccc, 0x00000000, 0xffffffff, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, + 0x40000000, 0x40000000, 0x00000000, 0x00007ff8, 0x00000000, 0x00001500, + 0x00100000, 0x00000000, 0x00100000, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, 0x0000ffff, 0x00000000, + 0xfffffff3, 0x320fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, + 0x0000cf3c, 0xcdcdcdcd, 0xfffffff1, 0x30efffff, 0x0c30c30c, 0xc30c30c3, + 0xcf3cf300, 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, 0xfffffff6, 0x305fffff, + 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, + 0xfffff406, 0x1cbfffff, 0x0c30c305, 0xc30c30c3, 0xcf300014, 0xf3cf3cf3, + 0x0004cf3c, 0xcdcdcdcd, 0xfffffff2, 0x304fffff, 0x0c30c30c, 0xc30c30c3, + 0xcf3cf300, 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, 0xfffffffa, 0x302fffff, + 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, + 0xfffffff7, 0x31efffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, + 0x0020cf3c, 0xcdcdcdcd, 0xfffffff5, 0x302fffff, 0x0c30c30c, 0xc30c30c3, + 0xcf3cf300, 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, 0xfffffff3, 0x310fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, - 0xfffffff1, 0x30efffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, + 0xfffffff1, 0x310fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, 0xfffffff6, 0x305fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, 0xfffff406, 0x1cbfffff, 0x0c30c305, 0xc30c30c3, 0xcf300014, 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, 0xfffffff2, 0x304fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, 0xfffffffa, 0x302fffff, 0x0c30c30c, 0xc30c30c3, - 0xcf3cf300, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xfffffff7, 0x31efffff, + 0xcf3cf300, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xfffffff7, 0x30efffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, - 0xfffffff5, 0x302fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, - 0x0040cf3c, 0xcdcdcdcd, 0xfffffff3, 0x310fffff, 0x0c30c30c, 0xc30c30c3, + 0xfffffff5, 0x304fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, + 0x0040cf3c, 0xcdcdcdcd, 0xfffffff3, 0x31efffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, 0xfffffff1, 0x310fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, 0xfffffff6, 0x305fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, @@ -6288,30 +2918,30 @@ static const u32 init_data[] = { 0xcf300014, 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, 0xfffffff2, 0x304fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, 0xfffffffa, 0x302fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, - 0x0010cf3c, 0xcdcdcdcd, 0xfffffff7, 0x30efffff, 0x0c30c30c, 0xc30c30c3, - 0xcf3cf300, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, 0xfffffff5, 0x304fffff, + 0x0010cf3c, 0xcdcdcdcd, 0xffffff97, 0x056fffff, 0x0c30c30c, 0xc30c30c3, + 0xcf3cc000, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, 0xfffffff5, 0x310fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, - 0xfffffff3, 0x31efffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, + 0xfffffff3, 0x320fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, 0xfffffff1, 0x310fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, 0xfffffff6, 0x305fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, 0xfffff406, 0x1cbfffff, 0x0c30c305, 0xc30c30c3, 0xcf300014, 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, 0xfffffff2, 0x304fffff, 0x0c30c30c, 0xc30c30c3, - 0xcf3cf300, 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, 0xfffffffa, 0x302fffff, - 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, - 0xffffff97, 0x056fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cc000, 0xf3cf3cf3, + 0xcf3cf300, 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, 0xffffff8a, 0x042fffff, + 0x0c30c30c, 0xc30c30c3, 0xcf3cc000, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, + 0xffffff97, 0x05cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cc000, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, 0xfffffff5, 0x310fffff, 0x0c30c30c, 0xc30c30c3, - 0xcf3cf300, 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, 0xfffffff3, 0x320fffff, + 0xcf3cf300, 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, 0xfffffff3, 0x316fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, - 0xfffffff1, 0x310fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, + 0xfffffff1, 0x302fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, 0xfffffff6, 0x305fffff, 0x0c30c30c, 0xc30c30c3, - 0xcf3cf300, 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, 0xfffff406, 0x1cbfffff, - 0x0c30c305, 0xc30c30c3, 0xcf300014, 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, + 0xcf3cf300, 0xf3cf3cf3, 0x0002cf3c, 0xcdcdcdcd, 0xfffffff6, 0x30bfffff, + 0x0c30c30c, 0xc30c30c3, 0xcf3cf314, 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, 0xfffffff2, 0x304fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, - 0x0008cf3c, 0xcdcdcdcd, 0xffffff8a, 0x042fffff, 0x0c30c30c, 0xc30c30c3, - 0xcf3cc000, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xffffff97, 0x05cfffff, - 0x0c30c30c, 0xc30c30c3, 0xcf3cc000, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, - 0xfffffff5, 0x310fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, + 0x0008cf3c, 0xcdcdcdcd, 0xfffffffa, 0x302fffff, 0x0c30c30c, 0xc30c30c3, + 0xcf3cf300, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xfffffff7, 0x31cfffff, + 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, + 0xfffffff0, 0x307fffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf300, 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, @@ -6344,25 +2974,13152 @@ static const u32 init_data[] = { 0xcf3cf3cc, 0xf3cf3cf3, 0x0010cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, - 0x0040cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, - 0xcf3cf3cc, 0xf3cf3cf3, 0x0000cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, - 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0001cf3c, 0xcdcdcdcd, - 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, - 0x0002cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, - 0xcf3cf3cc, 0xf3cf3cf3, 0x0004cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, - 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0008cf3c, 0xcdcdcdcd, - 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, - 0x0010cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, 0x0c30c30c, 0xc30c30c3, - 0xcf3cf3cc, 0xf3cf3cf3, 0x0020cf3c, 0xcdcdcdcd, 0xffffffff, 0x30cfffff, - 0x0c30c30c, 0xc30c30c3, 0xcf3cf3cc, 0xf3cf3cf3, 0x0040cf3c, 0xcdcdcdcd, - 0x000a0000, 0x000700a0, 0x00028110, 0x000b8138, 0x000201f0, 0x00010210, - 0x000f0220, 0x00010310, 0x00080000, 0x00080080, 0x00028100, 0x000b8128, - 0x000201e0, 0x00010200, 0x00070210, 0x00020280, 0x000f0000, 0x000800f0, - 0x00028170, 0x000b8198, 0x00020250, 0x00010270, 0x000b8280, 0x00080338, - 0x00100000, 0x00080100, 0x00028180, 0x000b81a8, 0x00020260, 0x00018280, - 0x000e8298, 0x00080380, 0xcccccccc, 0xcccccccc, 0xcccccccc, 0xcccccccc, - 0x00002000, 0xcccccccc, 0xcccccccc, 0xcccccccc, 0xcccccccc, 0x00002000, - 0xcccccccc, 0xcccccccc, 0xcccccccc, 0xcccccccc, 0x00002000 + 0x0040cf3c, 0xcdcdcdcd, 0x00100000, 0x00070100, 0x00028170, 0x000b8198, + 0x00020250, 0x00010270, 0x000f0280, 0x00010370, 0x00080000, 0x00080080, + 0x00028100, 0x000b8128, 0x000201e0, 0x00010200, 0x00070210, 0x00020280, + 0x000f0000, 0x000800f0, 0x00028170, 0x000b8198, 0x00020250, 0x00010270, + 0x000b8280, 0x00080338, 0x00100000, 0x00080100, 0x00028180, 0x000b81a8, + 0x00020260, 0x00018280, 0x000e8298, 0x00080380, 0x000b0000, 0x000100b0, + 0x000280c0, 0x000580e8, 0x00020140, 0x00010160, 0x000e0170, 0x00038250, + 0xcccccccc, 0xcccccccc, 0xcccccccc, 0xcccccccc, 0x00002000, 0xcccccccc, + 0xcccccccc, 0xcccccccc, 0xcccccccc, 0x00002000, 0xcccccccc, 0xcccccccc, + 0xcccccccc, 0xcccccccc, 0x04002000 +}; + +static const u32 tsem_int_table_data_e1[] = { + 0x00088b1f, 0x00000000, 0x51fbff00, 0x03f0c0cf, 0x19d8c58a, 0x1138fc18, + 0x5980a1fc, 0xd8181998, 0x88039880, 0x81b8803d, 0x91a18191, 0x97fd7891, + 0x6f6c1145, 0x72860661, 0xc82d3e20, 0x8229a0c0, 0x6315b710, 0xe40a9860, + 0x1ec54047, 0x513ce901, 0xa07fb8ea, 0xa6348471, 0x8224b998, 0x1e45891d, + 0xc9a14719, 0xe544974f, 0x3fd01347, 0x12b778d0, 0x02beff2a, 0x8a877684, + 0x7f9341ef, 0x82af9500, 0x12af6bfa, 0xa1ab7376, 0xdc1f00f2, 0x03601397, + 0x00000360 +}; + +static const u32 tsem_pram_data_e1[] = { + 0x00088b1f, 0x00000000, 0x7dedff00, 0xd5547c0f, 0xf37df095, 0x4999bcde, + 0x425e4cde, 0x60109212, 0x85444092, 0xa88bfc30, 0x10909db8, 0xc075b569, + 0x1daad07f, 0xff908420, 0xa5ba5522, 0x8126265f, 0x1761a888, 0x03a8ba2d, + 0x358a8b42, 0x168681d0, 0xb88200ec, 0xbac1bbb5, 0x46ebab16, 0x921888a5, + 0x57f15588, 0xe739dfad, 0x379997de, 0x6ed40199, 0xbf7efd7f, 0x737b5d8f, + 0xdeefbbdf, 0x7bbfcf73, 0xdee7b9ce, 0xa614d451, 0x0bec668e, 0xc60df7fc, + 0x18c2c5fe, 0x1f29169b, 0xfbefb2b6, 0x38aec634, 0xe95d9019, 0xe574358c, + 0x337648ed, 0x8e77b196, 0x679e1334, 0x85a4faf4, 0x97fbe45a, 0xfe12f81c, + 0x548e6bbf, 0xe3ca1e32, 0x9401693e, 0xd625abd9, 0xdc53250d, 0x33da0c29, + 0x932c65e6, 0x8ce982b1, 0x446cc9fe, 0x3e0ffc12, 0x198bb2d7, 0xa13fc5cb, + 0xf31a33ab, 0x9632a784, 0xa1e69f77, 0xadcd6e86, 0xfc91fbc1, 0xafeb9633, + 0x18b996ba, 0xcde0027b, 0x8de7834e, 0x763ddbca, 0xf80beefe, 0x3d2df46f, + 0x572c56cd, 0x99bb9f98, 0xa00ac2db, 0x79f980df, 0x5eb9bb41, 0x27e99cc8, + 0x270fe192, 0xc7217e73, 0x54f1c799, 0x659e00c6, 0xb197873a, 0x2137d501, + 0x4d8d8f82, 0x131b532c, 0xd296c7a9, 0xab7923b2, 0xf6cbaf01, 0x7c1b1e48, + 0x57b618ff, 0xef8a0b18, 0x5d7a8b36, 0x44d85540, 0x9d410128, 0xb3f687e3, + 0x895c9598, 0x9b11ff78, 0x32836549, 0x5f00eaa0, 0x0deaa343, 0xdfdb436a, + 0x53a214c8, 0x6039e2bd, 0x9a07f187, 0x8c336799, 0xcfaaccbf, 0x1fb2fac4, + 0xa8013dba, 0x94f7b7e7, 0xee8fa833, 0x179c9892, 0xe002fef9, 0x0ff236f9, + 0xbd6543c0, 0x80ce5032, 0x24fb038e, 0xc70f39b6, 0xdb2efde1, 0x7902c793, + 0xcc9ce189, 0x7ce704ac, 0x90272926, 0x42e62e2e, 0xe554b43a, 0xd50e503f, + 0x0b7bcd6c, 0xe6b57ff6, 0x9e78d2a7, 0x38fa70b5, 0x0d97f43f, 0xaf4d1dbc, + 0x28e37b4a, 0xb558cf96, 0xf91cb3af, 0xcf65dde2, 0xf012c2af, 0xbe00a19c, + 0x157cda17, 0x2ddd5e38, 0x780c858d, 0x971b56ea, 0x255dd183, 0x67c029ef, + 0x25205dd0, 0xb189f90d, 0x04f8a3b7, 0x4e3dbdff, 0xf4c4e5d4, 0x81595f3e, + 0x2f8828fd, 0xefb1772e, 0x4d40887f, 0xa83a51c3, 0x8ff8af74, 0xa2c33182, + 0x8c152feb, 0x2a002299, 0x7e197826, 0x148f58c2, 0x394697cd, 0x11c94f7a, + 0x3c3128a5, 0x04f3dbff, 0x1b7d1274, 0x1fc8b700, 0x78354e75, 0xe943f037, + 0x1bf86b2e, 0x9b751fc0, 0xea0da0a4, 0xf41ce796, 0xaf236fbe, 0x17aa9d87, + 0x16f4e7f9, 0xbdf04ba8, 0x2bfefbad, 0xc976bf91, 0x3b76336c, 0xfa82c92e, + 0x9d8084e5, 0xe03a854d, 0xabc1d2a3, 0xdff69b75, 0x7557df86, 0xfa0398d9, + 0xe4b3dbab, 0x7d42573b, 0xc32b11c9, 0x9b5b7526, 0x2fa81cd5, 0x589d4a0d, + 0xe1c99fef, 0x8396ec0b, 0xbf7da15b, 0x46f33bab, 0x26a9cfa0, 0xc0ab733b, + 0xcceece77, 0xaacf801b, 0xf1ca3b83, 0x92edeabb, 0xba5ed107, 0x6ce1eb6b, + 0x5c93d79c, 0x25b66bbe, 0x3f81b733, 0x4844eff8, 0xde037f0e, 0x3279832f, + 0xeb0977e8, 0x583d4728, 0xea9d75b7, 0x75f04676, 0x71a749aa, 0x49efe506, + 0xabbe0718, 0xc1e4b9ff, 0x985bd629, 0x6fb0e51f, 0x13de638f, 0x59afce1a, + 0xbce2742d, 0x6ed8ab56, 0x6ec17049, 0xc1d5cd54, 0xbc396a4d, 0x49b8deaf, + 0xdb928cad, 0xccc36d9a, 0x18286d70, 0xd7238fee, 0xd7807811, 0x6af5230a, + 0x0fa803d4, 0x273aa095, 0xa5eacf8a, 0x9acbe254, 0x9b73326d, 0x3dd388f8, + 0x27f05ff0, 0xcfb02be0, 0xe8357849, 0x054fa836, 0x82e8cedd, 0xf140ca8e, + 0x7c7c389c, 0xe001d23f, 0x413c40e9, 0xe7c056b9, 0x144ac19a, 0x65e5dfe8, + 0xcfcec4ba, 0xb6561d97, 0xfd58c180, 0x72af0eec, 0x7655d439, 0x7ac0f33b, + 0x96f4aca8, 0xf24b3d41, 0x69f387bf, 0x7c55fc95, 0xf2cceabd, 0x49579e01, + 0xffce1e6c, 0xe61a042d, 0xf81b2ab5, 0x31def013, 0x5909f8ab, 0x63a7b012, + 0x6ba7f2bd, 0x339fa8f2, 0xfa158fd4, 0x3f7f3829, 0x5374f97a, 0x95797a3f, + 0xa85fcfd1, 0xf585c71f, 0x857e51d3, 0x6af29e19, 0x82451fa3, 0x0bcead76, + 0xf57e979b, 0x573c330c, 0xa93f52d7, 0x7a861e65, 0x81f83657, 0x78657b75, + 0x9d4f6daf, 0xf34586bc, 0x025d4cc5, 0x25209db8, 0x32917cd1, 0x87c4c93d, + 0x5334dea9, 0x4fd27a1d, 0x3fd11a5c, 0xc69554e1, 0xd2547357, 0x7639250b, + 0xa399dfaa, 0xf3b85e91, 0xb845ff0a, 0x2cd8e20e, 0x7faaea1b, 0xaf871ea2, + 0x65894e01, 0x41760961, 0xabf7d0d6, 0x330f1cad, 0xf8567c47, 0x60df7c16, + 0x854c2819, 0x929645fa, 0x1e6f104b, 0x24e5eb89, 0xbb623599, 0xfd231b24, + 0xf8af3ab4, 0x9e144089, 0xfd0247da, 0xedbf48a5, 0xf2167f56, 0x47e6d4d7, + 0xb7c00a02, 0x27cc246a, 0x1e92ba07, 0x3d600709, 0x32b23d5a, 0x5369f10b, + 0xc7a3be41, 0xf1fc6157, 0x8815fe34, 0x9f8e2f47, 0x5b7c7431, 0xf8d374fe, + 0xa65551f6, 0x8c2aedf1, 0xd65efc0f, 0x0f8c59bc, 0xb182bbf8, 0x1a66d259, + 0x8aaa36df, 0xb2ad5fc6, 0x49f8d32a, 0x0b7fe383, 0x344befe7, 0xcc2bfcff, + 0x6d551ff3, 0xe7cabf9e, 0x53f3437f, 0x9a24fc62, 0x53d28dff, 0xaaa3fe7c, + 0xbc6dfcf9, 0x5df1c1df, 0x2efff883, 0x609fdfce, 0x0cc15b7c, 0xd747fcf3, + 0xe36fe79a, 0xef3457e3, 0x346be314, 0x276962fe, 0x5ae8ff9f, 0xf9b55f1a, + 0xea47c83d, 0x20c6a488, 0x20b913da, 0x4749c310, 0x071ca979, 0x87e80146, + 0xc13e52d1, 0xe7126771, 0x80938fbb, 0xbe88b4df, 0x28904163, 0x82f567d0, + 0x97b66be7, 0xe967a8a8, 0x4dda267d, 0x97455ffc, 0x5b0deb4c, 0x058e0b6f, + 0xe4bafb78, 0xd62bd600, 0x6994155f, 0x80fb03bd, 0xc6161aec, 0x707a7fe7, + 0x79e8e6c2, 0x3b8b96c5, 0x4c7a27ac, 0x09e1c472, 0x1ae364cc, 0x646ebe01, + 0xfa916982, 0x60a3d009, 0x41b7b2fc, 0xaef9628f, 0x838e03f0, 0xb46a659e, + 0x7b7334dc, 0x195ec024, 0x49baf30f, 0xe1427fc0, 0x5cb13ef8, 0x3ffe220a, + 0x8abb775e, 0x077169fa, 0xf251d318, 0x34e820de, 0xdc16c7b0, 0xdd3e112c, + 0x499b9f88, 0x6ffb1914, 0xd92fd761, 0xddf4cc30, 0x96d82c2d, 0xad17ed05, + 0x8752305d, 0x9e6f7ff9, 0xa7da326d, 0x2c230920, 0x846cc724, 0x798b7c05, + 0x11d675a1, 0x9e79b950, 0xcfd764d5, 0xdfeb9bf7, 0xfbd732ab, 0x05ab41ac, + 0x12a58ded, 0xdefd04db, 0x6f7e68da, 0x4a51b38c, 0xe31574e3, 0xe1c994dd, + 0xc9cb15bd, 0xba2758f8, 0x6ff3a6de, 0x7e1a780d, 0x5a616564, 0x18327b2f, + 0x419031d2, 0xe75f9af6, 0xf7858ef3, 0xebddab36, 0xfb6e7803, 0x8cf84ca1, + 0xb9e7bf85, 0xec05af64, 0x1f0d9eb8, 0x8dbed15a, 0xfc2c4f9d, 0x3b115fdf, + 0x7d455d1f, 0xfb1020bf, 0x2c49f39c, 0x9574353f, 0xd51e3b0c, 0x9bf3aeae, + 0xf1478ec3, 0x39b6cd57, 0xe0d2faa6, 0x25fb537c, 0xde98161b, 0x6a58ee2f, + 0xfda8bf7a, 0x417d5376, 0xf6a687e0, 0x6cd15fdf, 0xe36b7f7a, 0xdff7a63d, + 0xaa675aab, 0x6c3ff7cf, 0xbcf37f6a, 0x96f7a64d, 0x0ebe2ee7, 0xbfe5a8e5, + 0xc6eb8664, 0xfb89da47, 0x48fc1ed1, 0x8f483c53, 0x24594d93, 0xdc9aa707, + 0x4d75f654, 0x1eb9fbb1, 0xe26064ac, 0x071f480c, 0x5ea067da, 0xff3fa466, + 0x08167d2c, 0x922ffd40, 0x6f27f09b, 0x58185950, 0x83696258, 0x47203c7c, + 0xcf39efbd, 0xe8200dfb, 0x97be8653, 0x6f3fe27b, 0xb460bcd8, 0x887fc71e, + 0x811b2dc8, 0x58bf5ceb, 0xd7df63df, 0xfd17cc4a, 0x49bbb19c, 0x3ac45bce, + 0x7d72ab53, 0x7b33bb50, 0xb5dffa26, 0xf1b0b86a, 0x0275e35c, 0xa24f5152, + 0xfc819e75, 0xe2605200, 0x7c930297, 0x0997eef7, 0x09d47aae, 0x31d757a0, + 0xea0b70df, 0x51c1f099, 0x38404fd7, 0xef5459bc, 0xbd75a0ca, 0xb0f669b7, + 0xc7d20ae3, 0xa6c9e547, 0x689e5479, 0xbc7953f2, 0xb7ca8aa9, 0xeca91a9b, + 0xe5415a69, 0x2a014d9b, 0xa76a68df, 0x1d4d8ff2, 0xda6b1e54, 0x4dabe540, + 0x9afb2a41, 0xfa0e54bc, 0x4dfe862b, 0xf0aaf617, 0xa1e5602b, 0x973119fa, + 0x4ddb6856, 0x42c9ee72, 0x7da33f39, 0xf8f6885c, 0x58e06399, 0x57c625e6, + 0xa625bf2c, 0x95ec97a3, 0x7fd020ca, 0x8ef7d0ca, 0x87274e24, 0x6706cd85, + 0xf633dd9a, 0xe3859ea7, 0xcb20aea9, 0x99e482c0, 0x2fd38ce3, 0xaf487dac, + 0x7989d1f3, 0x02e68a07, 0xf23c4e3d, 0xb7ec6297, 0x497fac45, 0x875a6507, + 0x0f09f859, 0x6f0a2bd2, 0xec0daeb4, 0x3cfefa12, 0x883d3bf8, 0xe851eebf, + 0x74921fbf, 0xc84cffea, 0xe3c414c6, 0x3020e4de, 0xe4733b3f, 0xe3ca1709, + 0x7e8b2cb2, 0x8c1e0e3c, 0x4f33aeb2, 0x9fd7a2d7, 0x4cfd732e, 0x93bb3487, + 0xca7763d6, 0xaf90130d, 0x18f8fd74, 0x95167fa4, 0xb2cb3f46, 0xc838fd54, + 0x056da9eb, 0x0efd7c29, 0x7b7075f2, 0xf82bf12a, 0x6ffed485, 0x7ea24f0d, + 0x0b18780c, 0xa8ec77b1, 0xc15de00f, 0x99cbf797, 0x5f8a67f2, 0x8fd6bdb1, + 0xc1b05ed1, 0xfc505f7f, 0xd1baa140, 0x1ca7436f, 0xe7c44db0, 0xc1e34ddb, + 0xe7c36e77, 0x5cff22fe, 0x13b0ab7c, 0x75847151, 0xb358de22, 0xd79ba1cd, + 0xbd535495, 0x375b2ba1, 0x07f833ad, 0x946b3fc8, 0x5a9be414, 0x8afd45c1, + 0x7c012ed6, 0xf53716b5, 0x76f120db, 0xd51ef675, 0x874e8f0f, 0xc112dd38, + 0x88e9aa77, 0xaf79015b, 0x080783b2, 0x5e7555f0, 0xee7a865c, 0x1325a874, + 0xf91ac1ed, 0x38be9dcc, 0x48b4efdf, 0xa0d2de34, 0x8ebcc075, 0xd060fe0a, + 0xfc9cf1af, 0x889da62c, 0xb85af7aa, 0xefdb1d9d, 0xf9efd141, 0xfdbf53f0, + 0xee95f968, 0xefaa78a1, 0x93f540fa, 0x15ffc11c, 0xe064f047, 0x3be2d6af, + 0x7ab4fa88, 0x8f645bdb, 0x0a06b49e, 0xfd0e747f, 0x5a7e7434, 0x8d49c516, + 0xa4c00579, 0x8a167184, 0xeff02ef8, 0x7ac3afcd, 0xad6fdefa, 0xc7c00d6c, + 0x5156833e, 0xca906070, 0xa245f502, 0x435430b6, 0x2cf7dd71, 0x60aa8edc, + 0x81d1173e, 0x1da31475, 0x66599a79, 0xb34e9e23, 0xa2535d97, 0x45aef0e8, + 0xa8b33d25, 0x80c76cdd, 0x2faa6bfd, 0x57ae60d9, 0xa899b9b2, 0x5bd72a4f, + 0xf9a25059, 0xc1ffde99, 0x97fe13a2, 0xb855c6b0, 0x3fa0b6ae, 0xd42ee308, + 0xe0023299, 0xa3e5fbab, 0xeee718c5, 0xc43f70b3, 0x4d2c8f88, 0x7757f0e3, + 0xf0bd526e, 0x94d09dfe, 0xf864ae9b, 0xae15707d, 0x925d8103, 0x287bab67, + 0xfc2cbf7e, 0xeb1af0b1, 0x8d3890f5, 0x9b6ea380, 0xfade3714, 0x4333e099, + 0xd64b7f5f, 0x4dc17e4d, 0x1bf28f58, 0x97116452, 0x748c9995, 0x03dbad3f, + 0x4f7a1496, 0x4ec0fb71, 0xe605a79b, 0x37c5b8f7, 0x76469e4c, 0x6a8b1142, + 0x4fc5b8f7, 0x97a57bcf, 0x656ed12a, 0xed08b84a, 0x88635850, 0x0fc1554f, + 0x08ab9272, 0x064ecde3, 0xdfd028eb, 0x3f41f086, 0xd7559cab, 0x778c22b2, + 0x7f43bc83, 0x8fcab9f7, 0x68775048, 0xd9fd8621, 0x7cf1ccb2, 0x6f5cdb87, + 0x2f803fc0, 0xf8a38d61, 0x2538f253, 0x86618f06, 0x31e9d0fa, 0x4e809f3f, + 0x61fdd918, 0xb11763e2, 0x2d769438, 0x6cf8c32c, 0xe83bd2ba, 0xbfa3e56f, + 0xf8a7e1c7, 0xae5fb402, 0x22f5f6f3, 0xb5fcbe7e, 0xced3c399, 0xce1a8fa1, + 0x16190682, 0xfbe23755, 0x9c161567, 0xa6f435f2, 0x28d5561b, 0xe2df39bd, + 0x40f4859f, 0x49f0893d, 0x64df8e30, 0xd1eae607, 0x8630be72, 0x1c32be3f, + 0xbfa4cce9, 0x9bfe2d6b, 0x70a18ce4, 0xb3fee57c, 0x30bff486, 0x72bf3cde, + 0xf48663ff, 0xffaf1f5f, 0xb33e5fba, 0x54fc003b, 0x2e83ecfd, 0x9ef66660, + 0x01e991d2, 0x6d6ed7ba, 0x9e5ca173, 0xa42e0254, 0x79417beb, 0x3f0e3076, + 0xf90d916c, 0x31526af4, 0xd1f10ff1, 0xfdeea7a9, 0x1f55da0e, 0x14eab56f, + 0x0b66d81f, 0xeb2980db, 0x7cb94b43, 0xc5bdb36c, 0x403fabeb, 0x32e86cfe, + 0x9fea8beb, 0xf189983d, 0xf0a4a066, 0x1fe4c39f, 0x53f96fd4, 0x0d5dda39, + 0x5ef4806c, 0xfe3877ec, 0x07b234d9, 0x4329a816, 0x7cfb1bdf, 0x0d2f020d, + 0x903f7ba1, 0xc87a5849, 0x5f6d8cdf, 0x07fdec25, 0xc53a6765, 0x97632ef9, + 0xf8199f21, 0xef6e4160, 0x93f93cb7, 0x9e00b7a2, 0x75bf2dde, 0xf9a3e349, + 0x33bdeb93, 0xff1e8b9d, 0x3cb13b95, 0x8c5e81f5, 0xf58dabb6, 0xfc25ddd9, + 0xacbcbd94, 0xe85d86b5, 0xb26ed607, 0xd748027a, 0xe9f89e67, 0x79971823, + 0x0b19e6cd, 0x733cd7fd, 0xa02bd5e8, 0x9ac3b35e, 0x869f2d7e, 0xe8466526, + 0xadff00d2, 0x43a11c98, 0xa90e2ff5, 0xf9fc09ee, 0x3d08b4ca, 0x57ec766a, + 0xf8a184d9, 0xafdced28, 0xe87168f6, 0x3956f9d2, 0x4f2d13fa, 0xfea2a27e, + 0x8939ef7a, 0x838bcf0d, 0xc8874dcf, 0x113c462e, 0x069d051d, 0xbed316e9, + 0xfa82e801, 0xec53a0d5, 0xfe84bbfb, 0xe3dcfec7, 0xfe7f9f89, 0xf947dc2b, + 0xf383cda3, 0x1df9faaf, 0xbbc79c2e, 0xebe7234a, 0xbd32db47, 0x35956e30, + 0xc953a990, 0xf63d579f, 0x25b7e203, 0x49907f47, 0xcde60ff1, 0x10ad90b6, + 0x2df9c6c8, 0xcd2378de, 0x89f992af, 0x951eaaef, 0x7d5eb87d, 0x3bd9b0a4, + 0x8e45c8e2, 0xbbf1f5c2, 0x80c1c19b, 0x0b8bbdf9, 0xbc2bee07, 0x52b7072c, + 0x8a76effc, 0xd8c0fcaf, 0xa8cb620f, 0xd39d91fe, 0xd8d903e9, 0x27958357, + 0xacb75f9a, 0x9cfa46ee, 0x8e1de91a, 0xa606e371, 0xa43e0404, 0xf95fa02f, + 0x9ce1ace8, 0x14adcc3e, 0xdf40ef8b, 0x6c73e297, 0x3af56ddf, 0xb1df4c8a, + 0xe322f22f, 0x03e3172f, 0xaf6849dc, 0xf6099bbe, 0x95f99c5f, 0x037ac62b, + 0x7f145576, 0x9737c945, 0x70f72df7, 0x3de436f9, 0xbe366738, 0x5c2bf3ff, + 0xb43bf07e, 0xf0ae0057, 0xffbf7a70, 0x81f48906, 0xc9e3858d, 0x90ab16f5, + 0x837bf36b, 0x056e004f, 0x7e41ddd7, 0x08d3fec1, 0x56c764ff, 0xa2ef87ae, + 0x8e0365f4, 0x9fda1ae7, 0x844bb721, 0x662867fc, 0xb91b67f9, 0x27f627dc, + 0x612e3c02, 0x11f4fe0d, 0x4f905794, 0x7daebfdc, 0x79c3eac6, 0xe0fdbfbf, + 0x3905dfab, 0x90d3bf7d, 0x8cfeb353, 0x9daad395, 0x393c58d3, 0x10d31f7d, + 0x3c29c9e2, 0x5aa72b8f, 0xdff1f10f, 0xf81a7f4b, 0x7f062abb, 0x844c3e86, + 0xf87d58c7, 0x571dd947, 0x57bfc21f, 0xfe50f158, 0xe0cef833, 0xeba7eab7, + 0xcc7c5346, 0xef834be0, 0xe0d2f906, 0x46f121bb, 0xdf62fe13, 0x030630db, + 0x58f6f970, 0xbb508e29, 0xc2ffef97, 0x4c478777, 0x69793c25, 0x871d6319, + 0xd747a447, 0xcef53183, 0x98def698, 0xbda62fba, 0x68dea63f, 0x75db5f6a, + 0x2d79e550, 0x793b5361, 0x9dec23c5, 0x35f8f161, 0xd0d2fdc8, 0xf9006a07, + 0xefa01b42, 0x80b377ad, 0xfbe1e313, 0xf48f8a64, 0xc1578e03, 0xf3dbfd38, + 0xd1279882, 0xa771e0e6, 0x15750c81, 0x7d7eb9ea, 0xe37685c0, 0xf1c78380, + 0xae037dfa, 0xed7b28d4, 0xe932bdad, 0x9b209ee9, 0x84afcf1d, 0xa6e48415, + 0xcf7a2587, 0x64b3fbe3, 0x8c0ad46d, 0x1ec874b7, 0x3454e10c, 0xbcc2ecdf, + 0x05bdfe82, 0xe783cdd7, 0x69945f8b, 0xed1fb0db, 0x872414f4, 0xf28ec957, + 0xc0b24ee7, 0x5e303343, 0x75fb97bf, 0xec636b15, 0xf896b60f, 0xae5b52a7, + 0x3f04fea2, 0x7ef36dec, 0x6a839705, 0x46d55fd1, 0x7be37bf3, 0x7b45b1dc, + 0xf98b7abd, 0xfff85fbd, 0xf3e44541, 0x8493624c, 0x4fe3cdff, 0x92cf0f42, + 0x0f375fc7, 0x447fdff0, 0x7f5fb866, 0xf84caf66, 0xef9db33f, 0xfe9c53cf, + 0x01e7e472, 0x9e067fd2, 0xd47e517a, 0x77a9fac4, 0xff177fd7, 0xf764f908, + 0x06ff45eb, 0xd7eeef65, 0xf58d7f0a, 0xd461fe5f, 0xfb686ceb, 0xb41ce7d2, + 0x9cffd22f, 0x7fbbf893, 0xfd46efdf, 0x6c7beb08, 0x7fee8f14, 0xe42293ee, + 0x6dbbfe97, 0xfadfa855, 0xb47f7247, 0x4527df65, 0xb69eb43d, 0xab7edd12, + 0xda1edca8, 0xa53797fb, 0x56612c74, 0x973c2768, 0xf0d3f24c, 0xcfc5072b, + 0x527df7fa, 0x7fe76d1c, 0x8bd4f9dd, 0x277ecafd, 0xe113b79b, 0x3cfbe54b, + 0xfcbebf0d, 0xb7cc6689, 0x1757ed08, 0xdfd2fbc1, 0x7a845e7c, 0xb7277fb3, + 0x3dacfa7f, 0xdc7ee18f, 0xeef3adab, 0xfb9e02b6, 0x80728850, 0xcf0f6d3e, + 0x8a193944, 0x2e29cf97, 0x38f8a178, 0xc0f8f0ad, 0x243e3e3f, 0xce6fd72f, + 0x79c25da0, 0xebe6fa7f, 0xb39e07a8, 0xf31a5f11, 0x99b3bf7d, 0xcdf393ec, + 0xbffeb35b, 0x3a1707c2, 0x217c296f, 0x1ff4bef3, 0x143bde7c, 0x2b17c137, + 0x7cf94307, 0x7f549ddf, 0x7821e9c6, 0xafdf902f, 0xff9f07f9, 0x4efba697, + 0xfcebbba0, 0x07feaef3, 0xba62779f, 0xa09b78bf, 0x2cf98ebb, 0x9cf9bf0d, + 0x7ab2fbe0, 0x1ff58d6e, 0x9a25cf5b, 0xafc761bf, 0xf23a78b1, 0x5e871e31, + 0x9ad3ac02, 0x863b6e73, 0x9b8cd707, 0x295da3ab, 0x1a4fecc7, 0xdcadafe5, + 0x9f71924f, 0x237ae312, 0x098f5c79, 0xf0b689bf, 0xab456860, 0xd155bb24, + 0x5a7b7156, 0x017b74f1, 0x592e6b2f, 0x215ca1e8, 0x1f98f936, 0x3c33b9eb, + 0xf18eaf14, 0xe6255b1f, 0x559ec095, 0x11d6f92e, 0xe3ac67f4, 0x115b612c, + 0xb9616f95, 0xad21c45a, 0x73f26aba, 0xbae6f1b4, 0xdbae6dc3, 0xc6767f44, + 0xb167b7e1, 0xe5a3c620, 0x98e80f8b, 0x524f26c7, 0x07750498, 0x3fa008eb, + 0x7f32cb61, 0x664c13ff, 0x31e088cd, 0xe432f357, 0x43b0ab0b, 0xc14fd0cb, + 0xd18fae7a, 0x43b0a5fe, 0x0b2f7495, 0x0f755e20, 0x3fa2fc43, 0xe07f0610, + 0x504fed85, 0x53f4e1fc, 0xe1077d6f, 0xccb5f9a9, 0xbecf80ec, 0xc6164eed, + 0x8aa095ef, 0x48754dfe, 0x467c52f6, 0x1f5f1709, 0xd8689fb5, 0x3acf3597, + 0x3bd53e69, 0xe16bc16d, 0xefddeafb, 0x7f7ad114, 0xcbd900f7, 0xcf24a781, + 0xa7bb0256, 0xab0bf708, 0xc6e76e15, 0x2b0df7d2, 0xf77bd3f7, 0x78c3cf24, + 0xe78db480, 0xde775671, 0xe545b56c, 0xcadefcbf, 0x1da186f3, 0x49e05ff1, + 0x1068f289, 0x41fce8be, 0x7dedbec3, 0x75f0e252, 0x0f988359, 0x476dbd5a, + 0xaa35c61f, 0x683cd98f, 0xfb6c362e, 0xa5e6e280, 0xeae33ecf, 0x364e3f21, + 0xfc43b5f9, 0xf1326dc9, 0x8ea87d43, 0x13a85dec, 0xc677d45f, 0xcf9cab8f, + 0x7679a9ef, 0xa000eedf, 0x3f17e6b0, 0xe4dc6173, 0x1756f754, 0xcedb95f9, + 0xe219cf1d, 0x73de763f, 0x14f1ff4e, 0xb27601fe, 0xbff18d55, 0xbb230db7, + 0x8e2be017, 0xf06c4797, 0x1f33cd5b, 0xcdf1863d, 0x3fef9dde, 0xfed6f086, + 0xd0c7c3f5, 0x39cf656e, 0x68e7dc74, 0x28bfea78, 0x377c643e, 0xccf1e55a, + 0x467f27be, 0xf03eb571, 0xbeb7b1db, 0x428eef7d, 0xc76fa5bf, 0x87e899a7, + 0x6b37df2f, 0xf977ce38, 0x2ce1d2ae, 0x251bdc8e, 0x02f06df2, 0xf4b17ae2, + 0x483a183a, 0xa069f5f6, 0x8337fa37, 0x3ace80f1, 0x8b715f1e, 0xf8f6c038, + 0x7e21d3f1, 0xebfae87f, 0xa58a9aae, 0xe3ea83d5, 0x2bfffebc, 0x1789c740, + 0xf7edbf40, 0x3e273f08, 0x1fe34efd, 0xc2abffe8, 0xfbf411cf, 0xf1f8b428, + 0x685df047, 0x3fff4258, 0x3378017c, 0xaa49b3e2, 0xf28ab677, 0x8a69f3b5, + 0xaedd20b7, 0x3df68985, 0x8c28d1f3, 0x0eb49f6b, 0xfdf3c6dc, 0xb1fa3a6d, + 0x40fefbd5, 0xebb7d3f2, 0x993fc528, 0xb1f69388, 0xae3c7fc1, 0x1af57225, + 0xdc7938b6, 0xe31fe040, 0x3d176e0a, 0xce03f117, 0x215c46c7, 0x49a13c51, + 0x777917cd, 0xb751ee3c, 0xa7e175e5, 0x4d25e847, 0x75bd3a47, 0x81b738ce, + 0x70f11d07, 0x2c7c7459, 0x3066dc7e, 0x65e82a8e, 0xe306c5c4, 0xc5cf505f, + 0xfa504878, 0x0fa38b03, 0xb8f136fa, 0x7e359f5a, 0x2f118e7e, 0x3a18e7fb, + 0x244cf31b, 0x9e9c861f, 0x8b2ffe0f, 0x6dd51a9f, 0x4f0317e2, 0xd7c59fbd, + 0x17aa8fe3, 0x709d9fb6, 0x3256a5bf, 0x5ad763ed, 0x1f911bfc, 0xa96f42eb, + 0x3f03bcfc, 0xb7cc6387, 0xf623e457, 0x1c53253e, 0x41e75565, 0xfab1e3d2, + 0x8b8fd8c2, 0x9559f785, 0x5df515db, 0xdde89d7c, 0xd06a0ce9, 0x3d81ef4f, + 0xdbf5cfc4, 0xce38a2df, 0x50bf6de1, 0x55d6a27b, 0x5182275c, 0x7cfef7f0, + 0x078f117f, 0xd8e8fcf2, 0x7189f671, 0x1fc6f61a, 0x07fb61a7, 0x026a71a6, + 0x2fcf2a9d, 0xa778f73d, 0xd8cdef14, 0x2b6ea9df, 0x53c1fcc3, 0x78ecf29d, + 0xd541bffb, 0x825f3a6a, 0x81e525eb, 0x2de7e51f, 0x449cbea6, 0x8fcbd679, + 0x253d7ece, 0x3c204b1d, 0xe66a17f4, 0xb1fa1a7c, 0x3bd20477, 0x32bbf474, + 0x11bb53ae, 0x64f651bf, 0xa58d2bf1, 0xc50bd04e, 0x22a6f86f, 0x9beac6bb, + 0x4c598ecb, 0xc338c3f0, 0x85681d71, 0x03fcf07e, 0x3c2151e6, 0x367cabb2, + 0x16eb23c2, 0xef2711dd, 0x28f9aad5, 0xd7e8dd0f, 0xccf39baa, 0xdc5367d9, + 0xc5df4fd8, 0x2f917e46, 0x51f4f105, 0xb4bc8df7, 0x95ce52fb, 0xe852773f, + 0x0f26decb, 0x1cfcab0b, 0x441bd608, 0xded571fe, 0xa9de7483, 0x6e6253aa, + 0xd652d7c0, 0xa9f37241, 0x43f22a9a, 0xf543f6cc, 0xfb53dfde, 0x5f6f10ea, + 0x3da93ac3, 0x9b09179e, 0x8c4a63e4, 0xbbf9c1dd, 0xd48de45f, 0x3ca62d9e, + 0x874e0342, 0x6f59cb8d, 0xefd26e93, 0x869f08b5, 0x69bab7e7, 0x61ceba9c, + 0x768c71a6, 0xa0af6775, 0xbac1c2fc, 0x56fc4dd2, 0x689ff677, 0x6af9419c, + 0x243c22ca, 0x09847fee, 0xd3ff48ee, 0xfa46f04d, 0xc6e3419f, 0xcd669fe6, + 0xecc5f1e5, 0x301979eb, 0x2654e5ce, 0x70f25b05, 0xd23fdfdf, 0x9cb3ed06, + 0x310ef3eb, 0xf946073a, 0x926c63db, 0xe246f942, 0x5d69d8fc, 0xbd60580b, + 0xbcdb447d, 0x3ca3066e, 0xe8b67184, 0x2e16043c, 0xb461fd42, 0x263ef21b, + 0x3f17214f, 0x0b281501, 0x9e440af8, 0x23d648c2, 0xd1b2ffa1, 0x8e29cfc9, + 0xf82dd2d6, 0x3fc213fd, 0x0e21ce30, 0x7318b739, 0xe77cf15e, 0x4b4bd314, + 0x61ed1f6e, 0xafb6d1ac, 0xa4adcf14, 0x63b25cdf, 0x3398ce84, 0xcc52c7f0, + 0x59ff4f6b, 0xa86ca4c9, 0x1df569ff, 0xcfff5465, 0xa0a34992, 0xfffb79fe, + 0x35f6a329, 0x96ade512, 0xe8653cda, 0xbd657c07, 0xc460037c, 0x43af97ac, + 0xbdf69c7a, 0x3762d371, 0xa80c41e6, 0x87ccbf1c, 0xe74e46ed, 0xded5cb78, + 0x1a7881d8, 0x4669e96d, 0xbef8f27d, 0x8f51524f, 0xf84e99bb, 0x8eab59d1, + 0x68f02679, 0xc8e717fa, 0x2bcd8ba7, 0x4aa7f833, 0x7e91fbf3, 0x7b8c17ab, + 0x7bc61ca0, 0x9db26aa4, 0xf399ede7, 0x4e9e9819, 0xf410acf4, 0x51ed3844, + 0xe44bf979, 0xc7cfca80, 0xa5f58874, 0xa4f1c74c, 0xc5fcad40, 0xae1e5fa5, + 0x8a5f06e5, 0xe751a5f3, 0xbc42ef1a, 0xa9f9ad5d, 0x78d73d8c, 0x43f7cd9d, + 0xe5764f9c, 0x375851d9, 0x9ec629ce, 0x80ca6477, 0xbebd9e25, 0x4c779c59, + 0xbb1cef04, 0x9b8e357f, 0xcef71bff, 0x135f2023, 0xa60f542b, 0x315c4e68, + 0xe7e14335, 0xa1df290b, 0xcb2fd041, 0xdd90e5c2, 0xb5bf68c9, 0xd17926df, + 0x43bfee9f, 0xb736f5a7, 0x6bf25ae2, 0x3af393fb, 0xffa82f31, 0x297cfc47, + 0x1ca34e66, 0x129bdc8d, 0x0e48b876, 0x83918e3e, 0x8976cd8f, 0x2ffedc79, + 0xd43d5ddc, 0x03fa2e9f, 0x72333983, 0xe65fb83e, 0x937f68eb, 0xc918e09b, + 0x1ed1fb02, 0x7ef1d0bb, 0xff9f336a, 0x8b6fbc05, 0xc4f6fbc6, 0xd0567bf4, + 0xf478d9ef, 0xba873d8b, 0x610fe6d0, 0x0f2b77bb, 0x87bab2af, 0xa58d3f9e, + 0xf1d2836b, 0x323a8630, 0x76407ef7, 0x89b74181, 0xca193c2b, 0x7f1d1330, + 0xdc4ef083, 0xc70581fb, 0x93f7e835, 0xbfdf7904, 0x23fb71b5, 0x79ccbc76, + 0x38fe393d, 0xe0c55fed, 0x2e7e945c, 0xf8d317b2, 0x0e3c2dc3, 0xc27db434, + 0x95cff3fe, 0xf3a4598f, 0xc7ff017e, 0xfe064f10, 0xfc89b0df, 0xfff8a1b3, + 0xe0379c1f, 0xc00bca9f, 0xe173f1ff, 0x6ac3f0df, 0xc1a85e84, 0x9fe026fd, + 0x66e7b93f, 0xe5b8c3e6, 0xbffc46b2, 0xf62cab74, 0x66d7bd23, 0xc8f44667, + 0xf71bcbd2, 0x970f815b, 0x9f112a3e, 0xeb738856, 0x2df38bef, 0x957df9b1, + 0x27a402f3, 0x17e79fcf, 0xb3543d24, 0x73fcfccd, 0x9ddff09b, 0xe5e5146c, + 0x4a39f806, 0x2c45c859, 0x4268cffe, 0x9aa4545f, 0x61d2c5da, 0x94c5a364, + 0x3a5d9e0f, 0xe5f90fd8, 0x1ff71659, 0xeff6ee28, 0x1cf18656, 0x353e92af, + 0x2a98f88c, 0x25bf6195, 0xfe8d6e42, 0xdb30af46, 0xf3017965, 0x7682bff9, + 0xb1bff9f3, 0xf6a6391d, 0x37c86d17, 0x7838bfbd, 0xa5fde989, 0xea9b26db, + 0x30af3a13, 0x35d89fb5, 0x149f54d3, 0xfda996fe, 0x4d732394, 0xdfdd69f5, + 0xecbfb535, 0xfbd342d8, 0x4daa7bcb, 0xb93cafef, 0x6abf54cc, 0xed4d9fe0, + 0x5eb98bc3, 0x9594d03c, 0x0c0be78b, 0x5db81cbc, 0xfcf8e8b5, 0x5e8b42f6, + 0xd33cfd14, 0xb2c22eeb, 0x70fe8bd8, 0xb5297922, 0xaf46e767, 0x6acc25cf, + 0xf6a56bd2, 0x97e0bad8, 0x402fc051, 0xb376d9fc, 0x38d11b5e, 0x47cc1da3, + 0x0c74b396, 0x7c834de5, 0xfae7635d, 0x900bca8d, 0x7bb61f2f, 0xe74c3eb7, + 0x4be563ed, 0xa02af946, 0xacfb4032, 0x977943cc, 0x7ccc3b0f, 0xaf40959a, + 0x88b76adc, 0xef0767b8, 0x50e23f4f, 0x3c62724c, 0xfd149b3f, 0x2d725a5c, + 0xea24efe5, 0xf0b59ad7, 0x2fa02d9a, 0x2a7ed9ad, 0xf36de78d, 0xf3f3712c, + 0x4d7fb2ee, 0x10c376bf, 0x3b2ee9fb, 0xbfa65bee, 0x9be610fc, 0x4032dfd5, + 0xcdb66dfe, 0xdd48978c, 0x53e79c33, 0x4279f9b9, 0xb1b9ff9d, 0x5c1afda9, + 0x2e798def, 0x266e6d7e, 0x26e40de6, 0xd97777f0, 0xac7e9eb9, 0x0a9aeaa9, + 0x76820b3c, 0x5ce47158, 0x4370a8f6, 0xa3e9da39, 0x43f43e45, 0x4b79f896, + 0x31f02aff, 0xda28151c, 0xf14a9a07, 0x6f95d3f8, 0xc79814b8, 0x7ffe2d6f, + 0x3858be45, 0x9f98bbb1, 0xcd64f65f, 0x9d0b04a5, 0xd0f437e0, 0x10f7cd28, + 0x605195ea, 0x86f3b99e, 0x16fc33c2, 0x783cecdf, 0xf1669adf, 0x901f5468, + 0x25753c70, 0x7da0c363, 0x82655feb, 0xe5c0f5af, 0x6aa3d794, 0x1b778a7e, + 0x0f2264f3, 0x7fef88c0, 0xf9037e94, 0x0c97ad81, 0xe461df9e, 0x6ebe6a17, + 0xf5a3f7ec, 0x75b71a56, 0x3f7a64a6, 0xfdb8eb4a, 0x1951c030, 0x9fb8a64a, + 0xe43be1b2, 0x1c59a8c7, 0x24c7d69e, 0x3c112b96, 0xe2ed2e3c, 0x3c3c00f8, + 0xe6f6744a, 0x26316c7d, 0x52ebef0d, 0x39d73a54, 0xe0bc4132, 0xa65f8125, + 0x768990df, 0x6645f654, 0x0ff5e578, 0xf3187ede, 0x7b257633, 0xd360cbb0, + 0xf34f410a, 0xe7d2db7c, 0xda1f375e, 0x3322bcb5, 0xf771fd4c, 0xf3469630, + 0x38c18390, 0x05e836f8, 0xf484bf70, 0xd3943793, 0x9d04f33c, 0x519d0097, + 0x7c5967ef, 0x99ee89b3, 0x8cf38616, 0x42f7ff85, 0xebb15f6e, 0xaacf4fdc, + 0x30cb66bc, 0xde482b2c, 0xda13d98e, 0xfd0baf57, 0xfd3c7af3, 0x3f7bbe73, + 0x1f75e76a, 0x5af652c6, 0x58db3d84, 0x83276d18, 0xf4813abe, 0xca72ea30, + 0x7bd422ca, 0x4f31ed89, 0xf9de617b, 0xc3b431ed, 0x3b0cef90, 0xb376cfec, + 0x5fa512fd, 0xfb73b13f, 0xd00bca85, 0x7e919faf, 0xae386efd, 0xc6a192fd, + 0x1c536fd7, 0xba0dff1c, 0x2f8f28ca, 0xa14bbec1, 0xef3b8a43, 0xf9cfeb44, + 0x64fc8bfc, 0xbd0d4f83, 0x560cfdce, 0xd03ed2a9, 0x7bc10d99, 0x52df710a, + 0xdbbca7cb, 0x588cfd44, 0xc40eeff1, 0x91b781af, 0x013e330e, 0xe7076e8f, + 0xe0872a13, 0x68f016b1, 0xac71e131, 0xe0761ce3, 0x55ebd657, 0x7d3773e6, + 0xdfa0df02, 0xf4ef1c55, 0x63166ff5, 0xc6fea2bc, 0x7fbf498f, 0x99e671e5, + 0xefc30fd7, 0x07247186, 0xff5cb3ee, 0xed1f1157, 0xcb5eb8a1, 0x30528bae, + 0x7337588e, 0xb9d86f50, 0xfa4f983d, 0x9b6ef4ef, 0x9d3ce117, 0xa74be3c6, + 0x18765f77, 0x37ef1be3, 0xa257c91d, 0x3fd395ec, 0x856c5a3f, 0x3cef4efe, + 0xfe90ac5a, 0x8cbe120e, 0xfc5f75f7, 0x45a7d8be, 0xf20c09ce, 0x3faf9d9b, + 0x6e3c1deb, 0x6bcc13f2, 0xf3d8c89b, 0x364e3cc9, 0x3f72d33c, 0x02916f3e, + 0xb6838c01, 0x18a5dd48, 0x9b7c0c77, 0xac99b9d1, 0x6cc92beb, 0xe3602acd, + 0xdb3be0f2, 0xac611df3, 0x52777527, 0xac769dfe, 0xaba58c3b, 0xdb8bc067, + 0x7d49fa5e, 0xcd0e963f, 0x9ef110bf, 0x26f9e036, 0x3f5ed31e, 0x44e298a7, + 0xbbd7294a, 0x82920b03, 0xa6514f78, 0xd7147bc5, 0x1647339b, 0x93fbe2a5, + 0x71ff7cc9, 0x1d2bd66d, 0x2e3e3079, 0x7a7f1403, 0xef7e4ad1, 0xecde91b2, + 0xb2fdf0c5, 0xb7c4e949, 0x7d9833ec, 0xfb9639d4, 0x145943d2, 0xf00cf8ff, + 0xdbfb8c52, 0x4d1eec8c, 0xad0af7e1, 0x0eaf30b2, 0xe63536a5, 0xbf611dde, + 0xb7fa170f, 0x58096ddf, 0x78ea2f01, 0x110cbb73, 0xfc810a77, 0xf183198d, + 0x5d953b57, 0x18c67a4d, 0x9aafd7a0, 0xdbdca8b2, 0xcfe7a6e4, 0x32a38d35, + 0x32a1e4dc, 0x8a3dd2dd, 0x71a55d16, 0x57e82ddd, 0xe8b0a6df, 0xcb623b7b, + 0x3df89b7b, 0xc3fd463e, 0x00a02cf1, 0x7a143e1d, 0x29a5f9a4, 0x4d0f5fc4, + 0x0e27a800, 0x15e1fefd, 0x86505eff, 0x3c3f525b, 0xfa065052, 0xe78921f0, + 0x26bd8033, 0xc5e7bbc5, 0x76b21f28, 0xd89e62a4, 0x502c1c2f, 0x91798596, + 0x0729df03, 0xfbdc7196, 0x1765651f, 0xff71fcc3, 0xf6c60aff, 0xc56d5e39, + 0x07d9d873, 0x6f91945e, 0x9f7e2ed4, 0xd7c934cf, 0xec11798c, 0x9df7c646, + 0xe6335f15, 0xc4dff673, 0x6fdfb8dc, 0xc1cfb38c, 0x0e3d83ed, 0x1269f74e, + 0xaf9b37a7, 0x8182bc8a, 0x2375e8a2, 0x83d4fdb6, 0x007ad29f, 0x611fede3, + 0xe2806f1a, 0xcbbe8987, 0xdd29f03e, 0xdfa173ff, 0x50a2bff5, 0x0cb41f3c, + 0x7e6917bf, 0x1235a6e6, 0xc78d1f6f, 0x9dbe357e, 0x075892f6, 0x6e9cacda, + 0x73f1e70f, 0x5e841bc3, 0xffd71851, 0xf99e4b3f, 0xf30dca02, 0x603ed1a7, + 0x1423888b, 0x17501b1f, 0x70bdf938, 0x78cf5025, 0x402d27c3, 0x99e8217d, + 0x4edf312d, 0x27d67e7c, 0xd7ba84cd, 0xfb197be1, 0x91b45ac9, 0xacf8033d, + 0x23736ddb, 0x6af819db, 0x31daaa39, 0xef633e1f, 0xd86fb45b, 0x68a8f522, + 0xcf787e12, 0x6caf14a7, 0xf36636b1, 0x186d47fa, 0xb389fccf, 0xb3ac61f1, + 0xcf65a7c0, 0x170c3f03, 0x09f1f0e7, 0x4390b1ea, 0xb71f03d4, 0x421f817a, + 0xef875e56, 0xd6423f89, 0x8e7805c6, 0xd0adeb1f, 0x3bd5285f, 0xad7502c2, + 0x23d6c3f9, 0x68dd6157, 0xefb521ff, 0x6edce873, 0x4879fcd4, 0x0ebac1ff, + 0x5d546775, 0xe76675e1, 0xbabf31a5, 0xfe529f83, 0xce5efd70, 0x9c37888f, + 0x879bde27, 0xfd19d8eb, 0x4dd9ab98, 0xae42e6f1, 0x3e26c3af, 0x6ea7ce33, + 0x5259f8b1, 0xccfd9e94, 0xa634ff58, 0x7bc79f45, 0x4465db1c, 0xd7e227f5, + 0x4def78b9, 0x037dba01, 0xd6f11a54, 0x72a1e67c, 0x0739b6cc, 0xb2f9a072, + 0x616f415b, 0xfa914a4a, 0x1983d47d, 0xcac37e31, 0xcd3fce64, 0x255725c9, + 0xe25eb943, 0x14e0347a, 0x90a3d272, 0x742bd9bd, 0x961dfbd5, 0xb23bee00, + 0x5e7a5615, 0x5b7fce2b, 0x5fbceeef, 0x67e37dc6, 0x5c6fb4ac, 0xb12be793, + 0x4f66bd42, 0x4599a79e, 0x526b9ff2, 0x6b27333b, 0x58987391, 0xf645a49f, + 0xd6bbeaef, 0x83fcc28d, 0x46bff6f7, 0x292d7ef8, 0x0babe08f, 0x4efd551d, + 0xbd54cfda, 0xc73dfed0, 0xeb47bae0, 0x93c39b5d, 0x067de782, 0x11efc77e, + 0xe671d2db, 0xefef289b, 0xee98b4af, 0x03ca33bf, 0xe0bcffa0, 0x04df3f18, + 0xdcf0190b, 0xb99f9041, 0x7afbcfd0, 0xdbe10ba7, 0x825df5e2, 0xd25978a6, + 0xe00e5988, 0x5ef9ada3, 0xb18932dd, 0x6b8cd6db, 0xbf5183b3, 0x462fd555, + 0x692dbbbe, 0x75f21b62, 0x7ca6438d, 0x0f10b057, 0xfc88c779, 0xace7a804, + 0xfb859da9, 0x2ed95f7e, 0x1fdb30a8, 0xbef9eb0d, 0xa505d806, 0x48f53fc8, + 0xec5ba80f, 0xf7fe74dd, 0xfc2624b6, 0xc579f322, 0xc8deba41, 0x3be7bce3, + 0x367558b7, 0x1a27ce89, 0xdc92d7f5, 0x94aa47a4, 0x54f3ed00, 0xb9d1759d, + 0x8e3fafc6, 0x723e74dd, 0xc11a38e8, 0x1b538c61, 0x57f48719, 0xc8076bed, + 0x89703e1f, 0x297adf61, 0x877cb59e, 0x78713bc8, 0x943f6387, 0x01f4455f, + 0x57780b3d, 0x01eb06f2, 0xc1cef405, 0xb333bd41, 0xe9172cad, 0xa687a51b, + 0x5792f49b, 0x4c1d3a01, 0xb7d2f432, 0x8a4fb7e2, 0xd46f9f69, 0xb1f6a7af, + 0x11c4fcf0, 0xbda1dba9, 0xb06db9f2, 0x39d1f08e, 0xd2fee8fb, 0x47bff18c, + 0x97fc19fd, 0x28715493, 0x60e5fa00, 0xd704afaa, 0x991b819f, 0x71e1e51b, + 0x89e1c065, 0x124e43a2, 0xceaa175f, 0x7fc2625e, 0x2645ef04, 0xe4dbbffa, + 0x2f07ed36, 0x9d077ed9, 0xe831c98f, 0xbcfc02c5, 0xd302c6d7, 0x87fff03e, + 0xe1c2abe3, 0xd947004d, 0x718e19df, 0x7022f1a6, 0xf7c1378c, 0x5390e155, + 0x879d986f, 0x85b35bf6, 0xb4cc59ee, 0x68f9ec04, 0x2169dd37, 0x4b4309bb, + 0x8605bf98, 0x1241e935, 0xdee76809, 0xf9805b6b, 0x1d856e45, 0x9e50d251, + 0xb466eebc, 0x90a07fe7, 0xedcf017f, 0x0aa8c9d6, 0x1f78bc3b, 0xedc15b14, + 0xbf857730, 0xe6fa1f8e, 0x842383fb, 0x59d02d5e, 0x7a13de09, 0xab82f27f, + 0xf75e0192, 0xb01b3bbc, 0xfd2d26dd, 0x926636a9, 0xda4bb257, 0x3017dba4, + 0x4d3e0f58, 0xcc76495a, 0xc76e24f0, 0xdb656c48, 0xbde3cb91, 0x767af2e7, + 0x1859cacd, 0xcdde0847, 0x2a7f412e, 0x1e7608e8, 0x69b43a40, 0xde43a41e, + 0x9c76c1bd, 0x858f7cbf, 0x35394dd6, 0xd6336db8, 0xa0f42bef, 0xe54c115d, + 0x59a075fa, 0xab4673a3, 0x78b9dc9a, 0x074b495f, 0xb736075f, 0x8c25d0ce, + 0x15806957, 0x9c6d6f7c, 0xb4f6f68f, 0xb3691f7b, 0xcc7a8e5f, 0xe74c3ed3, + 0x5c6cacf5, 0x7dbe58d7, 0xeb0f7892, 0xe599b05a, 0x7a91a9e8, 0x8d60e7c1, + 0xa4799e90, 0xfd8b9bcd, 0xfc66adce, 0xb71843fb, 0x87a83ad8, 0x9a777bf8, + 0x31d413c0, 0x8e6e4e9f, 0xf9832fbc, 0xd728f13e, 0x7fd0d953, 0x13e69720, + 0xac61bb20, 0xc071f342, 0x3ba82ed8, 0x7da7ce2e, 0xd783a0bf, 0xefe62e07, + 0x751afd8d, 0x6bf685ac, 0x8e1f021c, 0x055ede6c, 0xfe8c32ff, 0x7ee35382, + 0xc32de29c, 0x198d357c, 0x3e3cbcff, 0x9233f629, 0x28807ef0, 0x2eb7b47e, + 0xfb6acda3, 0xbd3ef318, 0x2bae6b9a, 0xfd10b3cc, 0x3f37592d, 0xc4592abf, + 0x3658d3e3, 0x5814dfee, 0x5d8f64fc, 0x6c1602c4, 0x520b317f, 0xd30b2979, + 0x87ac09f3, 0x643113ea, 0x9bc7805a, 0x1640fcdc, 0x3768c8f3, 0xe237ce66, + 0x6859fe4a, 0x164ccd9f, 0xe86cb571, 0xcfa5da1f, 0xe1fb4a99, 0x8c7be357, + 0x3cc6f937, 0x7e4dcb30, 0x7b68b8f1, 0x0d2f58cf, 0xc042ae7b, 0xc52c93dc, + 0xfb0c17b5, 0xebc1c2ae, 0x012a95fd, 0x210b80d9, 0x1dfd7fd8, 0xce31cb0b, + 0x95efac62, 0xb959ce22, 0xed1324a1, 0xf3fd8ab7, 0x2bba0fc9, 0x8b6fdb99, + 0xfd51cfd7, 0xd87cf013, 0x2a0bf202, 0x976fd8e2, 0x6fd88d4f, 0x5885ec89, + 0xbae82dbb, 0x02b1ee88, 0x5ef17aac, 0xf75683a4, 0xc7ca0f5a, 0x9e48633d, + 0x255e4982, 0x65c1ea15, 0xc30b4f6e, 0xa877097d, 0x38ffdf1b, 0x0e4dee89, + 0x0695fb8a, 0xffbc01f3, 0x9c917d2a, 0x7cd8fc78, 0xdca98380, 0x7fe632df, + 0x51fde920, 0x02b98f48, 0xc96a3daf, 0x1e97485d, 0xcb173bd5, 0xcfffcd2a, + 0x73d5c748, 0xc5981f0a, 0xcd8bf422, 0xb04f4867, 0xe89571af, 0x3b6c2af7, + 0x0cdd286d, 0x5ddac73a, 0x0e7e25cb, 0x1abcd13a, 0x7a4c5ace, 0x854f723e, + 0x4fbe7a4a, 0xb38723f8, 0x04afebfc, 0xbacd5e92, 0x717fe215, 0x148b47bf, + 0x59d5faa0, 0x88cbf731, 0xa1729b3c, 0xf9877fb7, 0xbefc2e33, 0xf42f79e3, + 0x2a0b0d73, 0x4587f7c8, 0x4bf80d9e, 0x6c9fb44a, 0x49afd094, 0x36e9bece, + 0x6719afd7, 0x13db7fae, 0x7bbc3eff, 0x7ed3749b, 0x7e78bddd, 0xf65e0e32, + 0xabe8bf08, 0x62c46bdf, 0x20f71cf3, 0xbf30ebdd, 0xe79be494, 0xf83b2639, + 0x7ef08879, 0xa16f3f07, 0x34309ba9, 0x257e00d0, 0x4ec9e1fa, 0xfb9e3f78, + 0x4d4f7899, 0x8fb795b2, 0xe3c44bdc, 0x2cbe19f6, 0x64f03711, 0xe5f099cd, + 0x857f46e1, 0xf615a4f2, 0x9227d230, 0x1fbe69af, 0x9bf274e3, 0x611fa8c5, + 0x1c62373e, 0x1a8788c0, 0xf97bf9f3, 0xf88af739, 0xeedd2c44, 0x4b76e64a, + 0x2a39d20b, 0xe82add8e, 0x0dca177c, 0xb8a1fdc0, 0xc921feef, 0x995e7947, + 0x82c6e016, 0xda3e7598, 0xda7c0f2e, 0x0cf1865a, 0xc518e787, 0xde5d842b, + 0x7fdfca92, 0x8e548f78, 0x60db5e7e, 0x186daffd, 0x1873686f, 0xbd50bff5, + 0x60e58f25, 0xf0ebc47c, 0x9efe21f7, 0xc6143e77, 0x765b767b, 0x7f94dcd9, + 0x26fdde90, 0xdcc95f9e, 0x5df8a36d, 0xb4f3c8cb, 0x9f698acf, 0xa72842c7, + 0x42e7db09, 0x7b48f4fb, 0x3a6495d6, 0xe5f86b47, 0x53b8c667, 0x1fe8e352, + 0x5836d4a3, 0xadd6f74c, 0xd476c255, 0x3c3d6b17, 0x2fa22b3f, 0xb278a683, + 0x769401b6, 0xf788dd94, 0x5590633d, 0xf7c8fb15, 0x5a3d1e29, 0x9f56694f, + 0x9d5afd8e, 0x1eddbb93, 0xad69fec6, 0xb77d1ca7, 0x060bcc16, 0xcb5f22bb, + 0x7578855a, 0x70473d5a, 0xc5a74e9e, 0xcdb2798d, 0xa9e4859a, 0xde53b745, + 0xad74ab6b, 0xf46b7c8e, 0x0851eceb, 0x9e5e230e, 0xf80a9e68, 0x5cfc8cb9, + 0xff593df3, 0x8469e37b, 0x72f721d7, 0x88fcbc1d, 0xa99aed1b, 0x52e7ca16, + 0x4ef634b2, 0xc1ccbc9c, 0x712836f1, 0x676d8ee1, 0x9d213fe0, 0xa42e3dad, + 0x7f169f47, 0x49afdcdf, 0xde4f4f5f, 0x9c5fa312, 0x030c2c7f, 0x3d49d61f, + 0x23c829df, 0xd06bf7f9, 0x33a4fd7f, 0xe93752ae, 0x352fda19, 0xf68b79f4, + 0x0be79db2, 0x4b63ef9b, 0x5e067fc4, 0x622e2fac, 0xcbd19f3c, 0xe1f3bfb0, + 0x7d8529c1, 0x49331f94, 0x0a1fbb89, 0x9f29829e, 0x8ec7ef0a, 0x4169b7ce, + 0xe53806be, 0xb476fcab, 0xe6b39a17, 0xbebe31da, 0x875f714a, 0x2f03dffb, + 0xc6e3dd82, 0xfcb35cfd, 0xb8bb6518, 0xcd3ef7bf, 0x575ef712, 0x3e47b8bb, + 0xd04879f6, 0xe5ff7da7, 0x112e4e74, 0xe63580ff, 0x5ec475c3, 0x1f78e8ac, + 0xf0e56cb8, 0x21d8123a, 0xf089bf46, 0x077ecf75, 0x8c7bdfbf, 0x59eb883d, + 0x786d78ec, 0xb7de0f6e, 0xac013c01, 0xdbf1f2e7, 0x3f142aa6, 0x9893b874, + 0x35bdaa3d, 0xffe12a63, 0x678e968c, 0xf21b5908, 0x0cb81c63, 0xcb34053c, + 0xf3f7dbd7, 0xc8e5f0c7, 0x5f910b57, 0x17f2f8a2, 0x7ca1b4da, 0xe2006b89, + 0xbe8fe105, 0x319ad36f, 0x85bdee26, 0x8633f843, 0x30678a6f, 0x1c379f3a, + 0x77d04dca, 0x53a3dc48, 0xfc1cba87, 0x359bdab9, 0x5fbe83a6, 0x88392ae2, + 0x1f7714f0, 0x4264e7e0, 0x407efc19, 0xb8ec7df1, 0x275f271e, 0xca9d4e3d, + 0xa7de6394, 0x421b77f1, 0x3c6e49dd, 0x8b4a18a7, 0x1f163bff, 0xd0bf866a, + 0xf419ce21, 0x68db7c50, 0xf30b7c5f, 0x50f2866e, 0x83b76b12, 0x2686fd5d, + 0xbfd81cf2, 0x083ab888, 0xdd738c2e, 0xfca52faf, 0x87fe6308, 0x3ed86680, + 0x48a7b333, 0xdd06bf92, 0xbdd331b6, 0x1ef67568, 0x8b7cdba2, 0x4fc43dff, + 0x4c9eb1c3, 0x3e5e87ac, 0x467a7645, 0x069fb70b, 0x7f9324f6, 0xcd3e9439, + 0xd9ed5f04, 0x3618161c, 0x4ab56e94, 0xdae4ec98, 0x6058a3b3, 0x603bcd0a, + 0xbfbc8b4f, 0x74d8c6ce, 0x1cec2ff4, 0x789f884f, 0xc84978f4, 0xd00f41b5, + 0x053a974b, 0x834f103d, 0x87f716f4, 0xe97b8af4, 0x37f616de, 0x675fb9d3, + 0x76f44bdc, 0x3d3ee0e1, 0xeb54d3dd, 0xf7803ef0, 0x32a3b07d, 0x2a2df7e5, + 0x2deef7e5, 0x305379b2, 0xf7e8b05e, 0xfb4cd4b2, 0x17ef9c62, 0x32f5fc0b, + 0x0f5f9d0f, 0xfce875ac, 0xbfb3263e, 0xc950f791, 0x9e61df94, 0x7a4c974a, + 0x16a96165, 0xbb8b7ec0, 0xe78d3e67, 0x93db2a45, 0xa2f2fce9, 0xa04e786f, + 0x01e8bf9f, 0x277f1b87, 0xf96bf964, 0xefd0d925, 0x74f307f2, 0x15e4ff94, + 0x87bb2cbe, 0xc19d6bb1, 0xda93f472, 0xa40b05a4, 0xf3740c49, 0x7c6156cf, + 0xf4bcf95d, 0xe7d4077d, 0x6156bb3a, 0x18d7e25c, 0x6d3b250f, 0x93fa394f, + 0x469fe14f, 0xf07015fc, 0x888b11d4, 0xaab0bc3b, 0x25fe540c, 0x068b2119, + 0xdf703f30, 0x1cf0ab0b, 0x779a666c, 0xfbc60592, 0x2a5efbb7, 0x70055fb7, + 0xe3e1303f, 0x37fef00d, 0xd90ffdf7, 0xf1274017, 0x52f2f1fd, 0x8672bef8, + 0xc54f7f51, 0x8b327a7a, 0x41d389d8, 0xe323f3be, 0x1a185da3, 0x2e9c8b8c, + 0xdf6f832f, 0xaa58d99e, 0xef27ff40, 0x78d570fb, 0xeb65d440, 0x8c2f744b, + 0x8fbefa7f, 0x2321be68, 0x64f81c7e, 0x3173ed15, 0xbc2b41ff, 0xd5d25c57, + 0xc3a55476, 0x9874937c, 0xc2f6b0ff, 0x7e47b3d5, 0x3718f90d, 0xb5d5fce4, + 0x93920cce, 0x51d288c3, 0x777df82b, 0xcb9df283, 0x3eb076f9, 0x9f9f87ae, + 0xbc59ea30, 0xbe3bba1e, 0x70a570be, 0x8a4a1c3d, 0xd0a97eff, 0x30ef8043, + 0x92bae9c5, 0x22f36383, 0xc7e403fa, 0x69e49d3e, 0x201fd71d, 0x06679847, + 0xbfb71b72, 0x21af2b2f, 0x48761f71, 0xbfa326f1, 0x9031e86c, 0xc71c64bf, + 0xd69b74ed, 0x85eee2b9, 0x703f5fa4, 0x371e1ce9, 0xa9464fc7, 0x7b308f59, + 0x1fb46177, 0xf5c9cabb, 0xc6a5de66, 0x8d58453e, 0xbe589fde, 0xe79ce4a3, + 0x1e316b63, 0x476f651c, 0xfe4651e6, 0xa17e90f9, 0xdfe8b73f, 0xf042fe33, + 0x5f079fa5, 0xf3af84e9, 0x9fd233cd, 0xb4309e39, 0x1fec553f, 0x11d79875, + 0xcf9c3e35, 0xfe21fc08, 0xb3fa512d, 0x6353e852, 0xf76fbcff, 0xe4d79bc5, + 0xcfcb8f45, 0x9f7d025b, 0x09ebdfc6, 0x3d453e80, 0xaf78ac56, 0xddc5f6c1, + 0xefda3a69, 0x82ad6fc0, 0x37e414df, 0xb4a1ce83, 0xef9a12c6, 0x1cdf493a, + 0x190beec7, 0xefc1dbfc, 0x8b7e1d65, 0x05105e5f, 0xa1efa19f, 0x7fe890ff, + 0x47e7e72a, 0x56f9f907, 0x9fe11f94, 0xdd0f4f32, 0xff0b1dcb, 0xd3732825, + 0x5dabd6a2, 0x3173ca0e, 0xf955f6f0, 0x6a17b0df, 0x2e4bae13, 0xb1f87382, + 0xed0dcbb0, 0x101e508a, 0xd0ef9d9f, 0x2ea18afd, 0xf755e199, 0x1bd46f38, + 0x649e86c5, 0x8e678795, 0xa225bb21, 0xbf64dd97, 0x6c337a18, 0xefda47b7, + 0x5bcb2ad3, 0xfb8aaf51, 0xd065d3d9, 0x702393e2, 0xebe4e3bc, 0x8b3f74e3, + 0x87edff7b, 0x87f3939a, 0x2bc3c798, 0x09bdd266, 0x9d3d62c5, 0xf8a013de, + 0x131acbc9, 0x87c72beb, 0x675f5eb1, 0x38b9f9eb, 0x47e2641f, 0x49760ea3, + 0xd220a5bd, 0x1b9fbe3f, 0x0b9ff7c5, 0xcfa58cfe, 0x804fd5d7, 0x61e20087, + 0x067bc086, 0x0afef1d4, 0x85fac0a6, 0x347322f9, 0x28bc9acf, 0x8fae35b8, + 0xd70b6433, 0x8b91e763, 0xfc4c61f4, 0xe493878e, 0x6e0f8239, 0x38ba14b7, + 0x738937de, 0x202c878a, 0xc31fb427, 0x3bb7d9e7, 0x15cdfa9b, 0x7a56feed, + 0x77c89379, 0xbac5ec31, 0x64d88d5f, 0xf7f79f86, 0x4bc71763, 0x24ef31f1, + 0xfac663b4, 0x07fa0f34, 0x0f73ddc5, 0xe141fe60, 0x3e78bc5e, 0x9d85e7c2, + 0xbb814e5c, 0xdc5e5e04, 0x34efdd1e, 0xb390d397, 0x0a3cc9bf, 0x1e31318f, + 0x7da37397, 0xe3e34bb9, 0x886cfcc0, 0x47acc54f, 0x076ff28d, 0x9e00ef87, + 0x7c05a963, 0xf036daa0, 0x705cea16, 0xf8e503b7, 0x1ca0f318, 0xb02e75f7, + 0x62ba404c, 0x4a3b9102, 0xf3e7ac3f, 0xe050ec30, 0xcbe44ecb, 0xd491ae79, + 0xde63d8cf, 0x7ef0f1e4, 0x534dda2c, 0x670abef1, 0x2588fd10, 0x5d8fff2e, + 0x0c3717c8, 0xb77c6294, 0xd9b1b93e, 0xb07cf511, 0x27b4177d, 0x13cbf63e, + 0x33efce10, 0x98b8df7e, 0xd80d340f, 0x153abc60, 0xea80b4e4, 0x485bc461, + 0x6e07ede5, 0x60a85fa5, 0xdfbf32f5, 0x6befd60d, 0xb65f3f88, 0xd17d21a4, + 0xb93b424f, 0x52e5f656, 0x9b70d8fe, 0xf001d707, 0x0fdf883b, 0x80e29839, + 0x12805ffe, 0xf92cf4f5, 0x33f73a76, 0x7da240ab, 0x47bfc303, 0xd27e85bd, + 0x2648df75, 0xdd9f647e, 0xade30631, 0x4e9cc919, 0xf45d8fd0, 0x8e4fb763, + 0x8e7fdfc8, 0x1dfc98ba, 0x243b7d63, 0xa1cfd449, 0xdcdd2eab, 0x6107e512, + 0x0fffa87f, 0x6f727349, 0x7e17fe47, 0xe987d91c, 0xed177591, 0x345ac995, + 0xbe0203dd, 0x47c8519e, 0xda28f6d1, 0x2cf683a7, 0x6afab59b, 0xcd97b3d0, + 0xd5e30cee, 0xab81cde8, 0xfa0bbeaf, 0xacf6059b, 0x2ed0f003, 0x1e50e2f8, + 0x43d0ddff, 0x07ba2563, 0x7f9270fc, 0x1916a37c, 0x1bc45327, 0x727e4532, + 0xf32f1266, 0xdc1eb853, 0x36e24a29, 0x1f8aef6c, 0xef15c89f, 0xf5c2c5ff, + 0xf8929ac7, 0xbb4fcc79, 0x699c66be, 0xcf7b14bc, 0x0caed3f3, 0xe533cf71, + 0xf5f8f169, 0xec1ed109, 0xc453a21c, 0xcce7e2ae, 0x38d43b0d, 0xe4975e6f, + 0x42e2807b, 0x155f82af, 0x83fc7fc7, 0xef07db8b, 0x673a3135, 0x3b9e2efd, + 0xc7bfe42f, 0x2ba5f584, 0xd6f3a41f, 0xfb482cd5, 0x645bd5e3, 0x8aee79d3, + 0x7bf46d95, 0x8941159b, 0xcbf425b9, 0xb65cfc7c, 0xa512ffc0, 0xf3dfc551, + 0x8a67dfc2, 0xe36aaefe, 0x5a7b9894, 0xeaf8beb9, 0xd34ce7f6, 0xbf447f7e, + 0x179d9394, 0xcfc1afdb, 0xdbe876b1, 0x79d36e4d, 0xc72b85f3, 0x59cdf396, + 0xf3117ede, 0xb516fcd0, 0xc7e19817, 0x3cba91df, 0xf7837c31, 0x19dd82c8, + 0x4aa70b88, 0xfe78d07a, 0x103fe036, 0xe17eae75, 0xc70431c9, 0x1fbf9776, + 0x470222f9, 0xe2980b32, 0xeff83364, 0x9c7839d8, 0x7024f811, 0x9adef5ae, + 0xfeed75f2, 0xfdd8124b, 0xbb577f45, 0xae16f8bf, 0xc4875967, 0xde5f22c6, + 0x32c3b662, 0xe72e3453, 0xf731c929, 0xc7b88850, 0x182f6e0c, 0x7850ddfe, + 0x97f7d2d6, 0xc17ef195, 0xec2ed90e, 0x5edcf1e5, 0x7b41b7fe, 0xfe517bf9, + 0x5265da27, 0xfe33ea01, 0x43bbf19d, 0xa65ea779, 0xa7efc1fc, 0xbe75fb70, + 0x0528bdee, 0xf915afda, 0x17c643ea, 0xd6b447bf, 0x4d2fb83a, 0x3e9b63f9, + 0x7f05a3bf, 0x0760625f, 0x07a0ffd8, 0x9e7d1e4b, 0xbe32e1ee, 0xce8af6fb, + 0xbf8015d1, 0xb5ce8269, 0xd61f6e1e, 0x18eac27a, 0x96a727e8, 0xb9db95c3, + 0xbea2525f, 0xede2adcb, 0x356291be, 0x44caffc5, 0xcdc524bd, 0x0aab01ef, + 0x5da0634b, 0x922dc6ce, 0xefe1fd82, 0x393c0131, 0xfd182c8d, 0x5339443b, + 0xedf35db9, 0x45a49ba9, 0x687823e3, 0xaf19ccb7, 0x33dadd03, 0xceb83d93, + 0xbffba13c, 0x7da87885, 0xf5f94c23, 0xadd1bd97, 0x4bbedda0, 0x92935ef7, + 0x5b83c111, 0x1d7073d6, 0xc3837e4d, 0x17e831d9, 0x7685f5f3, 0x9bce894e, + 0xb327ddb9, 0x85db8c23, 0xde654eb4, 0xbbf4ce3d, 0x62699976, 0x7e64c89d, + 0x599627ca, 0xa3bbed3b, 0xd5fee38c, 0xb99b85dd, 0x6ff9cb1d, 0x0b6f8156, + 0xfc359f3e, 0x3f78c9e2, 0xb0dac144, 0xfd57bf82, 0xe3f18dab, 0xfe054bbe, + 0x38151e61, 0xe71e633f, 0x3b4617d3, 0x84f8826b, 0xb3c92721, 0x8c1dfbe3, + 0xf5e9cfdd, 0xe977fa68, 0x9556c41e, 0xc0cc877e, 0x77dd2eff, 0xd393c217, + 0xdc2249b9, 0xb88cf188, 0x79473e1d, 0x9f355b7d, 0x0fa84c03, 0x5d1cec56, + 0x5a0fad11, 0xa6cfa255, 0xc370fc98, 0xe2275fbe, 0x5f75c72f, 0xbeb7d23b, + 0x77c51d6b, 0xbfe16e96, 0x3f109317, 0xa93f8817, 0xed75cb8a, 0xe3e53b3c, + 0x10aa3c94, 0xf95a6bfd, 0x6ed67aef, 0x3ae3c1df, 0xf507992b, 0x0ee76d46, + 0xfe3c62a9, 0x690ee27e, 0x473e1471, 0x7f2906d4, 0x21a722fa, 0xc59f5c7f, + 0x89c63bf2, 0xec394ed1, 0x6f5b76e0, 0xfdc01689, 0xbfab5ed1, 0x66f5db16, + 0x0f307b27, 0x0bffc0c8, 0x7ca6ae3b, 0x5b4ee703, 0xcb76cb18, 0xb43b2ce6, + 0xf544bf6b, 0xd2ed5f20, 0x5e20cffd, 0x085f14d2, 0x774d4fbf, 0x5be19a7a, + 0xd64d8db7, 0xc3c70bb5, 0x71fc3165, 0x372e4ad9, 0x87fa83ff, 0x464d84e4, + 0x852179b9, 0x3f6017fb, 0xd8757f91, 0x93b1e7ca, 0x53f37871, 0x7f897bbc, + 0xb8d1a48f, 0x0961b539, 0xa779d5e3, 0xa7ce9a76, 0x7bcbf845, 0x3bf0cbe0, + 0xf22a7dd8, 0x3fd08d5b, 0x916e8f25, 0xfb8289de, 0xf04c8a68, 0xbe076ce5, + 0xfefde8d4, 0x7b53a66f, 0x6733cfba, 0xd5df44bb, 0x51c5fbc0, 0x4798c67a, + 0x0c737d1c, 0xd1bdabf1, 0x37d73cfd, 0x145f1e61, 0xf3d2c6f0, 0xe57bd0b8, + 0x73d35cb0, 0xf70e3035, 0x27e70f3d, 0xfc867f51, 0xf1ebcac7, 0xa23f6e14, + 0x1468b49e, 0xd23b259f, 0x3768cf80, 0x32799f5f, 0x4dd0f085, 0xa8dba878, + 0xa9667cd0, 0x47b731be, 0xa2c7c3c9, 0xbf3703bf, 0xad35f749, 0xe251e5ff, + 0x890ebac7, 0xc76e3eff, 0x8c46f551, 0x949e040f, 0x86bcaed1, 0x21ec089b, + 0x35da4f71, 0xeb8fae21, 0xbc143b42, 0xd3e0d337, 0xe80753bc, 0x4ebab57e, + 0x083f431b, 0xa433eff8, 0x1a9f2c5f, 0x6df431f8, 0x2fff3d2c, 0x6e47f68d, + 0x00008000, 0x00088b1f, 0x00000000, 0x7dd5ff00, 0xd5947c09, 0x66fdf8b5, + 0x9309990f, 0x124c257d, 0x49921536, 0xca082248, 0xb22c2124, 0x20940138, + 0xc807b0db, 0x62f7d2a6, 0x41832fb5, 0xdff6794a, 0xf4155b58, 0xdad101d9, + 0xa0a0d6a7, 0x820e8301, 0x29b6ad08, 0x689f150f, 0xd9114ac7, 0xc5ad8d32, + 0x9ff95f57, 0x33bdee73, 0x61997df3, 0xefdfd4b1, 0xcbbf9fc5, 0xb777eefd, + 0xce73dfb3, 0x2f3186fd, 0xc58ca963, 0x958c624f, 0x935effc2, 0x941e706f, + 0xc33793cc, 0x127b58c6, 0x32b6e85b, 0x475fdf96, 0x7f2b31ef, 0xf5e7699e, + 0x8d9e0546, 0xdda76c66, 0x632f6093, 0xbdc0baac, 0x4ea9c70d, 0xc1b6738f, + 0x4aa77938, 0x30a4b0de, 0x9c54e0d6, 0x4a6af071, 0x1c378c15, 0x9d09d1fe, + 0x409e7133, 0xc608cd6e, 0xb8dfe02e, 0x5ad8c970, 0xd4bc60c6, 0x333f3e64, + 0x5e717204, 0xb9fc7cc6, 0x25606d9e, 0x7639fee1, 0x9e07ad07, 0x9673f9fb, + 0x5e111eef, 0x1ca75cbf, 0xa15d927f, 0x6ae83671, 0x7d61db86, 0x9de2d21b, + 0x49e8f06d, 0x1db067bb, 0xe63fa9c6, 0xd774e3f7, 0x7836eb1f, 0xc38fb8ac, + 0xb78c0726, 0x24dd71fb, 0xfe7fd41f, 0x394a81b8, 0x44dda95e, 0x0dda95e3, + 0x2b878eb4, 0x3fa55eac, 0x34dc4694, 0x3e2d6b94, 0xade3c02f, 0x2a0e1339, + 0x6ed98c85, 0x7cb1f937, 0x1eb8b753, 0xe2ccdfdb, 0xe9d06ff3, 0x86fac4ee, + 0xeb0cacfb, 0x32aeed3b, 0xb31beb84, 0xf53f0813, 0x199f26b5, 0x4bc9f9c6, + 0xad7baf0a, 0xacff063e, 0x8a5accf7, 0x9c4a58fd, 0x9fc429f3, 0x56e9bf67, + 0x17f780dc, 0xd8c6967a, 0x1cffc614, 0x3935ee2f, 0x0e94f9e0, 0xc08be5c5, + 0x76c77d43, 0x8fd812c3, 0xb7809fb1, 0x9e186b80, 0x4c13ee1c, 0x14971bcc, + 0x7f7e47c6, 0xa00ba73b, 0xeaf78417, 0xc7ece267, 0x0bae7c2d, 0x47437ff0, + 0xd4deaaa2, 0x3e3f6999, 0x8d5f5c2c, 0xd83a40ff, 0xceb8acc6, 0x39ceb17a, + 0xb86dcf3a, 0xe04b06ef, 0x5b501180, 0xf268347e, 0x09d1a358, 0x2dd5dfa7, + 0x7c721abf, 0x32ab6324, 0x1299520e, 0x98cce9cf, 0xdf23f7cf, 0x7ef0225f, + 0x6fd09633, 0xd40dd215, 0x98769757, 0xfabfbc18, 0x01c9b378, 0x231275a5, + 0x418f58f8, 0xef9c8d69, 0x633ef487, 0xeaff500f, 0x7a098ef8, 0xcff57b80, + 0xeb1b7b14, 0xae593ebb, 0x03bb9850, 0xf1ecfbc6, 0x108b097d, 0xd05f5fbe, + 0x6fd872b3, 0x3defdf1c, 0xee304fc8, 0xe0006799, 0x26cdef44, 0x97bf6516, + 0x1ff31e3b, 0xab9e1051, 0x3ccfec05, 0x8ffa3557, 0x67de2f40, 0xc3073bfa, + 0x373f4f96, 0xc23feef3, 0x1b6ccfba, 0xd923d4e7, 0x7e89b9b4, 0xce71a982, + 0x293f40ad, 0x0149367a, 0xd8edafbc, 0xfa063097, 0x516cfe7d, 0xfdfa1989, + 0xa9fdf058, 0x082df497, 0xfe7efb97, 0xbed84dc2, 0x9b24a7da, 0x7e679e71, + 0x182cf7f6, 0x135b6ea7, 0x3db59842, 0x0029bafb, 0x5b7ce9ef, 0xfa67f3f8, + 0xcfbdf1db, 0x26f07c9f, 0x475b7784, 0x7a9fb51b, 0xdfd50b72, 0xaf0bf9f8, + 0x57bc0ffd, 0xe2704eef, 0xda5ea77b, 0xf7a9784b, 0xdfb85c18, 0xf0fd7458, + 0x9fc4bdf6, 0x6fc4d740, 0x31cb96ac, 0x7e92d749, 0xc2f9ff3f, 0x614748d1, + 0x6f9fc3f9, 0x00b6ba00, 0xc7e86f5d, 0x69f7d218, 0x2babbfc1, 0x3cb01bad, + 0x2d5c7cfd, 0x14d1b7ee, 0xeb889218, 0xc2e9ce19, 0xdf56f027, 0xd1b18771, + 0x9c69fd4a, 0xb1ef80f7, 0x79f4011c, 0xde1de802, 0x246176da, 0x824bf7ce, + 0x2a37bc1f, 0x7b3be00e, 0xae0a27de, 0xb3787e27, 0xf3ad3571, 0xbb0ede59, + 0x5f2f6c8e, 0x4b51e9c3, 0x56edbb07, 0x0f9c8f41, 0xe4d476b2, 0x980e4838, + 0xf38e5c9d, 0x79d565fd, 0xfcf06cda, 0xa71e35e6, 0xfbb8f01e, 0xd909e1e4, + 0x30f9ff50, 0x5fe12465, 0x34bf10af, 0x4f34ad7a, 0xfb254b43, 0x487bd614, + 0x9d9a4bf0, 0x39206e19, 0xbdd385b0, 0x58ac1981, 0x4e490437, 0x26e86c34, + 0xc6d869be, 0xc12cc9d7, 0xea3699dc, 0x2921bd67, 0x67e80ebc, 0x983d52b5, + 0xd408db7b, 0xd25ade3b, 0xad130e3b, 0x079494f7, 0x7f385bcc, 0xd2df9844, + 0xf883cc74, 0x6941334f, 0x06a6f2e5, 0xaf6e3fc6, 0x6bca3df8, 0xe3f5a659, + 0x65385aed, 0x69f6f226, 0xd92a2e89, 0x7d2ac933, 0x34ae4b10, 0xac3ffc0a, + 0x5d239604, 0xd9c57779, 0x3490029f, 0x121814de, 0x13525729, 0x09ce9c39, + 0x8bb739ba, 0x3a9bcbd3, 0xf7f7179d, 0xb6ebd6e6, 0xead73ca0, 0x4dcea537, + 0x7c046af8, 0xe2bda199, 0x9e1cd63f, 0x8eb2fa8c, 0x1adf9139, 0x6e7a0877, + 0x8dcf4466, 0x714b359d, 0xc994ecbc, 0x7a82bd4e, 0xd909e3e1, 0x67ac6f50, + 0x592fc865, 0x42ee578f, 0x854eb2bc, 0x9d7ac60d, 0xbff6077b, 0xa9c1a539, + 0xb5bd43cf, 0xef02c335, 0x9cac3cdf, 0xc03c3ffa, 0x79e38151, 0xebed19ab, + 0xf487a361, 0xd799c3d1, 0x355f5139, 0x230dd67a, 0x73f4727a, 0x18f33b62, + 0x1bf7c4ee, 0x46d8f3bd, 0xee1f0a25, 0xeed45c52, 0x41c5f78b, 0x0a9d29ff, + 0x276349f1, 0x12b3c3e7, 0x7634b23e, 0xcef9c02f, 0xaf3334ed, 0xb793a612, + 0x7ae44d76, 0xe93365f2, 0x2eadd3c9, 0xd6a829f6, 0x4bcf4253, 0x2e7eae38, + 0xccfc474f, 0x1d719a66, 0xda3ac44b, 0x27ee5c8d, 0xf05e390a, 0x81475f00, + 0xa24153c0, 0xa126944e, 0x1f39dabf, 0xa885bdd9, 0xf98acec7, 0x2691cff0, + 0xdd4c14f4, 0x744fd4b0, 0x1f1cff5e, 0x2aecc52f, 0x0e822bbe, 0xa5a37da4, + 0xae44caa7, 0xdf1eb26f, 0xc830a0af, 0x8a867c7a, 0x63ae6f4f, 0xe7d826fe, + 0xfceb8fcd, 0xeec90ae3, 0xf1e49db9, 0xaadb135a, 0x826f1df4, 0xb2757f58, + 0xfd4158bb, 0xf64adb33, 0xfacf8843, 0x687174b9, 0xce289587, 0xbb85da36, + 0x9def0754, 0x1139b34c, 0x1d12d36f, 0x50a5ed51, 0x371d8d7f, 0xc85bddb5, + 0x6d75a1f2, 0xe7845abf, 0x2c9da09b, 0xfd0ecfd8, 0xadb4bde1, 0x48dc9e63, + 0xc68da6f2, 0x9768951d, 0x066d2beb, 0xb816a4f8, 0x62fd70d7, 0xcfdb4673, + 0xdf472171, 0x58a0bd98, 0xcb33f487, 0x93f0fc4a, 0x9cc59557, 0x219140de, + 0x7f3879df, 0xa78fe030, 0x648f441c, 0xbb363507, 0x91e9d17d, 0xd8234bf3, + 0x5f4a7145, 0xc49f8c7a, 0x9bca38e5, 0xf2543b48, 0x947fe4a7, 0x61e1cefb, + 0x7ffc95ba, 0xce7e7cb9, 0x1cf0f9c8, 0x3ce91fec, 0x39bbdf44, 0x0b5c6f7d, + 0x1bed087c, 0x22db0f81, 0x9301f6e4, 0x40eff897, 0xafc23f7e, 0xea1c9903, + 0x7de3278e, 0x97948e38, 0xf7ddda4f, 0xdabca224, 0x913d687a, 0x8d6f90ad, + 0xe4307fbb, 0xc5937662, 0x00b3c7c0, 0x8fd246bf, 0x2b6dc005, 0x728bd2a1, + 0x6d45be3e, 0xa7f2c907, 0x7cff5c89, 0x986fbb63, 0x45bb2062, 0xe75eabe0, + 0x03ee29f9, 0x08a03eed, 0xedc2db96, 0x19d434be, 0xc6b627a8, 0x4dbed0fb, + 0x179e634b, 0x2bc7aca3, 0x55e25bf8, 0x0969ffda, 0x89edfdfc, 0x26d97edc, + 0xca2ddbde, 0xf1057388, 0xf9e74383, 0xeb63e984, 0xd60fd913, 0x3d72ed45, + 0x858973a1, 0xbeed37af, 0x46375b21, 0x57cc33e0, 0x9e2094d7, 0x1bf01e0b, + 0xf3c35b16, 0xa5a6bd48, 0xea3f5c1f, 0xcd4fdc3f, 0xb5efd8f0, 0x2be715ef, + 0x0b773d0d, 0x9125adbb, 0xfe8cf7f1, 0xde3f10bf, 0xef686361, 0x92b83901, + 0xaf4d5d61, 0x347ce50d, 0xfb04382c, 0x24f64a0f, 0xebbf4125, 0x813e0bc7, + 0xced033e7, 0x39af3037, 0xf46ef109, 0xbcf02205, 0xef04f105, 0x5e2cd8f7, + 0x7949f03d, 0x113ba7b2, 0x3256f3e6, 0xccf51fa7, 0x209e4177, 0x197f32df, + 0x16269bca, 0xff384048, 0x4239eadd, 0x1eefabf4, 0xfe400ac2, 0x7c42812a, + 0x3f3c48fe, 0xe90f04f7, 0x9d61437d, 0xffc096bd, 0xeeeb031b, 0xf4e0535d, + 0xed1f38c2, 0x87e770fe, 0x3bc7da30, 0x631e0bcd, 0x5a36fde1, 0x72431674, + 0x614e7eb8, 0xe4511db5, 0xc78109f2, 0xcc59f3a6, 0x0333ef0b, 0x5c0375cb, + 0xf0724d9f, 0x09a086e7, 0xf3a6ac4d, 0xf60bccb9, 0x563a47d0, 0x099c6d17, + 0xed7e5c49, 0xb465a380, 0x5c4929f6, 0xe7c8effe, 0xa2dc16fc, 0xd60e50f8, + 0x93fdacb5, 0x6ebff81e, 0x254fcd8d, 0x559da334, 0x75faf767, 0x40372885, + 0x781114fe, 0xc3ca5967, 0x33de0dfa, 0x7b58458c, 0xf209c0e1, 0x4fd0b16e, + 0xfadf3a4b, 0x9d49e50a, 0xc2c65981, 0xee2d4b38, 0xf4d0d903, 0x02697599, + 0xdfe5f78a, 0xf50d2bb9, 0x76bcfa4f, 0xe39bd713, 0x2a9f68ed, 0x0bfaa9ae, + 0x87b317f1, 0x12c7640c, 0x2f2f019e, 0x25fbb924, 0xf5e77ec1, 0xe7efa467, + 0x91e5c5dd, 0xa12dff7c, 0xf1f4b49f, 0xd83c0c71, 0x475f2b93, 0xb825b7fc, + 0xbbdc6853, 0xd6e4aace, 0xf4f02539, 0x773f4863, 0xf14f9cd8, 0x11dd72e1, + 0xe02c5df4, 0x8ebcfabf, 0xdc53d4f0, 0x0f25a43d, 0xfb9834e9, 0x757bc03e, + 0xf48ed997, 0x89bcfab2, 0xfdfb2cf0, 0xdc0415a1, 0xf17d7090, 0xf01341c9, + 0x3984b5dc, 0x97de23d7, 0xde67886c, 0x8685b908, 0xe347d22a, 0x2ce34679, + 0x28eb7aee, 0x10d1bbc2, 0x6c593a20, 0x1b1e12b1, 0x1d681bcf, 0x4cf1836c, + 0xdc07f640, 0x2ae0963f, 0xbf79fdc2, 0xc4f1363f, 0x1d30f075, 0x3dfed39e, + 0xe91cf865, 0x491295dd, 0x49fe8eef, 0x5326af00, 0x96dc0e88, 0xe5873b08, + 0xeff8d4d8, 0x5ff8443a, 0x5098f16a, 0xc1732f5f, 0x788f5239, 0x87d997f2, + 0xac7be247, 0x9775c2fe, 0xc12cef8f, 0x80991fd7, 0xc3c8a3fe, 0xbe5c4929, + 0xcbdf2b3c, 0x51f27ce2, 0x117bab2e, 0x84a16bcb, 0x8be51f7e, 0x0fa8897a, + 0xf1a5ef11, 0xc9f047ba, 0x3dfc8547, 0x0af73ced, 0x5d93db3c, 0xe82f08b5, + 0x5d2137e7, 0x23e716bc, 0xe414b4fb, 0x3bb1ca1a, 0x0a7d9007, 0xf283cbf2, + 0x27f1e60b, 0xd2667bd2, 0xe419ac1f, 0xa7b1e01b, 0xd9f041cc, 0x82740158, + 0xd98f6672, 0xc611d5be, 0x16a7c4ab, 0x3ac46b8f, 0x1bdeb1bf, 0xfd2218ae, + 0xd6f7a01d, 0x67bd7124, 0x9584fe42, 0x363db898, 0x7445f088, 0x7c7cbfa2, + 0xf1c712dd, 0x6ffa7c00, 0xfcdfa449, 0xe5f92223, 0x525f0267, 0x4fd47d9e, + 0x2484d78d, 0x2fbf172e, 0xb24acbde, 0x0ce93d73, 0x947ddf12, 0x294fdfc4, + 0xda46fae0, 0x7e888fdb, 0xb23e0249, 0xfae3fa94, 0x223b6a49, 0x949f8c49, + 0xe0254094, 0x838421f5, 0x5f203bd4, 0x0fc089fc, 0x93375ef3, 0x82eb617c, + 0xe0ff9043, 0x4e4947bd, 0x920b8398, 0x06dc5f41, 0x84a98c76, 0xf3e165fa, + 0xe1eee73e, 0x0c6c2e92, 0xb956f1f5, 0xc920d29f, 0xb46bd07b, 0xe40cc5af, + 0xfc697286, 0x327785af, 0x4d3fd681, 0x15bad070, 0xb4884c3d, 0x70398c3f, + 0xf3fb803c, 0xb861a949, 0x263be76b, 0x2495e0e8, 0xe90270c5, 0x231598a5, + 0xeefc16de, 0x187cdb0b, 0xe2ddacf2, 0xfcfe81d5, 0x2af3ce99, 0xeee6738e, + 0x1f7f6443, 0xb487f933, 0x9bb4a35b, 0xa23c4ffc, 0xfe17db84, 0x8135ef42, + 0x7dd1d8bc, 0x61b3a7e6, 0xf5bb8bdf, 0xf1729c4e, 0xe7797fbd, 0xbb9fb47a, + 0x1f3c4e8d, 0xc07f1e82, 0xe66eeb80, 0x9d31e2f6, 0xff4e0e9a, 0x733cfa8b, + 0xec0be054, 0xa4dbb21b, 0x971639dc, 0x3d60c850, 0x307f992b, 0xcc25efea, + 0x0ff2c265, 0xca98ac77, 0xaccb7e00, 0x7d1e486b, 0xb264e77e, 0x2f33977b, + 0x60d92fb5, 0x7ea443fc, 0xaeaed658, 0x5d5478af, 0xd753e95f, 0x2ae27e43, + 0x964f9fb5, 0x7f4e64e6, 0x93ec41a7, 0xecd6b11d, 0xfb477b43, 0xdba0af5e, + 0xdd89903c, 0xef412728, 0x4d69dfa3, 0xe51d2b9c, 0x153d9afa, 0xc7f317e9, + 0x96bf9d35, 0xd44646f9, 0x21437643, 0x1df725f3, 0xa71242f7, 0x21d71c1b, + 0xc5f3c1e6, 0xfbe8cae9, 0xb4925bf8, 0x78d1fa53, 0x4e3176a1, 0x5a04be78, + 0x4b79d347, 0xa958f58c, 0xd1e5e9ff, 0x964b89e7, 0x7a55d8f3, 0x853fdc32, + 0x5e7135eb, 0x74d1f496, 0xcb9e833e, 0xc377b4ba, 0x7db872fd, 0x27ec72c5, + 0x4a72c3e2, 0x3f259bfa, 0x4b30aa7c, 0x1e87f926, 0x6772e714, 0x3f99fa21, + 0xf9083b45, 0xb5e3a271, 0xc9712c00, 0x1887a33d, 0xa2fcc3f2, 0xd5d007dd, + 0xdc8440a9, 0x4b6c981d, 0x64eb7d21, 0xd2579c4e, 0xabbb82fb, 0xbd607bfb, + 0x2ab7bfbf, 0xe74113dd, 0x898fff21, 0xb318ff9f, 0xd32cf4aa, 0x9d25e1e8, + 0xc81377a0, 0x42821ade, 0xee7b8fe7, 0xce5f7a26, 0xe74869dc, 0xe6867b3d, + 0xfd01fe7a, 0xd333d72b, 0xa8c8c8bb, 0xfc0c4c0e, 0x67ac4337, 0x345bd766, + 0x32e2cebf, 0xe62e3cd2, 0x91d1a7b0, 0x8417af99, 0x37ea01a7, 0xce8fd686, + 0x8ac6c634, 0xdc5d2bf5, 0x9451bc6e, 0x0327b16c, 0x79c66dd7, 0xe638be61, + 0x6db2c0cb, 0xe581d3b4, 0xe06dc538, 0x9e78e0eb, 0xf0739ac0, 0xa0259d7d, + 0x1584fbe7, 0x10ff61a4, 0x136ea8bc, 0x7ab375f5, 0xe7c32c17, 0x11c91b56, + 0x27875893, 0x30e1e419, 0xdc162f92, 0xffead9b7, 0x1365f71c, 0x41d2b7a5, + 0x67cdec7c, 0xc7e8d7e4, 0x6bce183a, 0xe2f59eb5, 0xaecced66, 0xdece3d60, + 0xa187bfeb, 0x757ab49c, 0x97272445, 0x549ca326, 0x788e5ede, 0xfdccb901, + 0x0ddab13c, 0x21636ed0, 0xd6249739, 0x5ce426d7, 0x4870e326, 0xef9a2e66, + 0x53e5b6c7, 0xeb30aa19, 0x6ffb051a, 0x1074984a, 0x80869bd7, 0x49e4f687, + 0x4adc9506, 0xe9ebab75, 0xa67aeab5, 0xb0b75d47, 0x5fa47663, 0xb8ceefc5, + 0xa9e74c90, 0x3157e861, 0xbb31790a, 0x2c975f1f, 0xfeeb2637, 0xa9c4fb31, + 0x2637973e, 0xebf91899, 0x56162cd2, 0xc6caf644, 0x7caf6e64, 0x7d76c5ec, + 0xf179e490, 0x035ac738, 0x8d7d67e0, 0xf00fbce2, 0x9f66debb, 0xd37e8f5b, + 0x5fdcf1f9, 0x59b47063, 0xf2cb7da1, 0x9c46e744, 0xb0ccfd1f, 0xf671f59f, + 0x5e21cfd5, 0x7bf8dbe7, 0xe31eb82c, 0xda365b86, 0xe81d1bed, 0x304e0b57, + 0x8cbc5da1, 0x28b2b7d9, 0xf035fdf4, 0x49f7ac0d, 0x145e03ac, 0xf9f22f41, + 0xc05e7c36, 0xf1cae3eb, 0x0affc9dc, 0x702b12ba, 0x42966cbd, 0xaea69171, + 0x93f47eed, 0x9316d415, 0xe17dfc9f, 0xdf8261ef, 0xd3f0d7af, 0x537d3098, + 0x77a8b17b, 0x69bdd75b, 0x97507285, 0x98a6dff0, 0x82355c45, 0x76f1702f, + 0xddce5078, 0x0a4e3405, 0x932707e7, 0x6f4f9c7f, 0x9c3fe160, 0x2f3c2aa7, + 0xa2f1a5c9, 0x7f837aed, 0x18eff22f, 0xf28b1651, 0x8913f9cd, 0x5675bb1e, + 0xf9c74987, 0x478052d9, 0xe11eb76b, 0x41ff6e52, 0x46e7ae1b, 0xae654fc5, + 0x8a3d41fb, 0xc80b12df, 0x5187e401, 0xbbe46aae, 0x8eccf1b6, 0xd2fc7576, + 0x9e1da762, 0x6fe0bfbf, 0x3cdfd007, 0x1c519db2, 0xf709b661, 0xf572ab8e, + 0xab397d47, 0x2ffef156, 0xdebc77c2, 0xfdfa1837, 0x3d157c79, 0xc19a6867, + 0x2d046bba, 0xf5b1e7ca, 0x8fad4eab, 0xf15499d6, 0x2b14cc90, 0x4f270bf7, + 0xf64c9638, 0xfe478f2e, 0x6193ca41, 0x93ca186c, 0x413f7e08, 0xebf15efc, + 0xdd40f258, 0xadc1e42e, 0xb24691ae, 0x905c85cf, 0x7c8dd7f2, 0x30e6fd07, + 0x6fe90036, 0x39266b16, 0x2562b87d, 0x98db85c9, 0xfe7088d7, 0x41e392a0, + 0x24e67bae, 0xab733db5, 0x5d9f5d5b, 0x3877b5ab, 0x73bce4dc, 0x19f6ea3c, + 0xa49d5ed2, 0xfde757b6, 0xa489d7eb, 0x6e9fd377, 0xe31030b8, 0xdedcfc0e, + 0xf1f16b54, 0xe88183b8, 0x8f1d71b4, 0x2e75372f, 0xf1153fba, 0x3b232f76, + 0x5942f811, 0xa6fc9c3a, 0x3c08b2ca, 0x14fbd765, 0x6d43f794, 0xbedcef12, + 0xdbe8df79, 0xf789718b, 0xc0ab0257, 0x7899f73a, 0x1c7f6d5c, 0x58dfa2f3, + 0x016da3d2, 0x17027ff7, 0x727ae3d4, 0xb44ef1ec, 0x4ae837cf, 0x21ba5fc8, + 0x6bf2a6c1, 0xe9cb5c6f, 0x1d49fa50, 0xf6825666, 0x6b336cc5, 0xb7fee0ee, + 0xadac24fd, 0x13e63fdc, 0xc26386fe, 0x75f6840e, 0xc8d39fe4, 0x6e64d481, + 0x1dcea61f, 0xdad07e46, 0xf452e2ae, 0x227e8343, 0x64b1fcff, 0xf5aff507, + 0xeeff9314, 0x8a1ceb66, 0x6d75349f, 0x86b52c31, 0x2299c6e9, 0x1678f9ec, + 0xf216f48f, 0x2668bd7b, 0x74cfd7bf, 0x8c14d2ee, 0xe4fc9a17, 0x37a08adf, + 0xff4b1e7a, 0x36f810ac, 0x2ce7ba56, 0xbcf4b803, 0x39e27263, 0xe4652d95, + 0x57697b1f, 0x0cedf922, 0xffc91833, 0xf08c1575, 0x267e83d9, 0x8967ff58, + 0xaf876475, 0x4e49da53, 0x409a4b9f, 0xdd655ff0, 0xbacde74f, 0x228e81c7, + 0x6daac0f4, 0xd66afaea, 0xfae4e74d, 0x23d0fae7, 0xf72933c9, 0xfba8771a, + 0x796a41b1, 0x72e42c56, 0xb339db89, 0xeb5e971a, 0x5de7e02c, 0x3ec03038, + 0x0936deca, 0xfb3ce97f, 0x91143889, 0xb3172b4f, 0x276c7a93, 0xb97f9cf5, + 0xf3132dfc, 0x9943f568, 0x326e8fb0, 0x61253cc0, 0xf18ca77b, 0x975d7efa, + 0x5e17433e, 0x27e8a96f, 0x7f292ced, 0x462abe25, 0x3a044881, 0xc8453bbb, + 0x8f967c97, 0x89f186f8, 0xa4cc15ce, 0xbdf1a249, 0x231abe78, 0xf07a03e6, + 0x75795d22, 0xefd21f16, 0xf499a57a, 0x69ed0592, 0x1e2a3728, 0xd4afbf92, + 0xef08f579, 0xe679acd1, 0xac6f7854, 0xe11e3ba5, 0xbdf27404, 0xfd30d494, + 0xee7f31b4, 0x47454576, 0xf1267ed4, 0x48e951d7, 0x07ff09ea, 0x02984edc, + 0xaa71c63b, 0xe5029031, 0xd79f857e, 0x627f5a26, 0xd6bffec0, 0x993a264d, + 0x5c067cc4, 0x8d5db55f, 0xea1989ff, 0x1f4764fa, 0x04bca0fa, 0x94e78097, + 0x9776ea61, 0x2d4c5794, 0xd7d8f2af, 0x1fb0ef64, 0x9e0ef81c, 0xd85be3df, + 0x51ea0330, 0x3839cfd6, 0xe9e8fc4a, 0x871eab94, 0x4a253a78, 0x28c7a21c, + 0xfa1a03ce, 0x6a703c6a, 0x4c2c03c1, 0x6e1f9287, 0x0cfacd60, 0x3af29b80, + 0x80dcf78f, 0x30f407f4, 0xfb86c2ca, 0xb94abe91, 0x87f24eff, 0x5172b7a4, + 0xc9e5203b, 0xe9103640, 0x38cec6eb, 0xc6813ebf, 0x501f9861, 0x7a95c62c, + 0x6dedda5f, 0x55d0faa3, 0xfa80529e, 0xd49bf39c, 0xe71523fb, 0xa1e4f763, + 0xbb25eedd, 0x7e8e823d, 0x00a47445, 0xf67f111d, 0x76ea8fd1, 0x7c499d0d, + 0x7ae3891f, 0x133582b1, 0x39d2cd7d, 0xacd7f4a8, 0x6558bd20, 0xfec0659d, + 0x74e0cd6f, 0xb0e91e36, 0xd357df00, 0x5d459549, 0xcc21d2d7, 0x579c8ba8, + 0xe8b1974b, 0x99d2206c, 0x97c98bd4, 0xae2fb3a6, 0x717d9d3e, 0xe5267425, + 0x7b38f6d6, 0xd9d61595, 0x1e90a754, 0xa0cef918, 0x6d0fac36, 0x75bb23c8, + 0x1f73a27b, 0xf6f337b5, 0x1e976ed2, 0xd60a3ff3, 0x773cf688, 0x5a9bd615, + 0x2e861da0, 0x43f3c23b, 0xdbcbdd06, 0xde6bef8b, 0xc0fb4367, 0xfeeffbcb, + 0x013ebd7c, 0x45eb7dda, 0x2af68aff, 0xe06d37ac, 0x78c33ffd, 0x69e6114f, + 0xf9f0daf9, 0x39e40f35, 0xdb95b1f9, 0x7ec4e3c9, 0xee2f2bb7, 0xbced7ea3, + 0x96038adf, 0x6bec8c7e, 0x24dee76e, 0x71ee39f6, 0x4f94cfbe, 0x00e49e6f, + 0xf41658ba, 0x4275dd92, 0x724e5f57, 0xb4f9c62d, 0xc1cf6942, 0x5d882272, + 0xe7165d2c, 0x8f3e7d06, 0x29856e07, 0x1db9528a, 0x1868e320, 0xb089afaf, + 0xf9528a67, 0x97be49b9, 0x40180496, 0x236cd87a, 0xf38cb2ff, 0x0a611ff9, + 0x91ee25f2, 0xc4623ff2, 0x341626fd, 0x7130bd93, 0x05f78ca0, 0xde618b0c, + 0x4c5f0be2, 0x297fe688, 0x97fee54f, 0x40ff2293, 0xf1f3af3e, 0x48ed873c, + 0xa4085924, 0x7e42bfad, 0x3cf18edd, 0x6cbc9cae, 0xd795e214, 0xb13ea7c7, + 0xc00e4371, 0xf06cd757, 0x55cb32a2, 0x7a637f28, 0x4ff7f337, 0x89febbe8, + 0x5137e606, 0xff5f0f3e, 0xc3d036f2, 0x9e5c7444, 0xc7f02add, 0xfa260ec6, + 0x54f0259d, 0xd3e42a93, 0xe5123648, 0x6f02add3, 0xfec059b7, 0x6edcbd25, + 0x5b8dc8d4, 0xd9ced153, 0x56eed314, 0x4ae46bb7, 0xb977989d, 0xb257b7b0, + 0x2725d920, 0x27951f14, 0x7b7b7137, 0xd908f5b5, 0xb99b3d35, 0x02cf599d, + 0xfd68f764, 0x519fab87, 0xd43a1bd7, 0x754ea6f5, 0x978467bd, 0xd4d9e9e6, + 0xbb7e8e50, 0x21df47ba, 0x949d713f, 0x7cb53e2f, 0xcb9a0301, 0x25ae4797, + 0x9637cf7f, 0xe9c1cf1b, 0x1f955ca8, 0x596a4f79, 0x65e43f84, 0xc8d1e79e, + 0xc7bc39f8, 0xef50d2d6, 0xea4fe308, 0x293cad23, 0xfa44f216, 0x297ca40d, + 0xc14f5c66, 0x171df179, 0xe3b1abbe, 0x1778911e, 0x7f50aae7, 0xa314f761, + 0x74f483dd, 0x053e746d, 0x736bf43d, 0x9a1e847e, 0x7c216a53, 0x3c23adeb, + 0x3c3d1556, 0x73f17a96, 0x435dba9a, 0x749cf22f, 0x9997a0bb, 0xf980a918, + 0xd1715bff, 0x4af0ec79, 0x5ab72f4e, 0x7ebd10d7, 0x8bd38ab0, 0xf95daf3c, + 0xffa5ccf9, 0x10b3e726, 0xbd81c49d, 0x5cece50b, 0xd0729e79, 0xe149b8b9, + 0xe0b0d074, 0x1daa2783, 0xb870b961, 0x221aa595, 0x64db44e4, 0x84e305b3, + 0xee7e466d, 0xa3e53199, 0x7211c5f2, 0xf15715c6, 0x758bc23a, 0xb3ff92a5, + 0xa5fa5e21, 0x75b33cf9, 0x21f2ffdd, 0xe227bbca, 0xfbdace29, 0xa4932328, + 0x94a1f1f7, 0xc45a7cbf, 0x567ae5a3, 0xb5e6781c, 0xcb63f200, 0xde30e2af, + 0x7df15abe, 0x27e313b9, 0x906fcf66, 0xfceb573e, 0xec27ee26, 0x9ca9b8a6, + 0xd3dfb637, 0xf4d7724b, 0x41c3d706, 0xa3e51fa5, 0x9121f3c2, 0x69a3abf1, + 0xf5280e3c, 0x2fc2bbe4, 0xd52a16d7, 0x64f2887e, 0xefb8c7d7, 0x1fbe1577, + 0x248cefef, 0x8eefd1cf, 0xcad055f1, 0xefa93b2c, 0x608f307a, 0x11e465db, + 0x7b72169c, 0xd71ee028, 0xeba27f7f, 0xa4ffee0c, 0x149e9788, 0x0993b5f1, + 0x57f6de3c, 0xa6865fa1, 0xa2717ef1, 0x71e2293c, 0x71d49327, 0x7c5ef918, + 0xbc77ef1a, 0x675962d5, 0xb335f8c0, 0xa4041bac, 0x99b988f6, 0xf1e633f2, + 0x4aecf5fd, 0x2231b2dc, 0x569691ce, 0xfa0d3431, 0x19bbb5ed, 0x3fdb4b96, + 0xbbfa4531, 0x645f707b, 0xf5fdf077, 0xce52f1c4, 0x3356969b, 0x3de10d34, + 0x0cf84027, 0xbacb47d5, 0xb9efc69b, 0x50d9cb91, 0xcebc3bfd, 0xfa42df84, + 0xd5c563cf, 0x503471b4, 0x101cfc38, 0xdae0fdc7, 0x297cf838, 0x7c1c44d7, + 0xf34f909e, 0x7e3fb8bb, 0xcfad8581, 0x5d85f686, 0x9b9cfce9, 0x8aa21de0, + 0xafe37b83, 0xd241ef28, 0xee80cf67, 0x7378dc50, 0x41b8dc44, 0xe41b0dc4, + 0xf7a876fe, 0xaaed2637, 0xa4c78dc7, 0x6b1b8945, 0x465e0bf3, 0x1850627b, + 0x39da770f, 0xf5f5aadc, 0xed57e855, 0x2f28ca5d, 0x4b43cefb, 0x7aefd0da, + 0x33d00fe7, 0xec8cf249, 0xe70106ea, 0x754afb58, 0xe54398eb, 0x1cc7eecf, + 0xf4cfeb11, 0x64eaa924, 0x55e447a9, 0xa965d766, 0xce680ffa, 0xb03fbd57, + 0x7b555ae5, 0x5544b79e, 0x8370d82f, 0xedc1fdea, 0xd0faaa95, 0xbd566f47, + 0xfbf2cc5f, 0xa0ebff93, 0xec447d1e, 0x550cdf1a, 0xdccf75fb, 0x19ffeaae, + 0x2c787e6b, 0x9c43b7bc, 0xd5d79867, 0xbb9cbc3d, 0x23fd705f, 0xfaab163a, + 0xe51d29b7, 0x7e35947e, 0x7bc0afc5, 0x96be04cb, 0x4138f376, 0xd52ae751, + 0xf813a7f8, 0xfc6d10bd, 0x93d70613, 0xb0a9d63d, 0x78df4acd, 0x83d75d68, + 0xa7bf31eb, 0xe4145c6f, 0x055bf427, 0xe3b418e7, 0xdace76b4, 0xe90a5b34, + 0xc5962c9b, 0x174b5ae9, 0x7b03b256, 0x3f93d71f, 0x790d98b0, 0xcbc12c64, + 0xbe8e7cc8, 0xdc65ebf8, 0x9cfbd5cf, 0x56b2f28d, 0xf4425a1c, 0xd350ce68, + 0x4d439c45, 0xd4c3f117, 0xaa736174, 0x28ffa0e9, 0xe1681d35, 0xd352e89e, + 0x7fc00b05, 0x7096f011, 0x9e4f7095, 0x2d1ba6a4, 0xf0584bbc, 0xfb53e500, + 0x459fa714, 0x6e773f89, 0xca5d7da1, 0x4d3e7c8e, 0x7c051bc4, 0xb577ee47, + 0x3c6e0959, 0x63da4b8f, 0x68ff6166, 0xbed2fefd, 0xfc2693d9, 0xe91c624b, + 0x78af5fcf, 0x8a1f5ce9, 0xe7f28dcb, 0xaed0f3fa, 0x4fdc666a, 0x969bdee4, + 0x48cfd51a, 0x19f963cf, 0x09675c25, 0x73356e7b, 0x197b3f91, 0x3bbc90f3, + 0xfc92b35e, 0x3fac2b43, 0xe9e6f8a1, 0xaa5edc19, 0xf3923e63, 0x07bf1c57, + 0xf845947b, 0x5470b561, 0x0dbf14ba, 0x07d08de5, 0xea4bac59, 0x4fbf0f03, + 0x316fb1a1, 0xaf21171e, 0xc72bbda4, 0x7293f097, 0x466f8e4c, 0x81f20d3f, + 0x61b1ae46, 0xda8c78da, 0x606c833f, 0xcf8c8f29, 0x7c645838, 0x0997eb47, + 0x5ce063fb, 0x07e9f30a, 0xc031b5e6, 0x8bbb48db, 0xac657dfc, 0x973e2e7b, + 0x4ff218fe, 0xfe42c35c, 0xea7a9889, 0x99def112, 0x58f0255e, 0xaf38df5e, + 0x18031b8c, 0x3a10fd3e, 0x841c558f, 0x87bb19ef, 0xf51d22a6, 0x8f3a4ff5, + 0xe8e30abe, 0x48e4c175, 0x6f2861bf, 0x7ed0095f, 0xfbae636e, 0xd1fd8459, + 0xcc263ac8, 0x30ff43cd, 0x2c04c7e8, 0x758b1fb9, 0x0360ed6a, 0xb0758ff9, + 0xd5f7a413, 0x9a0e222c, 0xbaa76e17, 0xe65d6fbe, 0x8eca5ce5, 0x2edd2678, + 0x9f3cc59c, 0x27f90988, 0xceb197cf, 0xe14f3273, 0xa4c0134d, 0x53879c24, + 0x43ce2e98, 0xc710ac85, 0x492b3e07, 0x0929bb47, 0xe48952f8, 0x0ede50c3, + 0x43e1f7b5, 0x9e65fecd, 0x4a56de82, 0x9125a17e, 0x780cbdfb, 0x5fe57b48, + 0xfdc00ec1, 0x541dd35a, 0xec77e86f, 0x9736173d, 0x28f2ab76, 0x80704c9b, + 0xcbc17f41, 0x43ae4f22, 0x4ecfaf6d, 0xf1b809d7, 0xe0a5ce73, 0x221f1b15, + 0xe3e04daf, 0x992fed72, 0x38e126d7, 0xc7c85d3f, 0xa917dc30, 0x2f3a1ae0, + 0x28bee086, 0x5c25dc1a, 0x3f7596ce, 0xdbd2f88d, 0xbc21a48e, 0xcbdc12db, + 0x4701fdf1, 0x5d142703, 0xfad55d78, 0xda8f9433, 0x7ba7a9db, 0xf2378d6a, + 0x5dc6a67c, 0xe711127a, 0x053eccba, 0xdceba9c6, 0x99e0f647, 0x60b01056, + 0x856a9d7f, 0xf1170d29, 0x1de06817, 0xf7247ceb, 0xba1a6ff3, 0xb030f993, + 0xa3d2fbcf, 0xe0843be6, 0x70176ea0, 0xef0fd6a8, 0x911e181f, 0xe60863c7, + 0x0fa088ce, 0x126e3eed, 0xc1a770f4, 0xde38effd, 0x0f39dd27, 0xfad578e3, + 0x085903ae, 0xdd0a359f, 0xe6671a63, 0x333346f7, 0x51b2bdf8, 0xde276681, + 0xb1c8cdbb, 0xe86d1c52, 0x3c9a1e77, 0x196ee904, 0x47fc38a3, 0x5a4aee6b, + 0xcf3c3c32, 0xf7474550, 0xf17b191d, 0x6296efe3, 0xe51e71bc, 0xf337cc0f, + 0x7fbc87fc, 0x8017f789, 0xc4dd793c, 0xc697c82c, 0x27ba66fc, 0x93d44c12, + 0xcf4532ff, 0xc9fd23c6, 0xa1fbcbf5, 0x7fc579f2, 0x1ef0536c, 0xae3e7ca2, + 0x4ef2382d, 0x5d229728, 0x3ff78594, 0xb2382aae, 0x43c61ad9, 0x3d69aa63, + 0x2ce783da, 0x3cca5f5c, 0x90376638, 0xe163593c, 0xb06c71fc, 0x6dfb673c, + 0x8c6d1e78, 0x1ebff573, 0x3d3bfbf7, 0x9ff673c3, 0x89feaeed, 0xd9073fb4, + 0xbcec6bdb, 0x4f9139df, 0x4a83e6be, 0xb6a6a73a, 0x7adbcf45, 0x2b9f9d33, + 0xf27135ea, 0xf29f837a, 0xef31eaaf, 0xf9f86479, 0xcb3de695, 0x3d2d76bc, + 0x7f73a454, 0x81a26369, 0x9ee88a19, 0xef62fbb5, 0x7d77fabd, 0x3d51fbd4, + 0xab528e82, 0xce1a5c78, 0xf4f35153, 0xf36ba44e, 0x4f7402f4, 0xb7a79436, + 0x459d22ab, 0x87a43f19, 0xf954bbce, 0xbb6f3273, 0xca78fcf1, 0x2e33eb97, + 0x86b0e78c, 0xc162f3f3, 0xbfc042bf, 0x46e6f311, 0x72e73e46, 0x8a4f3c25, + 0x240b83c8, 0x67fe3f20, 0x91ee9ea7, 0xdd41e7ff, 0xd651ada4, 0xe1c1929d, + 0xc1aa6d76, 0xd70ef98d, 0x4b6b99f9, 0x7be5f994, 0xbc8a3ef2, 0xdf5da997, + 0x02c0ca8e, 0xe3e63f5c, 0x9ccf9b46, 0xd72be1c1, 0xe38923bd, 0x3335f1a3, + 0x718057dd, 0x477a6f29, 0xc9396052, 0xcf1abb07, 0x3bcf0279, 0xd2e40e6e, + 0xdcc9a8fd, 0x1e8b108f, 0x6e782456, 0x3f51b944, 0xfa065e1b, 0x2b343729, + 0xbafe08f6, 0xe1843d14, 0xb5e153ae, 0x844ddc2f, 0x3cae395f, 0xa8fe7cdf, + 0x3e1ff29e, 0x96f82c3f, 0x5e78acb9, 0xdaf4245b, 0x41c78ce7, 0xe8576f3e, + 0xc3d8b35c, 0x97c80b58, 0x9356db45, 0xa9fcbc1d, 0x9d51eb91, 0x417bf3e1, + 0x00ca2c8e, 0xe2e50899, 0xf838ea75, 0xf8fa07d2, 0xfea45909, 0x499ac65c, + 0x89ff2c7f, 0x7b1d5fba, 0x27684fe0, 0xe8f3e369, 0xe43b45eb, 0xce710c86, + 0x28e56728, 0xea7cefff, 0x24a6130b, 0x93ffa2c7, 0x19074f20, 0xa85aae50, + 0xa76ad33c, 0xab867a72, 0x32e00332, 0x9d53c33f, 0xdf9d7e81, 0xd6f47871, + 0x80fd72f7, 0x2f417697, 0x9f3cf599, 0xc7973cc9, 0xdf8fbfaf, 0x98780003, + 0xd21edccd, 0xc677bff7, 0x8fa55a74, 0x80fae8e8, 0xe922417d, 0xd206671f, + 0x13b3ca7b, 0xdc9e5127, 0x842ef1b3, 0x570ac6df, 0x361bfa31, 0x8bfbf0d6, + 0x9f8f3316, 0xf473fefb, 0x18e6181b, 0x2560f1d4, 0x5ded6f9e, 0xc7e8fd7b, + 0x13fba0d9, 0xb86d1be5, 0xa5ffe789, 0xb37b02e9, 0xa5f3c2f3, 0x3032fbc6, + 0x9d7a9ebe, 0xa62dee89, 0x9b8a2be8, 0x1a8df223, 0x147a0e05, 0xdef08fc7, + 0xc810f7ba, 0xd7b7185f, 0x5c59efc0, 0x657e38cb, 0x1dce18de, 0x019ec769, + 0xa2b261f8, 0xa1db5fac, 0x9fb08df8, 0x29db1d86, 0x9f7f533e, 0xea2e6d3f, + 0x28185f9d, 0x95d725be, 0x25667af2, 0xbea4b1c6, 0xb9d8ab99, 0xe9d84c5f, + 0xe3fc9873, 0x415ab071, 0x7d847317, 0xc39e373e, 0xe6733179, 0x2ddbbf62, + 0x2c07412c, 0xa3aab734, 0xdab7f68c, 0x90768898, 0xb6c4e78c, 0xb3fba21f, + 0xf1b69f1a, 0x704ab8fb, 0xca720e08, 0xf8c5d8c8, 0xc10ca1ee, 0xbdf84377, + 0xb9883634, 0xf8d87e30, 0xe82dd0da, 0xe3f7306f, 0x479069f1, 0x64255196, + 0x3ef05b2f, 0xe357cafc, 0x279794fc, 0xaeecc2e0, 0x6bb7cc62, 0x4253919a, + 0x83471f79, 0x73895df4, 0xf12e40c6, 0x0519c82d, 0x19f3e174, 0xa006a9ee, + 0xb02cc6f7, 0x61fea0c3, 0xcf5e02c6, 0x41d72c0f, 0x32d990dd, 0x1df780d5, + 0xc09c0daf, 0x1b66427a, 0x2c092f6f, 0x9afd43d7, 0x1d7907cc, 0x58406a0f, + 0x4e8f99e5, 0xa7f8c2f5, 0xe39d8512, 0xe43dd00c, 0x7543ddc6, 0xfcd37e91, + 0x4e97ae4c, 0x4ef7f1c5, 0x3385b1e5, 0xa2c3de10, 0x94ca6fbf, 0x953b71f6, + 0x3fb2bf72, 0xafde88cb, 0x5bf7832b, 0x8f0fee29, 0xe21b678b, 0x9bce3c78, + 0xdfd87800, 0x89e29435, 0x01248cbe, 0x34a71837, 0xa7848e3c, 0xbbce4f1c, + 0xca31f50a, 0xeff72361, 0x0243f6ca, 0x3acf307f, 0x8b90679a, 0x919dbbdf, + 0x03f88c53, 0xde0419bc, 0x7937880c, 0x4dc71fef, 0x3fb9242c, 0xfbf3fd12, + 0xf3f786bf, 0xd2d6ebc2, 0x9f427bc9, 0x71e36cac, 0x016260d4, 0x78b8d3d1, + 0x52911df1, 0xc9ae3ef5, 0x3f217ae4, 0x7fe79133, 0xae92f087, 0x026d3cd0, + 0xba01398e, 0xfba57887, 0xda4ff93e, 0x5cbe0477, 0xfd903df8, 0xe56cd79d, + 0xf71249fb, 0x49b9037f, 0xa83ddf64, 0x5ad4ef1a, 0xc051ff4d, 0xa4dfb890, + 0xfdffea02, 0xe7a16638, 0x5fa86b6c, 0x43b7215e, 0xdf953ed1, 0x9bde6069, + 0x307c6458, 0x0e863df4, 0xbc39df7e, 0x62a5a9cf, 0x4fb1769f, 0x4fa7df3b, + 0x48ecaf45, 0xad967730, 0xe0871d2f, 0x786f1a1f, 0xc54f1889, 0x43c6d1e7, + 0x97858ebe, 0x274e4cec, 0x722f0d57, 0x86781a9d, 0x9f59ace0, 0x37f22784, + 0xa6ae1bf5, 0x04ceb94b, 0xf87d9f41, 0xce1bef3b, 0x35fbc157, 0xa0f3cddc, + 0xd74d4399, 0x74f23b0d, 0xfb202f98, 0x3f8fa3d5, 0xbbcfec35, 0xff9c5329, + 0x8c4e5872, 0xcccac37c, 0x407ea8b2, 0xff3dae7a, 0x3cf224f5, 0xa21fad6f, + 0x8dd9d527, 0x67bd12f7, 0x31fbbdf9, 0xc60cbf1a, 0x86b45e8d, 0x8bf585fb, + 0xe42edeba, 0x52bf5f63, 0x57d71730, 0xc97cae6a, 0x5e6c64e1, 0x9e492fe6, + 0xbcaff697, 0x8bea0f2b, 0x7af07537, 0x7917e576, 0x6e97cf20, 0xbcf24eda, + 0x2fcabaf4, 0xf99eb1f2, 0xe71f6f22, 0x3de5097a, 0x8ea7139c, 0x13db0ccf, + 0x341d32cb, 0xc74abeaf, 0x76428e90, 0xb266ebcc, 0x635c2463, 0x5d66a595, + 0x5fb8b473, 0x781e8863, 0xfe14649c, 0x5df981d3, 0x301f7ce2, 0x3df7cea8, + 0x745efc09, 0xd2bf9ecf, 0x33bb913d, 0x1e21773d, 0x2ccfe29a, 0x7dfa83c8, + 0x5c531ff1, 0x1d81714e, 0x87137e82, 0xf583cd9d, 0xba36672a, 0xab626ed1, + 0xc103169c, 0x60b3f855, 0x7e00178f, 0x8bf6beaf, 0x34f9b27b, 0x68c75c6e, + 0x5e9a0721, 0x8c4beafb, 0xb29d36e7, 0x3fddd13a, 0x5dd36bba, 0xee8d7768, + 0x5c57f5fa, 0x2d7bf30f, 0xd1a3dd72, 0x47cf095f, 0xfd699a75, 0x59aebba3, + 0xf98fef86, 0xa402aeaf, 0xf98f1b93, 0xf42c50db, 0x5b2579ec, 0x7d859f75, + 0xcd3cd176, 0x09347198, 0x51823f8f, 0xf1e09fd5, 0x8454ccd3, 0x5794d7c7, + 0xf0f52e76, 0x353900fa, 0xc086f7d5, 0x70f8a77e, 0xc4e7eb2f, 0x6fbc84f8, + 0x1e83f5ae, 0xc1fd81ad, 0xb0831bf3, 0x79fb0882, 0x080b79dc, 0x82bd7092, + 0x55eaaa25, 0xfbd54c96, 0x553cf6d5, 0x6b8cc4fb, 0x1d93ed54, 0x94faaac5, + 0xef55a361, 0xa856734f, 0x9a8cb7ea, 0xc6bf7aac, 0x17aaa355, 0xef543bfb, + 0xa9d83c8f, 0xf4c23f6e, 0xa3928788, 0x96587dce, 0x3b91771d, 0xf364fcb5, + 0xff472c3e, 0xeb438399, 0x7ce1be07, 0x2e7c3ec7, 0x7bdac0fd, 0x3c2fd240, + 0x99f56f5b, 0x337ffba2, 0xfbe1050c, 0xbf1d7af9, 0xab77f407, 0x63a46de7, + 0x1c680f79, 0x090181fa, 0xf2cf0bd5, 0xb8f3fafb, 0x2228ec9f, 0x1cd3e506, + 0x8f17f91b, 0xff9f9b1a, 0x07f7c790, 0x31bbdca0, 0xf7daab58, 0xd51ef3b8, + 0x4ad82bbe, 0x50ee9e0d, 0x77edabd5, 0x989fdeab, 0x3ed556b1, 0x0d03f1d9, + 0xd5541e9e, 0x693739a7, 0x8345b4f0, 0xdaa85fa7, 0xf09bf643, 0xfe86bd53, + 0x06c72825, 0x0f10abba, 0x120c9d37, 0xb775463e, 0x6e9e2157, 0xf841da38, + 0xabbbf52a, 0x1f965c50, 0xa587de6c, 0xd861ce1f, 0x0cd68def, 0x3ab7f72a, + 0xa0754fc8, 0x07951875, 0xfcf49d5b, 0xa8a3ad57, 0x45d5bb7c, 0x275a6fe5, + 0xeaddd951, 0xb5a3b2a6, 0xb17fde83, 0xb9fb93b5, 0x83df4392, 0x80fe8018, + 0x2340ba73, 0x59757646, 0x3f2869fa, 0x9c0bf5cf, 0x5e7dfac3, 0x1078da65, + 0x2214061a, 0x512e7fc0, 0x3d76ca0e, 0x4d780594, 0x9975e2cc, 0x73a1d16f, + 0x3e1da315, 0x0fc27360, 0xbb18030d, 0xc33bad7f, 0x16ebc89e, 0xb1b213a8, + 0x87e1378f, 0xdfb01cae, 0x40dc9551, 0xef5869f5, 0x89ede389, 0xa1a6139b, + 0xe38dfe1d, 0xf13eaee1, 0x5eb801f0, 0xf9fc3c6d, 0xfa1b0e93, 0x3d7f0e71, + 0x38f086d4, 0x2e59fc2c, 0x045c6c56, 0xd8a18565, 0xa8f67a88, 0xe5912ec6, + 0x4315758f, 0x9d0edc70, 0xdfca56f3, 0x90c8d9be, 0xfc28677e, 0xd3df2bdc, + 0xd07d7367, 0xe74ccd33, 0xd73a23a9, 0x5317ca32, 0x9c204f82, 0x4fe737ab, + 0x63d53d43, 0xfc22e60b, 0xf1e736aa, 0x09f06a7a, 0x375119c5, 0x6d94f872, + 0xf86d5c76, 0xcf834454, 0xd73b2c84, 0x00d77e63, 0xfd6403b4, 0x01ab8d48, + 0x8548f9f9, 0x67dd306b, 0xff399b71, 0x9f746dba, 0x655c1987, 0x75f846b7, + 0x9232c8de, 0x17859d9e, 0x79bfd0fa, 0x5cf89ebb, 0x1640cf0b, 0x4e89c3b7, + 0x27399cf0, 0x4705ce9e, 0x003bfc74, 0x1648f47d, 0xf74e1bb7, 0x637fee8b, + 0x3395ee02, 0x09df9e1b, 0x89acf5e3, 0xdc7ba1a3, 0xeb1ec943, 0x3ae80669, + 0x7cd93ca0, 0x9d9bb796, 0x8f142402, 0x82ff8b9d, 0xeebbe7f6, 0xf0bbcbfa, + 0xe26bc7fe, 0xec43a49d, 0x6efc12d7, 0x4fcf2f17, 0x34fd90b6, 0x4a80c67f, + 0x45738bd4, 0xcd816f7c, 0x3e614690, 0x3f09a243, 0x5ad4b551, 0xc8201ebc, + 0x98d4a796, 0x754b53f0, 0xc7ac7739, 0x07a0d572, 0xb765784d, 0xf5f6f87e, + 0x0036c668, 0xfc91970b, 0x0ad3bc0b, 0xa2d85aeb, 0x9cf3f077, 0xfaba27bc, + 0x2453f28a, 0x79111efd, 0x3a040044, 0x8ad92aaf, 0x64a49cea, 0x4b2c3b0b, + 0xd8238fd8, 0xf8ea0b88, 0x8c2cc6d4, 0x677fcc0f, 0x81f88c48, 0x8fd85dba, + 0xbcf899ef, 0xc87eefda, 0x1d627579, 0x99404c47, 0xcede4f68, 0xed6140f5, + 0xc195f717, 0xecbb0bfe, 0x583fca3a, 0xf113b0d8, 0xf029dbd0, 0xc89d6468, + 0x8bbd334f, 0x2e1ca63e, 0x4bd7fdcd, 0xb7674be9, 0x5f522abd, 0x55dc0696, + 0x5472fa91, 0xf50abdb0, 0x328fd4a2, 0xad6fea2e, 0x99b97213, 0xd6fee9e4, + 0x681faa16, 0xb07952f5, 0xcb908375, 0x76fed4ed, 0x2e42a3eb, 0x7e5c84fb, + 0xb5779e86, 0x5af952d6, 0xb6ca87ab, 0x8476f704, 0x878b2cdf, 0xdcdf0ef2, + 0x77186664, 0x5332edeb, 0xc47005be, 0x60a58f13, 0xee99913e, 0x8af36a3f, + 0x443e72b4, 0x7cfa3b0f, 0xf20f646f, 0x081f287b, 0xb181c5ed, 0x7330e9e9, + 0xbd2e50d8, 0xe482b59b, 0xc38761d0, 0x7bf4f686, 0xbe90579b, 0xd872ec38, + 0x3f7f508c, 0x3dd78eab, 0xea199b0e, 0xf1d73747, 0x5b0ebdf7, 0xc83fd41c, + 0x7ddbc95a, 0x1fe3828c, 0xf34e3567, 0xca659ca2, 0x2a8fe47e, 0x5078de4b, + 0x2bafa017, 0x4c5f23f6, 0x1e3458cc, 0x964a62f9, 0xb263e883, 0xaa7eed63, + 0xc062db0f, 0x6b2e57ab, 0x57ec3af1, 0xc0635299, 0xee73e37e, 0x26fd8758, + 0x10d07a0c, 0xf0d26fd9, 0x3eb0ebed, 0x80c5b9d5, 0x9414e9f6, 0x71e16563, + 0x4bb65d64, 0xdef32d39, 0xa4dcba8a, 0xdd3b0a0f, 0x5c240fa4, 0xdcd5672a, + 0xa6aaf18f, 0xe0aec54e, 0xa129663a, 0x0ee63fa0, 0x37f7e236, 0xdd9f5e41, + 0x2d6daf7c, 0xd6135bf0, 0x0ffaa06f, 0xaabf0ed7, 0x68abfbf2, 0xc17dfbf2, + 0x31efa8ef, 0x137dfd9f, 0x5b8a7eff, 0x6ba9a5c0, 0x13be8d91, 0xb4363cca, + 0xfa136eb3, 0x6e5176fc, 0xfbde12c4, 0xac7f2891, 0xe1b3e973, 0x98ecbf79, + 0xbb2121f2, 0x735ff88c, 0xbb46243f, 0x6cf60f90, 0x183beabb, 0x47df8c0d, + 0x9cde54bb, 0x9b5bff36, 0x758ab247, 0xf5e5701c, 0xc7a91fcd, 0x7d056b7b, + 0x9e65baf3, 0x3bbf36b4, 0xc7eaae74, 0xca2d69e5, 0xebeba01a, 0xe8a1c362, + 0x8a287012, 0xfb3e8706, 0xbd7f3c61, 0xc8915e4f, 0x8beed763, 0x77f95279, + 0xbb5e457b, 0x2e927f76, 0x9dafeefa, 0xe1c0dfc3, 0x055df60f, 0xa17ab9e2, + 0x2adfa18d, 0x7bbcfe52, 0x95a3f911, 0x4e4b5767, 0x90d85ece, 0xeaa5df4b, + 0xc36ec72b, 0x98e56a75, 0x2daf07bc, 0xf78a9da5, 0x11bf30ed, 0xe7840fbf, + 0x3cd2affc, 0x3d1f108b, 0x752fc195, 0x094d0e78, 0x4fee1c10, 0xe7c52cf4, + 0x2be7898a, 0x93e37cc8, 0xd12fef3a, 0x7b23bb6e, 0x73b7c917, 0x47802ca8, + 0xf28ea0ea, 0xbdddaf6c, 0x61b1fb0a, 0x966fca01, 0x3e5622f2, 0xdcd99ded, + 0x725be9ee, 0xa57993be, 0xcabe5b3d, 0x25ddff25, 0x3c1622f8, 0x0363f5aa, + 0x77a3ef78, 0xcfe93c54, 0xe3f30a33, 0x54cf7cf7, 0x72dd91a4, 0x80c98066, + 0x173ed5e5, 0x8430199f, 0x8f9ed7c6, 0xb28e64cf, 0x4c2779f0, 0x9937f2c2, + 0xef514a27, 0x53e456fd, 0x23bc9a76, 0xe1fe837f, 0xaf1471d1, 0x940945bf, + 0xe7b41c22, 0xe68733ea, 0xfb0a3a55, 0x7f61af9e, 0xf57f71e3, 0xc7eee89f, + 0xde7a5767, 0x92f96fae, 0x98fafe61, 0x6199af96, 0x7f3937e4, 0x3a152777, + 0xb4f0aed0, 0x7f5c8921, 0xa809ec06, 0xeb2f2a5f, 0xf4e702ac, 0xf97388bc, + 0xfcf35fa8, 0xcf6a512c, 0xa3be7de7, 0xceabcab7, 0x97f0ac03, 0x3e8a1e51, + 0x7cf74090, 0x153bfc75, 0x2deb4f32, 0xf3879e71, 0xe4d91bfa, 0x55ceeb87, + 0xfbbfd79d, 0x487b82c1, 0xde51c40e, 0x9f9df3c6, 0x7f5ae2a6, 0xd3fa9ddf, + 0xfa611d57, 0x497fb26e, 0xfaf59270, 0xfd555e96, 0x77f0dacc, 0x559ef0a1, + 0xa4f5dffd, 0x6d8f4097, 0x37b13c20, 0xe846774c, 0xa7f1d657, 0x408bbc10, + 0xc020d5de, 0xdb78bce8, 0xabf41774, 0xe621e711, 0xc5d790fd, 0xcd2011f9, + 0x7de2a9eb, 0x1774c2f6, 0x40335b8c, 0xf6f077b6, 0x78bc72c1, 0xeb299ede, + 0x646bbc62, 0xcf5e33fd, 0x6ee3fd93, 0xb78dbaa1, 0xf6fd967f, 0x297be474, + 0xab66cfdf, 0xf204dfbf, 0x65d94ffe, 0x51bbcd17, 0x207d0bb7, 0xfd54d7bf, + 0xeff1c9dd, 0x2876df20, 0x7f584394, 0xf7fc91af, 0x0a3a93a7, 0x2b33bf23, + 0x55dc73f3, 0x6ad7ca36, 0x56e87978, 0x425bc8bd, 0xe22ac5bb, 0x2b7ad5eb, + 0x1f7a5dc5, 0x963d72e0, 0x65bcb7dd, 0x7d7f0ab7, 0xa1f7c5da, 0xf3093029, + 0x3a61fd9d, 0x83602fdd, 0xa01f29ba, 0xbf228e7f, 0xa2f74987, 0x4a5c7e65, + 0x79e17301, 0x3895e539, 0xe3d17dfe, 0x976f24dd, 0xd9fdc2bf, 0x91f69b0d, + 0x77ac5b7e, 0x89e93f90, 0x0e6a4f7c, 0x8d9cfbac, 0x7972077f, 0x97c46bcb, + 0x11761ce3, 0x8f0e0af7, 0x1c80e784, 0x8615ff91, 0xc5ce5e7f, 0xff6eafe1, + 0xeb5fc327, 0xedf79747, 0x1e615d57, 0x8f1b39df, 0x9e053afb, 0x9473a0fe, + 0x418d780b, 0xd65d9d78, 0x8f51243d, 0x94ddd849, 0x7fad56b7, 0x57cf0cbb, + 0x8636cdbd, 0x74a73f78, 0x051fbe17, 0xc473daff, 0x70465ca6, 0x9c9af096, + 0xa7be87d3, 0xd3be025d, 0xa6f84dbe, 0x2726021b, 0xf28f89c6, 0x7795caef, + 0x9914c1ff, 0xc390d3ff, 0x4eff6bf5, 0xf993071e, 0x1b76e16d, 0x378893c7, + 0x7b78cc35, 0x249bc62c, 0x678b8c3f, 0x003f181d, 0xba0a76ba, 0x4b5d2276, + 0x9dc70dfa, 0xf8145fa0, 0xa997e986, 0xf4d6f6f2, 0x4b96dba5, 0xdbe5b5c0, + 0xb00eeb84, 0xbb5e297f, 0x32fc8e33, 0x263f385a, 0xfde12ae0, 0x58ffe09c, + 0xe10e7e70, 0xe1f5765c, 0x438e5cfc, 0xf090d7e5, 0xb48fa58e, 0x8eeb91f8, + 0xdf65a7c2, 0xe4c74f84, 0x0865390a, 0x16ad5e50, 0xe5f52fef, 0x812e57a7, + 0x4dbe57f7, 0xa6e16bbc, 0xfc45eb2d, 0xddfcfb56, 0xeef2989c, 0xfff1c0aa, + 0x7e605c5a, 0xfb555ef3, 0xaa4396c2, 0xdfde45f6, 0x411c565d, 0xadbff7fa, + 0x238c8278, 0x85697f4c, 0x5a8de30e, 0xae64f0fd, 0xe00068bb, 0xffdd96f9, + 0x5c7dfc3b, 0xca10dd7c, 0xec4bbaab, 0x7fb18be5, 0xa01ef8fd, 0xb99a2faf, + 0xded8f57f, 0x118e8dcf, 0xfe65e97d, 0x45731d79, 0x96fcd9d0, 0xced119df, + 0x73160f9a, 0xe96b38b4, 0xa4afee00, 0x0b9028bc, 0x4c6616b5, 0x5b507901, + 0xd73defcb, 0x89314062, 0xda07bf4a, 0x1f981ba7, 0x635d4fbf, 0x14cdf835, + 0x63df54e7, 0x57ef8b37, 0xd56494b3, 0x4bbd767d, 0xb77bf94f, 0xd1f1e28e, + 0x741daddb, 0xc1ce780f, 0x83decefb, 0x5bcebcbc, 0xe5d7f3c6, 0xd6ffc1fd, + 0xb3dc495d, 0x8c52ed14, 0x9e22280f, 0xe291877e, 0x167edae9, 0x7ae9dfb1, + 0xeccde785, 0x9297f9e2, 0x077f613f, 0x5efc25cd, 0x46befe0b, 0x3fd1b34d, + 0xeaed10b4, 0x375764bd, 0x885b5a8d, 0xaf1a6bf8, 0x0c2e627c, 0x5a9a6f9f, + 0xb5fd4cfe, 0x5e5b59f2, 0xe3f53fae, 0x2f4483d6, 0xac741cf2, 0xad754fd5, + 0xb8de757f, 0xe478a77f, 0xdafb3fe8, 0xb5f31cb0, 0x61ebfdeb, 0xeed681df, + 0x207fc87f, 0x8fd206fd, 0x484bf5a0, 0xf3bf2239, 0xaf0068b8, 0xc5054b33, + 0x97819839, 0x18aede52, 0xaf2f47d0, 0xf971701e, 0x27ff6eac, 0xa5cbe7cb, + 0xae0cfaff, 0x7f74b557, 0xc9cfc674, 0x5be92cdf, 0x30f3ff4b, 0x9fe60507, + 0x7dd0a4d7, 0xed15daef, 0x37ca31c6, 0xd655f7a7, 0x6e1cb9e3, 0xc570bd1a, + 0xf221c0fa, 0xbe74f437, 0x70efeb30, 0xe2439fa2, 0x78be89e1, 0xbc097adb, + 0xf136fd6d, 0x1e2f57d6, 0xf4cdf05f, 0x13d95322, 0xb1f4067b, 0x625ef627, + 0xcdbf7bdf, 0x37dc477d, 0x85d7a05a, 0xfe60d5ef, 0xf67de635, 0xd2fdf8f8, + 0xfa76bcba, 0x2a36001d, 0x6ef28098, 0xff3d1ee5, 0xcb83197d, 0xfdf11990, + 0xffcc33b3, 0x8ae3d21e, 0x41fbfcb1, 0x46e8bcda, 0xcabd2f91, 0x27ee83ba, + 0x2663bf6a, 0xc51baef3, 0x99efda78, 0x7bf2fec9, 0x99efda05, 0xf2201c9d, + 0x09584bad, 0xb8b943cf, 0xfa873d1c, 0x733e223c, 0xf256ebee, 0xc407042b, + 0x363bc8fd, 0xfb2f978c, 0x507ff1e2, 0x8f045ecf, 0x996ff6ea, 0x6db6f57e, + 0x4aed1f74, 0xc390f7e9, 0x2cb73fd5, 0xf243972c, 0xc93355e6, 0xf63df91b, + 0xa79e3b9e, 0x7cf508ef, 0x7b0e28c5, 0x8f71efa9, 0x13afc33b, 0xd7dc78de, + 0x8ebc0366, 0xff25e639, 0x1e23e8dc, 0xfd7b77ba, 0xf8cc2edb, 0xddfbc567, + 0xb4b75c7a, 0x137da467, 0x5ee25f96, 0xbaabc89a, 0xa577395c, 0x567fc5f1, + 0x8fde515c, 0x97f4673b, 0x781eefe1, 0x77d1c577, 0x9febb43c, 0x8bedcb90, + 0x6e13df58, 0xc84cf04b, 0x0a667185, 0x2bbf213d, 0xdfe7ad5c, 0xd6edef13, + 0xcd707f93, 0x97ebfef7, 0xed2e398f, 0xf7b26857, 0xc9973d46, 0xefc749b2, + 0x395494ad, 0xcf122f28, 0x942fe86b, 0xfbed43fe, 0xd65477df, 0xeb551d22, + 0x70bb76c7, 0xf5f28f3d, 0x5357c2c4, 0xfe45904b, 0xf9ac481e, 0xd994f69b, + 0xb297bf23, 0xf4915729, 0x09613f6f, 0xe972fbe3, 0xb9daffe2, 0x799eba65, + 0x23afd015, 0x7bb71f14, 0xe77fb719, 0x172a6eb1, 0x1e9520b0, 0x2c2fefc6, + 0x972a4e66, 0xc9953732, 0x110fcf0e, 0x60c63d2f, 0xbe9be51a, 0xf4e1b7fc, + 0xc69bb95d, 0xe24e63b4, 0x691b8ad5, 0x629ebeed, 0xd1eeff07, 0x8bbdbfce, + 0x3df3d9f4, 0x8dc965e3, 0x5b5c12c7, 0xc7c4a372, 0xe7a1537f, 0xd6ba96f7, + 0xb1a8be90, 0x3c6c3ef3, 0xd359bb8f, 0xc27f88f3, 0x8b7d3372, 0x3f189b94, + 0x8e89f11e, 0x54acbfe7, 0x9dbfbbe8, 0xd8b11d01, 0x3e796588, 0xceb61dfc, + 0x447dbc1d, 0x814fa243, 0x71d188fa, 0x448efdbc, 0x9937de1f, 0x97c402cf, + 0x89b6f10b, 0x7123ef1e, 0xabbf28b9, 0x5f241a0f, 0xbacbfe81, 0x04defc2c, + 0xf9420c0b, 0xa7e7885f, 0xfff3e728, 0x945efc15, 0x517de5cf, 0xb21fdaa5, + 0x79cb972f, 0xe072a3a7, 0x19af2840, 0x708fdae8, 0xdeea4a29, 0xfa2950f8, + 0xe30c7481, 0xbe8d9f32, 0xb298e29b, 0xe5476cdf, 0x05ef7c21, 0x7bf7e785, + 0xc37b88f7, 0x1916982c, 0x54764b0f, 0xc9e516fd, 0x897ec27b, 0x5dfc5705, + 0xf3947740, 0x2d17cca2, 0xf91b33c2, 0xef7d19e5, 0xd78505ec, 0xb86dcb3f, + 0x62959d65, 0x8fb45e07, 0x013c3b67, 0x04c8af9c, 0xfff5c2b8, 0xc6bfb887, + 0x2fd1739a, 0xb309e2ba, 0x0f8bed0e, 0x7de31d40, 0xbce10f9e, 0x7047e58d, + 0xf7f2c66e, 0xf2c66e70, 0x63373813, 0x9b9c29f9, 0xde765cb1, 0x66fd1f89, + 0xbeba06eb, 0xfd1e74e2, 0x12bd407b, 0x3dfe72de, 0xe9df9a26, 0x437c10f0, + 0xe8c5def8, 0x485f5bf7, 0x5d25660c, 0xf67ade84, 0x13d735fc, 0x3ca1af05, + 0xde7a255a, 0xd78149da, 0xd2061dc2, 0x819d85ff, 0xef11e584, 0x689a0799, + 0x1e76239d, 0xcff1c04f, 0x75f043d9, 0xe9e5b029, 0x0f375e3a, 0x3af8236c, + 0x0381ae1d, 0xe3cf88cb, 0xfcec2cb1, 0x3de31faf, 0xf29f182a, 0xe0947a22, + 0xd05e74c3, 0x070b43ec, 0x1217afb9, 0xff6237bb, 0xe3e67617, 0x30ee404e, + 0x474837ce, 0xaefdb44a, 0x62def5a5, 0xfde2960e, 0xe82e5ba0, 0x3b65e6a3, + 0xe704151d, 0x64de92dd, 0x97d05bdc, 0xe537dbc4, 0x4c78ed6f, 0x65053f7e, + 0xd2f503a9, 0x176809d7, 0x81fc88d6, 0x7e831dce, 0x0ecdf74b, 0x6fde19ea, + 0xf3524a2e, 0x1c818cdf, 0xb11cb24f, 0x7c46e4c7, 0xc4e7b0bd, 0x30befc20, + 0x32d067e0, 0xe072bf78, 0x73bf9560, 0x36afe8c4, 0xef42943f, 0xceadefd3, + 0x31aa5b61, 0x65ae664f, 0xa5b89bef, 0xaa4ff6f9, 0x61664f31, 0xcb007286, + 0x09bc8e45, 0xef231f98, 0x56192c17, 0x6a590071, 0xec86b3aa, 0x32140ab9, + 0xcaa1fa11, 0x4e3e2f12, 0xb251f52e, 0x23313eaa, 0x64fef55b, 0x7daa8147, + 0x54ebb0ca, 0xa9de72ed, 0xf7aa91ce, 0xf982928a, 0x7d839e78, 0x3fa5eff0, + 0x3e17bfc5, 0x9b91e762, 0xf4fa83af, 0xefa56fa7, 0xda20be49, 0xe558bfa7, + 0x00f47c43, 0x50604d3c, 0x83f51c9d, 0xc1c21f87, 0xfa85e734, 0x701e4f3d, + 0xbce32e39, 0x42738970, 0xcb1fefac, 0x0273dafe, 0xa31fcdc8, 0x797a2cdc, + 0xb4e31d96, 0x2afe8c2f, 0x9b4ff30b, 0x0fcfaa07, 0xc426e8b1, 0xb7e38a1f, + 0xb514f791, 0x7dd8c374, 0x39790e82, 0x8fbf30fd, 0xed72a577, 0xc8d7288f, + 0xfc15e05f, 0x7f8d4a22, 0xfce4c8af, 0x8fe85ded, 0x378f477a, 0x24f74292, + 0xf5bfe397, 0x4b677a61, 0x999fdcb7, 0x68bdcf42, 0x7f0a370f, 0x8503b3df, + 0xf7bf553d, 0x70d2ccfe, 0x89f35b3b, 0xaf767dea, 0x5f555eb2, 0x3faea797, + 0xb23eb150, 0x6c7b2c7f, 0x4c8ba3f9, 0xaf78119e, 0xfbfa8956, 0xa4f5a1b9, + 0x67b0b908, 0x13d9c905, 0xefd2577b, 0x6fdf6b64, 0x4fd0f184, 0x9e863cb9, + 0x8e69f295, 0x5c8f7f9e, 0xce4bbedb, 0xf3babce7, 0xa7b0007d, 0xb857ca7c, + 0xbfa0fdfe, 0x274914c7, 0x67bcc5fb, 0xbdf83d37, 0x676e012f, 0xd573f177, + 0x37ae44d9, 0xa67c770a, 0xecfea1d3, 0xd0abe9c7, 0x3ea1d01e, 0xf78ba9ea, + 0xa689fde2, 0x7bca3695, 0xbe0fca2d, 0x3b062967, 0x1f99e06c, 0xffcf0059, + 0x2350978d, 0x1e0f71f4, 0xf47ea0b2, 0x596fa767, 0x9c3c7487, 0xad5d19e7, + 0xdb051e7d, 0x4a80ec8c, 0x20162f2e, 0xc57d09fd, 0xdd355440, 0x0bfa42cf, + 0x85c20be5, 0x3d1dccf2, 0xfa09fdbf, 0x79710f45, 0xb9847e81, 0xacb80f64, + 0x0742ff6a, 0x83a15eff, 0x4ea8977f, 0x3f258f3c, 0x376fed56, 0x6af2f9e1, + 0x0cbf8fcb, 0x8ae7df14, 0x4f0e272d, 0xed363c01, 0x7a2af7e2, 0x67f706bb, + 0x0b437211, 0x7547a6bf, 0x7eb2dfc4, 0x093f4bae, 0x03ffe1f9, 0x461ceed1, + 0x00008000, 0x00088b1f, 0x00000000, 0x58b5ff00, 0xe554700b, 0xdef73e15, + 0x926c857d, 0x843c83cd, 0x1abbbb84, 0x6dc909a2, 0xa8f3135e, 0x6a32424b, + 0x0c226ead, 0x457a8b19, 0x6daf2045, 0x958a3682, 0xe0856e9b, 0x54eb4d60, + 0xa0e0bdf1, 0x8d3532b4, 0xe09064e8, 0xd6254652, 0x508ab5da, 0xa8d6619a, + 0xdd849431, 0x38e957c6, 0xeff9cf43, 0x10deecbd, 0x30da755a, 0xfff9cfe4, + 0x39fffeff, 0xe7fc79df, 0xf345301c, 0x9c00979a, 0x002b9fa5, 0x2a00fa7f, + 0xf3e47070, 0xedd00990, 0x1c45bfc0, 0x816abeeb, 0x4c471c72, 0x2dce1c00, + 0x13900f9b, 0xbb1f4efb, 0xcb1079fa, 0x078bf462, 0x76036bac, 0x79d8173a, + 0x1bfb0711, 0x48be464a, 0x8ea45a5b, 0x3334457d, 0xd10bdea0, 0xb3f22f3c, + 0x06730384, 0x9ccd07de, 0x23870bb4, 0x90f55923, 0x4107238c, 0xb11d94b1, + 0x700956dc, 0xcd1c7abd, 0xff0d21db, 0xd1302ec8, 0xf2a02d3d, 0x1fd57d7d, + 0xddf870cf, 0x9715918a, 0xc1f00720, 0x3c47d5de, 0xba2054b8, 0x412b7dd9, + 0xdf808331, 0x7b737aa7, 0x056bcf90, 0x116f66ee, 0x0e29d1d1, 0x97523fef, + 0x7639f9c8, 0x7ce9cffe, 0x6623ae5d, 0xc98fae6f, 0x5131ccb5, 0x2e789080, + 0x9e26ce13, 0x570c478f, 0xfa3ed013, 0x6fd02b39, 0x6c210005, 0xfa5dee14, + 0x99800c83, 0x22b0e055, 0xe009d7bf, 0x35e1a401, 0x9397606b, 0x2fbfc7c4, + 0x50b95c47, 0x2e99f11a, 0xc88b54b6, 0x2fef5677, 0x871e94c0, 0x9bd1ea1b, + 0x8e8bd314, 0xe87cf9e3, 0x3c86d6f7, 0x6eccdf28, 0x6ce2b24e, 0xe85a24a7, + 0x53dacefc, 0xf7895ebf, 0x89048677, 0x0f567e43, 0xf8463c1f, 0x041a6e0d, + 0x4300c5d3, 0xb8d9869b, 0x0a0f66da, 0xf1ae4cc5, 0x97290170, 0xd7ad7263, + 0x33a72668, 0x7b931eb6, 0x9e6fdd16, 0x00bb473a, 0x2ef6489e, 0xfc36f927, + 0x2b23b3f4, 0xb52ddb89, 0xa08513a9, 0x18a2dada, 0x001625ff, 0xdd1ff23b, + 0xc9d81895, 0xad7b41ee, 0xc9ebd98c, 0x7b47f903, 0x5be4fd70, 0x87ae6666, + 0x7d3d1eea, 0x761bd237, 0x4f9c3225, 0x439281a6, 0x07173beb, 0x0770dc14, + 0x21eb1d1f, 0xa49287dc, 0xe9feb85d, 0xd85f8b53, 0x17baf483, 0xcd88912e, + 0xd768edae, 0xb9a7f788, 0x4bfcd048, 0xc83bec39, 0x635def56, 0x9e15ef53, + 0x2d50f25f, 0x2e9f3fad, 0xfeba3dd1, 0xf04a9f26, 0x05f5e200, 0x681d8b04, + 0x6538a77a, 0xdb83c782, 0x38273df8, 0x8b26cbb4, 0x7288a77c, 0xf7fc7fad, + 0x3ca0d41f, 0xf0ffcf0d, 0xbf91cbd1, 0x07cdef75, 0x57a6273a, 0xb5ba8fd5, + 0xaf851afb, 0xaf68c393, 0x29ddfb33, 0xa7c31450, 0xe382776d, 0x2b869b63, + 0x4c18effe, 0xc35dd035, 0x0b8f8e39, 0xa81b7462, 0x673b4318, 0x35da7922, + 0xe5e76abf, 0x0e8fa48d, 0x40fb3308, 0x57642dc4, 0xa1e702a5, 0xd07d1078, + 0x6d9ff0ca, 0x3c8b0f67, 0x1e76cbb3, 0x93f441e4, 0x65b074d2, 0x2acadf93, + 0x1707917e, 0xb1007cef, 0xd34c4179, 0x65bf3efd, 0x8e7dbc49, 0xf64abe75, + 0xeccaddb9, 0x98012a73, 0xe7bece5f, 0xed953119, 0x9cfb635f, 0xdf3e83f9, + 0x234ffbd9, 0x009e045d, 0x17ea5f7e, 0x638c7ecb, 0xbe97a68f, 0x924eef6c, + 0x2fe0fd6f, 0xe19b795f, 0xc75de4f9, 0x76c3dee9, 0x5b783fa6, 0x41c23dc5, + 0x9fa1c92b, 0x0516c6b7, 0xbbf11953, 0xcfafdd83, 0xb4763c4f, 0x27f3c658, + 0x062c2e5e, 0x42d5e7b4, 0xc409e268, 0xe85274e7, 0x871c46c4, 0x5325ff0e, + 0x6fcf9fb6, 0x3b0cef7b, 0x38a7a74f, 0x93b50e35, 0xb4ff381c, 0x322c3bcb, + 0xc3e3573f, 0x184b03f8, 0x51428d7e, 0x723fe90a, 0x6cdfc8d2, 0x75f3f53e, + 0xf5f3f4fe, 0xfa686f7d, 0x8a84b69a, 0x35be70d3, 0xbeb4644f, 0x2a1c9d3e, + 0xbcd3b54e, 0x8697dd43, 0xb5bd9c74, 0xdfa89fd2, 0x6dc61b56, 0x95b5afe4, + 0xe6c0fc93, 0x389b8a15, 0x6f5c6506, 0xe1a7decf, 0xda1b5e06, 0xcecd0af1, + 0xd99d2320, 0xed5072dd, 0xb716857a, 0x3341806f, 0xe31cbfa0, 0xa0b4eefb, + 0x3e0d4dfd, 0xe3e3966c, 0x3f9c72ae, 0xe3edf85b, 0x050f52ae, 0x1da7bf14, + 0x412f8576, 0x133916bf, 0xb90b97db, 0xa5d70fb4, 0x3281da20, 0xc8fc9564, + 0xf7bc33cf, 0x6edfe114, 0x1f931609, 0xc33ddfe8, 0x8a7e6ccb, 0xe90d7b7b, + 0x62c14c1b, 0x5491c38a, 0x3829700b, 0x1e4297ce, 0x02f943c4, 0x98895c58, + 0xef0875a1, 0x7de06f2d, 0x3c58f643, 0x7967e3d4, 0xae23ce21, 0xfbaf3475, + 0x794dda2b, 0x4c7f7189, 0xefdd231e, 0xe57c99e4, 0x706fbce9, 0xd5c97f0e, + 0x2830fdd6, 0xbeacfea8, 0xee1a35a3, 0xe2811e00, 0x7746a74b, 0x923e716a, + 0x9404536c, 0xea3f66a7, 0x531ae905, 0x188d20f0, 0xf517a005, 0xf5410d5b, + 0x3c6361bc, 0x156437a7, 0xd90b977b, 0xa9ad5cbb, 0x03e7337b, 0xde8dabd2, + 0xe01f1c2f, 0xdf8d0242, 0x3d1b2887, 0x88d130e0, 0x32e3606a, 0x09b1b2f0, + 0x12bc6c7c, 0x3578d806, 0x1af1b20c, 0x2e11b108, 0xbd81fa0b, 0x263af707, + 0xab863df0, 0x5de9e0ee, 0xbe095f2e, 0xe3c3fcb9, 0xc2feed54, 0xaf946078, + 0x3478eefc, 0xf8cd9c81, 0x0b2e10ba, 0xebdd980b, 0x3ec958b8, 0x0804bbf1, + 0x0758d364, 0x15ce7661, 0xce78c864, 0x444d1052, 0xd1878037, 0x8f10df8d, + 0x926cb0aa, 0xa5c0e68b, 0xb93b6e61, 0x03e5c34a, 0x4c7e72c2, 0x4539f75f, + 0x037aeb46, 0x83de93e4, 0x7909f5f3, 0x627967c4, 0x862267fd, 0xdfce358c, + 0x47184d7a, 0x7beacbcb, 0x64ff48dc, 0xae953ec7, 0x85c97fa9, 0xfdceddf4, + 0x5f525d2a, 0x2e309666, 0x65de2373, 0xf830db48, 0x824e2027, 0x1c2a805b, + 0x62e484e5, 0x0ab3bf40, 0xfa133ece, 0xb0237595, 0x00272338, 0xbb988a84, + 0x49f90267, 0x6ebf9aab, 0xdb7aa870, 0x27659166, 0x0b61ddf2, 0xff888b26, + 0x2cc6be86, 0x58b72f7a, 0x9c3ff3d4, 0x8abe162f, 0x3ef15ab2, 0x4e4c695b, + 0x9012575c, 0x4f62730e, 0xff7633af, 0xd3afb837, 0xfbe17159, 0x3dcb6516, + 0x7cb60eb4, 0xd02ffd20, 0xa1a1f3de, 0xe9e2491a, 0x3fbb077e, 0xd3df949c, + 0xd95d4b8b, 0x7f68fbde, 0xbbb54924, 0x152f48fb, 0xe37f1e17, 0x9cebdcf4, + 0xf7d23e63, 0x8a412bd5, 0x23209f43, 0x9cafce78, 0x75f69fb2, 0x32bce1f1, + 0x12cfd7d4, 0x4ec8584f, 0x50e63b74, 0x7e50ab79, 0x160207bf, 0x8eb51fe6, + 0x3b98f973, 0xdb9107e6, 0xa5c43cf1, 0x306debdc, 0xab6572e3, 0x558d10ef, + 0xae0340f2, 0x84033dd0, 0x5d10977f, 0x3a717643, 0x27cb3df5, 0xaa174fcc, + 0xafc5a8f6, 0x1ba30391, 0x17a4a817, 0xebb0fce2, 0xff2f99c0, 0x9aeefa86, + 0xbdb44bb1, 0x3d63ff66, 0xfee80f54, 0x21a0d987, 0x58fee8be, 0x0a0d6c3d, + 0xb7a5df6c, 0xf7bafed3, 0xa714dcc6, 0xfb0b18af, 0x8c8e5d29, 0xfaa05d1c, + 0x7fc79e85, 0xf7977dc5, 0xa0a051a4, 0xcbd9798e, 0x728ac042, 0xa17e5375, + 0x9fd20ad1, 0x526ed0da, 0x9ec7bf68, 0xd5ad7283, 0x7d18eae4, 0x097542dd, + 0xbc90a31e, 0xd7fe34eb, 0x35eb793e, 0x0bae2f94, 0x00ef6398, 0x0b1b6ffe, + 0xdbbe266c, 0x29e71b76, 0x5dfc9262, 0x94edf7da, 0xef29b9af, 0x82ebee33, + 0xf8a0ff6d, 0x9c6c35d5, 0xca4ce43f, 0xded57a60, 0xccf2d03f, 0x243db43b, + 0x7fd59d9f, 0x65158096, 0x47aa7eeb, 0x6b9d1072, 0x8dbc5897, 0xfbf10fde, + 0x6674c9e1, 0xaedfba23, 0x3f9607eb, 0x3c9638eb, 0x3e90f567, 0x62cb9e4a, + 0xf3e63179, 0x78c11f2c, 0x04b4ecc2, 0xeed0e131, 0xba8d4c5e, 0xc5e7bc78, + 0xf2890291, 0x3c9b7ded, 0x31c5d1f0, 0xbf7cf4fe, 0x60d3d851, 0x36ea3aa1, + 0xaa70a3ac, 0xbf59f47b, 0xadeee90d, 0xda103b40, 0x9bca1482, 0x100b0e2a, + 0xf02073a0, 0xc28e2d70, 0x649e2d3c, 0x871f7e63, 0x0f388247, 0x58fcb8c4, + 0xe9aad7c7, 0xcd20b12d, 0x5d249eb0, 0xa53ef864, 0x5efc65ca, 0x2a8a84f1, + 0xdfab9e29, 0x332e7aa7, 0x3e73f7ec, 0x13364829, 0xafb87fc6, 0xceb18356, + 0xc21af6be, 0x52cafd29, 0xc92dfec3, 0xbec9874d, 0xcd373f6b, 0x409f03b2, + 0x06135776, 0x52f51c78, 0xaf5c653d, 0x92007f78, 0xf784fef1, 0xf606f2e3, + 0x5bca015b, 0xde71a2ac, 0x62ecd2e2, 0xb78c2c21, 0xaaee188b, 0xf24ccfdd, + 0xe12a2ecc, 0xcb6b47e2, 0x04336709, 0x9b71f3c4, 0xdbf691a1, 0xaa2fcc2d, + 0x8a247b47, 0x46bdf347, 0x8d5ab3fc, 0x46c8e7f8, 0x35ac17bc, 0x33eb9de2, + 0xd7a8bde2, 0x3153af88, 0xafeee7e2, 0x64bfec36, 0x2f40dea0, 0x61b57ede, + 0x1681a5ff, 0xfbb85d03, 0x25fec306, 0xeb0dab83, 0x0debc325, 0xcd9dbaeb, + 0x05ef83b6, 0x19d967bb, 0xfe9c7c0f, 0x76eb3d75, 0x1ef87650, 0x6fff3dc3, + 0xfe9137fd, 0xfa6ae029, 0x81f2d46f, 0xb7279277, 0x9b5ebb91, 0x73b5c6a8, + 0x335a84fd, 0x2cfed7ab, 0xd12437a6, 0xf37ded5e, 0x041bef6a, 0xf07b32b7, + 0x0a5a543a, 0x9e288749, 0x36f31e95, 0x61e55f10, 0x131421df, 0x1a07272a, + 0x07bf6852, 0xdaa64744, 0xd7fda272, 0x32607155, 0x99d215f8, 0x57af3c31, + 0xdc1484fa, 0xc075f35c, 0x392dc2cf, 0x1fac657d, 0xefa955c4, 0x0127b345, + 0xd4b8714c, 0x48efe955, 0xc74fe311, 0x611fef5f, 0xaa16003d, 0xc05b7807, + 0xdf2b9cef, 0x2c0bb691, 0x7e59931f, 0xb32726f6, 0x5b72d2be, 0xfbe28f28, + 0xe7d92ca2, 0x9a76b8c2, 0xcf964497, 0x093f6171, 0xd8c12115, 0xecd755a3, + 0xcb0e3aa1, 0xdf08b859, 0x59babe4b, 0x1df633b1, 0x6cb54ae1, 0xba9f9fa6, + 0x885dbbe4, 0xd8e738ff, 0xbedf865c, 0x8f2a7d53, 0x80ab2fde, 0xff529448, + 0xd691b3c4, 0xb24df5cf, 0xb78c3e50, 0x08545e61, 0x8e1ee50a, 0xe8a721d5, + 0xfce3cbb0, 0xdeccdfb7, 0xb2ead02d, 0xf4bc351b, 0x76956cba, 0xb11e38ff, + 0x8df9e316, 0x5c326fc3, 0xb4a7b2da, 0x724f943e, 0x2eb7f9e0, 0x5d5297b4, + 0x49329e0a, 0x3af5e7ad, 0x6df0816d, 0xaebd55de, 0xb6fed0bd, 0xbd4349ec, + 0xe7d27b0c, 0xeece47ec, 0x56e4c57b, 0x9adf1fcf, 0xf1a1dec8, 0xbfacb9ad, + 0x34ff3b18, 0xdf46ff3b, 0xb93b06bb, 0x06aff7b9, 0xf945bbfb, 0xce1eb0d0, + 0xa0179a88, 0x7257e1fc, 0xf8847e9a, 0xad6cbf4d, 0xf5157aa4, 0xeb8ae836, + 0x5c1f8413, 0xfbee8cbc, 0x9dfe72ef, 0x29b63be1, 0xba6efac4, 0x1d36279c, + 0x53787463, 0xe5b38d98, 0x7d5bebd4, 0x0a01fcb4, 0x728e5f28, 0xfab9a4f3, + 0x356eb535, 0x9a5b1fdf, 0xf1ef4f59, 0xa4c5ae58, 0x9d2af98e, 0xe9536553, + 0x8c692ba6, 0x54fded98, 0xe0718edf, 0x561ed0e1, 0x6eefe271, 0x64cf73c1, + 0x3b227fca, 0x2d1f5aef, 0x743fa136, 0xe26f8495, 0xa7f79f50, 0xe79a21ca, + 0x49cc1930, 0x53e67c63, 0x2bc930dd, 0x82c61cc5, 0x34b76794, 0x364fa89b, + 0x2f4d394f, 0x6fedd5b6, 0xd2607aa6, 0x9647faa2, 0xc3f98dbb, 0x9c7c8741, + 0x042f3fd9, 0x7d956ec9, 0xb317605c, 0x25a5b0b7, 0xde8f2629, 0x9b7aa1af, + 0x82489bea, 0x38bb8e3a, 0x3447cf86, 0x7fc6c456, 0x7d4eed51, 0xf9683755, + 0x2e7cb6dc, 0x809ff583, 0xf3ef02fc, 0x1ca21e50, 0x99b2fb50, 0x35e50328, + 0x7ab1bd98, 0x6b35f4a1, 0xde87e290, 0xe5d2f9d7, 0xb865e764, 0xc64d7ed5, + 0x9f80d643, 0xbca1efbd, 0xc073e466, 0xf90ef98c, 0xfac0fbf7, 0x0fd4d368, + 0x97cbd38b, 0x874eb52e, 0xf5d400db, 0xdeb41dac, 0x827e3a31, 0x2ed3c9e2, + 0x3866e1d9, 0x4f149588, 0xb20f923a, 0xd87fef7c, 0x59b8b3f7, 0xf35612fd, + 0x77efad53, 0x6fa67c21, 0xc4523d0f, 0x1e525cfa, 0xa5f3a1f1, 0xa2e3a9f3, + 0xe73b19f3, 0xdebfdb3f, 0x89e9d2bf, 0x93e4b6c7, 0x6afe213f, 0x6ee0515f, + 0xfbe3996e, 0xd7aab732, 0x1e6f6cbe, 0xa7debfdd, 0xf662f7f6, 0x71d77031, + 0x76a3878a, 0xf42f0f16, 0x3b396cfd, 0x3c328c0e, 0x489bce50, 0x8b3938be, + 0x1e9ce5e2, 0x9148fa39, 0x8be5ddf8, 0xbf5886e4, 0x4ce3b235, 0x77df889e, + 0x18f37fec, 0xde8757d9, 0xec6bdf77, 0x61e75827, 0x57369a9d, 0x995f1cbf, + 0xaacbfcb8, 0x64d0bf7f, 0x6f131efc, 0x930f47ea, 0x829e535f, 0x83d92eef, + 0xd5eeeefe, 0xfc2e17ea, 0x74fb8b06, 0x66fdd91f, 0x9fef614e, 0x73f0afde, + 0x6e91bef8, 0x1ef61ee5, 0x12ec8b08, 0xb45eedd9, 0xbbd910c1, 0xfac893c9, + 0xe5eab3d4, 0x72f22dd7, 0xef0db7b2, 0x3d5167d6, 0xd5d6f43d, 0xbea65d5a, + 0x5d9a1547, 0xc4fdd056, 0xb30a517f, 0xbf8d72d7, 0x3de61b4a, 0x8aed0a2e, + 0xb425f6a0, 0x37d6c73e, 0xbfdcf50c, 0xb47f5701, 0x001af055, 0x00000000 +}; + +static const u32 usem_int_table_data_e1[] = { + 0x00088b1f, 0x00000000, 0x51fbff00, 0x03f0c0cf, 0x18354d8a, 0x18f48418, + 0x19f48c18, 0x23e99618, 0x0f8969c4, 0xdfa65173, 0xc181859c, 0x81ad8812, + 0xdf8816d8, 0xbc303231, 0x7f5e2467, 0xbd8208a3, 0xa181805f, 0x076fc809, + 0x0c4229d2, 0x7640e90c, 0x055f1033, 0xf1023ff2, 0x2d3e205f, 0x2a20c0cc, + 0x0c60c0c8, 0xdc4032c4, 0xfcdf8222, 0xa6f20256, 0x44fca8c2, 0x10afbe34, + 0x840bfd7e, 0x23afcbf1, 0x6b0d8f20, 0x1f1f928a, 0x1de81479, 0x8ea7ec08, + 0x0caa9e16, 0x18d56b0c, 0xc542be18, 0xd9e491fd, 0xa163f981, 0x295d842a, + 0x0930c0cf, 0x8ea01728, 0xa02adcdd, 0x9ca064fc, 0x0f8406b0, 0xa8580a00, + 0x00036810, 0x00000000 +}; + +static const u32 usem_pram_data_e1[] = { + 0x00088b1f, 0x00000000, 0x7de5ff00, 0xd554780b, 0xb3dae8b9, 0x24999ef7, + 0x42499333, 0x49af0842, 0x701a8802, 0xb15e1008, 0x9441024c, 0x420a03a8, + 0x84089c45, 0xd112f210, 0x03b39f43, 0x4f6950f2, 0x0f52d62c, 0x89e0a0ea, + 0x0201b41e, 0x60e8188d, 0xda2d43c0, 0x3eb01160, 0xd5e4013a, 0xd1500c90, + 0xd77af4b6, 0x67b5afff, 0x4899def6, 0xedce78f4, 0xba7c37bd, 0xff7af6b2, + 0x7faff5ef, 0x44e648ad, 0xf2120642, 0x244cfc25, 0x084880e4, 0x3b4d1d19, + 0x8a3a690b, 0x3592e510, 0x242045b0, 0xa7eff7b8, 0x2e422f49, 0x5974ce34, + 0xb8290932, 0x844e0d64, 0x6020a07c, 0x7693e5a1, 0x6890efbe, 0xa29dcafd, + 0xbda6e504, 0x63bed871, 0x7c8010a3, 0xa7f5a5b5, 0xbc3e6813, 0xd02f2453, + 0x66d049ae, 0x9c846922, 0xe3f612b6, 0x34be63b2, 0x372b658e, 0xe3079bed, + 0x48593595, 0xba7f6d1c, 0x7e40f451, 0x402116e9, 0xaf9578e8, 0xd06731af, + 0x840516fe, 0xcd173886, 0xecd2796f, 0x62b213b2, 0x908e87ef, 0x7ef3908d, + 0x7199712b, 0x390d651d, 0xb6079484, 0xeda0c94d, 0x6e0ab7cb, 0x7cbfed13, + 0x980ec5e3, 0x3ca3795f, 0x2dfda458, 0xae204fa9, 0x2fec6ca1, 0x72d78c09, + 0x29dbc712, 0xcaf1820f, 0x26643eae, 0xf653ac22, 0x3a4abb40, 0x3ab7580f, + 0x06ff79ee, 0x67854f1c, 0x3c74cbe5, 0x35eaaf5a, 0xac4b0dc1, 0xcc1f1132, + 0xb8f5e3a3, 0x60da2fd9, 0x21e6b57d, 0x4a3aed76, 0xca3ac176, 0x53cc9b03, + 0x4dbf306c, 0x689cd2e6, 0xffea4b7f, 0x0dbf3f4d, 0x9a7dbdd9, 0xde7a6372, + 0x243a414f, 0xc4272f9a, 0x25fb40d3, 0x7d3cc052, 0x47fbf458, 0x7be21242, + 0x5c48bd49, 0x14ff68d6, 0xd2a484f3, 0x7f4fbfff, 0xf65070a5, 0x325b03d8, + 0xea5b78a3, 0xf1459c04, 0xf1c9c976, 0xb4f38528, 0x4fe9abfd, 0x3e741f01, + 0xa6277e75, 0x63a7f33f, 0x85df94fa, 0x3fda7b70, 0x7e0dd314, 0xc67f7e37, + 0x8dd3163f, 0xcfa60f7e, 0x1a62a7f9, 0xdeb17bf0, 0x98d9fe0b, 0xf0fbf66e, + 0x32fe4bfb, 0x35fdeb4c, 0xff15fdf8, 0xfab74c72, 0x9afefc15, 0x0da62d7f, + 0xb74c3afe, 0xda68be03, 0xbd600fe8, 0x4c7afe5d, 0xf80dfc9b, 0x09bfb77d, + 0x8e1c75d3, 0x20527c8e, 0x3c383851, 0x4ed149c4, 0x053d8b92, 0x7b27cd32, + 0xae6d3e59, 0xf9a66052, 0x53cd1f34, 0x045464b8, 0x9f342c0b, 0x07cac351, + 0x5a1490fc, 0xc2807e69, 0x79d6b3ca, 0x3e68e30a, 0x0f958eab, 0xc614a8d9, + 0x0090fcd3, 0x6b61bf2b, 0xe68130b0, 0xe560686f, 0x24c99bc3, 0x0f0fcd1b, + 0x21ee7cb2, 0xcd3b24cf, 0x7cb2b6e7, 0x24ca47de, 0x85e7cd07, 0xedf1fb58, + 0xeb65d101, 0xb2ed878a, 0xb8a13e6b, 0xeadca8da, 0xbcd1c691, 0x7110f5d9, + 0x3328f853, 0x0a1f523c, 0xe583d90f, 0x2c5ee541, 0xb07b346f, 0x01653dfc, + 0x3ec977e6, 0x54a53f2c, 0x87d9bcb2, 0x479457e5, 0x2b24df30, 0xf5ad6e58, + 0xc159bcb3, 0xb5da8cf2, 0x396effd8, 0xb539e580, 0x6ef9624f, 0x7fcb0073, + 0x9e33e8f6, 0x52bf34c9, 0xf40d3df0, 0x9232d348, 0x90d4f40d, 0xb4f4a5ee, + 0x81b3205a, 0x440c7f7e, 0x7572e947, 0xe1f2331f, 0x5ef277f6, 0x9fc5fe04, + 0x7d2f905e, 0x6c4cf1e9, 0x23f63cff, 0x6bc47ed3, 0xeefb93f7, 0xb93f5d58, + 0xfda996ef, 0x95bd43d4, 0x67eb3d71, 0xf5e3bbfb, 0x5cb779f3, 0xce1b67ed, + 0x75b3dec7, 0x5f3efee5, 0x57df9f3f, 0xc6ecfda8, 0x6cf524f9, 0xebef8d3e, + 0x7ef8d3e1, 0x382d3e04, 0xcd9ed49f, 0x3d51d467, 0x8d1d467c, 0xf610e7c0, + 0xfd67a7d3, 0xc3d51e34, 0x0468f1a7, 0xbae3ef3e, 0x5d6cf7fa, 0xe1e98ea3, + 0x0458ea33, 0x7ce09f3e, 0xcfd67b32, 0xf0f58fae, 0x0471f5d9, 0x9fb0673e, + 0x575b3dc1, 0xf87a27de, 0x81127de4, 0xb9fb184f, 0xecfd67be, 0x9f0f44fa, + 0xe0449f5d, 0x67ec57f3, 0x95d6cf58, 0x7c3d27f7, 0x8114fef2, 0x7e80498f, + 0x3e6cf446, 0xe1ea9f4d, 0x0469f4d3, 0xcfd8093e, 0x67cd9ee8, 0x7c3d69ec, + 0xc08e9ec6, 0x780097a7, 0x7eb3d71f, 0xe1eb4e9a, 0x023a74d3, 0xcfd8fe9f, + 0xd75b3dcd, 0xf87a33d8, 0x81133d8c, 0x575c10cf, 0x987be501, 0xd8fda10f, + 0xf767efbb, 0x767c3d05, 0xe7c0885f, 0x88a7ec26, 0xed7d93f6, 0xe877c67e, + 0x23be33e1, 0xd8b19f02, 0xeb3dadcf, 0x1e877767, 0x223bbb3e, 0xf84029f0, + 0x75b3dedc, 0xc3d4ef8d, 0x83277c67, 0x3523c8cf, 0x9cb41c93, 0x48b742ea, + 0xf7684c9b, 0x179a0478, 0x3a2f2c9d, 0x12ec04dd, 0x4837b551, 0xeda447ab, + 0x72935b6d, 0xbb5a271f, 0xac3a70a3, 0x31ad4ecb, 0x3891ddad, 0xe7675e36, + 0x75927924, 0x19a994f9, 0xdea9faba, 0xef795d2c, 0xcae837d9, 0x7572f8fb, + 0xe365bef9, 0xd7fbf575, 0x03f2ea14, 0xaba6df97, 0xd0cca99f, 0x7ed7b3e5, + 0x707f5757, 0xf2ba03dd, 0xeb9436eb, 0x2c0fafca, 0xac6fe5d5, 0xfeaebeff, + 0xba1586b0, 0x1e9a9bf2, 0x088f95d7, 0x1f974cfe, 0x5d19f079, 0x2fadd1fd, + 0x1cc7cae8, 0x3e57457f, 0x975db42e, 0xb776709f, 0x39b3cec1, 0xf3c8df4f, + 0x613dd022, 0x331f7f76, 0xbb417bda, 0x0ce6f319, 0xfbf1da1b, 0x53aea5ec, + 0x37e6bf14, 0x517abbe7, 0x094e02fc, 0x1905ebd5, 0xe885d765, 0xfbc647f7, + 0xefd273ae, 0x377d988f, 0xa7d86339, 0x92041e94, 0x04cba90e, 0x8d7cb1a9, + 0xb0b1e8cc, 0x6d21d5ef, 0x29b57db4, 0xe689243c, 0x1b0589fb, 0x139f7e80, + 0xf1a7484c, 0x7a81a922, 0xfb8216f1, 0x79993582, 0x7a1a2a2f, 0xf29fdb5d, + 0x77ed10a1, 0x074becad, 0xda85e33b, 0x21d80ac3, 0x75d3fbab, 0xa2f21065, + 0x0ca83870, 0x97fbeda2, 0x7f68fba6, 0xd3b53316, 0xe99be3b5, 0x7e3839f8, + 0x5aff8c3d, 0xb25be337, 0xb7c6eac6, 0x8dd3280e, 0xf1d3356f, 0xa81ed49d, + 0x4f8f80fd, 0x909e3091, 0x3807c21d, 0x194065be, 0x4cc6bf8e, 0xf1da2bf7, + 0x37e323e3, 0x85ecbf01, 0x58c747f1, 0xfd78d67f, 0xeb9407fa, 0xeb666fd7, + 0x8db6b37f, 0xeb8f1f8f, 0xd8da116f, 0xb39407fa, 0xbf585bf5, 0x111df191, + 0xf5841ff8, 0xfadddbbf, 0xebf5f3b3, 0x5fa1581f, 0xff8d85bf, 0x3e39ed5e, + 0xffc70dbe, 0xad8e7083, 0x8e05607f, 0xdcf8b66f, 0xbee63f40, 0x3a0135f1, + 0x0547e93e, 0x17206f53, 0x43a40e3a, 0x13512993, 0x0b2113f2, 0x3c48f1e7, + 0xf12bb7a3, 0xde50de94, 0x049df828, 0xa3cb64a8, 0xeb4e2efb, 0x9816b64b, + 0x39612e41, 0xe42cafdd, 0x24d05d53, 0xa7937d22, 0x74c1812c, 0xa24d1dbe, + 0x4f05f902, 0xf9001cdd, 0xf7216d57, 0x449da17b, 0xd3fdf082, 0x417b0f9f, + 0xba632ebb, 0x1d3e4eb0, 0x645bf0d2, 0x8648551f, 0x15f9d0d6, 0x8e8c1101, + 0x7dd04fe6, 0x8bfba110, 0x833ee88f, 0x293c9250, 0xa13ef1b3, 0x87c825fb, + 0xca097ee8, 0x76c5a909, 0x3fbcf144, 0x4bdfce88, 0xae0f1fd4, 0x29641ef3, + 0xf8c49fda, 0x213ac4f7, 0x7fb8f800, 0x7e050279, 0x4a253e74, 0xd74f2e8a, + 0xb7c3f587, 0x0417810a, 0xf007c3ec, 0x23fbce99, 0x9f9a5f30, 0x8e6d64ed, + 0xa1f7f451, 0xb6bf9828, 0xb445c52f, 0x4788bb9f, 0xcfdb4dee, 0x1322565c, + 0xd0b97013, 0xcfd0297f, 0x196e997c, 0x2a4a7e01, 0x41c4e1c9, 0x275dfbe7, + 0x47ba7feb, 0xccd2153e, 0xf56cb667, 0x667ce978, 0xff388897, 0xcbeaa6bb, + 0xc137b8ff, 0xd34e1a63, 0x9c71ebb5, 0xf97d5e99, 0xf9f5b33d, 0x9e7d3e39, + 0xf4193dea, 0xc665bdde, 0x742c14ef, 0x7023739d, 0xf3a513a5, 0xe1c38fbc, + 0xd1591abe, 0xadb615e1, 0x1438396a, 0x85d7047c, 0xf5aec5ed, 0xcfae5fef, + 0xfcfa2897, 0xfe86b5fc, 0xe69cdd39, 0xf4013ff8, 0x4033d341, 0xa79e141f, + 0xe5447d38, 0x663e9eaa, 0xe8c19645, 0x69c75d43, 0xf4e0a189, 0x0b1f4646, + 0xd36212eb, 0x1e844943, 0x52fa5a3c, 0xa71e61e9, 0x3d398f87, 0xa7a0da2c, + 0xb02439ab, 0xbfb69d2a, 0xc43edd77, 0x84a151d3, 0x540fc3d1, 0xe8e9087a, + 0xc1e9c7c1, 0x9c79bf88, 0x8f7de61e, 0x9f1183d1, 0xa10f4e21, 0x9265970d, + 0x14af15d5, 0xc53cba0f, 0x4eef0183, 0xc503d033, 0x787a4c47, 0xba6eb220, + 0xcf9f9a70, 0x8be0bacb, 0x679603d3, 0xc209d801, 0x7767db09, 0x84e54fad, + 0x4368bf2e, 0x3757fc6c, 0xd29ca415, 0xe1b2abcc, 0x9a5394d6, 0xa7ea4b7a, + 0x038bf2eb, 0x17f57473, 0x95d1286d, 0xac5bac2f, 0xf6bf9f2b, 0x44be5d41, + 0xfeae9ef9, 0x756bcbfd, 0x3cd5f7e5, 0xb7bf2ba6, 0x7e5d49ec, 0xba97ef8e, + 0xdeccf7fa, 0xe99f2ba4, 0x7e57597d, 0xba6dd4d7, 0xebcf74fc, 0xbda6faba, + 0xf409dfd7, 0x24547f98, 0xf29c7f60, 0x4fee90bb, 0x7a6287fb, 0xbe46efd6, + 0x8b1fef38, 0x96a6a1e9, 0x956813f5, 0x13b3c2cf, 0xa59fd309, 0x2d908924, + 0x6bb5bc2b, 0x139f41f3, 0xaf2fbbd4, 0xf4ab5598, 0xe4c0d2a3, 0x6f173842, + 0x48e09330, 0x4a500442, 0x18b0fc7c, 0xd10fcf2d, 0xcbee94f2, 0x3148378b, + 0x5243f3cb, 0x7fab7ecc, 0x19d03256, 0xe5133fc3, 0xec17d267, 0x9f6e4ea3, + 0x042bcb1b, 0x277ed5e2, 0xfff20564, 0x2b9fae45, 0x544e4ccc, 0x4853ef6c, + 0x0e0f901c, 0xf1aaf9a9, 0xf573281a, 0xd6c8fa06, 0x0da2f1f1, 0x3ce4ea37, + 0x2a6def01, 0xdd48d9d0, 0x13f525f7, 0xf7daed74, 0x2aef3889, 0x40e32190, + 0x4d5b7a7d, 0x2d8397a0, 0x061aee03, 0x361cf4f3, 0x4a6abc81, 0xddb1fb45, + 0x94e5353f, 0x62f47804, 0x1b3fd67a, 0x1f7ed3d3, 0x65fca7a6, 0xd7f09e98, + 0x2ff21a60, 0xbf13f4c7, 0xfe47e982, 0xd1fe98b5, 0x71e9875f, 0x8f4c06ff, + 0x1e9803fa, 0xfa63d7f1, 0xd301bf9e, 0xa6137f56, 0xa60f7e1d, 0xf0a9bf2a, + 0x59ddd230, 0x03cfa7ae, 0x9d057dfd, 0x4bfd365d, 0x517edaed, 0xc57cfb3a, + 0xfc956a8f, 0x1bc5bf68, 0xd24e9c2c, 0xbff0f474, 0x068c8740, 0x7a70b17a, + 0xbc5e5d89, 0xf2cafe41, 0xb31c90fc, 0xfe17eaff, 0xb46de87b, 0xdfa3d989, + 0xf4a2de94, 0x4f40d7d4, 0xa7a2d7d9, 0x9474710c, 0x9c9b469e, 0x7a71ff4c, + 0x11d6027a, 0x0b71ff63, 0x1aa97518, 0xc093cebb, 0xdcfcd9fc, 0xccb45a81, + 0x5ec7cd9f, 0xa2b6eb49, 0x0a1817fd, 0xf434be78, 0x5fc0436f, 0x5538e97f, + 0xafdd9994, 0xdd2f48cf, 0xfb83ddc3, 0x5500d2a0, 0x96bb23a2, 0xb833c5c7, + 0x54c899c6, 0x63c84b92, 0x3f725f83, 0x89798390, 0x80fb4324, 0x463dba7b, + 0x06a6d4bf, 0xae0b5ef8, 0x8657ed2b, 0x9fa77f43, 0xa41e7bf9, 0xaecc4da3, + 0xd1116f8e, 0x17c127be, 0x88df00dd, 0xd3b8b23e, 0x1e1e0fc1, 0x7da2766c, + 0xe1e9b010, 0x5e7cd0a7, 0x518f7e14, 0xbea2b518, 0xf8474baf, 0xa432ba0d, + 0x77e00f4f, 0x2d7f392d, 0xc8103e78, 0xe7816ff8, 0xb5e3e4b5, 0xb8f122e4, + 0xeba26b5e, 0x2c3bdcef, 0xc81771f7, 0x9fb62cc1, 0xeade06eb, 0x3e7195f9, + 0x6be9442b, 0x9a6771d1, 0x03adc74a, 0x24e71d08, 0x7f6d0bf0, 0x263af1a9, + 0x6fbb54bf, 0x13d025a7, 0xd4c85ebc, 0xa1b0f7f7, 0x5f074bbf, 0x6b7ec074, + 0x79c9ba69, 0xd41e062a, 0xd321b2b4, 0x9fdad369, 0xa5fcfa4d, 0x036a613a, + 0xc4ae89da, 0x9e8187bb, 0x0d4f3a70, 0x8e9db902, 0xd2cfdaa9, 0x14f3b374, + 0xebe77b95, 0x3ed913b3, 0xc1e4c02f, 0x179424d6, 0xac56fde7, 0xa7cf6dff, + 0xf9d47ebb, 0x4e48d210, 0xd31e415a, 0xebeeecb2, 0xd2cf4b77, 0xc7e0cc5f, + 0x15f2cd24, 0xf4ad0fb0, 0xd6412fbf, 0x6af30913, 0xa20dd5bf, 0xbe09b962, + 0x478dd56f, 0x33d4b9db, 0xbeb32fd6, 0x72246f8a, 0xaa5ba55a, 0x8f83f62f, + 0x37e81530, 0x3fb7a9ce, 0xeaf97493, 0x9d4e3ea6, 0x50bf0a3d, 0x046a4bf9, + 0x82a7e809, 0x64a74f93, 0xf9d02b5b, 0x424e0f3d, 0xd5815ba0, 0xcc86b4ab, + 0x2b9c173e, 0x3775bc33, 0xe9bf8a3f, 0x32f92512, 0xc39e1d6b, 0x3f5c3596, + 0x85ccf419, 0xe06995c6, 0x5e225837, 0xa31bc47a, 0xef20a7fd, 0xca5f0347, + 0xcf7dbd61, 0x7ed083e9, 0x17e8efd5, 0x9ad3b625, 0xf989bb7c, 0x5efd8c63, + 0x5ae47ae1, 0x7adaa9f0, 0x09d80a78, 0x35553846, 0x50fb345d, 0x797fd22e, + 0xf0a93851, 0x5ef45e7b, 0x5e56fd01, 0x8b7e86df, 0xe432b2b3, 0x2f215f07, + 0x96cfaebb, 0xb3413a7e, 0xc2b4852e, 0xe58c0f38, 0x3dd71103, 0x7e39521f, + 0x013277ee, 0xd2ae4439, 0xc0799a5a, 0x1794d6a6, 0xd03cefdd, 0xe018a4b8, + 0x7bf60e7d, 0x202e6e54, 0x81e2075e, 0xfec1e5d4, 0x4d3102e6, 0x205d3805, + 0x6a4639ef, 0x992190f0, 0xff74ce11, 0x3f3b4273, 0xe5d1ffba, 0x9747fee9, + 0xd233252f, 0xf4a09e20, 0x04049929, 0x3cae9f5c, 0xbf62725e, 0x6acd488b, + 0xbf546bb0, 0x224e03e1, 0xabf3a5f5, 0x79b3f5fc, 0x991e7425, 0xd44fb312, + 0xc9c5f0f3, 0x0de5fe6c, 0x5a1ecc9b, 0xe471b27e, 0x69a12a2c, 0x886ac0fb, + 0x0a76500f, 0xaeae2dee, 0xf3bafdf0, 0xb557ce37, 0xcb9cba97, 0xd65479f3, + 0x0c409e0b, 0x6249bb3a, 0x83eaa674, 0xaadd7c89, 0x219a68ff, 0x35e40f7f, + 0x86f9a6fe, 0xcfcc6ff2, 0x9f8e88bd, 0xd37d179f, 0xbfc654a4, 0xa4163fb0, + 0x37f3d230, 0x4bbd3fee, 0xa348f7ff, 0xfbfec5bf, 0xf68cf9e9, 0x9d5bff3f, + 0xf32ea0ff, 0x7fd58eaf, 0xdd5fafe5, 0x5e7950a5, 0x3b9fabfe, 0xce33b508, + 0x6e697549, 0x2d8aff8a, 0x07401cab, 0x01c52567, 0x202e7cf4, 0x90c40d4e, + 0x81245b67, 0x4d8f2dcb, 0xfc26ff00, 0xff3ffb4a, 0x807713ca, 0x45b2befe, + 0xb2dfa276, 0x50b412de, 0x5c6aad7e, 0x63864c5c, 0xd7e58dbe, 0xdf21145c, + 0xf2cfa7a4, 0x1a79ff7f, 0x4a50b1c4, 0xff426be9, 0x03f7107c, 0x9d3f9b55, + 0x9abdfa02, 0x8ccf9184, 0x2ffc60ed, 0x94ff5192, 0xb1914840, 0x69211d1c, + 0x54fd9ed0, 0x51713e37, 0x216fc074, 0xeb18bbf4, 0xfefb7197, 0x0bdec969, + 0x3218d7e5, 0x0a97e406, 0xf660120f, 0x7f97cafd, 0xce8dbc31, 0xeff37da7, + 0x4e06821c, 0x6a5d9f2a, 0x6efcff98, 0xb2f2f757, 0xd6a1f283, 0x81f5548e, + 0x4bef89ab, 0x215a599a, 0xa8131d07, 0x24d8a85c, 0xb9fa15bb, 0x5f17d5e2, + 0xc5fc067a, 0x83dc581f, 0x5e4bff69, 0x3c74703d, 0x26d92fcd, 0xcb662af7, + 0x516909b0, 0xffd354bc, 0xf146e796, 0x80e3be50, 0x7d8c35d9, 0x147261ff, + 0xedb64b1f, 0x5d619333, 0x61a931e1, 0x8b64399f, 0xb6869781, 0xad676029, + 0x3373f97c, 0xedced0b8, 0xccef4815, 0x74dcf018, 0x8030ed00, 0xe391e213, + 0x43378229, 0x178a6afd, 0x9e2ae790, 0xb9cbe58c, 0x5cfe813c, 0xafcf4839, + 0x97e3a6ed, 0x86e2d1fd, 0xf6bd97f5, 0x71d60390, 0x7461aa46, 0x34aaecfd, + 0x4cb71d0f, 0x989cd256, 0xcf65efb2, 0xb6f48c3d, 0x69c3f0e8, 0xe9e80fcc, + 0xa4dd4263, 0x2df581f4, 0xd71338dc, 0x487c4a57, 0x8acf6577, 0x9f8f905e, + 0xb6ea6449, 0x57d17c18, 0xccf27266, 0xa590d40b, 0xfb033beb, 0xefe7906f, + 0x46bf1889, 0x67e883c8, 0x85af987c, 0xff98685a, 0x74f0cacc, 0x39713249, + 0x2d75ad4b, 0xd35e6ebd, 0xdf39f80a, 0xce1bd3df, 0xa489aab3, 0x5f087870, + 0xc3c57ed2, 0x7e19bd45, 0xe3ca4b88, 0x359da8ed, 0xfd43be09, 0x3713d956, + 0x7c8ed75c, 0x7f1d1999, 0xce9f1f19, 0xa3ec1e3b, 0xedb16933, 0x55645bfd, + 0xae3d500f, 0x7f0d2fa1, 0xfcdf7e33, 0x956fe318, 0xa7d303df, 0x8e5ff942, + 0x7681fe30, 0xbce91fa0, 0x7cb1bd82, 0xca02dddf, 0xc6090b03, 0x32cdebe2, + 0xb97d6be7, 0xde74274a, 0xa1a89092, 0x193fe817, 0x53768fe1, 0x9db453e9, + 0xc3565e46, 0xfdae8e78, 0x88bb7ca9, 0xac9a7ff3, 0x91b27fe7, 0xf6f77df1, + 0x5efcc2ab, 0x67a5e072, 0x7f295f80, 0x57e02e2a, 0xfeeb0bd9, 0xa396d6f3, + 0xfa7ca5df, 0x4f9506e7, 0xc8d3f2f5, 0x1fdb65a7, 0x469f4026, 0xbf73fd3e, + 0x4f93121a, 0x7c98f7e9, 0x3ff42fda, 0xf8553f2a, 0x3f00c77d, 0x07761e55, + 0xfc3ca347, 0x94c57250, 0x08e7f487, 0x7f4aebc9, 0xf4a9dd2a, 0x951ffe56, + 0x44ee4103, 0xbba552e8, 0x74aa5d08, 0x1eaf5c67, 0xab72c67e, 0xdecf104c, + 0xafdc65d7, 0x38b33456, 0xadeeda4c, 0x4e10a3be, 0xa463541e, 0xbdbeadee, + 0x2180f9b4, 0xefa860df, 0x86bde431, 0xbe433efa, 0xa2bf5746, 0x104cc5a9, + 0x3d5d41ff, 0xe433f971, 0x7a2c4a64, 0xab7c200d, 0x159a2f1b, 0x185b0ba0, + 0x882bcbdb, 0xe17d7102, 0xc3ee223d, 0x578c293b, 0x6b60bf83, 0x72a14066, + 0xdb1c5563, 0xcd5387ef, 0x75ce41ab, 0x648ec33a, 0xfb31c7c8, 0x761bd3b7, + 0xc8ec6924, 0xe51166b6, 0xa6402874, 0x50c7dac6, 0x0cf0820d, 0xd9caee91, + 0x689152b9, 0xfc1cb01b, 0x1ba27536, 0x6a0b055c, 0xb9c071ef, 0xf673674e, + 0xf7e9b39d, 0x3115bf85, 0xde33a4ac, 0x45e61c31, 0x47d48f14, 0x4b387fb3, + 0xe9f3a794, 0xb337e67a, 0x7582c47d, 0xac83fb06, 0xb529fa43, 0xfc83332d, + 0x09ff76a4, 0xe30879fd, 0x5fde7283, 0xb97d46d9, 0x1de29eda, 0x9be5cbf7, + 0xbe3ee5f5, 0xf2a4dcdf, 0x823208c5, 0x9f98f7ef, 0x22e1cb83, 0xd9cee731, + 0x079dfe14, 0xf9a16245, 0xc222cd4b, 0x2156d2ff, 0xa22afe00, 0x557f22a4, + 0x3fca3091, 0xc0ed4e15, 0xe5eee63f, 0x8fcefb53, 0x74007ef3, 0xe1c3ebb2, + 0xf6d346ff, 0x790c1f5d, 0x3ebff203, 0xd243e036, 0xbda4feb5, 0xdeae7871, + 0xf48ed7b9, 0x9de7b9dd, 0xfc803f01, 0xcc3716eb, 0xe7ef73b3, 0x3a5e81c3, + 0x40ca5857, 0x67f675be, 0x7b95cefe, 0x421e1f3e, 0xe228fa7d, 0xf6cc90ed, + 0xff9a975f, 0x0bd089fe, 0xb02aba52, 0x2026f613, 0x8eef54ff, 0xceea78c3, + 0xf9e79f3d, 0x7adedf6c, 0x451c78aa, 0xdecc9da7, 0x624bf30e, 0x6fd50271, + 0x96b17b8c, 0xb8d95f8e, 0x969f3ccf, 0x3fcdfa4f, 0xecdc8386, 0x9feccedc, + 0x1cf4390e, 0x931c09c4, 0x5321583f, 0x1300757c, 0x90f21065, 0xf0126339, + 0xfcb85749, 0x3d4ffd03, 0xffc74785, 0x3c10f035, 0x03d9be4c, 0xfdd60156, + 0x443e4fd7, 0xe905a1bf, 0x9fef5d52, 0x3ed16a1b, 0xedbad6b9, 0xcff33366, + 0x6eb33ffd, 0x7593d821, 0xaf93fce7, 0xc2ecbb7b, 0xa0f919f9, 0x79ef9d2b, + 0xdaaff304, 0x1edf38dd, 0x3ff17bd2, 0x36bffaf9, 0xbc53b7de, 0xeebdae3b, + 0xebe4ff25, 0xbfef1eee, 0xeef1c79d, 0xbf337bc4, 0xefce07f9, 0x27b9caeb, + 0x72dcffcc, 0xabf5bbae, 0xe4c5bc76, 0xf3a02d6d, 0xecea4d9b, 0x49cc5860, + 0x420874bd, 0xfffd2d13, 0x2be60bd2, 0xd523ce1b, 0xfcccd9b4, 0x839c3223, + 0x4cc971d3, 0xd8ffef81, 0x6e0ee9be, 0xafd1dc3f, 0x3bd6ed14, 0x27aecc3c, + 0x305bd792, 0x16f0e20a, 0x4a1fd1b8, 0x20fb8f72, 0x9e66f33f, 0xdf1fefd7, + 0xa0478815, 0x031dfb76, 0x3b041ea6, 0x527ecef6, 0x36d2c2d0, 0xf077df48, + 0xfbf563ef, 0x7d3e399c, 0xfad99efe, 0xdfde4cfc, 0xe8ae302c, 0x42bcb3f8, + 0x729ffc00, 0xc152a7ff, 0x942f2a1f, 0x3c402089, 0xd82acd4e, 0xeaf4cc4f, + 0x7d806fdb, 0xd85fc6af, 0x4021e6cf, 0x43b73217, 0x2cdcdb27, 0xf04bcfdf, + 0xa1db88dc, 0x510f2f52, 0xbbf1a272, 0x69bead8b, 0x1d617e70, 0xef1c202a, + 0x1ca2275c, 0x3808e6b2, 0x1958ef2f, 0x353f41e3, 0x3f00f379, 0x54c723c5, + 0xc34d9f7d, 0xcc5a700d, 0x6a4a5ce1, 0x57224ed0, 0x3f32fcbf, 0x04c5fc0f, + 0x1ec5aced, 0xfba76e42, 0x217cd281, 0x79f94f18, 0xc4944491, 0x0aa3f05c, + 0x8fce84e4, 0xcfc3cfaa, 0xfda2d277, 0x777eab5c, 0xa76dfc74, 0x737ca27f, + 0xb7b51062, 0x8f063cfd, 0xbaa07f30, 0x99bfbb6f, 0x42bab1c1, 0x3d216408, + 0xe6af6506, 0x858c68fc, 0xf4ffefed, 0x8fc891c3, 0x2c3aff05, 0x0727ed91, + 0xad5a7da1, 0x571429fa, 0x2e4ff822, 0x73f36735, 0x5f0e49b6, 0xcc383e0c, + 0x807f73f7, 0x769a3138, 0x44ea164e, 0x30902fd8, 0xc99509fa, 0x8c4b6471, + 0x16dec638, 0xd62ff713, 0x7e12fee0, 0x23c03cc4, 0x9b4459fb, 0xf06b2626, + 0x73f6eeb6, 0x78aef0d2, 0x9a139f80, 0x2affa4f3, 0x08ff617c, 0x171c3d70, + 0xb18de29a, 0xfc39ebde, 0x2bfcdf8a, 0xd19bc7de, 0x5c03299c, 0x75164c66, + 0x1699afe7, 0x248fff6e, 0xc55e6123, 0x18eade6f, 0x28397807, 0x5dfee1ba, + 0xb345f375, 0x9eb9c62f, 0x3fd09e11, 0xeec81f9e, 0xc9e78052, 0xd811c49f, + 0xcfc3bd9f, 0xfe20728b, 0x055d073d, 0xe557f01e, 0x697f985a, 0xf089c58d, + 0x40b8abbd, 0xe6e3a54e, 0xc0473a34, 0xaf065891, 0xdd9406bf, 0x60c60868, + 0x197ad4ed, 0x9b5eac15, 0x6b1559d9, 0x02ad7bfd, 0x3f710f3f, 0xe7f85632, + 0xbfc15bc3, 0xa08583da, 0xfbab2687, 0x135d2375, 0x534b8fe4, 0x09e80085, + 0xbe6177d8, 0x7cf7dd98, 0x95cac4c7, 0xab9e4c19, 0xf3846f74, 0xd57e9cfd, + 0xee1cfdf1, 0xa87d380b, 0x6be15670, 0x9f5aaf9c, 0x5a89abca, 0x4d9dc73f, + 0x3d035e23, 0x382cd55a, 0x2aabb44d, 0x3e066429, 0x527a6eac, 0x1cfe3f06, + 0xea97eb17, 0x73dae191, 0x091635e1, 0x3b92d3e7, 0xc9d01e61, 0x9ed475e5, + 0x0b3deda1, 0x0e403a2e, 0xff7263bf, 0x2ac5ee1e, 0xcb648aef, 0x0fabc857, + 0x26dbcefd, 0x337eda4b, 0x55779e71, 0x96e0c814, 0x9f62b7b9, 0x4f435bdc, + 0x58c92c6b, 0xa8cf7eae, 0x77c2e570, 0x43ce1e3a, 0x4085a9f9, 0x434e7f7c, + 0xbc33de2b, 0xd18926b7, 0x3ec35961, 0xb133e633, 0x3a9e3abe, 0xee9f918e, + 0x8fc7d62e, 0xea149fce, 0xb6297007, 0x63b99704, 0xd60de9d0, 0xebf31f88, + 0xa50f09e9, 0x1fffe1db, 0xaa6589e9, 0xbc61089e, 0x52fedab2, 0x3bd13d57, + 0x5a589e96, 0x780deaeb, 0xbb27ba58, 0xd2c93037, 0xc5a516df, 0xfbef13d2, + 0x31e479d9, 0xf3b73f7e, 0x6e27aa6e, 0xbb89e8d2, 0x8c4e90e3, 0xf9523eed, + 0x427a5ae4, 0xb0ffdbc5, 0xf41f79bc, 0xeefe0c44, 0x5989e834, 0x27a825cd, + 0xea2ddd66, 0x9e8357ef, 0xdd317b80, 0xb48289ea, 0xdd979839, 0xe7e83109, + 0x1f476e7d, 0x30da71e3, 0xc18be80e, 0x6f8e2756, 0xc9dd1bd4, 0x2a7bb7f5, + 0xc10fffd7, 0x4beb9559, 0xfe7bb267, 0x2090e95d, 0x439d2f3d, 0xf400bae5, + 0xd2fae4c8, 0xcd3fb8fb, 0x20bd6720, 0xe5694767, 0xe55f6b2c, 0xbaa17a63, + 0x7317f329, 0xeb77f969, 0xd695b764, 0xee546eff, 0xeee569e6, 0x8f8b2b60, + 0xcb7722ea, 0xdcbddc98, 0xa7ed123c, 0x31f7d6ee, 0x9e54b797, 0xa0c7720d, + 0x1373d98f, 0x4ea8f774, 0x9ccff88e, 0xef2fc01d, 0xf82e7888, 0x0e03b729, + 0x51cff88d, 0xb0af4f60, 0x07703d32, 0x9f8767c7, 0xca9936dc, 0x980b4981, + 0x55b95d3d, 0x3555f844, 0x1aaffe32, 0xd1701f14, 0xbfdc94fc, 0x92def9e2, + 0x8f7cec3d, 0x40b8a0ae, 0xef25ff83, 0xbf835684, 0x0126c979, 0x0e2127cf, + 0x88b9e01d, 0xbdd4b3c3, 0xc639f704, 0x9fd504f8, 0x2debc95a, 0x7e84de6e, + 0x42dc6357, 0xcedba0e5, 0xd8a47ec1, 0xbc50f0c2, 0xca6c0843, 0x43727384, + 0x7863f73d, 0x60d9512e, 0xebe44f38, 0x7306285d, 0xec7ec076, 0x963ba2f7, + 0xc236ab9e, 0x08bfeca5, 0x2e14c397, 0xe1fbfea3, 0xa81c1dd2, 0x687e8f7d, + 0xb41e3c23, 0x9733fb72, 0xfc3e028c, 0xb941e4d4, 0x622dbca2, 0x2782c9dc, + 0x75deeb07, 0xf97d73f0, 0xbab7c98e, 0x62abd40f, 0x368b29f1, 0x46903b6e, + 0xc81b73f3, 0x2f637008, 0xc3d7a0da, 0xe8dfbd11, 0xb73ebd42, 0x71009b66, + 0xbdf90b8e, 0x93c0b2ad, 0x7dc61ef8, 0xa79ea9cb, 0x5ae7e7f5, 0x7abe707c, + 0x728c2e38, 0xd7dba553, 0xe56d1f38, 0x119939f8, 0xa9fa8c9e, 0x3f227049, + 0xbe98e306, 0x778278a2, 0x7dc65a3a, 0x85e3853e, 0x189a2ff9, 0xde29ab1e, + 0x34a79f80, 0xb33d7cf3, 0xf355ef03, 0x25c0420d, 0x27dd5c80, 0x043f77b3, + 0x24702292, 0x9c23f468, 0x69a415db, 0x8da7bcf0, 0xc116ffd1, 0xf4021f8d, + 0x73c137df, 0xeccf74b7, 0xbbd29e98, 0xacd7a70a, 0x3c707f5c, 0x2d6b8e1f, + 0x3ae7891e, 0x3fdf1b82, 0xf3c24e69, 0xec755388, 0x8e668f1d, 0xc05f2367, + 0xaefb43be, 0x389874c8, 0x8d4ea9c4, 0x1c3f38c3, 0x65d98b37, 0xb914f95a, + 0xafd3c707, 0x4d52d71b, 0x8b1ed15a, 0x26f9a3c6, 0x385f6058, 0x71f49055, + 0xf3a46162, 0x2bffa16f, 0xfbeed496, 0x8c4ee927, 0xa9c87d3f, 0xfbb2777e, + 0xd2df3c35, 0x5cd8ef3f, 0x6bcbdf0a, 0xa16c3745, 0x8eb931ee, 0x79bc83e6, + 0x2fc0265c, 0x1ec90f97, 0x501207a6, 0x73bc94ef, 0x9525ef12, 0x5226d8b0, + 0x5fa623f2, 0xfcf9f24e, 0x0f6dea91, 0xc34852f8, 0xe4cf7868, 0x22bef76e, + 0x465bf817, 0xe7055e1d, 0x724d7769, 0xf80a3d1e, 0x67bd8c7c, 0x24ed6273, + 0xf43da7dc, 0x76fc80a0, 0xda0de29c, 0xf33bbccf, 0xee3a51e8, 0xf1536b7d, + 0x27ae6c7c, 0x979c1675, 0xba243dcd, 0xfcdeb45d, 0x3836ed3b, 0x54369b2f, + 0x7c0d3e24, 0xe8ad23ee, 0xf35b99df, 0x77984ce0, 0x6287d519, 0x8b87a426, + 0xa37e437a, 0x15abed80, 0xddee199f, 0x68b86eb5, 0x2fc7451e, 0xec00f5a5, + 0xbd591bd5, 0x1b82cdea, 0x9b4b7842, 0x5979449f, 0x07c059ba, 0xfda95a43, + 0x06fd656b, 0xd6dfb4ac, 0xcd3db48d, 0xd0f6822f, 0x59a4e6ef, 0x4d560e70, + 0xc7ed89e7, 0x6779e2d6, 0x8b476d29, 0x07e6eb49, 0x1bc5bfb1, 0xbcf70205, + 0xfe66c6ca, 0x77f42c74, 0xf9437648, 0x34bf7db1, 0xd1e7bcc3, 0xfed0faf1, + 0x22a18be7, 0x40fdc7f4, 0x323be270, 0xbf88c1b6, 0x3430584e, 0xf8cd9238, + 0x7dea205c, 0xe71b492b, 0xc58e2b30, 0xaf2e9749, 0x0aeb0d5d, 0x2699a929, + 0x668baba4, 0x28a7e3d0, 0x7ed47dbc, 0xf166693d, 0x49ca2d13, 0x47234873, + 0xc6cb8a1f, 0x0a9a0bf6, 0x217e3cf0, 0xbc79e2f1, 0x23d996af, 0x02e2ab6d, + 0xb261d802, 0x6f7c0073, 0xefc16559, 0xfd32af1d, 0x843fd1d3, 0x1b33d47e, + 0xd0f70265, 0x7ecc6e56, 0x6678f01a, 0x26f48cab, 0xa3cecb3e, 0xfccabd17, + 0x591b2d64, 0x999667bf, 0x5048fbd9, 0x5e8bf34e, 0x7abff756, 0x2aea5639, + 0x94653947, 0x0ae25d4b, 0x0335aa9f, 0x579176c9, 0xbca0a6cb, 0x077aa72a, + 0xbc8bad08, 0xfd1ab7ea, 0x33f45d9c, 0x28faa9b1, 0x4a52e217, 0xdbcffb2a, + 0x1f7c7400, 0x0d6efc0b, 0xcfd9febe, 0xd856ef41, 0x92a97c09, 0x8c0b4f9c, + 0xcbf0082e, 0x9f6de6dc, 0xcd941f01, 0x9577c38d, 0x801e034e, 0xe0a5d66f, + 0xa0696939, 0xc6ade104, 0xa0da2e69, 0xffd573a7, 0x1227c738, 0x957f568f, + 0xa68f1025, 0x511fb1de, 0xdce3a57a, 0xe20424df, 0xbdb7c804, 0xcc28f0f5, + 0xcb5e713b, 0xceb07db9, 0xec7cf48e, 0x0157177b, 0xa1fbcebd, 0x275ec040, + 0xe8356f8a, 0x820daac3, 0x8bb9fc0b, 0x2fdac87e, 0xde61eda2, 0xe8c97ec7, + 0x0bb7d28a, 0xe36abfe8, 0xfd616f93, 0xfa0b82cd, 0x04a9b63f, 0x453289ed, + 0xb9be5824, 0x540ff70d, 0x52fc614f, 0x01a6228b, 0x6a3d57fd, 0xa4a98271, + 0x974a91d2, 0x953e3c6d, 0xefc3dd58, 0x6132eda2, 0xe95da952, 0x442d9c51, + 0x49d029f4, 0xace8c2b5, 0x0dd955ed, 0xba6d7364, 0xcf99f764, 0x3e2afd70, + 0xdc0a733b, 0xf54458b7, 0xcb69d023, 0xb06649c6, 0x0404ce23, 0x4aefc73c, + 0xb5a6c497, 0x7cba54a3, 0xfaf26056, 0x5dae715a, 0xa5d38ee8, 0xa8947f4a, + 0x71595f71, 0x8f702648, 0x3e8f48da, 0xc41661b9, 0x46bc9419, 0x3be743d7, + 0xd0f7f569, 0x48e1575e, 0x2f9069f3, 0x893c5895, 0x12950fca, 0xdafa3b8b, + 0x3f8c33f3, 0xe51ece29, 0xc5c59107, 0xffb8e904, 0x8c45f5b9, 0x4af0bbc3, + 0xdf681ddb, 0x00e941bc, 0x4ed5bfe0, 0x08ffb882, 0x6f2a1ca0, 0xa7183d14, + 0xeef30528, 0xd5dbecd2, 0xbf258b38, 0xcbbc23b2, 0xc5025bb7, 0xaef97db4, + 0xdcf1c393, 0xe318457b, 0x04579446, 0x12898fb4, 0x40f70e1a, 0xef1625ca, + 0xf60bb461, 0x77fdb1c6, 0xb309ebfb, 0xea136ec1, 0xe5697bd9, 0x16c8f70d, + 0x67775f8d, 0xc3d6ac9c, 0xe2851873, 0xc3b9ee19, 0x74efb4fc, 0xed1e71a9, + 0x2bfa332f, 0x9ed1926f, 0xd6dfaf2b, 0xe57df101, 0xcfb82dc7, 0x88bfaead, + 0x7e93caf1, 0xb3be2af5, 0xea24dd56, 0xc4babbe2, 0x788bd555, 0x58d5522e, + 0x341f7189, 0x5523e78f, 0x0be3b10d, 0xb3ff15af, 0x767b57e4, 0x4b841429, + 0x03bbfc76, 0xdd6b5ddf, 0x2bfbc0e2, 0xd71d5ff5, 0xaa8e25d8, 0x8cafb1e1, + 0xbf0f3aa3, 0x133ac250, 0x3538edc7, 0xc99ead0e, 0x3cbf3a35, 0x713f0c6f, + 0xf57adec4, 0xce20e7b3, 0x9ffb7db7, 0x56f9839f, 0xcfcbaffc, 0x4506fc41, + 0x91ec139c, 0xc7de57ea, 0x9db54938, 0x3ff7cf10, 0xc63bff2f, 0x607c7697, + 0x1d6f4371, 0x000cce7b, 0xdb63a37b, 0x6e20d35f, 0x229ed974, 0xdb2ce7f4, + 0x8937a939, 0x53502fe1, 0x0f40dba0, 0xf88d5be2, 0xc16c696a, 0x140b9338, + 0x221f20df, 0x950d7171, 0xc5d0ce2c, 0xc6b6e1e3, 0x12ee238e, 0xd778d6ff, + 0x5c83379d, 0xc176646c, 0x8ee0e335, 0xd4de3c50, 0x7d6dfc03, 0xd893cb8c, + 0xbf00bbf8, 0x8c0d3c50, 0x7dc1c7d7, 0xf9f0b8d6, 0x31aca067, 0xb838dba5, + 0xa6e00f60, 0xc7b729c6, 0x07886e79, 0x1ffedafe, 0x78087718, 0x7c81762b, + 0xf8006cfe, 0x61cacf85, 0xf7843ff4, 0x5cbef058, 0xc8639ef9, 0x0f3b1d3f, + 0xe1301c63, 0x241dc2f1, 0x3be2c3f2, 0x7aa7afb9, 0xcfc59db3, 0x7c43f871, + 0xdf81cb9d, 0xa31d1c79, 0xaebe3563, 0x92bab8bb, 0x2efe2cf8, 0xabff8b06, + 0x8f21fcdc, 0x4be28b57, 0x6a780b18, 0x4578cafb, 0x804e0e15, 0x9c6d18c3, + 0xc5f8ec68, 0xc7313c48, 0xe40fe017, 0x940e2474, 0x5c41fbe6, 0x46384060, + 0x8e83c862, 0xb4be2c4d, 0x2f7d8e43, 0x9d1b8d55, 0xd3e06f1b, 0x45e2cf40, + 0xafff35af, 0xe3db9f0b, 0x11afd85d, 0x6357ed4e, 0xe73f71cb, 0xef7c6ffb, + 0xde3042a0, 0x3c71f86b, 0x6c689bdc, 0x14bbe333, 0xaf89feea, 0xd3fb9db7, + 0x31115fda, 0x4375709e, 0xa371ca0b, 0xe7e2a8bc, 0x3ef9c624, 0xd55be7c9, + 0xfb44f4c4, 0x46c07b76, 0xf37f69fb, 0xaae7a475, 0xcf186dad, 0x0efd56f8, + 0xbe734873, 0xa0227a0c, 0x6bfb7f99, 0xdca386fb, 0x1944efe6, 0x9e3e79c7, + 0x9bab87ed, 0xbd538f63, 0x9c6ea2f5, 0xd9834a25, 0x78f6bb69, 0x3dcf25e7, + 0x56f9dfd0, 0x6f9d2f66, 0xbac6a710, 0x5e22b377, 0x75a0e7e6, 0x12faa52c, + 0xb3b2cbdf, 0x4744b1f7, 0xcb5fda3c, 0x278f63ec, 0x8cd482f6, 0x6b2b15f1, + 0x8fc63c79, 0xef80e9dc, 0x08dbf695, 0xc01577cc, 0x978fb357, 0x76023e9d, + 0x1dee9c9b, 0x51673da5, 0x65ee6fe7, 0xfe0d0122, 0xf6a7d997, 0x9127fd86, + 0x8f307e94, 0x973eb23b, 0xfab5ff40, 0x5c9eff99, 0xbe08393d, 0x03ce4ab7, + 0xd6dfb429, 0x5c1b82c9, 0x3ee95daf, 0x9b1f3ba0, 0xfbbfd1ee, 0xb0fab109, + 0x136e4bbe, 0x537683da, 0x10ab49d0, 0x3a6b5c7b, 0xc45d606e, 0x8861a525, + 0x3fb9c63d, 0x25deb7ee, 0x7594220d, 0xf50a79a9, 0x1dee92dc, 0x92b1c48b, + 0x720b5de1, 0x57a51064, 0xd557a71b, 0xbf67672f, 0xf8437ed3, 0x0e52465e, + 0x5df205a9, 0xdda1f767, 0x33bf9eb0, 0x42867f42, 0x8932441c, 0xe1df6b77, + 0xdeeae3a1, 0xeae3a0ef, 0x7d1e49f2, 0x74aa653e, 0x497e962a, 0x2298f3e1, + 0x490e10da, 0xbf752645, 0x2d383c56, 0x54a4ef3a, 0xf9420ee2, 0x338c36ed, + 0x68a5eca7, 0xe9b361d7, 0xa7e74de7, 0x39891393, 0xe6c4c521, 0x24eefba9, + 0xefd7012e, 0xf3a77fd1, 0xa6ffe5d5, 0x48893bca, 0xd66cef20, 0x7fe1c256, + 0x47ef0749, 0xd3fd43a5, 0xef843f00, 0xf70215ab, 0x3af91214, 0xfabaf8e8, + 0xb00ef04e, 0x90fdf5f1, 0x7ded4e7e, 0xfeb89bc2, 0x26f0496b, 0xcd3e5024, + 0x0183581b, 0x24e9f9c0, 0x36bdef07, 0x94f942f7, 0xe310bcb5, 0x463a844e, + 0x11d68357, 0x61419be4, 0x1e42df16, 0xd47b478d, 0x5c4a2562, 0x2293dc2e, + 0xa30b9c8a, 0xb9ff3804, 0x57689856, 0x6b4a5ad2, 0xb8735db4, 0x2290b4d0, + 0x688a01a1, 0x4f04d6ff, 0x7abf8c06, 0x34dd2fba, 0xb53e3e02, 0xe43f7f6a, + 0x23c1ebda, 0x1fd61268, 0x0b337838, 0x18f78205, 0x800e4628, 0xe48badfe, + 0x6bee1049, 0xf247c5d7, 0xf7952b1e, 0x3f2c5975, 0x2afd6134, 0x25a43778, + 0xc6143bd1, 0x0de75621, 0x4c15de78, 0x4b5ff5c6, 0x1cf3a8bf, 0x253439ba, + 0x9bf3147e, 0x83acfbc2, 0xd3fb91ed, 0xd8b787a8, 0xf7107cd4, 0xc3c6de11, + 0x1b2ad728, 0x09b9630e, 0x981d34f2, 0x37d29a12, 0x9e5b9089, 0xfd28b178, + 0x2f1f887a, 0x75d13749, 0xf1789f7a, 0x4383a480, 0x920e0ebd, 0x1c0325e9, + 0x705afa5e, 0x84bc26f0, 0xbae9e870, 0x09dc5d29, 0x60569af0, 0xc6b377c2, + 0x7fa1b71c, 0xa1c4fe85, 0x6cfde23e, 0xad7ee6ea, 0xfda11fba, 0x2fa5a3dc, + 0x574a9db5, 0x364dd1dd, 0xdec0de71, 0xcfd3d44b, 0x0f8f04da, 0xf0492bfa, + 0xb8a9edd8, 0x3dcfbc7e, 0x4f73e7cd, 0x6ba5191e, 0x9c8df362, 0x1ff18761, + 0xf1a09c58, 0x582b4ecb, 0xf9d1662a, 0xa42f0396, 0xba93d746, 0x421b895c, + 0x31ea99d7, 0x4b767c61, 0x813aaf82, 0x3b31c3ce, 0x0b2b841c, 0xa46f8863, + 0x42f94620, 0x1ef56f1d, 0x5d5f5fb6, 0x60ac0a62, 0xf402bde7, 0x908fa517, + 0x8cc23e81, 0x90da9a3e, 0xdb9aaa3e, 0xd5347d18, 0xc17d0216, 0xf3ec19b9, + 0x047848eb, 0x13d57de0, 0xfd49166f, 0x8424dd29, 0x74a5f757, 0x51609321, + 0x75c21c71, 0xf0fc4c65, 0xeaeba9f9, 0x0775bf0e, 0x81c89eb3, 0x1321e4fd, + 0x70a9779e, 0x92bdeb53, 0xe72fe2c0, 0x00757dd8, 0xa1b1ea87, 0xdbf960b7, + 0x7187be0f, 0x33438e1b, 0xc77b41f6, 0xae4314dd, 0x8775b8e8, 0xc83be056, + 0xd01d7475, 0x2b092265, 0x87bbd7a0, 0x089fe307, 0xc9eec03c, 0x21b47801, + 0xefc2bcbf, 0xc3be5121, 0x1303b5fb, 0x2f0ffbd8, 0x9138b026, 0x3888275f, + 0x30275fcf, 0xd0f526bb, 0xb7ec3325, 0x61351faa, 0x734854fd, 0x947febb4, + 0x7cb893b7, 0xf150f062, 0x9513d2a9, 0x8ef009a4, 0x7c938fc4, 0xb5a3090d, + 0x909c93f4, 0x6d4fe9a5, 0x713f53f7, 0x747aa02f, 0x1e07fecc, 0xe94abd02, + 0x76ba27e7, 0x8038e4c3, 0xe81f5a9b, 0x687e1633, 0x0ed0bdbb, 0x617b01c6, + 0x22a5fedb, 0x43d087be, 0xfbc1e6bc, 0x5e7eb47f, 0x4ed9a902, 0xd225e7db, + 0x3c29f214, 0xfbe79bdf, 0x23fb34b2, 0xdfa049b7, 0xebbf7137, 0x171e04d1, + 0x986f3920, 0xccf20c31, 0x8f4fcb8e, 0xf2a0bd47, 0x87e5dc2d, 0x9f896b73, + 0xb385675f, 0x9537804c, 0x29b0a58f, 0x2b4aa768, 0x2099724b, 0x3f6de18e, + 0xbdd4b75d, 0x7aedb9dc, 0xf8d03f76, 0xcf9f3cfd, 0xffafb637, 0xf0dee5d2, + 0xa56f8079, 0x19d3f435, 0xfd755f34, 0x5c1f3c65, 0xe1355091, 0x302fdeab, + 0xabedffce, 0x1f601c67, 0x99617c76, 0x1ececb1a, 0x78f46368, 0xdb1b3fd0, + 0x39f7f1e5, 0x9e356f48, 0x110f7355, 0x865db8ca, 0xefc2cca8, 0x077d6768, + 0x53e02045, 0x7da19291, 0x1f9e2642, 0x47dc344e, 0xf9904efc, 0x30c0f2f9, + 0xdd712500, 0x2f9c6c0d, 0xa5649d98, 0xa99ce0ff, 0xbd8b9f88, 0xda56f92d, + 0x136f7f69, 0x979abe76, 0x7902d352, 0x17fd6162, 0x6a7bfd10, 0x26ebbd79, + 0x89bf4327, 0x9adfe899, 0x67943564, 0x69c8122b, 0x71899d92, 0x63444589, + 0x81bd319f, 0x9d1c7776, 0x69f1c817, 0x93dc4b43, 0xfa65f979, 0xb90b40df, + 0xbf66ba7f, 0x8e6bab71, 0x7eceb27b, 0x5d77c3a9, 0xf10ff77e, 0x167158fe, + 0x746362ff, 0x75efd07a, 0x11b3f9c3, 0xe12e859e, 0x2babbb51, 0x34708ddc, + 0xab855dc2, 0x1f058e11, 0xc72727b9, 0x2e119380, 0x286ea445, 0xee1531e8, + 0x6dbcb846, 0x76f17465, 0xc7df058e, 0x70625b7b, 0x919a9b7c, 0x0f4e3dec, + 0x2a45b5da, 0xdd98581d, 0x11db7a4a, 0x3b9daa4f, 0xcdfccec9, 0x8576b846, + 0x28b8a7a3, 0xb7beba2d, 0x9f405e00, 0x6623ee09, 0x307137e8, 0x27048fe2, + 0x075c6d12, 0x23be069d, 0xd5759138, 0x337ede95, 0x9d9bdf04, 0xcede85f8, + 0x729e6a2d, 0xb704fc0e, 0x14792bf4, 0x8405a3fc, 0x285c336e, 0x243f188f, + 0x529d2264, 0xd3d09e38, 0x8537ef1b, 0xeab85395, 0x4789b3cb, 0x4e45e74b, + 0xcebfbee3, 0xb8dffa0d, 0x7ece957e, 0x75c61f05, 0x674a9785, 0x77ee3655, + 0xc0fd20ca, 0xfafe1e5e, 0xdf9044a8, 0xa63939a4, 0x71cc625f, 0x3e1fa46f, + 0x40b1d23e, 0xceef917c, 0x1c82ffec, 0xa4b5443b, 0x13ad8e46, 0x316d2b7d, + 0x2f4a98e4, 0xddbc7337, 0xe07d944c, 0x4899ba5f, 0x07ec897f, 0x7feba332, + 0x21f7c6c2, 0x585f497d, 0x5c139fe7, 0x75f22f4c, 0xcd4dd646, 0x9f3f184b, + 0xb56f9f8f, 0x120e3de1, 0x7023da96, 0x6b77c2cf, 0x74727314, 0x4faf321e, + 0x6610d406, 0xf7c5cdcf, 0xc85c298a, 0x79d10997, 0x84826c04, 0x79f0b6ef, + 0x2ab7a85c, 0x9ef6c710, 0x036cdbe8, 0x687087bf, 0x0a4fae38, 0x67fd010e, + 0xb4dcbf2c, 0x69ca0abf, 0xc7ac52bd, 0x6444bfe7, 0x1ef087fe, 0xcc85e04b, + 0xca54edee, 0x5427a8d6, 0x7b87c8be, 0xdf013790, 0xbcc2fb05, 0xa3aa8227, + 0x658bdee9, 0x682c2fb8, 0x9c6095ca, 0x60a69703, 0xf1217fbc, 0x1adf6048, + 0xd748dfe9, 0x418e3a46, 0x115fdcb7, 0x94fb001e, 0xaa2f4baf, 0x9ba1171d, + 0x51ba7a23, 0xcfd285e9, 0x3a7e80ef, 0x34fa7d47, 0x8cefdd98, 0xfa069cba, + 0xa3d3b54f, 0x5de788f6, 0xf6776f80, 0x7fa76aba, 0x0fbdf368, 0x9e1224f5, + 0x86b3ed07, 0xdf704cba, 0x39eece3e, 0xfb55df0a, 0x0efb5ae5, 0x886e9fb2, + 0xe3ccdd29, 0x11306878, 0x5957cf7c, 0xb97ca02a, 0x1865848f, 0x591abeef, + 0x179dbfb7, 0x07e4fe17, 0x7b585e70, 0x1f33ea1d, 0xd889b144, 0xaf1dc59e, + 0x68777ae6, 0xf5c00878, 0xf6fae5fe, 0x7ba696c4, 0x8113f517, 0xc5e7fbed, + 0x7ee15285, 0xafa2896e, 0x5d5f1c6f, 0x635fb187, 0xbb136abb, 0x52ef035f, + 0xc37635bb, 0xcf6636e7, 0x36fbe646, 0xc280f77f, 0x9cfe04db, 0x6f51ebe6, + 0x9f3f0776, 0xd2472335, 0xda158bbc, 0xeb1d9963, 0x1c7511fd, 0x4973de15, + 0xbfcf0aab, 0xcca6fc19, 0x7f31f3ee, 0xa0a9e980, 0x4d5e3cee, 0xa3278507, + 0x41a837dd, 0xa2bb3b40, 0x5f34c0a1, 0xfdb3ef67, 0x1f7b1770, 0xfa80c5de, + 0xbd98fb8d, 0xfb8b50df, 0xb6468a86, 0x6704d9ff, 0x227c19d0, 0x880fb839, + 0x4e216bec, 0x1fde12aa, 0xb841e564, 0xc75d9eea, 0x6fb04fea, 0x08363f30, + 0x74bea5f6, 0x3ff34dd9, 0x95b57679, 0x67569fee, 0xf7423892, 0xf27ee34f, + 0x637594ec, 0x7b259729, 0x91ef7804, 0xc6db57e6, 0x3d1f7cf5, 0x571b27e1, + 0xc1213fa3, 0xecd76b9b, 0x8fe3bb6b, 0x7c746041, 0x25b67ec5, 0x8ec13bd1, + 0x25f987f2, 0x64bff88c, 0xfd022575, 0xd9f7c63d, 0x007f2db7, 0xd7710ff7, + 0xf1001d5d, 0xef1cf960, 0xbd99d8b7, 0xeec09d59, 0xfa2c3f6f, 0x3b7e816e, + 0x043abcdf, 0x0f6fc8fc, 0xb6fb893d, 0xe43efe66, 0xda197f21, 0x671e2a49, + 0x7d9d99d8, 0x0e2df5db, 0x3edc77d8, 0xef780ffa, 0xdec482fc, 0x6b1f6b4b, + 0x7bb9d9d6, 0x6033456c, 0xc14a6afd, 0xce5c8226, 0x38ffb51f, 0xf4eefbe8, + 0x7bfe5443, 0xe4ff9004, 0x3c34e1ea, 0xe03c69ff, 0x3b65df00, 0xa17ec7bf, + 0x01ed25b1, 0xfb6e569a, 0x5bf60383, 0x2efaf9f3, 0xbef8ad48, 0x114ec54e, + 0xe3a085df, 0xfe0bdda6, 0x79f9c6e5, 0xac61b38f, 0xfb97fd5a, 0x5ebe968f, + 0xf7c3f4e6, 0xf07b543d, 0x8012ab66, 0x8ad735f9, 0x99bdefe8, 0xf89cfc44, + 0x46c4c82e, 0xe8e713d1, 0xcf7e1f6a, 0xd395faae, 0x99699e30, 0x1dd38d93, + 0x917fe65f, 0xf79a024c, 0xa0a5f203, 0xffcff308, 0x53c08d22, 0x660e1783, + 0x7c062fad, 0x183dd913, 0x7ec895ba, 0xf9f93fb4, 0x0fd9fd11, 0xe5ef41ef, + 0x5e34df99, 0x12026bbe, 0x1bd1f3a9, 0x7cc3b005, 0x907398bd, 0x4ed579c9, + 0xde85f89c, 0x53b46a3f, 0x3c479b0b, 0xbc2097da, 0x080bdfd9, 0x4b3b559b, + 0xa786bf6f, 0x095bb4c4, 0x25e91279, 0x34f66777, 0xf7275f78, 0x8c2726b7, + 0x7bd3873b, 0x7c65e375, 0x048aa5ff, 0x55794167, 0x120ce8a3, 0x751a1788, + 0xaa8bf023, 0x34b855f7, 0x0eb16d5d, 0xebdaff07, 0xd40573a2, 0xe90cfe6b, + 0xafefe470, 0x68ea5ea2, 0x93fdf196, 0x3a9f3dea, 0xffec6be6, 0x2ef6668e, + 0x49f3674a, 0x94a6f7fd, 0x36dda11b, 0xeed7db13, 0x096feb7f, 0x737e6f20, + 0xee0a52f5, 0x6fbd55a7, 0xf68dafb0, 0x265ed1b4, 0x8811fe62, 0x944a2abb, + 0xed442889, 0xff7a2ee0, 0x9da8f223, 0x85ffd574, 0x31884f60, 0x670e00ec, + 0x7c049e3a, 0x820bb464, 0xf68f6e76, 0x2ef0b927, 0x94d5d360, 0xb4cf7825, + 0x02b9c139, 0xdecc3efd, 0xfe7fdce9, 0xfbe0d367, 0x33bd9121, 0x7e445570, + 0x92ef737a, 0x7c0d2181, 0xfc4444a8, 0xb173e95d, 0xff5a0de3, 0xe67881ca, + 0x37dc9707, 0x442bef6a, 0xbc3807eb, 0x3cec1982, 0xf780c94d, 0x3db1be7e, + 0x5f65dedb, 0x91c831fe, 0x0a786b4a, 0x1b21f588, 0xff80ccdb, 0x9fef7639, + 0x48697c98, 0xa428b800, 0xe3a12fb0, 0x4293c596, 0x2d70aba0, 0xdefc4271, + 0x132683ce, 0x96d465e0, 0x79b38c4c, 0x2e379f85, 0x6733a86e, 0x62d6e46a, + 0x56755e7e, 0x6b240656, 0x30742fbe, 0x40f672f9, 0x7f28f3f9, 0xc190b03f, + 0x916df431, 0x1dc9c983, 0x56da6566, 0x84c277a8, 0xbff67ef7, 0x782dfbb5, + 0x71f17657, 0x5fd008d7, 0xac2e1d03, 0x15e874d7, 0xe9ae977c, 0xdd5e8223, + 0xa225cdbc, 0x06fb8e89, 0xdbff3171, 0xa7ee1311, 0xe24b7e23, 0xf6758149, + 0xecfdb073, 0xba4d071b, 0xf837adf3, 0x0776a7fb, 0x83a24393, 0x1fb6bff9, + 0x7d014c2c, 0x33eec730, 0x4eff803b, 0x14c35685, 0x6a9d7f54, 0xb23b8d7f, + 0xfa30da7d, 0x9376b8eb, 0x3aedd013, 0xeb0882f2, 0x24259d75, 0xec5d2049, + 0xd39fda31, 0xefed1a91, 0x1fd6768d, 0xc09bc79d, 0xc1fc2aaf, 0xf3439d83, + 0xc94ab46f, 0xc2a59f10, 0x3a875d5f, 0x7881abbe, 0x9590d936, 0xc2bfdb3c, + 0x87c6ac6f, 0xf512748e, 0xcba47add, 0x2e3dd85f, 0x8283d207, 0x03d9f1f6, + 0xece768f1, 0xa491fae0, 0xfe440c97, 0x702a78e1, 0x9d477b30, 0xe7e3774f, + 0xe9abfc73, 0x57eba5d7, 0x74829764, 0x741fdfc3, 0x366b4129, 0x653581c4, + 0xd1d5dfe3, 0xe3e6c9c4, 0xdfeacffc, 0x990a6b9b, 0xab8f704c, 0x84908f6a, + 0xd0f49acf, 0x99d08e5e, 0xd7f480d4, 0x1f209c74, 0xc83fd797, 0xde5486fc, + 0xf0b977f0, 0x87f81c1c, 0x11f7879f, 0x79ae3a68, 0x08becad3, 0xf803a0df, + 0xca270a2a, 0xd4d69037, 0x175e8199, 0x22e9632f, 0x78bcae7e, 0xb3f90f83, + 0x0f8b2374, 0xc4c8e59c, 0xf4e05c79, 0x19f14c4a, 0xd8723f10, 0x579dd26e, + 0xf1676c7e, 0xd71ae74c, 0x94b8c0b7, 0xbd02e6be, 0xf27a6f8e, 0x4aae9869, + 0xcb36e7af, 0xbc594fd8, 0x84bddcfe, 0x11e775e3, 0x36e3ef46, 0x2ef085cb, + 0x388538d4, 0xc6fd0fc1, 0xc8222de6, 0x9e8037ef, 0x839f1933, 0xe07b3dbe, + 0x83ef84f1, 0x11336b9e, 0x30ef77f0, 0x1a6db293, 0xe9bfd8be, 0x2dfe3ad7, + 0x869dafaf, 0xb250f57e, 0xe55e7200, 0x3bee155b, 0x915beecc, 0xf030efff, + 0xfed664ff, 0x5d0bc069, 0xffce7ad7, 0xfe52a7eb, 0x36929fa7, 0xcfd00927, + 0x77ec730e, 0x437ed6c2, 0xd5c88bfa, 0xbab91750, 0x357281d6, 0xe3a6c8e4, + 0x097edd57, 0xf99104fd, 0x3f59ba71, 0x4c9ba559, 0x475fe001, 0xe0083831, + 0xf40ae145, 0xfbe1ed4c, 0x5720e467, 0x9cf0941e, 0xf1039f86, 0xce350df8, + 0xa8d7e55f, 0xd6f9533c, 0x47984bf7, 0x959ae4de, 0x14a7af60, 0xe79f482b, + 0x64c0df04, 0x01cecfaa, 0x0790c71f, 0xae3c39cb, 0xbd6bbec8, 0xf4019e7f, + 0x7e77465c, 0x51b21eb0, 0xd45e0270, 0xb646d772, 0xe5c5d93f, 0xcd5dfa91, + 0x8778637f, 0xb91bbcbb, 0x997e81cb, 0x4ce219b0, 0x1e980487, 0xf2214223, + 0x96dd3103, 0x98b67c01, 0x6aefafea, 0xb939d7f4, 0x8554e90e, 0xadcb9043, + 0xdd6c492b, 0xcf9e7c35, 0x5a37ad81, 0x92417f03, 0xa2cfc604, 0x845cf8c0, + 0x181dcffe, 0xfbd22b7f, 0xdde9b1ed, 0x64a6fb09, 0x9b3abbf8, 0xa6933e90, + 0xca1ef13a, 0x971dc97a, 0x028fb3a4, 0xf2dfee98, 0x01afdc0b, 0x77bf02fd, + 0x4065ff47, 0xdd0624ff, 0x6bdd2807, 0x01d2a7f0, 0x1c8f8ba5, 0xa460f91a, + 0x50bcf50b, 0xc30ecb85, 0x8975e379, 0x85fc1e4c, 0x375705cb, 0x7aea2f71, + 0xcf9e31be, 0x65f3c176, 0xbe015f23, 0xfc70f955, 0x2b35fc1a, 0x5efec9d1, + 0x31f3c7db, 0x9f8ea4ce, 0xf1f0353b, 0x89cb79d4, 0xca7cee82, 0x92d46e78, + 0x751293e0, 0x454b53e7, 0x3e944e57, 0xbb3db88a, 0xcf058b74, 0x0941b7ed, + 0x7c7f6de0, 0xd42f7b40, 0x93c35129, 0x6257ba82, 0xa55bce26, 0x3372d70f, + 0x2ff74419, 0xf64b3257, 0x2dcefc43, 0x30f14aad, 0x666d8eba, 0x71dbeee5, + 0x15bee01f, 0xd8b5bffa, 0x8e7884e4, 0x00538f24, 0x68aa06bf, 0x6c43c3e0, + 0xeed9919c, 0xebff711b, 0x79048f72, 0x4de38030, 0x870aafc5, 0x775cf4ee, + 0xe1c59d78, 0x8dcbca93, 0xce0be472, 0xbd3cad37, 0x44511cb6, 0xf10727e0, + 0xfe6110ad, 0x45fe4cf9, 0xc13e48e4, 0x8989c573, 0xe6a2397a, 0x323945bf, + 0x472b5131, 0xca6286c6, 0x9313fa11, 0x2f3753ff, 0x1c963b44, 0xdec76d8f, + 0x70f4c899, 0x5a4fe82a, 0x7fe1552f, 0xc5d136e7, 0x71875791, 0x2d9b758f, + 0xcaade718, 0xa4ddc721, 0xae6efe10, 0xd42df403, 0xfc77dbba, 0x4def3866, + 0xfce0bb37, 0x461c9cf9, 0x1ba39fbc, 0x0fa43af0, 0x8ef800af, 0xf8088f21, + 0xf63f9441, 0xb17bfe63, 0x6964f919, 0xb9fd4111, 0xa418cb7f, 0x2ce2b2ab, + 0xbcb6e801, 0xf280493e, 0x134ec9e4, 0x1d7529c8, 0xc89b9663, 0x07c891a0, + 0xf835130b, 0xe0d4a318, 0x981dcfdf, 0x93974be2, 0x713d3ee8, 0x3f5a2df7, + 0xbf3483d0, 0x07ea3d2e, 0xb635f9a2, 0x03f73d3e, 0xa6d7fb2d, 0x4277f035, + 0x4b3c39d6, 0x0496dc61, 0xf34832ef, 0x4488d77a, 0x65aeb723, 0x7a537dbf, + 0x26fee6a9, 0x71a54ad2, 0x3bbfce9a, 0xfe85deaf, 0x9f3035dd, 0x4fd38caa, + 0x2ef87743, 0x9b7b4c46, 0x9717a3cd, 0x8223e40b, 0xade5e8f8, 0xa2ffc111, + 0x70f59dca, 0xcbf6cbc8, 0xa8ab9c02, 0x0b7206fc, 0xae3568ec, 0x765ffc02, + 0xb007fff4, 0x3513e43e, 0x62bac2f6, 0x9177cc53, 0x7db44e5f, 0x3499f2ab, + 0xf7d77dff, 0xb1bc78f3, 0x32f4fc88, 0xaf2627e3, 0x489f17d7, 0xec1ae763, + 0xf887c0fd, 0x70afcf18, 0x5ebafeff, 0x461cf7d1, 0xc40acc58, 0x710f12af, + 0xcbf13539, 0xb410b342, 0xdfec3c43, 0xf746c760, 0x61337fd9, 0xbd8ffcfa, + 0x8ec13353, 0xc1b9326f, 0xefc5518f, 0x1207ba47, 0xc0d2d7bc, 0x682c57df, + 0x51e479b1, 0xac5af7f0, 0x47b5defc, 0x36325e7f, 0x2d2b603c, 0xc16cd95f, + 0x59d8d1bf, 0x0e1dfea0, 0x567bde37, 0x9dfc3be1, 0x4e3143f5, 0x0373aa54, + 0xc710bd9f, 0x4e217ffa, 0x044aefad, 0xb9dddd7d, 0x2cf2fe7d, 0xfeaa1ff4, + 0x5070fcca, 0x8564b804, 0x2c16265d, 0xc291c6c7, 0x9eabd704, 0xb87037e7, + 0x5db838ef, 0x379e3d04, 0xec256eb9, 0xfbb0be73, 0x8ddd028e, 0x79dbd7cf, + 0x169a84a3, 0xdc931778, 0xa47f704a, 0x884a47f2, 0x269303ec, 0x03c878e9, + 0x59fc732a, 0x47d83ecf, 0x00897a26, 0x88e269fd, 0xd25fa0da, 0xdedc23cb, + 0x2e1efe0b, 0xbc95dbff, 0x0b071d9f, 0x5ef7e005, 0x570593ad, 0xdefa574e, + 0x51edfb00, 0xf005de2c, 0x0703eeaa, 0xf80dc7fe, 0xf5220877, 0x9cdecc9d, + 0x024df3e0, 0x4f5d3397, 0xdc66e818, 0x3c0b40ec, 0x4ca63579, 0x34bb3169, + 0xb04c59eb, 0x0521bebf, 0xb8e7d1d7, 0xbb5200af, 0x19fb093d, 0x7188367f, + 0x086bbd32, 0x6ff50f86, 0x53f6823d, 0x01569aff, 0xe0e3b8f0, 0x7edf389b, + 0xca59fbad, 0xb73b6af9, 0xd979d407, 0x6ed67fb9, 0x7fe67a67, 0xcb003503, + 0x00800081, 0x00000000, 0x00088b1f, 0x00000000, 0x7dedff00, 0xd5547809, + 0x33b9f0d9, 0x65932677, 0xdf64c992, 0x9441206f, 0x16164380, 0x96127697, + 0xad864d86, 0xec300906, 0x144c9201, 0x96c7d8b4, 0x901a6201, 0x62d168da, + 0xd3e0758b, 0x1b6296fe, 0xc1d43504, 0x368ad84e, 0xd05d40ea, 0x10417cb6, + 0x60090aa5, 0xd68fd0fd, 0x73df7def, 0xcdee666e, 0xcfb51444, 0x1fff7ff3, + 0xb9c39f1f, 0xdf73dcf7, 0xb9cbeef3, 0x2ece9a67, 0x31157748, 0x56dcdb26, + 0x7963196b, 0x346eb9bf, 0xa9ac678b, 0x10de9ddc, 0xc3e6d8c7, 0x2a2beefd, + 0x61dbcc65, 0x8c2a1470, 0xc6312f5d, 0x19f63246, 0xb19b7dfe, 0x31999b24, + 0xd5a66e78, 0xd683671d, 0xc879d553, 0x3e9e4304, 0x0dde347c, 0x327f33cf, + 0xa58c1963, 0x8ed3bc76, 0x62aea4f3, 0x9b61a60c, 0x1890ee3b, 0xcd5cdadc, + 0x9a14a258, 0x58c4de0f, 0xdc13630a, 0x12e8c76e, 0x6558cfb8, 0x6cc3ce2b, + 0x8cac53b1, 0x9dd130fd, 0xc751ef81, 0x8f67984f, 0xd61717ed, 0xbc3dcf17, + 0x1616399a, 0xc0fc3630, 0x1fac5dfc, 0xdd63fb63, 0x06e79ad1, 0x86ed1bdf, + 0xe7123f75, 0x5debc7cc, 0xf7c2ab12, 0xae16c76c, 0xbef1376f, 0x78206ad5, + 0x6a24db96, 0xab14db65, 0xc9e38535, 0x45c60436, 0xbcea71f3, 0x66d73b6a, + 0x4c28bc20, 0xa0b1fc21, 0xe304f1c1, 0x0e0d70eb, 0xe62b1b8d, 0x1ee9d1bd, + 0x4bddc325, 0x0d997756, 0xf84723fa, 0x51011bf6, 0xfbbd2bc3, 0x58736865, + 0xe02b7ec3, 0x9a32558b, 0xb593a927, 0xe2589903, 0x3c674eb1, 0xb36e9fdc, + 0x786efbd3, 0xde219bbf, 0xc2e6254b, 0xaae1e875, 0x07257014, 0x8716242b, + 0xe0557178, 0x356587fa, 0x4a004d18, 0x604db332, 0x659b19fd, 0x92ae0853, + 0x46fdce11, 0x32e9da84, 0x6373bce2, 0x537cf46d, 0x780fe73e, 0xcf3e027e, + 0x24d29d92, 0x7fd86f80, 0xba01b632, 0x48570fbb, 0x67be114a, 0x73196f34, + 0x469e9e22, 0xe5c1867a, 0xcefc71b4, 0x3de87812, 0xf10abbbf, 0x38341c91, + 0xf8649825, 0x831f38b1, 0x3657c3a1, 0x64fe1118, 0x00189416, 0x95b1af68, + 0xacb22703, 0x7484875a, 0x9aeb179d, 0xe079a363, 0xb3f22962, 0x9e0eb7c1, + 0x49de34fb, 0xc9fcbe7c, 0x0b29db68, 0x067d8411, 0x26b5d7ff, 0xb69efa6a, + 0x81a9db0c, 0xfc72fea1, 0x3b31f007, 0x186c2cc0, 0x16fcb563, 0x5ee8cc7b, + 0xb3a9ef8e, 0x0f3fde74, 0xfebff5fa, 0xc40cccd8, 0xe75c4ee3, 0x638b87d3, + 0x47f187e7, 0x4cb3ae23, 0xf815ef43, 0xa5de9ebc, 0x38f7a092, 0x9bd2b7a0, + 0xa26b56de, 0xe493b7a0, 0x24c5c12a, 0xf5f01e7c, 0x770f4e03, 0x7259f209, + 0x0191a570, 0x1e90bb1c, 0x87a65771, 0x2b56efca, 0x874a87a7, 0x136758e6, + 0x19056bce, 0x2b7af7c4, 0xbebc40d8, 0xd2a1a271, 0x7ecf8117, 0x72e38b6e, + 0x7e78b573, 0x352cc99f, 0xffe66784, 0x0fbf67ef, 0xbfe0f778, 0x9ff7848d, + 0xde005f23, 0xbac3fbe3, 0x9df13a7f, 0x834fe454, 0x0945fba5, 0x37e751f0, + 0xc258462a, 0x4eec7bba, 0xad63ffa4, 0xf10a2392, 0x3f1237e3, 0xe314d63c, + 0xc10fca8b, 0x8499ee7b, 0x687aec21, 0xc0b3fc85, 0xece90c35, 0xf7ef1449, + 0xe9e01f42, 0xcfeef1b2, 0xc3dbdc12, 0xfe63c9f5, 0x9e23447f, 0xa2b3a507, + 0xc2384953, 0xac4de349, 0xc126cfe7, 0x2ff8517c, 0xb43af109, 0xf58288d9, + 0x28aef75d, 0x376dd123, 0x759c37ce, 0xe009bd1e, 0x0a8ecdfa, 0x6f8c3b83, + 0x347db62e, 0xefc01f67, 0xc21f8d89, 0x7d8e0012, 0x9f200797, 0xafc7f7a9, + 0xef7a4f9a, 0x6f7ba34e, 0x0d2f5c38, 0x30f5c93c, 0x1e9db6ab, 0x4a76af84, + 0x0a02c59f, 0x65032de3, 0x18c383c0, 0xfbc230e3, 0xbcf8635a, 0xa849fbe5, + 0xc042bad8, 0x3dafe20f, 0xaeb7f086, 0x9f2ee410, 0xe7097ce0, 0xb335603f, + 0x117eb80c, 0xa9c711e4, 0xbc055f70, 0xf63a467f, 0x76db3786, 0x85f0563a, + 0x0f5f0431, 0x300e905d, 0xd32ad1bf, 0x8c58ba3a, 0x6ad9e903, 0xbfa43276, + 0x1b9738f7, 0x82f56e95, 0x65fcbae7, 0xbeb0dcc7, 0x3b658ec7, 0xb6aef9f0, + 0x7806d18b, 0xdc13afdf, 0x630e10a7, 0xda3c774e, 0x8bfefdc3, 0x911676d7, + 0xd78d3b7e, 0xb49c762f, 0x6aae8bbb, 0x645f5d7d, 0xae391e7d, 0xb6204a59, + 0xc4a96c51, 0xea50dc22, 0xb7f248f8, 0x210d227f, 0x0fa863f9, 0xb7ccb9bd, + 0x34ddd60e, 0x74d3f058, 0xebdca0a6, 0x04b3fde9, 0x30b667d7, 0xe090ddb9, + 0xf8cb1292, 0x698ab27b, 0x8044c69d, 0x0bcbc873, 0x5c064c4a, 0x768668df, + 0x0aaadfb3, 0x39f81276, 0xd1bcc2ca, 0x99924e30, 0x5a1c54d7, 0x0bfacf5f, + 0x60e90f2f, 0x9c78deb4, 0x6b5f8017, 0x603cf800, 0x87e4360c, 0xf4403baf, + 0xabeb13ab, 0x8c05c4b3, 0xdbb61eb0, 0xaaa761f4, 0x86f5fa07, 0x8193e81f, + 0x1c2b79f0, 0xdf48dcc7, 0xeb1ce3b7, 0xd0723f10, 0x7ad2b2e6, 0x1b3ef0b2, + 0xd71d2f31, 0x79d63fbf, 0xedf9ea23, 0x73f1186b, 0xb7cc53d7, 0xf3bb160d, + 0x65f88180, 0xf88ebb2b, 0x85c33afe, 0x9238ae39, 0xbb8442e7, 0x4062d834, + 0x53e85bbd, 0xaf4fa80c, 0x0c1ab60d, 0x81ee07c4, 0x65173f02, 0x8ed06f80, + 0xf255e306, 0x2fc4d0c3, 0xaf409f20, 0x4e5ebe32, 0x376f152f, 0x09b83e09, + 0xa10686f1, 0xd3b0fe5b, 0xd01bc212, 0x7bd96587, 0x6758c7cf, 0x7da9e22e, + 0x3a037bcf, 0x17fabe61, 0x78839bde, 0x147dffa9, 0xdfe8c131, 0xfc809b5f, + 0xb23cae7e, 0xeae1f33f, 0xfe0c8706, 0xfb12b7d4, 0x65af5e91, 0x09fa3341, + 0x3bb7ad75, 0xae7d30e4, 0xa61d6ffa, 0xbf9c44e0, 0xd6c8cca3, 0x3a2f9e00, + 0x08b1a786, 0x5f6d4276, 0x600d7f41, 0x11d8424f, 0x134a7bcf, 0x2768ffb8, + 0xdf1fa07b, 0x31c6bab1, 0xf9efa0ba, 0x5746863a, 0x89f9e0f9, 0x93c83f3a, + 0xfadaedc8, 0x41876e44, 0xce113b21, 0x7d5acfb3, 0xb674b85e, 0x0678f5f8, + 0xfbbb3a78, 0xe05e25cf, 0xb82cb3a3, 0xb39479e2, 0xfa18e28f, 0xbe87135d, + 0x1ac6b25e, 0x479bcb92, 0xfcdfb5f0, 0x0af1cbdc, 0x73b89f8c, 0x0c37b27f, + 0xf933377f, 0xcebe1ea3, 0xf5f2f7c7, 0x0073b931, 0x7f3d83d2, 0x76815526, + 0xc9839ee2, 0x0d520f9c, 0x4295e748, 0x2f0efdbf, 0x13dbf985, 0x1f13d557, + 0x4bbafda9, 0x0a4be616, 0x3341cbeb, 0x4bbade9a, 0xe307cc71, 0x935a25a6, + 0x26580f91, 0xd33d44cb, 0x20bebe27, 0x55d7f53e, 0x3d0c767c, 0xc57e8b93, + 0xe1fc3eb9, 0x87ae3136, 0x9f8357ef, 0x7ffa872e, 0xae71a7fa, 0x5b73c22b, + 0x1d1773c4, 0xdfd0d323, 0x140e689b, 0x638c22d8, 0xd4f447cc, 0xcba5e9e3, + 0xde71624b, 0x55452f67, 0xa1eb8246, 0xf357c344, 0xaa003a53, 0xa3707f30, + 0xa254fdd1, 0x42a707f0, 0x8bdafebf, 0xf40f5163, 0x7bd08bf0, 0x3b6f3337, + 0x3f9eafca, 0x833f7a54, 0xcdb94374, 0xb7485962, 0x9c2a261f, 0xa83c846f, + 0xa3c7a1f2, 0x66609dbe, 0xc07148ee, 0x8d783dfd, 0x87d05e66, 0xc89ab62b, + 0xf97cbfbe, 0xc025e9cd, 0x316defef, 0x2bc2d6d9, 0x9fdd1e6b, 0x5fb853fd, + 0x26ca3433, 0x253dff41, 0xbf728050, 0x0ba351e4, 0x2dbde1f9, 0x4017522b, + 0x6fc801fb, 0x64b1c02d, 0xd7ae89ab, 0xae93bd6c, 0xbd72119f, 0x4194d1e4, + 0x3e5f2fa8, 0xe91521b0, 0x1fcff358, 0xb2e9177d, 0x341b6cd3, 0x1ddada14, + 0x18746392, 0x1e3d97be, 0x34efe9ad, 0x875c1ab0, 0xb926574a, 0x002bee7b, + 0x1e44e9cf, 0x1d355cd7, 0x137f5a03, 0x89d3cbfc, 0x65bcbfdc, 0xbebbac1a, + 0xf5f922ec, 0x90c50ffb, 0x9c43f93d, 0xc0c7fc91, 0xd3faffd0, 0xf51fd0f5, + 0xbe41d94f, 0x18f3a09d, 0xd2c66741, 0xb62f6f49, 0x3da8fef0, 0xa39ff932, + 0x37c246ac, 0x031b8f8c, 0xc625bff7, 0xa2cf4007, 0x4de3321c, 0xb8c2469b, + 0x86260931, 0x815be876, 0xd8191365, 0x925f6fc9, 0x5b0ce9df, 0x196b054f, + 0x3970fe88, 0x3baee933, 0xca3ebc65, 0xa63ebda2, 0xf419fc60, 0xb4d8c61f, + 0x93be55d7, 0x84ef82ed, 0xe87fd8be, 0x804e0fef, 0x30ee2df5, 0x257cff92, + 0xc20afc7d, 0x5f9d232f, 0xcf01deaa, 0xf2b02cbd, 0x1af7e5f2, 0x46af9033, + 0xf42d6c48, 0x591cbbdf, 0xbe08271e, 0x3be80c64, 0x49df4430, 0x7d3da58e, + 0x23c9f714, 0x23e9ef6e, 0x8f5c5ffc, 0x0a9ebe7d, 0x867cf224, 0xe5e86ede, + 0x1bb29be6, 0xcc1e8713, 0xfda95af5, 0xee1fb615, 0xaf577ae4, 0xe276f427, + 0x0d7e9d7e, 0xc68307d9, 0xf42fdc3e, 0x984ec848, 0x8d7c4ec9, 0x7b24f0f1, + 0xfc187884, 0x7797c218, 0x38714c98, 0x71535bf8, 0x929c515c, 0x5c60ae54, + 0xf5162fdc, 0xee7123d9, 0x3cb0f619, 0x2d1da0d4, 0x3d1bd406, 0x369319f9, + 0xabc6a34f, 0xfebe76d5, 0x43ef3b72, 0x7e714abc, 0x3aabfe5f, 0x6af79abf, + 0x4f3c672a, 0xe9fdc890, 0x8315037e, 0x81c0e30d, 0xd7a406e9, 0xf58b810a, + 0x4e8bd3ab, 0xb7df7f01, 0xfd16a15a, 0xbbce7c70, 0xf5d6862f, 0x821ae4ae, + 0x8a5eb772, 0xecdb5fcc, 0x2e60efc2, 0xf5eaffb2, 0xe87d1545, 0xd7ccbb69, + 0x5cccf0f5, 0x6ddecff4, 0xf5172dbf, 0x6f00bbe7, 0xd905fd10, 0x7e79f091, + 0x1e4203d5, 0x44ec2c7f, 0x7ffb88a2, 0x7d027282, 0xcee76690, 0x8b975c22, + 0xd5bee6e4, 0x74fed455, 0xdfba2af5, 0xf7a7cf60, 0xba8fcadb, 0x4efd03fa, + 0x1d92346d, 0x0d766458, 0x4ee78448, 0x3f940c59, 0x5710d938, 0xaf0e3bb9, + 0x17178a33, 0x09e13c3d, 0xaf5e586f, 0xd651d701, 0xd9b73af7, 0xd77f4eaf, + 0xb478ceb1, 0x78fc3d47, 0x7e3d97ac, 0xf1829ecc, 0x8e2a6761, 0x01c148f3, + 0xeab8283b, 0xc3cf0dce, 0xb9ce25fd, 0xd5aef90d, 0x5ca106cc, 0x7b70c6b4, + 0xbb7387a3, 0xabf5b3e0, 0x703e0a07, 0x7c029d14, 0xeb7e172d, 0x22a768bb, + 0xe277fdd0, 0xf3ab68b9, 0x7fa27677, 0xb4e7f91c, 0x8d97e00e, 0x11a7cef1, + 0x76c3884e, 0x8d2c3b63, 0x56ace3e7, 0x4e87d09b, 0xae35c789, 0xf908f63d, + 0x3bf2beb6, 0x25a6387a, 0xf3eb3c71, 0xe6ab6a3e, 0xf5880e7d, 0x34dbb2cc, + 0x95a538f9, 0x7be52339, 0x34cc93f2, 0x34e9dd3e, 0xcb7d2ac6, 0x1dfba95d, + 0x5af311af, 0x0851cc55, 0xad4dda4d, 0xcaef98ed, 0x835bed18, 0x44a6b0f9, + 0xa37a1cbd, 0xe7eb1e31, 0x617aa436, 0x5dd06a5c, 0x4e38066e, 0x5c12a427, + 0x0d61ac69, 0x6dd4abd2, 0x1e9745a0, 0x6a49f188, 0x4a430cf0, 0x09047e84, + 0xfb79468d, 0x027dd599, 0x616c37f1, 0x82b33ac3, 0xc52f42f9, 0x77246771, + 0xe3f81d9e, 0x8898c1cc, 0x5505ee7e, 0x4c8aa56e, 0x8fa5e934, 0xa50f089b, + 0x07343f8f, 0xfc7d2de1, 0x9614b23b, 0x324f88ff, 0x0733f8d1, 0x3e51e597, + 0x5628ade2, 0x5e7bdf98, 0xf79f1273, 0x2ef7c0b4, 0x33be6473, 0xcd5f4924, + 0xff04ed4f, 0x0da7ab46, 0xfca16549, 0x05dd7d59, 0xedc7d3d2, 0x42fc3edc, + 0x09943d6e, 0x42c5fcf8, 0x2fbc40e6, 0xe52b727b, 0x5b997755, 0xf5c0edc7, + 0xe6181bd4, 0xfa1c0e57, 0xf44ca1fd, 0x432a170f, 0x79e83fd1, 0x137b63be, + 0x0d45ff5e, 0xcff88a1b, 0x61203df0, 0xe8e3e59e, 0xc7d7c216, 0x35b1444f, + 0x47a5a4b0, 0x1f7dc75a, 0x0d6b9bfa, 0x7e8af50c, 0x9326f0dd, 0x80db1d21, + 0xd38230c9, 0x4a9ff51f, 0x332c6077, 0x1ba543d2, 0xb4276fe2, 0x8e789e07, + 0x3ae157e0, 0x9e10a09d, 0x73b93d97, 0x6649f21c, 0xf8c25dad, 0xabeb855f, + 0xd1af89da, 0xa525967e, 0x79fb217c, 0xfb045243, 0x8f9bb7a9, 0xc66f39c4, + 0x3f64aef9, 0x74fd090f, 0xf7ef126d, 0x0c3a2dd4, 0xd3d34794, 0x57bd80e5, + 0xd2627b1e, 0x9fb1e455, 0x7de9dbb5, 0x76f63cfa, 0x2da3d733, 0x4a773676, + 0x29d87904, 0xea6c35e0, 0x4c5da336, 0xf5114bf6, 0xfdcad592, 0x739bd039, + 0x1ceac293, 0x011abd7a, 0xfc718bbf, 0xfb023bb5, 0x62715470, 0x5dba2c41, + 0x71067dd7, 0xd4f7846a, 0x5654f90b, 0x4f50b502, 0x47d23036, 0x64f1f7d0, + 0xfd42405e, 0xe0f0f403, 0x37aa57bc, 0xa9ca1305, 0x97d6a4ce, 0x9a48274e, + 0x925376f8, 0x3779ce3a, 0x87d397ce, 0xf4235fbe, 0x8bdfac0b, 0x92bc907c, + 0x6a28ea69, 0xc1b924fd, 0xd14b992b, 0x8bca30ac, 0xd7b925e6, 0xf75c6098, + 0x06d8e648, 0x5b6a84fd, 0x7b4bea39, 0xeb1da38d, 0x79674d2c, 0x76e9bd1e, + 0xf34b5be6, 0x7732f5f0, 0xf913df3f, 0xf1e16e9c, 0xd4576abc, 0x6bbd81f5, + 0x3d70e249, 0xf639f498, 0x2b946bee, 0xab9417df, 0xdd0cbe27, 0x7482fa9f, + 0xa2596057, 0xdf7fa26e, 0xff4b842e, 0xdd93e03e, 0xee4f845f, 0xc975b2fd, + 0xc5abe958, 0xfaf1bdc9, 0xfe08a4a7, 0x8689c6fe, 0x93ae3281, 0xd92238c5, + 0x7149e3bd, 0xe87d74df, 0xa6b7a0b8, 0x1a7f043e, 0xb5b1fe7f, 0x41af578e, + 0x52315f38, 0x0fd8f69c, 0x6748cd3b, 0xc2a0deb5, 0x3814f9eb, 0xd743ec12, + 0x7b6a06a7, 0x952fdee4, 0xbe57dc60, 0xe7f932ff, 0x929fed5d, 0xf3a5de7f, + 0xdef7d5cf, 0xf0007c81, 0x91c6318c, 0xc2d85cfc, 0xa64608f3, 0xcc26ecfc, + 0x31361f97, 0x4ffc429f, 0x17ad0bfe, 0xc5b017fa, 0x299a4ff1, 0xe2f25cde, + 0xb80161ae, 0xc0c23094, 0x257c3094, 0x1298633a, 0x4aa4af86, 0xe29fa6bb, + 0x4f8cd4ca, 0xb9a7eaab, 0x4ebee19f, 0xa6ab3f73, 0x69cfd358, 0x3e3341b8, + 0x7866ec0f, 0x5e3bdf3f, 0xf37fbe33, 0xb0bf4d54, 0x78cd36e5, 0x0b0675e6, + 0xc50b9d60, 0x3cd9af3a, 0xc41e335f, 0xb3758027, 0x1fcc8245, 0x587b1f6c, + 0x50b20302, 0xf5ae43e4, 0xb7ccd32d, 0xd79b45a8, 0xde023c20, 0xec49b716, + 0xcdb788e7, 0xfe35fbda, 0xa0b29a07, 0x5ed3ea5d, 0x2cf5865f, 0x7b53f909, + 0x6b8319fd, 0xd711c605, 0x24f36b26, 0xf7afa457, 0xd7d12b9a, 0x3bf1c011, + 0x2d6fe4ac, 0xc9017179, 0x96ba5451, 0xcc4ad1be, 0x762fe2e7, 0x1f775da0, + 0xfc1cfbfe, 0x7e5a1d59, 0x664fe3d0, 0x00b287dd, 0xe49f7aae, 0xf8deb008, + 0x95b6da5b, 0x4fe3d4e0, 0x3ac9b78f, 0x758fed7c, 0xc32e4d4f, 0x234ac9ba, + 0x255899d6, 0x6c5f57af, 0x874868fb, 0xf52ba9a2, 0x2db94755, 0xad5d4239, + 0xd768eb0b, 0x47502fb3, 0xe209ffdb, 0x962c0a21, 0x46c9e809, 0x753d2c38, + 0xdd50e8b3, 0xd4b7af44, 0xf2f6f416, 0xa1e7d264, 0x783ae37a, 0x1bc2587a, + 0x8a13ca2e, 0x1fba93fa, 0xc337dd45, 0xd53af8e2, 0x2b0f0079, 0xe5099e70, + 0xdf8c58f6, 0x83b81e76, 0xdf7511e2, 0x7c3c920c, 0x4c5f987c, 0xff15b3fa, + 0xf4f64199, 0x9edcc9fb, 0x6aad83de, 0xcec0594f, 0x69ec2bdf, 0x75a8f35f, + 0x695abea6, 0x66ea919f, 0x638c52dd, 0xfe7d045b, 0x8c57f270, 0x95efde4f, + 0x39387d7f, 0xf3b93e3c, 0xebd421e2, 0x9247f780, 0x7b008fc9, 0xe5ec8529, + 0x49e362cf, 0x345fbade, 0x0b81aefa, 0x824a2c17, 0x0f5428bd, 0x937bc3d3, + 0x0e48b325, 0x75f8a3ab, 0x62a69af9, 0x4afcbfee, 0x38feebac, 0x8af76f6e, + 0x2f1747be, 0x5c799a78, 0xe350d20c, 0xf613f30f, 0x5c795b26, 0x17be5b1c, + 0xf22adee1, 0x12f94d0a, 0x9249afbd, 0x9ddfaec8, 0x6bf74150, 0xd8fdcb93, + 0xedcc933e, 0xa9f45ef4, 0xc7e96da0, 0xbec451e1, 0x55fe7512, 0xe4aafc62, + 0x26f76a0a, 0x64ff84db, 0x6de90ebb, 0xbcd27589, 0xfae46366, 0x9e64beca, + 0xdcc0280f, 0x4e484a64, 0x58f5fcd4, 0x5f30c7a1, 0xe4c2451d, 0x3526389c, + 0xc666af94, 0x27335e9b, 0x44b53c8b, 0xdf513b8f, 0xb1d05b7c, 0x73b5bcaf, + 0x9600eda0, 0xade77a45, 0xf311e903, 0x94b18ed6, 0x652786b7, 0x7f3e975c, + 0xb588748d, 0x6fe1e487, 0xaf753dc9, 0x6d37d46c, 0x8c3af766, 0x019fba43, + 0x0f2e167f, 0x5e5275f4, 0x7f47707b, 0x4d1bc607, 0x159f6cf9, 0x630d67f9, + 0x75b6efe8, 0xc346d61a, 0x665e8dfd, 0xb723fbc3, 0xc96638f0, 0xcb81c566, + 0x687c4134, 0xf7c90e2d, 0x091392bf, 0x539d6d7f, 0xbdcf31db, 0xa3b33a71, + 0x2d616859, 0xbfd1e2a3, 0xc622c2d8, 0x7e089f51, 0xcfbe509a, 0xd29ff288, + 0x81147c0d, 0x73249f4e, 0xbef903fe, 0xbc317284, 0xd7917ddb, 0x207eb895, + 0xdaf18715, 0xdff90301, 0x8d3fe7fa, 0xe42ff51f, 0xc8bec183, 0x2b029bf9, + 0xb1c1b7e7, 0xc705392e, 0xa334eeed, 0xeaa25a1e, 0x260685d3, 0x09a7dd03, + 0xc2db4eba, 0xcbb021f7, 0x54667d9f, 0xf3462efd, 0x4b13d433, 0x987d5ba6, + 0xcfe2590f, 0x2e5c12f7, 0x1e3df289, 0xf61711ff, 0xda969497, 0xbe76fe30, + 0x03d3a4cd, 0x5c6365c9, 0xb4ecc91f, 0xaec81faa, 0x64fd5326, 0x02b7e0aa, + 0x827042ab, 0x0b18dede, 0x65b25ff8, 0x87dc3ecd, 0x307ffaf2, 0x331c93aa, + 0xc9c30f76, 0x56720066, 0xb32b6315, 0x987c62ea, 0x8ba661d7, 0xc29fbc79, + 0xf7a12d7b, 0x48bff0ce, 0x626639eb, 0x51f00b5e, 0x155bded7, 0x529b5ff4, + 0x6be20e2c, 0x6e3c5f51, 0x464bdf74, 0x47aeee45, 0x63fa66d0, 0x61bfb86d, + 0x7f71999d, 0x40e310d7, 0xeb8a4ffc, 0x619f3194, 0x1196ee4a, 0x38528b8f, + 0x27e7d17e, 0x11853fff, 0x06598c9d, 0x853cb74e, 0x9b40acfa, 0x629f1c97, + 0xcc197210, 0x6293ebc6, 0x1c54ae8f, 0xdf14b780, 0xfaf41978, 0x2ba384a4, + 0x2a3fa1f3, 0x1978eb65, 0xd6527ef8, 0x41f28fd1, 0xd9498c05, 0x8e83fbc6, + 0xfa0fd47e, 0x0ff949df, 0x6491bfde, 0x794b8d82, 0x08b7bc7c, 0xe669b7e7, + 0xf5c8cc7f, 0xc6b6d5cd, 0xc4434328, 0x9a8a63bc, 0x7c2666f7, 0xc7ffcb8f, + 0x5d7f6863, 0xa7063eea, 0x018fb349, 0xfc02c639, 0x15f04136, 0xfca78e4b, + 0xbf4178d5, 0x1da07209, 0x0258379f, 0x586bdf84, 0x06f90da3, 0xb3e9b5b0, + 0x0fefde92, 0x7f2d3bd9, 0x9dd04e49, 0x02096f40, 0x7593e434, 0x1a3b98ab, + 0xfed081fd, 0x3fdf0309, 0x7ef85cc1, 0xfdf51e15, 0xd202e0bd, 0xb870f6ca, + 0x2a3cd0b6, 0xa3435d5c, 0xaa4f28bc, 0xeae1555d, 0xc97fba92, 0xa64a1480, + 0xb5d2126d, 0x2b9ddacb, 0xe1ef3f41, 0x4fd40984, 0xe4a5fee9, 0x389beb08, + 0xd94eef1d, 0x46eb1e3b, 0xbbce8d07, 0xcca36e51, 0x33511f7c, 0x9ef02fc6, + 0x5edc52fb, 0xdf0233ac, 0x77c80239, 0x43d26639, 0xf9b54ba3, 0xcf827592, + 0x3b7952a2, 0xe1a5aa26, 0x67a5f008, 0xc0d6c4b7, 0x8be5cf78, 0x931fb466, + 0x4ecc27fc, 0x9f77eb68, 0xaabea330, 0x53cc3ec7, 0x511cc5bf, 0x1aa5256f, + 0xfc6bba55, 0x033983e3, 0xfdc64dee, 0xaa250b27, 0x27b1de10, 0xeff60c71, + 0x64ab8798, 0x769bb6ec, 0x9cb6418e, 0x17bf6aed, 0xf3acb9db, 0x99caaa20, + 0x5fc6a36e, 0xab13559d, 0x376777f1, 0x73fa6924, 0x203a805b, 0x655773d7, + 0x300ae369, 0x4ccf088d, 0xfd43fa16, 0x38e82556, 0x10637d33, 0x74cd25f7, + 0x619dbc9b, 0xaff24df3, 0x7708ed91, 0xf520e483, 0x3e0a65eb, 0x10af8b37, + 0x5e1bd95a, 0xc6d31ba7, 0x55f52393, 0xaa038a16, 0xad780fb1, 0x14fa35ae, + 0xa660f109, 0x89369efb, 0x7dc47bee, 0xd6a48d4f, 0xcf1ec987, 0xdace3015, + 0x6d0c647b, 0xbf7e11ef, 0xaadcef0a, 0x8fc433ca, 0xd757dfc2, 0xfd80a555, + 0xca3feb85, 0xf384c379, 0xc49efdce, 0x5d69f292, 0x78353aa7, 0x3767f6d4, + 0x758cfb68, 0x318f309a, 0xfaf69577, 0xafc2294b, 0xa106c41f, 0x229abd3c, + 0xa25f24c9, 0x1bce61ff, 0xbe0004af, 0x51d746a3, 0x735acfe4, 0x4763ea80, + 0xabea6e8d, 0x3d7ae1f7, 0x3f03b923, 0x2258e481, 0x72675cf9, 0xbfd1cada, + 0x6f8893ae, 0x3f30b167, 0x9e343f22, 0x7ddec6fa, 0xbbd0aa53, 0x5495aed1, + 0xd92bdba7, 0xa34b809e, 0xfe8ca765, 0xea3ebae1, 0xee54e674, 0x20c2bd17, + 0x06b807aa, 0x9d029320, 0xf04b4c06, 0x03bde179, 0x8bcf30fe, 0x1280ff7e, + 0xe50503e0, 0x099bdb9e, 0x02dcdec2, 0x85fa277e, 0x55ad8c03, 0x37afdfa4, + 0x0bbf48db, 0x0beaa43b, 0x76b5afe7, 0x61f64268, 0xd96e4b8a, 0xea3cf1bc, + 0xcefe82c5, 0xbe0007e2, 0xfbf9a2fb, 0xf923dbef, 0x7d553f70, 0x9fd221d1, + 0xf81ec069, 0xa174fade, 0xfbb4db47, 0xaf50d2e8, 0x2c4cc321, 0x5866f7a2, + 0x92776e54, 0x1502941e, 0x3f40cf86, 0xfef789a5, 0xf9215b36, 0x2ad65d4f, + 0x9873bae1, 0xf1da0d77, 0xa610a07f, 0xf6abda84, 0xfa4b47f3, 0x14bac43a, + 0x3bd3f3f4, 0xb20714cd, 0xca57f36e, 0xff9ef5fb, 0xfa67c8c7, 0x54f961f9, + 0xebc50f3f, 0x7f31e397, 0xfedec773, 0xcd4fbb9f, 0xe3c6d168, 0x1e369b26, + 0xab50309f, 0xb439267f, 0x88f2677a, 0x53fb9afe, 0xf734839c, 0x689655a7, + 0x375c33fa, 0x5adfc66a, 0x8fd34a35, 0xcbaf1f4a, 0x2df3680f, 0xf9b503b1, + 0x9b43ab16, 0xf17a895f, 0xf0092a99, 0x3b78b662, 0x668780dd, 0xf6118d90, + 0x14191d90, 0x8da1830f, 0xc38e8929, 0x546879b6, 0x39a4f900, 0x51e7c793, + 0x1e99de2f, 0x092c7980, 0x1a582c3b, 0xabe48df9, 0xa02894c0, 0xd7bcea89, + 0x37f5a3dd, 0x5cb8323b, 0x54b4eda9, 0xac34fcf7, 0x64a93c63, 0xc8367f71, + 0xc61896e3, 0x2d67a2fd, 0xbfe917e4, 0x2ecd693b, 0xe7c54aaf, 0x3d5271ee, + 0x1b31b587, 0x99b719e6, 0x59f57e45, 0x04573d33, 0x4c33bc8e, 0x72a74fbe, + 0x5721fb7f, 0xbf9c38c5, 0x16560fde, 0x3bf369e5, 0xd69bac66, 0xd1e3dbfb, + 0xbd710d9e, 0x5e3cc663, 0x73b0bae8, 0xd60c7772, 0x6ad77e7b, 0xfdefb88c, + 0x075e54e1, 0xfaf4243d, 0x71433bec, 0x90b0f953, 0x93bd9ebe, 0x0cf66faf, + 0x2c13e933, 0xdbd244b8, 0xe77ba7a0, 0xc1edc2b3, 0x517bbe4d, 0xd6fe8077, + 0x9d3b9b8c, 0xa0d54bc7, 0x418e51b7, 0x67ef6b9f, 0x017e9137, 0xdeb9ae7d, + 0xcfa3da98, 0xe7833e8b, 0xef22b98e, 0xc1963fef, 0xdcc7f9eb, 0x0fff08a3, + 0x4fd11e01, 0xde17a87e, 0x84af3e38, 0xf690a7af, 0x8fd37461, 0xf5c1953b, + 0xe87d53f8, 0x5d050feb, 0x62c149b7, 0x571ea654, 0x2cedf10c, 0xa9c27b8b, + 0xc7c7a412, 0x98f7584d, 0xd0c48cfd, 0xfda5fece, 0x6977da45, 0x153079de, + 0x5a7ac3f7, 0xe032a60f, 0xb2935abb, 0xe078fd06, 0x3dfa070b, 0x82016df5, + 0xa4b5aebf, 0xb5d7af1d, 0xc5540e49, 0xc7e7dd9e, 0x67593ad2, 0xb721d613, + 0xd3d701f5, 0x4dec8ec2, 0xb8f5a855, 0xef689de1, 0x7cf94777, 0xe801f212, + 0x8f6b8425, 0xbfa05ac4, 0x6225bd6d, 0xe05bb9fd, 0x337ac0fb, 0xf0b557c5, + 0x50e3ae3c, 0x05b321ce, 0xac2768f9, 0x1c75c24b, 0xf38b1199, 0xf43134af, + 0xcef8542f, 0xe38f04e6, 0x085adffa, 0x5f5c0e01, 0xf848d0b7, 0xc8a56b7e, + 0x51322e4f, 0x3352e67f, 0x85feebf1, 0xef309b27, 0xff2d56f7, 0xa2d4626e, + 0x701e507f, 0xdd4952e6, 0x67e1a6e7, 0xfcf55f95, 0x5edfe7a9, 0x75735a7c, + 0xaa56fa7c, 0xb107ef88, 0x81e76821, 0x90d263ee, 0xdfe6ee7f, 0xde5d5547, + 0x78034a6f, 0x1cd935fb, 0xb06cdfb8, 0x2a6f77d1, 0xfcfd89ea, 0xaddad0fe, + 0xca37d712, 0x5987286d, 0x41b666cd, 0xfee23e42, 0x2f4887ef, 0x4b7683aa, + 0x05ef14b1, 0xca5ea1fb, 0x319bbf57, 0x37dc2ab1, 0xf49ee603, 0xd2e7e0cd, + 0xe3086eb7, 0x7e085fdb, 0x20e0f554, 0xa4ef7333, 0xe66b407a, 0x29e79814, + 0xe4e7af13, 0xfb0af98a, 0x829d8f77, 0xce349d75, 0xbe0b1f2f, 0x4c96fb51, + 0x9eeb1f3e, 0x649df845, 0xbf1f78e1, 0xeb8d502a, 0x5f766038, 0x31387d46, + 0xb45a8df7, 0x5efdcd73, 0x223ca22a, 0xa9cec853, 0x91fef9f1, 0x01596def, + 0x36be8deb, 0xbd18e886, 0xf21b01f7, 0x69617471, 0xdf023b9a, 0x92e7ada9, + 0x4720dcc2, 0x51fa97f5, 0xeca7f6ab, 0xfda6633b, 0x63f3fee4, 0xa52e4e49, + 0xb9f575d3, 0x076e42cb, 0x6aa87d8b, 0xb4f4135e, 0x3438a23c, 0xc303c54e, + 0x086581dd, 0xaf44e3cf, 0xa1b3b715, 0x00febd3c, 0x7b528fdf, 0xf3079a44, + 0x9a726adc, 0x6fdf00e2, 0xc04d5424, 0xad2f37fd, 0x003dcc66, 0x9859fff7, + 0x10fb8cdb, 0xae0fd46d, 0xd1fea74e, 0x6fb50ad5, 0x1a4a5c58, 0x40e333cc, + 0x69e52143, 0x55761e73, 0x3aba7bc0, 0x6daf824c, 0x3eb52f84, 0x646fd174, + 0x717fb816, 0x79ebc4b7, 0x9739fe02, 0x893b9932, 0x7df1b7b1, 0x55ba9ef0, + 0xe77d267f, 0x163f39a8, 0xb5a1a2e3, 0xefb09a27, 0xb18ff559, 0x071c4fe8, + 0x3d7e41fb, 0x12e9f7f8, 0x662391ea, 0x7d57f7dc, 0x3cf34ec9, 0x8b1ee865, + 0x417de5f2, 0xf1d43aa2, 0x34e6f3b6, 0x82189f6e, 0xe7d605b2, 0xa5e7f804, + 0xc7933cf1, 0xe9c0d43f, 0x2ae3c05b, 0xd7ed0fc1, 0xf48f1a7d, 0x5e52acb0, + 0x3f9f11bd, 0xbf28646c, 0xe3ba2a1b, 0x38f4916d, 0xf006cbcc, 0xbfab6075, + 0x16f6655f, 0x2ab9e03a, 0x5b7de443, 0x027f05b3, 0xc03e29a6, 0xe515293f, + 0x86cdff99, 0x29d82525, 0x80c409ee, 0x8ff6cf1c, 0xdb63233a, 0xb477b120, + 0x277b18f1, 0x8bef6fcc, 0x5b68bf0f, 0xa1c9f38f, 0x2c8dc63e, 0xb8c20fcc, + 0xefde6991, 0x4e6ff1e5, 0xc23b9a41, 0xa0e47b3a, 0x40299333, 0x4066faaf, + 0xfbf20977, 0xdb9ed475, 0xe50523f3, 0xfdd312c7, 0x3609da30, 0x467140c0, + 0xffeb579d, 0xb83c84b8, 0x6773ff84, 0x825e369a, 0xfa1568b8, 0xc5171043, + 0x2c384163, 0xa75fd25e, 0x7282c978, 0x041def05, 0x023a79f4, 0x1519d5dc, + 0xcf7e403f, 0xe7c42d65, 0xf91cf80c, 0xe6cebf4b, 0x16d79134, 0xe5133d72, + 0x8db7f91a, 0xde7eb5cb, 0xcde51925, 0xf17acf08, 0xbe2f6e7d, 0xd5f3e0c8, + 0x2f84666d, 0xe13b66cf, 0xecdb2ce9, 0x3cbe00aa, 0x9e60700b, 0x8ae5cbb5, + 0x8dbac44d, 0x8f6b15db, 0xfa81e90b, 0xdcf431cd, 0x49a982fa, 0xa8ffa0f3, + 0x6d73fbe0, 0xe7882ca3, 0xfcb99b39, 0x1e3befa9, 0xf2849998, 0x36ea6654, + 0xb67ee03b, 0xfa3c44ff, 0xa67b657d, 0xf61ca125, 0xba4b6705, 0x1dd57380, + 0x7b77f813, 0x85870b60, 0xb59e72ea, 0x7fe23301, 0xfc462af9, 0x5fecfedb, + 0xcf8e51ea, 0x686d63f9, 0x8deecf37, 0x45f7d2f5, 0x0cf9442f, 0xde1dc512, + 0x676bd004, 0x90b79d4d, 0x68c7b97f, 0xf3ceff43, 0xa30f07c2, 0x8d9e7a3c, + 0x2d8f4f42, 0x3ce8fff7, 0xff5abdda, 0x10f233b8, 0x6ffeffda, 0x55ba8795, + 0xa45f9177, 0x6d583ff6, 0x3d1ea171, 0xb13d7327, 0xf9176dbc, 0x5f2fcbbb, + 0xf0f5821c, 0x7bff7bb3, 0xcf35ea18, 0x430e2e1f, 0xfe79e67d, 0xefbc30e2, + 0x21b62e79, 0x9c92bf92, 0xaabc2469, 0x35ff32f6, 0xfa1f9359, 0xfc8390a1, + 0x7eca96c6, 0x23b2bf80, 0xaf0f29d3, 0x342b2fde, 0x650477d0, 0x5a4e8faf, + 0x635cf614, 0xebc4ae50, 0xc74647a5, 0xcbe30c2e, 0x35261915, 0x795574cf, + 0x0f2bbc1d, 0x04e3cb0b, 0x1868ce0d, 0xf3283eb7, 0x9235bdfd, 0xf00be30f, + 0xf1cff45f, 0x2696cbef, 0x9f9036f9, 0xb8309ae0, 0x8e85fb14, 0x15aa0a0d, + 0x3082c1cb, 0xd066693f, 0x3e028810, 0x0547f2aa, 0xca0fbfc8, 0xfc2fa827, + 0xdfe739a7, 0x114be6b3, 0x8f0333f2, 0xae3d418e, 0x9fc0d3cf, 0xfd56e115, + 0x7706eaad, 0xcfafc20e, 0xfaadccdf, 0xf487e50e, 0xa0fc9bf9, 0x8a54986c, + 0x2b5e7b75, 0x64dc1f5d, 0xfd517941, 0xeedfa450, 0x2cdff208, 0xab9546e4, + 0xe881a0c6, 0xb0ac18d2, 0x46bb4014, 0xe60ddfdc, 0x692fbf14, 0x027b4ff4, + 0x978d08f3, 0x0c1d8d6f, 0x6d7c6af8, 0x4befc32a, 0x96156cba, 0xf2ee7c42, + 0x8a332c77, 0x7fa2fc42, 0xfb9d2b9f, 0x213f2165, 0x172bddb2, 0xd977fdef, + 0xffd39bbf, 0x883fd877, 0xa7a747c3, 0x8b3e1c50, 0x1c7849e7, 0xaa1bb7ae, + 0xbde7563e, 0x71cb9d33, 0x867c7d6f, 0x97881bfc, 0x99df1f49, 0x6cb8d0ae, + 0x8a2494ff, 0x9e9b5fa3, 0x9ef5c4a4, 0x30ecbfbf, 0xcf7a8bd8, 0x1e71faaf, + 0x05a0f3af, 0xdf271ce3, 0x2e99e67f, 0xd55f7ed1, 0x24b8f3ef, 0xd53dc7f2, + 0x538e1f26, 0xe74e0ae1, 0x4e19d579, 0x0a5a2f93, 0xffaa87f9, 0x21df73d8, + 0x9fd57dd1, 0xa0c6fd54, 0xa771e78b, 0x6ffbf297, 0xe9b5dc58, 0x440a0f58, + 0x91b2f5d3, 0xea703afc, 0xdfe82cc1, 0x91895dfa, 0x527f0bfc, 0xbfbd53e5, + 0xffdfc179, 0x6feff773, 0xcaa9fc11, 0x3e4eae59, 0x68f5fb54, 0x3d53c71a, + 0xb424efda, 0xfc689fdf, 0x60bcfd72, 0xf4e9bdbf, 0x4be7a31c, 0x915d975f, + 0x98bb73e2, 0x07e905bf, 0x40f0766d, 0xc39bc239, 0xb6ffb482, 0x2ebabb2f, + 0x0fd1a0c3, 0x0a8ffbfa, 0xf24af1bf, 0x59bffcfc, 0xef4b9f9e, 0x5ffdb7a9, + 0x7e3dcf2d, 0xffdf1f61, 0x07946755, 0xc631fe90, 0xca396086, 0x114c9fdf, + 0x113fd3eb, 0xb9c41c7e, 0x983e3e1a, 0x5c603663, 0xf9e1a9e4, 0xe544e681, + 0x5e5f8a55, 0xf0bed234, 0xa20710e5, 0x92ecb6ff, 0xf45ada8d, 0xf59da193, + 0xea1311e4, 0x5a355997, 0x77319bf8, 0x9edfcf8b, 0x79bf43ef, 0x794d1b36, + 0x44fed9a5, 0x6eb3ee1b, 0x843d694e, 0xc27de572, 0x3e113ca8, 0x6275fd7e, + 0xdbe785bc, 0x5f69126a, 0x01f9d325, 0xfef41bb3, 0xb82fd6be, 0xfa89e451, + 0x6f9e0ff2, 0xe57ae68f, 0xbce491b0, 0xd74bf31e, 0x73f66633, 0x1559e0bd, + 0x8c13794d, 0xf7ae10d7, 0x0b3e4957, 0xc6275dc0, 0x29072fbd, 0x34f544ff, + 0xffc67218, 0x25ca2a40, 0x47eb6a73, 0x4ebf8f75, 0x475f537a, 0x7516efb2, + 0xd1ba9ea1, 0x75fb0930, 0xa1a64f10, 0x9328a97f, 0x9f00ff11, 0xea997f66, + 0x7c385c17, 0x59cfe292, 0xa7fd787b, 0x79a8fd57, 0x891faf3c, 0x3cfa1bfd, + 0x43bcdce4, 0x2b94b307, 0xdbea8dd7, 0xae30988e, 0xe87fe5e8, 0x0cc48efc, + 0x4f319e6d, 0x3cdc79e6, 0xfcc364bf, 0xe3c09e54, 0xe431f5f0, 0xdbfd8f57, + 0x07d424c2, 0x4dce9d2a, 0xf73d78e1, 0xb4e547d6, 0xb26fe045, 0xf5d61a2d, + 0xff2b5bfc, 0x8afbc59c, 0x56e7c145, 0xed77d2c6, 0x1623bb7f, 0xb43cfaf1, + 0xb9f35fb8, 0x7cc47263, 0xb7a126e4, 0xc80e1ec0, 0x8f787b40, 0x60cb4bc8, + 0x7ca1ad0f, 0x5db9fe8e, 0x0866b9e2, 0xb98f2853, 0x9bf7d787, 0xa9e3dc33, + 0xf63f48ff, 0x4e87f904, 0x02ef3bca, 0xd17cc6be, 0xd62c5820, 0xc31b7f9f, + 0xd45eb11a, 0x897ee29c, 0x8311e8e4, 0xcf047282, 0xbbc99d53, 0x88fb2153, + 0xe7ac2f29, 0x649b010c, 0x7c0d7da1, 0x8275c47f, 0xc710198e, 0xa0093d62, + 0xe6f58e99, 0x33aea241, 0x38c98624, 0xf7267dff, 0x8eb16b86, 0xd63b2ed4, + 0x92381090, 0x7d255cf0, 0xf272497d, 0x675ab8ba, 0x7de3eb52, 0x7c2499d5, + 0xc39fdf0f, 0xff624aeb, 0x624f5a9c, 0x915175df, 0x0688dd6b, 0xf6eb7186, + 0xd775f66c, 0x22d21a91, 0x807e79d4, 0x33fc8df6, 0xc3715d6d, 0x4f89a7c0, + 0xf13d6cbf, 0xd5f674f9, 0x82f74ff6, 0x0f47e39b, 0x85e26977, 0xfeb78a54, + 0x64f15ff9, 0xc917fd67, 0x4775761e, 0x1de520b1, 0xdd9e793b, 0xea43bfcf, + 0x252db882, 0x9dbececc, 0xfb9c10a6, 0xff88a3fc, 0xc7470777, 0xb0a378e2, + 0x9b5febe3, 0x1fbf0d3e, 0xda6506f3, 0x9e160397, 0x41ddb0e2, 0x96fd0cb9, + 0x1b2e91af, 0xcfac23d3, 0x93edc312, 0x45ca8e5e, 0x833ca45e, 0xb7a8c7f3, + 0x59e5fc78, 0x3628ebc9, 0x953c17a1, 0x8783d266, 0x35255272, 0xa9169e7f, + 0x9ba7b2ce, 0xa5ecc6ec, 0xbdabed12, 0x5b4b3aea, 0xba5bb0bb, 0x58e574fc, + 0xe57d9bd2, 0xe6eac3ad, 0x553bfb9a, 0xe79837fd, 0xd867fbaf, 0x86f6bd68, + 0xb2c8e5a1, 0x46bffaea, 0x2333b83a, 0x9c6be1d0, 0x37d66d7f, 0xa575c75b, + 0x37f0b37e, 0x3ff3c37f, 0xffcf0dfc, 0x8b37ea6c, 0xfd246b7f, 0xffce35fa, + 0x9f8c37f1, 0xf808b48e, 0x1f757ff9, 0xafcebe80, 0xafa017df, 0xb8bd47f7, + 0x7ef78bc8, 0x0eec6d24, 0x7f896b40, 0x55024ab6, 0x6e3e272d, 0x713a3b41, + 0xad83af24, 0x6df16d1f, 0x03fb4295, 0xccad7c54, 0xada9f1e6, 0x0937bce8, + 0x0ceb9cf0, 0x3cc24e8e, 0x714648d9, 0x38b45770, 0x65b64d77, 0xf87da14c, + 0xa0a98cb6, 0xf8fb9b37, 0xcc57298e, 0x691d97d7, 0x46af2ecd, 0xedd3677d, + 0xdddb5697, 0x6b68ff22, 0x996dfbe3, 0xa54c64ac, 0xe8192af7, 0xe01c250f, + 0xcc03e3d7, 0x52e095b9, 0x3c52a7f2, 0x7c23e4a8, 0xaf7a8a0f, 0x7c80fc7d, + 0xc1db47cc, 0xe07ac42f, 0xa4175803, 0xe346d678, 0xcb9df7d4, 0xd07befe4, + 0xdfac24c4, 0xfbe5af7a, 0x975fd899, 0x1d79ea6a, 0x79a9c0a6, 0xbef3d512, + 0x5fe30997, 0xb68a0436, 0x06260be5, 0xb6ed16fc, 0x95f19d51, 0x2067ff91, + 0xd7899eff, 0xf8d856f7, 0x3718fd90, 0xf62b1c03, 0xceff1096, 0xcdf237da, + 0x0a3b8c6a, 0xbd24f9f8, 0x2f914ae2, 0x1df22638, 0xad40be6a, 0xe455fd6b, + 0xfe638e49, 0xcc4eda05, 0x29bb4087, 0xdb75f0d3, 0x11994da7, 0x8941f3e4, + 0x2fbc87e7, 0x8950fcf3, 0x7c3fd1d9, 0x5156e4df, 0xe0179d17, 0xdf350b75, + 0xa7ac5db3, 0x20636ee4, 0x92d2fc0a, 0xb466c1a6, 0x394d25f3, 0x710ed831, + 0xe2580cfa, 0xa770b99d, 0x245fa541, 0x588dfa3e, 0xddc3fae7, 0xa5dbd754, + 0xcb9ff3ab, 0x9617fbe4, 0xce387364, 0x576a3265, 0xd0ebca14, 0xc9b84c7d, + 0x4c2739a6, 0x5c43676d, 0x6bce708c, 0xf8ab70e6, 0x46501d9e, 0x1c4e7be1, + 0xb6c26eec, 0x147f26b8, 0xcf6bdbe5, 0xe6ffa137, 0xd0f17cb9, 0x665f29b7, + 0x989e3056, 0xbbcda9d3, 0xfdf36535, 0xfe24bb96, 0x9c77a79d, 0xc971f14c, + 0xc7f89938, 0xe29a3b3e, 0x1989bb57, 0x853fb0e3, 0x95c545fb, 0xcfb0a3c9, + 0x3f9227a6, 0x49587c58, 0xca14545c, 0xadc7d983, 0x5d3c414c, 0xf22abeb1, + 0x9c586f69, 0x2fcf481d, 0xebad5f5b, 0x95f68d78, 0xf152ebaa, 0xfb49d6a2, + 0xfbaaafaa, 0x1f953c1c, 0x7865f669, 0x98b1eee4, 0x7bd92c7f, 0x59f62cc2, + 0x43f3d2da, 0x3d92d7f5, 0xaaeea9e7, 0x0d3d59d6, 0x86afc9e7, 0x947ce8e7, + 0x067f2012, 0xabddc9e8, 0x59f5fd79, 0x36db0780, 0xe013bf58, 0x1fac3dfa, + 0x1fac3f5b, 0x7ab0bfaf, 0xd581b520, 0xadf76a0e, 0xc7ad411e, 0xb5ea9e7f, + 0xed7b3317, 0xde7aa48f, 0xe3eba351, 0x48feed4c, 0x7debebea, 0xaf9e18c6, + 0xd1361cf1, 0x0e9e0c77, 0x72efe90b, 0x8c3cbcff, 0xe23e3e0f, 0xebb843ce, + 0xc616deb1, 0x8e9ce717, 0xe3af3c68, 0x8d11cb9c, 0xf692b675, 0xffdc6633, + 0xcd072f52, 0x88030f98, 0xa26b70b3, 0xbe79f767, 0x1e5fd7bf, 0x62bdf88d, + 0xffedac5d, 0x4cbec5d7, 0x90c1ec5d, 0x291e927c, 0x5b9c1976, 0x8cec3db1, + 0x27a6145e, 0x3d78bbd6, 0x3f417d65, 0xae4dc392, 0xc30b897e, 0xe4ac6be6, + 0xb8fb0bf9, 0xebf0e882, 0x3af366ef, 0x2fcf1d98, 0x09fef08a, 0xdebb5f59, + 0xefc9109e, 0x85b2f73f, 0xdf691bbe, 0x93af24b3, 0x8f9b4bf8, 0x30b95f5b, + 0xf1a7bf0f, 0x85628b1e, 0xc9a75f3c, 0x3d5d31c7, 0xdcbcafae, 0x33834aac, + 0xeeace29a, 0xfadbb45c, 0xbb9319bc, 0x775db973, 0x2473f166, 0x046c59bc, + 0x7b9755eb, 0x2f5ef99b, 0x2b33f180, 0xd42f640d, 0xa5715cfa, 0x7f0356cc, + 0xf932af16, 0x29572ea8, 0x22fba09f, 0x15b46c6e, 0x1f9f2167, 0x22db30ef, + 0x5476abed, 0x0fdcde3e, 0x4ad4779e, 0x95d65c0e, 0xdbb377ea, 0xd164c7da, + 0x94466dfa, 0x8c43d493, 0x5ded5bbe, 0xbdfbe3cf, 0xf34b598b, 0x0ac71868, + 0x8fb4360c, 0xf21b3cfa, 0xa3ef9d19, 0x15afc3cb, 0x8b36b07c, 0x8880addb, + 0xbf858b37, 0xe7a73ea4, 0xa4b3379f, 0xffebcdcf, 0x39fb8b31, 0xebc5958d, + 0x13be900b, 0x49ed0c0d, 0xa5856563, 0x87be6c20, 0xe79a64b2, 0x260fac41, + 0x7907d787, 0x175f501d, 0x495cf554, 0x116327fb, 0x5f409bdf, 0xa4f31da3, + 0xc941faf3, 0x5187e50b, 0xe4e0846f, 0xde94dbeb, 0x22761df3, 0xb862ebe3, + 0x57bbce5f, 0xf15cfca2, 0xc5f68fc4, 0x895cfe22, 0xa7b9be74, 0x1c5d60a3, + 0x7289a3ea, 0xe3bf7e19, 0x753d4971, 0x4d27ac26, 0x3c66b57b, 0x32504f7e, + 0xc411e863, 0x136a8cfb, 0xf69c07ed, 0xbc58d56a, 0x92bfdaae, 0xc6d75b19, + 0x9281fde0, 0xfbc15a23, 0x7f781595, 0x66008ec2, 0x8424d9d2, 0xb079f40e, + 0x728c94e3, 0xfdc586f3, 0x5bc0164c, 0x99d44532, 0x9e9db9aa, 0x62629fe1, + 0xd8d49fdc, 0x1f39fdcd, 0xa2e83e53, 0x47ea84bf, 0xa1efb849, 0x4aaf6428, + 0xb31d82f6, 0x57d8ec86, 0x666f5fb5, 0xd79f08d9, 0x78431d83, 0x7d7853ec, + 0x87ff4f5e, 0x65f47f04, 0xc3d2fa97, 0x7cf07f68, 0x294f9417, 0x571db7bd, + 0x1c33ef30, 0x0f0975fd, 0xff93e97f, 0x3f9e2ce4, 0x9fc3ec4a, 0xad3f08b3, + 0x6d537dcf, 0x933a9eff, 0xa4bffd9c, 0x2fe224ce, 0xc6a4deb5, 0x9e04f36b, + 0x68be76d5, 0x0c77f2bf, 0x7e235c68, 0xfc8f60c7, 0x569cc31d, 0xfd44df3a, + 0x99a0e18e, 0xc64cef95, 0xbbe2b3fd, 0xfc8b9f26, 0x7f3f83a4, 0xc9d7e9bb, + 0x84935df8, 0x3d806a27, 0x5e76423c, 0xdeaf273d, 0xb7cf01ff, 0xe07df2b6, + 0xcf916d75, 0xb0a5f99b, 0x3d61a3ef, 0xfb119f54, 0x16eec76b, 0xd9a72275, + 0xde63e4a7, 0x3c392ef2, 0x8251e96f, 0x5dbeea29, 0xda7bc51f, 0x795f663c, + 0xfbf57acb, 0x81c91afc, 0x755cd1df, 0xf7c9d31e, 0x3cd97ee1, 0x9eecf8e6, + 0xc754b87d, 0x7ae4caa9, 0xd12dcaa2, 0x83165179, 0xe7f696ab, 0x22d920bf, + 0x6776ebed, 0x209d7973, 0x32bf20ea, 0xd5f8fe73, 0x8bed120d, 0x90edefc7, + 0x817abfee, 0xabf36f7f, 0x8dbdfe62, 0xbf50f75a, 0x5436b9a3, 0xecefa0f7, + 0xd46fefd4, 0xefd469ef, 0x8e6ca737, 0xefa6f3a1, 0x73a6b533, 0xf04bd7bf, + 0xba3367c6, 0x1ac5131f, 0xc4ebc922, 0xecf8f2ec, 0xb5f71c32, 0xb22b4ffb, + 0xdb4ff823, 0x77791c45, 0x160bc436, 0xb85e2916, 0x8b0b9f07, 0x8fafa817, + 0xbaaebe17, 0xfb367447, 0xfcfdd7ba, 0xbe8f9c37, 0x9d9beb3e, 0x8476507f, + 0x3c89d7f9, 0xba7f9e96, 0x7f4abe45, 0xf5eb3bee, 0xebb7245d, 0xe6f292cd, + 0x374f548d, 0xd55d3d51, 0x3e56cdab, 0x3e841fff, 0x45b7db55, 0x9c8a6cdb, + 0xdc577b2f, 0xbe74683f, 0xe8327c80, 0x72fe6d49, 0x7f36ab70, 0xf69b7d79, + 0x01a1911c, 0x252139ed, 0xc6e7b587, 0xe7b50594, 0xa63f0cc6, 0x6466373d, + 0x98dcf6a7, 0x9ed7df1b, 0xb773731b, 0xedf97f36, 0xdf75534b, 0x5d78fa6b, + 0xfc373808, 0x059651b9, 0x0c6af3ba, 0x626af3ba, 0xe8d5e774, 0xf31147ce, + 0x75337be6, 0xd768d6e7, 0x5c7ac767, 0xe3d7d5d1, 0x9ea7446e, 0xa3fd71ea, + 0x2b07b9f1, 0x22f7e80b, 0xffa6efd4, 0xb4d9f053, 0x903ff71c, 0xc76bdcaf, + 0x755f23d5, 0xc5ca89ae, 0x6d7b8bbc, 0xf8193186, 0x44bf7dc1, 0xac57cddf, + 0x3dfda0cd, 0x92871a0b, 0x9ccc549f, 0x4ecd27e4, 0x79cf1162, 0x7ae1c9c8, + 0x89837e6b, 0x65f01399, 0xe7cf198a, 0xd12cdb3f, 0x0e78fcf9, 0xc3e024f1, + 0xb0f9c61a, 0x7891fd6e, 0xbb0b7baa, 0x82a394b3, 0xa12c34d5, 0xe7f41cf3, + 0x56b2d4bd, 0xb3cc0673, 0xc93b636c, 0x17fcfe83, 0xc4790ed5, 0xdaad753c, + 0xf1b61efb, 0x000efd3c, 0x9da334eb, 0xef69b4f1, 0x3b08e5a7, 0x940e60e3, + 0x565df71b, 0x1597fa0b, 0x36f32f02, 0x0fac364a, 0x4f6c682e, 0x0bfa15b9, + 0xde291b0e, 0x7ac2f152, 0x4453cf9d, 0x385fdde7, 0xf3fe485c, 0xc3494505, + 0x1e78ee71, 0x7bb2482f, 0x9d9f5e38, 0xe78e1ee4, 0x65bf75a2, 0xd87c6fc5, + 0xf2064b89, 0x1a07c017, 0x8d9b7e42, 0xf3cf090d, 0x52d933ce, 0x65e2cf31, + 0x9c53a477, 0x755ee229, 0xc40b1edd, 0x87d8f1b1, 0x4faf9538, 0xba224cfa, + 0x06eb4991, 0x03df08bf, 0xb1c50ffe, 0x83596616, 0xa519cffe, 0x5f5d1525, + 0xf226bdd7, 0x48efe62b, 0x7e62bf24, 0x9e3328e3, 0x777f307f, 0x659fed22, + 0x186be75e, 0x3c74aad7, 0x287258d1, 0xdf9de61d, 0x6a30ef9a, 0x1389a7e9, + 0x509f3597, 0x0aea76e9, 0x89153b74, 0xcd2f406e, 0x7a3a49f5, 0xe8927bb1, + 0xdbeabdfb, 0xbe62160f, 0x344342ef, 0xef42fefd, 0xfdcbc038, 0x4d64ece2, + 0xd99953bc, 0xf9d1c713, 0x963717e1, 0xf4f4dd11, 0x82d7fcaa, 0x157df8e1, + 0xd0cadb7b, 0x9fdd98df, 0xd70a9dcd, 0xbe5c4ae7, 0x571baf66, 0xe2ce7e89, + 0x5f0fae1c, 0x11d17115, 0x8fc08b8c, 0x45c633ff, 0xc45d7fd0, 0x5c626f45, + 0x185bed04, 0x4a7b4117, 0xcaa84b9c, 0xf1003019, 0xaf90ad6b, 0xbe351cda, + 0xf98e9958, 0xfd7fcab4, 0xc360ccb9, 0x32ddcf4b, 0xc9b18726, 0x5d3fad4e, + 0x4feb5d35, 0x636c9a77, 0x135f69d3, 0x77cc0faf, 0xcf19a8dd, 0x798cc564, + 0x24b0360e, 0x8fec9d74, 0xc73cc662, 0x9a4989cc, 0xce6ddff1, 0x731bf4d2, + 0x4a6f8214, 0xf5cd7f65, 0x6907aadb, 0x012ef3fa, 0x7b904a12, 0x699cfced, + 0xa6512711, 0x6f54353c, 0x7861a8f8, 0xde00f7da, 0x744c3a8f, 0x950f4f5f, + 0x1b370bae, 0x60bb7f28, 0xe60dac33, 0x80b2d53d, 0x6383eae4, 0xa6373a56, + 0x2bc94769, 0x627fa023, 0x93f68987, 0xba4c689d, 0x3ed1cf1f, 0x1e2523b1, + 0x3773cbbf, 0xf4805919, 0xacf48dac, 0xc6a8ef3a, 0x163bf435, 0x0e517cf3, + 0x0779ff94, 0xfb54bfbc, 0xb6803fb8, 0xbc7ca0c8, 0x2405f466, 0xf0939fa2, + 0xf29a3dbb, 0x989befe2, 0x6b3a7f17, 0xeb872741, 0x6235897d, 0x5ff44cff, + 0xe00f7c07, 0x65a93b38, 0x28fd01b1, 0xe90a4763, 0x0c8da7cb, 0x76fab6f9, + 0xbc739d13, 0x56e375f4, 0x38a933ec, 0x48dbd38b, 0xb6c2cbbf, 0xacfcd147, + 0xc604381b, 0xd475fcad, 0xcf220db6, 0x0667fd45, 0xfe0836fb, 0x3f7a3e44, + 0x09133991, 0xf86f9e58, 0xaa1491fb, 0xe9f084f3, 0x7eeb821b, 0xe5b57651, + 0xbefefd00, 0xf48437d8, 0x24293dda, 0x9fbc7a57, 0xe5bd7332, 0x42903945, + 0x672432fa, 0x05ab3bfc, 0x83aa4726, 0x066955f4, 0x1b53abea, 0x6457944d, + 0xd79e33b2, 0x3e269ee1, 0x4a73df56, 0x7c22c656, 0xe9f39aa7, 0x1bf9c23b, + 0x90ef648d, 0x1f78f8ff, 0x301e73f7, 0xf75e31ba, 0x8c6e4b36, 0xb37cf5d7, + 0xf4e1f6e2, 0x10730e7b, 0xeb7b2327, 0xbc197381, 0x97f6a0ee, 0x37bfe5ed, + 0xe53b4ac0, 0xd7c383e9, 0x97dfc8d1, 0xcf57e7ce, 0xf7edaf43, 0x6478e3c7, + 0xfdc385d3, 0x9c7bf013, 0x8919af33, 0x6bf4cecf, 0xf40e9619, 0x6fb0d0fc, + 0xffa0f7d8, 0x69ef24c1, 0xc6214519, 0x75e22efd, 0x2e6361b9, 0xe5dd0f7e, + 0x8dff793f, 0x9fdfdcf0, 0xcc483932, 0xfe90a557, 0x697db658, 0x1f7de7de, + 0x932058c4, 0x199d19e7, 0xb973e012, 0xf3163ad2, 0x4b988b07, 0x1f8e21d8, + 0x63cf0765, 0xbcf136d8, 0xeb32c9c6, 0xb6cfdc06, 0x38b79740, 0xbc13be29, + 0xfc692394, 0x79739b84, 0xf381817f, 0xcf2dfb37, 0x469fc167, 0xefc47bff, + 0x5f7aa8b4, 0xacb5d7d5, 0x8ecdce85, 0xf347edc9, 0x347c952c, 0xc04f1eae, + 0xd8b51506, 0xdad5e3c6, 0x147ca327, 0xe9602a8f, 0x8980fcc2, 0x4f3f0ab9, + 0xc3d4fcd7, 0x584bb6c8, 0x374faf90, 0xdf26efee, 0x6f7e60e2, 0xb6d8b37b, + 0xf34ed1b5, 0x5fb81c9b, 0xd3908971, 0x17c916ba, 0xbb20ebe0, 0xb3cc48b9, + 0xbd4dd848, 0x8f65ea7d, 0x91687674, 0x16b2cece, 0x78055dad, 0x2a3df0e3, + 0x5d387abc, 0xc3c256b1, 0x3e7e16b2, 0xefb762c7, 0xb7042dd0, 0xf64a00e4, + 0x73096782, 0x75c44e8d, 0x71e3c93c, 0x75fa7c3d, 0xac5782f5, 0x62f70f53, + 0xb180f9c7, 0x064eff94, 0xadd4efed, 0xde87a543, 0xb2e9535f, 0xbbf1cbd8, + 0x3d112fd8, 0x03f1eddf, 0x5503ed19, 0xc2b585f9, 0x5de79a7f, 0x5b3ea0b7, + 0x6ff409b2, 0x547f887e, 0x5ac65a7e, 0xea5f91e3, 0x4b09a059, 0xad0267ea, + 0x8f991ddf, 0xa11d32e7, 0xedaaa3f3, 0x22434281, 0x9f9af0a2, 0xe21cde54, + 0xaf9e3d6b, 0xc5abd744, 0x0475131b, 0xb4f00e7a, 0x7d2371e8, 0x4e3613d7, + 0xb25ebfc4, 0xaf5e358b, 0x35cbeb19, 0xee373f32, 0x647a704a, 0x5759fbfe, + 0x3f0fb784, 0xfdc2abe9, 0x8fb15cfd, 0x559f97ac, 0x4f491098, 0xabfceba9, + 0xb4572bd0, 0x56e3b2ef, 0x453df646, 0x5f4c7cc2, 0xb0b17afa, 0xced08beb, + 0xf37a7b43, 0xf18f3a2e, 0xe8bb4ddd, 0x53f355dc, 0xc25f688b, 0xee0bcde9, + 0x38b5dfc7, 0xd90163bd, 0x573f25f5, 0x1cdbbaed, 0xda8c2fee, 0x1fb1ef3c, + 0x193ebf20, 0xc5e3754d, 0xce22dc07, 0xe30a3d01, 0x6f5ccd94, 0x8f5c4db2, + 0x57fb412e, 0x1aeff644, 0x62d7771c, 0xf7c835f7, 0x2ec9d761, 0xfdc0b5de, + 0xef30bdbb, 0x7589bf5d, 0xb6c96978, 0xdb3bcf00, 0xeaff6802, 0x38f378ee, + 0xd817befe, 0x56efd7fb, 0xd9d13ded, 0xca2e64fd, 0x75f3b097, 0x36b9adc6, + 0x5d840bf4, 0x7be377f8, 0xfc9be23e, 0x77ef8e29, 0x4f9e399a, 0x6f78e46e, + 0xe29fd1da, 0xfb9a77d3, 0xcef51f93, 0xf7c2428e, 0x6f800dc2, 0xad15a3f2, + 0xf80cd51f, 0xf10138c6, 0x3fcd700d, 0x3b7c08a0, 0x399bbe38, 0xde46d99e, + 0x5785ec2e, 0x7eeb9d2f, 0x39447fd7, 0x3f782fd0, 0xd2fe403a, 0x748d3bfb, + 0x67ea99e6, 0x3fce7ea9, 0xd12fcb58, 0xbdf1531f, 0x08704074, 0x07ea97ea, + 0x788f18fe, 0x2793ba5f, 0x9be17a47, 0xdfd0d339, 0xc7bfbd0e, 0x6e4bfa2f, + 0x05f45fb8, 0x5ccf52e9, 0x1eb91fb4, 0x121b23cf, 0xfd59efb6, 0x3efd3a5d, + 0x23e78567, 0x62c398a3, 0xf5b27841, 0x66e7b7bf, 0xe3f9efb8, 0xee73f3c2, + 0xd6ee3920, 0x2dc7cefc, 0x73c2602c, 0x44ab580a, 0x56ea59fb, 0x3397c796, + 0x81b4973c, 0xe3c948e0, 0xbe3a83f1, 0xff2068ce, 0xfdccd6b0, 0xe83cf544, + 0xdc7cb9cb, 0x771e5ce5, 0x46d733fc, 0xf30bbffa, 0xcaafb8eb, 0x3afca66a, + 0xf8e94bc4, 0x28deef7e, 0x8471dba2, 0x346ff009, 0xc4fd738b, 0x675466b9, + 0x8acdb585, 0x9da5f353, 0x7a7e528f, 0xfc839455, 0x3a04e4d6, 0xa136f39f, + 0x35c566cf, 0xcfff50b9, 0xb13b338e, 0xf8bd7985, 0x0aa62263, 0xdfbc3d78, + 0xf3a66994, 0x9d2dabf1, 0x3b68614f, 0x9de4fd37, 0xd96e0316, 0x3c89b46f, + 0x92cfeeed, 0x4425d37a, 0x6d39ed1f, 0x79c8989e, 0xee3cdc8d, 0x274e4907, + 0x60a20fd5, 0x238018ee, 0xd7e14f3f, 0xb675bec5, 0xed64e805, 0x7a9bde7d, + 0xf9f9799d, 0x3f00b5af, 0x067181bb, 0xd7f84119, 0xfccd6bf4, 0x4dbc88fe, + 0x33653793, 0x83299476, 0xa8b56e91, 0x9f7e3033, 0xfdc3e097, 0x3cf1935a, + 0x32b63b28, 0x9954cbf1, 0x6dbc0d79, 0x863ac38e, 0x16ea0738, 0x2319cf81, + 0xf0012058, 0x7b51781e, 0x01ade21e, 0xc01ae043, 0x6f3c64ef, 0x2b9e086e, + 0xf06c98a7, 0x54a5571e, 0xed47718c, 0xef062fda, 0x08c7bc84, 0x81835ade, + 0xcf3779c3, 0xbcc2cc33, 0x8e61e03b, 0x8b180ecc, 0x5e201f39, 0xf685763c, + 0x2edf746f, 0x35133ed1, 0x7fd2aedf, 0x4edf2868, 0xe0259c74, 0xe39a7983, + 0x647379f1, 0xa79add7a, 0x14adc7c6, 0x72172f37, 0xb7955cb7, 0xfb795a1d, + 0xf4474a9e, 0xb36f0173, 0x5c97db44, 0xb0fc14ac, 0x15d78f32, 0xf7c97fe6, + 0xfe7e38b1, 0x752f2aa2, 0xf57e7c51, 0x7b4593fd, 0x9f9d9e47, 0xfafa2147, + 0x96a9fb3c, 0xd4ffe475, 0x7b3cc97c, 0x7aa11e98, 0x5eee6496, 0xbe97a888, + 0x3d40ed15, 0x5adccb3a, 0x7bd710d8, 0x609e7a9c, 0x789a0b35, 0xea699fde, + 0x718c639b, 0xb5653e74, 0xb5277fc4, 0x35eadcab, 0xc61e6024, 0xbeada444, + 0xf7379f9b, 0x6fbe68d7, 0x5dc27673, 0x575ca0b7, 0x3a659bc7, 0xad058f3f, + 0x7d21f9f9, 0xa46e54da, 0xf79907f3, 0x0f58c9d5, 0x877a875b, 0xcce27ff7, + 0xe891aca6, 0xee2af6bf, 0x197e9a27, 0xd7fd4fe8, 0xfe613b27, 0x3ee283ae, + 0xef9e837b, 0xb1f057ba, 0x38c9edf7, 0xf521ebbe, 0xfbf27ffe, 0x27fbd5eb, + 0xab1ffdf9, 0x03fe8bf3, 0x746bfbba, 0xfde11ff7, 0x393b1fc7, 0xaa788bd9, + 0x7d5d2ce0, 0xea7a4483, 0x819ff403, 0x036bd59e, 0xc36adf84, 0xb056de3e, + 0xcaf4a180, 0xae7982e3, 0x303fd00f, 0xd1594f5a, 0xdf2dfefe, 0xa3da01f9, + 0xbfdc7397, 0x6938c3cb, 0xa335e48a, 0x47cd7dbe, 0x3e96e0f6, 0x40fe73be, + 0xc2a0f3e8, 0x0df153e7, 0xcd5db4f3, 0xcf7a733c, 0xf2979ed3, 0x9c19e7e5, + 0x979e6bdf, 0x9f9e06ae, 0xfd51e6ea, 0xe77f471b, 0x3b1f38bb, 0x9f39ac95, + 0x1d0ff97f, 0x625f9809, 0x0aef88af, 0x96e6b6d7, 0x7fcbfcc0, 0x317727bb, + 0xcec253fa, 0x30325fd7, 0x5f9e0967, 0xa0fda8c1, 0xbfbe2dfd, 0x79bb776d, + 0xa1ede62c, 0x5706151d, 0xa777cf6d, 0x30d4f29d, 0x3cf7fcfb, 0x00ff2eb5, + 0xf6fd77af, 0x5cf48c8c, 0xfd3d686e, 0x37dbb473, 0x93bf1148, 0xcdf42a3c, + 0x577e3ef1, 0xa5e85ba9, 0x176742dc, 0x1e48f3ae, 0xacb7dfe3, 0xf32e7c8b, + 0x57cf8548, 0x82deec2d, 0x028b5661, 0x8d7b2e78, 0x78bc639f, 0xe6317e4b, + 0x54e7cf7b, 0xeb78427c, 0xcdda5f33, 0x9e7ea5f3, 0x07b6ad2f, 0x66f28257, + 0xc5b18aa5, 0xffd8f102, 0x5a47c000, 0x008000fc, 0x00000000, 0x00088b1f, + 0x00000000, 0x7de5ff00, 0xd554780b, 0x333ef0b5, 0x66491e67, 0x666bc992, + 0x9e4c2102, 0x08601024, 0x32c3c30f, 0x04118079, 0x6c108027, 0x0f0c49d0, + 0xf1019091, 0x0cef1516, 0xd4a04784, 0x54436a86, 0xa20301d4, 0x6b111b45, + 0x4013516a, 0xc18b406f, 0xad6f6b5a, 0x50452037, 0xff5c08d0, 0xff2afef4, + 0x93ef6b5a, 0x004c99cc, 0xefff7b7b, 0xbe7fbeff, 0x9d676f8f, 0xac7ecfbd, + 0xed7bdebd, 0x8cedf4c3, 0x7f0c01b1, 0xac64662e, 0x03c0a0c4, 0x00c9c5dc, + 0xd825af7f, 0xf7af8816, 0x8f6b189b, 0x73ba7764, 0xc3705b19, 0x823648f0, + 0x28d4ceb1, 0xb186258d, 0xc62b93af, 0xf9f11238, 0x79f1538d, 0x559cc181, + 0xb37ea261, 0x77ac66dc, 0xb63d60c7, 0xf3192367, 0xe7135be8, 0x4c794025, + 0xa03bf4eb, 0x09e5111c, 0xf057bf40, 0x34b7b937, 0xc18c343b, 0x161c637b, + 0x3035db2a, 0x79debccf, 0x6633e328, 0xfd01d559, 0x34975e9d, 0x37f40b6a, + 0x68c1507b, 0x7f194f1c, 0xc38f20f6, 0xfc77b631, 0xd5961ad3, 0x3cff5d28, + 0xe03ce106, 0x06d0d1fd, 0xa49ee1e7, 0xf5232e65, 0xbfc0aecf, 0x2a51c559, + 0xf12dce78, 0x0bdd95cc, 0x50339dcf, 0xa7959705, 0x5edfdaab, 0x3f554c35, + 0xc631d0c3, 0x0d5bf88b, 0x9df52583, 0xe632528f, 0x98d4f9a7, 0xac1291cd, + 0xff07afeb, 0x8f1fc3f3, 0x26abec61, 0xb98253ad, 0xeefafdde, 0xab42270f, + 0xf1bfb08b, 0x11ded879, 0x3f7ac323, 0x2db2d76f, 0xbb267eb0, 0xc65619e4, + 0x63155096, 0xc3475817, 0xc4be7824, 0xdc16f8bb, 0xba03bbc7, 0xf3419d53, + 0xbf5b61ac, 0x7bf3c2d6, 0x0cf4472c, 0x5ecf7250, 0x11923d75, 0xfe3b62b3, + 0xff0e6eab, 0x1e84ec3e, 0x45a6a5f7, 0x61c73f5d, 0x0c33384e, 0x7963c8fe, + 0x2ef48057, 0x2298ff7a, 0xdcb631a5, 0xe177d7c4, 0x0ef527b7, 0xb0b7cbc4, + 0xdd8c71fe, 0xbb422f84, 0xc3c06e9a, 0x5a8ac668, 0xa13bea4e, 0x0760f2fe, + 0xf27965e1, 0x1c31d90a, 0xc174a1ea, 0x952d4ebe, 0x2f4031fc, 0xf86c6d1d, + 0x3f83c001, 0x8ddcecd5, 0xc59eecf3, 0x95d23c58, 0xf01638bb, 0x758d6ed7, + 0xf71742d6, 0xf3d095d4, 0xd491dde5, 0x8eda7bff, 0x7bdf0ca9, 0x53bb6255, + 0x2e069f61, 0xf1a2c758, 0xbdee7f3d, 0x5f8cee30, 0x788254df, 0x72407e5b, + 0xd0cd1d21, 0x05663fbe, 0x4beacb94, 0x5a19fde8, 0x31c52ed6, 0xecc8bd36, + 0xcc10c4d7, 0x71dac018, 0x600c2de6, 0xeb35bead, 0xe99fe809, 0x7e305e61, + 0x34edf74c, 0x91b74d7e, 0x21c87fde, 0x3aea1d11, 0x74a6bcf9, 0x42b9e9bb, + 0x348eb50f, 0x5d6057aa, 0x695c9362, 0xda8cf6c2, 0x4a1eeb4f, 0x63deb2a5, + 0x7824cfd9, 0xf2f13eb0, 0xeeb081d4, 0x05920963, 0x274ec4a7, 0xef1f7068, + 0xc9737b15, 0x330c437b, 0xba874ff5, 0xe84c606e, 0xa8cdd0cf, 0xeb9a69fc, + 0x99b7e431, 0x23653a6b, 0xb464c7ae, 0xe666be20, 0x0a2c728f, 0xa1ed2fe2, + 0x1fdc7af9, 0xf427a3dd, 0x00dfe82e, 0x7d505165, 0x9cd77435, 0xcf22f44b, + 0x7f3ef732, 0x6323f05a, 0x899ca96b, 0xf62e90ed, 0xd018c83d, 0x41161dc5, + 0xb67f8280, 0xbca2390a, 0x8fb481df, 0x218af8fb, 0x6efe1bb0, 0xc7ecf34a, + 0xb01476f9, 0x8fd8fdb2, 0x6a5291dc, 0x1fcde7fe, 0xfb88d9f6, 0xe170eb0e, + 0x1df333b8, 0xdfd02d9a, 0xe0eb3dab, 0x75ad7c7c, 0xbc758934, 0xb1ab65a7, + 0x4f26f7df, 0x7f4170ee, 0x1e8e0f6d, 0x8ef475ad, 0xf3d0eedb, 0xdf5d2d7e, + 0x9ad7d832, 0xc81ca237, 0x6f6033ef, 0xdd7aee10, 0x4a95d810, 0x809499cf, + 0x049761a5, 0x5dd135f5, 0xbf186e59, 0x5688cde8, 0x37b6e3a4, 0xe3066423, + 0xda7a6694, 0x6f453f11, 0x8096290e, 0x0d075dde, 0xc743d232, 0x7c51d760, + 0xaf7cdfde, 0xe942b725, 0x4f4fe14c, 0x0a97e71d, 0x8295a741, 0x8f823cff, + 0xc46d792e, 0xc0d69787, 0x951d61a4, 0x07e1a46b, 0x330ca0c6, 0xbd1d333b, + 0xab43397c, 0x18cef5a1, 0x85a81b16, 0xbee077a6, 0x87cbef8f, 0xd42dbacb, + 0x43b7756f, 0xc11c7bf0, 0x0a55df0a, 0x9d2031be, 0xe8255c03, 0xe79a74fc, + 0x6667a8ef, 0xc3df02d4, 0x49759e78, 0x7a9f9063, 0x416f46e9, 0xb1ba02fa, + 0x9fe20a2f, 0x30f9b6da, 0xc12fe855, 0x0553744d, 0xfd505165, 0x980e8542, + 0xe615aa65, 0xaa7d733f, 0xadeb0b66, 0xc1d05eff, 0x17ffd2f5, 0x4d2ace82, + 0xe81a99ad, 0x708de74f, 0x5d7983ae, 0x454c704c, 0xccdcacfc, 0xe752b8f1, + 0xbcc3322e, 0x39263e57, 0x5dd88761, 0x9446cce3, 0xf23ee34b, 0x74413dea, + 0x047bbf3d, 0x661e0073, 0xf9506777, 0x298f20f5, 0x6bf71135, 0x08d7c0ae, + 0x4e31992a, 0x6559f383, 0x8405fae4, 0x316fdf1d, 0x1bdecbbf, 0xf1813f6c, + 0xa3abbf2f, 0xc912b3fa, 0xe5d6367e, 0xa5e70a7f, 0x3b9c180b, 0x75675e61, + 0x2d816fcc, 0xc351abb9, 0x2af780fc, 0xb4f13d28, 0x33b61754, 0xb40da07c, + 0xe658bb61, 0xbc43cd8a, 0xf4837ac2, 0x23a939e9, 0x7f5027eb, 0x22fd4661, + 0x8cea3a4d, 0x0f511377, 0x65afd85e, 0xf77e785a, 0x28acb78a, 0x3bb5aa66, + 0xbf502c53, 0xe9640a4a, 0x951e1040, 0x5d70433d, 0xfcdedf9f, 0x3bb43e61, + 0xb472ff5d, 0x372f4827, 0xd899adcb, 0xd3e0334f, 0xde6f730f, 0x70092daa, + 0x74aa27bb, 0x2b9d2f78, 0xef4a1d74, 0x88d3bb4b, 0x0d792eae, 0x012e8fa4, + 0x7d20b2fd, 0x451fe8a4, 0x487a2bde, 0x996aefa1, 0x536ab1cb, 0x1a9fc04c, + 0xdd4a7fac, 0xd97f4805, 0x05933392, 0x0f5d9feb, 0xf87e404f, 0xcb59c12a, + 0x2847f57a, 0xb3eabc3f, 0x57d4e583, 0x5df228ff, 0xfe8af791, 0xffd5fc2a, + 0xe1dff97e, 0x9e69b1cf, 0xa6be231f, 0x4d8f5cc9, 0x4744cd93, 0x654a1253, + 0x97eb9fa4, 0x3c8527a7, 0xa792a93d, 0x07d1fbcb, 0xc61fd49e, 0x7b45330f, + 0x8ec977b0, 0xdc1f7944, 0xe15a535f, 0xcfd0a9bd, 0xcb8954ea, 0xbcd27fe5, + 0xab03d3fb, 0x7d7fe67b, 0xea61607a, 0x9f81e9f5, 0x103d72a6, 0xf419f72a, + 0xabff7287, 0xa80273d7, 0xa0613e17, 0x1e1f5027, 0x16ec728c, 0x46f4817a, + 0x6ae04c64, 0xf325217a, 0x7ee29fae, 0x5b0bd187, 0x7a1bff53, 0x8543a141, + 0x513e146f, 0x8f9422f8, 0xfe98be14, 0x4fcc6753, 0x31009f70, 0xfec9d764, + 0x6a8eb87d, 0xe428d447, 0xee7b1ecf, 0xd6fc4480, 0xfe085f47, 0xb517e5e9, + 0x42f850fe, 0x7f8517e1, 0x2c5f05aa, 0xc38be10c, 0x2647e6da, 0x34f67bc0, + 0x0f88ebcf, 0xed964f85, 0xfd13d50f, 0xba4315d2, 0x65e0985a, 0x50d55748, + 0xa195d306, 0x94387e1f, 0xa3ecc3fa, 0x5afed166, 0xa447f4f4, 0x51ffc4a7, + 0x6a63fa7a, 0xc3e33b78, 0xf53d0eff, 0x34ff67b5, 0xb9f301c6, 0x6de40634, + 0x4dbd2f6a, 0x3b71877f, 0x05fb9d22, 0xbcd267e0, 0x0283f5db, 0x0aeed8b5, + 0x151e22f3, 0x59f654ba, 0x22160bb1, 0x4b69401d, 0xf217ff77, 0x2b05fa05, + 0xd1ee4fae, 0x3a121b3e, 0x2ca7e8f4, 0x1ed83284, 0xbe0ecfe8, 0xdee503f2, + 0x1b94eb85, 0xcfbe3496, 0xd1fb44ff, 0x4e5e1692, 0x7ff3e2c4, 0x14675f74, + 0x48af1131, 0xc325752c, 0xc05cfcfe, 0xe2297b7e, 0x52be6e71, 0x92e6dd6f, + 0x9fc03e51, 0x8a046813, 0x55a7bc77, 0x6289db60, 0x47f4cf98, 0x58fdea7a, + 0x4c52653f, 0x62447c4f, 0x699dedbd, 0xd2b62709, 0x3e73d47e, 0xeeca74f3, + 0x18f041e1, 0x7041cd80, 0x83bc087e, 0x3b968fb7, 0x85ec8599, 0xd0d39700, + 0xf7c794bf, 0x3f641dd9, 0x2e47f0c0, 0x48b0bea1, 0x351be30c, 0xbadf3b09, + 0x45ad7284, 0xf7e7e862, 0xb83fc1e0, 0xe40935d4, 0xc04941db, 0xdd7027e9, + 0xf0e01fb7, 0xb6435dbc, 0xbf4433f9, 0x04cb0fc0, 0x92cd75ba, 0x2dfd0b4b, + 0x690297cb, 0x3df17da9, 0xa7ed4d2f, 0xbf564fe0, 0x3f09f4cf, 0x6fdc7dec, + 0xde8d3f7a, 0x80fc356f, 0x624de7f1, 0x7f1840ae, 0x2bb45ab4, 0xb613131e, + 0x2d34befe, 0x0fc45f1f, 0x34787c68, 0xebfb99bb, 0x4a1feda1, 0xa1d2fce3, + 0x167c08d1, 0x76fc436d, 0x177c15e8, 0x9bba436e, 0x8e2a98c2, 0x5c13e306, + 0xb4b0abb7, 0xd72f832e, 0xabaf8215, 0x61c7f7ad, 0xd90fe5f0, 0xf055c32f, + 0xda9a677d, 0x439fc09e, 0xd5eb7efd, 0x9f616bf6, 0x2edd05f7, 0xa5d8e851, + 0xd918f7a2, 0x9319f44d, 0x8e305920, 0xb11ddcb6, 0x5e86fd15, 0x74499cfe, + 0xc6a111d9, 0xddff2f53, 0xb7fc8a5a, 0xa58f07bc, 0xdd7f90db, 0x9cf69e9a, + 0x86ba151f, 0xae81b3f7, 0xef07f429, 0x6f734aef, 0x5d12e7f3, 0x72c13d50, + 0xf943bcd0, 0x9e0439b1, 0x82bfc214, 0xa07e48ff, 0x653c003e, 0x384b7ca2, + 0xd10477a9, 0xa7d89b49, 0x432b120b, 0xc851da79, 0x348ec9ed, 0xe34c9e5e, + 0x8151e3f6, 0x3d0a13cf, 0x41e10645, 0xe8ad3f4d, 0x9bad04b7, 0x413f34f0, + 0xe96f67e1, 0x1d4f402d, 0x2ffebc71, 0xf36d96bb, 0xa1c2f727, 0x9775fdfd, + 0xb6e314b7, 0x97fbfd3d, 0xcebc409f, 0xb93b7817, 0xdf84e6ab, 0x4ad9f624, + 0x30fc867a, 0xca3f0fa0, 0x0fa46a83, 0x3c7d2fa9, 0xfcbe97d7, 0x74bbef21, + 0xd7ff7957, 0x8577df7d, 0x0974cfbc, 0xb17de43f, 0xec84b76f, 0xbec8496b, + 0xe5c08716, 0xc9501c0a, 0x572e455f, 0x60db6cb6, 0x2738c04d, 0x4c1659c8, + 0x37d23ecf, 0xfa1458f7, 0xfb409ff5, 0xd79e97ac, 0x35679e12, 0x6ebaf42b, + 0xadf60b9b, 0x84f0e514, 0xca36785e, 0x4b6b8221, 0xf583235d, 0x9faa7ad5, + 0xdfb4a757, 0xf6ebfa40, 0x1b7f4af5, 0x91f65609, 0x38a54db1, 0x8a31fcfe, + 0xb923aabe, 0x7f20f4bf, 0xf37d213f, 0x43f2ab89, 0x765e087d, 0x90fec084, + 0x435e8ff6, 0x790fadbf, 0xfd484d7f, 0x31b810d6, 0xbf53ae04, 0x1125515f, + 0x3d00561f, 0xf28446e0, 0x647d2865, 0xb3d8f7a4, 0x325cfa3d, 0xe2a77d91, + 0x1cb5e9ab, 0x50de911e, 0x820a675a, 0xea5ed99f, 0xa30efd27, 0x18ea5d01, + 0xf5cc81ff, 0x741e816b, 0xe4cdc8fd, 0x32e87ef4, 0xf3df543b, 0x3fc0fffa, + 0x665ed093, 0xb0e4bb2a, 0x69b70d56, 0xbbfdbcc5, 0xa5caac4f, 0x9b80bb28, + 0x9eafd14a, 0x8e39dfde, 0x7169577f, 0x76c45db0, 0xaca45d91, 0xf53f6953, + 0x1c5a2bbb, 0x9d99f8af, 0x5f504da5, 0x899ad85e, 0x71e50fe7, 0xa97d04bc, + 0x235d7d45, 0x5f5338e2, 0x5f51bad7, 0x66b64796, 0x83b60cae, 0xae167358, + 0x2d41edb3, 0x16bf8fed, 0x54f007f6, 0xd47a1cc1, 0x973177b3, 0x7d43a59e, + 0x3deacc4c, 0x07e1def0, 0x4f51abb5, 0xde3ab27f, 0x33d0fe8a, 0x3ceedce9, + 0xbad8331c, 0xa8b6e010, 0xb6de493b, 0xe5429a6d, 0x636bad21, 0x79fa0597, + 0x5352a5e6, 0x10c7d60e, 0x7f4cee9e, 0xd02d74a1, 0x83ba6577, 0x59c4f7de, + 0x6f682dac, 0x8c31d16f, 0x46c583a3, 0x9f8aa4f1, 0xbfa14619, 0x9876b15d, + 0xcacfed15, 0x4d4e965f, 0x1b957682, 0xd25e7474, 0xe0a4b1a9, 0xa65b3cfc, + 0x6abeb1e8, 0x37fd28bd, 0xf7e6f951, 0x4346d4cf, 0x2527aefb, 0x7f682ee7, + 0x77e6e5e3, 0xb8bc0046, 0x5b89dd2e, 0x01f806f4, 0x54e71816, 0x168090e3, + 0x08d3f2e8, 0x7933dbef, 0x17ed867b, 0x3e38eb7f, 0xd7b60c73, 0xfb41d65a, + 0xed1cf033, 0xb59b33e7, 0x579c24bb, 0x825239b4, 0x8ef99d25, 0xcce75c51, + 0xe3004306, 0x9e4ca774, 0x9c711a3b, 0xfa5a1d46, 0x88e48cec, 0xde682c96, + 0x93da96b5, 0xec41b9f0, 0x056c6b67, 0xd342a1e0, 0x4fa43f43, 0xd872c516, + 0xa59bccff, 0x678f01bb, 0x71421b1e, 0xd774eeac, 0xb7d874da, 0xbad70cb6, + 0x2f9c44f4, 0x7e6f5bd7, 0xed13bdaf, 0xaf9ddff8, 0x6d7d22b4, 0x46fd7415, + 0x32b5a577, 0x745aaec8, 0x783a2641, 0x8558ef53, 0x72337df3, 0x367e8490, + 0xc63c41d0, 0xdf84abcf, 0xfabcf402, 0xd5f630e5, 0x8f6e74a2, 0x7134fdb5, + 0xd7454392, 0x927e49c7, 0x93f001bf, 0x9e90efe9, 0xcd586d3b, 0x6a7b453e, + 0x71c53c4d, 0xc208e1d9, 0x445f6e93, 0xe3152220, 0x28a9aea8, 0x39bd9907, + 0x8839966b, 0xbffb450f, 0xfed4cdfa, 0xfd1ed0af, 0xfffabfbe, 0xd73e0e62, + 0x8e2fda50, 0xb8d1fb36, 0x966cccf8, 0x913e3f71, 0x87ee677d, 0xa93d16f7, + 0xe8b03d23, 0x5d35c4c9, 0x6e807f28, 0xba16be30, 0x75d3cfae, 0xf2fd0fc4, + 0xb4b8fb25, 0xbfb05278, 0xf2ab97f2, 0x7fe9abe5, 0x2e5f2ab9, 0x34f970b6, + 0x1b9d49f5, 0x58f169f9, 0x9ce78cb3, 0xb5be4f85, 0xf17ee91b, 0x033c888a, + 0x93f17c4c, 0x4eafda06, 0x816fd9b3, 0x59b44f7a, 0x2df2858e, 0x433f2f21, + 0x5bff41fe, 0x1e6364cb, 0xee31eb95, 0x9e1f9caa, 0xc348fd5b, 0xe7ce300d, + 0x06f7302c, 0x1745dfc0, 0x078bd3a7, 0x0c7f14b4, 0x3eac4f3d, 0x80beb2fa, + 0xe279c75d, 0x9711ce35, 0x1b924eb1, 0x86279dfd, 0x35fe239e, 0x26709cdd, + 0x239d058a, 0xbcf0b2ea, 0x4738b172, 0xd121da2c, 0xd6af17bc, 0xef300c06, + 0x371e78a2, 0xfd83ed3e, 0xfdbad3d7, 0x3f178016, 0x62cef5ca, 0xf08c0526, + 0x563b4de7, 0x8e731c50, 0x12153390, 0x7f7d2373, 0x414ce11a, 0x93d17f3f, + 0xc5df8411, 0xe1fddd4f, 0xe75ef063, 0xc10919da, 0xa425f57e, 0x9fea448b, + 0xfb7ae319, 0x43ed6cf9, 0x45ff4829, 0x0c7f834f, 0xcb1c59eb, 0x8a9f9c5e, + 0x829495fb, 0xbb4a9de7, 0xcc1eebc5, 0xbfc0ede2, 0x62ba3f06, 0xc1d696b3, + 0x1e90315e, 0x93b75e04, 0xab78169c, 0xaf547f5a, 0xd98c7ae7, 0xdafb09c7, + 0x6b7c7281, 0x3fde1687, 0x135af505, 0x19dfcfe1, 0x13bf2f14, 0x39224afb, + 0x95f5c1e2, 0x673ba46b, 0x7a5d3f51, 0x0c94ebe4, 0x6626d76e, 0x8ac8f3f0, + 0x141de714, 0xe0d87e87, 0xfbca975c, 0x00f32ad1, 0xd35aaeff, 0x35ce88b1, + 0xb8a0637f, 0x08facd4a, 0xf9344457, 0xd0fdae23, 0x64cc8d6f, 0xcbf61c7d, + 0xc1ccb9d7, 0xff3c06e5, 0xd5e78648, 0xab172e66, 0x26df0163, 0xe81a204e, + 0x2bfc2bff, 0x3497f79d, 0x9efdf7a2, 0xfadea5f1, 0xaf88119c, 0x3865b9f8, + 0xc4b4178f, 0x878c80b7, 0x7bbed1f3, 0xfd1a3b41, 0x87cd8aea, 0xbd9ca2a7, + 0x1651a5e7, 0xc5e2b57c, 0xb89e903f, 0x2773ec47, 0x37a8f9da, 0xca097e00, + 0xdf38321b, 0x2e3cb478, 0x87c08374, 0x7d4adfb2, 0x8f1d66f5, 0x473c83d3, + 0xf6bd5201, 0xb56fd44f, 0x728ac3b9, 0xdd15fab6, 0x13c79438, 0xd72bfcc4, + 0x11f49a0e, 0x2ea54fd0, 0x697a82c6, 0x1e867f99, 0x12f565e1, 0x25efbdc1, + 0x7e3d20a6, 0x68d5feb1, 0x234f93a4, 0xff51335a, 0x7088ad74, 0x5805c2ee, + 0x8bee5c78, 0x30bb99f5, 0xe965537e, 0x5f504b30, 0x0e3d2ab5, 0x9627f4e5, + 0x7fd63d56, 0x41aa9cd2, 0x4cb165d8, 0x8f25d842, 0x100bf824, 0x7e82cd59, + 0x4b96ae90, 0xed973f7c, 0x834fac3b, 0xeb10eef1, 0x1fc2f0bd, 0x53ce30b2, + 0x8591d29d, 0x3bf603fa, 0xf9e2206b, 0xeff48979, 0x575a7df2, 0xfdde88c4, + 0x0dfb8e5e, 0xec54b5fc, 0xaf03f2f3, 0x7ee904fe, 0x5e77ee39, 0xba017a5f, + 0xf7cf423d, 0xf8ca9cef, 0x2e9047fb, 0xf0057d14, 0xc61c5d7a, 0xa77c38e9, + 0x2f3c23c0, 0xb9fdcfe6, 0xf37b2f24, 0xdef4540e, 0x11aefedf, 0xd6b957fb, + 0x8d757240, 0xe6e76f58, 0xff71a257, 0xf870bc2e, 0xa94f3c6d, 0xd8da0fde, + 0x05ee8611, 0xfd706a3e, 0xb27f34d1, 0xbd706a23, 0xefebbdd1, 0x6fc173a1, + 0x4faf8c35, 0x2c8d6f59, 0x8bd4afd6, 0xf8521ff7, 0x1d7c0985, 0x4bf9c218, + 0x2bf213f0, 0xfaca63da, 0x7dfc713c, 0xc99f3e85, 0xab7d7ae0, 0x34b32758, + 0x707e2347, 0x00ce517f, 0x8af4b8fd, 0x172680dc, 0x07f9825e, 0xff3297ed, + 0x5c1e7197, 0xe362b86f, 0x53b1f77a, 0x873496c3, 0x10ecc389, 0x06e4e3f2, + 0xe00b4a5b, 0xaff00bef, 0xe800ef28, 0x4f1a0e55, 0xbc651ba1, 0x4e955fa2, + 0xff4375c3, 0x32bfd8ad, 0x28fe27ee, 0x84f9fb19, 0xe650fe71, 0x5165f0af, + 0xa36982ed, 0x05ddb1a2, 0xae2e7a73, 0x72ff8f9b, 0x77de8586, 0xef005da1, + 0x8a245abb, 0xfe149f4f, 0xaf0dc9fc, 0xf6e65746, 0xe24bfbd2, 0xfc61fc3d, + 0x0a9e742b, 0x33d105fd, 0xd368b3cd, 0x2b0869bc, 0x4ba50df3, 0x7d0a6f05, + 0x648935b2, 0x29d284af, 0x17a298d1, 0x73d3fdb5, 0xca49f24d, 0x3cf3e9cf, + 0xef613fb4, 0x19718a7c, 0x8c891b94, 0xdbd7f3c7, 0xe904648f, 0x8299f871, + 0x1fa28af5, 0x0e55b7e0, 0x9e8a2bd2, 0x9d7049af, 0x66b27dc3, 0x3f7ad1a6, + 0x02facd67, 0xd9d977e8, 0x8ed1a98e, 0xc6f2fb5e, 0x18daadcb, 0x481d438c, + 0x93d60bcd, 0x211fcecb, 0x1d66afba, 0xaa5fd11b, 0x1987fcd8, 0x3f7d2037, + 0x9af3a3a7, 0xf4530d8a, 0xbddfb768, 0x8871aefb, 0xe9755386, 0x35cfc724, + 0x684d1d8d, 0x5ceb1661, 0xa6aafba0, 0x0edee647, 0xb45aabcf, 0xd0e7924e, + 0xc56bf20f, 0x6e29a37d, 0xe74469fa, 0x9f68098c, 0xa0b5afdf, 0xf7713e7d, + 0x7ed835d8, 0x2c7079a2, 0x14d5c7ae, 0x8e4bb04f, 0xd8a07d21, 0xb9089fb3, + 0xe713ab58, 0x7f9c9987, 0x528657fe, 0x54513972, 0xe7859b5b, 0x413b5ded, + 0xcbfac31e, 0x56e68ef5, 0x1b75ef1c, 0x60350ff9, 0xe8e3d86b, 0xadec9bdc, + 0x4c667a25, 0xc6e7a3ca, 0x547e7824, 0xea1f71d7, 0x99f7a38d, 0x09c5ad47, + 0x571dbf68, 0x7e64edc9, 0xc7cf189e, 0xc55fb1ef, 0x3a08ae3c, 0x794fed0d, + 0x03fd1dbf, 0xfe629f94, 0x373fd6e7, 0xb9def517, 0xb87199bd, 0x8f5ecfee, + 0xe93b43a8, 0x87971d33, 0xbf60ff4a, 0xb3b60e9d, 0xc1536ec0, 0x60a99f60, + 0x6ad3b7a0, 0xcd1d6ebb, 0x6d53362f, 0x5ef4299f, 0x263322be, 0xd420cf38, + 0x271f672e, 0xf5c13e50, 0xf79d25e6, 0x18b2a201, 0x0cfa23fb, 0xd4717ef0, + 0x9e632f77, 0x837aa2e0, 0x3ceb00c5, 0xe78f748d, 0x0368af54, 0x36832e78, + 0xe9c1f237, 0xd0074657, 0x31f45c4f, 0x4b351787, 0x3abd4c01, 0x16936db2, + 0xfb042fdb, 0xd90526d1, 0x9b6e8fc5, 0xd170ec8b, 0x0498d9e9, 0xe5ee2fed, + 0x6d5013f9, 0xdf87b10a, 0x6ff4724e, 0xedb3ff0f, 0x30be2560, 0x93b7c159, + 0x0adf1139, 0xe8bf159e, 0xfc87a04d, 0x7dbc5ebc, 0x76425be9, 0x879f79f0, + 0x93a4afca, 0x3a444f0f, 0x7738c736, 0x6bbf6bc1, 0x103b4479, 0xa8c0fbf7, + 0x9dbfd16f, 0x20b18a60, 0x5be97eff, 0xe7a3e74d, 0x952a5e7d, 0x6be256fd, + 0xa3681e37, 0x196cbef7, 0xbc22707d, 0x462986f7, 0xb0b8fdc8, 0x2f9a1afb, + 0x1b8aef72, 0x595cf86c, 0xf3f7e7d7, 0xbbf1edfd, 0x8d15def6, 0x227b6aeb, + 0xdc78e0fe, 0x0b18a8d7, 0x458b79da, 0x4699c8be, 0x359f2f6e, 0x05b9ecc6, + 0x8eecf7f6, 0xf20656d9, 0x9cdb6173, 0xd17cf8b9, 0xed0592eb, 0xa5ebe77c, + 0xfd8fe8d1, 0xb68cee4d, 0xb5ef0960, 0x80e47ce2, 0x84d2e516, 0xdb1b3612, + 0x9995684f, 0x491f9523, 0x3f8c9d23, 0x015a072f, 0x539e02fe, 0x48dbe3fc, + 0x2fc07f8a, 0x1641f31e, 0x4dc796fe, 0xe157fc7a, 0xeb144dbf, 0x4fd81a7e, + 0xf3d04f9c, 0xfcfe7ca2, 0xcf2f1db3, 0x35cefec4, 0xef382ce9, 0xd4749b2f, + 0xbbf052ff, 0xb3df3034, 0x833fb97b, 0xe7c1fa30, 0x65bf72f6, 0x5bf73369, + 0x5ce857aa, 0xf4be98fa, 0x0ed41458, 0xe67843fd, 0x16ef71c0, 0xe9d0a6f4, + 0xdf5f1752, 0xb88fd052, 0x8dba50de, 0x111bcd65, 0x3e68ff4f, 0xfedd2868, + 0xf43e4432, 0x747f6bd0, 0xfc89f022, 0xd0aaf48e, 0x7e46d2c3, 0x3cd71f1e, + 0x4ee900aa, 0x9e450fa1, 0x36590bf8, 0x3d5adfea, 0x1e3cc6cb, 0x89d226bf, + 0xe4d4a072, 0x987ea1d0, 0x4c59d09d, 0x2e2c8ce1, 0x1a45b5cf, 0x50f50697, + 0x45e481ad, 0x3179bca8, 0x6353db93, 0xfda1f690, 0xcf0b4cb1, 0xf25e64d7, + 0x16129443, 0x76f50832, 0x7fdc5469, 0xeff36a62, 0x259e3f32, 0x274bfcc3, + 0xee97ddc6, 0xe670ec64, 0xd03259a9, 0xb8e8e977, 0x7e00d257, 0x8727776b, + 0xd58dc647, 0xfa56bc01, 0xc0315674, 0xbf5d32a7, 0xe71a0ccd, 0x20db6edc, + 0x3f3c1f5c, 0x2407cf88, 0xb2c4de7a, 0x79226f46, 0x35d495fe, 0x6f6a7562, + 0x9baf13fb, 0xa39df93f, 0xb1d4ee17, 0xc22e6714, 0x5fd1d68c, 0x6ae59119, + 0x9faae3e7, 0x81b63257, 0xfffcf1f2, 0x794491f6, 0x846dccbe, 0xd055bffd, + 0xd4d1a55b, 0x75bff94a, 0x763df3ba, 0xcc089808, 0x9d232319, 0x727414cc, + 0x86dadcab, 0xf5b0e7ef, 0x32463396, 0x895c76b1, 0xb079dabf, 0xfd28cecc, + 0xa57cbd01, 0xbd02f583, 0xab7e404b, 0x4024a581, 0x37c83972, 0xfdbfe0e9, + 0xf5adfb1d, 0xda08ceb3, 0xe60b7287, 0xa3cc4b1b, 0x756502b9, 0x8c08f454, + 0x355eb89b, 0x9f609ab7, 0x4510be57, 0x62b7717c, 0xc6b2a0ef, 0x5f0b367c, + 0xbcf3b30f, 0x3d04fb82, 0x1963e67e, 0x51e63219, 0x8652fa1f, 0xf08eec79, + 0x7da26574, 0x653779ae, 0xb8f903a5, 0x8ded1a36, 0x9d6a2f0b, 0x65fb40b7, + 0x4d653ec2, 0x681e4289, 0x7d43275b, 0x2ece6a7b, 0x25ff3fd4, 0xd4f9f9f4, + 0x510794d6, 0x7f72a49e, 0x81ddda08, 0xeeb258fc, 0x776c44a6, 0x194da5fe, + 0x0cdf610b, 0xac347630, 0x33e866f3, 0x03aaa61f, 0xc9e74b58, 0xea07ea01, + 0x7cf0d1fd, 0x2923ea63, 0x1b990e9c, 0x8feca3d7, 0xfb3ef782, 0x1da34301, + 0x1d3231ab, 0x6c39a9fa, 0x53f90587, 0x182997d9, 0xacf98044, 0x53c7857c, + 0x07ac4a56, 0x67d0b8c6, 0x186bc046, 0xf47d53f9, 0x8153b22d, 0xb92afd1d, + 0xf0aee3b3, 0xa77f31fa, 0x67febb1e, 0x2cf4c9eb, 0x8a3e7791, 0x0dc2ba8d, + 0xc5d7da48, 0x6d14cda2, 0xf5c643b9, 0x489d1a24, 0x4c9f2b0f, 0x1cc43d27, + 0x941e89db, 0x3c476c76, 0x54c6c9d1, 0xeeffe12d, 0xf9826816, 0x28032d40, + 0x9696f24f, 0xbba32a38, 0xdcfcf4ed, 0x70c6779e, 0x67f7c479, 0x42b6b3c6, + 0x767a43ca, 0x3cca9508, 0x537a0a56, 0x2dd17cf0, 0xeb947cf0, 0x3d6695b3, + 0x7f6415c5, 0x4de50c4e, 0x00596bb6, 0x674739e0, 0xdabf10eb, 0x06d74e48, + 0xc23986bb, 0xf620cde0, 0xc911c223, 0x81fec11c, 0x7e81d5df, 0x1f513cc0, + 0x52171d95, 0xae6df7cf, 0xd33cfe58, 0xde705b92, 0xd500e766, 0xa7a29b38, + 0x695d13b6, 0x5f38cbcf, 0xc58964c3, 0x794e39e3, 0x1cfffe48, 0xf49bac35, + 0xdd5fc935, 0x66fdd0a4, 0x0d6bf43a, 0xf2f3f52e, 0x7237a12c, 0x3ef04e58, + 0xc99fc1f6, 0xda0d7c48, 0x8024fb7b, 0x58ebb6e7, 0x39edc1c0, 0xba2fd7b4, + 0x9bb7440c, 0xa4de0422, 0x6856f631, 0xc6af931f, 0x8d4bac5f, 0x3512f8af, + 0x6add127e, 0xd2cad83c, 0x9e49f554, 0x81faaaa1, 0xf054f24b, 0x5504ef20, + 0x0babc1fb, 0x7faa7055, 0x7a7daa9a, 0x9c152cdd, 0xaabb7f59, 0x4ac690fd, + 0x604e7d55, 0xd87eaaa9, 0x782a95de, 0xaa03f378, 0xd65b23f6, 0xb547eaa9, + 0x8fd5516e, 0x0a85ff6e, 0xb8f1db1e, 0x1f0dfdaa, 0x8fd552ed, 0x555e7cef, + 0x7eecf13f, 0xd7637c15, 0x93f6aa6b, 0xe0a90fbb, 0xaa8ef602, 0x0ff1917d, + 0xe58a782a, 0x37f6aa2f, 0xd5553fd9, 0x42f8ecdf, 0xfb3d3f55, 0x547e0a92, + 0x0b2e79ef, 0xbff9d2f9, 0x64cdef55, 0x024f9f8e, 0xa0979e3a, 0xfc02b671, + 0x087e452b, 0xf427dbba, 0x2960cb29, 0xb453a748, 0xee895a93, 0xfa27245a, + 0x49faa11d, 0xc2edc2fe, 0x557b1cb8, 0xc03ef7e2, 0xc68393ee, 0xc119758b, + 0xe385ec41, 0x382a2c4b, 0xb5576dd1, 0x543995b7, 0x6c9e49f5, 0x25c0fd55, + 0xc83c154e, 0x3f6aaf9b, 0x054bb578, 0x544bfaa7, 0xdcebd3ed, 0xbeb3382a, + 0x487ed54c, 0x9f5547a3, 0xaaa25813, 0xabd7b61f, 0xaf378782, 0xd91fb556, + 0x8fd557e2, 0xd553ad6a, 0x57af6e8f, 0x1a3b63c1, 0xf86fed55, 0x1faaa028, + 0x5557b9df, 0xb36cf13f, 0xabb1be0a, 0x727ed545, 0x2e0aab77, 0xed554760, + 0x54278c8b, 0x9fcb14f0, 0xb26fed55, 0xdfd5549f, 0xaaa738ec, 0xe991ec57, + 0x9fab5fd9, 0x8664fb0b, 0xf7aaeff3, 0x862e85fd, 0x2fdfe1f4, 0x88a4bdd1, + 0x02ae3c21, 0x4233bb72, 0x9b8cf68b, 0x987141e2, 0x2b720808, 0x5d112fc6, + 0xa72dcaa1, 0xe90252b8, 0x0e295229, 0x3d01d7cc, 0x55de8d1f, 0xbfda2a6a, + 0x5676bd51, 0xd7d195f2, 0x86d9676f, 0x8fc79a30, 0x434c7886, 0x788fd112, + 0xd9da2a69, 0x46ff3377, 0x6d14c79c, 0xe8274c6e, 0xea11e3b7, 0xde528538, + 0xe4cb3c6c, 0x68eebb20, 0xde727d44, 0x9bf9fc55, 0x3c99e78d, 0x115fa83a, + 0x7d6090bf, 0x7ffa832b, 0x1900fc18, 0x1f7afe7c, 0x40d80df0, 0x0859f0bf, + 0x2767d47e, 0xa0e7c1b8, 0x4d97d1b2, 0x273ee3e5, 0xe5f0efd5, 0xcf94fc13, + 0x57c07045, 0x9f2ee542, 0xf9379e9b, 0x03de08ca, 0x7b96317e, 0xf2c64fc1, + 0xb177f079, 0xbff81f7e, 0xf3e8bf08, 0xabecd953, 0x7dfbe7a3, 0xf01f04f5, + 0x1bfc1235, 0x16ca805f, 0x5f2a5edf, 0xfd5335f3, 0xc10b5f41, 0x095af86f, + 0x13b5f56e, 0x41d7c87c, 0x47df11f0, 0xebedbf04, 0x77ddb2a4, 0xbe63ca96, + 0xd77faa2e, 0xef704dd7, 0x5beda97e, 0xc5bdec26, 0x02580e82, 0xf116f3b7, + 0x8b9f652d, 0x4162ed78, 0x5042ba87, 0x0c4f6897, 0xf985dac8, 0x4e9163af, + 0xde4e89b2, 0x78f621fd, 0x94a5bfa8, 0x9e440b1b, 0xc7890ac0, 0x2d7d145f, + 0x7d140cf2, 0xf71f7e5d, 0xfd80174f, 0x1f06e78a, 0xf27b7047, 0x8d9757a2, + 0x14b95976, 0xe7fb44e9, 0x646ff7a2, 0xf73c30ef, 0xf3bf9206, 0x96e761a0, + 0x1cad3f20, 0x5c60d7de, 0xe695253a, 0x75dace53, 0x332a9e74, 0xe4f81697, + 0x0b3c83f7, 0x69078e89, 0x9b2fe4fc, 0xeafefc02, 0x2192cf20, 0x85ffb163, + 0x8be7636f, 0x4f3a4e2d, 0x4d68619c, 0x9171879c, 0xe78a5aa3, 0x1a8f87f5, + 0x6fde4f91, 0x92e71bfd, 0xf92eaed1, 0xfc41eb5e, 0xcb99d71f, 0xe0f04e30, + 0x7bc71e10, 0x55468870, 0x0f3c52fa, 0x31be7ce0, 0x00d0ef7b, 0xd1f9bf0a, + 0xa6f73d8a, 0xb7c9faf6, 0xf609aba2, 0xe873296f, 0xb991bf28, 0x0cabc2de, + 0xc10f31b7, 0xca9f98f3, 0xb53d93af, 0x2cf9deb8, 0x8267b040, 0xbadc2521, + 0xb0f5e742, 0x62c3d798, 0x42f94a3e, 0xd867e78a, 0x176637df, 0xf8f8ebcd, + 0x5d70b29b, 0xa42ebcca, 0x86fdc438, 0x7e70a7ae, 0xf5febcdf, 0x2fbd2919, + 0xd00ffc7d, 0x2ac30985, 0xb9e18ed0, 0xf4262d48, 0xfded7d40, 0x2b75e512, + 0x018e5174, 0x8d6f7c40, 0xbdfef944, 0x81f40274, 0x1742547e, 0x3a040bdd, + 0x64e89e79, 0x07afd6bc, 0x26b8f0fb, 0x39d12590, 0xc63d42f3, 0x0027160d, + 0x4ff5a47d, 0x3dc5cb07, 0xd039e504, 0xefec01d7, 0x90dedfcb, 0x79aaf88d, + 0xf103bc63, 0xf7e1ab55, 0xb4c7fd93, 0xc2c79e4e, 0xe276b945, 0x324f8a70, + 0xb8c4e9d9, 0x78430cd2, 0xd881faf9, 0x5d76e3a7, 0x53fa8049, 0x2bbcc79f, + 0xd15dedf6, 0xcf8ae56e, 0xde616996, 0xa39d0fc7, 0xe67d2cfb, 0x4e58fabf, + 0x6bbcd046, 0xbe524e5a, 0xafbb6845, 0x8978f086, 0xbd5a3742, 0x14d3b3d9, + 0x3a1eaf3c, 0x71d103fe, 0x3a71d02c, 0x3c19f1d1, 0x70699c77, 0xfc43ccc4, + 0xeed04a03, 0x216d3cf6, 0x3992ae7f, 0x6e62aca9, 0xb6c3172a, 0xfdbadd23, + 0xef88f4db, 0x9e99aca5, 0xcbbfcf2f, 0x48bc748a, 0x773f21e3, 0xe2ec6619, + 0x2aeb3039, 0x6ede03b6, 0x96fb5bab, 0xbb37d01d, 0x8c14db7e, 0x540acec7, + 0x696585bc, 0xf3067493, 0xce2f8157, 0x4a747ee0, 0x60030dde, 0x15f7dbfc, + 0xcf08186c, 0x7ef96a67, 0x7ef877b0, 0x74237228, 0x5f07c0dd, 0xbac41f12, + 0xe8da5d68, 0x941f1512, 0x292e63af, 0xbe8f37a1, 0xeff22f87, 0x28818ff9, + 0x3a2ee4bf, 0xc379af4f, 0xbcfb8710, 0x2efd7194, 0x867894b9, 0xd119d7a2, + 0xd22c3df9, 0x173eed89, 0x20f9fd74, 0xb9fd7446, 0xbcbee8c4, 0x14b26f62, + 0xbd2f3d8f, 0x68d73f57, 0x3c408df6, 0x65d6fe81, 0xda7f3d23, 0x2a5471bc, + 0x0a40fdca, 0xe7ba1bda, 0x54dace0d, 0x57611e95, 0x58e37aa2, 0x5c78eb0f, + 0x525e7429, 0x477fdbfe, 0x67a0c2fb, 0x00d73c7e, 0x90e366be, 0x89e8079f, + 0xb5116aaf, 0x742b0f18, 0xacb9f83b, 0x62e3ffba, 0x71dfedbe, 0xeb0fd6ff, + 0x7d947bc1, 0xca7ae1c7, 0x0e3bd910, 0xa32b0dc9, 0x49b23271, 0xc78cf569, + 0x68c99d4c, 0xe91abf8f, 0x2af5c749, 0x3fc51bf1, 0x2cfd4f6c, 0x4da9ee83, + 0x63c8acd8, 0x23f8679e, 0xeb8e872e, 0x8f847e1c, 0x7c52a417, 0xb7af915f, + 0xd778f3e6, 0x6b7c4aad, 0x2b7c4852, 0x26c2ce24, 0x31778f85, 0x36bf24e6, + 0xe0ac7d87, 0x8a2be283, 0x67a3ec5c, 0x141d6161, 0x3c507697, 0x32ee27a2, + 0x79403228, 0x68735b58, 0x37217a7d, 0x95b7df43, 0x7e548e01, 0xd6701182, + 0x625c0f0b, 0xbc83c151, 0xc1fb5576, 0xfaaa1dab, 0xaab67f54, 0xa9cebd3e, + 0xf3eb3382, 0x3487ed55, 0x4e7054ba, 0x7ed544a0, 0x0ab75ed8, 0xa65cde1e, + 0xc5b23f6a, 0xd51faaa3, 0x3f5544ba, 0x82abddba, 0x56ac76c7, 0x23e1bfb5, + 0x7c7eaabf, 0x7eaa9d67, 0x157ad9e2, 0xa357637c, 0xeee4fdaa, 0x80beaa80, + 0x2faaa73d, 0x82a4be32, 0xab7e58a7, 0x88b4ff6a, 0x6f64dc2f, 0xd9bf3d53, + 0xdef55471, 0x2a13ecf4, 0xcfb169f8, 0xc491f9fe, 0x5c250d17, 0xfe70cd0f, + 0x3b0fd559, 0x7fef9438, 0x54f67f04, 0xa146dffb, 0xd34a7c9c, 0xeb748a95, + 0x20065ad0, 0x97e4671f, 0x8c33c21e, 0x428ad72c, 0x25d96f14, 0x39610edb, + 0x2152fdd4, 0xd96e49b2, 0x8e584389, 0x085d7cf0, 0x92e731dd, 0xe658c3d8, + 0xd9154779, 0x4bab2a70, 0xce39630f, 0xe508a2bf, 0xe90fd3ea, 0x611f2287, + 0xa7d391ac, 0x5573e88b, 0x79f88692, 0xe5137cd5, 0x9a2759df, 0xac4a7464, + 0x63d7588f, 0x48facfbc, 0x75961d5e, 0xf407b760, 0x1d800760, 0xb016e58f, + 0x405903df, 0x23bf60ce, 0xc2c4eabc, 0x67e83492, 0xbe9902f0, 0xb2196057, + 0x5ff30926, 0x67d42f6c, 0x5ec13937, 0x5ce6fbdf, 0x9f8c0e5d, 0x33bf9dee, + 0xe66ce016, 0xb178039a, 0x9f308e02, 0xe6e7feee, 0xdefcc1cf, 0xd7363850, + 0x7e8d94dd, 0x839cdcbb, 0xefd29f76, 0x9dcfc2e6, 0xf73c0b1a, 0x04739dcf, + 0x313dbef0, 0x0257e792, 0x3d71905c, 0x445ebafd, 0xbdcf0379, 0x5e21f2e1, + 0xe37ae6ce, 0x928d1cfe, 0x7dc1605f, 0x636df1b3, 0x624fb036, 0xc7db9700, + 0xb6893eaf, 0x4bf16cbb, 0xdc590f74, 0xc194a163, 0x47278274, 0xf347138e, + 0xcbdec60e, 0x7ae1b4f5, 0x4ec61e6c, 0x969dc705, 0x80ede1a8, 0xbd1953e7, + 0xa9ddd1f3, 0x06b0cbf1, 0xa76e33dd, 0xb1d9c613, 0xf00bd600, 0xcedabd76, + 0x28f98218, 0x23909f50, 0x9dbe47f2, 0x28fb44ed, 0xe7af8721, 0xbcd75f71, + 0x67e819d3, 0x60395375, 0x80f25789, 0xbb95b37c, 0xa172989d, 0x847c05ab, + 0x8cfe5bb1, 0xdcf03b97, 0x12fdf0e4, 0xe5d793de, 0x501e0838, 0x0f75a01e, + 0x06fd025c, 0xfb2edfcd, 0xb013cc25, 0x384bf1af, 0xedc5bb3f, 0x663d73c4, + 0xfdeeaab4, 0x3f7f57d9, 0x5fd834ef, 0x89db9f3a, 0x81d374ed, 0x2afe313e, + 0xae782d7b, 0xcc792977, 0x0d93cf55, 0x5f9efc9d, 0x29d1f57f, 0x5f49780f, + 0xe0726edc, 0xf3d3dfb9, 0xc33b654d, 0xf813a7f4, 0x1ea714d9, 0xf8e5aadf, + 0x25f6e450, 0x8547df0b, 0x658def8f, 0xef7e392a, 0xabb631a0, 0x68d6d7cd, + 0xf9a09e64, 0xf071876e, 0xddf0ce9c, 0xdfae0b0a, 0xc082f220, 0xb279235d, + 0xf26cc9f3, 0xb1f74297, 0xe5023d0f, 0x7d21e4c7, 0x316a0674, 0x4f40bb9e, + 0xfdb1cfdf, 0x750946eb, 0x4f5600f3, 0x41b63d09, 0xea32edc5, 0xe393d935, + 0x5e4f630e, 0xfd952e8b, 0xe873f453, 0xa4aee97e, 0xf100a9ff, 0xf3cf0efd, + 0x3134795e, 0xc07f382e, 0x9f32e829, 0x3f916bd5, 0x2a66b026, 0x2a0eb127, + 0xa8bac47f, 0x8c8b3174, 0x52732165, 0x54dccc59, 0x2a5e654e, 0x953d584b, + 0x953358d3, 0x2a0eb0b7, 0xd2a18fc1, 0x6fe42ccd, 0x8dfd02cd, 0xa6e61ce5, + 0x52f32e72, 0xb7e82859, 0x7c13d58c, 0xb2a66b3b, 0x3f0ef805, 0xc81af1d5, + 0x820f2c3b, 0x0df2c39c, 0xb6587390, 0x91cc1cfa, 0x367ffe85, 0x4e7c4795, + 0xe5f6df2a, 0x73eed953, 0xbe63bb51, 0xf5df2a12, 0xee3ca9b9, 0xc3b2a32b, + 0xef76a1e7, 0xf95096fb, 0xe54bcf81, 0x54d5be87, 0x53f3e47e, 0x3abeeff9, + 0x79e8872a, 0xeecb187e, 0xd3f9851c, 0x5dea9f29, 0x0fcf900e, 0x761e3c0b, + 0x33997e69, 0x434df706, 0xe2b60667, 0x3fa4257b, 0xee86b65b, 0x5ec96ddb, + 0xe505dd29, 0x7edce3a6, 0x64ccd833, 0x571ada1f, 0xd58f9849, 0xa36a7522, + 0x72ab2f60, 0x0463985e, 0x90705cf9, 0x22728fad, 0x2351ffbc, 0x9d4eddd0, + 0xd4276bb7, 0xafdcf9df, 0x674118e7, 0xffbf304d, 0xa61cf3c5, 0x5847f1fa, + 0xa5e005ad, 0x8a3caf39, 0x1e70a257, 0x3d56fc28, 0xcc1ceaf7, 0xe0587fff, + 0x7054d9f9, 0xbebed128, 0xf5f644df, 0xa353c6a8, 0xfc76dcf0, 0xfa1e536a, + 0x28ed4183, 0xbb5fdb2e, 0xbde57ad0, 0xb5ac2b1d, 0x674d8788, 0x47872cc0, + 0xa39de929, 0xdc14fe30, 0xc6fae6af, 0x8cabda67, 0xba4edc1f, 0xe5ef7f4a, + 0xf9c81eba, 0x43ce807f, 0xe5775be9, 0x223497d3, 0x69f503c1, 0x33972c53, + 0x629f605d, 0x9c536a7e, 0xd0673780, 0xe21e50ba, 0x92da6dbe, 0x4d2fe746, + 0x4795ee11, 0x1a67feb1, 0x8a693bca, 0x21c96cf4, 0x12e28338, 0xd9bce29b, + 0x94f78071, 0x1a97ae28, 0x08881f92, 0x47b79fbe, 0x93edafc8, 0x44ec772e, + 0xc34ea23f, 0x576c7f30, 0x6ce6e55d, 0xad99e7e8, 0xc4ade532, 0x39b558dc, + 0x36d3ea13, 0x8569c66b, 0x3c79c38c, 0x0f6ab5b3, 0x2436cde6, 0x82cb8d0f, + 0xbc85d37e, 0x1cef894c, 0x6a7bdf85, 0x6fcf87d0, 0xf1e8417c, 0x14e6e82a, + 0xf08a65d0, 0x78ea77cf, 0xeed2a15e, 0xefdc39f7, 0xcf9722fe, 0xc7993753, + 0x23830cad, 0x5d479803, 0x39c79830, 0x79f9ebac, 0xbff93595, 0xf504dc4e, + 0x271a1dd6, 0x6db2749a, 0x67bc5ad9, 0x6b3e72b7, 0x29dc7e46, 0x83fdf7f1, + 0x86085db8, 0xd0695a42, 0xbeedf17d, 0x0465e68f, 0x65ed07c5, 0xf7fd097e, + 0x24cbc182, 0x935aa78c, 0xf7e84a97, 0x923ccb5b, 0x81fe8cc7, 0xc30dea97, + 0xbe91473d, 0xbef0e5ec, 0x93ce1cea, 0x53bafb84, 0x1e82cde4, 0xef1e0bc9, + 0x372e5c9b, 0x4c9f8036, 0x3d7aeaf6, 0x5f142bcd, 0xdf0bc31d, 0x7d95fec7, + 0xe5ffad0c, 0xa69f8e50, 0xf2043075, 0x37ee78c1, 0x803ddf1f, 0x0d99c7ec, + 0x9ff42e91, 0x5a1b6f8e, 0x262ff04c, 0x3c8ed0b8, 0x7d027bbe, 0x2fe66e8f, + 0xe3bb51a6, 0x7f476b12, 0x6e2fe678, 0x4a79f197, 0x70efa33a, 0x13d49d74, + 0xc5fcce3d, 0x03fef152, 0xaf9f58c5, 0xfd0afff1, 0xe7dafcc8, 0x9e4fd0a3, + 0x103fde60, 0xce9ae3cb, 0x99bdf855, 0xf7ec2d5b, 0x9bdd9ea8, 0xe2567e13, + 0x69ab5bc0, 0xbbafb43a, 0x7e7c7873, 0xf8e97336, 0xfc9bbb39, 0x3b7b49ba, + 0xcfd5e30e, 0x1577351f, 0xaba531e1, 0xcb0472c5, 0x5e2756c2, 0xedc5657f, + 0x4e5823ee, 0xa316f0ed, 0x51f252f9, 0xe72c11fd, 0x88dd3d3b, 0x75ff679f, + 0x0167feee, 0x2ad0fc1e, 0x1941da0b, 0xde6f3aeb, 0x1d3a7145, 0x2c7a2fdd, + 0x45af5bdf, 0x47d63602, 0x5a487ca0, 0x8befa1a8, 0x63eb5218, 0xcc2c3611, + 0xa6eebca0, 0xb425fad8, 0x8648ccee, 0x7a063c78, 0x31e2e908, 0xf2047d4b, + 0xed25f013, 0xdde05e83, 0xc4b5eb10, 0xc71173e2, 0xbe2769ef, 0x69ea67c3, + 0xd12b1f57, 0x1ee20938, 0x97ce8590, 0x6f7f426d, 0xbb417a07, 0xecf66ac0, + 0x63ceb8c4, 0x7effce2e, 0x6c0ba713, 0x57ec11be, 0x8f1021f4, 0x74ef7af6, + 0x65ca0ff2, 0xa82ade75, 0x7d17ec41, 0x82f78a10, 0xbaff410e, 0xc830e241, + 0x09979e19, 0xd8638c3f, 0xc89dd64d, 0xadfccac7, 0xb87f751e, 0xdea6598e, + 0x1bba14f7, 0xe7f39435, 0xc7beb170, 0x653fbc3c, 0x1d4379be, 0xcc093be2, + 0xfd92b1a1, 0xeb03e7c6, 0x27cd04d0, 0xafad1da8, 0x69ccde67, 0x3d1cf7e7, + 0xc8ffbf12, 0xfaf0721c, 0x1bca64ab, 0x437e9bb7, 0x28d1c4f9, 0x3f9e6047, + 0x246f1b6f, 0xc7590d3e, 0xde22a1d4, 0xb4257b21, 0x7b95a7db, 0xab63cc24, + 0x3f467e05, 0x6b602ac6, 0xdafa4cb2, 0x7494aa6a, 0x26b5eb41, 0x9e9e9157, + 0x8b59e656, 0xe5a76ff7, 0xbe913947, 0xf5e6b3a7, 0x47dfce16, 0x437e6032, + 0xf28fcf58, 0xd03d6982, 0xf0aaa9b0, 0x73f802fd, 0x402d6b10, 0x43ecf6d1, + 0xa38f288b, 0x746981e1, 0x7b303ffe, 0x788a1b67, 0xdf7cd7f7, 0xd71e02d9, + 0x9f21d8c9, 0xf2475e0e, 0x3795592a, 0x1a99603a, 0xc1507a06, 0xa4d95d0a, + 0x6f18b125, 0x4ee544d3, 0x19b942cb, 0xb3dfe1ad, 0x8e697e63, 0xe95cafb9, + 0xff025743, 0x0f54feca, 0x5a7c20cd, 0x07da1a4d, 0xde34e5d6, 0x572b1666, + 0xdfcf09f6, 0x8f31cd80, 0x1b58b6b9, 0x767c7bc0, 0x6f768f6c, 0x7dc44b17, + 0x9da7dd0d, 0x2cb4c73a, 0x34dbd394, 0x09e7ca16, 0x99e82bc1, 0xbb5d923f, + 0xe1ea812d, 0x78a46cb9, 0xaca3f41f, 0x560e1b5b, 0xdab5c7ef, 0x4a3ac93f, + 0x3efb52b3, 0x673c981f, 0x6fcc0e5a, 0xfed197a0, 0x590fd687, 0xf257dea3, + 0x7fa0c73f, 0xffad02c6, 0x4b4e7ec0, 0xff262a6e, 0x155f6427, 0x0f894bba, + 0x86d217af, 0x894cfe71, 0x425fbe72, 0x764c8576, 0x9c907b82, 0xed17ec18, + 0xd0f5ca1e, 0xa44d57e4, 0x46a7d887, 0x6ce52fba, 0xae29f8ed, 0x86b2f0b3, + 0x7adf50f2, 0xd323d0f7, 0xfbf29ca0, 0x03be560f, 0x677ca6ed, 0xd7f27ca2, + 0x18cde758, 0xebb7f110, 0x6b42bbe8, 0xc7a9ec2f, 0x396d4940, 0x55dea273, + 0x943239c6, 0xe9dffdeb, 0xaf926e02, 0x7ba33239, 0x2b99e838, 0x74fdc2fb, + 0xf2b4efca, 0xaf2ee63a, 0x96d1bf27, 0xaf30cb91, 0xff3596a7, 0x79e2e498, + 0x72677d3d, 0x57439956, 0x559feb00, 0x2055d0ee, 0xff3ccb3f, 0x9399767c, + 0x772ecf9e, 0xfe46e7f2, 0x8b994e7c, 0x7729cf9e, 0x7826e7f1, 0xadb8f80e, + 0x83e1d02c, 0xc5336f7e, 0x07183439, 0xfaf3772f, 0xbfd5036e, 0x0640fe0b, + 0x44647c90, 0xfd7de480, 0x273f0d59, 0x74491659, 0xb5e7306d, 0x587377e3, + 0xf0f28685, 0xba64830d, 0xe658daef, 0xd477e00e, 0x49f5671e, 0x3cd7beb8, + 0x7fc82d2b, 0x16cb25af, 0x2e6bdf5c, 0x7f119bf0, 0x1f25644b, 0xd7abec96, + 0x1ce992aa, 0x5b88a763, 0x291a17fb, 0x0eb60ace, 0xc2d959c5, 0xe18ec201, + 0xca89fa7a, 0x50befa04, 0x2c79c1b4, 0x9bbbf11b, 0xdbcff7ef, 0x6b503df8, + 0xbfe51a53, 0xa2092d26, 0x57fc8657, 0xe4f74059, 0xc70599ca, 0x3ddca5bf, + 0xdac8ed0d, 0x6289cc1d, 0xde9bf818, 0x75a4fd87, 0x2fde7a36, 0xdeb8478e, + 0x0672d4e9, 0x5a85c950, 0x0ea3bacf, 0x0d32cf5c, 0x7a3717e5, 0x0acbfbc4, + 0xbda9b49b, 0xf0543cfc, 0xfa3f22a1, 0x3b671bca, 0x5f9f63f6, 0x67fbc4e8, + 0x63074143, 0xbd09fb1c, 0xbfecf093, 0xbf7ca65d, 0xd5b91ea1, 0xdfcbdd12, + 0xa1dfa2c9, 0xefd887c8, 0x0dbf355e, 0xd1f35269, 0x4fa7c10e, 0x1e3956b0, + 0xd4646dfb, 0x1ca3466f, 0x21df9f92, 0xe50a3ea1, 0x3db92bd7, 0x1e150071, + 0x5979e0fa, 0xaef675f8, 0x1668f9ab, 0xd7c34bad, 0x87bdf8c5, 0xa3fed32c, + 0xcab30f28, 0x19379264, 0x5c7dfeac, 0x0c93467f, 0x97ec2d06, 0xdf122f27, + 0x86ab65bb, 0xd60cdac4, 0x5ae17241, 0x1be256eb, 0x5d0ceba1, 0x5aa1eedf, + 0x7b14472e, 0xec918370, 0x81fb86c1, 0xdec86230, 0x82b8c48a, 0xf6617861, + 0x8407b430, 0xd15dd1dc, 0x6b527972, 0xd9d53a22, 0xeeab64d6, 0x870b382f, + 0xfebb430f, 0x12acfc4a, 0xd1d2373a, 0x1ca851b9, 0x1bfa2b9b, 0x2fcea9df, + 0x3236789b, 0x9d4a1f24, 0x7bb9365f, 0x543e4840, 0xd43e487a, 0x14fd5530, + 0x7c90e8cb, 0xf92189a8, 0x782a4550, 0x5574f67a, 0xd9ce19fb, 0xfcd6f82a, + 0x97daab1f, 0xd552eeba, 0x47b92ecf, 0xfb9b7f55, 0xaf3c155e, 0xfb5541ec, + 0x555a9ef9, 0xfc978ffd, 0xea1f5554, 0x67a5293f, 0xdbbb9718, 0xf413deed, + 0x4f6126a1, 0x5df7d185, 0x1d1efbc1, 0xd0a9edc5, 0x71873b76, 0xdc5a7f7a, + 0x665d6303, 0xe22e779e, 0xacd9ac6f, 0x4eb5cf8a, 0x34ec6098, 0xf9c72c61, + 0x4c67e427, 0xdaf3a14c, 0x894f7f00, 0x83adb55f, 0xaf98b976, 0x7d436699, + 0x8f577187, 0xa027c81e, 0xadbdf8a1, 0xcf84956e, 0xf1575b6d, 0x9eb74ab8, + 0xccf42dee, 0x71f24583, 0x328e79c5, 0xe28ae64f, 0xfe08c1f1, 0x2b88877c, + 0xa5718e3d, 0xb61ec62c, 0x0f78712a, 0xaf949bf5, 0x59fe53f7, 0xefc25795, + 0x187ad500, 0x7b4187dd, 0x65a0e290, 0x061618ce, 0xe0d94acf, 0x1c97e3b3, + 0x7f957d98, 0xb6d61ead, 0x2ffb5875, 0xedee831f, 0x40c6465e, 0xbf63b0e3, + 0x8ecc78c4, 0x97da0e61, 0xf9e39924, 0x9dafe589, 0x35e303db, 0x7dd2b02c, + 0x81fad0af, 0x7ebf0735, 0x4ff52afb, 0xcfe6ff54, 0xfef6ae8b, 0x1b9396f2, + 0x8dfbea83, 0x500d968b, 0x61db7f7d, 0xdf971f08, 0x66aae827, 0x58e29e82, + 0xcf3d69f7, 0x357fff21, 0xedc6bfe1, 0x74bef785, 0xe503be5c, 0x37df3c20, + 0xbc23b78c, 0x9171997e, 0x865228f2, 0xfd0f7d81, 0xa78446d6, 0xfe88bfdb, + 0x17795b65, 0x9a5681c6, 0xf3f40ef5, 0x52cf1a07, 0xe425ba9c, 0xbfe295fe, + 0x6fe3d13f, 0xfdff9337, 0xb0e7e89e, 0xfe16b528, 0xe9fa333e, 0x67d9229e, + 0x8da1f061, 0x5e50946e, 0xcf92a80d, 0x9b45f304, 0x04714f59, 0xb593c8ab, + 0xe2a8969a, 0xa0dc4a02, 0x4248bccd, 0xdeb6b7ba, 0x8c7a714d, 0x7f7f6017, + 0x1a12fb11, 0x3c68182f, 0xfc74ef3f, 0x3d67fad5, 0x30a4a3cf, 0x43cc84e3, + 0x8e844f89, 0x027b4013, 0x647573f5, 0xb11a7bd8, 0x289d05b9, 0xaefa1d97, + 0xfca13713, 0xfa475f7e, 0xc17a3fa8, 0x5040e8bc, 0xe30e5fff, 0x43e63dfe, + 0xbcc73f07, 0xbf4a80e7, 0x3c9e5327, 0x0662a0c1, 0x0f373beb, 0xf18ef1c1, + 0x9ceb8ef1, 0x4107b276, 0xbddea1ed, 0x4df9f82c, 0x35fc2327, 0x11bcbf08, + 0xc7cb18f8, 0xcfb2167d, 0x21ff0076, 0x41cf94fc, 0x4d97c065, 0x939f2ee5, + 0xf97c9bea, 0xb9f1ef04, 0x2bebde08, 0x9f79f2a1, 0xf3ef9e9b, 0xa2fc1195, + 0xb36543cf, 0xdf3d096f, 0x7c12f3ef, 0xe09ab7c0, 0x283da0df, 0x8eba9c63, + 0xf57cd7ca, 0xd7d07f54, 0xbe1bf048, 0xbead9500, 0x90fcf4bd, 0x23e099af, + 0xdf8216be, 0xdc12b5f6, 0xf2a76bee, 0x9e83af98, 0x88fbebbf, 0x9d62e3e0, + 0xf875d58c, 0x96bfd012, 0x8f833be9, 0x682caa79, 0x342bdb5f, 0xec12ef74, + 0xce31bbab, 0x9f9ca3b1, 0x6857d9f7, 0x16c40e28, 0xb49ec86a, 0x747a3c57, + 0xa1cfd50a, 0x06ecfc7a, 0x56d9821e, 0x5595fb70, 0x0d9da9eb, 0xbde08013, + 0xc9cacb1d, 0x8acfad5e, 0x0adb7aa4, 0x27beec99, 0xf258de34, 0x4990eecb, + 0xdc74db7e, 0x20e8507e, 0xe9eb9727, 0xe7995c9c, 0xf3e70caf, 0xaf0f4e8f, + 0xec7a0a47, 0x5c76baa6, 0xac017d9f, 0x60bbe70f, 0x2fcf1195, 0x74350b6d, + 0x2ab1f95f, 0x30438acd, 0xee0ae48f, 0x287cc2af, 0x642acc2e, 0x0b6c53f2, + 0x92bcd3d6, 0xe729662b, 0xa7e8b19d, 0x95577a37, 0x65cb7cd2, 0x7a366b8a, + 0x77e2c50e, 0x79109e73, 0x48c4b63e, 0x3a166fba, 0xff9c029f, 0xeff9ded8, + 0x9359f710, 0xd0f7bdc5, 0x97df2875, 0xb7be21dc, 0x0c635fec, 0x132bc71b, + 0x389649f8, 0x64fbb1ff, 0x58a7bfe2, 0xfdd2046b, 0xe532e5e3, 0x7c2c0c4d, + 0xabc6057e, 0x733d731a, 0x27dfa172, 0xc90e631d, 0xf095c700, 0xc956d3fe, + 0x39fbf07b, 0x36e7dfb0, 0x4bcdf3c2, 0x37d1bab7, 0x58eadf8e, 0x58d6ec8b, + 0x8c249bf1, 0xea4b257f, 0x45ca51fd, 0xb94f9d62, 0xaf8f7f78, 0x6c9e2992, + 0xf520715b, 0x12b71f08, 0xe4301dc7, 0xcf4c08e3, 0xd0e39f48, 0x5e48c8a0, + 0xe38d7f20, 0xb5b3dc45, 0xdc4bc704, 0x1bc652ea, 0x2f5de385, 0x543f069e, + 0x8f770b6c, 0x72793fb5, 0x93f2392d, 0x61af715c, 0x72881b20, 0x971d09e4, + 0xdc13fe5b, 0x9864a49e, 0x51c77df1, 0xf395cfce, 0xf473d0f4, 0x06bf628d, + 0xc39fc21a, 0x2bd45cfe, 0xb94f79f9, 0xbf29b8b6, 0xe4c65524, 0xc752b614, + 0x27fba6ee, 0xb5969105, 0x2941e861, 0x0c72817f, 0x2e6d7ef8, 0x2d6cfd13, + 0x7868fde1, 0x15b2373f, 0x2c981704, 0x5af230fe, 0xfd151f29, 0x007ec06c, + 0xee9703cf, 0xee36fcdb, 0xe51d31ef, 0x09ae3d04, 0xe2ff266c, 0xebe496b8, + 0xcef36d00, 0xdaf3413d, 0x71e2e823, 0xef07207d, 0x7f4235b9, 0x238f0ac8, + 0xfe62e4bf, 0x4118f80b, 0x7bde5778, 0x9fb1c45a, 0x2c5376fc, 0x582f2f9d, + 0x51f6811f, 0x3d123323, 0xd8de74d8, 0x60f44151, 0x4a77f893, 0x9edfe742, + 0x28fc57ab, 0x3c38c153, 0xb97ae197, 0xcc12e508, 0x68aaf5fb, 0x154587d2, + 0x091f4c1f, 0x32cba4f0, 0x7c7817dd, 0x1c4bcf19, 0xe50d37ff, 0x10f1bc4d, + 0xf47efbf7, 0xd7e4c52f, 0x31f28925, 0xaa4de7e1, 0x67bc4e63, 0x44caa93e, + 0xdd8dd4fe, 0x3f60a9f2, 0x63d24289, 0xf1e0bfd0, 0xb25d899a, 0xf8cd1eea, + 0x80f6eab3, 0x19da2d51, 0xe7ea9d49, 0x4e0705f6, 0x1a71814e, 0x1b97f197, + 0x51d3fdbf, 0x34abfd84, 0xee512714, 0x2493c135, 0xfeca738a, 0xdc57cc24, + 0xcf24646c, 0x0b46156d, 0x6b3683ca, 0xc6bfc924, 0x43b226f9, 0x8cac6537, + 0xb0d93b40, 0x962c5560, 0x9dfef583, 0x8ffd3b18, 0xdae7cb7d, 0xedbc93c7, + 0x3e6b4efd, 0xe97703d8, 0x6a9477c5, 0xa064a61a, 0xeff0d4bc, 0xde5bee1b, + 0x5a77bfc0, 0x6870f34f, 0xf8be00d8, 0x1e76f81e, 0x02fae437, 0x0801e66c, + 0x9cf4e87f, 0x32bb45c9, 0x5586dfc1, 0xcaa74ddb, 0x9e5b5e29, 0xaba67c40, + 0x5335e2f2, 0xcf3cbdb6, 0x0ae7cc18, 0xfe50fc9f, 0xf9ce2fdf, 0xae0725ae, + 0xf8b5efd5, 0x9c39f7fd, 0xa7f3fa6f, 0x53c8fd0d, 0x1b4e3fc5, 0xb647dfc6, + 0x4a7abd25, 0x5abed61f, 0x59f39c30, 0x87e79ebe, 0x4a9b2ccc, 0xe99ed5df, + 0x8f3194ef, 0xce70ea6d, 0x33568d4f, 0xa637139d, 0x373c56b1, 0x786a57f0, + 0xff8127bc, 0xa34f2c6b, 0xe48350f8, 0x63a7f58d, 0x8a93dd7c, 0x3808d7fb, + 0x0df8c332, 0xb3ae5c29, 0xe782d780, 0x92cfd0d5, 0x8987f9e0, 0x4c3d92ef, + 0xe25a0c79, 0x283e873d, 0x964b619e, 0x6e2fc6c3, 0x93c352ec, 0x0170d5bb, + 0xa3577f53, 0xa786a8c8, 0x18f0d458, 0xec9bfeb1, 0x3b37e7ea, 0xa0f270d4, + 0x9e1a1123, 0xd7121ecf, 0x7c601f65, 0xd3589069, 0x84b34d26, 0xb9d41978, + 0x5365c78c, 0x87440e40, 0xfab2bb89, 0xdf5271b5, 0x773dabf8, 0x1bce2485, + 0xc7671aae, 0xff48d06b, 0x699e9df3, 0x9e1e81c3, 0xadf3c11d, 0x8edeb533, + 0xfc07dc1c, 0xd1124488, 0xfc9c2787, 0x74404d03, 0x7c83f4a4, 0x2f5a0fe0, + 0xfc307fd2, 0x3653d395, 0x03e72c7c, 0xccbeb07f, 0xbdd1d4ed, 0x7f5e3149, + 0x63f0a0fc, 0x513738be, 0x8b2e6af2, 0x9abc94be, 0xae3f2255, 0xe71f2425, + 0xe5317272, 0xb8ee5d03, 0xdf1c3237, 0xb3f99f21, 0xb961df38, 0x20d7e459, + 0x9cf5f9df, 0xe1b9f0ef, 0x70ee15bb, 0x3869a1f6, 0xd9eed7f7, 0x1d39611b, + 0xe6eabeb4, 0xd35c1558, 0xce096492, 0xff07ba77, 0x3aaf24c0, 0xc77f0726, + 0x7fc9c2f9, 0xe50b53df, 0xbfcf5ad3, 0x33aade22, 0xb45e514f, 0x13201df2, + 0x1e7860ca, 0x5ede145d, 0x96f826dd, 0xe2ab46b5, 0x61fc4a16, 0x2d8736e5, + 0x898bde0e, 0x34e4f054, 0x88a9de52, 0x0fb7f467, 0xba48ee86, 0xcb03daef, + 0xa60efa5e, 0xee9a3ba1, 0xf9c75ec3, 0x5bd20370, 0x5f9ff17f, 0xb26e3c0b, + 0xfe303b7b, 0x57e063a3, 0xe02839d1, 0x4d9a1c67, 0x83dca7fc, 0xe3ab25d5, + 0x2dbc3a40, 0x84f3fc0b, 0x4ff10979, 0xf9d3f312, 0xe9799595, 0xbfbc06f9, + 0x6f861d1a, 0x8c2fc1ae, 0x4dea1979, 0x7cf54f18, 0x9f5cfde5, 0x0f4e4ad4, + 0x3d7433ce, 0x7df8bfff, 0x0e98f31a, 0x45071fb2, 0xb1570c3a, 0x9e7c1afb, + 0x537f7c64, 0x9e0977a4, 0x7e1d9ef5, 0x8ec1bac1, 0xa8498af7, 0x6b866fb1, + 0x659e61e6, 0x0dd3a083, 0x27a21a09, 0x9dd6edeb, 0xb27a20da, 0x68a93dea, + 0x77c559f7, 0xf187e8b4, 0x5dd60da2, 0xaf8cc25b, 0x763d2fd8, 0x23cc195d, + 0x841b0f88, 0xde33d8dd, 0xd4ec078f, 0x3563f506, 0x78d14678, 0x329f5e4a, + 0x6c7fc6de, 0xee22edbc, 0xbb678ca3, 0x9b3ebd43, 0xb3eb4bde, 0x8cabf909, + 0x17d71db7, 0x39aeaf86, 0x7b23f09e, 0xbd53bbc6, 0x4bc19b3e, 0xdf29b3eb, + 0xdbc65031, 0xb78d8ff8, 0xd1dfdc41, 0x2fed3e09, 0x27b6bdef, 0x416dd8af, + 0x8941b3f9, 0x7ef90987, 0xafbe4431, 0x795df214, 0x064262ff, 0xb62f37c5, + 0x9384b6cf, 0x99cf28eb, 0xb098a3b0, 0xa3b098a3, 0x74599e10, 0xd0225572, + 0x6d17c8e1, 0x1dbbf0f3, 0x3939ef33, 0x9be00526, 0x8799ac5e, 0xf998e9df, + 0x0303c9ec, 0xbd5f95e1, 0x47e1cb98, 0x864e5e4e, 0xb6ff937a, 0xbf68c579, + 0xabf973c6, 0x77195bcc, 0x6fee08d2, 0x9cfeacd5, 0x4e40efc7, 0x4daedca2, + 0x17ffd2f1, 0x577255f5, 0x8abffe34, 0x54ba8335, 0x2d0d61df, 0x497f566b, + 0x79143671, 0x3166ff28, 0x2967c72e, 0xd44a13f7, 0xa3a213f7, 0x13fd90b7, + 0x941602c1, 0x17465177, 0x7d7ba3dd, 0x73e68384, 0x7196731b, 0xc991d9bb, + 0x7df815f3, 0xa2f9d986, 0x57a4cb5f, 0x8d36feb0, 0x73fa036b, 0x20bf1c7f, + 0x2543cd11, 0xef586c2f, 0x1fa6c1bd, 0xe674bf72, 0x05b712a7, 0xe1bc7863, + 0xc666f44d, 0x6866e3aa, 0xcf87f5f7, 0xe9f07da5, 0x738cf8e2, 0xba5a7c71, + 0xad27d1a2, 0xaeb2ed89, 0x0d6cfe23, 0x783eaf8b, 0x4adfc10d, 0x73f729c4, + 0xd76f48b4, 0x5782b7c2, 0x56ae7f25, 0xbe926472, 0xa54c3f3a, 0x3a731977, + 0x6c639dc2, 0x7ef8f1f2, 0xf64d3e8f, 0xe84f8c30, 0xcc6cceed, 0x5efdaeab, + 0xed2f361b, 0xb58f8119, 0xd79491d1, 0x27ad1b58, 0x7a2db37f, 0xaaf8c31a, + 0x784a9a6c, 0xa12e8e29, 0x3c6d437c, 0x2c7f466b, 0x1b5a8f34, 0x60f294b3, + 0x8be903b4, 0x93db4c41, 0xd232eb97, 0xef2581f9, 0xf2d479aa, 0xe3a8f2b5, + 0xea3cf1a6, 0xe303bd68, 0xfacc1b5f, 0x0fd479b0, 0x7476e08c, 0x0127ae1b, + 0xefa7afe7, 0x90eb2862, 0x191cfc2d, 0xb9e1479f, 0x3fff85b2, 0x1f7aca3a, + 0x49e9c118, 0x28de8f69, 0xdead03ca, 0x44fb40e9, 0x84f5c91b, 0xb2c35931, + 0xc543cf83, 0xd08df7f8, 0x3b4f3e11, 0x199f5c2d, 0xf33a5db9, 0x3c6c293d, + 0x2508c0e5, 0xce9e129e, 0x5993a3fa, 0xa6479e1a, 0x931ce1f0, 0xe6dbf29e, + 0x9df4ec98, 0x78403990, 0xda82e367, 0xbf1e68ff, 0xed3b2b07, 0x987f3f48, + 0x3f95f938, 0x73730c30, 0xcdfefcf9, 0xf61fba3a, 0xce5cc4be, 0x9bf9beb8, + 0x14ec776e, 0xb7ade69c, 0xec8f5c9c, 0x6e75acf7, 0x3867f61e, 0x3ab3a45a, + 0x363ffec8, 0x5b76f002, 0x4486ea55, 0x8f95e780, 0x28c2efa2, 0x513524e7, + 0xa7df8e5c, 0x8237bcf5, 0x8f3e4bce, 0x923a442e, 0x7be852bb, 0x249ce285, + 0xa207dda8, 0x5d7e4cdd, 0x9bbe8baa, 0xf4e13170, 0xfb461ec7, 0x27670f61, + 0x82c0ffa1, 0x0f9145f6, 0x3f0447e8, 0xf821ff47, 0xac9383ff, 0x30ceb6f9, + 0xad2942f2, 0x5707f7f6, 0x935b9f01, 0x9e54a83a, 0x25b4b837, 0xfafb3081, + 0x7fd7d88d, 0x846f8ed8, 0xb5eb8ed9, 0xff7ec1e3, 0xa17bf106, 0x18eb7dec, + 0xe2f2d258, 0xd78ec9af, 0x733e15e9, 0xc2f57f10, 0xedbaf3ea, 0x78c1d6be, + 0xc7d61c1f, 0x9d5da3ce, 0xe9f3f328, 0xda0b6e6d, 0xfff136ef, 0x3efa3504, + 0xf72c5c1a, 0x523197be, 0xb4e8ffd8, 0x2efdeb8c, 0xb3d93d8c, 0xe50c7339, + 0xa07c8935, 0x7e5e556c, 0x94ec7169, 0xee6bb404, 0x03934e60, 0x16bf5497, + 0xe501a7f9, 0x8765da10, 0xb2fe27ee, 0xbf257b25, 0x711c6829, 0xfff957af, + 0x14272f01, 0x7a1a3ad3, 0x232f0bfc, 0xddd92bff, 0xf2e8f281, 0xa97a3aa3, + 0x6f5d50a1, 0xd67b764f, 0x1d16fcc2, 0xb66af9e0, 0xf9097af2, 0x8929e1be, + 0x0f30d162, 0xa7f7d73a, 0xdb42ff70, 0x907e6268, 0x3d6bdf3f, 0x678891a6, + 0x345fe397, 0xb42fe24a, 0x27ac1eab, 0xe4836cfb, 0xb3df99b9, 0x7170b0d2, + 0xb923618e, 0xc91dc9fc, 0xff6adff9, 0x68d57070, 0xba203f2c, 0xbf3e5eb9, + 0x4d8fe849, 0x9de76731, 0x9eed7b96, 0xfa785d3a, 0xdb8c5c7c, 0xfe042fa3, + 0x88c79822, 0xdc95abfc, 0xf7b7c83c, 0xb79fe7f9, 0xbd29fe32, 0x9863b434, + 0x5168fbea, 0x1954cdd9, 0xcc3174e5, 0x2e2c940b, 0x7e2c07ae, 0xaff81fbb, + 0x586d3bee, 0x48c96b7f, 0x375247a1, 0x717db1da, 0x718ed386, 0x1afbd0ba, + 0xece3a9b5, 0x37b59fb8, 0xa545fdab, 0xacd4b69f, 0x879e613f, 0x82c75da9, + 0x4b42a8f3, 0xc445e63d, 0xe45ea55f, 0xc43c6f57, 0x9a3722f3, 0x1cf03af2, + 0x2129a37e, 0xc4d5b68f, 0xf6952cf3, 0x44dbd326, 0x3f27268f, 0x7ea1346f, + 0x1c7a7090, 0x6fa96d0f, 0x76941e13, 0x5cb92345, 0x195b3935, 0x748a5fde, + 0x845da806, 0xf7e3f6ec, 0x18122282, 0x30897fdd, 0x4672eff2, 0xc3187b01, + 0x23498be8, 0x98d8beb9, 0x4051d79c, 0x281d93f3, 0xf3da37a6, 0x11b7a4ec, + 0x6d6e30df, 0x72df62ac, 0xf0507ebe, 0xad4fd28b, 0x63bcffc8, 0xe2ecf675, + 0xb8938c78, 0x6f1d2057, 0x911a5534, 0x31e6b4bf, 0x836fed57, 0xfdbebfd8, + 0xfa26ddd5, 0xd3fb107b, 0xd82cf39a, 0x8bc84e9f, 0x223fbc50, 0x3ddff5e6, + 0xd2cc066f, 0x6982577d, 0x70f6fcc3, 0x1a528f76, 0x74791cf1, 0x61fef7df, + 0x1d5ebbf9, 0xbbf90147, 0xa7e02467, 0xdbd4f93a, 0xc784f405, 0xfe129e4f, + 0x5867e289, 0x6620df45, 0x5fb61ee8, 0x540fdfe2, 0x846b0efc, 0xf7bd0f1a, + 0x5c3ef921, 0x6379e32a, 0xc5181297, 0xf9f943f5, 0xc69fbbd2, 0xe827fb06, + 0x2ef7e097, 0x12c12fd1, 0x889712fd, 0x718c2133, 0xa6eefa03, 0xb89efbe0, + 0xe7e39966, 0x032b9df8, 0xf40d6fc8, 0x897b252b, 0x9dc90dbe, 0x29e7c8a9, + 0x287e9ee2, 0xbe4e0d9e, 0x6703d2bf, 0x8bbf9153, 0xf092ba13, 0x7f3e50bd, + 0x24eefefa, 0x37d3cf5c, 0xd099e4f7, 0xf9cac8f9, 0xf25efc69, 0xf58cffd1, + 0x5affe984, 0x4fa29ff7, 0xec97b96d, 0x076e4ac0, 0x0fbedffe, 0xb70554f5, + 0x75245b3b, 0x727249dc, 0xa0adfbf9, 0xccb75b7f, 0xe1d47fff, 0x37c80b9e, + 0x12a5920d, 0xfdca6fe5, 0xe56c6f3c, 0x2eceab43, 0x570fc30e, 0x234b9e9c, + 0xbf30f883, 0xb0f14f4e, 0xd85a535a, 0xd8f6e0ef, 0xb3eefd21, 0xb171cb97, + 0x180f05bf, 0x87853e79, 0xcf56c5db, 0x50d3ca22, 0x0ffe27f2, 0xf775a704, + 0x00008000, 0x00088b1f, 0x00000000, 0x5695ff00, 0x551c684f, 0x9dbdff18, + 0xecd99dd9, 0xe9317766, 0xc6cfe6ee, 0x50255989, 0x5a634cd3, 0x8d3a4462, + 0x6d0c5356, 0xc09d286a, 0x6a0d5322, 0x168ae944, 0x1b4ecbd4, 0xd22c6db4, + 0x44454943, 0x3c115297, 0x18bc58e5, 0x214f0782, 0x283c5e87, 0x1681086b, + 0x1e2f10c1, 0xbdf7eb0a, 0x6999ddd9, 0xdd8fa552, 0xefbdf7bc, 0xdefbefff, + 0x65d9cd97, 0xa3812561, 0xe82be89f, 0xac4eb204, 0xfef3f5aa, 0x81da30a6, + 0x38036195, 0x08edb444, 0x2ecd6887, 0x9217e583, 0x05185aaf, 0x11474876, + 0xb5875440, 0xe75034fc, 0x7fdfc475, 0xd007de1c, 0x0a8ff727, 0xad4803bd, + 0x6ed9c7ce, 0x677ba3f4, 0xbe019f36, 0xc997b011, 0x88f6a7de, 0xa3f4056e, + 0x44fa23b3, 0x8017a7d2, 0x6ee4e5c9, 0x214dc7fb, 0x8148a3e3, 0x6f07a4c3, + 0x8ae4f545, 0xa743a292, 0xf74d67fa, 0xf04feaee, 0xb208b6df, 0xbb8d07c0, + 0x09587fa6, 0x674e3eef, 0x3a0bf94a, 0xeabdf3af, 0xfd7141c4, 0x41a48f6d, + 0xcc58d2f4, 0x05c0c315, 0x6bc7f5fb, 0xb7ceab4c, 0xfb61c239, 0x29370d57, + 0x042bdf94, 0xad4053c4, 0xdb158192, 0x77736f1d, 0x81e40ab1, 0x1819f88b, + 0x1e3efa03, 0x6b8c3b4d, 0xdd593231, 0x1a97cf23, 0x8f1b9e79, 0xe7ff665d, + 0x4803a912, 0xe715e703, 0xffee9339, 0x9a97bf1a, 0xedde3830, 0x2976e9be, + 0x48748ae7, 0x9dc86ace, 0xe4803090, 0xd1b88086, 0x81b06b06, 0x83137d0f, + 0x76e8858f, 0xee961bb3, 0x5e993fd3, 0xd309ac3f, 0x33fb00c6, 0x16b3b60d, + 0x08d76e35, 0xd3e7b587, 0x7cc182e6, 0x7008e658, 0x8a3ffbf2, 0xc2138050, + 0x033ef288, 0xa77aca2b, 0xcf4454b9, 0xc70cce9a, 0x1fe50a75, 0x9f14a2de, + 0x5ed7ca54, 0x04ee97ee, 0xeaffe3d7, 0xc64267d9, 0x94ea8573, 0xdd2d3aa1, + 0x7a7c7b3f, 0x673efc0f, 0x7a79f6fc, 0xa1cdd93a, 0x37dcf2b5, 0xcf757859, + 0x16b75496, 0x8cee9fc8, 0x011f9358, 0xe1ea0e17, 0x5bb2be86, 0x3458e4fe, + 0x4fb95f44, 0x688de97e, 0xa45ea8f3, 0xcc2b29e3, 0xd30c999f, 0xc914eeb4, + 0xdc11a17e, 0x83e8e9e9, 0x6f1cb8f1, 0xc2de236f, 0x814cefd7, 0x50563970, + 0xa1ef3f3d, 0xde9f91aa, 0x5acdd50f, 0xc1da6ea0, 0x7e214b75, 0x20d30d97, + 0xc377eebd, 0xfc11c07c, 0xf036739e, 0xe767e915, 0x9bf01f88, 0x57753ebb, + 0xdaea601c, 0x17c9fb24, 0x3aa45823, 0x9cb09ce5, 0x6ce24804, 0x389ad049, + 0x28a8531f, 0x1b3b3f64, 0x3dc1f191, 0xad3df922, 0xa3c95832, 0xecef3f59, + 0xbbc968fb, 0xbcef7e52, 0xfd4d2c6f, 0x8f7571c2, 0x10ae0f96, 0x81fb87ab, + 0x4399ebe2, 0x3897e8d5, 0x2870846c, 0xee7992dc, 0x08740dbc, 0xdf884389, + 0x2036f205, 0xe508dff3, 0x7e6984ef, 0xf1e80837, 0xfcd209bb, 0xf418306e, + 0x7b3b4c5b, 0xfee6c7cc, 0x68848559, 0xf9a65c5e, 0xcd22fbc1, 0xb91cd00f, + 0x5a4bc95a, 0x702cf662, 0xdcef6cdb, 0x21e74fda, 0xffb9d50c, 0x7acbaf66, + 0x143d50ec, 0x5cbd377e, 0xaff6dde4, 0x5a957d92, 0x87c635e4, 0x3c20b3ea, + 0xaa02dc9c, 0x52d9f1df, 0x1887ae0d, 0x1d1662f3, 0x69bfb2d3, 0xadf7c9f6, + 0xe9d741b5, 0xcd718b3d, 0x8d35dc62, 0xc4594a68, 0xbdd177a0, 0x73c38112, + 0xca8082f4, 0xcea63234, 0xc329407a, 0x51540af1, 0x8fdc3c4f, 0xce332346, + 0xaf4f5cfe, 0x77d7c7e9, 0xfffdf522, 0xf0191fad, 0x2ffafafd, 0x7d06b666, + 0x9fc30fff, 0xb356c1d0, 0xc7df8a5e, 0xe770bdbf, 0xdc739c90, 0xe4b7e479, + 0xcfa4abf7, 0xf591fa36, 0xd1bc2e79, 0x87d7e764, 0xc6ef8422, 0x28b984f9, + 0xafb87902, 0x478f3228, 0x238ad7b4, 0xdef9c86f, 0xef61abca, 0x2b92f351, + 0xdd2ed730, 0x5f6f7c84, 0xe5755096, 0xbb89ffff, 0x1be78a6a, 0x139a10e5, + 0x5dec0744, 0xbf979d5a, 0xb6546e13, 0xbeaa6ccf, 0xaefd1cdf, 0xf21fa970, + 0xe80fba25, 0x1cdf183f, 0xb8fd53db, 0x6c1f05fe, 0x089024ac, 0x00000890 +}; + +static const u32 csem_int_table_data_e1[] = { + 0x00088b1f, 0x00000000, 0xe3e3ff00, 0x51f86066, 0xb8d3c10f, 0x72361818, + 0x0143f821, 0x684333b7, 0x0606163e, 0xc77e2001, 0x9ef0c0c8, 0x38330491, + 0x207eec10, 0x27880abb, 0x7dcf5071, 0xe62f1143, 0x9f5d9fa1, 0x163d76a0, + 0x837f7818, 0x03109db0, 0x03308b83, 0x84089883, 0x55045abf, 0xc1085ede, + 0x9941243e, 0xfa80e75d, 0xa5c3d401, 0x0003804b, 0x00000000 +}; + +static const u32 csem_pram_data_e1[] = { + 0x00088b1f, 0x00000000, 0x7de5ff00, 0xd5547c0b, 0x733ef7b5, 0x9993331e, + 0xf20f264c, 0x04278020, 0x21842a28, 0x38880840, 0x8d069009, 0x8808889a, + 0x420100ca, 0xb9113248, 0x9db57a5e, 0x5688a189, 0x8db4b46d, 0x04076c5e, + 0xc075168d, 0x740d0340, 0x6af10530, 0xad282a35, 0xf0c5068f, 0xd0f09210, + 0x77adad8b, 0x49f7b5af, 0x90999ce6, 0xbf77eda8, 0x9fc5f7ef, 0xfb3ecdbf, + 0x5ed7bd9c, 0x5ed6bfeb, 0x48c7ed7b, 0x5d311c4a, 0xf0d7c843, 0x2283d347, + 0x4f406421, 0xd34f99da, 0xb3f884f1, 0x022d81cd, 0x7fbda121, 0x8449276b, + 0xad9c699c, 0xd908339a, 0xba1cd637, 0x099f9686, 0xb4cc05e4, 0xc38eda7c, + 0x2be6890e, 0x94128877, 0xf15af69b, 0x420d8efb, 0x735ef200, 0xd15723eb, + 0x910ed77c, 0x9355a26c, 0x9244dd90, 0x10b76909, 0x62c6a7f6, 0x6595a97e, + 0xbbee372b, 0x6b2bda03, 0xfd2b1332, 0x7451bdbe, 0x16e57e43, 0x7b684021, + 0x57eebb95, 0x96fad206, 0x55a08405, 0x8f2df9a5, 0x212c6a2a, 0xdf7dedf7, + 0xe42766d1, 0x5442cf94, 0x1651fb05, 0x7948451c, 0x40c15b60, 0x56f97dfa, + 0xf5a265c1, 0xdb386f97, 0x3795f401, 0x5a45c3ca, 0x1b068adf, 0xb6b24751, + 0x5ed026bf, 0xded807cb, 0xb418790e, 0x5dd5f657, 0x9fa1110a, 0xabbe1bb2, + 0xbf4074a4, 0xf94f76b5, 0x8d3db1ea, 0xd2cf959f, 0x557be8f6, 0xe82e082f, + 0x78899562, 0x5d8e8e80, 0xd94fb9d6, 0xca357fa1, 0x7ef0d888, 0xfd09dc2c, + 0x546c0f28, 0xdf40ec0a, 0xa8e96546, 0x3456fa9e, 0xbe9ea7fc, 0x4f14ccfa, + 0x3d31b958, 0x1d2ca3e5, 0x272f93d1, 0xf5a41dc4, 0x94a02912, 0xfe79ee8c, + 0xc84f1081, 0x245fa804, 0x7ea7a5aa, 0x81c4792a, 0x27fd30ff, 0x4f7f83e5, + 0x464b606c, 0x3a56dc8f, 0x723d6641, 0x72e4e73b, 0xc272ba94, 0x47d2d7eb, + 0x9e941e40, 0xd3139f3a, 0x98a97cc7, 0xc8a9f7ae, 0x46f85fb7, 0x73ef5a62, + 0x7c27f3e1, 0xf06e98b9, 0x95fd31b9, 0x80d310af, 0xdbdf18af, 0xe98b9be4, + 0x9f079f66, 0xc32bed3f, 0x8d57c1b4, 0xadf39fcf, 0xcfab74c6, 0xf05fcf8f, + 0xe834c3ad, 0x3b74c3ab, 0x8da68bc8, 0xb7be00be, 0x6980d7d3, 0xcf882f93, + 0x309afb77, 0xd1f3887d, 0x49e48531, 0x370e0f94, 0x93b15271, 0x9e772284, + 0xc509f34c, 0x9b7c9f2c, 0xf9a14f3f, 0x53cd0f64, 0x08ac0cbe, 0x7e6999e5, + 0x1f2b3560, 0xb7c92f72, 0x3f10fcd0, 0x90fa1f2b, 0xf34adf3b, 0xf958eb43, + 0xfcfe0d88, 0x111f9a18, 0x6c57e560, 0x68dbe50d, 0x2b208afe, 0xd3266acf, + 0x159f34ec, 0xd7ecf962, 0x6962d3dd, 0xe595bb3e, 0x4ff03e73, 0x4e7cd073, + 0xf27efb1b, 0xdaa880e9, 0x5db0e523, 0x2a131756, 0x99fe0dab, 0xcd12696e, + 0xc45dea2b, 0xbfe3f945, 0x51a52dc9, 0x2c6ec87e, 0x63e7f90f, 0xc6e2a379, + 0xa5fdb7f2, 0x7b29df98, 0xbf98fcb0, 0x0f15e592, 0xbfe17f96, 0xb24df31b, + 0x352dcb1f, 0xfc57963e, 0x66b03e58, 0x5bbfd61d, 0xa8f9600e, 0x7cb1479a, + 0xf2c012b7, 0xe13cd6c7, 0xb5f34e9e, 0x8017e782, 0x91969a47, 0x3053c04c, + 0x69e298b5, 0x02e640ad, 0xa0047f7e, 0x9b5cb8a3, 0x6e1ea0a6, 0x53ce63ff, + 0x97f8bfa0, 0x4fa5f904, 0xdf81983f, 0x91eb1aff, 0xdf623d69, 0x91bf64f5, + 0xfb27abab, 0x9ead328d, 0xd6af7806, 0xb67abfda, 0x4f5931bf, 0x5ae51bcf, + 0x9e90db3d, 0x2bf5fed8, 0x7a29cdfb, 0xd0acde7a, 0xf48dd9ea, 0x9e8ff7c4, + 0xfe7ac3c6, 0xe6ee1e34, 0x33d20b4f, 0x8cf47fa0, 0x9fcf577f, 0xf376eff1, + 0x27ac75e7, 0x34f57fad, 0x4fe7abbe, 0xfcddbbe3, 0x1afd8c39, 0x8d7ebfdc, + 0x9fcf4f7f, 0xf375eff1, 0x27a423e7, 0xecf57fa3, 0x9fcf50fc, 0xf3761f9d, + 0x33d638e7, 0xcafd7fbc, 0x9fcf48f9, 0xf9ba8f9c, 0x5cf585d3, 0x767abfde, + 0xcfe7a47e, 0xf9ba8fce, 0x33d625f3, 0xcafd7fba, 0x3f9e8bf9, 0xe6e97f39, + 0x7a80498f, 0x9e8ff6c6, 0xfcf54fa6, 0x9bb4fa69, 0x67ac363f, 0xc9e8ff42, + 0x27f3d76d, 0x3f9bbdb7, 0x7dc80249, 0x69eaff52, 0xa7f3d76a, 0x3f9bbda9, + 0xab9eb183, 0xdcafd7fb, 0xe4fe7ae3, 0xcfe6ef1e, 0x1e57ec08, 0x87a07bd5, + 0x7b627ad0, 0x19f767af, 0x9f767f3d, 0x18cfe6e9, 0xad0667ac, 0x7aefb327, + 0xf9e87726, 0x9ba3b933, 0xcf58b93f, 0xb3d5fecc, 0x9fcf43bb, 0xfcdd1ddd, + 0x5cfe43c9, 0x4d7ebfdf, 0x67f3d4ee, 0xcfe32772, 0xd3d543b8, 0x8e9cb41c, + 0x7e912e85, 0xb769d572, 0xd179a05b, 0xd3a2f2c9, 0x112fc045, 0xb4837f35, + 0xbdfa45ba, 0xf67c6b7d, 0xefdc2483, 0x7e812fc8, 0x2c6f52c5, 0xcb88efdc, + 0x39f9d18d, 0x5d04eef1, 0xa070b13e, 0xc501fdee, 0x29e57543, 0x95d0af73, + 0x75b279a7, 0xc9b2f4f9, 0x5707f7ba, 0x97f2ebe7, 0xf756bead, 0x26ff867e, + 0xdd733e5d, 0x87f7baad, 0x95d22dd7, 0x5cbeaf7f, 0x60797e57, 0x657f2ea5, + 0xdee87fc3, 0x4fbc1d1f, 0xe9a63e57, 0xd8f95d41, 0xfcba63d0, 0xe84f83b8, + 0xbad09fde, 0xf13e5749, 0xf2ba73c8, 0x75db6d49, 0xec4eabf9, 0x7679f836, + 0x3c95fb67, 0x09ee022f, 0x14d3fbf3, 0xb142f7f4, 0x8195e60a, 0xf7e3f476, + 0x8f552ec5, 0x2f2af951, 0xa893562f, 0x84a6417c, 0x0379eb8e, 0x46d7becb, + 0xd93ddf9f, 0x7d273df3, 0x19e2b77e, 0x9fe28ce3, 0x24083c52, 0x04d55215, + 0x7efcb1a9, 0x3f31e199, 0x4711abfd, 0x535ef7e9, 0x9a7888d7, 0xeaf3114f, + 0x12bf2f01, 0x18d3884c, 0x7bc35491, 0xf3826631, 0x7233fb82, 0xe187f29e, + 0xaa60dd75, 0xbd4f4287, 0x2a4f64eb, 0x6a9b19f8, 0x1f83f2de, 0xed3076b2, + 0x9e4240d7, 0xf90ade12, 0x07efd187, 0xd0f54d2f, 0xf50accfa, 0x57dbc3d3, + 0xb0a3fb68, 0xff6806fd, 0x37da5e85, 0xb5d5cd0f, 0xa652196f, 0xd0a2df6b, + 0x1fd49df6, 0x6f13f9a8, 0x32610a9f, 0x7f092f21, 0x43cdf6c2, 0xfbfdb0ca, + 0x095f3a15, 0xbba63f6f, 0xdfd026fd, 0x84fed0bd, 0x3a1ffd28, 0x21ffdf59, + 0x2bfefae5, 0xd72fffac, 0xc7ede51c, 0x845bff60, 0x43ffaca3, 0xcdff59ca, + 0xf6eedeac, 0x3ffcdd1d, 0xa37ffd08, 0x4e67feb7, 0xb2fff7d1, 0xcdff7d0a, + 0x6bb7fdac, 0xedf6f24e, 0xc23bfed8, 0xcbffd649, 0xc57db02a, 0x7e0171ec, + 0xea98f494, 0x0c9f6d00, 0x052986a2, 0x81db42e0, 0x05026474, 0x0b0f2135, + 0xbb8e9143, 0xbede1863, 0x4378a188, 0xe7c7e37b, 0x5b2d4024, 0x71779d0e, + 0x9ad8afac, 0xc25d80a7, 0x595f3a72, 0x6d2d49c2, 0x64df1112, 0x9c3039bd, + 0x24d1dbd2, 0xba5f21fa, 0xd800eafe, 0x2c99af3f, 0x24ef8628, 0x9fe78212, + 0xa6f47cfe, 0xd3197ef0, 0x7b727525, 0x75be985b, 0xc9f2a3cf, 0xdf4a6ac8, + 0x84c1000c, 0x74c7fc9e, 0xfce8441e, 0xcf3a03e2, 0x9f921420, 0x8fbdacc8, + 0xf2097ce8, 0x04be746d, 0xe0d484e5, 0x43bab477, 0x62fe94a9, 0x12c7ff4e, + 0x6f8fd7d3, 0xaa7e0213, 0x60fc5f9f, 0x1753ce2c, 0xa651b6ac, 0xd0b1d0f7, + 0xd3cba89f, 0x4e41f97e, 0x81ccbb5d, 0x57f2024d, 0xa0957e05, 0x78b2126a, + 0x75e53a5d, 0x51effbcf, 0xd651a7b1, 0x72dc42df, 0xf6ff7d0a, 0x2760c255, + 0xdbb6776d, 0x09c6cd9c, 0xf509ba77, 0x729ba49a, 0x71a9b909, 0x206b4cac, + 0xe3f96e25, 0x6776b0b6, 0xb3f3ea15, 0x0ef9f58b, 0x289b2dd9, 0x02251d5d, + 0x9deb48d9, 0xae5f5733, 0x253763b5, 0xf6f33930, 0x7d19938a, 0x86cd2073, + 0xf3944ec7, 0x56fb275c, 0x58bbc7a3, 0x905853a6, 0x01007fa7, 0xf093fab9, + 0xac9d5bbd, 0xe77a46df, 0x317716ca, 0x85dce7ed, 0x6df00062, 0x7bcfffa4, + 0x16536e6d, 0x4cfdd74d, 0xfec8a626, 0xe79fe918, 0x2827f631, 0xbf3c38c3, + 0xe19cf8cc, 0xffcb9da6, 0x4d07c063, 0x283e038f, 0x3e38c7fd, 0xc32aec7a, + 0xb9ecd787, 0xf5d0f001, 0xae5048b8, 0x70b72f1c, 0xd3a92cbc, 0x8f1082e3, + 0x365c720c, 0x307ec857, 0x3873070c, 0xebd5960e, 0xf13b7371, 0xe45169cb, + 0xc6fd6f32, 0x91aaa71f, 0xe390fbfd, 0xfb43fe66, 0xfd913f90, 0x83ba7264, + 0x6af6e9cb, 0x5c2df97d, 0xb973b7ae, 0x747fadce, 0xe41f353f, 0x83203556, + 0xd1ef7bbe, 0x93a6d9e4, 0xd3cb87a7, 0x5c1de748, 0x80fc779e, 0x6f48d3c9, + 0x5b67971b, 0x0c9979fd, 0x48d7a48d, 0x11d582df, 0x9e4051fd, 0xe5d1fd0b, + 0x4bca6de9, 0xbcf6163c, 0xf1333832, 0xad9e9858, 0xe5d12868, 0xe9e60797, + 0xbf565fde, 0xa4be5750, 0x7caeb96e, 0x753bbaf1, 0x1ffe85f9, 0xb05fdee8, + 0x7e5746ba, 0xba03f57b, 0x8f65f9f2, 0x3cf3f2ea, 0x9fdeeb8f, 0xaea37733, + 0xb3f1767c, 0x8559f2ba, 0x12f974db, 0xfbdd2ef7, 0xdf97bda6, 0xfd7cf808, + 0x9fc048b0, 0x1c75dcf8, 0xbb9f82e3, 0x73bc1764, 0xae22a7cc, 0x31237ddb, + 0x2173e13d, 0x72f94fee, 0x6a68ed31, 0x4138c3b1, 0x24a5c5c7, 0xd3799a9e, + 0x06eb350d, 0x704d38c1, 0xba6cdd3c, 0x853fc6b9, 0x5498df90, 0xbd5177e4, + 0x08e34242, 0xe1b06011, 0x61897474, 0x947d6de5, 0x9fc353d7, 0xd45e5918, + 0xf7b9fd16, 0x399785b1, 0x7a5dc4a3, 0x83a494f4, 0xfdc9d3df, 0x8579636e, + 0x9fc38a40, 0xea1f7213, 0xee3e59f5, 0xff4c2856, 0xe5a7b62b, 0x43e40713, + 0xd52faa23, 0x3c82905e, 0xa9927005, 0xf565e3d3, 0x3becea57, 0x00eca881, + 0xdd38dbc0, 0x570d15f3, 0xbd3bbee9, 0xabba444f, 0x824c56c0, 0x35f8b161, + 0x50e1d813, 0xa35990cb, 0xebf74e81, 0x9aa71826, 0x785fa006, 0x789857da, + 0x15f9024c, 0x37c27a63, 0x9f76d317, 0xbe63d307, 0xf63f4c32, 0xe6da6355, + 0x47e98d5b, 0x1fa63f3e, 0xfa61d6f8, 0xa61d5f67, 0x98f57c47, 0x600bebbe, + 0x80d7c87a, 0x20bedbe9, 0x26beada6, 0x6e7c3b4c, 0xebbd354c, 0xf827770b, + 0xf00a7c38, 0x1d670517, 0x59aaadf7, 0x6707a537, 0xd4f74ce7, 0xf0f507f8, + 0xccdea8b9, 0xc3ac90f1, 0x6c1097c3, 0x51f59c46, 0x1c732f5e, 0xf47df6f6, + 0x7fa6ef72, 0x9826de0d, 0x6df99f98, 0xa783d6f1, 0x329e0374, 0x00d3c2fb, + 0x9e0f4271, 0xcc9c9826, 0xfa78e1ef, 0xca23f409, 0x9c1f22bc, 0xfe610190, + 0xe2c6db9a, 0x813d7cd4, 0x4e2caa7a, 0xa5aedbcd, 0x5fa2b6ef, 0xe3091817, + 0x7f91b9c6, 0xf871011d, 0x74cc4773, 0xff7bd7d2, 0x9de9388c, 0xdf9c6eef, + 0xc1d00d2c, 0xb9645c6b, 0xd5f18635, 0x8485226a, 0x0c0f6b8e, 0x68b5da7f, + 0x9225e614, 0x5c07df00, 0xea51b125, 0xf032bea5, 0xd6be2fb7, 0x05917ec6, + 0xf13fb5f5, 0x27481cb7, 0x1cbf9898, 0xdfa222d3, 0xb94f424e, 0xe3ddbf80, + 0x0a95d992, 0xe1aeedf1, 0x86fd138a, 0x3fcf5d80, 0xf4e7cd3f, 0xca01eff0, + 0x771c56a3, 0x7f9152eb, 0x9118bec3, 0xf5fe0fd6, 0xe2fbdf65, 0xc0c0a2e7, + 0xfb3f097f, 0xd97d8fb2, 0x5f56e245, 0xeffda268, 0xfb3a3bdc, 0xe0ec1541, + 0xeb4f3650, 0xbadadf85, 0x1f9e9194, 0x771c437e, 0x6e386b26, 0x3b68421d, + 0x397d711f, 0x38bdf8d7, 0x07ad0b90, 0x3b5d07e7, 0x87df9fb8, 0xe864cf5c, + 0xeb1af3eb, 0x3088538b, 0xab1bb686, 0x908e2428, 0xb0f3d16a, 0x571bf388, + 0x06e21f9b, 0x5aae6d7b, 0xa78de615, 0x50a908de, 0x70be3ea3, 0x0e53e0ee, + 0x4cad8798, 0x458f3935, 0x5696a391, 0xf69c3306, 0x934af9f0, 0x4eae7f3e, + 0x7ce20c28, 0x79bb8d4e, 0x4e338c34, 0x6061b1e7, 0xd53153f7, 0xaa9959ea, + 0xbb518f38, 0x3321aa7b, 0x02ffcd8e, 0x8d6c9ecc, 0xca737b47, 0xfff7c167, + 0x56f4f4d9, 0x210f468f, 0x0b13e48d, 0x965a73d8, 0xbdfbfbd9, 0x417483ea, + 0x6926f881, 0xf980bf96, 0xfffe95a6, 0x57a850f5, 0xaf56bcc2, 0xcdfa2837, + 0x56f9e063, 0x3bf47b5d, 0x857b5b55, 0x3bd77aef, 0xb86bb489, 0x857bf2a7, + 0x68af0faf, 0x7ef53ab0, 0xef2ebc6c, 0xea734a6d, 0x07f85afc, 0x82d5ee38, + 0xe0abf804, 0xec94ebf0, 0x9b4f00eb, 0xf3087820, 0x57bd8117, 0x3c536969, + 0x2b4baa2a, 0xae5173e0, 0xce757f86, 0x9d4ed4fb, 0xa0264d7c, 0x4a2be467, + 0x7d4f4e55, 0x2627a474, 0x73cc5f9a, 0x14571a8b, 0xd275b8c1, 0xa50fe6c4, + 0xf301d8a4, 0x975232e3, 0x33d4f103, 0xfa0854c4, 0xedbc8679, 0x8fa61718, + 0xfb054567, 0xde9d78b9, 0x7bf3a78f, 0xbd597e5d, 0xdc94bf3e, 0xe0eb0c94, + 0x24cbd74b, 0xd0dd8020, 0x9d151f97, 0x5232ef58, 0xedc616bd, 0xcf1b32f5, + 0x94893916, 0xfcabe94e, 0x0b3993ed, 0xc8a2fe69, 0x1d6d5fc6, 0xa3027977, + 0x51b83cbf, 0x4ff2d371, 0x42ddc71a, 0x3efd102d, 0x2dc616b0, 0xb5c10eff, + 0xdf948d45, 0x48dfa537, 0x440fe6af, 0x3a7327ac, 0x77041b2a, 0xa03f8a20, + 0x33d30248, 0x90aeef6e, 0x4838ba9c, 0xe2c3e40e, 0x4f1adf20, 0xa7874449, + 0x8867a24d, 0x07e18134, 0xd4827fe6, 0x4bbe78a5, 0xf511a9fd, 0xf80d215f, + 0x883fd627, 0xaba39fd6, 0x4a9fe73f, 0xfa08b0ff, 0x5fd5a3f3, 0x77e7dbf9, + 0x293da9fa, 0x0ee7f17f, 0x93c9c742, 0x8bb25d52, 0xcb62b7ca, 0xe7201d8f, + 0x01df9213, 0x10193d78, 0xc651030b, 0xf2ddd5ad, 0x8805db76, 0x693fc1bb, + 0xfb9ea7fd, 0xbe23c609, 0x313b22d8, 0x0e60d69e, 0x563ea999, 0x222f2e35, + 0xca3f9859, 0x159ff7f2, 0xc7a4df21, 0x3f33f95f, 0x15fd864f, 0xbe3c2914, + 0xb67f4214, 0x05a7f36a, 0x2e913e38, 0x77e323d4, 0x04c5fed0, 0x950b7fb4, + 0x4a72c8b8, 0xbc09c627, 0xc6de2f9c, 0x1d159c9f, 0x9c36aff0, 0x2fdf1bbf, + 0x72e9fee3, 0xdda93629, 0x913dff46, 0xa87b044c, 0x980483f1, 0xecfb5a7f, + 0x528eb32f, 0x7e6f4e7a, 0xf18421cd, 0x73a3d349, 0xdebfc5c1, 0x6f6ef6ad, + 0x859ea83b, 0x78da41fb, 0xbf7136a5, 0x15a599ba, 0x1571c872, 0x1b1583b5, + 0x3e9f9765, 0xa9fe78ae, 0x38809fa7, 0xaecc9fe6, 0x15feb4e1, 0x777fefcf, + 0xd8afcd32, 0xb1152726, 0xe485d86e, 0xe978b91e, 0x7bb3abff, 0xd2fe50e4, + 0xcd1d457e, 0xd09bdf9e, 0xdb158f23, 0x746429f6, 0x05a63f24, 0xf66d29f7, + 0x1e097228, 0xa13f002d, 0x56ffd9f6, 0x7278be20, 0x325240af, 0xe373f0a2, + 0x8003f47e, 0x2e47284f, 0x19b96ea7, 0xb952f7de, 0xe4d6bd80, 0x8ebf2c64, + 0x4fa813db, 0x7e78851d, 0xbf6d3761, 0x1766cfec, 0x85ecbff4, 0x8fd01cbb, + 0xc33552e3, 0x4e3f93f5, 0xcb76d376, 0x13b27f64, 0xecbcf653, 0x7886ff57, + 0xbfd6f65b, 0x893c6325, 0x384cd3b8, 0xa0d3f8f6, 0xcc364b7f, 0x252dfec6, + 0xd95dc41e, 0xd8316293, 0x5225cfbf, 0x5e8a2db8, 0x38bd7074, 0x623a89be, + 0x61c77fb4, 0x69fb08fe, 0x5f7116de, 0x12772115, 0xe37fffd0, 0x021ea17d, + 0x30b73fe6, 0x4c97ed39, 0xb7a8af5c, 0xcdd78e19, 0x7c82b7f7, 0xa7760d4e, + 0x978b3ac0, 0x0fce7e48, 0xaf5a6be1, 0x148cd6f8, 0x4aa21f26, 0x3a3bfc39, + 0xe7834fce, 0xecab7ef0, 0xbee966b6, 0xf4675f23, 0xb78abfb4, 0x818ee94f, + 0x7278f9f1, 0xa0757f74, 0x1d3de9ac, 0x15f0c3a7, 0xdf4cdfa6, 0xf4c03f37, + 0x40f7d35b, 0x5f942149, 0x07f4c438, 0x8ff183be, 0xc14a15d2, 0x0b377df2, + 0xbce80f68, 0x6f5e9a39, 0xeb5eb996, 0x509c35cb, 0x2e2125ba, 0x7f502f0c, + 0xd71ff202, 0xa7ae9657, 0x4bd985df, 0x88e7b42f, 0xdbd34fac, 0x4fff5c65, + 0xd95ffe82, 0x0364ffa3, 0xfddefbd3, 0xdb8b3f27, 0x9fa781c8, 0xfaa57d00, + 0x5f4157e9, 0xf7e862e5, 0xde5b5b67, 0xe9ea95bd, 0x4f4d4167, 0xa8d3f6f5, + 0x27db65a7, 0xfa7a6890, 0xa245dd99, 0x1e7d29ea, 0x6ded4f55, 0x53ffe388, + 0x5fe353f6, 0x9fe7acbc, 0xe37b0f66, 0xbe1ed1a3, 0x4fc8a920, 0x7fa43da3, + 0x244e4887, 0x69dc34fe, 0x4dff2b78, 0x776065e5, 0xe1a971ba, 0x1a971bae, + 0xb7e222ee, 0xcb19fe3a, 0x135887df, 0xa5be6ba5, 0x23cc2a7e, 0xe7045d2c, + 0x8b37795d, 0xb96a6eb8, 0xf3ef5040, 0x06fb8c89, 0x4f5533df, 0xea743f00, + 0x73396edf, 0x3e77a537, 0x5d6ccbf1, 0xbf464ebe, 0xbfafabfe, 0x73fb429e, + 0x7cefe72b, 0xa9ebeeca, 0x424ae63c, 0x39d28628, 0xb8fe224f, 0x0acf8804, + 0x3a30e3e4, 0xf3e997e6, 0xb93537f0, 0xdebe9ea7, 0x90f3a6ff, 0xe5be9b6f, + 0xef576b63, 0x9b0c3a40, 0x54f1c297, 0xfca57202, 0x02178ef3, 0xb52ed143, + 0xf361c549, 0xddb8c7aa, 0xacfa6b79, 0xe4bfe009, 0xc71d19cd, 0xe7043e70, + 0xbf6e5eb7, 0x38d5f9ce, 0x9ae7ebb0, 0x7afe7133, 0xd8e2e0ee, 0x5b26fb68, + 0xf3f6ce38, 0xbb4e9575, 0xdc522750, 0xf42e9277, 0x2b76fc5f, 0xdd6512d9, + 0x89b287ef, 0xb97143af, 0xca913fd1, 0xe1c72e6d, 0x5c69fa3c, 0x6edc9876, + 0xe4a4febe, 0xfc039488, 0xcf361c7d, 0x05fcaefa, 0x5b7f035c, 0xc5056dac, + 0x9ff3fc51, 0x7d4dfe72, 0xbfdc4bf9, 0x4f39bd3a, 0xb74e3e02, 0xc738ba8b, + 0x8ebe9afd, 0xae80a322, 0x7f2f2fa9, 0xb1c50278, 0x82e8a0f7, 0xe6deaafd, + 0xca278ab3, 0x4fc8d77c, 0xc8fc1fa8, 0xf913b2fd, 0x5e2e5875, 0x3c3d7c02, + 0xdd604adb, 0x55c51df2, 0x19ce8d19, 0x990f1666, 0x1f3f8a47, 0xc7dffc2f, + 0xb139bcdf, 0x8fca7ca1, 0x1fb67673, 0x4c7f1238, 0x8539cfef, 0x38008d40, + 0x493e5914, 0xac9c4008, 0x9e1e7880, 0x5fbea022, 0xf2bf6e13, 0x879e4a9a, + 0xcd55357d, 0xcb44d382, 0x0536a4ab, 0xda6dec70, 0x7e7f8126, 0x18dc4a9d, + 0x47aa906f, 0xd7161cdf, 0xc84b2fda, 0xdebf96af, 0xf7f03b7a, 0x0266cdfc, + 0x9d47b974, 0x7fb8c075, 0xea1c79be, 0xfafd6f41, 0x9d4c8fa3, 0x043d412e, + 0x43c461f1, 0x974d9241, 0x0c8d3d9f, 0x4db95172, 0xe5ddb735, 0x65bf228a, + 0xbf59c30a, 0xffe59bed, 0x8536fb33, 0x6b8637da, 0x8dbedc39, 0x5bec2251, + 0xb6fb344a, 0x014d46b2, 0x93dcac5c, 0x5d720299, 0x0192eaf9, 0x2bdbecd1, + 0x7f7f363e, 0xeec3ef95, 0xdbed441c, 0x36fb3098, 0x28b7da88, 0x4534db71, + 0xb0fb3ff3, 0x1dff966f, 0xec057bfd, 0x8efe945b, 0xadf6f452, 0xed06b9b0, + 0x5120e15b, 0x532a1fb7, 0x5eb9f3e1, 0x9fc2dbed, 0xecbcc6cf, 0x0fc145b2, + 0xdbec15f0, 0x41cedcab, 0x16e7603b, 0xbf6c4e29, 0xa4ae76bf, 0x7fee76bf, + 0x9d9acf89, 0x9d98395b, 0x21c488e7, 0x332b73b3, 0xb95b9d98, 0x95b9d987, + 0x339d99c3, 0x08fcb7da, 0xafbec6fb, 0xc7bf491a, 0x2fc662f9, 0x45e5a36f, + 0x85976573, 0x6aa45fbe, 0x27aa17e7, 0x45bbdb84, 0x8e7c848a, 0xb3ae77b0, + 0x2fa40e78, 0xd826f77b, 0xc76861bb, 0x191e8186, 0x30ed71f1, 0xdcbf6e9b, + 0x7fdb2fe1, 0xcbe822f3, 0x679c451f, 0xf36267bf, 0xb65fbda2, 0xdbbd038f, + 0x5879e9c5, 0xf0ecf261, 0x4e9ed1f9, 0xbdf4c51b, 0x8e0c60f2, 0x028d5513, + 0x42bdefeb, 0xe0718540, 0xbe7117af, 0x361efb7c, 0x66639e5f, 0x2eff20fc, + 0x941773b2, 0xf0c30b05, 0x3962f730, 0x4ae735c6, 0xebfe02c4, 0x9ed78382, + 0xc175bf04, 0xefe875c5, 0xb0e7802e, 0xdb5b626f, 0xeeda74da, 0x9c05cbed, + 0x3bfb6877, 0x4bdb75e6, 0xbf3b1fbd, 0x8d3efa39, 0xa99e9ca9, 0xd80108f7, + 0x3ed7d397, 0xfeb81788, 0x90db11cd, 0xd14de45f, 0xfe8a25b5, 0xf375ef68, + 0x52f8c5c9, 0xcdf98ab9, 0x7ca27cdd, 0x3e488553, 0x2d174951, 0xcbe1ee4c, + 0x7f683bed, 0xafef7a93, 0x7dc8b7c6, 0xcf9c6e38, 0xf5efe02c, 0xcf8d07c6, + 0x7ce7fd11, 0xee2a7ea7, 0x23f231e7, 0x2b99d9a8, 0xcbd068c9, 0x879e4cf7, + 0xfe8e0027, 0xedb8c44b, 0xeb86f32d, 0xe4ecf3ce, 0x73deb97c, 0x0ab27a74, + 0x80d5247c, 0xb6cb5bb3, 0xfda64fed, 0x919dd1bb, 0xd9f3210d, 0x103c557f, + 0x76b1687f, 0x70d41da1, 0x38666a98, 0xf0e38cfc, 0x74e740f0, 0x049a6f1c, + 0xc857ea27, 0x3ef8e760, 0x33e52f32, 0x89b7afe8, 0x9f144f8f, 0xda059fa0, + 0xa1720578, 0x99bebcff, 0x2d5bc5c9, 0x206e5ca0, 0xef80075d, 0x2b824955, + 0x682aab44, 0xd863f6da, 0x958af56f, 0x2f3d073e, 0x189b5c13, 0xc969ec3b, + 0x452c7151, 0x126e31c3, 0x17371b0c, 0xb0097bc0, 0xed8cd16f, 0x6603fedf, + 0xca7e8c8f, 0x61eb7354, 0xbfea67a0, 0x3c2364cb, 0xc2ffd00c, 0x63f46070, + 0x1be0f422, 0xe649fbee, 0x9015fbf6, 0xddf81d83, 0xe43f80a5, 0x47f1b10d, + 0xea4af72b, 0x269be474, 0xbe3a2687, 0x8072678c, 0x9f237ea5, 0x80f2d46f, + 0x59bf787f, 0x99fbe190, 0xb4893e54, 0xcbe99a68, 0xcdde1a03, 0x20bf246a, + 0x6616909e, 0x85bec037, 0x35565baf, 0xba7c85bd, 0xcf751576, 0x693e48d4, + 0x783b01f2, 0xe8457e29, 0xa8bed34f, 0xadbea7fb, 0xf59aa4fe, 0xdad7b3fa, + 0x8818daf5, 0xd011eda3, 0x78e690ae, 0xd720fc5d, 0x2d65e6cc, 0xbce20f56, + 0xb5d955eb, 0x3fb48d49, 0xc0b97397, 0xfcfc257c, 0x10e834de, 0xad3b1bac, + 0xdfad13e4, 0xc2ce1943, 0xac5783c7, 0x6f5f941e, 0xf5e44ff5, 0x698fe6f7, + 0x7b43eff9, 0xd5516fb0, 0x8f1c67b7, 0x5f5278b4, 0x666e9afd, 0xf6dbe3f6, + 0x9be76b4b, 0x49783bae, 0xb4dfc62b, 0xa24d87f5, 0xcc3217e7, 0x49050b8f, + 0x85d74ebf, 0x84ff97eb, 0x9729c7fa, 0x47e21fa8, 0x57e7ca21, 0xf1853eb6, + 0x1dcf33ea, 0x67f401bd, 0x6244efc5, 0xb1d4faa1, 0xd8849635, 0xfc05103e, + 0xd146f284, 0x297cf18d, 0xcc2b3394, 0x96a420cf, 0x58c5e3f1, 0xdbe53bb4, + 0xfa2281cd, 0x4fcef97d, 0xd6ee20b2, 0x7fb31f71, 0x1e38e7fe, 0xb0596dfd, + 0xb12e5fde, 0x7ca37c75, 0x3cf8e6ee, 0x1736cbbd, 0xc0d0b7ec, 0x0796bbce, + 0xb0e6c8e7, 0x59a54338, 0x5ded7166, 0xed67dc36, 0x7dc0567f, 0xf85f40ca, + 0xff6d4b39, 0x9967e9e7, 0x926f2e5d, 0xb66e7003, 0x075b61bc, 0x8fcbc1c4, + 0xf57fd198, 0x75c59c36, 0x3e2f69bb, 0xb791fe8f, 0x41c5d449, 0x0d8fe223, + 0xf10cc862, 0xb44ac6b3, 0x147f3403, 0x71e8c1f3, 0x64e2bef8, 0xb3dc5e2b, + 0xb8594fd3, 0x1c67a5e2, 0x75b66e78, 0x90e3038b, 0xff8e970d, 0x831bc447, + 0xde325c0f, 0xe3e38a78, 0x7afd66d7, 0xc448690d, 0x2fa52438, 0xdc4a38a7, + 0xcff71ba2, 0x582bfe7f, 0xfdbd3b0f, 0xbd015fb3, 0xff38ff15, 0x1fc07bab, + 0xc2756bdb, 0xee7ded78, 0x6827ae30, 0x7ae2eddf, 0x33ecf1de, 0xf1d30eb8, + 0x6a0bb327, 0x7c73d8eb, 0x7447ac08, 0x1932fb6c, 0xf6abb6e2, 0xda79c0cc, + 0x52d31daa, 0x80799448, 0x036e0296, 0x320758fd, 0xb1a5abca, 0x79d00865, + 0x5c1bca86, 0x71f8eeb6, 0xe3c592b0, 0xde371e55, 0x2dbd7d1a, 0x38dc4e22, + 0x61abc6eb, 0x5d946efc, 0xbc47e92a, 0xe39510f8, 0x6fc87e98, 0xbd9a03eb, + 0x33bf2a8f, 0xa72a0ff0, 0xfbf20cf7, 0xafc971bc, 0xc6b2809f, 0xc5e35ec4, + 0x4df07ea1, 0x6cdbcf5b, 0x066c7f76, 0x1bfed9bd, 0xdc83cf8c, 0x74835ce8, + 0x10f9ff3c, 0x909cb388, 0xfdc0eebb, 0xb8cc7b33, 0xcf7caa2f, 0x1d3fa87b, + 0xf5c2de3b, 0xd5d7c232, 0x1ff7483a, 0x73e1075b, 0x58e6ef38, 0xfce66716, + 0xeab43887, 0xde3ce7c0, 0xc5ac70cc, 0x3f8b7ba1, 0x7ed859a7, 0xb19d6d22, + 0x0afbf372, 0x85f5c431, 0xd1d3905c, 0x6a8bae4b, 0x1f02707c, 0xa7af8626, + 0x77f38f44, 0x7971bbaf, 0xffc0fc81, 0xa12f5eea, 0x3f1041f9, 0x91ef080f, + 0x63a0f628, 0xe9875b23, 0x3fefa390, 0x9257d6d4, 0x0d3d062c, 0xa55d6ff4, + 0x29bffa2f, 0x6c98647f, 0xd3e4884e, 0xdba2afe9, 0xe11689f1, 0xa987edbb, + 0xffd62210, 0xdf3eb02d, 0xf9815478, 0x698e3687, 0xe7cd3dfd, 0x139fa7c9, + 0xdac7bcf1, 0x71da0b60, 0x22a8bda3, 0xa4683e2c, 0xb7a72677, 0x138d89aa, + 0x06c7b7a7, 0xd39eb4ec, 0x3c42ef2f, 0xaa3d6d57, 0x077d69f8, 0xda525e1a, + 0xc14bf6c2, 0xa3081138, 0xfb0bf4ff, 0x11fad8b2, 0xdb1b979b, 0xf1dbc399, + 0xc76f4736, 0xaeacf5bb, 0xa0fe159d, 0x5cefcec2, 0x9253bdba, 0x77d40e7b, + 0xb02655aa, 0x5054ff7f, 0xffb68c2c, 0xd645b264, 0x6f4cf2e2, 0xe78978e8, + 0xf9d9631d, 0x41413146, 0x6c557aff, 0x24b891ee, 0xe2151548, 0x6c35b514, + 0x0fed4e3f, 0xef20a95d, 0x705bf8da, 0xc0ceadbd, 0x3392675f, 0xce17e20f, + 0x01e3c5e9, 0x137b46ae, 0xe8e936ef, 0x985b155f, 0xd7f1e702, 0x488c7f70, + 0x297f3c2e, 0xa10a0a3a, 0xe4d3a23f, 0x5f5946b4, 0xc4c5ed90, 0xd917c613, + 0x492f3fa9, 0x42a71abe, 0x9a3eda3d, 0x01eb4b0a, 0x71ba742c, 0xcb94b0ab, + 0xd9bbcdde, 0xdceefd89, 0x6e09e7ca, 0xd9933aa2, 0x3718307e, 0x65c7b73a, + 0x21f83191, 0xda3c5371, 0xeb6173f8, 0x8f607dbe, 0x3b8838d6, 0xe519ea9e, + 0xc2662aaa, 0x16b1d1b9, 0x7a701321, 0xd1df8df6, 0x22cdad7a, 0xed3a1fce, + 0x7750beda, 0x8d99e83c, 0xfffb843c, 0x275fca00, 0xdc69d0f6, 0x95e04817, + 0x257b9ee4, 0x9c768866, 0xc0db9cf7, 0xb92200e2, 0x585397e2, 0x80048e1c, + 0xac9e3e7e, 0x839e74e0, 0x552fde14, 0xb2c75cf0, 0x09ca5f57, 0x70872611, + 0xea16257e, 0x5bd697cf, 0x2eb0591d, 0x56eefc4f, 0xca532738, 0xac501beb, + 0xd54a773f, 0xba7a0fcf, 0x67e9eb84, 0x820e0b4b, 0x2cf52bfd, 0x329ebb45, + 0xd52e7f57, 0xe90acfb8, 0x54617d85, 0x22109eef, 0x35955df7, 0xe616ba3f, + 0xaffb91cb, 0x4fd848c8, 0x5c624e56, 0x45673e70, 0x2f7cbe83, 0x81cbcdd8, + 0xa97ec49d, 0xfc9f5f78, 0xcbf11b6d, 0xc92fe329, 0xde08575f, 0x718b1adf, + 0x2eaf6595, 0x4e64fb46, 0xaad7f3d5, 0x1b6bf9ea, 0x9ea3e469, 0x3d2eb1cf, + 0x67f9b4df, 0xcb8e7c6f, 0x35f79fd5, 0x3c2259f2, 0x716010de, 0x6dfd8888, + 0x6e911b4d, 0x7c8d9f23, 0x75f0b76d, 0xfa57ce2f, 0x66496c57, 0x4ee81b26, + 0x17a84293, 0xb74a3d46, 0xf7f80487, 0x0d40a4e0, 0x458ae57e, 0xfbca9efb, + 0xefb29423, 0x2247a06c, 0x3d42ebd0, 0x607d1382, 0x03e46de7, 0x8415bb67, + 0xfaf909f5, 0x79e5deca, 0x8e1fc957, 0x6d5fa22e, 0x418efc00, 0x76e762bd, + 0x36a04813, 0xe5d4f403, 0xe83b7184, 0x12a5a8b3, 0xd4427fdc, 0xef7061d2, + 0x47d31389, 0xce943ef8, 0x05f70451, 0x92174307, 0x923d3ec1, 0xd80375dd, + 0x5212ef3d, 0x86f0760c, 0x594f3618, 0x59bfd3cc, 0xa7576e15, 0x7c0d7abf, + 0x70ab2cdf, 0x79b3bc2e, 0xe438658b, 0x7fbc449b, 0x775f1bc4, 0xd1dfb439, + 0x4aba332c, 0x10e1812d, 0x6323d8bf, 0x53a51dbb, 0xb7657cf0, 0xf6ccd6df, + 0x7f367481, 0x661c58e2, 0x7e9a3bcf, 0xb3c43976, 0xdf45371e, 0x6ac2327f, + 0x7cd7f7e2, 0x1837f1cb, 0x846effb1, 0x7b8fed95, 0x47ed2864, 0x3e39c955, + 0xb87d330e, 0x0ff9cb8a, 0xfec5af4b, 0x541668ef, 0xc40a4718, 0x4d1baedb, + 0xb0e939fb, 0x2c30e3c4, 0xbf9e392e, 0x52b88bbf, 0xae931f81, 0xf3e80226, + 0xdc113fa4, 0x7abe35b7, 0x7eabce29, 0xcf38a0e7, 0x8a527582, 0xa773b05b, + 0x4fbfe8ed, 0xb8749568, 0x69ee9f8c, 0xc4e67981, 0xeded0423, 0xf2fa23c4, + 0xb110125c, 0xf3fd369d, 0xf3e84eab, 0x6f8e56f9, 0x7c064907, 0x444affaf, + 0x88bb3aba, 0x6f5a3eeb, 0xbc40e967, 0x02f3a6ef, 0xe9a5da9c, 0xb4616257, + 0xe0167e71, 0x71ebf281, 0xf2f8e085, 0xc63b52f8, 0x5a5e5fef, 0xeb8c197e, + 0x73c0fc5f, 0xe073b459, 0x8e297661, 0xc772afed, 0xae29e251, 0xdf8c08d7, + 0x51c56975, 0x386bebf6, 0xe1ad70d6, 0x8c696d39, 0xc4beda27, 0x0fccad0f, + 0x523a5fc9, 0xb65e6050, 0xd7c02057, 0x973cfb8e, 0x27e3373c, 0x3d03a5f7, + 0xe8f3a6de, 0xa39a5b67, 0x655d73ef, 0xdf79b075, 0xd81afe7d, 0x5537778f, + 0xbd8fb04a, 0xe71ebbd7, 0xd042b755, 0xd4b3be15, 0xb873c42d, 0x13642c4b, + 0xbaa5b3c4, 0x01629bb4, 0xae66d3f7, 0x513ef4a5, 0x3f39426c, 0x7e90bb2e, + 0x1821257f, 0xdaf1e05f, 0x8d903741, 0x7f91e7e1, 0xd07bcd64, 0xd07deb4a, + 0x24b944ea, 0xd0025c7a, 0x7ffbfaef, 0x3baf403b, 0x8e519a2f, 0x47fcf903, + 0xe70b6efb, 0xf71898d3, 0x293fc01a, 0x70fd424b, 0x696a1c79, 0x404bdc22, + 0x1d651ef9, 0x134bf355, 0x51b6d43c, 0x26ec127a, 0xb88b9fbc, 0xdb53aadd, + 0x7bf84677, 0x4240fa61, 0x697d8102, 0x9a153d9a, 0xc52c5085, 0x3d8b78ff, + 0x848cf304, 0x4a6fda32, 0x58589582, 0xe9d2ad7d, 0xb8d573ee, 0x32e29dcf, + 0x11370e07, 0x1b06d7dc, 0xcd7ea169, 0x79f66ace, 0x7b413c4d, 0x2951e6b3, + 0xd9eb4b50, 0x2159b520, 0x56e1927e, 0x512b61f3, 0x79e2a482, 0x4c65c1ef, + 0x4f996d1f, 0x2bfb77c6, 0xfec7d954, 0x6d105c43, 0x6ee3eebd, 0x079e797e, + 0xec1d657e, 0x1adc197a, 0xe7b59597, 0xff416fda, 0x706edbbc, 0x8f80ac3f, + 0x353e93bb, 0xa102fdb1, 0x9dbf706b, 0xb4668eb6, 0xde0f541b, 0x3eaf4111, + 0xcf9e0895, 0x72ffd375, 0x61772db4, 0x938f83f6, 0x2dd54d39, 0xa389bbe8, + 0x578f005a, 0x717786bd, 0x8991d844, 0x816a7baf, 0x3f6b6fde, 0x1b18788c, + 0xe5c8faa2, 0x7b854a33, 0x79dd9c2a, 0xf2b56f28, 0x37b71df9, 0x53e32549, + 0x38e5afd0, 0xd357f233, 0x67bea36b, 0x98b576af, 0x3200d6b1, 0x110ed8c1, + 0x3350e87a, 0x2ebd1ec1, 0x99df7f82, 0xe942f147, 0x0ef41bba, 0x810bf3fc, + 0xf59b8099, 0x82b7dfcd, 0xf1eb7c7e, 0x1d7e99a3, 0xa7fabfb6, 0xcac3a7a2, + 0x803b87f6, 0x2efb550f, 0x8423f1f0, 0x2b96ee72, 0x78f08fd5, 0x237b8688, + 0xa8bd35ce, 0x32330b85, 0x011c7cf1, 0x104288f9, 0x1b266b05, 0xcd57c09c, + 0xf6edaebf, 0x5cf1e367, 0x6b272acf, 0xfcd656af, 0xfa059772, 0x3f362abb, + 0xa2eb52e5, 0xfe748bde, 0xc61e7612, 0xfce1752b, 0x21517bcc, 0xc0efc481, + 0x7ada26af, 0x495f8e8e, 0xd5f85131, 0xe1347a01, 0x64fec9ff, 0xbf73fb19, + 0xab9fd3da, 0x6d77e788, 0xdce42ed4, 0x70c69f55, 0x86a50e41, 0x57af82e3, + 0xb9dfa6f6, 0x75c1bf54, 0x8367d08b, 0xa66a4f1e, 0xd48a6c7a, 0x8c5c9763, + 0xf6b9d6f7, 0x19ded0d8, 0xef02faf5, 0xf8c6d797, 0x667a2d5e, 0xdc7cc0c6, + 0x700435d4, 0xc492a597, 0x566c4a22, 0x57d6c893, 0xe375135b, 0xeef8e448, + 0xf9a93b47, 0x695f9a97, 0xafdbaf7c, 0x1686e3e4, 0x289a14cf, 0xefbf69fe, + 0x03ccf18d, 0xd93ad6be, 0x9a0e13fc, 0x23fcbf82, 0xa036e7ab, 0x10fb46cf, + 0x231aeb03, 0x5e2c1943, 0x5be9d212, 0x3365fa6f, 0x24304fe8, 0xa7e638e1, + 0xa170d8e3, 0xc4067a77, 0xa97a33c4, 0x653f0155, 0x8d610e50, 0xd7dc1155, + 0xdd8b283d, 0x9b283323, 0x1ff8fbdd, 0xe63d6c31, 0x6e36189e, 0xac8fe968, + 0xbf4177c5, 0xcdf88964, 0x6e9edfd9, 0x87e21520, 0xefb8c6f7, 0x0a587e04, + 0x748fd8dd, 0x14097127, 0x5052e96f, 0x090dfd80, 0xe2c0aa15, 0x3b8d8486, + 0xd2fad290, 0x183cd48b, 0xada9d2b7, 0x3a483885, 0xe4513bf8, 0xfe463eb4, + 0xc6aef16e, 0xeb28f388, 0x7dbf9863, 0x4dfda140, 0x51e7622c, 0x9436e3ba, + 0x476fe07c, 0xd9d82dec, 0x7ad9cf8e, 0xf19e3fa8, 0x02ff38d9, 0x24bf4181, + 0x42b1ff9e, 0xce026b24, 0xf826fc8f, 0xf9c164ce, 0x82b88d91, 0x8c5f3f60, + 0xb5d57161, 0xe41d6b82, 0x59752a7f, 0x0d1dbee0, 0xb94c8fff, 0x57d125c9, + 0xcb9f571c, 0xd52b3982, 0x5e40e787, 0x8dce531d, 0xe83d8358, 0xe6f0c21a, + 0xdffb7516, 0xc935b935, 0x2159b93a, 0xaf6e121e, 0xdf9c1563, 0x2e310877, + 0x2c750f98, 0x829d1817, 0x900f9f85, 0x6e1a71f4, 0xe071b50f, 0xa40c98ed, + 0x63fc46df, 0x8b307ef1, 0x68f402cb, 0x239f77f4, 0x34f39c35, 0xcd4d039e, + 0xa4db8eec, 0x62d93ee1, 0x22f8ee05, 0xe86d9ae7, 0x4c1d797f, 0x48788dff, + 0x8971e301, 0x5f949373, 0x14df20ad, 0xec1e3ab9, 0xc7edca6d, 0x235f201c, + 0xff053a1f, 0xbeb003d8, 0xea3947f5, 0x4d2d113e, 0x02581d4d, 0x5a6a68fe, + 0xf3daa62a, 0x3514bb7a, 0xeb8a780e, 0x6bc6b7dd, 0xe618b13d, 0x3fa0a787, + 0xbf6f3c67, 0xef7546eb, 0x7d78f8c2, 0xbd77e30c, 0x8d51f1a2, 0xc9eb3d03, + 0xfdd8e2bb, 0xfeecf124, 0xe7932721, 0x44a59f7a, 0x73dfc292, 0x80323fa3, + 0x03ce67b8, 0x265eb023, 0x2cd7105b, 0xcb9da37e, 0xc98e86a0, 0xf5d19e2f, + 0x12d8df0b, 0xdb233fd8, 0xb0ba5d98, 0x97b6067e, 0x8eb3ee4c, 0x5a5d7ca0, + 0x5c41726c, 0x3fa2cce7, 0xf828e03b, 0x1cd6f4a2, 0x9c0a7bc0, 0x1defa443, + 0x0db23d16, 0xd4f5f0e2, 0x1c322510, 0xb951de80, 0xc775c4cc, 0xfba8a685, + 0x3636ed9f, 0x718e6eff, 0x3a9a9a62, 0x5c74a4a4, 0xca107e78, 0xd523c349, + 0xf1d2b4c3, 0x2984e73d, 0x5da0923e, 0xca753ea3, 0x0dd609a4, 0xc4987b34, + 0x63d9aff9, 0x40921f4d, 0xb01d60cf, 0x4d47da98, 0xabf9439e, 0xc4af18c9, + 0x95f9a13f, 0xe03e612f, 0xed1f3ab8, 0x75ffd51d, 0x99232fa8, 0x3d82b6fd, + 0x76538b0d, 0x306f79ee, 0xf87dffac, 0xb0b1f3c3, 0xa917f40e, 0xe7ec162b, + 0x89df7b89, 0x1f437385, 0x15e2cbde, 0x51e61877, 0xaecc6d13, 0x9c56c4ff, + 0xe05afd05, 0x278e7bfb, 0x3564970c, 0x1e58d75b, 0xc9e70d10, 0x54f2f7f5, + 0xf70d1306, 0xdeb1f8f4, 0xbc7a294a, 0x61cb82bd, 0x4a8dd6f9, 0x7bed0aba, + 0x7001b6dc, 0xbda08f6e, 0xeec8d13c, 0x59e8d287, 0x02ac75b4, 0x34bfa773, + 0x77faf99b, 0x05c6ccab, 0x67ac1177, 0x8cdf3879, 0x6bd81e74, 0xfc96fac3, + 0x594fed9c, 0x4d5adb48, 0x99a7abed, 0xf630b79d, 0x6a87c963, 0xde150a41, + 0x9c040792, 0xf7fbc317, 0xb3ca71d2, 0xf75c7efa, 0x78d3f632, 0xfcf18e6f, + 0x5a9f36aa, 0x4a5fe5c6, 0x117fa83c, 0xd99b5ae7, 0xfe31b4fa, 0xa660ee77, + 0xe36ffb0d, 0x321c8ff1, 0x6f43ce11, 0xee34383f, 0x9f29f752, 0xc130f7e6, + 0x9e90d2bd, 0xb34c11f0, 0x27bb2a6c, 0x02adf9a3, 0xd35555c0, 0xec67bc36, + 0xca9bda9b, 0xd80e93e6, 0x1dd9acc3, 0x06ae47ea, 0x415290fc, 0x6d565fe7, + 0xf9b0af3c, 0x6dc3e32e, 0xd06df9fc, 0x67d82cdf, 0x0a64fead, 0x156df395, + 0x7bf085f2, 0xfd36fcc8, 0xf6fe9bb9, 0x2567eb57, 0xfad24f5f, 0x167bc46f, + 0xe6e95fc7, 0x2903b592, 0x1cf76a4b, 0x9fcfc21f, 0x0d1cb9e1, 0x2cbc464f, + 0x6905c523, 0x9a2e1842, 0x687ec61f, 0x5bad2bf2, 0x4febfbc8, 0xa978ebe5, + 0x0bea2f10, 0x743c4627, 0x40436dc8, 0xe8788d7f, 0x913ee5e8, 0xb1436d87, + 0xbbaaa55f, 0x7523ec00, 0xc33ad75b, 0x521392fc, 0x407b81dd, 0x5c3336af, + 0xccb78d87, 0xc64d7b79, 0xac657bf1, 0xe7f7029a, 0xc1269ca1, 0x1fb3003e, + 0x69dad3de, 0xc35db9f7, 0x2173e024, 0xc57ca7a6, 0x7ac361ae, 0x7e3e97ca, + 0x737e01de, 0x718248e7, 0x3d588e9b, 0x226c7bbd, 0xc6c7b9d2, 0xa90ab9c6, + 0x83ef1ff5, 0x8adcda4d, 0xbfda1bfb, 0xaf9f71e2, 0xfad185cc, 0x477f8479, + 0x77613df8, 0xe6d2bd70, 0xdcb80b21, 0xeb6668ee, 0x94368bd7, 0xfb8c3ca0, + 0x9c175eb3, 0x2ab4e905, 0x02ac704f, 0x67ca37f2, 0xb8fbeb89, 0x4e422bef, + 0x0fbe21e4, 0x72fb83c0, 0x8c45eb4a, 0x77e51873, 0xcec9dd8d, 0x38d5abcd, + 0x8bd15b6f, 0x376e1c1d, 0x18fea37d, 0x51b0b1fb, 0xa468bb40, 0x9ae6d97f, + 0xf40903b5, 0xb22ff59f, 0x6841a11f, 0xb53f7887, 0x1712957e, 0xb11037de, + 0x0d76d41e, 0xbd3fdf09, 0xee3179bc, 0xfda2afc3, 0x846e2c27, 0x7e8d2071, + 0x3f635e8d, 0xb2d3c40a, 0xabb6e205, 0xe3d81705, 0xdcc8fbc8, 0x170efbba, + 0x041bec36, 0xd8976bf2, 0xbf76d93e, 0xcec0f380, 0x0f5b080f, 0xfae02758, + 0x6bf2af59, 0x7a7ffb66, 0x02b56397, 0x6e95f7f7, 0x71caa210, 0x6b9e7d59, + 0x5a5d9858, 0x1ae9981e, 0x8837a3a6, 0x345641fb, 0xa79ee894, 0xbaf6f5da, + 0xd5237d2f, 0x4ae351f1, 0xfa697e9a, 0x35dfe9a6, 0x6bcd9576, 0xf481c0a4, + 0x8fe3b00c, 0xda843ce2, 0x367691e1, 0x1e647f9f, 0xf1eaa57d, 0x80f5baf3, + 0x3e4cb925, 0x7c22c44b, 0xa53d9bde, 0xe3d9d07c, 0xbf7ebb6c, 0x8fed77c3, + 0x2f4d0fd6, 0xf519feb4, 0x2d7fc8c2, 0x8394668e, 0x1740ff91, 0xdf5e07cc, + 0x27dc0b63, 0x3a33be80, 0x48ac7bfd, 0xbe6a4767, 0xfe3dce0b, 0x74a03e11, + 0x8adda556, 0xf8b16af9, 0xe3ce3b46, 0x7c693cf8, 0xd905e2ff, 0x61daafdc, + 0xe7638f75, 0x01138a86, 0xda6b5317, 0x149c5966, 0x15650fe7, 0x53a23dc0, + 0x059b6d1f, 0x0fc5eea1, 0x4b7e58b9, 0x17163bdb, 0xb26ae3f5, 0x9f83a60b, + 0x1906edc5, 0xef836654, 0xcf13cd7b, 0x7b2af3a5, 0x78b9bc7f, 0x9987bb3e, + 0x1e505795, 0x5678e85b, 0x1fc46871, 0x5a2b3f40, 0x4e210a8b, 0x6e110153, + 0xba559e3a, 0x165b211d, 0xd327bf1b, 0x79b39ef7, 0x2e9e2256, 0xadf1c1ae, + 0xfa8490e2, 0x38b20e44, 0x6afb44a8, 0x89addfa5, 0xe52e7ea1, 0x8b049aef, + 0xf4abe60b, 0xb1e61fb9, 0xaadc126b, 0x935cf61a, 0x74077c1f, 0x75b131ac, + 0x8eaf7dfa, 0xc4bb6b88, 0x47cfbef8, 0xa3bcc0a6, 0xd4c167c5, 0x38a79e58, + 0x9e443cf1, 0x8c31c589, 0x766a4fe5, 0x80e9a896, 0x0a83aa8b, 0x3fd34f8b, + 0x092b1ff0, 0xc22a8bd3, 0x1e5571ce, 0xa56e7822, 0x9e0160ea, 0xfd7d815b, + 0xf870eb1f, 0xd2b739af, 0xa7c62b83, 0x2298497c, 0xba7ae185, 0x8bcbaadd, + 0xd091a629, 0xb8c6221f, 0x9885dce0, 0x4edeaa6e, 0x465e2ffb, 0xc90fca53, + 0x7ee112e9, 0x5369ba96, 0xaa5fb845, 0x52dfdf96, 0xcae7626b, 0xdbb6f6b5, + 0x96a97ad9, 0x0717b09e, 0xde67ee41, 0xb1b1cd6c, 0xff9c0af5, 0x15adfd6a, + 0x798044dc, 0xe7827ed6, 0x4893b201, 0x46cff00b, 0xb780b9dc, 0xce04f643, + 0x4c4eb66f, 0x7521d2ff, 0xa92f4d99, 0x1ffbef14, 0xbf00585a, 0x338ae0a7, + 0xf34195dd, 0x452fb47f, 0x9ba5707d, 0x085067ce, 0xc65f69bf, 0xce9a57f2, + 0xb7f9a50f, 0x0f2c65ec, 0x0f709a0b, 0x81797daf, 0xc3b4147f, 0x7dd5bef1, + 0x325be025, 0xf48b78b1, 0x27eb82b2, 0x35903eda, 0x78056274, 0xe6edc43c, + 0xdffc9ada, 0x9d3e20d8, 0x7f6156ef, 0x4f7e26c7, 0x354db7d0, 0x13368abe, + 0x29059fde, 0xce7dfff0, 0xa42e4d4f, 0xec257dd1, 0xf7412583, 0x766eb095, + 0x08f9eec2, 0xd7b8cdec, 0xfd82a75b, 0xcffb7c6e, 0xf91f7839, 0x719eac65, + 0x2039d3af, 0xdf99cfed, 0xbe18de0e, 0x9ec27cfe, 0x87c809f7, 0x53fd018a, + 0xdb927541, 0xbad61ea8, 0xc264aa89, 0x3f3f593c, 0x3ecc246c, 0xfe2b673d, + 0x24f68ecc, 0x8156e384, 0xe40cf8bd, 0x5a4e7b35, 0x8fb5fa13, 0x2d5ac94d, + 0x909cb8c2, 0x116474de, 0xb3dfffd8, 0xb7043c7b, 0xbe6ff71b, 0x198f7dd8, + 0x83620fdb, 0xffa020fd, 0x4fea922e, 0x162ef1e6, 0x3949264f, 0xde5ef361, + 0x74fdfa0f, 0xd13e5fd8, 0xd00bf6c6, 0x5760897e, 0xd31512c7, 0xcabf1071, + 0x30798804, 0x8f049bbf, 0x7feb43dc, 0x47e2cacc, 0x8ba20696, 0x658a8e07, + 0x43897f7e, 0xc99cf766, 0x7fc09bc1, 0x9c4b3988, 0x3e743fe0, 0x9fb848a9, + 0x875e7248, 0x4c0761eb, 0x467de804, 0x3d61380e, 0x4972eba6, 0xea7a44dd, + 0xd6f2e4eb, 0x514c7dea, 0xdc38872f, 0x9fe60e2d, 0x7047933e, 0x49d773ff, + 0xa4eb0025, 0xea96e909, 0x70cf78f0, 0xcefdddfe, 0x2162cbfc, 0x8627bcde, + 0xf713fb40, 0x0e4098c6, 0x6d9ad9bf, 0x08bc3c05, 0x487ca23c, 0x84ef3b30, + 0x53ce12fa, 0x39f0337a, 0xa92f17db, 0x7f28e363, 0x576b5f27, 0x67a97ee1, + 0x716bc1ac, 0x26f3e7ff, 0x45f74fbc, 0xf90255c5, 0x4ea9cf17, 0x64cfbfb0, + 0x3fb06304, 0x3fb09bcf, 0x5d74c62f, 0xfdd292b1, 0x8f1648e0, 0x02446c92, + 0xf2992cbb, 0xf3e93bd5, 0xbf0cb1f1, 0x165e9d9a, 0x31e7f4cb, 0x7ffee081, + 0xfa8794c9, 0xe9cfeda3, 0x3fb822ec, 0xadcdc067, 0xa638e022, 0x85138b44, + 0x4cef8844, 0xb7e82629, 0x78cbb14d, 0x03f6070e, 0xa9b139c3, 0xfd4efedc, + 0x0fd702a0, 0xc10e04a8, 0x762d977d, 0x5f166f7e, 0xe386bc47, 0x26d26ae4, + 0xf5791f82, 0xd10ae245, 0x28b9aef6, 0x6723f545, 0x169f7af0, 0xdf471488, + 0x4aa0bbcb, 0xa23cbb80, 0xd466f3f7, 0x71849c17, 0xf0c59a70, 0xa444fc1c, + 0xf9e78dc7, 0xf70d3867, 0xbf72c741, 0x12190868, 0x5b4c2fbe, 0x8e2199f7, + 0xd4fd1c7a, 0x7c05c542, 0xbf7766d9, 0xfe9ceb07, 0x2a5c9956, 0x8fb4f86e, + 0x791bdfed, 0x7bd70631, 0x80ed3e28, 0xebea2b8b, 0xefda56fc, 0xfab1862b, + 0x57608701, 0x5264f7be, 0x3979d822, 0x5a738d96, 0xf00ee1aa, 0xf8638ce5, + 0xd1e98e72, 0x19b195cf, 0xdf4d4f28, 0xcf507700, 0x3f30396e, 0xc5323ada, + 0x09d8caeb, 0xf3820fd0, 0x59a49fb3, 0x699e82e6, 0x32c534ed, 0xb5d31bfc, + 0xc1f72b35, 0x73ff8e3a, 0x1f4c5e36, 0x1f095178, 0x3277dfef, 0xdd6abd7a, + 0xff681bac, 0xd71976bc, 0x79f9926b, 0xa4bc70a2, 0xc345e185, 0xc59d875d, + 0x4cfc3477, 0x088ef5db, 0x4e7da7cf, 0x74833388, 0xfc3443cf, 0x1c33f54c, + 0xc6c83d4e, 0xe3f0be89, 0x074e72ee, 0x9b8118f3, 0xf9370c83, 0x7bf81f14, + 0xc7e0bd5b, 0x7d0d9b88, 0x3c2be6e2, 0xcf6abeff, 0x13ae4bb4, 0xfbf4f936, + 0x24e98d3c, 0xc07df45b, 0x5e993aef, 0xaeea52ef, 0x717b02cb, 0x779d89bd, + 0x4dfa4893, 0x62bbe714, 0xabe47bb4, 0x4dbf2133, 0x5b67f662, 0xcfed19b3, + 0x83c7bb36, 0x0b54d671, 0x9226c39e, 0xf1f60da7, 0xd45a06bb, 0xb8cddff0, + 0xa08fdb8b, 0x1c749a1c, 0x9957effc, 0xcfaf73fc, 0x48eb1b86, 0xc393295a, + 0x46ca13f8, 0xab73d691, 0x60f7ef23, 0x1dc28f0f, 0x1d2e305a, 0xa21ef053, + 0xda0a63aa, 0x7deedfc5, 0x99e200ab, 0x89e17eda, 0xc82adfbb, 0x33ef051f, + 0xedc2bd9c, 0xa3c796aa, 0x0d276013, 0xea4fd0f7, 0xbfa4bf3e, 0xf018be47, + 0x6e53d593, 0x0e7d5fbc, 0xe3a2e89c, 0xae6d4dce, 0x8c166019, 0x09cfabf7, + 0xb362f3b1, 0x8067b88f, 0x5fb88ca9, 0x16e1e39d, 0x4633bad2, 0x9befbc8c, + 0x817fcf8e, 0x2d799ffe, 0x3bdc40a4, 0xc95f54a8, 0x99d513e6, 0xbd347f60, + 0xb7ca3fc3, 0x752387e0, 0x3a67fbf7, 0x721fff58, 0xa6deec49, 0x05d70536, + 0xbbec261f, 0xfeb71f20, 0x61d6cb1e, 0x30bd57b2, 0xb8e1ec1f, 0xd3ae3732, + 0xf8b274ae, 0xc8494fcc, 0x72f20992, 0x11beb849, 0xc769d594, 0x88f79e85, + 0x4ed23c54, 0x880f77cb, 0xdfed0719, 0x0710f0ea, 0xd7527bf8, 0xe26ef841, + 0x6071ece4, 0xd763edb7, 0xa638c224, 0x2ae94dd1, 0xa1ef62dc, 0x0ceba343, + 0x3ab757b7, 0x00c71216, 0xa1d81df6, 0x16eda3a6, 0x41c35ef8, 0x2659cf70, + 0x803c30ff, 0x20f07bfc, 0xc6bc802c, 0x8f1f2b07, 0x1f3ffcb5, 0x2041a10f, + 0x00f15e9f, 0x77c70871, 0xf00643c2, 0xf503c355, 0x7907bed7, 0x2a0b5fcd, + 0x96a19f6c, 0x605070d7, 0x5cf7c3cf, 0x42fdc10a, 0x9d95af64, 0xe3c4f6cb, + 0x4e4bc4fa, 0x87e746d6, 0x8ba843ed, 0x123b2649, 0xdff1be98, 0x121b190f, + 0x4b1cafd0, 0xe86dc20d, 0x7b420dc7, 0x22fce2e8, 0xf70082ed, 0xf25ee26c, + 0x432ff074, 0x6317a089, 0xc02145cd, 0xd4db76ff, 0xb30ff074, 0x0132536d, + 0xae473b5f, 0xac860d7a, 0x5ecb039d, 0xf8f6acda, 0x6bdd9a4f, 0xed6ad5e1, + 0xbb3074cf, 0x9d9b8d71, 0x1dbb0207, 0xff66874e, 0x87402c41, 0xfa639a10, + 0xbaf686da, 0x39ec0db9, 0xbaf941d0, 0xe08d204f, 0xdc99e41f, 0xcfc0d349, + 0x8092101b, 0x5f3dcece, 0x6538810e, 0x472bf351, 0x6d22de80, 0x5fa5d3fd, + 0xd1fa34ff, 0xcda3bf9a, 0x487f342b, 0xdf82cf9b, 0xf8a3e504, 0xdefc2773, + 0x215f8c08, 0x7e539e0b, 0xb97a9cec, 0x44afeb9b, 0xfbc451fb, 0x45692371, + 0x467bb4ba, 0x28fce06e, 0xa1e7483a, 0xc84e5059, 0xd70f94f5, 0xae467bf3, + 0x51efe977, 0xfa3731b8, 0x3d5a233d, 0x1c6fbd7d, 0xac32ae1f, 0xf4d77d13, + 0x2bdd8fa0, 0x363e5ff2, 0x543c9dcf, 0xa0304bf4, 0x7bb1a6e6, 0x0f8c9c19, + 0xe3e89507, 0xfeb9efd5, 0x65b5364e, 0x7de539c1, 0xe386ffbb, 0xffbbcbe3, + 0x89f82ef6, 0x044a4e93, 0x3e4eb1f6, 0xd70e3e39, 0x715373e3, 0xd7ab58fd, + 0x8da369fb, 0x1f88e7b0, 0x0e5677ed, 0x0adc7a50, 0xf4c167d0, 0xfb1fa777, + 0xe177d419, 0xcfc24498, 0x9e281449, 0x2dc71061, 0x73b7bfe0, 0x92fe6040, + 0xff807e56, 0xc70345ce, 0xd0806c2d, 0x87311fee, 0x7e7af9c9, 0xd726862f, + 0x9e144feb, 0xe522b294, 0x8cff7f03, 0x571682f8, 0x47f9cdd8, 0xe784fe5a, + 0x78dfbe59, 0xf9fe04a7, 0xe24553f7, 0xa6776b0e, 0x61f0674a, 0x0e6d8e71, + 0xf2d29f83, 0xa06ecfec, 0x75f78ae3, 0x7a0eb711, 0x96bdb79b, 0x3156f905, + 0x46237dea, 0xf9bf7efe, 0x446fbc4e, 0x2ed1538d, 0xe4fed5f7, 0xc64e282b, + 0xf309dc80, 0x7dd872f3, 0xbef9461d, 0x133ffbbc, 0xcef546db, 0x6fe4deef, + 0x4eefc394, 0x533ae3e7, 0xe230f25f, 0xa7ed2f76, 0x442ff69f, 0xfea7e9fb, + 0x273ecbd8, 0x4be0ffe6, 0x5786bcc5, 0x12a79eef, 0x70d39fc1, 0xe191233a, + 0x9faed266, 0x8f7b1225, 0xbb7c8cbc, 0x8737e5c0, 0x40df66b8, 0x7043b9ff, + 0xf0bda2c5, 0x8fd85693, 0x9c69cc55, 0xfd00a873, 0x7fcfc20f, 0x39b1c718, + 0xe73c28e2, 0xdcefe7de, 0xc193cb0c, 0x2bc71adc, 0xc015fdf8, 0x2a9c71b5, + 0x024ebd7c, 0x5a40ad97, 0xf718ecc5, 0x8cba35d3, 0x8a4c3e72, 0xd1bd1fb1, + 0x9181c469, 0xd73fcd5e, 0xf285f77e, 0xad024663, 0x0f3526ef, 0x0e3117fb, + 0x36f4be73, 0xafd6f6fe, 0xc71e38f8, 0x7f3ff8e7, 0xc09bfa62, 0xcdf4dede, + 0xb9633728, 0xa00a3f66, 0xfd4c6c81, 0x71a88fe0, 0x050fa8c9, 0x86e21517, + 0xf4830cfd, 0xd149dde7, 0xbbb78865, 0x6f59ec9c, 0x68baab78, 0x1ec49e22, + 0x8f4dc9dc, 0xbb7700da, 0xc41b3aa4, 0x97b6af47, 0x4dea82d4, 0x66ff34ff, + 0xcda1d7bc, 0x36642044, 0x0b6cf9a3, 0x47bc11c4, 0xc8079e08, 0x0d37de6f, + 0xa907fa70, 0x9d51e715, 0x34790817, 0x6a6ccfcc, 0x1f81b5ae, 0xcec494d6, + 0x27881db3, 0xbfc77dba, 0xbff3e38f, 0x706ee763, 0x22ff2947, 0x1679e18e, + 0xe1652771, 0xf18b1cb8, 0x2675828f, 0xc174ffec, 0xfc093fb5, 0x9eec7996, + 0x133dcee8, 0x7a5127f7, 0x478f6e3b, 0xe9a3333b, 0x549d3bfe, 0x8fbfc110, + 0x0b5de7c3, 0xa057bc05, 0xbe617540, 0xf70334a0, 0x47fc4c6b, 0x2822ace2, + 0xfce3299f, 0x21588666, 0x4cea3c41, 0xf30d90aa, 0x5b42ddc5, 0xadeefc0d, + 0x43b584bf, 0x9844fe9c, 0x945dbe7f, 0x2b7f1638, 0xc3f2d54e, 0x8900f7f1, + 0x6ab69e61, 0x667df9c7, 0xb66abe5a, 0x6775fb80, 0x3f89d338, 0xeb053f0c, + 0x51c73ca8, 0xe4a7365c, 0x1567ae03, 0xce09cfea, 0x4091b62e, 0xe085baf8, + 0x0ec77bc4, 0x5dd97df0, 0x9f07bf02, 0x1cb5f9eb, 0x26e673ef, 0x212bbeea, + 0xeef4cfcc, 0x1bfdd910, 0xa777ec79, 0x8ebafd35, 0x7cb5e1eb, 0x93cf3c7e, + 0x08a3a3ae, 0x7f3034a2, 0x65fdb275, 0xc3685e37, 0xfc44b9e1, 0xda7cd0e0, + 0x0d2375de, 0x62b15af3, 0x9522e20d, 0x86cde3ad, 0xd8226f5d, 0x377bfd4d, + 0x51f3eae6, 0x7692f8f4, 0xb307b342, 0x6eb888f7, 0xf28f3b38, 0x7e112059, + 0x17b537fa, 0xfdae4d13, 0xe9ba0f10, 0xcdef1ba2, 0x1f17b089, 0x7b2b7e14, + 0x83aa5bf1, 0xebaf54b9, 0x39b8f8e3, 0xbb060c98, 0xfadc4331, 0x2751c033, + 0x51cd371d, 0x3b8da470, 0x80bf7cda, 0x86e031ea, 0x2ceb669c, 0xe2a62e33, + 0xbe6d273e, 0xa8476ddf, 0xe28ae25f, 0xc388ed2f, 0xdd8f68e0, 0x984aecd1, + 0x7ce7225f, 0x0664bf77, 0x6c9547f5, 0xf1106fa0, 0x867b438f, 0xd802c971, + 0xc1f10508, 0xe718b3d4, 0xfe744af1, 0x53f3e38a, 0x7fd1cecc, 0xfa3d0909, + 0xb457f461, 0xa758f338, 0x71e94fe6, 0xbc6f1dd2, 0xaa4fdd99, 0xf800a4e1, + 0xb37ffa09, 0xbe9d7188, 0xdfb5a370, 0xd4425e17, 0xeac9811e, 0xff5c2f15, + 0x3e5e29be, 0x6197c6d4, 0x707f5864, 0xc343e1a2, 0xf9bc718b, 0xa83c432f, + 0x03a6f1b7, 0xbd019bc6, 0x47fb378f, 0xfbd768ca, 0x713e6bf2, 0x313e3b32, + 0xbd7289ce, 0xf8d9f2f6, 0xb963443b, 0xadc6d11d, 0x3d56b8ee, 0xb6fec9c3, + 0x1fac1245, 0x647ec179, 0x8b41c8f4, 0xacb86b07, 0xfe30475a, 0x1d3f3ff9, + 0x8000e9d6, 0x00008000, 0x00088b1f, 0x00000000, 0x7cbdff00, 0xd5547c0b, + 0x67b7efb9, 0x332479ef, 0x49926649, 0x9d804032, 0x20424210, 0x7860210e, + 0x200f3b88, 0x15019042, 0xf01d51f1, 0x28490201, 0xd6b4f5a7, 0xa4484cdb, + 0xd179fd14, 0xfd5bd6b6, 0x3d503b9d, 0x4320d687, 0x813c180c, 0xf0c50133, + 0x150106b0, 0x888da7ae, 0x31243688, 0xded80f54, 0xbefbf79f, 0x333277b5, + 0xee7a5a19, 0x1651373d, 0xf8f5ef6b, 0xbffdf7d6, 0x536b5ad7, 0x6abad1fd, + 0xdde80648, 0x0094012f, 0x41ca55d4, 0xa2b5fe1b, 0x899f99fd, 0x58ac19ba, + 0xa77f1507, 0xf1022c03, 0x2874a653, 0x62c03736, 0xb395e4af, 0xd176b401, + 0x962bd6ff, 0x45f58aa0, 0x6eb9f35e, 0x2dfb689b, 0x6401a9ff, 0xf7a6dc00, + 0x607f4c5f, 0x149ac5fb, 0xc5d7630c, 0x6fedd1a5, 0x73ef32bb, 0x896008a9, + 0x9e1cf316, 0xa22e52fa, 0x25f66a9a, 0xfa2abd61, 0xc933967d, 0xff10a17d, + 0x7ec61632, 0xbe5c032b, 0x352ef958, 0x6e7e96ff, 0xae1e5e1e, 0x002cca47, + 0x2e36f59d, 0xb3cfdf63, 0xc0e43f80, 0xe6282692, 0x00a90032, 0xcc5c4e85, + 0xb15fac34, 0x13469680, 0xf927c027, 0x43391d3a, 0xf8e00ffd, 0x8c371c01, + 0x00f207e3, 0xb93bd60e, 0x87bd66fe, 0xb052b3eb, 0x7ffe3a43, 0xc545aae8, + 0xff6fccf5, 0xf9c7e2ae, 0x78515fe6, 0x1eb4e9dc, 0x031fbe3b, 0x7f3d6863, + 0xeffe29ea, 0xfb50c2b7, 0x2d2ff6ba, 0x5ed7c9fe, 0xbf9adfcf, 0x75e54520, + 0xa4dabcd0, 0x281779a1, 0x9d70a300, 0xf9a3f30b, 0x2b13cc6b, 0x2df958df, + 0xcac7fbd1, 0x1eb317cf, 0x83d03e43, 0x87111a60, 0xa04c57ff, 0xfcb6bd4d, + 0xf163e506, 0x0d277ae7, 0x6bf00f7f, 0x78d0df5e, 0x4ba0bcba, 0x74164df1, + 0xd5d71199, 0x77c6290c, 0x5ce50520, 0x44e109dd, 0xc5d16c24, 0x2a15cfaa, + 0x8b9c12bd, 0x39c033c2, 0xd0f2de43, 0x20af73f8, 0xe686d35f, 0xbb20ab9d, + 0x1679e98b, 0xa3ace204, 0xa851c696, 0xb071807d, 0x79699b69, 0x9371d708, + 0x51f7ee05, 0x1fca2899, 0x2f1e253b, 0xbb7134e0, 0x266cafbe, 0xd76001b8, + 0x4072cc81, 0xe756bcfa, 0x10071831, 0xfff70332, 0xb72a49df, 0x0209227b, + 0x283f3809, 0x17d2365d, 0x1f201ca5, 0x69194ef5, 0x90e23609, 0x47d84acd, + 0x55e7d87a, 0xf6f501a0, 0x60efd18a, 0x91401ee0, 0xcf2e713c, 0xfd4d98d4, + 0xb0b35dc3, 0x8ac58ddd, 0xb89b05ba, 0xe977eaac, 0xab7eef7d, 0xedf5fa93, + 0x330ec7fb, 0x7815f38d, 0x73784291, 0xfde815bf, 0x4839876c, 0x7cae63f6, + 0xbd61365c, 0x8ac01faf, 0x0f2f67ed, 0xedca0057, 0x746ae826, 0xe4933962, + 0x077e4718, 0xaa22f5f5, 0x4e50231d, 0xcd397473, 0xc556edd1, 0x48ed997e, + 0x841c9245, 0x753b21ec, 0x39a32eb3, 0x63a256c8, 0x17ae1b4e, 0x457cdfdf, + 0xe6976b89, 0xfd96e3ea, 0xc9521409, 0xedc68832, 0x8f6136dc, 0x005341ca, + 0xc5b0aca7, 0x84bb27bc, 0x4675ccf4, 0xb6499f3f, 0xcbbd7113, 0x976ebdc0, + 0xf344c7f0, 0xe629cf7e, 0x25ff2b9d, 0xbfd71bb9, 0x307da2cb, 0x3fede90b, + 0xf8ed8661, 0x65622e1c, 0xb4be70c6, 0xf3075ea1, 0xfb17adae, 0x2a6a240e, + 0xf08bb3d2, 0x48faa0e3, 0x76ba2d4d, 0xfeeea2fb, 0xbb0e6c72, 0x902a979a, + 0xe53c70c3, 0xf7e218c9, 0xfceabe30, 0x8b67e58f, 0xe4764d04, 0xb7bb5973, + 0x30cb4c92, 0x1f22763e, 0xbf795fb1, 0x2f5cf3c6, 0xd8fd0d1f, 0x23512175, + 0x30baefbc, 0xdbf9a352, 0x86d3af08, 0xfcefbff0, 0x4fd92240, 0x20aaa3e4, + 0x365dfa2e, 0xafc676ef, 0x44687dc0, 0xd60b705e, 0x77ce3a43, 0x2d1ff625, + 0x322f7e24, 0x34d3b779, 0x4b71faca, 0xdcdd9327, 0xfb1e7e5c, 0x3f481a48, + 0x5491fd40, 0x658bdc27, 0xf087f500, 0xc6054816, 0x40421993, 0xf06a36f3, + 0x66739502, 0xefc429ab, 0xcbb31c01, 0x29a9e341, 0xcbf87384, 0xc9bee9e5, + 0x52def9c3, 0x79c2808f, 0x9a6deb5a, 0xb7b00b92, 0xb6f5c9de, 0x6f970f7a, + 0x6e5cabd4, 0x83fc963c, 0xa7538e20, 0x6d253459, 0xaa4a7fa8, 0x68398fd0, + 0x39ae8867, 0x88030520, 0xeb8f39b9, 0xe0a457b8, 0x84e48946, 0x27e089eb, + 0x3ba065ca, 0x4dbf823f, 0xe9f8d34a, 0xef2c0dac, 0xf71342e2, 0x7c1fe747, + 0x7b787b39, 0x7d547b94, 0x3a624b8c, 0xdd9a5cf2, 0x0ee3e585, 0x1a6b925f, + 0x43cee1e1, 0x29eb8097, 0xba45bcf4, 0xe384be4b, 0xc1970d4f, 0x4c3fd00f, + 0x5f10c145, 0xa21ee7f1, 0x05875a7f, 0x50e83e48, 0x758b2f59, 0x25afb47a, + 0x47ce02e9, 0x28edf3aa, 0x0ead67ec, 0x42f68e13, 0xbdf11a77, 0xa3b3e6c4, + 0x421d2146, 0x87749aae, 0x66f1c247, 0x32bc5ba4, 0xbe71ce99, 0x7f91eba9, + 0x2138e91d, 0xc8e8efb6, 0xdf5152c8, 0x0fede534, 0x9b35af49, 0x0ae22c23, + 0x84774f73, 0x1784cf1f, 0x904f149d, 0xf916fb4d, 0xe487f9de, 0x8c35db00, + 0x758ec873, 0x86f64c9e, 0xae9b9e71, 0xc256bcd8, 0x7d44753f, 0x5c98903d, + 0x3a19f644, 0x371d792b, 0x0a3ac4db, 0x1762fecd, 0xa1f0b3db, 0xbfdfb077, + 0x3d90000d, 0x23eba9bd, 0x0a9e9019, 0x37664153, 0x9a4879d2, 0x73e54290, + 0xc49e487f, 0x1ee4c9e5, 0x9301cfe2, 0x4f79a55d, 0xb925abd7, 0x5ded1788, + 0x60d00987, 0xa1d779cd, 0x3d4ef950, 0x5e22e494, 0x71b7adde, 0xc9dea279, + 0x0f7ac9e5, 0x3df08797, 0x7c2de9e1, 0x1b7b784f, 0x08fd53df, 0x18f2a7be, + 0xf1654b8e, 0x5e3c493d, 0x1649ddcb, 0x6481c75a, 0x27e63668, 0xc313853c, + 0xf805e0ad, 0x366f99ea, 0xbfa346db, 0x4b27fab4, 0xcf597053, 0x60a5537e, + 0x31fcd8fd, 0xdf0afc3f, 0x3f4acfcb, 0xb7bd21b5, 0x1eb4749f, 0xaa427ac7, + 0xe10753fc, 0x1a2258f3, 0xe56b5247, 0x98025a08, 0x2471b64a, 0x52835db3, + 0xf5e9a7ac, 0x254b7280, 0x45596142, 0x00b82177, 0x6e5972ee, 0x977f21b1, + 0xa7dffdd9, 0x5cd025ba, 0xd5137955, 0xbe9235d1, 0xeb20e64b, 0x5ee4967b, + 0x76eefe8a, 0xaecfff87, 0x49afff08, 0x7d91a69f, 0xe049ae98, 0x83bcb372, + 0xe7a1a5e3, 0x1ddbbb46, 0x724cff73, 0xb325c47a, 0x5b36997d, 0xe18e82d2, + 0x9bb46bfa, 0x24ad5e76, 0x38bf4df9, 0xc5ca89af, 0xfbae2e55, 0x44d8df96, + 0xb8e95ffa, 0xee0aff56, 0xcccba8ff, 0xb0572db8, 0x683f1c5d, 0x208a9bb4, + 0xffbbb8a3, 0x3b706248, 0xbf94fae1, 0x73eb0931, 0xb2c5d93d, 0xeb819b6e, + 0xe85b6dae, 0xad5bf57d, 0x24de57ac, 0xd3e5c52f, 0x0d32aba1, 0x243997df, + 0xe74c986f, 0xd29b8fec, 0xf253bde8, 0xb4cadb12, 0xd094ef29, 0x5bd95cfb, + 0x6a53f546, 0x93cb13a5, 0x4bacd94a, 0x7e7e6ed8, 0xfd86d78a, 0x787f864e, + 0x965bf099, 0x204de49f, 0x5f04af3b, 0xd7baa5a8, 0x69506dea, 0x2454cf1d, + 0xe4aa38d3, 0xe5bd6135, 0x46ff8ad6, 0x52fb9474, 0xbde89240, 0xf5f8a14b, + 0xb8fc3fb9, 0x5aed89d2, 0xfa4048c6, 0xf05c3273, 0xacbfa247, 0x404d5133, + 0xce2c5a82, 0x62d7ea4a, 0xb91b9c91, 0xf6a0abee, 0xfab33c81, 0xfc7b8e32, + 0x83fb3b6e, 0x712777ea, 0xeefc741c, 0xaa17ec51, 0x4e5d9ddf, 0x889371e5, + 0xaddfabd7, 0x26f7e2ae, 0xa9519308, 0xdc3be7be, 0x8fc56b6f, 0xfe38dd2b, + 0xb62eb1b1, 0x12a7282d, 0x624ec225, 0xffa8907b, 0xbedc353d, 0xe1fcca43, + 0x797f6c79, 0x15b14a52, 0x4ee79fe7, 0x955f6a88, 0x2faa8ae5, 0xa2511dc8, + 0xeac9d844, 0xf551d949, 0x92a44b5b, 0x78f8c8dc, 0x7d544276, 0x24aba569, + 0xedfda237, 0xeaa223d5, 0x8ecf6ecb, 0x669997aa, 0x0f51fb08, 0x9e852bb3, + 0x05ccaecf, 0x4f644ca1, 0xdbeda29d, 0xd241fef8, 0x7e2223f3, 0xfc61762a, + 0x3ca97284, 0xb97ec252, 0xafdbaec4, 0xa6797400, 0x3f17fd93, 0xea3c7047, + 0x9dfc4107, 0xf890f14e, 0x78c2eb29, 0x0523e280, 0x3d0476fd, 0x3f688e95, + 0x216a055e, 0xceaadfd9, 0xcd4f1c05, 0x44a92cf3, 0x463e4635, 0x1f92abf7, + 0x0c487117, 0xcc47c5dd, 0xcaade971, 0xc46fee8a, 0x7d3a5575, 0x537f262d, + 0x0162c52a, 0x1ae28bad, 0x1d063d63, 0x954f5ad7, 0x8a256f7c, 0x2bae6fff, + 0xf5807e96, 0xd2c45f9c, 0xf3d2efd5, 0x38a78c53, 0xe54cec0e, 0xdc7f10f8, + 0x2303e2f1, 0xfb46a9ee, 0x6fb48ae6, 0x64bdc90e, 0x9bedb5f2, 0xe2b5ee31, + 0xa35c633d, 0x3ccb343f, 0xf07fd1bf, 0x7fc52ab9, 0x27db03be, 0x96ee79c5, + 0x297f3fe2, 0x451cfdba, 0x1ea0746d, 0x1bc9051f, 0x571f7e20, 0x2ac90a15, + 0x544d694e, 0xafc8fdce, 0xff3a3c50, 0xca89a07c, 0xe3c13d59, 0x2dff5c56, + 0xfb4ab2f9, 0x143c460d, 0xa9a9aebb, 0x7a390e22, 0xf8abb545, 0xdaa025be, + 0x7968bf29, 0x1e53b55c, 0x1541a2d5, 0x38da8be5, 0x37ca7ad3, 0xb12c42b4, + 0xec2a9b9e, 0xbfbd04fc, 0xfd976e51, 0xacb15213, 0x4d3f75b1, 0xd5ed48b1, + 0x03050b7e, 0x9bce2947, 0x3bce3c34, 0x341d04aa, 0x83c7d1df, 0x1d845f0e, + 0x2f38debf, 0x8d36c093, 0x916929f0, 0x96c2a476, 0x8dda45a0, 0x54574eb9, + 0x1553aafd, 0x4467bc79, 0xd45bbf54, 0x1876a8ec, 0x1c53e6bf, 0x7c8168d4, + 0x29a8ec85, 0x5df14bd1, 0xd65f1f2c, 0x3875efd7, 0xb3027c29, 0x71fd955b, + 0x42b792fc, 0xb9f62ff0, 0xcf4b8f4f, 0x7cb07ad0, 0xb2e5553a, 0x2089f649, + 0xc266e30e, 0x731d6c43, 0x1e34e5d2, 0xdc21ec8e, 0xcba6ed79, 0x5d437a18, + 0x0a2dd16a, 0x54ef7dfa, 0xc38c3fd3, 0x2b534ffa, 0xdf10516f, 0xd7a659de, + 0x64feb072, 0xbf515cea, 0xecd534c1, 0x9867f805, 0xb6254b77, 0xf77dba77, + 0xfa5f22a5, 0x12cd8ecc, 0x498a33c6, 0x50f76282, 0x05a4fbfe, 0x160a29fd, + 0x90b9a641, 0xe455bb56, 0x6809b5cb, 0xb97da8ff, 0x6abf12a6, 0x77390c13, + 0x875f9067, 0x644d3307, 0xcdfc8c2f, 0xd87ec16e, 0xafe6cf3f, 0x27097811, + 0xbe9768ab, 0x266e6fb7, 0x54e9e2e1, 0xf0bfaf27, 0xb21e59b5, 0x77d74857, + 0x47ffdda9, 0xe8f102ba, 0x798b326a, 0x2b0a5a7a, 0x8e16efc8, 0x43487145, + 0x9f74c2f2, 0x1084279f, 0x6b971c2b, 0x8deb091e, 0xe2978b2e, 0xbc75a7f4, + 0xa8d96f5e, 0x76c84fef, 0xc5391b81, 0x96377eb4, 0xf2f1d0bf, 0x5a2f3e9c, + 0x104b31ba, 0x1fece00f, 0xa8b274b3, 0xb9641e13, 0xede29fb8, 0x7924effe, + 0xeace3f39, 0xb08ffdff, 0x85bdc1fe, 0xcfa38a5e, 0x2cfe0a26, 0x7634e60f, + 0x358a7d63, 0x748c3a38, 0x0fe69a3e, 0xb6ee0e12, 0xde33c706, 0x6893eb1c, + 0xce03497c, 0x0efc8c43, 0x32d538f3, 0x3fdc786e, 0x11b05e7c, 0x219cef9f, + 0x8bcc6cf8, 0xdf91b53c, 0x3c54a0f9, 0xf9c0e837, 0x837fc443, 0x203a419e, + 0x02fbc9cb, 0xe691f620, 0x0fb10eca, 0xf789a9fb, 0xf948ea4d, 0x79dafeb0, + 0xbd75e713, 0x9a015e46, 0x7e74c563, 0x78ccf3c5, 0xc4cca367, 0x3a77f006, + 0x4a7f9ab3, 0x9e72d6da, 0x3a2bad3e, 0xd3b1bf4f, 0x7ec0e15f, 0x7f187e37, + 0x3e96643f, 0x6504296e, 0xba33d7f2, 0xd2cddba3, 0x1759f4f3, 0x4f1f9fa3, + 0x48dbfdd5, 0xcfb91918, 0x7fcf41b1, 0xa4e78e06, 0xd6c94e10, 0x8b77c8c9, + 0xea69432a, 0xad68dd90, 0x647976c7, 0x4e5c6d1f, 0x807ce53e, 0x047afcf3, + 0xa4ec85b4, 0x9f434b87, 0xfb829f26, 0x1e6228a1, 0x1f06f71d, 0x7c143e07, + 0xff9dd29c, 0x3758d9cb, 0xa8219a77, 0xa673ad0e, 0x1001a7ce, 0x5a701e7c, + 0x8fd3cf98, 0x186a7afc, 0x263d591f, 0x97d62350, 0x1a8226a0, 0xf9ed4f61, + 0xd97551a9, 0x671e8f90, 0x4fc7d54c, 0x1a8c8ef2, 0x0c3788c7, 0x3a91bdf9, + 0x90e293af, 0x1cd58ea9, 0xe694a477, 0x725b8d44, 0xc84e563c, 0x91db8a38, + 0x5c515fc8, 0x8a894a7f, 0x07746e33, 0xfa500388, 0x97131291, 0x8f49956c, + 0x7e8f9e66, 0xfbe9a72e, 0xbb72b153, 0xe8a13f16, 0x7fddb397, 0x5a5d3f3f, + 0xaad33f34, 0xee99f9a2, 0xe667e68b, 0x8dbe68f2, 0x65f347f0, 0x5189ead4, + 0x2faf47ef, 0xfd8faa8e, 0xf6a8ccc1, 0x2300e8d9, 0x2f36e3eb, 0x7e3f6a88, + 0xfaa8d2eb, 0x8eefe784, 0x5c105f6a, 0x70bef519, 0x92eb9ac7, 0x86d0e4ff, + 0x5ec476a8, 0xff915fd3, 0x458f6d0d, 0x2d5ff3cd, 0x68b48aff, 0xdba45dbd, + 0xf686976b, 0x4fc878b1, 0xd90af6d1, 0xdbfb5749, 0x25ff6957, 0xbef2ae50, + 0x78016053, 0xcfddf11b, 0x76449f65, 0xdab2146d, 0xc9a37684, 0xdec9ab04, + 0xf1326d3f, 0xe7a1a43e, 0x7c44d2ab, 0x8f4d2ab1, 0x14dedc13, 0x1d865fb2, + 0xfada6b3d, 0x6c9b8f0e, 0xbf665f53, 0x4cdf0a63, 0xe5479779, 0xe48abbfd, + 0x4bf69552, 0xc5de91e5, 0x968711d3, 0x2ba032e3, 0x3fe3c684, 0x7df6877b, + 0x2a6c3b2e, 0xf54e54e1, 0xe15fc807, 0x632f42ba, 0x0eda02f1, 0x1d06a3f2, + 0xc787d41f, 0xd4647e53, 0x3fd67b97, 0xdf97ed41, 0xf29e365b, 0xf7e7c1d6, + 0x8caf8c76, 0xbae47fe0, 0x8b89c696, 0xa6bad036, 0x6ee7ad0d, 0x8dd8daab, + 0x85914f74, 0xb07f47dd, 0x7dd70d21, 0x2cdc7a56, 0x9980abe2, 0x8ff42be2, + 0xc2efdfbc, 0x96037a40, 0x487e4329, 0x74c116fd, 0xf97c12d6, 0x51cbe239, + 0xeff94bd9, 0xca2088ef, 0xeca96c1f, 0xec32eff7, 0xb8a6aaac, 0x701ae822, + 0x03a9c744, 0x3b638e0f, 0xcc3ee67c, 0x67af11ba, 0x463d622c, 0x1dba8bfb, + 0xc3b742fe, 0x237f643d, 0x6f579bf6, 0xc51259fb, 0x45f267d7, 0xff3c6d3c, + 0xa7389a55, 0xcc9a55f8, 0x23bb5d72, 0xefb919c1, 0x45721358, 0x46daebd5, + 0xe047cf38, 0x1eb1ad70, 0x7ad0a4bf, 0x53fae9d6, 0x7c9dd9d3, 0xfe3c7037, + 0xfc70d23f, 0xef976dda, 0x4dfd4bdb, 0x8fc219fd, 0x3bbe7806, 0xeb8e003f, + 0x4433fcef, 0x49bfa5c5, 0xbf2bfb13, 0x865ae9d1, 0xb0711385, 0x8bbb7d0c, + 0xcf67b7ca, 0xe7c3bd23, 0x8beb0961, 0x714cc13b, 0xb67f12da, 0x127f9899, + 0xe0f7a7bc, 0x54d35ad2, 0xe0eddf5e, 0x7c5f9333, 0x249abeff, 0x9e38376a, + 0x002a0e31, 0xb81f6dc5, 0xda0ce602, 0xe249b9af, 0xb3e701b8, 0xbddf73d1, + 0xff209ea3, 0x3ef7cc6b, 0x469d2ff8, 0x2f052c7c, 0x0f8c6b8f, 0x87651a90, + 0x4c205acf, 0xb38137fb, 0x48cbe0d6, 0xdf8a06cf, 0xf61b0f10, 0xed9db267, + 0x3b1ff35b, 0xf776c39f, 0x4d1eea8f, 0x35d9cc71, 0x5c23ce7f, 0xda3cf5dd, + 0xae6b5c5d, 0xb841dfdd, 0xe672f833, 0xf449cbc1, 0xc611e31e, 0xf562bc15, + 0x5d9c9e92, 0x645e4af3, 0xad2c7fbc, 0x83f530ec, 0xe7b8b4d2, 0xe579b111, + 0x9ff04b1a, 0x3bbd231e, 0x0cf1e66a, 0xe3a23e7c, 0x9ab64373, 0x0dcf8919, + 0xe4f88349, 0xcbc374b8, 0x0d95db32, 0x5cf813fb, 0x8b8eb4e7, 0xbeae57ba, + 0x154a98fa, 0x827e0f11, 0x97115538, 0x554e229f, 0x10cfedd4, 0x2f5f54a7, + 0x709dfefb, 0x9f53c9f2, 0x7c3e7324, 0xddd1f5fb, 0x7fbff527, 0x88f7f10f, + 0x1801afd0, 0x58fd9f78, 0xf14a816b, 0xabdec56f, 0xa87d93ef, 0x3ef2b56d, + 0xf75725ec, 0xfda817e1, 0x7da8093e, 0x8d81386d, 0x14ab6d7a, 0x35abfda4, + 0x8d37bb6d, 0xe69afac2, 0xd3042525, 0x3b6064ba, 0x0522db56, 0x42eb3f69, + 0x3ce8b87d, 0x378a9fda, 0x71a05eae, 0xe310df7b, 0xe70fac5e, 0xdbd48c51, + 0x34f7e2b2, 0x2b56bade, 0xe7fc5024, 0xd1465b0a, 0x10a5bb7c, 0xf43ab7cd, + 0x5fc6858c, 0x5c92d2fd, 0xeed6ff0a, 0xb91f18e8, 0xf7bbd41f, 0x3e454584, + 0x667d6ead, 0x44aede9e, 0xd460f7b8, 0xc123e8b9, 0xbcc8bc8e, 0x0858a311, + 0x420b7c50, 0xfce8ef5e, 0xae3ede5f, 0x7689d891, 0x120bcf6c, 0x9bbb31db, + 0x9d81d8ec, 0x34affeff, 0x197fbedf, 0x9281b84f, 0xf837e3eb, 0xd4371c02, + 0xc5c0f3ea, 0x03ca1693, 0x17cd5b6b, 0x3cff9de2, 0xdc79f6ec, 0xd8f286d3, + 0x3379f8d8, 0x2be503ea, 0xd644ec81, 0x6fd1d90f, 0xfcf48159, 0x3d201a84, + 0xb2dfb38a, 0x539beb12, 0xb63976f5, 0x77fcbc60, 0xfe615b85, 0xf9c472d8, + 0xfbfbec72, 0x7287f7f4, 0x7ed0b0be, 0xd17aad5b, 0x0dadb842, 0xe5ce2e7f, + 0xa79e3edb, 0xaf77e9c5, 0xb33df85b, 0x5b7ab7c9, 0x6c7e90c9, 0x93763690, + 0x6fb0dadf, 0xbe71ca82, 0xf4cdd02b, 0x695049ed, 0x3f7b151d, 0x311dde9f, + 0x1f111fde, 0xab7e11b9, 0x45c7d776, 0x6bdbe266, 0x4929171f, 0x337bcf43, + 0xede3ab1c, 0x16ebdc93, 0x6489f77e, 0xb79a45df, 0xdd55af66, 0xf04ef8c8, + 0xeddf0986, 0x40cf3e76, 0x96365b7c, 0x2efbe244, 0x5db6bba6, 0xadbf92f6, + 0x6fe25b6d, 0x5e49f6e0, 0x56dc8312, 0xc99c2016, 0x11e31f4e, 0x4df382fe, + 0xd071cfd7, 0xff6ec91e, 0xe28bc252, 0xc48f8f08, 0x7ba9ad5b, 0x6c2b9d0c, + 0x96b7fb36, 0xec9fe845, 0xdd1ba808, 0xaf34cfc4, 0xcfc90eac, 0xe972126c, + 0x5393bb55, 0x1fa26fc9, 0xde957da7, 0xc4c9e7f0, 0x0f6d4dff, 0x73ef48d8, + 0xa75e4edd, 0x695012cd, 0xd52c665f, 0x2d9b6e51, 0x57a4d5be, 0x4512339b, + 0x7d759b5e, 0xa4bd65fb, 0xfb9d0aaf, 0xa2df79f9, 0xef5bc757, 0xcbfb6068, + 0xd0666577, 0x6bd78d2b, 0xda93bf03, 0x1475b5d5, 0xdebdfa45, 0x897a777d, + 0xe8a2733e, 0xaf02190f, 0x493ef3b1, 0x99392338, 0x8b2d6e56, 0xedb1fbf0, + 0xd1e3aa7e, 0x012803e0, 0xa9c13fde, 0x1df878b5, 0x206f2ee9, 0xea913c39, + 0x4c3b27cb, 0x8c1cba5b, 0x74b896aa, 0x449ffb60, 0xcebeffb6, 0xefd98b47, + 0xd7aebe24, 0x8f8b66eb, 0xad8a8cf9, 0xae0f1e92, 0x5712c72f, 0xe9d25ecf, + 0x2d1d9cde, 0xdb76d8f7, 0x536676f5, 0xe892b3c0, 0xdeb3203c, 0x2cfda9f4, + 0x5f5da37f, 0x7f90aaf8, 0xe95be5fb, 0xece6cb3e, 0x2fcf8c65, 0x2c50537e, + 0x2c7b8c47, 0x76483cad, 0x0f0319e4, 0xe88780e6, 0x1d662a7e, 0x9fefb74e, + 0x34fb11dd, 0x2ebee590, 0x3f9e809c, 0x877f7579, 0xb7ef13f9, 0x97a241f5, + 0x3d6efbec, 0xc7c0504f, 0x5783b138, 0x834638e5, 0xa2cf7463, 0x5b04c3b1, + 0x9b4c9ab0, 0x62e71141, 0x48c9b2c9, 0xa61b34b2, 0x4b4c74c2, 0xaf70dfef, + 0xeb84d05e, 0x590107dd, 0xfbd143c4, 0x9a49a003, 0xf02fb914, 0xfbf89ae6, + 0x1bfa2f02, 0xd6ffaf49, 0xb08cc0be, 0xe5258569, 0xe81fdfef, 0x99e74772, + 0x2655bbef, 0xf02f942a, 0x06270a17, 0x4c133ec5, 0x4f3efc25, 0xfff7c4bc, + 0x45a511e8, 0xb9b7cdea, 0xd7b8dfd0, 0x1b3cd96c, 0xac572bf5, 0x048dea9f, + 0x67114ee2, 0xbc37ee0c, 0x5ce39139, 0xe73243b4, 0x969d4edb, 0x6095b918, + 0x6f7c047c, 0xbf6a3527, 0x9bf87c22, 0x3bbbb264, 0x4977d553, 0x6447fd2e, + 0xa09197be, 0x715c5b74, 0xc52f6af4, 0xa88718cd, 0xdabec2e9, 0x9e79c4da, + 0xfc80d54d, 0x39d3827b, 0xafd08e45, 0xa83fba53, 0x8c767c39, 0x4bc8e305, + 0x93c9e3a6, 0x7b75fc70, 0xdb69925a, 0xf799ed6b, 0x9815d3a6, 0x857fc572, + 0xb485faf0, 0x7146cf2d, 0x1160e6e1, 0xce1427f1, 0x3b7f2149, 0x52808159, + 0xba9e9c3c, 0x09398be7, 0x0f9e7dad, 0xfb7261db, 0x9f1455d4, 0x7ac585d6, + 0xbe330e69, 0xae03682a, 0xa635b6f7, 0xff7578d2, 0xd9247fb6, 0xc5d257a7, + 0xaf6fec7e, 0x15fd144c, 0x527da850, 0x53074bba, 0x73fb44d0, 0x7afbe8af, + 0xdc4c57bd, 0x727f98ce, 0x44ec995b, 0x6f0a4c1c, 0x88fbc83d, 0xa38e56ed, + 0xc1025e12, 0x3e04f68f, 0x303ba9c7, 0xf50fc81f, 0xe12bc0b9, 0xfd899dfb, + 0xeff4f71c, 0xce74aab7, 0x0adce099, 0xf53be7a4, 0x0805517b, 0xd0c716c8, + 0x84be6373, 0x1ed25ff6, 0xcf82e11c, 0xad94135b, 0x92239370, 0xefcc49df, + 0x3a55c222, 0xd13613cd, 0x78ff4439, 0xd74c31b4, 0xf3c09d10, 0xb016741a, + 0xe969df7d, 0x3723f0bf, 0x1c24e5d3, 0x13a08014, 0x9e7027da, 0x78d4e09a, + 0xd54e091d, 0xd386901b, 0x81845755, 0xd3cdea17, 0x8f50611b, 0x12ebaf49, + 0xd436ea87, 0xa0399d85, 0xb8bf7f9f, 0x447672a5, 0xe94c0c9d, 0xf48aff50, + 0x29a5b9ff, 0x02d3f78b, 0x8eda8a32, 0xad2a5265, 0xa1f5e553, 0xc5e9684a, + 0x3f740f82, 0xef136ece, 0xce23db07, 0x8877541d, 0xd3ab5e76, 0xf59b20be, + 0x078b0e85, 0x49efb2e3, 0xa3370be1, 0xe33cf6be, 0xeb84994b, 0x7c1d31ea, + 0xfddb19b4, 0x8f284571, 0x64be6fee, 0x8e9adff5, 0xd1febdf3, 0x932727ca, + 0xf669ddbd, 0xe9dd9356, 0xf1cb3c0e, 0xeacd6fef, 0x83bd0896, 0xbe0cfeac, + 0x4f33177f, 0xcf8d99dd, 0xb7db7c52, 0x9ce9524f, 0x3fdccfb9, 0x6daee886, + 0xf642ccff, 0xc7df6ebc, 0x4a5ecf1c, 0x8e9ddff7, 0x6b6d2bf8, 0x33647be0, + 0x23df2b60, 0x82e3d42b, 0x93d84790, 0xdb795381, 0x10e4221b, 0x06fa1748, + 0xe4b1fefd, 0x7d75da9f, 0x2e79403d, 0xee3a7b96, 0xefe3471a, 0xa370f3d1, + 0x1c1c035f, 0x08df7c45, 0xe839726f, 0x154a826f, 0x7df0ace1, 0x445afddb, + 0xfd74c7fb, 0xcf9f4c7f, 0x4f5fe199, 0x38edaef4, 0x75a64967, 0xa18d0f9e, + 0xf98432bc, 0x1d8e33b8, 0x18dfd419, 0xfa53aa7d, 0xeebed42d, 0x415db022, + 0xa0a53779, 0xbf795efc, 0x7c0ae26d, 0x926507be, 0x19c27142, 0x31ee1f91, + 0xfb5146fb, 0x175fd386, 0x495b1d91, 0xbeffc242, 0x2c76bfde, 0x5ff10df1, + 0xb67a489e, 0x19aed81b, 0xf4893a7a, 0x224ffb14, 0xbd5097fc, 0x4ef2ed80, + 0xd602d74b, 0x20263dcb, 0xb3fc44bd, 0x9dfe203e, 0x39278fe4, 0xffb81f51, + 0x9df3d604, 0xe38d265d, 0xe3ebb458, 0x1b7e5eb9, 0x557677d5, 0xe9cf593a, + 0xf498be7c, 0xc7907c35, 0x278c0109, 0x8be049d1, 0xe5388fdc, 0x0dba664e, + 0x0dce797b, 0x5350dfba, 0xbb0eb8bc, 0x47e9472c, 0x75149f84, 0xfcf68fdd, + 0x3f2ddde2, 0xa44722cf, 0xeea709fb, 0x76143f1f, 0x5f741fff, 0x99ade1b5, + 0x1e299b8b, 0xf7e6477f, 0x90fdf407, 0x83938eb0, 0xf9087efa, 0xb8aa750d, + 0xa7cf4b4f, 0xedef9d61, 0xc82beb6a, 0x6d56951d, 0x4ce5443d, 0x4282a85f, + 0xbbcbd9c5, 0x9a85990e, 0x5afe1217, 0x4852de0f, 0xcefad4f7, 0xf5aefc88, + 0xffdffe9b, 0xe8f6d716, 0x1c7fe401, 0x61cb853f, 0x357c61fc, 0xdfc33c0a, + 0x1d8649f7, 0xf280b739, 0x7956de8f, 0xb2be8ea8, 0xf54d8116, 0x2deef48e, + 0x3aac2401, 0x20937b43, 0xe7e99b51, 0x37c4efb2, 0x7b96a419, 0xbce39d4e, + 0x15a2d5b9, 0x735a7e12, 0x838cd530, 0x99ba50d3, 0x856250e5, 0x9f80e7b8, + 0xb07d8ba5, 0x293c00bc, 0x3b2c5e71, 0xb7379483, 0xe3059aca, 0x58108b9f, + 0x8dec8b36, 0x10fa5fbe, 0xfe1a3fe8, 0xd61e7ca2, 0xbc510fab, 0xe1eb7e82, + 0x673b0f9f, 0x569e1137, 0x2bf04bb5, 0x17eafb5c, 0x3003dfe3, 0x691e91f6, + 0x147876db, 0x4bcd73ca, 0x0dd6edd1, 0x710f2bde, 0x39aeb9fe, 0xb3ff7cfa, + 0x196e3d74, 0x6e28e307, 0x7db13c41, 0x69d02b30, 0xcd6efc45, 0x38a69ff4, + 0xe09315f1, 0xd655da13, 0xdd6ed3cb, 0x7b0b94cf, 0xf8097fd4, 0x8ec14ede, + 0x1fba21d0, 0xdb39b333, 0x54cc734b, 0x6d99fbc4, 0x4067ecd9, 0xbe74ca09, + 0xe7f9aa5f, 0xd01d3c71, 0x8c3dd14e, 0x049dbad5, 0x7ed2fe27, 0xd5aebe8a, + 0x48f73c7a, 0x19ee9a30, 0x79a46c10, 0xf710ed56, 0x88eed67d, 0x4ebf2f7f, + 0xf3dd671f, 0xf6d30e27, 0xba284d5b, 0x9fce9d5d, 0xe7e8b6ba, 0x7b377dc6, + 0xac7fbe86, 0xdebeebdf, 0x347f07fb, 0x3de2f88b, 0x7de31c7d, 0x4dc08661, + 0xf247922d, 0x8394175d, 0x52d59b84, 0xb7c45920, 0x748158e0, 0x45e0603f, + 0xa0fa9fbf, 0x74079fce, 0xb0baf0bc, 0x528bcd7f, 0x1eddce90, 0xfe9a2a7c, + 0xe62b4287, 0x71621e11, 0xccd9bab5, 0x581aedf1, 0x36f8a16f, 0x066b5716, + 0x42d5b2f1, 0x4f162c7e, 0x1ae97eb5, 0xfcb88b74, 0xb5ee96ff, 0xfbef30e6, + 0xe485fdac, 0xadfd100d, 0x3ed0b5df, 0x10fd70e4, 0xe0635df2, 0xdfd75f44, + 0x19f99ebb, 0xc227fe3a, 0x556f9644, 0x41e675da, 0x6ef4f1d1, 0x018fd08b, + 0x1b4fec45, 0x3fed89f8, 0xe7c78f4f, 0x5e5c0f3f, 0x4c9cbb6a, 0x5d7dcdfb, + 0xa5c0c903, 0x1ffc8aa9, 0xec2373d5, 0x22199dce, 0xf9e4de5f, 0xd78a69e4, + 0x7b36efe7, 0xbad69ee9, 0xf91f66d1, 0xdfa375e9, 0xf08dc8ca, 0xdbd1df2b, + 0xd0fddfcf, 0x67da04c6, 0x25e48df8, 0xff6bebf5, 0x07aa41fe, 0x78ef259a, + 0x6bb87fec, 0x2f7477e0, 0x9f63c6bb, 0xedd5e34e, 0x13b85b9f, 0x4fb787eb, + 0x95e646f5, 0xfac55387, 0xb3368fe6, 0x6919ecdf, 0xed3575ff, 0x58db6a03, + 0x78de7b8f, 0xedf7c2cd, 0xc1e04a77, 0x0e7b0e89, 0x7e401abd, 0x613decf7, + 0xa2bc60a1, 0xfba584f5, 0x9703c4af, 0xf30add30, 0x0b56e93e, 0xf3dc2fdf, + 0x41ce85a9, 0x98fa5f6a, 0xb4d69ff7, 0xd6476c49, 0x550728bc, 0xfda1ebfc, + 0x47085baf, 0x6412cdb5, 0x37be4766, 0x77b27bf3, 0x59acff54, 0x9f034fd8, + 0x1a3c752b, 0xbaf034f8, 0x0f33b752, 0xe3c68e6c, 0x1a6da0c3, 0x6a1ffd89, + 0x63f7c15e, 0xdf1ada1e, 0x6af618ce, 0x688fe515, 0x1f3d57ff, 0x4191eedd, + 0x0ed8061c, 0xe7b3dac7, 0x00533b0d, 0x81c38405, 0x0ab1caf0, 0x13ebfee2, + 0x9c42c66b, 0xbae39873, 0xe6fc36df, 0xdbdaf8b5, 0xfe42d976, 0xcccb2eae, + 0xd65d4379, 0x9c489657, 0x3271d76c, 0x964bfdaf, 0x077b754f, 0x045cefdf, + 0xdfc475fe, 0x2776ed45, 0xddd5c1c5, 0xb4176f42, 0x8941835b, 0x9fb133e8, + 0x26a1045b, 0x01df7f92, 0xe0445df1, 0x21e3890d, 0x2ad8edd0, 0x74abdf9d, + 0x3cc2aefe, 0xf7dd146b, 0x47e8f3d0, 0xa61db7f2, 0xfab511ab, 0x0e4775f3, + 0x179f1325, 0x0b33b080, 0x18cec242, 0xc4fc32f2, 0x7fd87f70, 0x6d7bc91f, + 0x59ef95bb, 0xccedd42f, 0x1df166c2, 0xf7deac56, 0xfb8bb08d, 0xbd047bee, + 0xb6b17eb1, 0xabfdba35, 0x1cbe2219, 0xdfdae3d0, 0xbaabc8c5, 0x7093ec1f, + 0xecaa05bc, 0x2eaf720d, 0x2cefe685, 0xb31cf892, 0x12971d53, 0x51919eef, + 0xd78f4efe, 0xda62fa8d, 0x21f6c2df, 0x644756e7, 0x299a5e3e, 0x199ac7fc, + 0x1ff88072, 0x2e2cbf91, 0xbf9b8ece, 0xed819a7c, 0xe07acedf, 0xf99129a9, + 0x8f2db68b, 0xcf13f870, 0x7ee9aacf, 0xb0b35d4e, 0x38a5bd27, 0xe3c50a6e, + 0x5d6df1c0, 0x794835b3, 0x88e21d46, 0x9c22a3bf, 0x4bb67e90, 0x18270973, + 0xe3497fff, 0x3ea3a12f, 0x3692ff5c, 0xfc38c7f4, 0x192fca92, 0xc5724777, + 0x996f91ba, 0x2301f2f1, 0x22bda80f, 0x79e34de2, 0xf9cdd2ad, 0xb8bb6d40, + 0xf07adc5f, 0xa46c98ea, 0x7fff6fb7, 0xe581598c, 0xad0f9d38, 0x7473a1e5, + 0x9debe64f, 0xe571b8b6, 0x9a96dda0, 0xcd6a4f58, 0x771c19dd, 0xeef8c3ec, + 0xde1fcc46, 0x87f382fb, 0xf70983d6, 0xd2b95c73, 0x57f9d63f, 0x1b00d4e4, + 0x08dd3e39, 0xfc525c4d, 0xadcf1912, 0x377b8a72, 0x8efeeb0f, 0xae238fea, + 0x73b6c61f, 0x85d9e38a, 0xd259a6c0, 0xd8607b70, 0xef1d1a95, 0xdb6d276b, + 0xb1fb5b44, 0xae8d4e71, 0xb3c11847, 0x6f8d8b7f, 0xff75334a, 0xe1b4e3a6, + 0x578e44bd, 0x4ec88efb, 0xbe45d3da, 0x8a48d3fe, 0xcf4e30df, 0xf98fb389, + 0x1ecb8e85, 0xa1b4bcfd, 0x99be6654, 0x88d28866, 0x8c7f9087, 0x8e13be97, + 0x85fbc520, 0x21cf5e07, 0x81ddaff9, 0x0ef522ed, 0x7be7e7e5, 0x5f96414f, + 0x67cec84d, 0x57fbc632, 0x913ebc0e, 0xdef0d670, 0x2e427937, 0xee2cf357, + 0x9467d36b, 0x58f22492, 0xd8f22493, 0x32774a3d, 0xfb754fe5, 0xbde45f64, + 0xb7ce4373, 0x4501f8e8, 0x328bebe4, 0x86efd655, 0xd30b8176, 0xfce2517e, + 0x8d7ec4cb, 0xf61fe799, 0xf2f11cbe, 0x101afc57, 0x3afb285d, 0xaee33f73, + 0xe98984ee, 0x90313ba9, 0x03dfe911, 0xd9266e34, 0xc07586bd, 0x640ec476, + 0x77d21767, 0xf85f587b, 0x4bc70261, 0xac9e7387, 0x2395bb66, 0x47add903, + 0x21335bdf, 0x97bc3fd2, 0x8181ce21, 0x68a1e0f8, 0x7e62e7e5, 0x611b0f9d, + 0x0bef9ea9, 0xc461df1c, 0x47fe99a3, 0x49e4e332, 0x36ef1bd7, 0xed02b7ec, + 0xb59dd703, 0xaf9a3df2, 0x3ce2aff7, 0x27f8ae1c, 0xbf019d90, 0x1f2a06ff, + 0x026ab03d, 0xc0faff3d, 0xfef03723, 0xca31b4a5, 0x3e88057f, 0xa745c50f, + 0x963be833, 0xf9a7fd9a, 0x7ecd5ffe, 0xf54fd333, 0x58f5ff48, 0xef3fd8a6, + 0x7de048eb, 0x0472090a, 0x6a37200e, 0x6fad75dc, 0xaeb11c71, 0x0efa8e4d, + 0x45b7e8c1, 0x0369e71f, 0x63492107, 0xe516ef39, 0x98d7b6ba, 0x10e6b59e, + 0xd9a1b1cb, 0x14efde2c, 0xe297c625, 0x0d48463b, 0x69bbfd10, 0x6b9c5aff, + 0xb6057ef0, 0xc818fd64, 0xf7d2082f, 0x11e8c70b, 0x682075f2, 0xcadcf102, + 0x9d8dc1e7, 0x98fbf8e3, 0xdcd7ce81, 0x71c5fcf1, 0x5241073a, 0xfc8b668f, + 0x22fdf622, 0x3847d88f, 0xb1d8467a, 0x09fe65a3, 0x0059ecf1, 0x2dbe45ca, + 0x356efce9, 0x4f3bc557, 0xb78fa85b, 0x94702b23, 0x3bb3d3d6, 0x7ad3cf81, + 0xb45f625c, 0x4288e5a2, 0x6dac59df, 0xff91a695, 0x01ff9b58, 0xf581877f, + 0xe15bb612, 0x586e7c7d, 0x9e7bbcd3, 0x918e8716, 0x05bf811e, 0x91e7f896, + 0xec532bff, 0x6f049d37, 0x3d1f9eba, 0x4ef9c269, 0xe29d9b56, 0xfdf12a7b, + 0xfdbaade4, 0x99916dbd, 0xa09392e3, 0x83b9c59a, 0xac581f38, 0x755bd1db, + 0xbbec3cbb, 0x09e117de, 0xfd881f3a, 0xc3b0d7ae, 0x2fe3e877, 0x8dc78d05, + 0x0efb3efd, 0xc3bbbe3d, 0xa4fcfd17, 0x20f37f61, 0x086fec8f, 0x7bc901fd, + 0xfb024143, 0xc79385d5, 0xe80b8dc7, 0xff55677b, 0x434a99de, 0x1f050dee, + 0xda3abfb0, 0xbe55e671, 0x01267f37, 0x6b9ce272, 0x432bf90d, 0xf2176fdf, + 0x6a0bcfd6, 0x4346829c, 0xf33097ee, 0x3297dc89, 0xceb5fee4, 0x7df4ffff, + 0x22507c97, 0xcbb629f7, 0xcec9affe, 0x387ad8d4, 0xb015c69e, 0x8d75c2df, + 0xc635d7d1, 0x2e8fe11a, 0x1711588d, 0x4beb43bf, 0xefbb080d, 0xc0a3b2e6, + 0x13577aca, 0xb63bf892, 0x27c8b09a, 0x3e452a6b, 0xe22ad799, 0x4bb765ca, + 0xf3624d41, 0x33e88a75, 0x26d8b3f0, 0x9381b7fc, 0xf8e97e41, 0xcfe4f7a1, + 0x79fdd56f, 0x40268e2c, 0xe7da3cd7, 0xbc9353bd, 0x16307f74, 0x4f974b4f, + 0xf3cc8b79, 0x7883f0b5, 0x63ffefe3, 0xe3d4b471, 0xe749ed1f, 0x64d970bc, + 0xc168f71c, 0x37086367, 0x9bd0d7b5, 0x76af5d52, 0xc9470238, 0xd16bafdf, + 0x0a5bc1cf, 0x1f89bada, 0x5ef1c09d, 0xd36bab8f, 0xf3071106, 0x384d7839, + 0xabfbbf81, 0xf7f3b769, 0x0dad354f, 0x3f291389, 0x76bd976c, 0x9eb757ac, + 0x567e24a8, 0x197b8897, 0x8e7e96b5, 0xbfb76537, 0xe45be898, 0xff3a88ed, + 0x16bce836, 0xdaed63ce, 0xec3cfd42, 0x2cdecabf, 0x6f3c08f4, 0x63397238, + 0x2e754e22, 0x7cc55fcd, 0x16b7eb7d, 0x9bab263a, 0xba3cfaf8, 0xa3d0b50a, + 0xcd45bb72, 0xfdb44d1d, 0x62ffd06a, 0x57d853a6, 0xe38b3073, 0x77d749c8, + 0xdf61a41f, 0x371445db, 0x291c76f7, 0xbbe044b2, 0xe7da0367, 0x006bf238, + 0x0ab7ae93, 0x54b49297, 0x1e846f8f, 0x943fedd7, 0x3d06fb41, 0xa893bfa4, + 0x7e4c9d3c, 0xc9f766b1, 0x6714f1e4, 0x31a511ec, 0x9976a5de, 0x9dd281db, + 0x24524777, 0x7d304f7d, 0x1c624297, 0xdbbcee80, 0x6fbe4726, 0xffad7ffc, + 0xf1a67a8f, 0xfa512777, 0xb309f06f, 0x350efe76, 0xe7cac070, 0x124e74ea, + 0x59ea9f79, 0x6237d71d, 0x3a7a4372, 0xc785ce83, 0xc0a62851, 0x205754bd, + 0x39d2a4ac, 0xf716586d, 0x7ed8b2cc, 0xbfe7d74f, 0xd0770951, 0xfa19d47d, + 0xe84ce2b9, 0xa07376e2, 0x9c0d4b9f, 0x396d1dfc, 0xb52cb978, 0x9a521785, + 0xe2142937, 0x19c244ef, 0x4d82eb8a, 0x8e375eff, 0xa6f887bc, 0x1f8305c0, + 0x893f9d32, 0xebb17bfb, 0x8f58c579, 0x850eec26, 0xb50f7412, 0xde7c4214, + 0xeb74137d, 0xd7f1dee7, 0x34f30b31, 0x09baef3a, 0xf9912775, 0xb3f6e411, + 0xbc723d69, 0x642f74f5, 0x93a54331, 0x19c293e8, 0xd7ed6fa6, 0xba3e8ebf, + 0xc4fb4895, 0xfef7f40f, 0xbce864a8, 0xf6fedbd0, 0x566f7487, 0x57be34d2, + 0x8eefa5eb, 0x2b092f29, 0x2c76833d, 0xb3cda007, 0xdfc92f72, 0xfc012ef8, + 0x6229f7c0, 0xe5a04bbf, 0xba18cc5e, 0x37dc65a7, 0xaa5c11dd, 0xb0b7bfd2, + 0x7fe36ddc, 0x36d8a59f, 0x0fed2a66, 0xdfe69a3e, 0x567c7a4b, 0x83cf1e6a, + 0x1c69c128, 0xb2b8ea77, 0xeb4a5683, 0xbbe33497, 0x0cbc6008, 0x019ef77e, + 0xdd8a7dfc, 0x791bbe2a, 0x4b687112, 0x74abf465, 0xaf1e17df, 0xddbe2950, + 0x2979b2e4, 0xbd12b37e, 0x1b7a21f6, 0x83dee26d, 0x962b7f71, 0x83c88d8f, + 0xaf3fd62e, 0x98e2e38d, 0xb7ee59ef, 0x5f10cff9, 0x9e5497be, 0xe16ef149, + 0x8a1ed9ae, 0xeff51bbf, 0x00a51a62, 0xcb80e1db, 0x821dee24, 0xa371c9d6, + 0x116ea2c3, 0xbfdf25f1, 0x1cab701b, 0xda4a1e5f, 0xeb113894, 0xbe242b8d, + 0xae98d4ef, 0xd09764a6, 0xc81976bd, 0x567637ae, 0xa05f9274, 0x37af14fe, + 0xd51a7cba, 0xf7c0e903, 0xb3ff88ef, 0x869bfe0d, 0xefd21ff8, 0x5edb14e1, + 0xeefb4d1d, 0x4150dc53, 0xb584a6fd, 0xe30bc4f1, 0xc7940ffb, 0x531e489f, + 0xa1f7d1c2, 0xfdf27140, 0x081e4307, 0x53b50610, 0x1f21b397, 0xbaddf1a7, + 0xb77d44a6, 0xc9edc86e, 0x331f2144, 0xc71944dd, 0x371a557d, 0xff062e56, + 0x62670fff, 0x48106171, 0x00004810 +}; + +static const u32 xsem_int_table_data_e1[] = { + 0x00088b1f, 0x00000000, 0x2bdbff00, 0xa3f0c0cd, 0xa4f5811e, 0x798a1818, + 0x8968c550, 0x1819393b, 0x0331036e, 0x00430317, 0x2064ded0, 0x6bc4029d, + 0x101d7881, 0x3033708b, 0x08710304, 0xf9033710, 0xf36e685e, 0xf0606265, + 0x2040e207, 0xafe2060e, 0x31bea340, 0xae7f6f10, 0x43169010, 0x19c4cdf0, + 0xe9245c18, 0x86c1ffe7, 0x6be855f3, 0x7da023df, 0x7c1175db, 0x877b2029, + 0x9d9aaa2e, 0xd8cdf8ba, 0x1bbf2685, 0x8f07bf8d, 0xa816a9fe, 0xa886c7fc, + 0x0cc6abfc, 0x0896a20c, 0xfc4313fe, 0x2ec7416e, 0x40aebd40, 0xdea6000c, + 0x03683d03, 0x00000368 +}; + +static const u32 xsem_pram_data_e1[] = { + 0x00088b1f, 0x00000000, 0x7de5ff00, 0xd5547c09, 0x73b9f8b9, 0x2cc99997, + 0x6cac8499, 0x1689b0de, 0x1a424270, 0x8b61db10, 0x5c18a3e8, 0x84c0b82a, + 0x01327b25, 0xf69e0fa9, 0x69b08197, 0x6b1b6351, 0x304ed1b0, 0xa0d06828, + 0x1c048201, 0x69f42d40, 0xb15a7d0d, 0xb22834b6, 0x0dc06486, 0xcefab3df, + 0x93739df7, 0x82266f7b, 0xd7ff7f6d, 0xcfe3fef7, 0xb3dce1df, 0xbef9db7f, + 0x44e77cef, 0xf4896252, 0x81be4243, 0x16ad4d1f, 0x9eb8c842, 0x9e6a9094, + 0x2eb92856, 0xfa6e0242, 0xca424ccf, 0x65684a5c, 0xb653211a, 0x261fe1cb, + 0x10bd7cd0, 0x65bcd2b2, 0x3bcb1daf, 0xec3e58eb, 0x96847c52, 0x79a06b9f, + 0xb6b7b681, 0x2d2d7c3d, 0xc9176c8f, 0x6476e846, 0x1124858c, 0xd846c272, + 0xb3e6932f, 0xb3b7c908, 0xbefd596c, 0xb0bed0b9, 0xb4ec4ac5, 0x055db2bf, + 0xf9a5af33, 0x81328382, 0x569b652a, 0xbe69fd28, 0x41342428, 0x9b326bbe, + 0x1887705f, 0x77eb44da, 0x6e92dbb9, 0xa6721273, 0x855446d2, 0x5b572a90, + 0x08a3add2, 0xcb6d0e29, 0x8dc57681, 0x3a961782, 0x37a6fb65, 0x5b5d6152, + 0x2555af04, 0x83b364a4, 0x1cd923a8, 0x9fffa1be, 0x3fc31668, 0xe84be5a4, + 0xb7ed093a, 0x10e75480, 0x547fc611, 0xf03d5d51, 0xc1e9533b, 0xd97cb471, + 0x6d0e3a16, 0xe082fe57, 0x5b962585, 0x8e89bf88, 0x3ecbb9df, 0xac2769fb, + 0xc232856f, 0xab5aeb05, 0x5082bd40, 0x0abb0ede, 0x7257abf3, 0x5d717968, + 0xaa3f92bd, 0xcd92bfa7, 0xaaf38cfd, 0xd7ec9a1d, 0x33d39b95, 0x23a88495, + 0x84c5f27a, 0xbf689af8, 0xb3290a44, 0xff7cf746, 0x9211c488, 0x448bfd08, + 0x4ff4f5b5, 0x83df8921, 0x527fd2ef, 0xb8f70578, 0xde1aae10, 0xbfe87896, + 0x5dbc1ed5, 0x4a3c70f0, 0xff7d2c91, 0xe030fa5a, 0x1aa7ce81, 0xf5d344e0, + 0x89ee7e7c, 0xfb449264, 0x4788fb77, 0x47af7d20, 0x9265ab4b, 0x0b58e847, + 0xd27da383, 0xc8579a78, 0xe425e262, 0x7cb2abe7, 0x21fe6953, 0xf30b9fe2, + 0x0bf8255e, 0x34844f01, 0xaefd00a5, 0x586cc811, 0xd2618fff, 0x2a4d7cb4, + 0xf70a4fa5, 0x4f5969ea, 0x7b9f028b, 0x9ff3e402, 0xfb0d3079, 0x647ec029, + 0x4bd0cfda, 0xc9c9e3f7, 0xc9e3f436, 0xa9fad429, 0x97ec7ec0, 0xce754fd7, + 0x727ce304, 0x967eb58a, 0xcbae3f63, 0xfae7975b, 0x5cf9c689, 0xc4fd8a5f, + 0x3f12f54d, 0xf46a2fad, 0x227cda40, 0xc636772d, 0xe8907d8d, 0x6af262e9, + 0xe5177fe0, 0xc45d3d12, 0xe818c766, 0x6f17ce30, 0x3c9ed3c8, 0xf3c7be27, + 0x9c709074, 0xfd2be382, 0x930b9415, 0x7f30dbfa, 0xca277f6f, 0xf8277b85, + 0x79d0f4af, 0x9524d8c0, 0x35ff15e6, 0x4d74289e, 0x149029e7, 0xa40b5548, + 0x32b5f2e6, 0x01e4c383, 0x46388d5f, 0x912c07db, 0x5f347111, 0x35fa4c27, + 0xb11365c0, 0x44627c20, 0x62f50152, 0xd3e504ac, 0xa7acb4da, 0xad383a83, + 0x2ff1441b, 0x4ebbf4f4, 0x7d00a7f6, 0x05b7216d, 0x0cd6de81, 0x4fe9eba2, + 0x5bc173c8, 0xb68941c3, 0x029f941f, 0x942ab4f0, 0x2be3f5bf, 0x3851fc74, + 0xee308bfe, 0x5c7f1876, 0x43adf1ef, 0xdbe30db2, 0xc61a1706, 0x7c7429b7, + 0xc8bbef4a, 0x0a7c7cdd, 0xbc8409bf, 0xc70bbc12, 0xc42e0eb7, 0xa42ad7f1, + 0x4c7e30d0, 0xc2aff8f7, 0xb5f7afb8, 0x8c1321fe, 0x6c5c1feb, 0xd6c2bf5c, + 0xe22c887f, 0xfae0c7e3, 0xc85c1b7f, 0x98b83fd6, 0xfacadfad, 0xdddf1eed, + 0x61b7ff0d, 0x5afb77dc, 0xc689d0ff, 0x6a515ff5, 0x8d95bf5c, 0xe3293eff, + 0xfc713be3, 0xd94b063f, 0xc528affa, 0xdfab15f1, 0x0ca4740b, 0xd108a988, + 0xca40c9f1, 0xa328c910, 0x8c8e987c, 0xafb68427, 0x0e104321, 0xba30c6f7, + 0xd2863cfb, 0xde47b39b, 0x28e51091, 0x39cacf2a, 0x4e3497cd, 0x62ce4052, + 0x8b7b9539, 0xb61754f8, 0x90dfb888, 0x38686b1a, 0x8b676f9d, 0xc2fc8418, + 0x2242eb9a, 0x5e6477ee, 0x4893b42e, 0xfc7fbe18, 0xfa8de8d8, 0x45d39975, + 0x7689f2d5, 0xf9b11f03, 0x91932704, 0xd37e7415, 0xf5c60880, 0x39504fe4, + 0xfcfca84a, 0x4851ca90, 0x3c74ca4f, 0x9538fdfa, 0xf3d144b3, 0x8fb60acd, + 0x233bc907, 0xb04e4093, 0xc18909df, 0x2152c4fb, 0xfcfff004, 0xc80ac5d1, + 0x0ed545a7, 0x799ef40a, 0x229e3804, 0x8da1acbb, 0x0553c202, 0xac8edcf8, + 0x299fc848, 0x6829535a, 0x19fb6a0b, 0x4245ddda, 0xfd6853ab, 0x06f3eb05, + 0xeffae879, 0x2b1d6d9c, 0x7c41fec2, 0xc7c82c03, 0x9b258064, 0x8fcdd990, + 0xe66803ca, 0x87f2d9f6, 0x73f6baed, 0x9dfcc6fc, 0xa77cc685, 0xa02d921c, + 0xa409146f, 0x777bf69e, 0x1b5cb185, 0x67884e27, 0xfde3e578, 0xf7cd8938, + 0xc2c7486e, 0x75e20f67, 0xd5b587ae, 0x4fb813e6, 0x2fdc6126, 0xe20913db, + 0xf9eb113f, 0xe6dd6c3d, 0x6d95cef9, 0x9f3a5cbe, 0x8445cbb9, 0xedfe79a7, + 0xcb3e1d7b, 0x7ed69a18, 0x9a090322, 0xff9e63d7, 0xf5e665bc, 0xcb0f5078, + 0x33bf9a0b, 0x53d3313a, 0xbf5265a0, 0x657abae3, 0x3bf4374d, 0x92afa3ae, + 0xf90cb3cd, 0x431cd0a2, 0x3cda82fd, 0xeaa2f943, 0x82f94322, 0xf90d8b75, + 0x4372e0bc, 0x56cb79fd, 0xaeefca18, 0x7e50c078, 0x86a3e167, 0x06ff1cfc, + 0x67dbfd43, 0x2dca1bd7, 0x09baaf7b, 0x5deaa8f8, 0xf1bec091, 0xc3c4f399, + 0xe67e0fa0, 0x8f80bc94, 0xc8299553, 0x552a6707, 0x325b3b4c, 0x07267e6c, + 0x59c541f3, 0xb829a2b4, 0x65c8226e, 0x68b3f282, 0x70608ec5, 0x056ed520, + 0xd627e115, 0x494c242a, 0xddf12058, 0x75111c74, 0x2897ede5, 0x9e8ca5af, + 0x6c5cbbd1, 0xb03dfe8f, 0x900aef31, 0x03c97d3b, 0xfb001bfa, 0xdfdf175c, + 0x02a5e5cd, 0x277fd5c9, 0xf9f22564, 0x4b672e45, 0x4a0f2615, 0x4c9d4a5f, + 0x8f0f90dc, 0xf1b6f8a8, 0x4150289a, 0x9e76824e, 0xb940f408, 0x432f40c0, + 0xb1ddfc0d, 0x9579c44f, 0x0f184c83, 0xbd772722, 0x7c267200, 0xa32df060, + 0x87be1e61, 0x96bbe004, 0x3bd7dc44, 0x3bf7a72a, 0x727e012e, 0x39553d31, + 0x9513d31b, 0x578f4c7e, 0x61fa6216, 0xeda60565, 0x3d30cb95, 0xf4c4195a, + 0x30eb954f, 0x356563fd, 0x6b2a47a6, 0x6543fd31, 0x4aced308, 0x3f1aa61f, + 0x04dfcb74, 0xbb72afae, 0x983cee82, 0xb2d7c0bf, 0x436dd68a, 0x00a6f73e, + 0x7e705f9f, 0xf1f4023e, 0x04ac470b, 0xe0befdf4, 0xbeb7a665, 0x7d43e8f1, + 0xf1443f25, 0xdcbbd19f, 0x64f0c31e, 0x84e990b7, 0x8607a3ca, 0x3f9de33f, + 0x9012f30a, 0xbc90dd0c, 0xfa515cb3, 0x5f10461d, 0xf113c297, 0x4cdcc645, + 0x89e271f1, 0x7e82caff, 0x2ffdf22f, 0xfb8880e6, 0xed3f0930, 0xe0e97c05, + 0x645afb86, 0x97f7973b, 0x6eb9df80, 0x260db5f8, 0x78209d34, 0x342efe90, + 0x7004895b, 0x2884756c, 0x070b93f1, 0x3f03769f, 0x78b1492e, 0x8381478e, + 0xa5359696, 0xfdfa9c79, 0xbf98c5a7, 0x6f4c2d50, 0xc6ac7942, 0xe81a3ade, + 0x3e39e3ca, 0x829ff00c, 0x92cfd6a9, 0x9c73c514, 0xcd99ebf2, 0xfed96343, + 0x60fb621d, 0x2bd21c63, 0xfeb10bb5, 0x7d3e7a3f, 0x87cda3f5, 0x91f26690, + 0x2d01e40d, 0x7b697a1b, 0xa5de17a7, 0xc05c954f, 0x39fcab57, 0xf4310be8, + 0x40866fff, 0xb5e612bf, 0x624d037e, 0x7c0d7ad0, 0x478c346f, 0xcd9aa9db, + 0xa6faed0d, 0xd09c895b, 0x2bca8ae8, 0xb4658c05, 0xe31eed13, 0xc86712be, + 0x3d525a07, 0xfe067d86, 0x0a9ff941, 0xa6e8094a, 0x97515394, 0xd0275ce4, + 0xf9031df9, 0x1012f149, 0x5b32bd58, 0x9157e2bb, 0xcf40db1c, 0xd1ad9f98, + 0x07fb7a9d, 0xfe9fde54, 0x083c9977, 0x59d15fe5, 0x47f4f565, 0xa1620877, + 0x373c05f9, 0x0664b9bf, 0x16d3bdc8, 0x242fcfb6, 0x7a306eb9, 0x1675490a, + 0x88e739e8, 0xffd03a65, 0x777bf239, 0xf0dece86, 0xe75c145a, 0x7dc67582, + 0x8667ea96, 0x31ad417c, 0x4e6e4f9f, 0xafcf7a02, 0x00484991, 0xab9634be, + 0x5bf60f16, 0x80d62a40, 0xedc55fdc, 0x221ef995, 0x2bf3a00d, 0x5664f9db, + 0xf7c79d1e, 0xd74f4c2d, 0x78a2f7ec, 0xa6e2ff36, 0xcb47c57a, 0xf8ce6a3f, + 0xda04b5f1, 0x1f80d687, 0xf05db823, 0xe37b526e, 0xdfcebbef, 0x3f6d5f3c, + 0xe047e5e9, 0x2cdb28f3, 0xf65142f8, 0x81166993, 0x4c415beb, 0xeb75836f, + 0x0e3cd6f4, 0x665f2d07, 0xe5372fca, 0x4b7a66ff, 0x3b7a0620, 0x2cf3f826, + 0x40be8c89, 0x88a4105f, 0xfa7bffe2, 0x7fd5e94f, 0xffb43fd9, 0x2cffb481, + 0xffcbff43, 0xeb0ffda1, 0xd1d5ff35, 0xb9db2ffa, 0xca904775, 0x1f17e29b, + 0x0fba1373, 0x93aa969d, 0xa5ff14bc, 0x81bb569b, 0x41494e0e, 0xe9f3d037, + 0x143d3890, 0x0ddf6ec5, 0x447e80f4, 0xbb00539f, 0xfb49fe0a, 0xcfdcf33f, + 0xf33ec266, 0x83d926f9, 0x6b66d2f6, 0xb5f94ad8, 0x0668b9bc, 0x63f98319, + 0xbcf6bf2c, 0x2316f908, 0xfb3f167d, 0xdff81258, 0x7b70a528, 0x52fa8c22, + 0x39c7c379, 0x48050fb0, 0xdcccf904, 0x18bfc60e, 0x4f31f28f, 0x4e5ded89, + 0x7e7a89e7, 0xd025c380, 0x22f3b3fc, 0x3b493ef8, 0xea9a83f3, 0xa7fd7217, + 0x384ae2d1, 0xf2274d41, 0x907df27d, 0x483c1a97, 0x553fe988, 0x731f1e5b, + 0xa3a7ce8c, 0x82dddfe1, 0x9f1a4e0e, 0xf05a685d, 0xbed457eb, 0xb72771e5, + 0x85da7af3, 0xc2da9db0, 0x9656b6f5, 0x3761ca96, 0xf5a5c5e8, 0x3f4837b2, + 0xfa7d6e97, 0x4ec02799, 0x1deadf7d, 0xd92ffb4e, 0x261ffafa, 0x36c97cd0, + 0x5b066139, 0xea485386, 0xfe804bc1, 0x0f6c6cbf, 0x7e5f8a1e, 0xb347515d, + 0xf7c7f7ef, 0xdb64a3e0, 0xee8c853e, 0x4d298f0d, 0x677694fb, 0x1d34bc14, + 0xaafd01cb, 0x0a17cb6a, 0xf7a793d8, 0x2d39240a, 0x5feb3c0a, 0xe0013d47, + 0x78e47884, 0xa99bc6ea, 0x05e2807e, 0x2786b9e4, 0x5cc3f973, 0xea7f40fe, + 0x17e7a428, 0xf2bf015e, 0x585ead1f, 0xf70be17f, 0x271d61b8, 0xd7460aa5, + 0xf24eae4f, 0xe50b71d1, 0x53079260, 0xa9f0bdf6, 0x15bd209f, 0x1249fe1c, + 0xa97d07b3, 0x829bdc16, 0x45beb0a9, 0xfae1b775, 0xe91f89f2, 0x3149f0ae, + 0x67e3e417, 0x2dbe9912, 0x8ba45f0a, 0x6e4e2f8c, 0x5d170aa4, 0x4bb049df, + 0x5eff9e40, 0x7f426d0c, 0xfc0262c8, 0x3fcd13ff, 0xfe60964e, 0x93c31b33, + 0xbe70b44d, 0x9e9edaa2, 0xb6d61b5e, 0x0cce7e01, 0x1f8325f2, 0x20a4402d, + 0x0df08787, 0x3c3c57ed, 0x87e1992d, 0x6f1652a8, 0x2980f547, 0xb7ea1df0, + 0x18fb3ec9, 0x4df23b43, 0x4bf8cf5a, 0xde74f8f9, 0x9f7fb031, 0x4d85224c, + 0xb777d651, 0xdd3df1a8, 0xa5f475c7, 0xefc66fe3, 0xfe300f0d, 0x343df8d6, + 0x7f943a6b, 0x1fe30efa, 0x23fb0768, 0x1938579d, 0x2addf7cb, 0x92b03ca0, + 0x6ebe3470, 0x1b5f3990, 0xa13a35cb, 0x588496f3, 0xff40bd1d, 0xf47f08f1, + 0xd0d7e59f, 0x19793a76, 0xbddcf180, 0xb6f8d3fb, 0x28fff380, 0xa4ffc8d1, + 0xdf7df18e, 0xf71055fa, 0xf43952b9, 0xafc013cc, 0x2a833f94, 0x0b9cabf0, + 0x78db3eeb, 0x50770fe0, 0xa4db3d3e, 0x7e51a9f1, 0xf0b4f99a, 0xd0024da5, + 0xcf4f99a7, 0x246d5216, 0xefd29f1a, 0xb0b4f951, 0xfca9fffd, 0xab77e0d4, + 0x3c9a7e09, 0x668e0bec, 0xa2de7879, 0xf2cd3c22, 0x21defe90, 0x4fe9bd59, + 0xde8d3ba3, 0xbb2f9f8a, 0x1a05fd02, 0xd7746a5d, 0xdd1a974d, 0x18bff2f5, + 0x1f2e67e0, 0xe940b40c, 0x8c977724, 0x2b695576, 0xeda30f3b, 0x899018de, + 0x36e1f270, 0x18dfaa46, 0x87cfa090, 0x5326f94c, 0x9f299f7d, 0x37efaa6b, + 0xf50c2be5, 0x280e5b4b, 0x361ff104, 0x7b2eb3d4, 0xc5147c82, 0x9bf6d21e, + 0x2579f340, 0x30317408, 0x93bc80a2, 0x0ba09257, 0x447b83fc, 0x28bb17b4, + 0x71d0d78c, 0x42d31aba, 0x56372a41, 0x1e1d99db, 0x80d65449, 0x44f2eb9c, + 0xb790f1dc, 0x2bb7fd33, 0xd38ee237, 0x5ac791e9, 0xedd39445, 0x9a3d3221, + 0x20ee83df, 0xd276e788, 0x77f33957, 0x839d134e, 0x59fd8197, 0xa4c17a2d, + 0x76e2b85d, 0xba46b837, 0x34de875a, 0x745f7e9b, 0x9463c448, 0x18f718ae, + 0xfa091798, 0xfd9d54a4, 0x7f048a70, 0x97fc1139, 0x588eccad, 0x7fa4deb8, + 0x3f48f590, 0x0aa5cef9, 0xf7aa4fc8, 0xdff4687f, 0xe6283e32, 0x19d615fd, + 0x70f6b5cb, 0x5cf60582, 0xdcb18371, 0x9da1edcf, 0x9e7017c0, 0x51d24e92, + 0x03a180ae, 0xc39738f6, 0x3751c4d3, 0xeff0a6cd, 0x3812283a, 0x2ad0bcbf, + 0x342ffc22, 0x124af3b2, 0x2afe444c, 0x7f941127, 0x803a9c1a, 0xe5be947f, + 0x3ff6c753, 0x7407dd67, 0x3183e3b2, 0xc769a2bf, 0xec47f78e, 0xf7cefc86, + 0x7a407f06, 0xd7b29fd7, 0xaee27e8e, 0xefa42ebd, 0x0d6f3dae, 0xbbf20fbe, + 0xeb9fe8ac, 0x18c5fbda, 0x95aeb7a0, 0x6f9042d6, 0xfe28835d, 0xf3d81f41, + 0xdc7698c5, 0xde21574f, 0xa615143e, 0xd7feb50f, 0x52012151, 0x13d02aba, + 0x7f903af6, 0xd1d8af02, 0xe7b5d09f, 0xf3bf2c8b, 0x729eb71f, 0xe5d37e7e, + 0x825fb322, 0xbf31c5f9, 0xf8f76077, 0xf9c057a7, 0x653ef373, 0xf29f2d01, + 0x80c75fea, 0x897aecdc, 0x729d3fe9, 0x3e7053fb, 0xbe3c4e71, 0xee70a642, + 0x4fea2604, 0xf0d203c8, 0xbd27c0c9, 0xf457f2e1, 0x3c2e5c93, 0x0b7fe924, + 0x931f043c, 0x4d90ae6f, 0x797f7580, 0x039003f4, 0x9748ad7b, 0x36cf7ada, + 0xe4fd40ad, 0xfa1eeb52, 0x42dd6e7f, 0x3dd672f8, 0x87fe6259, 0x1f75d67f, + 0xa79c5514, 0xd37a0f99, 0x317b9ef9, 0xc5e5d5bf, 0xbd265ef9, 0x86bfffcf, + 0xde2897f7, 0xf75e97dd, 0x78b5ff8a, 0xe397343f, 0xfbe703dd, 0x8aff5781, + 0x72aefbf3, 0x1c9ffeae, 0x5fad7def, 0x637fe3d3, 0xa749df51, 0x6a93a7f5, + 0x37162827, 0x943fed94, 0x337f4b4e, 0xcc1c40f0, 0xbce9b277, 0x2f7f4b46, + 0xb2693b31, 0x8ffb4160, 0xfedc09c4, 0x00d37663, 0x580c3fae, 0xc87a8f9a, + 0x310f8180, 0x6b5241bd, 0x37f1bce0, 0x31781783, 0x3d8c8276, 0xe7bc87e2, + 0xda379e3a, 0x8812bf8f, 0x07428e0f, 0x8397fe0c, 0x1c0ec7a0, 0x4b9ea228, + 0x5f6fd453, 0xdf674f73, 0x9d83154b, 0xb46a8373, 0x8c12727b, 0xde54d1f6, + 0xe6c234df, 0x8429cd3f, 0x930e1442, 0x0122fd07, 0x8793a1fc, 0xf9a044cb, + 0x055fe21c, 0xa754c4f6, 0xe017bfb1, 0x0f5c66cc, 0x173a071c, 0xd317404b, + 0x07ed0f41, 0x7e59d3f5, 0xf3c25060, 0x5e87ae1c, 0x82962eaf, 0x60653f34, + 0x2df004ba, 0x08dcb5b0, 0x579b75fe, 0xd95c79c0, 0x64394161, 0x7e9014cb, + 0x984ad646, 0x8cf16c3f, 0xbcccfc03, 0xe5d9e776, 0x3eb1fc04, 0xe4d3c585, + 0x57fabf32, 0x11337cdf, 0xdc38d0e2, 0x3fffe80b, 0x1d71ff02, 0x3850c709, + 0x3048922d, 0xa9fc1e36, 0xe0d0f902, 0xe1e6354f, 0x9ea483f7, 0xbf552e7e, + 0x47fdfa2f, 0xbf293ba7, 0xbe61487c, 0x3861d20b, 0xd7b7a4bc, 0xe0cadfbe, + 0x84937815, 0x7af3b086, 0xfe775731, 0xfe664934, 0x7a7f9ddd, 0xa5ec0329, + 0x62a35d49, 0x430f1f19, 0xf5c034bd, 0x8d440bd2, 0x8f813af5, 0xb9e2c687, + 0x15d141da, 0x0b6d5e2d, 0x879ee3b7, 0x769a05b8, 0x116a9035, 0x411204ec, + 0xc1b060ff, 0x89453646, 0x6b25189b, 0x378e0ffe, 0xc0b313fa, 0x5fc6cfcf, + 0xeac69b44, 0xe331d6f1, 0x37a634b4, 0xa1f7e01e, 0xefe39cee, 0x8dd82f85, + 0xf62ddf00, 0x28dc9cf6, 0x9903fefc, 0xfdccfbf1, 0xed5fa25f, 0x0b7ad6ea, + 0x0dd5efd0, 0x5db9c316, 0xfef5cc96, 0xcc2c64b1, 0xbb7ee66b, 0x72f0132b, + 0x9c42f450, 0xbcf5a060, 0xde728fe2, 0xf4278664, 0xa5da7e0f, 0xb6f107b2, + 0x005a6e5b, 0xce7ddd70, 0xdb3ec046, 0x449754a5, 0x8509e79b, 0x691173cd, + 0xda4c67ba, 0x277c1f3f, 0x93c33975, 0x2069cec1, 0xd3369edc, 0xbe3a411f, + 0x408499b0, 0x045d838e, 0x2342e172, 0x82847dc1, 0xefb021e4, 0x50ffbf28, + 0xb2b81fef, 0xb0f3db65, 0x0ab794ff, 0x975d701e, 0xf80aed4b, 0x712d02ff, + 0x74fbc822, 0xf4a38b55, 0xc755be8c, 0x09654b17, 0xc2607be1, 0xdc613bee, + 0x02143a4f, 0xb5efa1fb, 0x8bf61b88, 0x90335a4f, 0xd75afa0f, 0xc6e495cb, + 0xc3f412a9, 0x1e99a1e4, 0x18c63546, 0xfe8ad7f2, 0x335fc0fe, 0xbd4bedad, + 0xc497f051, 0xf2d977f1, 0x99fff42d, 0x93477b7c, 0x57317e6f, 0x7b4747c7, + 0x68e4b7cb, 0xa0896df2, 0x97dc0326, 0x0c9a19ec, 0x48725d78, 0xdf268c4e, + 0xf3b256b6, 0xfc7917b3, 0x9533576b, 0xe4e8d76f, 0x6f95335b, 0x0e0ce251, + 0x0b7cae5e, 0xdff0cffd, 0x516f9056, 0x8701fbd6, 0xc6df269f, 0xf9431eb4, + 0x62d9a636, 0xfdfd1388, 0x909be525, 0x61e82b78, 0x23af6507, 0xe56cfd0a, + 0x3c8bdf7a, 0x01c60dde, 0x7ca71739, 0xe1773937, 0xffdce572, 0x39359c10, + 0xc13b64b7, 0x74ded9f8, 0x92dce4c8, 0x09ce545d, 0xce4c8f40, 0x9843d92d, + 0xdf24c7ff, 0x6f92f646, 0x8797eb04, 0x4b40fb59, 0xd177e3da, 0x64fac6fe, + 0x1fd68daf, 0xc6ef23db, 0x9c5de5e9, 0x3bbc87d2, 0x6ef27978, 0x5477973b, + 0xf9010d8e, 0x6f0fa66a, 0x78ce31ab, 0x8d93f8f7, 0xbcbf032f, 0xd639e225, + 0x773b0b61, 0x93f8ddf8, 0x855f4099, 0xc78a1f30, 0xbfa30a89, 0xf620cace, + 0xb635e53f, 0x8b2732be, 0x666f2e3f, 0xa37961fa, 0x3fe95210, 0xa97c2673, + 0xf68bfcc0, 0xe6992408, 0x7d595967, 0x0e76acf2, 0xeba46643, 0x766161e8, + 0x178ffa09, 0xfe06c44a, 0xce6712e1, 0x4b7fd069, 0xb93f99b2, 0x3a2f7f84, + 0xfc06bed4, 0x041b45aa, 0xe2d3873c, 0xd1f8b526, 0xadf1e75e, 0x688fd02b, + 0xc99f973e, 0x3e6671e3, 0xa3ea842f, 0x6c9415c4, 0x7211c536, 0xb6259e7a, + 0xdbc8bc23, 0x145377a2, 0x75ead1fe, 0x8720e9c3, 0xfb888353, 0x289c3769, + 0xdeb4d4dc, 0x9e98a270, 0x03d49e91, 0xe8b7a297, 0x5efb337a, 0xf33706af, + 0x693f35ba, 0x2fa7ef09, 0xee706838, 0x770e7eb5, 0x9ca0176a, 0x9e63c334, + 0xcd3fedd2, 0x4a17f880, 0x82672837, 0x6e3115bf, 0x70d27722, 0x458a3dc3, + 0xaa327e9c, 0x63814d27, 0xaf1059f2, 0x6bf3cb4c, 0x4a91bf17, 0x88ee31e1, + 0xd3b6163a, 0xfd58276b, 0xc5b7be70, 0xa839411e, 0x4e2ee1d1, 0xfde0bf87, + 0x315feeec, 0x16c9ed19, 0x487a03c1, 0xb8476c20, 0xe15c2806, 0x62404b5e, + 0x7a500df8, 0xb03bfe04, 0xc70673e1, 0x7e0a823d, 0xbf6d1c84, 0xfad0bc02, + 0x2f0cad19, 0x78809081, 0xf41124c9, 0x0ad797eb, 0xafc030de, 0xa7e11ea5, + 0x73fa67c9, 0xa3a4f1ea, 0xfd1a295f, 0x7edd2562, 0xcdebc259, 0x01ff56b4, + 0xb3e679e8, 0x7047a932, 0x8dbeffd3, 0x5f112f9e, 0x4ed3c662, 0x00adaf0e, + 0x2dc0274f, 0xf0aef4c2, 0x46cf7897, 0x41480f2b, 0x3ca73c03, 0xe15bf171, + 0x17834e35, 0xb7c831d0, 0xf2113cd6, 0xe9022df9, 0xbd7bd697, 0xe7a6ce70, + 0xc73da2f7, 0x0a4fff58, 0xdd65125e, 0x7dd74d97, 0xa52173d0, 0xf7cbf05b, + 0x3866d745, 0x39f852ed, 0xdfe7a719, 0x666f23d9, 0x11ef3d00, 0x6b49cf90, + 0xecbce19c, 0x11e9857d, 0xee94ec5b, 0x8723bae9, 0xb546ef64, 0x2df83cb7, + 0x0fd82f87, 0x574c7bfa, 0x0e2042c1, 0xe30db371, 0x431e70c8, 0x97aa7e98, + 0x24ed5bcf, 0xbeccd6f1, 0xfbc23ffb, 0xd23f4bef, 0x3c61a3f2, 0xa16ecb88, + 0x19ec8de3, 0x683fbccf, 0xad4b82fe, 0xe72e63eb, 0x6975d6fe, 0x38d77ce3, + 0x4369009b, 0x36f16abc, 0x34ff04c7, 0xe9b9f419, 0x5b8c6482, 0xf5b9708b, + 0xa1fff777, 0xff77d89c, 0xf783c524, 0x68f1eeb4, 0x9f483ddf, 0xcfc21eb9, + 0x07be2691, 0x3e27fefb, 0x69965e76, 0x844eef21, 0x4cb263fd, 0x793eae80, + 0xe77f4653, 0x3c595327, 0x1d6f4de7, 0x73e5c090, 0x22b58b13, 0xd0138d37, + 0x5d0c3ace, 0xdc3d078f, 0x10237c46, 0x1f70197e, 0x7aa1bd2c, 0x7af94a8a, + 0x1550e6ec, 0x9129dea4, 0xde01df84, 0xf0048926, 0x37ebe6d6, 0xf7f349c5, + 0xc1d24c7c, 0x03f546d5, 0x20f63f6c, 0x137a8449, 0xc668897c, 0xf4fe6f8c, + 0x3ce85b9d, 0x7a29bfc6, 0xd66f5a55, 0x5093a701, 0x9d647a7d, 0xf075f885, + 0x5542409a, 0x7f1a6fe0, 0xcc0b77dc, 0x3bea90bb, 0xb0a0ff70, 0x0dcabeb5, + 0xdb013af9, 0x1cfe8207, 0xd6cf5d37, 0xdf39f3da, 0xeb40b903, 0x3a813741, + 0x20d02f56, 0x35f42178, 0x8c51f5bf, 0x106fc95b, 0xd6daa2f0, 0xac6c4090, + 0xf68d90df, 0xb68eb5bb, 0x8bfd84cf, 0x1b7e87b6, 0x0b73bfce, 0x4f3a1dc8, + 0xcec8df6c, 0x3b69f37b, 0x61a5f815, 0x5457f631, 0x27b81027, 0xf6c8d851, + 0x6537c2a5, 0xef37942f, 0xedfb80db, 0x6a5e3a0c, 0xe143ec1a, 0x24df78a9, + 0x3de0f043, 0xe841c6bc, 0x0c22ebdf, 0x40e9647f, 0x9e04c726, 0xa68f76e7, + 0x1d6b3df7, 0xef907c82, 0xa3f4a15d, 0x3b2efcfd, 0x7482cd31, 0x71cf1e75, + 0xfb78538f, 0xf30fbc29, 0xd9038838, 0xbaed291f, 0xeb35f17d, 0x8583e450, + 0x3e30932d, 0xc5c91160, 0xe39980f8, 0xf6f9be99, 0xf810f675, 0x2396def9, + 0x81fbe103, 0xbdf8aceb, 0xc3932b73, 0xd1da839d, 0x4eb27baf, 0xa23f7026, + 0x79444eaa, 0xc651b271, 0x93e2977b, 0x60bc7cec, 0x0e3fd32b, 0x4f7eb1d4, + 0xfe06de82, 0xf9a72875, 0xf9da2d82, 0x9ad39339, 0x61ef99fd, 0xdc9afae7, + 0xeeebe32d, 0xacd50fb5, 0xcd648050, 0xcb8cb6f2, 0x461262e3, 0x772cd97b, + 0xd6bce0cb, 0x8e697c0d, 0x7932723f, 0xd00c760c, 0xa44bf841, 0x6537f2eb, + 0xf08c7602, 0xc60e4751, 0xd011ed3b, 0x55be3e3f, 0x7979c1f0, 0x086b11e1, + 0xde50eff5, 0xfd837fbc, 0x812b7de5, 0x8013d850, 0xb2a72a07, 0xfd3f91ad, + 0x7d3f7e82, 0x269106d8, 0x10f26e94, 0x68fc5aee, 0x271626e6, 0x26b87992, + 0x9289ee09, 0x0e50fda9, 0xc48ad414, 0xa71393af, 0x772ddf05, 0xa3c1fdb0, + 0x54cd138f, 0x7f61f3aa, 0xe4cadcfd, 0x8649baa3, 0xa4f20bd8, 0x6a69c995, + 0x677c601f, 0x9347aed1, 0x141d1d14, 0x493479ed, 0xf0d7dfa4, 0xd82a8b38, + 0x22bb695f, 0xb4538d85, 0xebd4f057, 0xd1fad1c6, 0xb17655fa, 0xb0f74376, + 0x8bfeafb4, 0xceb87e60, 0x179014cf, 0x8d7a7ee6, 0xd93f47df, 0x46b171ff, + 0x7ecaf3a0, 0xe820c45b, 0x0c668fec, 0x681f9fd5, 0xce57e6a9, 0x7c42c77a, + 0xff65f83a, 0x74f88629, 0x471e6ef8, 0xefe29ef9, 0xc8422d47, 0x98fe402e, + 0x79899652, 0x3979f00f, 0x4f973ff7, 0xcd42e765, 0x015787e9, 0x14c8cfdf, + 0xd0481e90, 0x404bf4af, 0x38854d7d, 0xd64c82e6, 0x07b680be, 0xc0de6c7e, + 0x09ca93f8, 0x7948e415, 0x5839a3dd, 0xa15041bf, 0x3cfae6ff, 0xb30a47d4, + 0x0de58245, 0x2a3f50c7, 0x0096396c, 0xb6f94c7c, 0xf281f406, 0xc80f5689, + 0x351f8d71, 0xc79b7efe, 0x679b131d, 0xdffdc434, 0x8517cc00, 0x9937c5af, + 0x32340f5c, 0x33640c7e, 0xab7b7d7e, 0x1cbc2b0c, 0x3e7e46fe, 0xabf199b9, + 0x396de4f8, 0x60bacf70, 0x7d67bb13, 0x028a6ea0, 0x90c9f4fa, 0x6f4dfb80, + 0xab7a66fe, 0x04abbf99, 0x577defb6, 0x6fe352fd, 0xefe98f8d, 0x295e3047, + 0x97b853e5, 0x99ebe667, 0xee1fd372, 0xe9bdf3a1, 0x3a1eba05, 0x583f29df, + 0xc9d76eee, 0x824f9a49, 0xe2c4be7c, 0x52b93484, 0xb278b126, 0xd33f3cef, + 0xa35625f8, 0x6b49e47f, 0x6ea38b1c, 0x2fee9190, 0xf8bd9fc5, 0xf3f932ec, + 0x52eaf972, 0x2f8da9fc, 0xf3f631ee, 0x7337a724, 0xae149d7f, 0xdfd70a61, + 0xf18d3e34, 0x3b9ee7a3, 0x53f01336, 0x39d29bb2, 0x8ba357d0, 0x49ce4184, + 0x8aafdc21, 0xc61f459b, 0xace14ad7, 0x3e7a5c5b, 0x2541f166, 0x9e90ba2f, + 0x86b25f8a, 0xc5f6d066, 0x831a3e3b, 0x232b1af1, 0x7c14ef18, 0xc1cbeb8e, + 0x07c031f6, 0x538b12c5, 0xef85cb32, 0xdcfe98d9, 0x1b31cbb1, 0x666c27d6, + 0x371412ef, 0x755b2edd, 0x6c4312e7, 0xeb4b8e32, 0x9061f9e1, 0x0bdc31d2, + 0xefe9f985, 0x49f16bc3, 0x9c985b1d, 0xd1916e28, 0xbcde2c0e, 0x52e213ad, + 0xd1588f8b, 0x7cd815df, 0xa7ece31e, 0xfd15b8bc, 0xd1168129, 0x2bd6ee70, + 0x18b3701e, 0x5b3c42b6, 0x139e1973, 0xcc31fcd2, 0x8b8f4537, 0x5adc54bd, + 0x767b8bc9, 0x4b082904, 0x0dd67e5e, 0xdb4ce5f2, 0x9dc03726, 0xf1adfbf6, + 0xffe2bdb8, 0xd6f81e9a, 0xf033bff8, 0xb738ca0f, 0x6bbd38da, 0xfb9b93f1, + 0xe7491ea1, 0xe51b9597, 0x2f5ba39c, 0x53d9fadf, 0xf1de9f10, 0x60a7d9d2, + 0x7f5fa5be, 0x1dc414f2, 0xdc76bd91, 0xbdcf02ef, 0xddbdf18b, 0xfee36ef4, + 0x62cf2da1, 0xfbe7745c, 0xd6f42f56, 0x60e4e7b9, 0xdceb3b88, 0xf81265f6, + 0x99ee972d, 0xa5dd7e86, 0x9324a7db, 0x9685fb28, 0x2e86dd02, 0x8cdb2e23, + 0x07cd03af, 0x1cea3e30, 0xbfc837c5, 0xa6ce78ee, 0xab1f1632, 0xc6ce38f2, + 0xbdeff1e8, 0x6f9b36e2, 0x903ae9b9, 0x7f4ccdfb, 0xe6fc64bc, 0xd78f143b, + 0x1afe065c, 0x7440bf35, 0x7f839dfc, 0x37ad3c50, 0xe6b3efe1, 0x027ebf45, + 0xf5fb9aca, 0xbe19bf19, 0xf169b80c, 0xbe6c73f5, 0x37c06dc7, 0xf18f3d2f, + 0x19b780b2, 0x9f3fec2a, 0x097b860d, 0x5cc8e4a7, 0xc7b6b7bc, 0xc43881ea, + 0x21ef3de2, 0x3f6e74ff, 0xc2687e8c, 0x493bdce3, 0x25c58ff7, 0x0d9d7c0b, + 0xc9f7162e, 0xa1710fe1, 0xf3bf1baa, 0xc7464ff8, 0x5f685c5a, 0xb3bfa0f1, + 0x8b5b3d31, 0xf86b2ffb, 0xf659c780, 0x06c84be0, 0xd6fb1d3c, 0x0e0d5b38, + 0x7b872e1e, 0xc7a39be2, 0xc1c776dd, 0xfe017c73, 0x8eea1f60, 0x81f9a65f, + 0xf46fd163, 0x0f22891e, 0x5c59eb3a, 0xfd1ca774, 0xef16a9be, 0x8a66c87c, + 0x5e5d0e73, 0xe6a5f39c, 0xf3e15dff, 0x893f280a, 0xf1d4e1bd, 0xde397455, + 0x6ffef9c1, 0x2a532fbe, 0x9ce3ef98, 0x6b2c7a05, 0x1d80a63e, 0xf3676ddc, + 0xbf7076f5, 0x2273c77a, 0x69aec1c6, 0xdc72803a, 0xe1ca2f2c, 0xf3288e1d, + 0xb7cf9afd, 0x13ed85bc, 0x42b92f1d, 0xc74fda4e, 0xcf485dfe, 0x30c78de5, + 0xcd8df70e, 0xbaed2b2f, 0x27d808b8, 0x77f9ba42, 0x0c6fb0bc, 0xdefe6dca, + 0xa71c7987, 0x5ad5fb9d, 0x68138fa3, 0xa7186f3c, 0x78a4d824, 0xef1e979c, + 0x1dbbe48c, 0xc6d33bfa, 0x4d33c1f4, 0xf768f4e2, 0xdf60bac5, 0x6aae73c4, + 0x12fdd296, 0xb17135df, 0x77444c77, 0x4b97ea0c, 0x6247d95d, 0x30552013, + 0x056aa82e, 0xa9fa238f, 0x5df00537, 0xc091bae5, 0x7c03577c, 0xd91e7e75, + 0x97a027e3, 0x99b929ca, 0xcb3057e0, 0x42c1251b, 0x2ffc3a42, 0x564f4d75, + 0x3c23bcf1, 0x3479f010, 0xfd0ca4fd, 0xa7e4c5fe, 0xd6448bfa, 0xfdf9d324, + 0x57782825, 0x57c97ed0, 0x75ca0d1f, 0xcb5feef5, 0x0d17effb, 0x6b72a57e, + 0x25d828e4, 0xc63b55e4, 0xed7b8837, 0xe0447ef8, 0xf7ae3b29, 0x9e2ff6c0, + 0xd7fafd41, 0x7dcec256, 0xe542f5a8, 0xf5878155, 0x17fb7271, 0xe817fd4f, + 0x8e98d0cf, 0xad14f05f, 0xa343760f, 0xae9ced03, 0x80c76297, 0xd5e0a45f, + 0x3c8266fb, 0x7a30702b, 0x3931782c, 0x3bfb4554, 0x27f2c891, 0xf7c20eb6, + 0x725e4a0a, 0x81e27c61, 0x61cb3bed, 0xd17cea5f, 0xea5f6041, 0xf9eb957c, + 0x8ff7f3cf, 0x1f55656a, 0x24445ca7, 0xa44f7f55, 0x1cacf204, 0x2fe09bef, + 0xf811f38b, 0xf1625aab, 0x7fd5097e, 0x939cfd0d, 0x917af723, 0xd9fd838e, + 0x7f709abd, 0x7ae60790, 0x766df95a, 0x56036726, 0x53d9ceda, 0xf244a03f, + 0x3fbabe59, 0x586d2793, 0xd99dbe7f, 0xef795ab9, 0xbf7d597e, 0x3f776fd6, + 0x7f397dac, 0xbf4cc4df, 0x92dfbc65, 0x32bd7fcd, 0x511dfbda, 0x7fdf8fe6, + 0x05a09022, 0x766d94f4, 0xee09577c, 0xfc5c43e7, 0x6b9d850e, 0xf8c3ba95, + 0x2e6eca7e, 0xc2634b8f, 0x7f4b9ef8, 0x0fa80f3e, 0x7f6b6279, 0xdae5df01, + 0xbef02769, 0x2eabd94f, 0x6cbbe01f, 0x7e2717c7, 0x6ff10995, 0x2ebf8c0e, + 0x915ff57b, 0xe1acca0e, 0x910fc0b9, 0x11b2566d, 0xa1db7cf8, 0x1dafc0c1, + 0xfc707872, 0x95d79cb7, 0xf78d5935, 0xce3af9ca, 0x0b5ed654, 0xfbb5a8f7, + 0xc87dc59a, 0xecec3799, 0xedcfeb5e, 0xf23b6abe, 0xa09df1bb, 0x33b39533, + 0x56befee0, 0x5d16d8bf, 0xe5d8362e, 0x3b8e4fbf, 0x6c7bdd7b, 0x239cf980, + 0xf7e0496d, 0x377aa729, 0xcde2f3c8, 0x4fc10369, 0xddaedfb0, 0x6163576f, + 0xab2fda3f, 0xaa434f68, 0x554e67df, 0x61a4337a, 0x9919bfe0, 0x7475d121, + 0xefcf9fd5, 0xd15e204f, 0xdc9a3b3e, 0x207761db, 0xacdb14dd, 0x26f768be, + 0xbcb9700f, 0x71fe8c09, 0x0fe03c6c, 0x72fddc6d, 0xa4f0e508, 0x15eb1518, + 0xbe08bb53, 0x939e6c97, 0x43d77861, 0x947ac6aa, 0x459e114f, 0xd4c946a4, + 0xbc6d6fc9, 0x199965a2, 0x977c0652, 0x5e9bb3fe, 0x933c1ec5, 0x85ea0260, + 0xa9318712, 0x43dc3549, 0x1b5ce490, 0xb9214fc0, 0x5204491e, 0x8f7e46a9, + 0x3a984d21, 0xdec5baa9, 0x2020aabf, 0x73f14f27, 0x4177f07b, 0xe5af03da, + 0x8383f728, 0x069e1908, 0xb1a80cef, 0xdafc1d1e, 0x4ef66eec, 0x9841549d, + 0x01e198bc, 0xfa08447d, 0x9e9437c9, 0x67a72aaa, 0x9fd23d00, 0xa1b7ee0f, + 0xe7e741e9, 0x25f1bcf6, 0x4e9441e8, 0x3f713bd9, 0x0a2aa120, 0x453b0862, + 0xc264eabf, 0x775b37de, 0x8dede884, 0x481e38cf, 0x31ca1f70, 0x45f9e927, + 0x2ac41e68, 0xd8aadbc8, 0x1ce1b3af, 0x6121e9d1, 0x4e1d0bd0, 0xd4d07612, + 0xa33a4a39, 0x26777fe7, 0xd4e8ebcd, 0x6e58d133, 0xd72a0be6, 0x2136e34c, + 0x9fbf68fc, 0xd4fdfa9a, 0xdfa7efd4, 0xa706afd6, 0x17a36d80, 0x5d583fde, + 0xc6e1cb99, 0xb871b3c6, 0x848cf851, 0x2588d9f7, 0xc3cfcbc6, 0x7c31ae11, + 0x4fa85636, 0x931d9af1, 0x59fa7086, 0xc408deec, 0x5a8492db, 0x2aef7602, + 0xf4d3ed81, 0xb5d4eb97, 0xf21b1e23, 0x9c7c03e1, 0x472618ec, 0xbdf17bb5, + 0xff51dbeb, 0xdedf55ea, 0xe898fd57, 0xcd7d5df5, 0x3e7d11c7, 0x5ff47d71, + 0xffda88ed, 0xe54b9577, 0x3bf7beaf, 0x96edb738, 0x7a0a1e4f, 0x1d999ea3, + 0xdc667a03, 0xf1dbaf89, 0x6d33d30b, 0x8ef88d03, 0xf4a6fa01, 0xf8cc3316, + 0x7d274cdd, 0x5f1e57d1, 0x533bcd07, 0xe0ee1c29, 0x606d4fe3, 0x2d77dee7, + 0x6a3a7e65, 0xfea0fa1e, 0x1dfebc9d, 0x37f402b6, 0x40efe31c, 0xf4cb55dd, + 0x17eebbc8, 0xd7ba7cf1, 0x0ff0473b, 0x2f776fca, 0xb4e14213, 0x9136ef68, + 0x3587b806, 0x7e6f8f8f, 0xd44fc907, 0xb462759c, 0x5d189077, 0xccb7f76a, + 0x242c1fef, 0x2b7dfcb9, 0x763df7e3, 0xacfcb74f, 0x8fb3d51e, 0x74a51f05, + 0xa527fa0f, 0x8797387b, 0x1718496b, 0x5c5856e2, 0x3c20db48, 0xdfe4d34f, + 0x2c6a9185, 0x37c4d7ec, 0xb0f77d98, 0xabc64bef, 0xf93a71c9, 0x318c5d2e, + 0x255303bc, 0xbe40537b, 0x26af17c9, 0x1595352a, 0xbaa9246a, 0x22b7aa72, + 0x26f843f3, 0x2914a9ca, 0xf2517204, 0xd00292e4, 0xcf46657b, 0xe1257d5a, + 0xf33d6eea, 0x457ffa6d, 0xe5d2224c, 0x326ac592, 0x2390f38c, 0x127c0577, + 0xbf5ed9dd, 0x043d37b3, 0x5775b2b7, 0x7ad3bac1, 0xf14aa7af, 0x9edf517a, + 0x8e6efdd0, 0x5a27e60d, 0x9854f7d5, 0x04cbbfdf, 0xe1bd2efc, 0xa2153de3, + 0x034217e5, 0x8c443e30, 0xc602319d, 0x5c81ded7, 0xe7829957, 0xfbf8abb3, + 0x472aab90, 0xfe41fe62, 0x4a9ae77e, 0x7e0d5315, 0xbe356f36, 0xc61b685b, + 0x3879b7fa, 0x1c2c127e, 0xafd47e3e, 0x7815296c, 0x54f7686e, 0x30bde184, + 0x2bee9032, 0x354f6d30, 0x10f14fc2, 0xfad25bf4, 0x9e42b798, 0x28ed72a6, + 0xa9e487c4, 0x6fa00520, 0x03cffc39, 0xfed5da1f, 0xad10f786, 0xf5be4329, + 0x7a6ec3fd, 0x68e4c0da, 0x3327a702, 0xf614127c, 0x4746a83e, 0x5561e97d, + 0x8ab7ae3c, 0x0556ffbf, 0xb85110ef, 0xc3e9563c, 0x47bf8ab4, 0xc7e14554, + 0x134c5ef2, 0x55599db9, 0x8fe58d99, 0xee977df3, 0x3bc69803, 0xb04afc98, + 0x0193ec54, 0xf984f14e, 0x64821347, 0x21611660, 0x094bf0a4, 0xdaf21512, + 0xa46aa339, 0x9923d10f, 0x1f53b1de, 0x1cd53c07, 0x67e02d92, 0x68dd9717, + 0xce2a5fb8, 0xdf81c5f6, 0x05fa744d, 0x067f3fd8, 0x7bf3a678, 0xdf13ce94, + 0xb1f4e56d, 0x5ac1d39a, 0x000f1f4e, 0x21f4d0bd, 0xd08f274e, 0xcabe4275, + 0xac21eecb, 0xe5e2ce9f, 0xfc2dd212, 0xd130b71d, 0x79c5a3c7, 0xd742889b, + 0x8ab43a89, 0x47d3be29, 0x7e91588e, 0x4f88a31c, 0xcb23f284, 0xcd1dec43, + 0x77d854dc, 0x3377b4e3, 0x7371aa27, 0x586d62f0, 0x89d9efe2, 0x8b696ecc, + 0x95653efa, 0xec0dbf77, 0xe3e6beff, 0x56d2faf0, 0xb51cf1d3, 0xfbd7d42e, + 0x2ce773f9, 0x2d6779a2, 0x9409dfd5, 0xd2753a33, 0xe8e81779, 0xff87d1c3, + 0xc371cea0, 0xdfe7c0d7, 0xf14586c0, 0xa1daf3fa, 0x852f8076, 0x927e0ab5, + 0x54dce4c7, 0xc58f0790, 0x9cf7f745, 0xb67a618e, 0x036af33b, 0x3ec8d77d, + 0x3899e76c, 0x3507c0d6, 0x4fc50e5c, 0xaef8609d, 0xe0ff9dc9, 0xf0e43dfd, + 0x7ce83bc7, 0x454e2e92, 0x39b84e3e, 0x92aa1cba, 0x2fbc2095, 0xc99a3550, + 0xc29e60bd, 0x725eb3f4, 0xfdbfa085, 0x46c47f82, 0xf468b3f0, 0x393092b5, + 0x6f4c2416, 0x4bf5d6d1, 0x379477a0, 0x55fba41e, 0x2f3407c0, 0x6e90530e, + 0xa0b2ee92, 0xf386bb9d, 0xbf9c83d9, 0x7abe73d6, 0x046af818, 0xc5eb63bc, + 0x9f9ce7f4, 0x68ff806a, 0x31a473ea, 0x9f7f063f, 0x5797d348, 0x7be2c6da, + 0x0b4e5574, 0x7de925ca, 0xfa09c86b, 0x1ef1bee7, 0xae882ff0, 0x05df8f4c, + 0x1f3699e5, 0x65c4339c, 0x3e5e807a, 0xe2bc2d77, 0xe928e2db, 0xaa2ef888, + 0x97bf3324, 0x7c972127, 0x414f0a38, 0xecb47ef0, 0x1f8099b9, 0x0a84f1f4, + 0x1af9c03b, 0x6ac3b307, 0xee10b2f3, 0x1cd31f14, 0xe498f3ba, 0xbf7637d9, + 0x3fdd0627, 0xeb3dc7de, 0x17ae0e59, 0x61920c0f, 0xcb50f93a, 0x6a23abdf, + 0xc9d48c90, 0x73c39589, 0x7a8ff808, 0xe43e87cb, 0x2f2626e5, 0x0fbe04ab, + 0xedaef099, 0x94bc9a7b, 0x7afdef00, 0x15f573cf, 0xc3f70dd3, 0xcdef2e64, + 0xcc1d8af5, 0xbc435b1e, 0xbbd0bf11, 0xd8a9c29c, 0x9497b3a1, 0xedbb1b84, + 0x59461fe1, 0x9e2e5987, 0x6412fd82, 0x77c7e48d, 0xea2a164d, 0xde41e3e3, + 0xd7c596fc, 0x684fa5f4, 0x2c5c15e3, 0xff20bd44, 0x4bee3662, 0x91d3b585, + 0xfb78087f, 0xc9d87675, 0x01b89fba, 0xf96b27af, 0x1c9d6bf9, 0x7d97b882, + 0x787bef1b, 0xc2e7850e, 0x7f3c44a7, 0xa2007b85, 0x64827e2e, 0x6a07a8aa, + 0x0c9dbaef, 0x9fd6e3dd, 0xc2ffe793, 0xb2fd03ee, 0xafcc3a2f, 0xa81fee8b, + 0x5e827f82, 0x4123bc4b, 0x43faa56f, 0xc5fa0c24, 0xdef8edcf, 0x6e0f9685, + 0xc77d4474, 0xed31d4aa, 0xa97b8011, 0xa438f7c3, 0xe78f19c4, 0x03f37d01, + 0xf804f71b, 0xee1ce164, 0x4bc71e09, 0xe0cb3ee1, 0x70e7639f, 0x85bfb827, + 0x8f28fad8, 0x1f6ae5e1, 0x2f166ee5, 0xcbd13c43, 0xc53f66ff, 0xc0765ea8, + 0xb2d3e02e, 0xde6bb3da, 0x7f462fc7, 0xc76e69f3, 0x08e8dc2e, 0x5fa28cad, + 0x1cf7e42c, 0x14f3f217, 0x774ebe8d, 0x2e8c71eb, 0xe94ee1bb, 0x44cbe90c, + 0xa3b3c2c7, 0x393f6e91, 0x507fa328, 0x7c3af678, 0x22fca64f, 0x65d2881d, + 0x047de8a9, 0xdbc8c8e2, 0x3df5d222, 0x39e1c687, 0x1de9875a, 0xdf5cb3cb, + 0x8bfcd2d0, 0x37bd06c5, 0x0140b43f, 0x62ff20bd, 0xc43bd239, 0x7abdc26b, + 0x3ebfce42, 0x3b74e249, 0x9b9fda01, 0x5bf692b6, 0x83f8ced0, 0xa3960c4c, + 0xe1deb39f, 0x99987f05, 0x543ace3e, 0xa0a3df83, 0x27fb14bd, 0xd04920ce, + 0xe42c1bc5, 0x5c17b5ef, 0x1236ef64, 0x00a4904f, 0xd67970bf, 0x77c6f743, + 0x8c2c3b7b, 0xfdebcc1e, 0xabf3af8a, 0xe84ef5ee, 0x603fbd63, 0x467ae5eb, + 0x69b67b41, 0x1f1abf5d, 0xeb3d5d6d, 0x4bed8899, 0xa5cb3bf9, 0xad778616, + 0x8d93b87c, 0x2a27a5af, 0x210dc367, 0xcbdfc452, 0xa3dd0fcc, 0xf950fbc0, + 0x82f17175, 0xb5059d6e, 0x62e21a77, 0xf0f36bf2, 0xba82b07d, 0x6ebe653c, + 0x53c6ea7f, 0x1e86f9d0, 0x5bd7c34f, 0x754f0073, 0x2738dc8e, 0x6533e7f0, + 0xa042bef7, 0x53b7865f, 0x054c704a, 0xdc7badca, 0x0cd1eed1, 0x56f09a77, + 0x2c36f1cb, 0xe4e94648, 0x732f8698, 0x4a9b13fb, 0xf5f385ee, 0x6bd81b13, + 0xb1cb7d28, 0xc334f8e8, 0xe7e1c7d1, 0x48e386eb, 0x34badb8c, 0x8867bf1c, + 0x8e13eacf, 0x9c1aff1c, 0xaf54efb4, 0x71c4ef1b, 0xb04f7b09, 0xe0b2fb36, + 0xa33e33d7, 0x6f8a538f, 0x8f9006c4, 0x9f030e54, 0x67e67e9e, 0x4aedf463, + 0xc1a6931d, 0xf2faa438, 0x715ef7ce, 0xfd4267f8, 0x41ef64e0, 0xe8b9e515, + 0x2eeba2ad, 0x33a27d8a, 0xee35ab8c, 0xd52bab8f, 0x44dfc0eb, 0xc0eb94ed, + 0x7d732bef, 0x96be808d, 0x8fa7dec6, 0x62d66ef6, 0x563bd327, 0xbfa05657, + 0xc482d898, 0xc2497e03, 0xca9c92f8, 0xe49dff40, 0x8a19ea34, 0xbf80f7ec, + 0xb0f7e150, 0x2ebfc965, 0xebec132d, 0x0ea0f484, 0xd32701be, 0xeca7d68f, + 0xd81f80f7, 0xbf07fb4a, 0x74a06d81, 0x786fe0c1, 0x8fd85a4d, 0x2cf69dd2, + 0xf2690c6a, 0x5ffa0209, 0x2ffc982e, 0x48f30c17, 0xec36f3a0, 0x48b84693, + 0xdb9e3736, 0xddfb8448, 0x17e83c38, 0xb96bc394, 0x70e95e1c, 0xe6b6fee3, + 0x27da0b0a, 0xf79fdc35, 0x21e3f04b, 0xcff4245c, 0xd410d842, 0x3ad96257, + 0x15f7e0ec, 0x63086ec1, 0xe92f05de, 0x9904f888, 0xa238f900, 0x47ef900a, + 0x0f406bc2, 0x7ed49aee, 0xdaf77c2f, 0xdf000ffd, 0x76da9e7e, 0x6e3f0054, + 0x804affae, 0x4c18ad73, 0x5ffd6957, 0xa874918b, 0x1d169837, 0x15e96789, + 0xd7edc710, 0x77b10f9d, 0x62f27b4a, 0xcb15fcef, 0xc979d324, 0xcbea5757, + 0xd5f76e7f, 0xecaa3cc2, 0x849eddec, 0x7394048f, 0xfa7edd55, 0xf477bc5c, + 0xedc593b2, 0x5d005d20, 0xc07a641d, 0x8d8d4905, 0xc8dfff47, 0xf30cd78c, + 0x12f21af0, 0x281aabb7, 0x73ba4a9d, 0xcf926189, 0xbc347402, 0xcfd77e9a, + 0x16fe8a33, 0x7a67c4ef, 0x68879ea3, 0x22e3a3f3, 0x73178abd, 0xa2633ed8, + 0x9b02dd87, 0xcac8b07f, 0x14121fec, 0x3473af01, 0xb15693c2, 0x7ed11c7c, + 0xafbc7768, 0x2ac9e9f9, 0x5cb0f796, 0x173b3e60, 0x4e67cf34, 0xf036daeb, + 0x4d69cf8f, 0x44e7005d, 0xfcaf0a73, 0x72ddd218, 0xe403bf64, 0x3bd84fc4, + 0xfbbc77a3, 0xe85b0c9a, 0xe23677f6, 0x39b7ee7d, 0x1125ce3f, 0x27eff019, + 0xf9f9851e, 0x0f3dec43, 0x26f9e5e2, 0xbbe7ec19, 0x7edba1c2, 0xbf777344, + 0xa811fa16, 0x460f732f, 0xf9b4075e, 0xe8393c9b, 0xb5dad74b, 0x7960df78, + 0x0e1baed6, 0x4877fe76, 0xabae1b24, 0x8436dd67, 0x5a4eb683, 0x0dd1f113, + 0x926efe27, 0x75ee9706, 0x11bcee3b, 0xc97d97fc, 0xd1b639b7, 0x62b8b31f, + 0x9c332f36, 0x2a22853e, 0xf4e0ff1f, 0xf7f9059d, 0x01d7d3ba, 0x322da969, + 0x7c821a58, 0xb97c8113, 0x8922bfe8, 0x20dce1c2, 0x008995ff, 0x977eb68f, + 0xb51ec7a5, 0x34707933, 0xf81fb34d, 0x4cb5f47b, 0xe9c79b2f, 0x93f6cd6d, + 0xe21f7eef, 0x77b10e89, 0xf544caa0, 0x1fd0fba6, 0x7a689227, 0xe51e96b5, + 0x65cdaff6, 0xb2b6efe1, 0x1893ce75, 0x3b35e7bc, 0xbcd25ef0, 0x9de1a265, + 0x58cb79e9, 0xda911fbc, 0xd06adcc6, 0xba71577b, 0xd80fddee, 0x167ee6e7, + 0x768c9b2c, 0x33c50edb, 0xa7f5ed09, 0x982d9d18, 0x4e2113ea, 0x013ac27a, + 0x8fe321fd, 0x34ed2dab, 0xe71420bf, 0xb05d7605, 0xbc06497c, 0xc6de50f7, + 0xe2c975fc, 0xd29ff4e2, 0x6cfdb1f4, 0x62fc85ff, 0xa7d39380, 0xedfe753a, + 0xdd22b90e, 0xb77cf403, 0x20f207d3, 0xfbdf56ef, 0x5ecd4f80, 0x9d88f4d7, + 0xb8865f74, 0xd4bbbcb7, 0xbc8fa06c, 0x530fbb26, 0xa862911b, 0x8893cb5c, + 0x8564d20d, 0x63487648, 0xacd20d88, 0xef3dec95, 0xb859dafc, 0x73b3bb9f, + 0x37d77815, 0xcfd9f5af, 0x14817da0, 0xe8e827de, 0xd0f5af29, 0xc87f7897, + 0x8d718b97, 0x18acdbdf, 0x4dd1a8ec, 0x2d35fcc6, 0xd87a7cc6, 0x6838cf98, + 0x7507afcc, 0xed37a747, 0xf3cec3df, 0xfbb2ce4b, 0x1850af90, 0xad8f00c8, + 0x538f9456, 0xe0b35a4a, 0x0becf87c, 0xef940b2e, 0x23b32bfe, 0xf8ec5b23, + 0x3fbedbbe, 0x881890c6, 0xbed17c53, 0xc6cfca11, 0x9f816534, 0x38c7d68c, + 0x8ebbba0f, 0xc7683b00, 0x86bd1ad5, 0xc7641e30, 0x3f9e2cd7, 0x821ac5b2, + 0xbbb3e773, 0xe8017d9e, 0x0196ecf3, 0x22bd1fa8, 0x6fd02d04, 0xff8601f0, + 0x836e3109, 0x6cd92a9c, 0xb8e72fb4, 0x75d5de98, 0xfe07995a, 0x8d6b2b8d, + 0x642abeeb, 0x98b9e7cc, 0x744f9a9c, 0x3ce0d3df, 0x02935d5d, 0x24d3ecfb, + 0x42c93dea, 0x3dcf17ce, 0x2b7468a7, 0x88d877f2, 0xbf73d49a, 0x39cf776b, + 0x9401d2d7, 0x16004a8e, 0x97be7a43, 0xfad5c698, 0x7db170cf, 0x2f9f8120, + 0x1112de44, 0x0b2a673e, 0xdde1e70d, 0x37a56c7a, 0x9d30ea65, 0x2fbb589e, + 0xc7f50f29, 0xf5f3497d, 0x0396dbf6, 0x3c427749, 0xff0966cf, 0x9ce955ce, + 0x909e1e67, 0x26c5df00, 0x83942f98, 0xf4d1d90e, 0x51ea1bba, 0x3eac753d, + 0x76a0a63e, 0x1d54ca5c, 0xba577e9f, 0xdb9f7eec, 0x33b3e0c3, 0x1f96f73b, + 0xd4977c51, 0x56a85e89, 0xbfdb74d2, 0xd7b8068c, 0xb79f78c9, 0xef8c9b74, + 0xafea07c5, 0x49457f45, 0x7c1ce1e3, 0x9e437097, 0x2595e617, 0x2c715c91, + 0x856e28ba, 0x76eb54f4, 0xe4afcf7c, 0xa48a35cf, 0xf48d7cc2, 0xf90de941, + 0x594a6a90, 0xf80f0337, 0xae1c6056, 0xd70cddf6, 0xbdb190a2, 0x732f5f19, + 0x91bfa1fa, 0xeb9bbc7a, 0xc4119bf5, 0xba5317bf, 0x9d27ca8c, 0xbc7a521d, + 0xcd00e31a, 0x4a73a0e3, 0xfb0ede77, 0x68fc8a9c, 0x113dfbe7, 0x4e3c596c, + 0xe3cb2876, 0x5f4082bb, 0xc9abfeb0, 0x71ee1554, 0x43a64cde, 0x7e108afa, + 0x5f191458, 0xab63ffa3, 0xc3baf903, 0xafccfed3, 0x471a1e80, 0x7f4bf9e3, + 0x43b5af7e, 0x8c7be30d, 0xe899dfda, 0x717cb0f0, 0x48e31dab, 0x50539ece, + 0xf880adee, 0x82ffa835, 0x7aa162dd, 0xfd6dd9d7, 0x643c4326, 0xa77b1347, + 0xbf534cf7, 0xecb7cac9, 0xd5fe66a3, 0xf063b7f6, 0x1e0fba4f, 0xc3fef971, + 0x2ac6fb05, 0xdc9a2f16, 0x22bd22af, 0x76b49e0a, 0x3a454a09, 0xbb9119d8, + 0x4c8dde9d, 0xd0934a2f, 0x76829c0f, 0x73f71e7f, 0xdb9b167c, 0x68bafd0e, + 0x3ffd1f5d, 0x11b8a0fe, 0xd123ebe8, 0x6867af7b, 0xc2e0b9cf, 0x9bde3f4c, + 0x41083fc5, 0x91205fc7, 0xd8f544b0, 0x8c3fb005, 0xc1ca3cc1, 0xc6027505, + 0x6f5c2d4f, 0x1bbc0f5c, 0x0ad7dfab, 0x0d932fe1, 0x26987885, 0x8ceb0b4c, + 0x0fb045e5, 0x05ce31b8, 0x1b8a04e3, 0x8484e58c, 0xda53bfd1, 0x1a358df8, + 0xda233edc, 0xe9ff7cfa, 0x190fc832, 0x62c7c7e5, 0x04afae2e, 0xde9a52ac, + 0xc0d9f7c1, 0x8594ecf2, 0x365aed34, 0x06616521, 0xfb65efdc, 0xf20ab211, + 0xaa7f7b23, 0x0f092a64, 0x1081ef62, 0x5a4ae7d8, 0xc868f085, 0x3dd048db, + 0x77877d96, 0xfadd6011, 0xbada31fb, 0xeffabd61, 0x57861de4, 0xac157eed, + 0xca5e5f57, 0x68da50e1, 0x2619f835, 0xd7410a34, 0xa36f7035, 0x3795db1d, + 0xf435637f, 0xba51f7cb, 0xc53b12ff, 0x7ac284d7, 0x58f31611, 0x5d0e3cb7, + 0xfefe2d15, 0x63df8728, 0x02a7e5b7, 0x7a023ebf, 0xe00e7f64, 0x041e426c, + 0x218139a1, 0x8bc746c2, 0x63cee8c9, 0x964ad679, 0xf13b9eff, 0xd481dafa, + 0x78fd92ee, 0xcc40b22e, 0x75ee037d, 0xaff8f7ad, 0x1671d371, 0x25837c58, + 0x08df5be4, 0x632dd7f4, 0x6c7c7870, 0x511555c5, 0xbf0d5bec, 0xf09a14bf, + 0x8bb832bc, 0xccae87ed, 0xc7f7ac88, 0xf266e0de, 0x3b7f7628, 0x6c8867de, + 0xe51ef017, 0xde18e106, 0x8370dc33, 0x4efec04a, 0x790278a1, 0xab2041b9, + 0xccaffde0, 0x5f8b59e6, 0xc6673c07, 0xb41ce178, 0x589279ac, 0x33f5c4e6, + 0x5151c9bd, 0xc913e70f, 0x058e46f3, 0x9eeba73a, 0x7efd3377, 0xf1c55b93, + 0xef0c9d52, 0x69832b29, 0xf8c1464b, 0x075f8bb9, 0x831d1c3e, 0x29936ff7, + 0x98f15cac, 0x287d03ae, 0x03efa485, 0x43329eb9, 0xe0be0b1d, 0x9c6cdcc7, + 0x6f388b44, 0x636be816, 0x7efe3e59, 0x8911b7c1, 0x271c51f0, 0xc3a64ad9, + 0xe83be17c, 0x07f03677, 0x9ef87538, 0xe30e9152, 0x69650f27, 0xb8c61282, + 0xbc3537a8, 0xa4f8b2b7, 0x72821ea5, 0x9397e97a, 0x7b1ec192, 0xc61a83b3, + 0x39bd7e54, 0xc317b350, 0x87a7d44e, 0xb9f5648d, 0x9d34bd3e, 0x0c27fdc5, + 0x5618f4d6, 0xc5f64baf, 0x3d5c8066, 0x4feaf4cc, 0xa3f43e9d, 0x8f44ab5e, + 0xf1ce5e3b, 0x4318b814, 0x89f3ba42, 0x51cfecc0, 0x745c0bdf, 0x9f6e9093, + 0xf4ecf780, 0x85a5abf1, 0xf15df1fb, 0x7186d232, 0xc64d65d0, 0x636bdb78, + 0xd1ab8fa2, 0x85a2e079, 0x1921fb04, 0xea3b040f, 0x66b2214d, 0x07de0251, + 0xe06cff44, 0xba8242a2, 0xe31703f1, 0x79eef98d, 0x3d3f6126, 0x5eb188f5, + 0x8f5817cb, 0x61bbb764, 0x3b4f4e9c, 0x8b8123ee, 0xf6d3b612, 0x2590ae9b, + 0xee7e5328, 0x17795954, 0xead25f3f, 0xce75fd6b, 0x1f7df856, 0x4770cef6, + 0x143c1525, 0x9eb44f2e, 0x69693f47, 0x8b843eeb, 0xf03d0f46, 0x0ea09071, + 0x6d55493e, 0xede50b61, 0xf1fe1f17, 0x515751da, 0x7ce7ec54, 0xd6bd9c1c, + 0x09206947, 0xf1d751de, 0x9bb323b5, 0x3ccc51cf, 0x3fb91166, 0xa9dace73, + 0x5e797503, 0xf07dbbbf, 0x3ca1eb8e, 0xbf6b1473, 0x7f3be1eb, 0x0f9d12b3, + 0x39ae3cd5, 0xa5d73832, 0x794cdbcb, 0xd68fcd27, 0xf2a63de5, 0x8a795304, + 0xd5903f29, 0x078570ef, 0x5e425e8b, 0xf5de787b, 0x3af2f7f0, 0xe173c352, + 0xe2f582e5, 0xefe1ebfc, 0xb2659663, 0xde58f7bf, 0x9d05782a, 0x3eef2cfc, + 0x16576e5f, 0xb438028c, 0xa07201bd, 0x80f045b4, 0xda6cee7e, 0xb43cc616, + 0x9aed7553, 0xda581d98, 0xf5db0c74, 0x0b48ffd9, 0x2383f1f2, 0x977ac43f, + 0x3321173a, 0xa62f7f8c, 0x639273af, 0xee4fff82, 0x8df79ec4, 0xd7bdb63b, + 0xe8faf7f3, 0xdf54cef7, 0xa6a39401, 0x9801affb, 0x4f87b38f, 0x383e3834, + 0xf7be02f2, 0xd6e8c1f8, 0x701d4177, 0x02bf3d2c, 0x973fcbf4, 0xfa071c9d, + 0x0919bc16, 0x852fc6fb, 0x1fb055d0, 0x57fc413d, 0x9777b8c1, 0x4f07df0d, + 0xdb951f90, 0x80f7849f, 0x77dc8f1d, 0x77e744bd, 0x083ed5d4, 0x2b9224fe, + 0x27cb0d76, 0x124be3b6, 0x596bb1c5, 0x20fb507e, 0xc5c7cd0b, 0x1d7c476e, + 0x24fede1d, 0x3ec7c7e4, 0xdba3f2c9, 0x301e8907, 0x7eba9e25, 0xc9bfad2a, + 0x2ddf9d13, 0xd21eccb1, 0xcc3317e6, 0x0b8057f7, 0x0dfb6529, 0x51b4af5c, + 0xf8b73a79, 0x144dd6cc, 0xcdff731e, 0x536e7281, 0x32372dc7, 0x0b98393d, + 0x1cc953f1, 0xa21fb8de, 0x9f50975c, 0x303d8548, 0xae9f07be, 0xee2a6dc1, + 0x6c575717, 0x7921bd03, 0x2fdc28ee, 0x257cbb0e, 0xa93d89b1, 0x38534894, + 0x30f58b07, 0xf05a2db9, 0x3ef93ebc, 0x8f51ea17, 0x29c1f7f0, 0x387d21df, + 0x63925e39, 0x8e4cdc99, 0x45d7f665, 0xe7ec34d7, 0x836f828f, 0x0494844d, + 0x8b17e8ed, 0xcee57d41, 0xa8572a7a, 0xf3e1af5c, 0x2af479ae, 0x09dc37f4, + 0xf051defe, 0x3f1a97dd, 0xafff47aa, 0x6779a749, 0x33567d8f, 0x3faa97cb, + 0x67a9ad6f, 0xaadc9ae5, 0xb5ed6349, 0x8ab92afd, 0xc8fc938d, 0x1d611b55, + 0xdc60890e, 0x23d9a2ea, 0xfdc0ae36, 0x2f9c66ff, 0xc152f9f1, 0x345e3e9e, + 0xa97a02c4, 0xc3d19f86, 0x7e50e97c, 0xd1a73f07, 0x2fadd4f0, 0x70bb32c7, + 0x07f54881, 0x7e3c97d0, 0x13ea8fec, 0x3b61d863, 0xe84a27d3, 0x9a1e319a, + 0xed4897c3, 0xfffbe0e3, 0x18fd3821, 0x86efe8e8, 0x0e7adfd3, 0x5443926b, + 0x7cc314de, 0x349d96ca, 0x70e1fbde, 0x9610a5ff, 0xef753393, 0x60efd0b1, + 0xfdba667f, 0x7e75638b, 0x95f7b998, 0xada9dea1, 0x3baff1c7, 0xd4dfc3a7, + 0x59a7f334, 0x47fa3c2f, 0x07f47adb, 0x8f284d2a, 0xf048de8f, 0xfe51c9fe, + 0xd7a6961e, 0xc95bfd66, 0xfdbf609b, 0xf8445639, 0x52f8203c, 0x500f1e01, + 0xebfb807a, 0x9e2c59c1, 0x6b8fdb46, 0xf21b42e2, 0x1b6e1e81, 0x5df2e785, + 0x04d5c584, 0x5eb03997, 0xda3b5c4d, 0x55e335e7, 0xd0099d0f, 0x3231e207, + 0x50bf4147, 0xb3a33a4d, 0xf1aba29a, 0x97a5093e, 0xc39fb620, 0x1666aee8, + 0x66a2fb41, 0x9bd20a4e, 0x30ec849d, 0x27e8be9f, 0xd1f98aa9, 0xa31be488, + 0xe16f573f, 0xd991c0f2, 0xd03dfdbe, 0x51dbd763, 0xe254058f, 0x32754979, + 0x41d297ce, 0x3444f008, 0xa917edbb, 0x4ed107a1, 0x603fa2f4, 0x8797cbad, + 0x43a9fff3, 0xd9d7f985, 0x58db3ac9, 0x2ac87f30, 0x3e7c9394, 0x8c71faa4, + 0xacfcd0af, 0xe0bc297f, 0xc5e3fd02, 0x807f6ed8, 0xf9f3ec0f, 0xbfcf9584, + 0xec0c71df, 0xb3f7f9a9, 0xbac975f7, 0xf9e33e69, 0x126b9d07, 0xaff9c9f8, + 0xba02e236, 0x373b43f1, 0x2e9ffff4, 0xbfe47fb8, 0x25e7dd9f, 0x647eda41, + 0x9cfdfb4f, 0x6c8ae7df, 0xa1d2a4fe, 0x751f7b46, 0xe80fdf3f, 0xf1fa7dfc, + 0xfdcc71b4, 0x00f23b52, 0x3dc28bc0, 0x22acf70c, 0xcf7f653f, 0x04df3cc1, + 0x9d90f225, 0x14adcf96, 0xc0efe0e3, 0x70b997fb, 0xe77cdabd, 0x43ae4725, + 0xffa9853f, 0x2cf28e13, 0xf66b87f0, 0x675fb90f, 0x945c21ff, 0xef08bc9e, + 0x8ed04410, 0xdb9df5ea, 0x93bb66cd, 0xfaadaf90, 0x16f7dd7a, 0x7f34c154, + 0x20aa574e, 0xfcfcde01, 0x22515f3c, 0x995e4173, 0xf3c1ade7, 0x1a33973c, + 0x7de1985d, 0x27780fbe, 0xa083ed28, 0x2b32ff5f, 0xbfdcc9c2, 0x6e3e9fb6, + 0x0f13fca7, 0xd20253f1, 0x0772ed6b, 0xf65d8fee, 0xaf7833c8, 0x88f5ef73, + 0x18a2ceef, 0x3c1bee15, 0x3c76d541, 0xcecbd90f, 0xb446ba43, 0xea7e008f, + 0x51f66ba4, 0x25be74fc, 0x6d0507d6, 0x7a3f5412, 0xf408dc4b, 0x06ebb9df, + 0x01bfe7ec, 0x85d8a80c, 0x00008000, 0x00088b1f, 0x00000000, 0x7dc5ff00, + 0xd554780b, 0x733ef0b5, 0xcc923cce, 0x64c93324, 0x249f7932, 0x9c440210, + 0x3df010c4, 0x53518784, 0x7c5a203b, 0x1e121c5c, 0xa8992609, 0xbd6f17ad, + 0x4844033f, 0x44683010, 0x450388a0, 0x836d5bc5, 0xc1301a45, 0x6b6a2941, + 0xdb5e85fb, 0xbf3f7a2b, 0x571f1108, 0xd2941192, 0xd6bfcb56, 0x7324fbda, + 0xd2d28926, 0xd3ef9bdb, 0x9f7b3ec3, 0xed6b58fd, 0xfa7bdef5, 0x2ca82457, + 0x6300b18f, 0xcf0c94cc, 0xb3965fe0, 0x184ec644, 0x00ac4c7a, 0xe6669dca, + 0x77f4622d, 0x87ebfe1e, 0x194b6aff, 0x8219081b, 0x89e14bc6, 0x058c6515, + 0x4f42133b, 0x5fc161e7, 0x358c9cc7, 0xd6cf11de, 0x4834f04a, 0x37d4035e, + 0x5a109d2e, 0x16375125, 0x9eac62e6, 0xacf50977, 0x32fe8259, 0x51d4d664, + 0x85e3e58c, 0x3af316f7, 0x8dddda05, 0xdda950ff, 0x57e60961, 0x23d7596f, + 0x1d98fcc3, 0xa5fa83fe, 0x9ee30f58, 0xa16bbfc7, 0xf9ffbadd, 0xb8dfe71a, + 0x196de617, 0xf3fd779a, 0x652c75fa, 0x9a7aa1a6, 0x54b19077, 0xae6012c6, + 0x83367f38, 0x7cc2c685, 0x509ca26d, 0x119213d9, 0xd82acb4e, 0xfa681489, + 0x9f2cef6a, 0x583beb15, 0x1f033c35, 0xe6086f33, 0x8ed7457d, 0xbda132d7, + 0x1b27b2a3, 0x76581b97, 0x977d65ef, 0xc621ff61, 0xf3cd0f26, 0x328daef2, + 0xf478d2b3, 0xbbc54c1d, 0xc6ed4ac7, 0xfa24b9cf, 0x4bbe92b9, 0xe177c835, + 0x2af8bd78, 0x4de3811d, 0x4d9c6097, 0xb586f975, 0x0504af30, 0x175cc15e, + 0xb9db8db5, 0x2dece082, 0xec63639c, 0x977644f1, 0x29e9e08f, 0xeb7f41f7, + 0xecb315ec, 0xa39a5fd0, 0x953d9a62, 0xe1b3e38f, 0x975161f2, 0xf62fcd0f, + 0x6b47c1a9, 0x54d05697, 0xbd1d64d2, 0xe1c4d39d, 0x1492d916, 0x51f389da, + 0xfe2f2a24, 0x5ac771b5, 0x74429f9a, 0x7993ef73, 0x2d7f9c21, 0xab7a236b, + 0x93132167, 0x05859da1, 0x162e8113, 0x7824b343, 0x666cd92e, 0xeafe146a, + 0xbd72fa42, 0x25243e12, 0xd0f4bd22, 0x8eef77f7, 0xc2c19fa9, 0xb06fa836, + 0x3e0270b0, 0x8df5f43b, 0xfde8222c, 0x3dfa39bc, 0xbdebe76b, 0x31dde04b, + 0x61fb2423, 0x18e25bdd, 0x06c64b8b, 0x2b9f846d, 0xf841dc1e, 0xe6f52a4c, + 0x8aeb043d, 0xecf469bc, 0x50fdba04, 0xcf834be0, 0x37154997, 0x65e3dc22, + 0xb23fad03, 0x13b42122, 0x6067dfd6, 0x47ff88b5, 0x39aeec1c, 0xae5fecf0, + 0x218cc7ba, 0x3a424d30, 0xdaf38588, 0x48b57103, 0x1bb43f37, 0xb1e57474, + 0xbdfe091b, 0xfb8b5626, 0xf4257ca9, 0x3fb51c57, 0xf1fab56e, 0x897695bb, + 0xdffc43be, 0xab67f88c, 0x8f6c3be8, 0x197f1674, 0xb5df6a7f, 0x97a27b62, + 0xf0a9fc8d, 0x2ea9bf7d, 0x6fe2077e, 0x8c0d1e88, 0x67d8b1e8, 0x101d3842, + 0xc680e27c, 0x9ccd9a27, 0xf9f6284f, 0xe07ca0cb, 0x5acf62e3, 0xf22b1380, + 0xa8fa402e, 0x455e34ff, 0xd3e378fa, 0xb7f878ff, 0x63fa7f50, 0xfa866a93, + 0x80334885, 0xe7120387, 0xe2dbc12f, 0xaef0d3d9, 0x8e31b61e, 0x5c6fbf5b, + 0xeefd0828, 0x1fd53283, 0xf538d1b4, 0x8b2dfe89, 0x17fa9fa0, 0x99403d53, + 0xe86365ec, 0xbeb067b9, 0x34f3ce3b, 0xcf1f5bf4, 0x40feb4e9, 0x40ff7d26, + 0xc459ff9c, 0xf439864f, 0x1f229f93, 0x79ecc578, 0x59a71e1a, 0xffce3178, + 0x849c4774, 0xbae38eed, 0x7509e092, 0x0babae12, 0x2efbe3c6, 0x777c117d, + 0xaf8d35a2, 0xc4e9c04b, 0xe74489fa, 0xbc7c8c9b, 0xda897ee0, 0x66fa371f, + 0xf8f943a5, 0x159e254b, 0x33e03550, 0x9f404d85, 0x7eee4781, 0xac624d8b, + 0x476ea0c6, 0x0983b138, 0x1f0d5f34, 0xaa4b0d81, 0xf4b03eb0, 0xdf909bc1, + 0x916fb68d, 0x3e28b37f, 0x3922cfd8, 0xd6b63fb8, 0x618477e6, 0xf1aefedc, + 0xdd6a991e, 0x0fa07c80, 0x67db6f3b, 0x748d70e4, 0x5eff691b, 0x5eb8ff68, + 0x13cb9ca5, 0x7c00271c, 0x89fb6996, 0x59546cf8, 0xf80ca91e, 0x0e06f583, + 0x62bc11a4, 0xf9b1afeb, 0x6aff218f, 0xef8ff47c, 0x46f8232f, 0xb6b1cf88, + 0x7d67da54, 0xa47cef46, 0xb08cc75b, 0xee8a3aa9, 0x027dc73f, 0x5ccc6a4d, + 0x361630ce, 0xf5b177e1, 0xba7a15e5, 0xb1119ed7, 0x9c3d6c5f, 0x37af0f5f, + 0xb374fd88, 0x15d2e519, 0x172cca7c, 0xfb1582e5, 0x2bffa957, 0x6a9b0e3e, + 0x60fb9ca0, 0x3c58b4d8, 0xbc009f71, 0x775816c3, 0xf11b16df, 0xf6030403, + 0x232a78b3, 0x6658b7f9, 0x7c5296cd, 0x02f676af, 0xe4be4e5e, 0x15f5f4e0, + 0xbde00540, 0x66768980, 0xbe0162d6, 0x29668bf4, 0x0b76816c, 0xc6779b36, + 0xf6bee1e5, 0xe7c436ca, 0xa5f11293, 0x0ad3cd05, 0xe97940b7, 0xff084bde, + 0x5d395389, 0x48390d2e, 0xf8215dce, 0x64398d5d, 0xfc1f7052, 0x0fb86244, + 0xec66ffa0, 0x4a3e1ebf, 0x070e1d2f, 0x7a3ad3e4, 0xf3954508, 0xce0edfa1, + 0xe7f01927, 0x0fe6bc41, 0xcbe46ff1, 0x5fd9efba, 0x08fa7acd, 0xf085f26a, + 0x9b4e8b04, 0x9f10c97d, 0x97c932fd, 0x353e20e5, 0x0bf10d26, 0x6872e4f8, + 0x6d70448f, 0x1f244d60, 0x383ebe34, 0x270b90ae, 0x3f9720e5, 0x2cf48de6, + 0x78d1e471, 0xc907594b, 0x8c4e4d07, 0x8e250746, 0x5283a66f, 0xf5f54a87, + 0xd5f0b31f, 0x83fd5e30, 0x8930dc2c, 0x48936d3f, 0x67b971de, 0x9f0f72e1, + 0xff2017f1, 0xac5de562, 0x6b958b7c, 0xbf2e2669, 0xfa6b3c34, 0x2e74da49, + 0x3078afd7, 0xdf583324, 0x97d79b39, 0x4f48793a, 0xb163bc09, 0xd96297a8, + 0xdda1f2c7, 0x57b4db51, 0x809f005c, 0xafb8bcc2, 0x3b2e0012, 0x7193fde0, + 0xfffd882c, 0xdee9c5c4, 0x6bf4e26d, 0xc4ac7c54, 0x09e9788a, 0xa92f101b, + 0xa8f48ecc, 0x1b49f3c1, 0xdf8a577c, 0xf8337971, 0xc73585bd, 0x715f7d47, + 0xeaf88e20, 0x90b6fdd9, 0x7f0bf499, 0x73fa03ae, 0xbd2667bd, 0x8d80ffb3, + 0x91bf63e4, 0xf680ebcd, 0x892fd44e, 0x3e73565e, 0x8c9d7880, 0xc99154d4, + 0x1ba5f690, 0x6a059132, 0x838356fa, 0xf5c34deb, 0xd79f511b, 0x2ba72b73, + 0xf1fc8ab3, 0x7ef7a3ac, 0x587cc32c, 0x0877ca10, 0x4ef6073c, 0xbc21f92f, + 0x1eacf80f, 0x097f7d0e, 0xfe59abd2, 0xa016adfe, 0x83f259af, 0x1d600791, + 0x3b56d90d, 0xb919b9ca, 0xdb87fdff, 0x5ec9fca0, 0x9e233323, 0x8f3e9e9f, + 0x7fce8fe5, 0xe3c642eb, 0xe5fb51bd, 0x72faddee, 0x1cbe8743, 0x5797d4e8, + 0x93ce6c3a, 0x78778913, 0x9b5d03ce, 0xef1f4dcd, 0x5f9af980, 0xfa3c9336, + 0x06bfc39e, 0x21a353f7, 0x6ce10472, 0x926cfdce, 0xeba0e91f, 0x669f0973, + 0x629e9da0, 0xd7dc7f0e, 0xe416e367, 0xdb8047da, 0xc598fc10, 0xed067040, + 0xcf893f9b, 0x713ec405, 0x1c9fbc9a, 0x9e2ff582, 0x495f6f13, 0x9355bc6f, + 0xa43f51cb, 0xe6c0b239, 0x26913feb, 0xc43abb51, 0xd0d9c9ff, 0xbb55e60e, + 0x7ac3cb99, 0xfb8893d6, 0x48f411b6, 0x98f8a00b, 0xcdddc3c0, 0xfc30f291, + 0x72b93db3, 0xf953ce3c, 0x7d21f15a, 0xa37ec1ac, 0x399fdef4, 0x7bb81cb8, + 0x4fbd9c77, 0xae874707, 0xb74ce81c, 0x3fef45f7, 0x96587fc1, 0x37db44a4, + 0x9ffe481f, 0x2c1afc21, 0x3069a6bd, 0x7f5fb5fe, 0xc97efc41, 0x0bb26ab2, + 0x3364f486, 0x0f25a7f1, 0x6bfde9f8, 0x405bae5b, 0xa712dbeb, 0x3e4fdc22, + 0x2fbd1129, 0x2c86b2c9, 0x1d6bcff0, 0x025e7f5c, 0x70d249df, 0xedc2c638, + 0xb9d76da3, 0x623e8e91, 0x0760bc7c, 0xb23e3fd7, 0x780abc03, 0xa3efec1b, + 0x25c7d04e, 0x9f75f384, 0xf25c5f20, 0x3d41eca4, 0x3cdb7581, 0x67961963, + 0xc5645f8e, 0x4ca4cefe, 0xdbedf683, 0x7a65da67, 0xbf90fb2f, 0x73d81e81, + 0xb657bc2d, 0xee3d214f, 0x3e6693f0, 0x19e5874f, 0x5fb5c75c, 0x14afb4cb, + 0xbea3f303, 0x8ef26edb, 0x6eacfdc7, 0xe2167a7b, 0x19d9a3e5, 0x82ff6a06, + 0x0f08ecc4, 0xbe1732c7, 0x3e29225f, 0x9bb5bfdc, 0xf5a2aaeb, 0x2643809d, + 0x7dcb4efc, 0xa56bd5d0, 0xca2b74fd, 0x612786d1, 0x73f8e0ff, 0x6dc3fdde, + 0x74fde8ce, 0x4433395f, 0x3bedbf7d, 0x17f84f44, 0x112d7806, 0x7dd8baf0, + 0xf6d04e65, 0xf2215345, 0x9b2b25d1, 0xe823ed0a, 0x62fb8315, 0x6787df1b, + 0x6f3b121c, 0xd64a3a40, 0xd9a30dd9, 0x0322d659, 0x878b15c9, 0x67869f79, + 0x68b9981a, 0x1593bb4f, 0x4d9337ce, 0x4fe51f04, 0x0dfeeef7, 0x8729ebac, + 0xf7864a5f, 0x825bccb9, 0xf6235778, 0x1163500a, 0xb177a4c4, 0xc7ae666d, + 0xde8f5c2a, 0x599eca94, 0x3b5f651b, 0x17c07f45, 0xfe9fb1e2, 0x411d5f63, + 0x7ce636b8, 0x83f50936, 0x4c2fb9c0, 0xdad7ac2a, 0xb73f1125, 0xe90c7c7a, + 0x9b35d025, 0xe21e2c2d, 0x970f01c3, 0x5aebb113, 0x97edcc90, 0xfd423380, + 0xf7c298dc, 0xd383bb6f, 0xf165d6e7, 0x5bafe421, 0x9c38a19d, 0x4fbadff4, + 0xcea97d35, 0xd96cf1c2, 0x8caf73f5, 0xec921df4, 0xf2acb163, 0x3b5031fd, + 0x38c3243f, 0x082aec9f, 0x34ef7952, 0xd6750c8f, 0xc96e3f5d, 0x1a753847, + 0xeaded83d, 0xf5c44de9, 0x44ebb27d, 0x76afae22, 0xaeeb4c97, 0x5aee7d0d, + 0x17c43c54, 0x4bf92b7e, 0x2ecc5e10, 0x8d7c7159, 0xebb27c3f, 0x95a16b8c, + 0x3f24ffdb, 0x4b8646cb, 0x795a639a, 0xdae1c032, 0x3e5e386b, 0x421cc17d, + 0x1c69f7be, 0x7e28b7c8, 0xcb8da9fb, 0xcd64cabb, 0x41c8eb5e, 0xbe583379, + 0x7c80c8b3, 0xbe76fbe2, 0x23a9a77e, 0xffe3f707, 0x967efa48, 0x085818b6, + 0x0b5d7b78, 0xd1f80680, 0x22fdcfa7, 0x27fdf907, 0xa722ff4f, 0xb17e6a3a, + 0x39cf69df, 0x6cbec2c9, 0x816bc27b, 0x3699aaf1, 0xc70b385e, 0x3f98f6ab, + 0x5ac2fe40, 0xf7077a66, 0x467f3e4d, 0xbd9b67b7, 0x3c0707c4, 0x50e91566, + 0x36a06efb, 0xedfa8bde, 0xff10b300, 0xc392eeab, 0xebcfec66, 0x3b44e31d, + 0xa63efb46, 0x9e824dff, 0xfc894ea4, 0x11c50901, 0x377fc7e2, 0x3e0277bf, + 0xe03df8a3, 0xf8992539, 0x2648e47d, 0x2130fa23, 0x568d4cdc, 0x6b93e505, + 0xc8afa715, 0x57640c0f, 0x56dc3299, 0x16d767e4, 0x601b37c6, 0x13e33a23, + 0xafd03127, 0xa88a33b2, 0xd382b07d, 0xc8c5d07d, 0x9ace967f, 0xf6d7e224, + 0x64f7f25e, 0xb5f6654d, 0x99297c50, 0xe66ea9eb, 0x10172cd9, 0xf7f425de, + 0xe4d0f068, 0xf20fd202, 0x0b254fc7, 0x25d48fd1, 0x1b29de91, 0xbf63e63a, + 0xa3d3d1a3, 0x3d053e1a, 0x49ff960d, 0xa34db4f4, 0xe4f461df, 0xdc9e8957, + 0x49e99196, 0xd4dfd895, 0x687d059e, 0x7809a6bf, 0x4ef8223d, 0xee1607e4, + 0xe19002c7, 0x7f44ab7a, 0x586b1655, 0x31e1f946, 0x651bd67e, 0xfd036ccf, + 0x74a4ed17, 0x99e1dfd4, 0x4a816ab9, 0xbd3d6378, 0x98482fe8, 0xf8f92162, + 0x0f27a1b0, 0x09b495f5, 0x2e907b4d, 0x9717e6d2, 0x2ffb22ae, 0x00f281cb, + 0x6df92b65, 0xfaf85596, 0x85f4a252, 0x34cf6e6e, 0xf7a5e03e, 0x7eb8bbd3, + 0x22631810, 0x29d0387d, 0x8dcf1105, 0xf508533e, 0xfb8956a0, 0xe3eb8257, + 0xb48bf454, 0x4815d43b, 0xaeffed3f, 0xb46a827a, 0xfb77b73f, 0x6ade910f, + 0x68f7e4ad, 0x2cb68477, 0x14b776c6, 0x7f7dbb53, 0x63f8f995, 0x5edf8d19, + 0x7c7a41d2, 0xf72af5fb, 0xb5fc08af, 0x3ba6f6cf, 0xd1681f50, 0x1df6e7ef, + 0x7864f4de, 0xc003603f, 0xebd578c0, 0x190f08e2, 0x4b338732, 0x33f970b2, + 0xdf902f9c, 0x205535d8, 0xd209eda6, 0x39f70677, 0x672c0a70, 0x3cf6fa88, + 0x61e60718, 0xa1e5f62b, 0xe3733de6, 0x03c46fb3, 0xefd0babd, 0x20b28dc6, + 0xefe4fdea, 0x077265e5, 0x89806e3f, 0x8aed6064, 0x8aae33b5, 0x43f68b2a, + 0x9c6fdbdf, 0x77724591, 0x0da71eb0, 0x7b2b58f2, 0x6b5e60e3, 0x0af5436c, + 0x4e96bbe8, 0x3c1f7f89, 0x104cc378, 0x369203d1, 0x2f568afe, 0x98e2fffa, + 0xf9e8bc6e, 0x1bfd3129, 0xaaab7fa1, 0x3959dfb5, 0xb7cc0c73, 0xd57f2b54, + 0x3df985e2, 0x47f7d462, 0x63df1520, 0xf7ef1b41, 0xd76b55a9, 0x05e90d65, + 0x529827a0, 0x83f48752, 0xb556ef35, 0x25630a5d, 0x5098cfd8, 0x3e726aee, + 0xff4894e0, 0xeeafdd88, 0xfe1fce14, 0x0eaabe6e, 0x29dda3d3, 0x9e8f4993, + 0xec125b85, 0x81dbe20f, 0xf50c7d07, 0xb247d039, 0xf91f4852, 0xa821e4ec, + 0xe7f39fef, 0xb62a9923, 0xea3e67bb, 0x0a7381bd, 0xb7606dd1, 0x6e80921c, + 0x80bf622d, 0xbf3f271c, 0xed4b4f46, 0x411d4e82, 0xf68b7186, 0x9072696e, + 0xe729abe8, 0x8ae5c016, 0x1a38ef14, 0xb195d847, 0x70a6f6eb, 0x545021fb, + 0xfb10a5b1, 0xd43125df, 0x1d16d613, 0xbb242d77, 0xa2d703e9, 0x3aeaefa8, + 0xd678271f, 0x088e36ed, 0xd70a6f47, 0xbff71b6f, 0xf1be45e4, 0x9e224869, + 0x5a84ab50, 0x6d7280af, 0x413501ad, 0x705a1656, 0xe62dc51b, 0x5858d899, + 0x39ca215f, 0x9beec79c, 0xbae05783, 0x5e093fe1, 0x262df56d, 0x9e75ba79, + 0x9f714ac5, 0x087beaa2, 0x2f78f60e, 0x516d61c2, 0xd38e3a45, 0x9d967b38, + 0xc7a01de2, 0x03e37d61, 0x485f93b7, 0x4edad79b, 0x39ea2563, 0xfdcfa0e5, + 0x9d9de61c, 0x07a5437c, 0xbca671f6, 0x283ee4a7, 0x8f851a6f, 0x7ce4e7bf, + 0x05f259bc, 0x7e465bbf, 0xd7ed1650, 0x7ae4edcc, 0x9314bce3, 0x2f3dafce, + 0x57b3eb85, 0x23a67b05, 0x7a541cf9, 0x0e9f5013, 0x68e7ef30, 0x559f333f, + 0xc4f09a7d, 0xb97391f9, 0x8b31fe4a, 0x4be1f7b3, 0x852afeb1, 0xf4a617ec, + 0xf6e3863e, 0x6b3d3ab7, 0x5807d899, 0xec98a07e, 0xfc53d79e, 0xe5bf108b, + 0xdfed4f42, 0xfa095d7f, 0xabbd3511, 0x685b69f5, 0x9b53f225, 0xf22568fa, + 0xc4293fd3, 0xd2259927, 0xa9fa1d33, 0xf5324bfb, 0xdfc1207b, 0x1adaf484, + 0x3a456a17, 0xa990ee08, 0x258e739d, 0xf27cfd8c, 0xea076d8c, 0x1b674697, + 0x73063a43, 0x1625fc85, 0x50a98fa7, 0xa05c1e9e, 0x622f2848, 0xe8e999f4, + 0xc57b22af, 0x0adafe49, 0x02c63fb1, 0xd0b49c15, 0x9f3e6856, 0xbcdfa432, + 0x055cd5f1, 0x8f7a6a5f, 0xe7fdc2c1, 0x33c5e633, 0x8ead9f1c, 0xbfa0311c, + 0x50c3d9de, 0x90e86e0f, 0xa2869c68, 0xb7684d17, 0xf7c1dddc, 0x19d84077, + 0xd41cbf00, 0x12535a2b, 0xccd97e84, 0xe7ac1cfd, 0xf9c22648, 0xc64f8e79, + 0x7f945da0, 0xe70e7615, 0x933fa207, 0x08343388, 0x424812bf, 0x68a7e7ae, + 0xa14aeb7a, 0xa7f1b46f, 0xd4937718, 0x9e1195e3, 0x1fce9225, 0x227f3dae, + 0x357a4fbe, 0x6ff70b32, 0xfd0be804, 0xd9a45b4b, 0xd612fcf7, 0x04f265b7, + 0x6e60aa0f, 0x14b92720, 0x022903df, 0x3f3acbdc, 0xc374859f, 0xd7ed192a, + 0x7269cec6, 0x63c79583, 0x4b485f50, 0xf581da68, 0x91157769, 0x08f8c67c, + 0x08f655c6, 0xb95ba6b8, 0x32bdcebf, 0xcbf18798, 0xf77d57a4, 0xbfc712fc, + 0xadfc9e24, 0x5b1b8069, 0xd05b3d32, 0x2566e5bf, 0xbafe5087, 0x9c52d4ab, + 0xc3a7168f, 0x62ecdf38, 0x4e54e3e2, 0x9dde48f6, 0xc5397cf0, 0xfb02eb41, + 0x8be712ae, 0xa1d643ef, 0xedfa21b8, 0xcb8c5c70, 0x3d3fb3e1, 0x1f9f90ac, + 0x48d3f9e4, 0x3b669da7, 0xf3aaabc2, 0xde5077f5, 0x07585956, 0xf46351c5, + 0x6f13db96, 0x3ff48c3e, 0xf6e4ea70, 0xb75e7087, 0x09f8f3ec, 0xe47d7a3f, + 0x5eb86bda, 0x09d3e9fe, 0x3b91ea2a, 0xfd06df05, 0x5e5fc791, 0xac6476e0, + 0x8a5ef91e, 0x2c1c8f5e, 0x48f5c3ff, 0xcc20bf3e, 0xfe28e9ef, 0xdf76101e, + 0x44e9ed40, 0x0d1f5f94, 0x7fe407ce, 0x529e90f9, 0x03e12bbd, 0x768367dc, + 0xa23e8c45, 0x1ff1e0ec, 0xdf126b0c, 0x5c449875, 0x805eebcb, 0x21470ffe, + 0x9e379ff1, 0xdd220849, 0x2388ee9c, 0x98714cbd, 0xe6af38c2, 0x8321cc97, + 0xc0507c84, 0xabc45bab, 0x960e224c, 0x42a2a85c, 0x23e4cfb1, 0xd17c1fbe, + 0x8955e3c8, 0x819ee7a1, 0x74c1fd72, 0xd462cf11, 0x027f707f, 0x5e3ebbc1, + 0xebfec24d, 0x30c2957f, 0xe300354e, 0x881f9e21, 0xc9ce4bf3, 0xfde2d718, + 0x2acc57b3, 0x0b859f8f, 0x1d87001d, 0x9dffae21, 0x4d843228, 0xa81deeb0, + 0xebbf602f, 0x5f16b8b4, 0x4cfac0e7, 0x6541971e, 0x56b2ed04, 0xd1aa2fee, + 0xb90755e2, 0xc446ae1f, 0x59cc4ea5, 0x468614fc, 0x4aa6a59a, 0xaeced3b4, + 0xf3fe469d, 0x4d9d1ffb, 0xbd169acf, 0xfa317fbf, 0xe2860be7, 0xbddf9ac1, + 0x5c4c799a, 0x1ff21e7f, 0x519f401a, 0x940a945b, 0xbecc799f, 0x1a81e512, + 0x814dec04, 0x513c3367, 0xca009789, 0x75694ed0, 0xd7be23c6, 0x6e481b34, + 0x5e0d9b05, 0xcbd1a76c, 0x672e4e25, 0x9d82a267, 0xc210244a, 0xb367b471, + 0x441bc451, 0x21982b7f, 0xc4834f8c, 0x4aec6b9f, 0x5bf248e5, 0xd8d9afeb, + 0x7a869964, 0xfc81b673, 0xde4d67dd, 0x4e2fe479, 0x353c242e, 0x2a5a9adb, + 0xa5ed3d79, 0x1f1171b3, 0x70ad5fd5, 0xc9a992c5, 0x9c0b4fc8, 0x0b10be3c, + 0xfa6d45b7, 0xa61c6c72, 0xd72fa42e, 0xf4b8ff30, 0x88371e02, 0xe4e05f7e, + 0xdaececfc, 0x8f6f013c, 0xb6aef909, 0x1c5915fe, 0xfe6c866e, 0x98aecfcc, + 0xef907487, 0x461e5130, 0x55fb83be, 0xff342561, 0x129dabfc, 0x7ccc47d1, + 0x9e9c1d9b, 0x0fdcad82, 0x3fceb7f9, 0x71dfde76, 0xf0dc84ba, 0x596e31ba, + 0x1c513763, 0x25fd42fa, 0x5f3d4e8d, 0xe3ff2c1a, 0xcf6e5bed, 0x5f22cab7, + 0xa97c4ec6, 0x72d7ceda, 0x133cf242, 0xd056f7c6, 0xad1d701b, 0x91f22972, + 0x695b37e9, 0x81078d1d, 0xeb1c608f, 0x941cdec1, 0xbd158deb, 0x89af1885, + 0x56ce2f85, 0xb419f8d1, 0x3d8276ab, 0x8b437a82, 0x3c371e3e, 0x855deabe, + 0xc371e27c, 0xa3af3d89, 0x4713dafc, 0x75fe0bf2, 0x7ffb8cc8, 0x35f11e7f, + 0xb0ffcd87, 0xf8cbf513, 0xf367f6f0, 0x7ae18f50, 0x79974354, 0xd589ea07, + 0x3df151cd, 0x7d3adffc, 0x24b58fbc, 0xb59ddf93, 0x6ed7dfeb, 0x586ef98b, + 0xf08daffc, 0x1fe4c9b2, 0xe41dfb8f, 0x9c1de510, 0xc43033aa, 0x59ec8d6f, + 0x54ea428c, 0x3f3f5e9c, 0xfaf8e365, 0x5fa6a70f, 0xcf110a78, 0x7861e583, + 0x9e2214f6, 0x1fcc0c6b, 0xe2034fdd, 0x2f5bf019, 0xa5ea7cf0, 0xe7888529, + 0x294cf6cf, 0x326f3c44, 0xdf7179b6, 0x7ffbb3ac, 0x9be9f08a, 0x0afd23e9, + 0x1f7071f3, 0x863d285d, 0xe9c9e707, 0x3cea3c31, 0x96fe31ff, 0x5be3e4d1, + 0xcbd0f383, 0xcd49a747, 0x6d507e42, 0x9ca37f31, 0xfd11bfc4, 0xf9331679, + 0x757e0e3f, 0x63e50366, 0x9fa4c974, 0x541dfd68, 0x1fa805fc, 0xedc77c1d, + 0xf7a34a09, 0x73b09f7f, 0x441616dc, 0x17668b3f, 0x2c65fa68, 0xfb15ee3f, + 0xef4e8ffa, 0x0efe5377, 0x1ff354fb, 0x96368ad7, 0xf7ae19d0, 0xdc3c92ee, + 0xfe41dc7f, 0x05eec6e4, 0x7f17f476, 0xe3fee21c, 0xc84a97c6, 0x7a175c7f, + 0x61f98c2d, 0xa3b24bac, 0xebb7523d, 0x03cc4483, 0xb05eecd0, 0x293acf73, + 0xff6f46bf, 0x913a1c7e, 0x30037988, 0x3f511bef, 0x4c46704b, 0x608df748, + 0x525831ff, 0x823912a3, 0x193a36fd, 0x9d6505e9, 0x8b507b7a, 0x99f56eef, + 0xed6eef88, 0xafc84292, 0x5e7f265d, 0x9635ca16, 0x30993f65, 0x5494cfb4, + 0x6a6a416f, 0x6bdd5c74, 0xe6b038c2, 0x92ddea7f, 0x6bdbf444, 0xf23b5e64, + 0xc1362db3, 0x6fe214cf, 0x84736e5f, 0x0de946d6, 0x9eb8865f, 0x77e5a750, + 0x00ac2c29, 0xf5cf16be, 0x237c431e, 0xf0c70fbf, 0x16b2e8fb, 0x859bbfaf, + 0x60352e49, 0xf3c89386, 0x1b176e8a, 0xb838c7cf, 0x54d61fae, 0xec9fa2a2, + 0xe287ab4e, 0xcde79d5c, 0xb720fafa, 0x2c3f619b, 0x5fa21d2b, 0xfd1a0f0d, + 0x747f0a36, 0x6af8f6a0, 0xa740dfa4, 0xbafb4764, 0xb7e9c3de, 0xf32fec1e, + 0x9dfbe1a4, 0x46fd0075, 0xf6d1bbf1, 0xbf5537bf, 0xffcb07ff, 0x8deb7f24, + 0x58bd7aa9, 0xbfe6bf5b, 0x97675c1f, 0xcc65f7c4, 0xd6ed62ba, 0x66bbbf58, + 0x3f285e77, 0x47818eac, 0x3c32fff5, 0x8d87e346, 0x43f1a3a9, 0x6fe35c7d, + 0xcbff87e6, 0xbaa78df1, 0x0034489f, 0x0bcba8ab, 0xe75eb9ba, 0x678bc5d5, + 0x8f2f56c9, 0x9f3cca9b, 0xaeee3622, 0x777112ce, 0x7b5f9fbe, 0x357c2649, + 0x4370f888, 0x4d83cdb7, 0x284bad6b, 0x3f1b1b3e, 0xccf6ca5d, 0xc6c51442, + 0x1f71eb51, 0x3c7b7c17, 0xc1d489f5, 0xcc3c853c, 0xd3cd8853, 0x267acd7a, + 0xef851fc5, 0x0430628a, 0x8b6ba046, 0x51c96412, 0xe54e9fef, 0x226bf4fa, + 0x626dc89f, 0xf2a7982d, 0x8bc12d88, 0xc0db8c76, 0xa4569df3, 0x7e459ef8, + 0x3c055168, 0x198f7ff7, 0x194f2e00, 0x049f883b, 0xe41eac1b, 0x471f9a7f, + 0xfc20dfeb, 0xe74a1711, 0xf9d0c4af, 0x7de4ff2b, 0xefb6a6ff, 0xddb8d6ff, + 0x6e8d8066, 0xdfa2303f, 0x94ce30b7, 0x476e9c37, 0xfa3467eb, 0xdf54effd, + 0xfd72a57f, 0x2be5127e, 0x497f205f, 0x409c8b28, 0x6bdb117f, 0x89bfd156, + 0x8b9212fe, 0xbd85d2eb, 0x4d9f29ee, 0x729ed679, 0x1f7b17cc, 0xe8f979ff, + 0x41e9e3fa, 0xf1fd70fc, 0xf9f8a8f4, 0xa5c7f4fb, 0xb817df76, 0xde69bece, + 0x6b6f9442, 0xb47f306c, 0x79e39f0b, 0x38e2db46, 0x38936e7d, 0x2965b25d, + 0x8977e417, 0x9bede977, 0x993ff2c1, 0xff5cba7f, 0xe7f9fe2c, 0x8ea3f444, + 0xe4504fde, 0x4578f67b, 0x8ced8d3c, 0x7a076ff2, 0x38debe78, 0xbded2701, + 0xbdc7f62c, 0xe6116f2e, 0xcc767dbd, 0xa0496162, 0xbe7194f2, 0x52b3e8d8, + 0x83b1a17c, 0x3e34bde7, 0x377f88c8, 0xe514ffa2, 0x866ce747, 0x0e53defa, + 0x326ba97f, 0x41ac55c6, 0xeefd0939, 0x77ea1873, 0xf978c7fd, 0x397f0e7b, + 0xec1e07d6, 0xfb4678a5, 0xef294f9c, 0x99fcfcaa, 0x346595d5, 0x3823f25f, + 0x36ab3e45, 0x1e2e05bf, 0xf39ed07f, 0x25ede107, 0xb567febf, 0xe03b3f3c, + 0x1fd1daf4, 0x13c5f9a1, 0x33f21ed4, 0x4ae5ee35, 0xd7ccb95b, 0x45987ec3, + 0x77b8d4f4, 0x4ffa095a, 0x095c4759, 0xefe5b9ea, 0xfbdec959, 0xca0c81ec, + 0xc53d7893, 0x87841dff, 0x3d742cad, 0x30b9a5ea, 0x9fbbea0e, 0x04beb9ed, + 0xbff1ade7, 0x873fe84d, 0x7a6c9bf6, 0xf0b338bf, 0x67baf9bc, 0xf9ff3533, + 0x26dfd8ad, 0xb5990fb1, 0x08f67cad, 0xefdb5efb, 0xfa81b269, 0x42c3bb4f, + 0x1f8d7271, 0xbf32326c, 0x8f8860a5, 0x09f22d5c, 0xcf914e03, 0xe79b35d8, + 0xd5b288a7, 0xfcebcfa9, 0xd5e673a3, 0x5dab8788, 0x85e5c5ca, 0x09e58759, + 0x1798bf50, 0x6039f686, 0x092cfc94, 0x9cfeb8e7, 0x1d11376f, 0x51bf60d9, + 0x08e8067c, 0x22abf8f5, 0x6093d33d, 0xc3da639d, 0x0f7c2157, 0x9e10339e, + 0x516fd994, 0xe249267c, 0xebac15e3, 0xfe871d6d, 0x57dbfb17, 0x36d52a23, + 0xfa86057b, 0x82f8729e, 0x37a7f22e, 0x1578e115, 0x3cf237bf, 0xf204eeca, + 0xd4e7b42b, 0xff651e53, 0xb9dd66bb, 0x9067d89a, 0xc9bca4ad, 0xa4ffcefc, + 0xaf6d8138, 0xec3e6234, 0x1e565c8f, 0xccf60abf, 0xab9adca2, 0x955fc49c, + 0x3e28f7ee, 0xc82ab4ad, 0xd1b35879, 0xfe43886b, 0x9f9182b5, 0xddbb6c73, + 0x15caf880, 0x07033179, 0x4fc932ff, 0x17168a76, 0x26bcf108, 0xb46aef63, + 0xbd1594bf, 0x1f1104d7, 0xc6861d7b, 0xd22fec62, 0xee967e48, 0x3e7c8604, + 0xe560b3b7, 0x6dce5095, 0x6c1c53b1, 0xb9ddc0e0, 0x758557e4, 0x9d611d8e, + 0x879e2ecd, 0x182774a4, 0x1b298e50, 0x55470799, 0x9a0aae1c, 0x8650e3f7, + 0x8b9ffe7e, 0x371699d3, 0xca13ff45, 0xfe5d7ba7, 0xc1dfa40e, 0xe2cb44f3, + 0x852279f9, 0xcb6c49fb, 0xcf017dde, 0xe7176ce9, 0x383d5e34, 0xfbf90e71, + 0xf109155a, 0xf3c1d670, 0x3ec4bb28, 0x57ff0e1e, 0xbf355f29, 0x3cb93ffb, + 0xff603983, 0x8bd3918a, 0x81dcead2, 0x36a3c57e, 0x5ee7e53f, 0x29961cdd, + 0x7bef666e, 0xb28d52ac, 0xf973366f, 0xdb9bb8d2, 0xccf6b1e3, 0xdf95c9b7, + 0x2e17f20f, 0xffcb0657, 0x37a57d24, 0xcdfc9e46, 0xdbd30a76, 0x4b7ab177, + 0x4c373dac, 0x6fe98eff, 0xcb45fd34, 0x1a18a943, 0x36d1eb87, 0xea0a3f4d, + 0xac2a74f2, 0xd1665c7c, 0xd933bff7, 0x7917fbce, 0xea55ae3b, 0x8fcfcc0a, + 0x3f233bfc, 0x143f969d, 0x3e79e0ac, 0xc3f00341, 0xb5378c3c, 0x2650de51, + 0xf9124b0b, 0x7e197ad1, 0x43f98697, 0x5729ddf0, 0x49f1c13e, 0x899169e6, + 0xce12aa5f, 0x4ef30e3b, 0xb4354f28, 0x738e3165, 0x89c6958b, 0xcb93bcc3, + 0xbbc07530, 0xf4ebf905, 0xc8571e5a, 0xf48c3900, 0xd386319b, 0x9e3cdc61, + 0x97e5a27f, 0x1a20f968, 0x7c042a1c, 0xce2dc633, 0x2ad83e43, 0xbd439ff9, + 0xf0e255a7, 0x7ee7ae09, 0xe8077685, 0xaf6e50d5, 0x7ff9409b, 0x1ff78c03, + 0x5d1035ac, 0xed81f96a, 0x0e7e5563, 0xbcfcafe8, 0xcf097b5c, 0x97961937, + 0x2d570312, 0xd12b252f, 0x752d363f, 0x96a23ce8, 0x49d1a247, 0x7182fe14, + 0x6ed6de30, 0xd457cfae, 0x031d689a, 0x3f903775, 0xc0cea072, 0x7457ee50, + 0xc5dd3999, 0x9e75b78c, 0x5fb18589, 0xfc871425, 0xb7ffc353, 0xd780b3e9, + 0xbef7f422, 0xb2f2bcba, 0xe1f1803e, 0x0e7a3ee5, 0x321d49c4, 0x45c4efe6, + 0x72a713e6, 0xb951beef, 0x226cf31c, 0x8c901239, 0x5563cb6d, 0x8185c80a, + 0x58fbc8d4, 0xcddcdcce, 0xdb2363cb, 0xe25f6825, 0xf6a2aaae, 0x8c198b48, + 0x5bc278cd, 0x845eb415, 0xc58afbbc, 0x10f86fe6, 0x77ac0dae, 0x89f90f75, + 0xe32bbc84, 0x30cd90fc, 0x4a9fb887, 0xd1d97f25, 0x03d23cf4, 0x7bf945ac, + 0xcb3eb07b, 0xa835fe4c, 0x3a3f7a27, 0x57af1a76, 0x9659de39, 0xb071e78d, + 0xb3f220de, 0xc8d379a3, 0xfb80dd4f, 0x2fa9f401, 0x1a7f7ead, 0xd494f3c0, + 0x83ee3f73, 0xb5ff33a3, 0xd4fbe918, 0x418e1fbe, 0x099d737e, 0xf811f4f4, + 0xe73759cb, 0x6b46032f, 0xbcfd048b, 0xe1d7f564, 0x9849de3a, 0xcb530b3f, + 0x334ca5e7, 0x160251e1, 0x5a664e7c, 0x3bde0208, 0xd1fd72e6, 0x6127c331, + 0x38aae81e, 0xbf548f3e, 0xc67d25e2, 0x05ba573f, 0x124abfd6, 0x93530dfa, + 0x52290ec8, 0x5fbcf093, 0x2a3738bd, 0x797cfd8b, 0xf51946c7, 0x7f2ddfe7, + 0x19454ae7, 0x1cdf2e5d, 0xcf686f63, 0x8ebe3496, 0x097ab239, 0x296ac7d2, + 0xcbaaebfc, 0xef4abdf1, 0x2b2e2667, 0xebe9fcc3, 0xd0ca9a12, 0x7dec3a7f, + 0x8e2fbc12, 0xbb799b2a, 0x47244b7a, 0xc4f67a01, 0x5c21d7f9, 0xe0f82ece, + 0xf7bfdc7e, 0x1f7d1c67, 0x1a8e17f3, 0x96ce3ec5, 0x7db07f84, 0xebe0227a, + 0xe4438148, 0x7f08585f, 0xff71c647, 0xd97e60e0, 0xedf28978, 0x73f2e6aa, + 0x9eb2379b, 0x9ef85ee6, 0x3f50089c, 0xe91e6a6b, 0x1f225579, 0xbe3bd662, + 0x67d7b444, 0x20a22f7d, 0xcf83477e, 0xdaa36e75, 0xd7af451b, 0x8df2faab, + 0x77f2fa45, 0x77f2fa3c, 0x2e3d7ea7, 0x9c68fcba, 0xaba439f7, 0x8f9e2597, + 0xd99cbc19, 0x4a759f49, 0x262fd441, 0x9c4322fe, 0x8379e577, 0xa1ec21ff, + 0x54654c5f, 0xd96ddaef, 0x9afcf989, 0xf516595f, 0x92ccdd13, 0x20f04c9b, + 0x44911479, 0x6293a1fe, 0x3ddf6c2d, 0x855fee76, 0x67e826b6, 0xe29502df, + 0x81ab2eb2, 0xa1fb835d, 0xa1fb42cc, 0x8f12d33c, 0xa0aaf3f4, 0xb2fced3f, + 0x0ae58f46, 0x041e61f3, 0x9f173d0c, 0x43f68d47, 0x7e0e47e8, 0x17bce8c2, + 0xca14d363, 0x31631487, 0x4fca82b6, 0x557f3a08, 0xaeffd3e3, 0x697f7e10, + 0xe53e1133, 0x503bc95f, 0x06ec600e, 0xd7a7c3fd, 0x69f9a04d, 0xfd7608fb, + 0x49d90c18, 0x3157eb4c, 0xec8a24e0, 0x39d1acbc, 0x285da185, 0xa3e918b7, + 0xdb2cbc5a, 0x179df832, 0xfd174bbf, 0x71e06cdc, 0xe22e566b, 0x961ce2f1, + 0x5d4bd44b, 0xe909ffaf, 0x3cb48be5, 0xcc5defa2, 0x2af48bdf, 0xd22a3c9b, + 0xec3fb6b3, 0x575fe9ca, 0x0a7ae3a5, 0xb9eb407f, 0xf5c766c1, 0xe69cc114, + 0x9bd3d325, 0xa8fd8a52, 0x78e5a7c4, 0x95cdfdfe, 0xa254aec7, 0xdf7c23f8, + 0xd04fbfc0, 0xef86ef7f, 0x4fbea393, 0x878bef84, 0x9858cf7f, 0x98837390, + 0xdf220dff, 0x12cd9774, 0xfec24c36, 0xf85ed5cb, 0xeff1764e, 0x7bc224c7, + 0xfa451794, 0xd5360ebc, 0xe07ca163, 0xeb8e3c98, 0x71d307a4, 0x696f5cbf, + 0xfe85eae8, 0xb9f8175f, 0xc2ffe0ce, 0x9f5fef0e, 0xf718785f, 0xa425a555, + 0x8ddd1e60, 0x911abc2c, 0xffcd3036, 0xf680a394, 0xe01b827d, 0xc7fb28d8, + 0x94f94325, 0x3dcc6db1, 0xac2fb479, 0xe7c3c9ee, 0x5b5fe1af, 0xd201d207, + 0xc41d20d3, 0x17c35bcc, 0x1283a9bb, 0xfd049edf, 0x3e9a9f05, 0xcf1358c3, + 0x87b35673, 0x32c405d6, 0x0634d2cb, 0xebd789f5, 0xae0fc482, 0x79463c73, + 0x7f0cee50, 0xde77ce1e, 0x28e79fa5, 0x60bdd8d8, 0x30ebea1c, 0xcbfffcdf, + 0xdb7a6af9, 0x4fdf3cb0, 0xdf3cba4c, 0x368ff6d1, 0x31f5006e, 0x7781f319, + 0x606ede50, 0xe783d5ae, 0x77980233, 0x22f1465a, 0x480ec7d2, 0x4a0dcf5c, + 0x5d3fa116, 0xe3303e68, 0xa0c3567a, 0x67cba59e, 0xf3e12f6f, 0x2547bf6e, + 0x8965ed3d, 0x602e0fb7, 0x2d9b8f5c, 0xa9d917ea, 0x6f7bcb5e, 0x74fdc1df, + 0x538d2fed, 0xbfd05fb1, 0x24b38e48, 0x71e5dfa1, 0xb97edafe, 0x70720f6a, + 0x9435c933, 0xc8c9bda7, 0x06adc6f5, 0x95e5394f, 0xe2af4098, 0x9fce6071, + 0x63f1f2c6, 0x6ef579fd, 0xb06f3fbd, 0xe7f20ffc, 0x03fbb3ad, 0x8a8b5748, + 0x019239bd, 0x7afdc5e7, 0x7adb9f40, 0x359ba618, 0xfb7d418d, 0xb6f4d67a, + 0xf3e880a1, 0xde7ed807, 0x02cfa044, 0xefde7d1d, 0x10fce54e, 0x0fcb15e7, + 0xf6f0e962, 0xec72ff44, 0xf1d1dda7, 0xa9ea235e, 0xcf0f665d, 0x7979e563, + 0x6a207cb1, 0x3e150b3e, 0xd32ca71f, 0x7ed0d67c, 0x85cf9989, 0xfa6893ec, + 0x3f7c634c, 0xd25fb68c, 0x95b41614, 0x4797ed0e, 0x709bfce3, 0xb37dc1dc, + 0xc325db9a, 0x895b2de6, 0x8dbd6ebe, 0x09022dc7, 0xfc61ae5c, 0x9fc61d22, + 0xb5bfc62d, 0xade1d395, 0xba2262ff, 0x7187e985, 0xfd4473fe, 0xca06aeec, + 0xc3339a5b, 0xbe5a3c78, 0x7992716b, 0x675cdda2, 0xc0b71189, 0x7c7d2adc, + 0x3c9dde62, 0x6b0b723e, 0x6f7ce232, 0x67efab9d, 0x39f75b1e, 0xbbcd61e6, + 0x45feff53, 0x635c60f7, 0x0e35c61c, 0x007dfb0b, 0xa7ee0bf6, 0xd92ea65f, + 0xefd00f76, 0x97151fb8, 0xa667bfa2, 0x46d76eab, 0x75bb3f28, 0xe97f9502, + 0x47fbe3ba, 0x217b7eb1, 0x52606795, 0xb81fda19, 0x94de511f, 0x1e4376df, + 0x4e387b8c, 0xcf0f7bf4, 0xfbc777db, 0x3b4367db, 0xca7ca4f7, 0xf8219c3f, + 0x5e22c0cd, 0x36a5e37f, 0x977a629e, 0x19bdfe4a, 0x48f991f1, 0xfc956fff, + 0xc3e62957, 0xe517c8ce, 0x602797d2, 0x39f4b0f9, 0x6fefbb9d, 0xff082ab0, + 0x17ee0cc6, 0x8524589d, 0x665c03c7, 0x1bfe8b24, 0x4aaabaf8, 0xfdc0cb9f, + 0xf782a331, 0xad33d133, 0x19db00b5, 0x3fb9534e, 0xfc8892c3, 0xc767db50, + 0xf4297db5, 0xf7d89f24, 0xd07ef0bf, 0xfafd029c, 0x9707922c, 0x01fa9be8, + 0xcaccb5d9, 0xbcf973cf, 0x55fa0a79, 0xbe797ba7, 0x45658564, 0x37c5da3a, + 0xb8654df9, 0xe4a5bb2e, 0x4927ea30, 0xa64da753, 0x330b5afc, 0xba039ca2, + 0x70fb493f, 0x8939e7ca, 0x3d566c48, 0x35746bdd, 0x19f7a35b, 0xfd86ba7a, + 0xf53b99fa, 0x8eb5f9db, 0xe886e3ae, 0x15fd347a, 0xda27f5e6, 0xe5ea578f, + 0x3138e0d7, 0xdc7632fb, 0xfe05f8d1, 0xa1d3f345, 0xfed075f9, 0xb42cc2cb, + 0x6d9fdc02, 0x4f8cfeda, 0x0c98f807, 0x25ae743d, 0xa04cf257, 0xe8a3a083, + 0xb2fcda19, 0x3a59d7d1, 0xa7f85e7c, 0xff1e7a68, 0x9c3da273, 0x3be1ea25, + 0x9a1e4b2f, 0x919f8c17, 0x9ab0f48e, 0xa949e7cf, 0xa117f389, 0x74766b67, + 0x4edeb6a3, 0xe3cb7afd, 0x377339f9, 0xd7c83bfa, 0x7061325d, 0x078017de, + 0x21013d6d, 0x7c5ae7b7, 0xedac1336, 0xd10d4716, 0xf058f7cf, 0x3e8fd425, + 0xc52ffab1, 0x086abe79, 0xb2fda376, 0xde297988, 0xa1e1f409, 0x697c0bf9, + 0x53858df3, 0x34fc28e3, 0xf0b13d76, 0x0f5bc219, 0xb9da77e9, 0x5ef5c1b1, + 0xbd353ae0, 0xfbd269c4, 0x5f859299, 0x81f85928, 0x3e50a290, 0x0f78b157, + 0x3dd3f9ea, 0x5517e912, 0xb97c42cc, 0xf3cb92aa, 0x3fd72b64, 0xda3fb934, + 0x1af6b8fe, 0xaaaafc46, 0x6a73899e, 0x74b15d7c, 0x7f7ac698, 0x8b2acf80, + 0xee2165ba, 0xd453d47b, 0x5957f9a1, 0x2eb8ffb9, 0xe37e125d, 0xe728c9de, + 0xe4c3cb07, 0xe464ef7c, 0x7d65f33f, 0x1ceaa55c, 0x9f2653f7, 0xf2acf463, + 0xe519307c, 0xef65727c, 0xff63e464, 0x8a5de49a, 0x037de1fb, 0xc2c6e7f7, + 0x8374fef1, 0x20bca7e6, 0x3fdd8cfa, 0x4beabc5a, 0x1c01ffab, 0x9c6bf347, + 0xb1ca7a92, 0xbb14a6d1, 0x0f3f9f58, 0x91e818e9, 0xcbf014e4, 0xb8d1e7f3, + 0x5ca37fc3, 0xf1a3de72, 0xcfd895b7, 0xae4271bc, 0xc91f38fb, 0xa5577bb7, + 0x820fbcf3, 0x2e02bdcb, 0x3d9c8533, 0x38a64dbd, 0xd16f0cc1, 0x0fcae813, + 0x216461bc, 0x925ebfda, 0x5d7dda93, 0x0aa141a7, 0x6de7fb63, 0x792c77a4, + 0x1ce286b3, 0x981b36e3, 0xc737251a, 0xf775e287, 0x9ddc4c54, 0xd25f2bac, + 0x7f6ba191, 0xaebe6769, 0x413c24be, 0x1bd97f57, 0xe4f2baa5, 0xed742b9e, + 0xa153bca7, 0x7bde5f2b, 0x95fdae83, 0x95d1cf1f, 0xae0a3001, 0x12fd99fb, + 0xbeeb0adb, 0xeebb723a, 0x3ad9fffb, 0x378c0deb, 0x34f6109e, 0x8a7b7a0b, + 0x350b0e00, 0xad573e3a, 0x852c2fef, 0x03e472a5, 0x3ae16ffc, 0x0d3d2f9e, + 0xefdd1720, 0x7ebd36a2, 0xbeb364b1, 0x71b5db5c, 0xe1caf235, 0x154d1679, + 0x9e78690e, 0x02fb0cc5, 0x6bebd203, 0x8c6fa0e9, 0x2c291787, 0x46bcf305, + 0x86dff7db, 0xe63642ff, 0xdbcff0db, 0x9e91366f, 0x9fcde4bf, 0x95e18797, + 0x7fc7add9, 0x7fc7aa9c, 0xff1e9142, 0xff1e8f36, 0xf8f55349, 0xf8f57877, + 0xe3d4a94f, 0xc7a7d53f, 0x3d3cda7f, 0x7afdd3fe, 0xead667fc, 0xa4dd9ff1, + 0x32ee77c7, 0x82f33e3d, 0xb1f5754b, 0x67f8d7f8, 0xfabdcb41, 0x435e0076, + 0x74681d14, 0x4b57d0b4, 0xdb6333f9, 0x4e374dfe, 0x1d803d2c, 0xd4fba069, + 0x2adbaec0, 0x007d385d, 0x6bbf22f7, 0x19c87d2c, 0xff981740, 0xcf92cc97, + 0x2af77c93, 0xeb879319, 0x8adf1a15, 0xf6d1e396, 0x6cfc68f0, 0xf6127c98, + 0x09f2a8f1, 0x21b8e3ed, 0x3a3478fb, 0x3e59863d, 0x23ad3fa4, 0x766dd1ff, + 0xf8338f3e, 0xd3f472ea, 0xddf894fe, 0x54e09831, 0x5c31ef98, 0x2c7f8c0f, + 0x35f9227e, 0xd26160ee, 0x3305ffd7, 0xbbb06119, 0xc65a2130, 0x7a5494fb, + 0xbd7908d6, 0x3c3df848, 0x08f1fe71, 0x9fd94697, 0xb371c2eb, 0x125ce87a, + 0x82e52b7b, 0x8e386bee, 0xb1857b7e, 0xc3dbf43e, 0xd38e3fb3, 0x7f8d49c7, + 0x8cea9978, 0x74f56782, 0x59f488a9, 0x8bf29e39, 0x9127bfaa, 0x23feaa5c, + 0xe0cb4e7f, 0xb9f62c72, 0xcf06996a, 0x7007a136, 0xa19fc07d, 0xf093fd52, + 0xcdc12b4f, 0x0fbe4763, 0xfa3f71fd, 0xecdfb98f, 0x53298905, 0x1738e993, + 0x8df119e1, 0x0b648ee7, 0x460be79f, 0x4e784166, 0xffd27e64, 0x8580561e, + 0xf026fef1, 0xa3e68efe, 0x555e4d1f, 0x80199df8, 0xb8c45b87, 0x861ead33, + 0xedd963fe, 0x1aafe861, 0x15ef7ef6, 0x60c51974, 0xf876f199, 0xfcd17087, + 0x5e825980, 0xf718d976, 0x05f8c577, 0xb4e06533, 0xe4632798, 0xcaddb0e7, + 0x1e476e66, 0xa398b4f1, 0xd198cdd6, 0xbee6e781, 0xbcc20f4d, 0x795193d6, + 0xa69780e8, 0x55fce491, 0xafce5c99, 0x35745e5a, 0x9dc457e1, 0x5eae5a1e, + 0x591a718d, 0x19fe50f1, 0x88e463de, 0x84e4defa, 0xa0fe28fa, 0x65748b58, + 0x7047d5a3, 0x89bcbd59, 0xee28c6e8, 0x75935a5b, 0xe51fddaf, 0x0866088f, + 0x6412c33d, 0x2a131776, 0x3c7dfc31, 0x657ae19d, 0x675272bb, 0xf9f7fedf, + 0x835b8478, 0xbe6d37a0, 0x138c3766, 0x417deed5, 0x1ef60da7, 0xfdffce13, + 0x937eed3c, 0x5f8a54de, 0xf821ce6d, 0x6fe025df, 0xf1852bde, 0xc15981bc, + 0x4bd8a1b3, 0x00a7efef, 0x8dfead7d, 0x665c6191, 0xbdd703f5, 0x94d0fb81, + 0x8b01e4dc, 0x9bf7dd9f, 0x08ff7645, 0x669ed4f0, 0x9a3672b7, 0xf8d16d5f, + 0x053614d5, 0x7cc231f1, 0x67dc1f88, 0xf7dcdfe7, 0xcfec9180, 0x5185fefb, + 0x065b33de, 0xf043e57f, 0xe21e6549, 0xa1160e47, 0xc396eb97, 0x789b0106, + 0xf30b72ed, 0x629c8217, 0xb93fa44d, 0x68e89798, 0xba30e79d, 0xb2fad947, + 0x5cf87db7, 0x0dabb45b, 0x8b87b6d5, 0xd3e0f6f7, 0x271d318a, 0xf08493e5, + 0xcb0d988c, 0x84aff718, 0x2f1f8c32, 0xbcbde3ea, 0x13ea209c, 0xb1f6f2a6, + 0xcf3480f1, 0x3e3a691c, 0x2cabbfad, 0xc55a7dc0, 0x715679f8, 0xc7f35e2e, + 0xe77f5aa7, 0x62fc8e9b, 0x32f11306, 0x58b8ff5e, 0x67758a67, 0x5fd63e4b, + 0x4c7fafa5, 0x3bac3bd4, 0xffb02adb, 0x8dfafa31, 0xeb24ffa2, 0xfdd06f8b, + 0xf1fa5927, 0x71f5111f, 0x2a7b17d6, 0xee83ce78, 0x6f5156fb, 0x157cf2b6, + 0xf788b7f8, 0x6235faf1, 0x069dd77c, 0x3ba28fe6, 0xe678dce7, 0x727bc28f, + 0x6caeb255, 0x3c70fec4, 0xd5afbf37, 0xf743233e, 0x43ffd6bd, 0xabc4fc62, + 0x5bdf75f2, 0xb7d04cc6, 0xba26c9ef, 0xddc057b9, 0xabaa5594, 0x59e2d7ef, + 0xc5cfc60e, 0x34ce9ca9, 0x5e71493d, 0x74ffeba1, 0xf1849a91, 0x03c093e6, + 0x8ac7107b, 0xf8fb82c7, 0x1a7e5b5e, 0xf96869d2, 0xb3823a54, 0x940ce80a, + 0xc5da782a, 0xabde2dd3, 0xca245ca2, 0x09e67a1e, 0xe5aae43f, 0x09de5495, + 0xa7cf8af4, 0xf9e97b96, 0xf8559424, 0x2fd047ee, 0x05b63248, 0x13f2c5fa, + 0x1f3e2fd0, 0xf9f17e87, 0xf58bf418, 0x2c5fa11b, 0xc1f3023f, 0x07e87af2, + 0xff430fcb, 0xee5d6e58, 0xe59af2a3, 0xd0f9e8f3, 0x573d3f72, 0x7aa5af2d, + 0x7174a657, 0x80cbfde7, 0xe2eb96c1, 0xc9ccaec5, 0x5afe7943, 0x698778bc, + 0x426afb64, 0xe1e441a6, 0x7fa10ef8, 0xe29be807, 0x3aebd957, 0x9a1da10e, + 0x49f8e3e2, 0xf544d75f, 0x8e3e4a8e, 0x06731df6, 0x3f395659, 0xa0f9c8d6, + 0x27f292ba, 0x9f9e33c6, 0xb5320ee6, 0xc4f79c5c, 0x7e42253f, 0xcf48a57c, + 0xf262f34f, 0x8967b4f1, 0xd31e4718, 0x58e5c5e4, 0x98c2faa6, 0xf8f56c3f, + 0xee77fce9, 0x93a859b9, 0xd773a4b3, 0xfffd1530, 0x36bd7a55, 0x4ea94679, + 0x35cf947f, 0xd64b3b52, 0x2676baed, 0x5daeb567, 0xab79ddf5, 0x4c8f08dd, + 0xbaf30ebe, 0xc61d2c15, 0x91bed45d, 0xe043bdc6, 0x241bd60d, 0x891efd3f, + 0x53e857af, 0x7ac5dacf, 0x1ec8eb2d, 0xc5e0e718, 0x01a0a4c2, 0x3f67e0f9, + 0xf0fda24f, 0xf20653cc, 0x21678e13, 0x226be203, 0xbfac6588, 0xf952f584, + 0x50aae452, 0x8caa612e, 0x8458cbe5, 0xa7d04eec, 0xfae4ce6e, 0x187153d4, + 0x3ff6ca3f, 0xc253f3cb, 0x0a166fa4, 0x7a6a147c, 0xd62566e5, 0x265b76cf, + 0xf3faabd9, 0x737c5a2b, 0x0d3cad85, 0x51fe88f5, 0xdc1287f2, 0x10b95fb7, + 0x3e9098e0, 0xfbda9e8f, 0x88c35587, 0xbbef39e7, 0x0cdf3a58, 0xe74f48fc, + 0x4ffce1f7, 0x330eff15, 0x98e35870, 0xabc9d908, 0x50bf1a8c, 0x0c5f9093, + 0x24493d95, 0x09d2badf, 0xc39db23e, 0x7ee599e7, 0xeb6a978a, 0x6254ff94, + 0x42967cc7, 0x7bb73f91, 0xce573df9, 0x781bca88, 0x53fb932a, 0x1bc7588b, + 0x9c8a0f28, 0xe3b70f06, 0x2fbb3adc, 0x179b4c6e, 0x13cb17cf, 0x2d730798, + 0x3a36b3c6, 0x55ff2b67, 0xbf23fe26, 0x41533d7a, 0x87b788af, 0x688be618, + 0x3f6132fd, 0xd1f05f7e, 0x6833ac2f, 0x268e72de, 0xcfa4bda7, 0xd8f7617c, + 0x8be65f31, 0x247d2376, 0x17d7d71f, 0xf8ef3dd9, 0xef172e81, 0xf4e0f04d, + 0xe8da8be2, 0xbb79387e, 0x9a24b2c4, 0x4b7fcf07, 0x71ab7ae6, 0x5e0b3973, + 0xf0692406, 0x7984c9af, 0xf755ea9c, 0x0f213419, 0x4c521aed, 0x353fd13b, + 0xf082e10e, 0x7044531c, 0xbbd6245c, 0x820af97b, 0x8eb15ed3, 0xdc1ad955, + 0xd7987cc5, 0x2dc9f78b, 0x5eecd76e, 0x2e1f3afd, 0xd62ef8ae, 0x94c8f737, + 0xcf0b1aff, 0x487f8953, 0x5744044c, 0x1b7ee44f, 0x9c5ee798, 0x4ef382a7, + 0x5a32f841, 0x29bb12cf, 0xfb40e784, 0x924a8ea5, 0x58189737, 0x7b4afc74, + 0xcdf42cbe, 0x7e769969, 0xfe7bb97f, 0x8b2f0b95, 0x7449df2e, 0xa71682fd, + 0x6e5c29b7, 0xb46abd79, 0x66ad6dbf, 0xedbc887f, 0xc1df3178, 0xf026a7fb, + 0xeb2b323c, 0x1d798cd9, 0x4717d9a3, 0xec62f333, 0xd20d400b, 0xe50b64cf, + 0xf2d5ac41, 0x2aa3d45d, 0x13c2f3e5, 0x822deef3, 0xf4d8d74e, 0x119e6ef7, + 0xf0233beb, 0x7ae16031, 0x4a77c628, 0xf5e7515c, 0x6ec86abb, 0x0341e2d6, + 0x559f3c5d, 0x09d44bf3, 0xcc381812, 0x4db030e1, 0x5d5038a6, 0x9efc8dd7, + 0xe8c7eec3, 0x4be8487e, 0x11a87a45, 0xf45a6bed, 0x5dc2f276, 0xeaf1d5be, + 0x317c7b70, 0x189d920b, 0xdac7876b, 0x114c91df, 0x12b0f1ef, 0x589cf78c, + 0x1e247057, 0x63ca6be6, 0x53305e74, 0x5fee917e, 0x0db3ad05, 0xc56457ef, + 0x58917efc, 0x36cc4fbc, 0x6b779c11, 0x256b1d78, 0x993ddffa, 0x87ddffef, + 0x1634df4e, 0xae55f9fa, 0xff5fcba4, 0x6bcf2e55, 0x758e8b1d, 0x58c1df78, + 0x42f948e5, 0x8b8659c9, 0xe95773e3, 0xe86ff9ef, 0xa0923dec, 0x6473bf12, + 0xc8e15fa1, 0x698b139f, 0x5ee8447f, 0x3e541bfa, 0xe6379c1f, 0x7c31efed, + 0x0e9a3f3e, 0x622966c6, 0xcb8b86de, 0x9fa19ec3, 0xb7e2a9d7, 0x79f0375d, + 0xf579c18d, 0xa2bb8f87, 0x79b5b1f3, 0x5ee519ed, 0x3b1729e8, 0x797aa99f, + 0xf2a70510, 0x1ed3826f, 0xa9f3c8d3, 0xc9f9f312, 0xc1cf7e61, 0xe2e97af0, + 0x9faedbe6, 0x7be7a9ef, 0x0d76456e, 0x82caadf3, 0x7dddfb7e, 0x093d8a2e, + 0x099475f8, 0x7c132cfa, 0x113643c7, 0x853bbc0b, 0x143a97f2, 0x5e481f5e, + 0xf4015a1c, 0x30b439eb, 0xed81e517, 0xa7ee9998, 0xcf928c09, 0xd38b26b6, + 0x690c9ef5, 0x14ac3844, 0xaade87f5, 0x7e1efea6, 0x1f90ccc7, 0x9b7b8b34, + 0x5877b61e, 0x0d51def0, 0x852e588e, 0x5914c067, 0xd972c1ec, 0x3ad51617, + 0x3e0678c2, 0xfb3123de, 0x7b4f1b46, 0xc455983e, 0xb0e94af5, 0x8fda798c, + 0xdd36f55c, 0x9948f40f, 0xeff73c42, 0x18baff86, 0x76df87f8, 0xe5e9c4dd, + 0xa37f8441, 0x77e261f4, 0x22901ca1, 0xf8462dbf, 0xfeb4fc99, 0xb666bbc0, + 0xa70e1a43, 0xb45e8225, 0xd7eb69f5, 0x7abb6de6, 0x23c9e521, 0x2be2703e, + 0xe4d05f05, 0x7b909244, 0x13922eb8, 0xcf3c2957, 0x7842b27d, 0x15ea647d, + 0x8f612e74, 0x2e474b88, 0x9f788d37, 0xfc628bfc, 0x67fdcf87, 0xc197da0f, + 0x079d232e, 0x7dde7b07, 0xe051d033, 0x2fdd0a37, 0x8954f40b, 0x7a1cddf7, + 0xea2274eb, 0xe2cb3f75, 0x5967ecfc, 0xce1f2e26, 0x5e7495c9, 0xec2fade0, + 0x77fd1472, 0x3e22c964, 0xe783d3d2, 0xf2943600, 0xd0ab67bc, 0xf56fac03, + 0xadfce2d5, 0x2ccdff53, 0x50d9c945, 0xdbbe9996, 0x3cb88a60, 0x5ba05fd0, + 0x07d26166, 0xaedee97a, 0x764e73c1, 0x32c6870e, 0x78c53010, 0xcfbf29ff, + 0xa54b23ab, 0xf7bce179, 0xf1f8fbc1, 0xb06bd85f, 0xcbc60cbe, 0x66defa1f, + 0x9f8cf8e7, 0x78cfefcc, 0xd9dfaae4, 0x24b0bef1, 0xb7bdd189, 0x3a8db313, + 0xca8b7e3e, 0xd651d0f1, 0x5bfa83d3, 0xde50aed0, 0x5ef84761, 0xdaf5ea0b, + 0x93c848be, 0x7dc57e39, 0x16a66bae, 0x81dcf085, 0x6cbec746, 0x33e461ff, + 0xbc5f601b, 0x8f577a48, 0xc7c13a6f, 0x99f9825e, 0x743d482f, 0xb270494f, + 0xa5f28ec9, 0xedd060c8, 0x8e6cd4b7, 0x7a09ed37, 0x3f3be929, 0xc9acb410, + 0x8587797b, 0x2fa6b9e1, 0x424ecdcf, 0xd6ce54bd, 0x1d8f3cf4, 0x75a5f8e1, + 0x1f87e92e, 0x2ebad2fd, 0x3dafee3a, 0x378e5c3f, 0x17950ff6, 0xb0b37c79, + 0x5fe662fd, 0xe2e8fa8d, 0xce775976, 0xcfb123fb, 0x678b9d17, 0x7ebd28e1, + 0xe9dbd4d1, 0x73a2cabc, 0x7a0c2c89, 0x7ce247d2, 0xf9da47d1, 0xff1fc13e, + 0xd9f19e2a, 0x3d2fc917, 0xc9e6f231, 0x9aa67aff, 0xb8d3cbf3, 0x5ea41b5f, + 0x0db9f213, 0xce99fc57, 0x76087c09, 0x9bf0b87a, 0xc2c299d6, 0xb60ce351, + 0xf5a1673b, 0x2545e10c, 0xd7ad0c7c, 0x10f8704a, 0x866fffec, 0x8e0ea663, + 0xebe7fd43, 0xffbc38e0, 0xc3ff1a42, 0xd2df45e5, 0xfa51c4ff, 0x1ff37557, + 0x8d0c77ea, 0xf56affdb, 0x5fb009b3, 0xdcaf0d5e, 0xb5e632fa, 0x7dd3341d, + 0xa3b3ace9, 0xbd2fce82, 0xdb5ce8c0, 0xf4ff07fd, 0xddabe63e, 0xc1e4d3bf, + 0x918c0631, 0xe4119ef9, 0x0f6618c3, 0xda41fde2, 0x80bb2b33, 0xdefb13d6, + 0x98ec84a2, 0x52296697, 0xd4542bec, 0x2b427acb, 0xb328ded1, 0xfcd27f10, + 0xe7bf5ae3, 0x9eed6532, 0xdad7da52, 0x1207113d, 0xf0d925fc, 0x2d7893fe, + 0x01b8293f, 0x3f7564fd, 0x0f3ced96, 0x887641da, 0x9856bfe6, 0x668dfc9f, + 0xf79863e6, 0x4ff5ca1f, 0xfdf986cd, 0xfa00d808, 0x764be5b3, 0x676f31f9, + 0xd6f7b0bd, 0x3db8f5c7, 0xfaeefc51, 0xf4e2e56c, 0xba18b6b7, 0x6787fc9d, + 0x5cce5cc2, 0x9068f38f, 0x9d5a7e7b, 0xbd86f987, 0xd5209ee2, 0xb2ff7e44, + 0x58bf7423, 0xb7af66b5, 0xb3b5c6c4, 0x6ba7681d, 0xcc44f6fe, 0x611d423b, + 0xaa67bf03, 0x6b978126, 0xf9429d7e, 0x24b760dd, 0xd9ff2314, 0xbdf87b23, + 0xeb827672, 0x0186b169, 0x841c86cb, 0xeb8080e7, 0xe8d7aee9, 0x2dd3bb1e, + 0x35ff0963, 0xee90fcaf, 0xc193daa1, 0xb740cfe5, 0x8d4fe48d, 0xf78e53d9, + 0xe0c9eda4, 0x1287667a, 0xd28d2c4e, 0x5564d73b, 0xacfd5f10, 0xf501ac65, + 0x75ae0d72, 0x106c1f82, 0x912985fc, 0xffd7cc72, 0x5bfc2cac, 0xe37b7f92, + 0x0c6977e8, 0x4e54fefb, 0x306de9f7, 0x15e43dd3, 0x9a6fc6fb, 0x850df507, + 0x34c7ca06, 0xf9a38bec, 0xefcb5a9c, 0x516fc1f3, 0xcbec374e, 0xa9d3dfa4, + 0x3e508849, 0xa7bc4355, 0x351fe310, 0x7ba4aefb, 0x1fac4fc4, 0xf2fc839f, + 0x439aaa78, 0x07aea8f7, 0x8fbac3a0, 0xefe38f77, 0x39d0a75b, 0x0486db39, + 0x0bfe48ff, 0xdec48e4d, 0xa327b417, 0xe113bfa4, 0xd9e2de33, 0x250fe509, + 0xbd7f8f0f, 0x52a39911, 0xe743c57c, 0x9fac6b05, 0x7bf74d7e, 0x27707fb5, + 0xa24ef7a3, 0x8b0ecd5b, 0xc846af1d, 0xc8a63d99, 0xa35dfc7c, 0xee02559a, + 0x55f79e26, 0xdfa12863, 0xbee0d2fb, 0xcd5ee621, 0xf6b78090, 0x4296f13c, + 0xfc8193f7, 0xe7bcc1cf, 0x44cd0713, 0x4c362767, 0xdab1f3a4, 0x13003578, + 0xe3cbec3b, 0xc424eac9, 0x5f82b3eb, 0xf6e2acd5, 0xc6bef6a5, 0xf112b1b0, + 0x2996e91c, 0x1ec065af, 0x86f8c449, 0x0f2b4ed6, 0xa64ba7ae, 0x93d9e7df, + 0x0df08871, 0x9e90c4f4, 0x48d8af0c, 0x315e06be, 0x7e7c44ef, 0x0982c656, + 0xf0efb748, 0xb57a3bdf, 0xef7a4cdb, 0x976e31c0, 0xc9afbb0e, 0xfbc1c91a, + 0x64af030a, 0xc81b1f12, 0x7ae76c8e, 0xc7bf1c72, 0x8a7fa8ed, 0x8ba58388, + 0x51d2cffb, 0x1ddb3b3f, 0x0cfd4617, 0x08d7149e, 0x7a6e5db2, 0xa181307f, + 0x219e06df, 0xbda53852, 0x0b9dfa6e, 0xefbe26d6, 0xcfefefa1, 0xbe438ff1, + 0xf4017f7c, 0xfbefc56f, 0x7cd9dda8, 0x8658a5ff, 0x5e310cbf, 0xed9bf506, + 0xd2f7a5cf, 0xfbfe6e17, 0xbea26d0d, 0x6603ea87, 0xc75a14ff, 0x63b6367b, + 0xec5e7584, 0xb2fb5f3d, 0xda8f0853, 0xa4ce01bc, 0xa5c2c5ef, 0xb5eb9b2f, + 0xe9623c1a, 0xdf9f1072, 0x9bf43f32, 0x6ed139d0, 0xe3b5c78e, 0xb48f9c4d, + 0x96bd244e, 0xf2ebc735, 0xf3745687, 0xebfddf73, 0x01e7846d, 0x9409f7a3, + 0x46a39147, 0x02d1efc6, 0x0bfd008d, 0x2fde4753, 0xe27c8a9f, 0x679e56ba, + 0x1f73e9f4, 0xe2b02ce5, 0x748fc879, 0x3f3521e7, 0x8892741f, 0x47ab147e, + 0xe62eac4d, 0xf34cb67a, 0xb423bfe3, 0xefd2a8c1, 0x8fd7053c, 0x09c23f27, + 0x7e8fba93, 0x25ed6a8f, 0x56aba406, 0xc13de70f, 0xed3ebe36, 0x9eed1e7e, + 0x8cf8589d, 0xb82029c9, 0x5dff3036, 0x71f36778, 0x1044baa6, 0xab1bee8d, + 0xe8017fc5, 0xbc18c76b, 0x9a1fc471, 0xbf0c2e48, 0x2df4cbd7, 0x7ff503bf, + 0x65ca2e5b, 0x4f56ceb4, 0xeae51130, 0xef6e76c7, 0x945fa9d1, 0x275f32eb, + 0x8e9aa1dd, 0x9c57daf2, 0x89ea9933, 0xf12c7e1f, 0x0dcf8d7a, 0x0bd23f5b, + 0xa0ed83f6, 0xb872abaf, 0x04988cdf, 0x82c68bde, 0xd353cc26, 0x524053e4, + 0xb75e780c, 0x2226a1cf, 0x16b5f63d, 0x5cbda324, 0xa55d50ed, 0x38117451, + 0xaa9ce8cc, 0x4f1bf78a, 0xf0b3dfc1, 0xdd7f424e, 0xbfbd649e, 0x2f3e7620, + 0x1f9deb4e, 0x872b3f5d, 0x7373f3eb, 0xfff19db8, 0x9fb09872, 0xf1c6e162, + 0xbde044be, 0x86bfe3d5, 0x7698c7ec, 0x0927364b, 0xdf79887a, 0x52bff2f6, + 0xfd36c83e, 0x026974bd, 0x61bf1ffe, 0xe2974a0a, 0x7af29e33, 0x3e72376b, + 0x5566fb57, 0x4cbc03e1, 0xeda7b9e7, 0xff7e8878, 0x99cee163, 0x2df38c85, + 0x8f4683c2, 0x85bc730b, 0xb645c7a8, 0x17dc76c8, 0x9a659bb5, 0x66d2ab4f, + 0x4fef02d9, 0x7e92366e, 0x73e62b57, 0x489fcb32, 0x62985378, 0x549fb802, + 0xbfa489fc, 0x73bf116e, 0x680eb312, 0x3a52b6f7, 0x1c2c7c02, 0x829f04cf, + 0xa8e0e811, 0x10b4f081, 0xe70e877f, 0xbf2243b1, 0xff6cc9e4, 0x03ee585d, + 0x1bee9dbb, 0xfba3ab6e, 0x7de16233, 0xfa27e2d2, 0xa3d6225c, 0x1c7633c1, + 0x08039e0d, 0xde97d44f, 0x2f724ad8, 0x148cb8f0, 0x9d750ecb, 0x5a7a7b21, + 0xaff7ccf7, 0x411bf7c4, 0xce51516f, 0x0ef6ffe6, 0x322d7394, 0x754a7efd, + 0xc58b8177, 0x1bb46bc8, 0x37337fab, 0x272510d1, 0x8a65db5b, 0x998eb49f, + 0xda88b893, 0xe909be9f, 0x71eab8eb, 0x7bb54695, 0x5e30672a, 0xcd57c3a0, + 0xe224bfc6, 0x8cebb538, 0x2f0d2eb4, 0xe2273003, 0xe4096dbf, 0x8ac81a2f, + 0x9e1abf50, 0xf11be906, 0xb413d1a0, 0x2ec73d7b, 0xfc4837e8, 0x5fcf2fa8, + 0x4e8119ee, 0xe3063f16, 0x6d9b7f62, 0x85e25f74, 0x63c1ab8e, 0x5f62df10, + 0xb8f11953, 0xdffc8f3d, 0x250aa386, 0xbb6f1f59, 0x71f7072e, 0xf40bc80d, + 0x9148d437, 0xcadee9f7, 0xfbdd336e, 0xeef1b35a, 0x9abc70bb, 0xd6036663, + 0x6ebc1df7, 0x062bcd12, 0x9ca700af, 0x207de891, 0x89e3922f, 0x13e81f82, + 0xf5b5bfb4, 0xe69bcd44, 0xdd14f601, 0x0790327f, 0x03e28cf8, 0xa07e0447, + 0xf444ddbd, 0x19dfefcd, 0x663daf5c, 0xf598f6bd, 0xbe88cdbe, 0xeb4fc799, + 0xd9aef859, 0x3e17ef80, 0xfa21637a, 0x4ed6fad7, 0x25f575a7, 0xfee1277b, + 0xfe81cbea, 0x0b97e047, 0x1675851f, 0xdb3ac37f, 0xa35f08e2, 0xb23933ae, + 0x3ac37d9d, 0xa77e084f, 0x4543f3ad, 0xe67cc44d, 0xa1997ec0, 0xed9024bf, + 0x2f2570db, 0x0552efd3, 0x60401e44, 0x37e50263, 0xfbf177f6, 0x003e35d0, + 0x3d205de3, 0xfa1e8818, 0x534dd42a, 0xcbd6be91, 0xed97cc76, 0x6fd97b5b, + 0xfac377f1, 0xd476c836, 0x382afa13, 0x901f80fc, 0xf1cbeedc, 0x83e544dd, + 0xabfdfa46, 0xf97f6d13, 0xef3b9d03, 0xf9efd236, 0x36f9e40e, 0xcc32c3cc, + 0xc01af917, 0xafae56e5, 0xadfd691a, 0x60b78f2d, 0xa5f3707d, 0xb8624e74, + 0xb9c3d67c, 0xdbac9d76, 0x69514c87, 0x99a3c0bc, 0x06846f74, 0x85b0e067, + 0xf0690f68, 0x4bdcf2c0, 0x1012e086, 0x2f51ace7, 0x092ef7e0, 0xc9f0867e, + 0xcf0272e7, 0xc31f208b, 0xc9a32b73, 0x13fe58ab, 0x88e547ab, 0x3f2c47b8, + 0x3df98bae, 0xe531a5ca, 0x46f863bb, 0x437d4c7d, 0xe7c83d4c, 0x3ff2469b, + 0x9f1c186f, 0x8647d90d, 0xc0e83f21, 0xb9be7e7a, 0x684d515a, 0x8d38bcff, + 0x851ae7cb, 0x7da1ae59, 0x54c1cfc9, 0x5cd9ac2b, 0xa63def8a, 0xfa093b68, + 0x4327366b, 0x21f39e39, 0x8a695768, 0x56fc6b2a, 0x2e554f9b, 0xf3dac7df, + 0x540bf6ef, 0xa8af1a8d, 0x1e1d4dca, 0xf39528af, 0xda16fe7f, 0xb265fb57, + 0x726f032b, 0x3abec3f9, 0x2779e9b3, 0x405b67de, 0xfada60f9, 0xd038e163, + 0x7f112679, 0x0dffb067, 0xae639d13, 0x20a94aee, 0x32392bfb, 0xc5abdc22, + 0xfafeb4fa, 0xd9c4de95, 0xeb337ad1, 0x3dfe8c4d, 0x33ceeadc, 0x059ed1cb, + 0x28e505f8, 0x3ba27e3e, 0xcaed02b5, 0x54655f9a, 0x87db39e0, 0x5fbb3572, + 0xdc3af1fd, 0xe4cdfb37, 0x737fe88f, 0xefbf019e, 0x3c56b37f, 0xe37ba7ef, + 0x913c3ffa, 0x1a27e383, 0xfc0af7f4, 0x4bb72e5b, 0x6c1f0c6a, 0xfff91abf, + 0x55bcb481, 0x1ae6fe51, 0xc3d92943, 0xf3231bcf, 0xe7a0de71, 0xa5de60b7, + 0xb943cfd6, 0xbfdf7d2a, 0xc8eda3ff, 0xc86c4e1f, 0xd2b6452e, 0xd91c7fbf, + 0x2ec7fdbf, 0xfd93b42b, 0xbe41ee91, 0xbd51bcf0, 0x362bdb9f, 0xad7bee0f, + 0xe3071c3f, 0xa7fbfd8c, 0xa0bfa394, 0x2f9f18ff, 0x007fc994, 0x3f9882ed, + 0x689bf5a9, 0x7cc11f50, 0x232bf66f, 0x7ef711d9, 0x7986905d, 0x91a6894d, + 0x376833e3, 0x579df3e8, 0xeed07ed2, 0x2bb58ef1, 0xcf1f3216, 0xbfb18db3, + 0x63c0fbb4, 0xd65ac4ed, 0x1a57bab6, 0x22822f6e, 0xc4ba096e, 0x5fd382ef, + 0xbbfbc907, 0xeb379f77, 0x0a0e47ef, 0xfc42c3bd, 0xe3f61ab8, 0x8537f25a, + 0x6c17bfc8, 0xbb8c4795, 0x479b96be, 0xf0913ddf, 0x51bdf9d7, 0x606e3d78, + 0x7ae01b8a, 0xee2cc4dc, 0xc6ec91d2, 0x9f6839b3, 0x3f17b70d, 0x4d463f22, + 0x6c64fdf4, 0xbc78ddb8, 0x0156d422, 0x56be3af3, 0xb82fdfa6, 0xf631bb58, + 0x19f7ed7b, 0x389ea30e, 0xf823fd19, 0x64df71db, 0xabe7eb37, 0xfc4e33c1, + 0xfb6c466e, 0x1db972f7, 0xccb5f451, 0xbbefb8bc, 0x27ae748d, 0x9b17c761, + 0xecfa40ee, 0x54f3da32, 0xefd0af8a, 0x32fdb03b, 0x740e07e5, 0x8a5c489d, + 0x65ff6672, 0xd06cbc74, 0x532fd9ce, 0xf3bfa49c, 0x29e30b8c, 0x8dc50fd0, + 0x7b8fdd03, 0x9b477e90, 0xf95ca9c7, 0x379ff8e2, 0xe226fe26, 0x4e3bfdc7, + 0x077f2216, 0x172a783e, 0x5f85c8e3, 0x7abd7b89, 0x60fe91cb, 0x0fbfa47e, + 0x7e92ce84, 0x4792e969, 0x7ceb2fbc, 0xe6e2e9ae, 0xdbf7a957, 0xe7ce7cc2, + 0x679a1e4e, 0xa1311aa3, 0x28f2d59c, 0xad543ffe, 0x8000ada0, 0x00008000, + 0x00088b1f, 0x00000000, 0x7db5ff00, 0x55945c0b, 0xe779f8da, 0x300c2b9d, + 0x8a22e45c, 0xe2e41dc3, 0xb9b660a0, 0x784288ed, 0x2d34c45d, 0xb95141d3, + 0xeeb6da43, 0x78a31f66, 0xa8b56b2d, 0x5306acac, 0x4a1ac4d3, 0xb46b0a0d, + 0xc972b324, 0xcdddab36, 0x0bbcca0f, 0x7ee7d588, 0xcffeffb5, 0xc2f39cf3, + 0xdd9788cc, 0xd7e8fbef, 0xf7de78ef, 0xdcf2e7bc, 0xe73ce79f, 0x49d6630c, + 0xcd8ca119, 0x8667f063, 0x24fe65b2, 0xb8d8cfe6, 0x0c2b05e6, 0x6d758c99, + 0x783a2c90, 0x3322d45e, 0xafa58216, 0xef0d1cc3, 0x9f548d13, 0xd0ecbcff, + 0x1e573d41, 0xb4267c7d, 0x6ca8f45f, 0x075741d1, 0xae381fea, 0x9b5df781, + 0x33df0c35, 0xc60c6566, 0xaffc6129, 0x59e265a4, 0xb459c609, 0x1c41c97f, + 0x9293d167, 0xb3c85e85, 0xc96fd8b5, 0x960b12d3, 0x9ab5ffa0, 0xfcf5da6f, + 0xffe05f9b, 0xeb3c1b05, 0x1cfb590b, 0x68b6a619, 0xc673e793, 0xa14aa3da, + 0x9d26e2df, 0xcf1c61e9, 0xb19efde1, 0x553e61f7, 0xf149dfe2, 0x083eefeb, + 0xb5ea93ed, 0x034e8704, 0xf0a96d63, 0xca1edd42, 0x47b574b0, 0xf3c1fbe5, + 0xcca2efe6, 0xeb7aaf50, 0xf9f012bf, 0x9bf7f82f, 0xe2d64bab, 0x97ca7217, + 0xc4b334b1, 0x7e81897e, 0x4a7979ff, 0xd9ed3f7e, 0x59631520, 0xd8d0ed8c, + 0xfde05a07, 0xa31ffac1, 0x6aeca1da, 0x19310db6, 0xb33fd3af, 0x58e1541b, + 0xcb0c0cba, 0x0269a74c, 0x1deaadc0, 0x6ab7ad0d, 0x2d82eacb, 0xadbc3750, + 0x3d401981, 0xc0ef98de, 0xd27fef79, 0x5fadc0b2, 0x9daacc83, 0xb121df50, + 0x41665499, 0x241deb89, 0x0c8ebcd1, 0x038ee5e1, 0xfbe2533d, 0x2191cf99, + 0x6006c61a, 0x63a5467b, 0x3324fe48, 0xbb2a3e94, 0xb4458b3f, 0x0021cd5b, + 0x57d04967, 0x096ad2ed, 0x0db3879f, 0x4e620e54, 0xcc679f2a, 0xccf6c466, + 0x33384262, 0xe1103836, 0x08be2327, 0xa42a119e, 0x1c09df9f, 0xc21d8c3e, + 0xcc81ecfa, 0x2dfe0db1, 0x1c99ebd7, 0xb59698c0, 0x7e47e3fb, 0x1a7f0569, + 0x7f35ef02, 0xd0125591, 0xc1583c9f, 0x60c4c5a7, 0xef183f1d, 0xdfc7700c, + 0xe5e78f81, 0x7b157f61, 0xfe83a665, 0x30d1ee2e, 0x77db1197, 0xe69db16b, + 0xd1b5efe3, 0x890f3899, 0xaa3ac3c5, 0xabcf8ea0, 0x0eadab46, 0x9b54b837, + 0x9b2f0435, 0x4eca8139, 0x24f0f5b5, 0x34d3b7e8, 0x63376b4f, 0x0c79453f, + 0xcf84d1fa, 0x0ebce2d3, 0x8fad9c7c, 0xaa05bc46, 0xb7566f89, 0x99b6e328, + 0xd524ffb0, 0x7818d331, 0x66a59ddf, 0xe9f1e05b, 0x6cf5c643, 0xcd78df58, + 0xf7805d88, 0x09403577, 0x0be7beda, 0xc5ccef32, 0xdb3217ef, 0x85a3a46a, + 0xb9733275, 0x0d69ffd1, 0x2b82f7c7, 0xec15cc3e, 0x01785df6, 0x15c16bad, + 0x011ae67f, 0xddbc0ced, 0x174e3f69, 0x3d39994f, 0xbee3116c, 0x1db2ca2a, + 0xb749d306, 0x819c2bfe, 0xa6aaf51e, 0xa4c9d308, 0xfe197abe, 0xcdd10223, + 0x72d788f4, 0x9f1787c1, 0xca3b62ff, 0xf6c90ea2, 0xa9c61994, 0xc773da90, + 0xc3ab10c2, 0x2336b47b, 0x5cc4d3ae, 0x675bd709, 0x8db97330, 0x8aeedbd3, + 0x07d3d69e, 0xbbcd3337, 0x8246bd6f, 0xe13577c3, 0xa4638037, 0xfafb1c07, + 0xe380f18f, 0xd027fdd5, 0x24d5dff8, 0x94ffa0dd, 0xf66ff46b, 0xbf5f7f98, + 0xcaee3471, 0x07f31554, 0xa5f95aba, 0xa6cc41ce, 0x3246ff87, 0xb77c13a6, + 0x6f4e35d2, 0xed7f87ee, 0x1b245c6c, 0xc8f7ef05, 0x17c74879, 0xc84cf34d, + 0x90409ae7, 0xf7c0b74b, 0x6dde6b1a, 0x302eafd0, 0xf7e91828, 0xe12c731d, + 0x6ac0c7ff, 0x071fe3a2, 0x24ed970f, 0xb1f3abdf, 0x915072be, 0xe1b9bc4c, + 0x55f79269, 0xdfbe3e7a, 0xe44a607e, 0x8ef55b9f, 0xd5df6878, 0x3e6999f2, + 0xd83f938c, 0x59e219f6, 0xd65f8f99, 0xccf10cfb, 0x50436c9a, 0x0131ac0e, + 0x003f12df, 0xb57ac35f, 0xdbc5ed92, 0x57d81f80, 0x8a0db63a, 0x44b60d1f, + 0x7f1f1b93, 0xfcd2d66b, 0x51221b80, 0x1d59da2e, 0x974d5595, 0xe066ce09, + 0xf2975c5f, 0x13758abe, 0x59af91dc, 0xdaa4d218, 0x6c9bef4c, 0x7d69f989, + 0xaffa50f3, 0x5768c0fa, 0xf6e9ff01, 0xe11fd3ff, 0x9eeea5d9, 0xd9d28162, + 0xc3bafb22, 0x9f05bff7, 0x3efe0f64, 0x579e1dbd, 0x9f2077e2, 0x2ca7781e, + 0xa54fe511, 0xe71d3bae, 0x9f9df07d, 0xffde51d2, 0x086cbfb8, 0xed01df3e, + 0x6974bf51, 0x6e2d2bbb, 0x9331c5fd, 0xafaa355d, 0xe0f02cbc, 0xfec77cfd, + 0x8f3881da, 0x2c431006, 0x5a59c608, 0x3064e23a, 0x09f58392, 0xe40c3394, + 0x6fd436cb, 0x9464d34d, 0x339f952b, 0xccf50be6, 0x33dfae66, 0x0a873307, + 0xffb953f0, 0xaf8899f3, 0x49ad2cca, 0xc9f14b05, 0x80ac7368, 0x7a593ef7, + 0xafed0493, 0xb5f1f244, 0xf163d7a8, 0xc4609cfb, 0x59c80a5b, 0xcb6ffe7c, + 0xf25ecd83, 0xb2ac75c0, 0x90abc601, 0x1ca0a7db, 0x1110b900, 0x7e57fd0d, + 0x54d1fdf2, 0x0ee8b633, 0x17ecfc45, 0xd133e7fa, 0x5b68c4cf, 0xe9b3b614, + 0x05bd1fdb, 0x119f4dda, 0xb8036511, 0x8d98aa16, 0x0024dbf4, 0x5748adca, + 0x690569f9, 0x15d7e9fd, 0x25b78eb4, 0x60e10d9b, 0x505bd08f, 0x3244a4cf, + 0x95c0047d, 0x0a623b85, 0x68b4dc60, 0xa87fd715, 0x43de60e2, 0x0f771ac5, + 0x240e2e74, 0x4208e67d, 0xc757fa3a, 0x9ada35bd, 0xda57f389, 0x9ee33e7f, + 0xfc3f5b34, 0xe38e148b, 0xfbceb56b, 0x15dd9e70, 0xc016cb46, 0x15f05fdf, + 0x0cd2f77c, 0x3b064b9d, 0x5c634bab, 0x7dfd012b, 0x75a73be9, 0xaf63c000, + 0x0d1d96d1, 0x6bbccddf, 0x4bac6afc, 0x8bcd8307, 0xdb0b9e91, 0x2d3e2247, + 0xbe2e5b06, 0x86dbd72f, 0x2f12c284, 0x0625b60e, 0x0fce32a0, 0xf96278e6, + 0xcefdf969, 0x50a7cf9f, 0xaa17e3e2, 0x45b85eda, 0xcb6b7d42, 0xac54f5c7, + 0xfd474808, 0x246dfa05, 0x01cad7f1, 0x2d45dfd4, 0xbbf6762b, 0x138f0e3e, + 0x34073d62, 0xb02bf6ec, 0x031b03ce, 0xef30b52c, 0xcd7735a2, 0x817282a9, + 0x25d43f2a, 0x0e7fcc7b, 0x385edfcd, 0xafec0224, 0xff311a8b, 0x6afe62a5, + 0x5f3b8253, 0x56bfcf7b, 0x921e2fb1, 0x05a2db1c, 0x4dfd4231, 0x61e3a07b, + 0x9754eba8, 0xf50d32ff, 0x82ca9a72, 0x0fb3797a, 0xc670d8f0, 0xf9e62cfe, + 0x3e9ff03c, 0xc5af9e88, 0xfc3ee1e7, 0x54a7f0fb, 0x3ef85a8e, 0xf099bb3f, + 0xd1a552f5, 0x8558c322, 0xcc17040c, 0x6ab33e6f, 0x8ddffe71, 0x3b7f69f9, + 0xb4596bac, 0x8eb8f7ed, 0xa8aac1b9, 0x6c3cd0bf, 0x3ed15329, 0x71d7cd1a, + 0xd690fb1d, 0x1a4cc051, 0x7ad8a232, 0x0283ea15, 0x02ca5f13, 0x34c9f389, + 0x78e0d566, 0xda8d99d3, 0x5ad4eb1d, 0x063ffed1, 0xef306738, 0x9e9d98bb, + 0x2a0e62cf, 0x6a2e61ef, 0xa76b2f7f, 0xa06f02ba, 0x9c21b993, 0xc9874e4e, + 0x10c7ff04, 0xa6fa9fdf, 0xeb0a5e0f, 0x6274fa98, 0xeb3ec33c, 0x6e7c1006, + 0x82a9ef34, 0x9f8f807e, 0x1f23f5c6, 0x14fd09df, 0xe3e2f04c, 0x7c140371, + 0x9f8f5fc6, 0x39fc7ada, 0x31ab31dd, 0x8770e002, 0xd61de940, 0x1877f232, + 0xfabe9133, 0x1cdfe0ad, 0x0042c8d9, 0xf0666d3f, 0x562e706f, 0x501193e9, + 0xb3231bcf, 0x1f1e6187, 0xcfa4672c, 0x1d90c83e, 0xbfc22b44, 0x9dfa2299, + 0xcada6634, 0xfb976800, 0x0ba67b73, 0xe041bcca, 0xbbc9b87f, 0x2bf521f1, + 0x109ca103, 0x227cf9e7, 0x5c23536b, 0xfa7aa527, 0x3d32532b, 0x31c01ddb, + 0x0db10e51, 0xdbd1f232, 0xa46fe0d1, 0x1b287540, 0x9be10bfa, 0xd3d7dca9, + 0xb6b2e933, 0x13d1e60b, 0x78883b6d, 0xbbf93c59, 0xe1062c39, 0x81193ec6, + 0x5f28e07a, 0x476037d7, 0x93b20502, 0xc031a035, 0xf6053ace, 0x80cfd616, + 0xb9e5845d, 0x1795331a, 0xf7c18ec0, 0xaa16359d, 0x7fe4c687, 0x5bcefd84, + 0xf88d497b, 0xf0e06359, 0xc86e762e, 0x959e3305, 0xb15b3936, 0xe7e5722c, + 0x785dbaa2, 0xcb15bab8, 0x567ebd35, 0x2cfc9eb5, 0x8225ef31, 0x15f8974e, + 0x38034c4c, 0x2d96692f, 0x305c1f54, 0xd608726d, 0x16bf5435, 0x015c551d, + 0xa97b019a, 0x8d7eb652, 0x74b6b2f3, 0xfac306b4, 0xa28cd74e, 0xb1ad9f79, + 0xd7cfbcd2, 0x2c3951e4, 0x6a5bff26, 0x9d912ec7, 0x43a1b939, 0x73ed091d, + 0xf91592ac, 0x732b76f6, 0x36ff8038, 0xd83eb869, 0xf900fa04, 0xc15a4c78, + 0xa923f7f3, 0xe22edb46, 0x9427d3f7, 0x5338e0e4, 0xb1aa1546, 0x333f5ddd, + 0x47dd1c16, 0x7ba237a7, 0x0215fd65, 0x91df176f, 0x55178e08, 0xdda2dfe6, + 0x93223f63, 0xc351eefe, 0x9effa154, 0xec3a872f, 0xf78b0b40, 0xfda186c6, + 0x0e6358b0, 0x87b3720b, 0x993e03ce, 0x7e7cbd9b, 0x6dc3eff7, 0x9c83efee, + 0xe515fe3f, 0x8e5cd7d8, 0xea732581, 0x83739459, 0x47e82dc2, 0x013f0a76, + 0xd45f3bec, 0xe05a9577, 0x52dbaa3b, 0x87de7eb0, 0xfa87cdcd, 0xb32357c8, + 0x3c708f91, 0x3914c134, 0xd3eaf095, 0xfb9a0f31, 0x5ce1dbc6, 0xa167d7f0, + 0xb2a1d17e, 0x5d1f406b, 0xb7cece64, 0x8d5b5d70, 0x92e7b416, 0x52cfb524, + 0xf1076ba2, 0x5664926d, 0xb439052f, 0x07e7d5f3, 0x1f50c73e, 0xde0a3633, + 0x97d1bdbf, 0x1adbd4e4, 0xf8a589cb, 0xfbfcf3fd, 0xc3fb1f97, 0x3e584d37, + 0x0ffc315a, 0x04c62650, 0x8f453f51, 0x75c50c97, 0x1166fe83, 0x37aedfd0, + 0x1d219725, 0x81dd77f4, 0x9f301115, 0x543b9b61, 0xd8cca103, 0x9962d52a, + 0x30ef3832, 0x18b4cdea, 0x4465e133, 0x891cb443, 0xf1d035ec, 0x5e90dfd7, + 0xa9f7d4f7, 0x07b29775, 0x3fbd3eb2, 0x5b9e7254, 0x335f780e, 0xb270f8f8, + 0x9a06d967, 0x6996dec7, 0xeb43dd9f, 0xe7028b00, 0x90b5a85d, 0xebd8717e, + 0xda2ece91, 0x3f642c92, 0x419fdbe7, 0x85b45efc, 0xecdf505a, 0x57fa7f03, + 0x9a84fed8, 0xd6e6f9d6, 0xbe31fd4f, 0xaa7e0012, 0x6457de01, 0xfb62e774, + 0x8666c18a, 0x85f830f4, 0x3e10f23b, 0xd6f67b95, 0x7ae53f53, 0xc59bfa0b, + 0x46b72f7b, 0x9e381da2, 0xbe91e259, 0x23faf0f6, 0x1916ace3, 0xff5c5a96, + 0xe5b7af03, 0xac1f3d53, 0x9fb6357b, 0xa79fedcf, 0xed635e85, 0x88ef24e9, + 0xf87dcd64, 0xe35e047a, 0xf6d14dfb, 0x9f636a88, 0x963d043e, 0xa02c831f, + 0x65b7dfe5, 0x704513df, 0xa63d49b9, 0xe948fa15, 0xb32d69ef, 0xc19fa01b, + 0x3d425cf0, 0x77fae5ab, 0xa40dc81b, 0xc2ff4517, 0xfe18b6b8, 0x65e515bd, + 0xeda52ca4, 0x3e447801, 0xe1fb23ad, 0x199fc766, 0xb1f49ab0, 0xf9554762, + 0x8b56f970, 0xe3fbe04d, 0x8e395b46, 0x6fe840b3, 0xa2a736a6, 0x68c8717d, + 0x42c988ad, 0x851dd8fd, 0x78bd006b, 0x652bd61f, 0xdd62abb0, 0xd0632aec, + 0xb3c5e94d, 0xf1efeb46, 0x9f6d9bfb, 0x0cf30bed, 0xa3f152c0, 0x57e8abc0, + 0x3834c6ce, 0xa93ece51, 0x6fd672e3, 0x6513c904, 0xbffdde7d, 0x036e7c07, + 0xf40872b9, 0x3f600d84, 0x4d4638d6, 0x555f7cf8, 0x35fa0ade, 0x84808f87, + 0xa4cc0eac, 0xe00fd5ba, 0x3328ce37, 0xb9fe3f5b, 0x9ebe0252, 0x86e63842, + 0xcbb47af8, 0x22d40909, 0xbaecdeff, 0xd91f8165, 0xe62fd147, 0x6fec6610, + 0x4b9d7cdd, 0x0861590c, 0xe6e96c97, 0x3a99fbd6, 0x61e2277f, 0xf48331ac, + 0xd4e358dd, 0xf3463613, 0xefe70d7f, 0xf5ef4ebd, 0xd9cdfd30, 0x9893bf41, + 0x77fc855d, 0xae714b49, 0xaefb4d16, 0x2d9e00d7, 0xf416a925, 0xaca1f7c7, + 0x5fc4ff45, 0x8b6a764b, 0x5ca3b31f, 0xea1a9969, 0x6dfcbf40, 0x6e5103f4, + 0xbdfc600c, 0x996fb781, 0x637a4a15, 0x11eb8ea0, 0xe88f8f76, 0xefc6061f, + 0xf7d18797, 0x47f552b5, 0x72fdf869, 0x5f3b925f, 0xaedcb83a, 0x23dd740b, + 0x4bbaf3c3, 0x7ddb0c09, 0x636b1cc9, 0x9932ddb0, 0xc8fbc1da, 0xaeb7e82a, + 0xe79f2864, 0x4f4993ff, 0x235865d4, 0xc7248c82, 0x37549e29, 0x88111ad5, + 0xaf8164a1, 0x7efe7aba, 0xf125c620, 0xa1d4347d, 0xb786abfc, 0xfbb45bbf, + 0xf025d04a, 0xdb01c939, 0xd2355f14, 0xe6633ff9, 0xa1218b9d, 0x60908d64, + 0xe28b67fc, 0x77785629, 0xa268f8e9, 0x9897111f, 0xd2b6e429, 0x1fa07e1f, + 0xff307689, 0x9b60b59b, 0x7a79e901, 0x3403a1b1, 0x78b2fb30, 0xe5fa1f85, + 0x4bb26dd3, 0x9de2f687, 0x7b5ed639, 0xb5c7062c, 0x148b71f2, 0x1f35ceff, + 0xb74efae1, 0x764c3d9e, 0xbb846bbb, 0xb7e0a4bf, 0xd82639c2, 0xd12e2fdd, + 0xd672f971, 0x5bedf387, 0xd82bb6be, 0xf8d3556f, 0x797f7760, 0xfe5582d6, + 0xbc626fc4, 0xe0d6350b, 0x8f687193, 0x8ca951e5, 0x57938ca7, 0x804ab7a0, + 0x3a3d9e9f, 0x0ae767b2, 0xb9d2af3a, 0xaabca066, 0xb134d836, 0xa555cf40, + 0x6f91d2e7, 0x02920a43, 0x1f5dfe70, 0x93fd0cca, 0xe8ef0213, 0xed5c2187, + 0x2f447ed5, 0x0f6dd44c, 0x045f9306, 0x97d124f6, 0x54294fed, 0x11ad69b7, + 0x177e900b, 0x1d00fd03, 0xf7f1309c, 0x8903ca27, 0xa9ff66fe, 0xf00663ec, + 0x25af913d, 0x22d13d3a, 0xefeafc53, 0x1697654b, 0x7059dce0, 0xf804a9e5, + 0xb7d973ae, 0xd9413723, 0x646fe2be, 0x515ecfff, 0x9bbf0931, 0x0a6cba5d, + 0xf16bb9ea, 0x1d72ecd1, 0xe17a3f06, 0x3ad62236, 0x5219d704, 0x0555a570, + 0x2b2c0dfd, 0x3c01667f, 0x8b6b169f, 0xda95e7c3, 0x47844af6, 0x475fdbe5, + 0xd5d2dfa1, 0x2b6372fc, 0xd9f86f94, 0x8e016292, 0x88ee2b95, 0xa99d855e, + 0xbe1013bb, 0x17c06a95, 0x87d08fd2, 0x0e7e8255, 0xb1d2dac7, 0x0f8af97d, + 0x4df6cec8, 0x6bf2e36d, 0xfdf1cdd9, 0xfb6d96b9, 0xccaef824, 0x4a92a5a7, + 0xf38e91d9, 0xfcb92f3a, 0x2b8458a5, 0x982e7ff7, 0x5081fe5c, 0x2edc54da, + 0xb9e1db2b, 0xa86a9a5e, 0x77c0af88, 0x6ad94e65, 0xa1c77f20, 0xb77bf9c5, + 0xd4e7832f, 0x979f26ee, 0x1e7f2732, 0x6dd8f4d8, 0x172eff1c, 0xcedcf7e0, + 0xff882df8, 0x4e5f7b8b, 0x7d9d7798, 0xcbe7ab8c, 0xe9017fd7, 0x017ae00d, + 0xde90689e, 0x7e1e741a, 0x08cee778, 0xdceb7a0f, 0x3e40e899, 0x14edfa57, + 0x9c5985f2, 0x1f22a723, 0xd1239d58, 0x0ae4555e, 0xc9d33bd3, 0xa6724e8f, + 0xc8a8dfa3, 0x4cef9623, 0x670ee7a0, 0xa7dfb602, 0x650971e2, 0x915dd2dc, + 0xf8f30ff5, 0x89955daa, 0x582d94f5, 0xd1bdfa57, 0x693712fa, 0x0ec9ea3d, + 0x62effacf, 0x95fd3c79, 0xe739e057, 0x73f85977, 0xd1e0accc, 0x8260edcc, + 0x055a57cb, 0x8247f72e, 0xb9c32afc, 0xb9bcd0c5, 0xc7857fdc, 0xd865f62f, + 0x76ae5122, 0x9e607ae2, 0x9ea102fb, 0x9f08768a, 0xe05752b7, 0x15ef3de0, + 0xc48c2d5f, 0xac7d6638, 0x84b2ef12, 0x1ad4fd21, 0xd5aa9cb8, 0x8a901f80, + 0x88f161fe, 0x1bf46a93, 0xea45e12d, 0xdc2c383e, 0xfa47a194, 0x4339b45f, + 0xb50f4eef, 0x061c463b, 0xec2ecccd, 0xca705b50, 0x63c76ab5, 0xeed6e768, + 0x46769d90, 0x6856f5ef, 0xf078c17f, 0xb85bb628, 0xda387039, 0x8bf7caa5, + 0x17856536, 0x6533cdb9, 0xd33c2787, 0x61f59e9c, 0x5df59e4d, 0xfd65ab68, + 0xb865dfeb, 0x0e23eb3c, 0xff4fd67b, 0x4819fee5, 0xfdb2c576, 0xeeed1931, + 0x461ee5bf, 0xdf66723d, 0x9f88fe9b, 0x5a8bafb2, 0xb4589fd1, 0x80ce13c9, + 0x6ded0937, 0xf48976fb, 0x9bc38968, 0x5be7fa3f, 0xb88b96c6, 0xa7724b37, + 0x6f665293, 0xdd5f4755, 0xce733cfe, 0x955d02b0, 0xe23c5d2f, 0x7ebe88e4, + 0xd46e756f, 0x3de43da2, 0x94f8b5ee, 0x8c66ad19, 0xe28e152b, 0x34b57eef, + 0x2a0b7d9b, 0x34ffad89, 0xf0afe917, 0x6ff48911, 0xef891be1, 0x68ee9ca3, + 0xca81359c, 0x0f047919, 0xa8b5de25, 0x41f97245, 0xd38a34dd, 0x924d82ed, + 0xe7bcc183, 0x7c29d4ad, 0xad16e340, 0xc2c79cf7, 0x8bf7cf3a, 0x03fc0e9a, + 0xf58b95f7, 0x8f51682f, 0x7cf66f15, 0x0f7ceb0f, 0x33d29bfd, 0xa51de28c, + 0x79d17f5b, 0x5aebe7be, 0x7ec3aca0, 0xfdf5c33b, 0xb5e9378a, 0x05624e53, + 0x010ff8e4, 0x6f50e7f9, 0x5eaeaafc, 0x3055b846, 0x58a603db, 0xbe5ddff2, + 0x3a858f30, 0x9386c7b0, 0x5d75a5fe, 0xfb4014de, 0x199cf0e5, 0xd665f9e0, + 0xf2f51236, 0x167e3de5, 0x36d28fbe, 0x45f504d2, 0x15b84750, 0x9f040db3, + 0x32bf9472, 0xdbab17a7, 0xee4f117c, 0xfb81b675, 0xd76ae533, 0x19438401, + 0x10efa76b, 0xcaedee7f, 0x065f5d61, 0xf5e1fda1, 0xdc50b33d, 0x25a8cabf, + 0xfd3555bc, 0xaf7f73a2, 0xbf8a55f8, 0x5f3dc4a7, 0x07dbbd2c, 0x64957ae9, + 0x632f467d, 0x456c68e9, 0x92312e3a, 0x9ebbbfde, 0x0c3af3cb, 0xb85da17a, + 0xcbec9931, 0x026b25bb, 0x346d97ae, 0x17597f90, 0x855e8d68, 0x2926a7ef, + 0xf31da376, 0x7c4bba03, 0x7df05b1c, 0xeb57b706, 0xfd902566, 0x74e4b6f0, + 0x3fb61ca1, 0x6ea5f9c9, 0xba9fa72a, 0xfde82347, 0x11aa715f, 0x3b725768, + 0x22636ea5, 0x3e657bb7, 0x3f27f60f, 0xd1758f92, 0xcc035e62, 0xaec52f34, + 0x25b26f5c, 0xb3adb9c5, 0x95d80568, 0x1ff10798, 0x0ff8c332, 0x29be0e2b, + 0xe84dbe7d, 0x068deea9, 0x4fe7c607, 0xb8adf94a, 0xbbb4a2cf, 0xfdcb8e35, + 0xedd6d991, 0xf1c51da2, 0x1f53548b, 0xf78e0dfe, 0x1b5cca94, 0xab7f06ed, + 0x82fd0135, 0xc30d1b93, 0xb3234f11, 0x44e61c79, 0xbedf9706, 0xfb8acc99, + 0xdfa2d9fd, 0x479538ec, 0x7403ee19, 0xcc9cfd09, 0xbf5cf1e1, 0x7b8a7ccc, + 0xf6e6ae01, 0x4530a797, 0xcda453f4, 0x7eebf23f, 0x87c0a3e6, 0x39f8e38d, + 0x85b49f79, 0x0bf00bcf, 0x1b8f91f5, 0x52765e28, 0x2f0517e8, 0xa4594740, + 0xdafc856f, 0xe367e828, 0x93c7e935, 0xff06ee3e, 0x03f480c8, 0x0c7841f4, + 0x53af1464, 0x87e803e8, 0x51fba1e8, 0xd03b823f, 0x648fa08f, 0xfd8c3f41, + 0x0e4fd237, 0x7f148ff7, 0xb5f75944, 0x8ba011fc, 0x7db738d2, 0x6ec0bacb, + 0x53cfdc3f, 0x1da981e8, 0x5fdbd759, 0x498d91c8, 0x4897e728, 0xc7b4163e, + 0x86fd8897, 0xd1180b25, 0x96ab245f, 0x99c36f90, 0x4023f28b, 0xbfb0182e, + 0xec03775f, 0x37f1f8dd, 0x5dccf457, 0x81618dff, 0xfab1f51e, 0x39f68f08, + 0xf78f68a6, 0x7b278477, 0xce6f1fbc, 0x4c4fa8f0, 0xfda3d5ba, 0x8f18cb64, + 0x8d476ffa, 0xd53f68f7, 0x6ea3d53a, 0xce352665, 0x6f26a5bf, 0xef25fa04, + 0x7d93e4d4, 0xd1970de0, 0x986f83ba, 0xb0bd8c2d, 0x1a817275, 0xe03a37e0, + 0xa86892e0, 0x282b8b6f, 0x8c9d0350, 0x39783c8e, 0xcbd8c4da, 0x3d78d371, + 0x18e5e0e5, 0xbb8cefa8, 0x836fd793, 0x3e8206c1, 0x605e9b8f, 0x6c78a54f, + 0xc667e203, 0x6043ea95, 0x97cfb09e, 0x96882c17, 0x3a997fd1, 0x33e60938, + 0x05b6da30, 0x9d0f4fdf, 0x60002ab7, 0xab9f9bff, 0x7c9f6835, 0xdf4f9718, + 0x72e25d75, 0x32f103be, 0xc12fdfe0, 0x91fd230f, 0xb2c241cd, 0x8fda46f5, + 0x85cd7a63, 0xc83ef8de, 0x18cac94d, 0x6a5b3dc6, 0x846abf00, 0x574a9e93, + 0x83ca898d, 0xbe54e135, 0x4566635f, 0x9ad6c700, 0xd70f2a24, 0x91f9e858, + 0x7e54519a, 0xf2a5635c, 0x951e4d68, 0x54f9356d, 0xcd3c604a, 0xddb1b946, + 0xb28356b2, 0x3c0eaecf, 0xafcbefa5, 0x52fcb6b9, 0x3e0a53b3, 0x06e3f1a1, + 0xb47107eb, 0xcc2641ae, 0x1f9e51cf, 0x1985ffda, 0x4ce8d1e5, 0x68f3d13d, + 0x9f599b63, 0x67c8ebc9, 0x97312f5b, 0x53b79fca, 0x710bb7bb, 0x187ca066, + 0x76a46e5d, 0x2ed03d71, 0x107ddb1d, 0xd5e7c6a1, 0xcbea0b5a, 0xf63c85a7, + 0x71901d53, 0xbe1ebf1c, 0xc7483747, 0x98184ee5, 0x895ef85f, 0xe1ed6e4f, + 0xaa0e0de3, 0xc1b67da6, 0x7f248c73, 0x1915bd14, 0xf9c08aec, 0xd2d12e45, + 0x31d53f73, 0x3b2bc633, 0x90135c6b, 0x3d09c74e, 0x92cb4e3f, 0xe54c1e70, + 0x4729fa43, 0x1235b9fe, 0xa59b8bea, 0x18adcc0c, 0x4cdfcba7, 0xf39aa2fe, + 0x70310b2f, 0x56dd5c7b, 0x3bb432f2, 0x71491a16, 0xfbe141f4, 0x59d81c58, + 0xa9795539, 0x898f27a8, 0xfde7a7fc, 0x3c23df6d, 0xbf02a5a7, 0x409104ab, + 0xbe79e13f, 0xf6bb3f24, 0x5d216627, 0x7bcce816, 0x4fc3f019, 0xfe221f5b, + 0x67300828, 0xd7ac2649, 0x8417fd12, 0x0662f799, 0x50fec99d, 0xff88b8c1, + 0x24fbfec1, 0xffbeed49, 0x74d921de, 0xc8a718f1, 0xf3e5a8bb, 0xd13b26eb, + 0x00504988, 0x190701c7, 0xf1eedfe9, 0xc39fa47e, 0x1633ab82, 0x354c1ca3, + 0x28bb6167, 0xe63fb74d, 0xacfd7457, 0x6812fca6, 0x5ba77fe9, 0x1685e41c, + 0x4de2779e, 0x978e7f77, 0x38aaffa8, 0x1954ef9e, 0xd953d7ae, 0xe2972972, + 0x38fcea78, 0x7ac0dbf4, 0x1d5f57ec, 0x2e7ae788, 0xe496b57a, 0x98228902, + 0x2987d5b2, 0xbde63b75, 0xa3e03fd4, 0x00567718, 0x77e2d327, 0x7c7faf54, + 0x7b479c5c, 0x7befb62b, 0x4e08accf, 0xc75ffbe5, 0x4af8f93f, 0xe90f18b5, + 0xe0732165, 0xf8e5bc12, 0xc52084ea, 0x3f3c274e, 0x7f20621f, 0xfa064e32, + 0x33254e1e, 0xcbe91941, 0xbbe458f5, 0xde2fda06, 0x0ff4e06a, 0xadca9bea, + 0x2b5ede2a, 0xa860f8f4, 0x5b7b7c63, 0x42466d82, 0xa2e3f516, 0x0cc6e47e, + 0x9108eba4, 0xbb861767, 0xbb5f7203, 0x4857a041, 0xc6788808, 0x2fd55968, + 0x8fc74f3c, 0xe83a4429, 0x9df2f904, 0xf4eefc9b, 0x8eea5ff5, 0xdefc4abf, + 0x365dfee8, 0x5f7ca77d, 0xbec554b1, 0x48b9260b, 0xa7115474, 0xfc053b22, + 0xb425f7d0, 0x169b581f, 0xddf29cf5, 0xdf839071, 0x02fe1e01, 0x2fcb1172, + 0xf8e21e41, 0x8879057f, 0x1e41dfe5, 0x2013f3e2, 0x076cb10f, 0xbfcf8879, + 0xe5887901, 0x32fc7b8c, 0x9aaa7f91, 0x3cefb0c6, 0x736341f8, 0x3e3d5fdf, + 0x5a3a7fa6, 0x33f3cf13, 0xfff7478f, 0xbfbca1de, 0x0bb3e39d, 0x19da37f4, + 0x4d2b9740, 0xe3d6d741, 0x5f7c7e5d, 0xd39931ad, 0xaf045779, 0x10d78f2f, + 0x6c555add, 0x98df7e13, 0xf1faa5ac, 0x21c51518, 0xdfbc41ac, 0xf22a09e3, + 0x8da7a7e3, 0x7dc789a9, 0x3e7850cb, 0x7c7eafbc, 0x1d6f7f28, 0xf32b9fc8, + 0x48cfde55, 0x143a7130, 0xf112ef78, 0xea77a055, 0x3e7f695f, 0xde7ddb85, + 0xaa711ded, 0xf03f473c, 0x96f82938, 0x37ed02f8, 0x376883e4, 0x1334a8be, + 0xa874285f, 0x04eadfd0, 0x3a71afce, 0x5ba0e741, 0x63a87e08, 0x19874e50, + 0x8add9f68, 0x9eb038fb, 0x17e092ad, 0x71507e6f, 0x07e14b7f, 0x7a140f85, + 0xc33e048f, 0x1d6522fd, 0x57a2f6bf, 0xd629dca5, 0xf7ea16d1, 0x8b6bc23b, + 0xc97184c6, 0xf87f435f, 0xe7aaa47d, 0x9fc83de8, 0xdc667ea1, 0x6359c923, + 0x8e4feeac, 0xe14ffc75, 0x6b85c8a1, 0x382ae3c0, 0x7fb17d88, 0xe7240e15, + 0xfd238e50, 0x8eb723f6, 0x8b722bc6, 0x78e9efd3, 0xa3a461eb, 0xc6a0c92e, + 0x81977578, 0xfaf78fd3, 0x7f39931b, 0x3ab47428, 0x8bfd7181, 0x5abd8ceb, + 0xe9eb29ee, 0x4622e75d, 0x87ce2ff2, 0xb3c6f73f, 0xf9372eb2, 0xa5e70277, + 0x6e3193c0, 0xfb020c5f, 0x3385e302, 0xeadeb812, 0xce7a701a, 0xfeb7d646, + 0x9ecfa112, 0x0a7df153, 0x3ef4bf45, 0x53b9e497, 0x0ef43d53, 0x7bb5bf43, + 0xddf88ebf, 0xafc562a5, 0x7d84ffa3, 0x8383f9ba, 0x667b1e04, 0xbed0abc6, + 0x68d1fceb, 0x39d63d47, 0xfa04fbb0, 0x349b9d91, 0xd6fdfb8c, 0xdde81249, + 0x30ff1805, 0x4f5f3c63, 0x6ae7f6fb, 0x3b412950, 0xe813a5e7, 0x233d56bf, + 0x52803d33, 0x1987e67e, 0xf70b4f48, 0x1f684c6b, 0xe27a6ed5, 0xa9e3d230, + 0xed19923d, 0xb03dce92, 0x515f687c, 0x4030e7e7, 0x63a85cfb, 0x2d4645fb, + 0xf92befe5, 0xbc62e52a, 0x31950cef, 0xfb1f4f18, 0xbee0868c, 0x7bcf2770, + 0x12d36f79, 0xe53863ca, 0x34585890, 0x6b2ff9e6, 0xe7b8c08d, 0x405cfcf3, + 0xf29731b9, 0x32774bf8, 0x2ae30b8b, 0x3b167e8d, 0xcf3abfaa, 0xc762957c, + 0x3dda2d46, 0x9f3d9bc5, 0xacf56e97, 0xfe48be03, 0xe6783797, 0xf02584bf, + 0xcc967a7c, 0x5a1e2832, 0x8af64417, 0xe5afdf22, 0x73175967, 0xf7d8cdb9, + 0x95cf18a1, 0xf510fff7, 0xa7d7918d, 0xd4077a8a, 0xf1c0fe2f, 0x52a5c0a2, + 0x6088bfc9, 0x5a2fb899, 0x4260dfb9, 0xf9b2b37f, 0x86967f5b, 0x53edbffb, + 0x92df7f88, 0xadef684d, 0xdf69926b, 0xf0c5a2ac, 0x564be612, 0x6b54fdee, + 0xdfb843f6, 0x1dcaf647, 0xfd1abecc, 0x254a9743, 0x28db23f6, 0xddacc6ce, + 0xdd7e290b, 0x1da1306c, 0x17d6f950, 0x7d60f7ad, 0xab70c4af, 0x3b7073ae, + 0x67c2c9d1, 0x67d7da64, 0xec8da168, 0xf11913a3, 0x0676788a, 0x2116be10, + 0x80cf11de, 0x8cb3c477, 0xfdefc4f8, 0x274e0eb4, 0xb53e1fdc, 0xc157e383, + 0x9ebcae7b, 0xd6945dce, 0x7d8f3c73, 0x3e53db66, 0x261a0744, 0x7ef080e8, + 0xbbc7336a, 0xed2aff76, 0x7adfa440, 0xd6683a2f, 0xce01d2f5, 0xf03a2aef, + 0xd8897fc2, 0x03a6f03f, 0xc45ffc6f, 0x9bf20564, 0x1cf53e7f, 0x5a7edfda, + 0xe25797ca, 0x8eca0371, 0xf1810a1f, 0xaf9d04e6, 0xc79e0fb8, 0xe2cebf87, + 0xe938cec0, 0xf28b9b6f, 0x4ff8c4ee, 0x8ec06c30, 0x8195d84d, 0x69ab52f4, + 0xfa34f6df, 0x5f7c81fd, 0xea7a2bb3, 0xdd6137e6, 0x11fe82e3, 0xe78218d5, + 0x24267428, 0x2504b2b3, 0x057e0dde, 0x0e30e5e6, 0x0773c077, 0x45a2b7ae, + 0xfc01d2e7, 0xab1c9ed8, 0x15d73fbb, 0xa395d7c1, 0x1f739eed, 0x1fd005fa, + 0xb959238e, 0xf2d6579f, 0xff1897c1, 0x32b2fc54, 0x9fb10bf4, 0xdd0bf006, + 0xd32515f6, 0x656ed427, 0x23cd0c42, 0x66d7ec36, 0x676bc3b4, 0xec4f9b31, + 0x2303f4f5, 0xb1c4a0fd, 0x5e3f69ae, 0x76284f43, 0xf20fb323, 0xe421873c, + 0xef1122d4, 0x11c0f43d, 0xd78c3075, 0x7c2255b5, 0x7c80b494, 0x36f3a10a, + 0xa2783a0e, 0x7f6893f0, 0xe00de91a, 0xbd5ec676, 0xdd23254f, 0xe5be6919, + 0x912b3e82, 0xa5bd608e, 0x71fc0799, 0xae42e59d, 0x51fb3794, 0x6d94a7bc, + 0x2bba45c8, 0xfd5cf185, 0x8ee953d0, 0x6e53f246, 0x9d8a4f44, 0xb3c7b959, + 0x9104d6dd, 0xd2cc9747, 0x6ef8017e, 0xeacd5e41, 0x72392793, 0x6be6006a, + 0x007330f7, 0xfeaf73f2, 0x1467e713, 0x09b893f9, 0xdfaddc58, 0xa99e8764, + 0x4c29f63d, 0x6734f51e, 0x61fb47b8, 0xf78f664d, 0x8f24ae19, 0x5b0e23f7, + 0x6d59ea3c, 0xdfda3ca3, 0xa3d5a5f2, 0x9e7b6b7e, 0xcedbfb47, 0x7bd47be4, + 0xd73d6152, 0x23bba7d9, 0x3f68f25c, 0xe8f06cde, 0xa052627f, 0x28c7bd47, + 0x4aec23e0, 0x963ddec5, 0xef21edc0, 0x64ef8152, 0x8a38e78b, 0x51dbfebf, + 0xb54de39e, 0xb3778e7a, 0xfa0ed978, 0xc27e0d54, 0x58afd00e, 0x84fe02be, + 0x0684fc1a, 0xfeb027f0, 0x5813f82a, 0xc09fc13a, 0x3f83afe7, 0xe03df581, + 0x1f7d604f, 0x6f583ff8, 0xf2a3c9aa, 0x7a7c9aad, 0xb5f8237e, 0x8b0f718a, + 0x71888f71, 0x7d385dff, 0x2a3bfa2c, 0xfec36bfa, 0x57defae2, 0xaeabc5e4, + 0x098f3f00, 0x7dc5ab3a, 0xf6e2eb3b, 0x745b8c5c, 0x2db3287f, 0xe6cc47c0, + 0x82135c38, 0xe7982cfa, 0x7f77e427, 0xca957184, 0xdc26b1bd, 0xf4d75917, + 0xdf7c51d9, 0x233647b9, 0xfa6c1e5f, 0xb9fb1fd6, 0xc50c0570, 0x420f4211, + 0x8c1ffcbd, 0x7bc30fea, 0xbe30773c, 0xe9080411, 0xb7e92737, 0xdd4a710b, + 0xf255e741, 0xedb51a1b, 0x48d8bfb4, 0x6a743fef, 0xa8efdf3c, 0xc26f78f7, + 0xadafb8f6, 0xe11c5076, 0x9fd2935c, 0xc797da8b, 0xeafe7449, 0x56f78edc, + 0x45647e63, 0xee306163, 0x7c35960f, 0x3aff3a1a, 0x6fb8b8f8, 0x81ea2a57, + 0x9c59668a, 0x55fde2b7, 0xafe72b34, 0xe3cbfcf8, 0x5083731a, 0x0c483471, + 0xb605d055, 0xcacbf281, 0xa395b69a, 0xba4b2adc, 0x54fb8347, 0xc4594e5d, + 0x517e7837, 0x3b7189b9, 0x7fd979ce, 0xaefbf43e, 0x2b14d0f3, 0x3de5b7e2, + 0x0bb71c7f, 0xd9b8dbcf, 0x3912a32d, 0x7225477e, 0x9ec2ef7f, 0xdf31fcf7, + 0x3df39d64, 0x8bb5770e, 0xd4507fd6, 0x7824a0bb, 0xfeb4c937, 0xc22a2b92, + 0xd8dfd283, 0x19fa9944, 0x87ef14df, 0xe4e63aeb, 0x344e4de3, 0x8571e7f3, + 0x23ff3845, 0x64b2b3e1, 0xdc7907b2, 0xc4e86bbe, 0x6087686d, 0xfe7f409e, + 0x17ec5cdd, 0xf22ad9e6, 0x7b8c3f42, 0xf1e515a3, 0x0ce0bc91, 0xdda211d2, + 0xeedc895d, 0xe2dad5cf, 0x331c8f50, 0xbe3e299a, 0x0fd62f22, 0x4b107bf1, + 0x12f79e7c, 0xee943bed, 0x331de3e1, 0xdd23f9b5, 0x4233db1d, 0xe9477b46, + 0x4f58aa6f, 0xe2f77d2f, 0x2a784ecd, 0xb11bd476, 0xf1fc3e9f, 0x4d1393e7, + 0xe388fed4, 0x576819d3, 0x25f24b1d, 0x9c55a4bb, 0xe06b2837, 0x96b1f176, + 0x6dd97ac8, 0x2272663f, 0x92ba57f7, 0xced78454, 0x77688d26, 0xd1e636cf, + 0xbceb434e, 0x3e73d5b0, 0x63c74726, 0x3f978f68, 0xac19d32f, 0x28754d72, + 0x66f4ffae, 0x0b15f9cf, 0x5c6b9738, 0xf46ea1a1, 0xcbdcde5a, 0x57af9437, + 0x89f0acde, 0xe0a9f099, 0xb71258f1, 0xf3858ee7, 0x8de55f73, 0xafae88db, + 0x45b5278e, 0xf910ffa3, 0x7cb79e7b, 0xb159ff23, 0x2bfcdc1b, 0xe4d4b3ca, + 0x62a966c5, 0xaf83ecfa, 0x12ebac12, 0xcaefd0b3, 0x18f2bf27, 0xc6167b03, + 0x3a7b40ac, 0xdff2e500, 0x7b71c29f, 0xc073f0f6, 0x09a6fa15, 0xc7a91e78, + 0xf3028c02, 0x71acd9ee, 0x88c7ff08, 0x6142ed76, 0xdb369ed7, 0x8fb8ca46, + 0xeb455cba, 0x21f54f2b, 0xc853a63f, 0xd18d8bbd, 0xe1bb25bf, 0x7f426cb0, + 0xdb93ac68, 0xdc0de5c1, 0x4674adae, 0xda3469ff, 0x8b1a0ded, 0xe5379059, + 0xe43b0b55, 0x4f7bb094, 0x92d6ef2d, 0x625fb37f, 0x79e3444f, 0x2fb48de1, + 0x813a915f, 0xb90ad9ec, 0xef09ec81, 0xe7dec5f3, 0x7876cb89, 0xbe2217db, + 0xae7cf4e5, 0x898d87f8, 0x324676bd, 0xf23933fa, 0x87e430e8, 0xc5578156, + 0x669259bf, 0x5fbe4309, 0x504f36a7, 0xaf0810e2, 0x946ffdaa, 0xe51dbce0, + 0x37f2163e, 0x7045be96, 0xfb9efaed, 0x8ce15d31, 0x38c5d1e0, 0x389abb7c, + 0x2469579d, 0x07bf1e87, 0xf4fea5b2, 0xc6396392, 0xfe3ded99, 0xcb189f24, + 0x3c58be43, 0x56abfb8b, 0xf942f98c, 0x5e0fc288, 0x7576f57a, 0x26e81cbb, + 0xe44b3e27, 0x9138ea76, 0xcfc4b49f, 0x886dfa42, 0x39e9db9e, 0x48199ccb, + 0x1fc0430f, 0xe3c5b9d7, 0x25bb1887, 0x21f5b76c, 0xe257ff1e, 0x26d55309, + 0x7e9ba04d, 0x9509f654, 0x1df395fe, 0x04dfec37, 0xfafb1bfd, 0x20077807, + 0x5a672fbc, 0x4d476f48, 0xab63f255, 0xf5952f89, 0xc37a005c, 0x68c63038, + 0x9be56f10, 0x7df2e40f, 0x373a36fe, 0xe7cfeb98, 0xe2f22b91, 0xd9787d73, + 0x4679e425, 0x25172f12, 0xd7efea79, 0x89ddac92, 0x64963e50, 0xe4913efb, + 0x73e8899a, 0x93f9ef49, 0x7ef6b0d4, 0x4fe2efe4, 0xcbca39f8, 0xefc80fc0, + 0xe64b56f7, 0xc97b0f38, 0x768791ea, 0x8f8f399e, 0xadd83846, 0x98a1496d, + 0x6bf9c04f, 0x398352ee, 0x003f7dce, 0x8ffd1de9, 0x646ff87c, 0x62fd39df, + 0x8f9d0953, 0x350d2db1, 0x1545fee3, 0x8dcc43f2, 0xee9bdfe9, 0x43ec9e19, + 0x2ce982fb, 0xfbc0af3c, 0xf68d45bd, 0x27924878, 0x3a09445f, 0xb449b7ad, + 0xb3ff5b5f, 0x66d1c79a, 0x9b37144b, 0x79f90f0e, 0x78aed101, 0x4d81e50c, + 0x77ed2a87, 0x7d8885d5, 0x87da10e6, 0x7fac53bb, 0x388fc8ba, 0x634671a4, + 0x0550e71c, 0xc59aa7df, 0x3e1fb49c, 0x7951b59b, 0xaf72b7dc, 0x0fb73a8b, + 0x0bfc3f46, 0x48e28e9b, 0xf8b72bf5, 0x674d9ca1, 0x3fb84d2b, 0xe3b26c06, + 0xb6d71197, 0xd1f7bc37, 0x0a00f394, 0xca4b1f9e, 0xf504911f, 0xf0a38033, + 0x5f7f57e1, 0xca5ef9f6, 0xff7f3a1b, 0x62ee331b, 0x537507e8, 0x7569475e, + 0xcbed1263, 0xd25b59d8, 0x2afc3ec8, 0x07f054f8, 0x781ecccf, 0x020cb585, + 0xdd64ccf8, 0x8dd25d23, 0x39c0a9f1, 0x0d3dd34a, 0x8c7a0941, 0x9e3790e4, + 0xb257b815, 0xacee716a, 0x682ce8fa, 0x954af77f, 0xabcaed19, 0xfc037ef0, + 0x95fc0cb8, 0x7f224fcb, 0x52f85af6, 0x38af74f0, 0x2065f69f, 0x7bcbeeff, + 0xfe1f8a65, 0xb5ebe36f, 0xd2595b24, 0x9bd6f875, 0x97c5af4f, 0xf17a9773, + 0xf69f17af, 0xfe05a5f2, 0x6d9fc373, 0xa3f13fa9, 0x3372df82, 0xffa8c9f8, + 0x0e2cfc5a, 0x177ddfd6, 0x4ae7a46d, 0x59ec48f7, 0xb5f866e9, 0x6f63fc9d, + 0xd0ad017c, 0x49758a39, 0x64b8f1bd, 0x78e38f1e, 0x52dc96bc, 0xccd7dee4, + 0xd124c875, 0xe3e7067e, 0x47947407, 0x2867ecac, 0x933b16fb, 0x2ef1beb8, + 0x05bb06bf, 0x4e1e89f7, 0xed00363a, 0xa55ae3bd, 0xfaefbe1f, 0xc1b6f2f5, + 0x5ff7c1f7, 0x71e5e18f, 0x5477cf2d, 0x1e1f56ea, 0x423afc0f, 0x7db84767, + 0xa367252d, 0xf4b5f01d, 0x1ebc29fb, 0x7d6335a6, 0x09b65856, 0x4a35c7ea, + 0x908570fc, 0xbf2a0edf, 0x38cb759e, 0xf7b1276a, 0x89661e11, 0x9238d3e5, + 0xf3079414, 0xf177faf9, 0x405f71c3, 0x24a6ff59, 0x253f0f6e, 0x6f1bd1d6, + 0xf14483ff, 0x3aa0b9f6, 0x902fb84c, 0x0c5e74fd, 0xc7f13f3c, 0xafda0cd8, + 0x3e39ec5c, 0x8a68dfea, 0x7ea46e53, 0xadd2bf6e, 0x9bed4c29, 0x1cdeaf57, + 0x2f3f8977, 0xa47f278a, 0x1ad0e058, 0x64fdcc94, 0xea006c47, 0xf5af4531, + 0xe8c37e1c, 0x2b3d471e, 0xf5bdcee2, 0xdca347e4, 0xed81e2f5, 0x3f60248f, + 0x3a7b5ac5, 0x533f539e, 0xda145cff, 0xd7dbc50f, 0xbb5d9024, 0xfa025d7d, + 0x1e5bc527, 0xdd52b049, 0x91fe46d7, 0xfcfbaf9a, 0x7a5f5bee, 0x2e8ecdd8, + 0x8afdca1c, 0x3903fad9, 0x484edf68, 0xe30ab8b9, 0x947ff1f6, 0x2f770e28, + 0xfa855b6b, 0xe7124e76, 0x27a7562b, 0x7cd4cff9, 0xf25b749f, 0xf728ade4, + 0xab7d248f, 0x9bfd4229, 0xe6fea6a4, 0x30fac730, 0x95adbf8c, 0xd7d6fe28, + 0xbbed307e, 0xb494ae16, 0x47a821e1, 0x6fd03303, 0x240a4aec, 0x9b5bceb8, + 0xe7cf8ad1, 0x27cfe32c, 0x8e7b1ce8, 0x6b4f3f61, 0x14091f29, 0x3e7b8c65, + 0xf712577f, 0x97aee6db, 0xc6579ec8, 0xb42a7f89, 0x5d9d7dde, 0x97f01d8a, + 0x29de4897, 0x2d2733e7, 0x70fdf4fb, 0x6aaff7e8, 0x07a80fdb, 0x2a793e8e, + 0xb8d9e50e, 0x48a9b3a0, 0xdb5af1e7, 0xeeb825b3, 0x578a3a2d, 0xca47a666, + 0xf87ed061, 0xc09e63fd, 0xc2b2ee72, 0xee304b67, 0xc19f49bb, 0xfcf985d3, + 0x15664b16, 0xd5efabfa, 0xe10f35df, 0x3d49e676, 0xeb8be1d9, 0xcbbce913, + 0xcbdfe4b5, 0xc2bc7f80, 0x9e8d6764, 0x26355dca, 0xbbb7d73a, 0xafea9c26, + 0x64a998d5, 0x2d7d3933, 0x75797136, 0x5c46fead, 0x906661f1, 0xa16b9957, + 0xff53b03f, 0x4a6ad69f, 0x0fc67586, 0x4eb2d8ad, 0x5ab70bac, 0x63d1ec32, + 0xeb990e11, 0x13456bee, 0xee24e7f6, 0x6c747d5f, 0xe1d9146d, 0x285e3acb, + 0x2477f781, 0x032447e7, 0x2f9bf5bc, 0xbde0bc51, 0x107335e6, 0x745bc5de, + 0xdd627d7c, 0x084c9e67, 0xbce3167b, 0x7fc86a1f, 0xf1dcdaaf, 0xe7283ac2, + 0xeb4fbfaf, 0xbb37ef4e, 0xbe64b0de, 0xbe237b3f, 0xfe1c16ba, 0x247abe75, + 0xcb67f88a, 0xe86fba1a, 0xaaabe5df, 0x7e09cb65, 0x56f9c915, 0x8d19fb84, + 0xe9f90a3d, 0x89aff24c, 0x25fbedce, 0xc722bf82, 0x4f6fef95, 0x532ff0e6, + 0x1d93d739, 0x0ff8e429, 0x7c2239e0, 0x4e9f340f, 0x87fa3b40, 0x5dd759a6, + 0x7e1abef7, 0xc0134d3f, 0x13fefdd7, 0xb5a91ca5, 0x7d605ac5, 0x0639c523, + 0xc9c5f7ef, 0xc79e1c4a, 0x724ff16d, 0x80a953cb, 0xa1040589, 0x3e5c93fe, + 0x9a2b9720, 0x46ab38ee, 0xc2fc0dff, 0x50ed3c6f, 0x5e9b8df6, 0x6f7cd6bf, + 0x3f625654, 0x7bb93eea, 0x8f2a97cb, 0x6d6e677b, 0xc7b8f1f7, 0x815fd7a5, + 0xefda5a67, 0xce57a889, 0x543e602f, 0x9d327367, 0xce2b3897, 0x03ee7573, + 0x65c78cbf, 0x6fb23c98, 0xcf9b679d, 0xf59ca3a7, 0x5be56f5e, 0xca3e89e7, + 0x925cd69b, 0xcfe3fd68, 0xbc6fd3aa, 0xcfdb03fe, 0x6724fdd3, 0xd123ed35, + 0xb6d4eaff, 0x2a1e23a7, 0xfcf2e6df, 0xf283855f, 0x96ad64bc, 0x132509c7, + 0xf23991f9, 0x74038a05, 0x8071e61e, 0x4897e6ca, 0xf0b4f69e, 0xaa954c78, + 0xe30c372d, 0xad1dd517, 0xc27acf28, 0x89565fb9, 0x1e603727, 0x1e8563a3, + 0xe1477754, 0xbd1d8e79, 0xc1fdc0f4, 0xdcfc3533, 0x59ca9571, 0xe958794e, + 0x8aed0cbe, 0xf0cfc873, 0xe8d2ce7c, 0x67e748d5, 0xa386031c, 0xfd28fc7c, + 0xdf8a4aa7, 0x926bebbd, 0x3d958ec9, 0xd77bc4f2, 0xa27990e1, 0x62ec530f, + 0xe97c8f5f, 0xb7f9ad2a, 0xe11f57e4, 0x435573fb, 0xb7b13f39, 0xac553f38, + 0x770da03c, 0xf04eafeb, 0x4e4f6293, 0xe227f778, 0xd609edcb, 0xf99e51d7, + 0xfec42ca2, 0x921c03c2, 0xec8dda24, 0xb6348fdb, 0x4f3e3f08, 0x4d55f7a6, + 0x397dc332, 0x7947ee16, 0x036c7905, 0x604e5be5, 0xaf3cd1ce, 0xbc31fda7, + 0xbbe267bf, 0x43cc08f2, 0xf69a7b03, 0x6c7d73b7, 0x75a79871, 0xb809255c, + 0xbaa7333a, 0x916eb3e9, 0x965a3297, 0x47758f48, 0x329d92f8, 0x6cc5667e, + 0x4ed2af9c, 0x0cf6e2a7, 0x167643f4, 0x73f37473, 0xf4eeae35, 0xd7fcb702, + 0x56faef19, 0xce645e93, 0xe36e19cc, 0x7df94348, 0x7f71973d, 0x9549e41c, + 0x91cd87d8, 0xfd0a7e7f, 0xf9fbc5ad, 0x5571e3fe, 0xe79417f4, 0x25dfe78d, + 0xefce673c, 0x66366027, 0xa4ff22b5, 0x40f3a00d, 0x8625bb55, 0xcd957af9, + 0x17182dba, 0x87b4d4aa, 0x6baf3d22, 0xf48b5cfa, 0xb2fb855c, 0x3a9cfc69, + 0xe89b978f, 0x132a8c5e, 0x4d7afbe3, 0xdc605f89, 0xd730e2ae, 0x4fea15a2, + 0x72801e29, 0xdb2bc71b, 0x7ffe48d3, 0xff917339, 0x49e0de5f, 0x3ce13d37, + 0x27cdef9e, 0xc13350d2, 0xdf8fa949, 0x8663f9c4, 0x898d7fb8, 0xf0f8ebf8, + 0x73f77ab0, 0x6150d24c, 0x57e7ca2f, 0x15d31da1, 0xfef05923, 0xfb1f2e9d, + 0xec8fb44a, 0xe9aedc09, 0xe657677a, 0x8e2f9242, 0xcf9869cc, 0xf1deec23, + 0x65aa376b, 0x6f8cf9b7, 0x2ec6f1e1, 0x8fbc561f, 0x841b6ef0, 0x2129f8f8, + 0x803a1e5f, 0x7a3a1dee, 0x5483c61b, 0xf2c7dffd, 0x1d0388a0, 0x6a5138c1, + 0x4627bcdf, 0xc6797246, 0xad47441c, 0x92919ce2, 0x3f7ca3af, 0xd7a7ac53, + 0x7c78924f, 0x05f25aeb, 0xcf306bf7, 0xb06bf715, 0xc3e4457c, 0xd60d7ee2, + 0xb0f9155f, 0xcf835fb8, 0xeb06bf71, 0x2c3e447b, 0x1d60d7ee, 0x7cb06bf7, + 0x1ec3e44b, 0x1e62a9c1, 0x49f43d9f, 0xe4568ba4, 0xf57d81b5, 0xf55e41e3, + 0x8fed9e81, 0xf59e4907, 0x4fb51281, 0x49f42579, 0xa1e311bb, 0x66e7c126, + 0xdec3b43f, 0x1059b5f2, 0xceb9cabe, 0xec4f7933, 0x171a3e43, 0xf2366b34, + 0x8e884f57, 0x345a1ca1, 0x50cb76d4, 0xe1f0eef8, 0x491b71b1, 0x7f681a3e, + 0x29ddf8fd, 0xc731e71e, 0x99588d24, 0x4631f509, 0xdfbf9c49, 0xf15f2c30, + 0xb19fa12f, 0x6a99852d, 0x684c172e, 0xe5c8e727, 0xe2ce3845, 0x9408c308, + 0x6899ffbf, 0x26ea1ecb, 0x2e0773af, 0xa87b438a, 0x02fe6355, 0x4ff6b2e3, + 0x29fd0c34, 0xb4a77e25, 0x26389bdb, 0x9f1bbf1f, 0x3872bb14, 0xf7e7aff6, + 0xacb559e1, 0x5567e701, 0x3efc4af9, 0xe51ab314, 0x2e50fe40, 0xdccdb247, + 0xcd69762e, 0xe7f420ea, 0xe084c67d, 0xc0ab6e7e, 0xdf8161ef, 0xb8bf0223, + 0xcd4e35bf, 0xc4b0b7f7, 0xbd2c2dfd, 0x27d6d0f3, 0x943ddfe7, 0x947740f4, + 0x04db1e7b, 0x731f9ce5, 0x6b8dbdd2, 0x0c06dd05, 0x4b7a76e5, 0xff217e52, + 0x94fd49ce, 0x79ddf889, 0xa17ee78d, 0xf7df5df2, 0x33abdf8c, 0x1669cb8c, + 0x0ddfce20, 0x27cc7662, 0x8233782e, 0x0e9d4fe2, 0x00b65e7e, 0x18e51c78, + 0xb9fb937b, 0x4bf39c2c, 0xd4611bc1, 0x51c456ae, 0x12da822b, 0xa7415cf0, + 0xaea52be0, 0x18ae9b9c, 0xdf63750e, 0x828abcf9, 0xa73c04b6, 0x541929d0, + 0x5b154f48, 0x8263fbf8, 0x44622aef, 0x1dfdca7f, 0xe214677a, 0x9bff6ba3, + 0xeefe7851, 0x216ba361, 0x7e2efb97, 0x12b991de, 0xbce9af30, 0x79813ce4, + 0x5ebb85c6, 0xc5798e9b, 0x17ce35e7, 0x5760beb0, 0x3bcc74e3, 0x9e352f3e, + 0x1fbfb930, 0x3cc28ce0, 0x4e5dc2e4, 0xe3407efe, 0xb716810b, 0x13f5e6ba, + 0xa2bb5ef8, 0xbc38fa71, 0x38e747cf, 0xf374835c, 0xc32fa71a, 0x10a7bdee, + 0xdccd653e, 0xbddecf6e, 0xa8ebc2f7, 0x51faf797, 0x438bc13e, 0x4c7df9a3, + 0x47af2fcd, 0xd46ceb7a, 0xdc3c3f10, 0x0f0bf9f0, 0x851d3b52, 0x9cea2657, + 0x298a1899, 0x9a5bf5dd, 0xe75f44d7, 0x307f58f7, 0x31e685a5, 0xb3f39831, + 0xe9dde53d, 0x73a03e78, 0x9007eeef, 0x800626ff, 0xd9f38b41, 0x94fc2065, + 0x0e3c91be, 0x7e9d01e3, 0xffb0736d, 0x3c7457ca, 0x308de0ef, 0x61a4dfba, + 0x976f8f28, 0x8510dd0c, 0xd6f5567a, 0x620fedce, 0x0315f35c, 0x0554f3ed, + 0x54af3b71, 0x1f791fae, 0xeda5efe1, 0xb9d2af98, 0xaefb40d3, 0x838b1825, + 0x78f6c97a, 0x9fff3e7e, 0x3c41cedf, 0xe99bc8e4, 0x5bf7cfdc, 0xc3842a0d, + 0x0035ad31, 0x8fd8d9cf, 0x2cdfc869, 0xe392f511, 0xbe3e7cc1, 0xbf84b9ed, + 0xa8510d90, 0xff834b67, 0x3de70530, 0x02f0de51, 0x65ec3bfa, 0xd9de3f7e, + 0xf837009d, 0xcd36ecee, 0xe772c470, 0x273a3f4e, 0x30da5e7f, 0xb179ef07, + 0xceede36f, 0x3c10361b, 0xf912dbed, 0xa13b70fd, 0x6ed861d3, 0xb3f3c7a3, + 0x474e5edb, 0x2bdcf47f, 0x552fc913, 0x97e15ce8, 0xe7deadd2, 0xd5b9f8ed, + 0x666ff152, 0x5ba333b2, 0xbedceb1c, 0x659f3a67, 0x6b9fdf7d, 0xefb9d0d0, + 0x895b1d12, 0x3f0acd79, 0x91de4694, 0x552beb87, 0xdda027d5, 0x7da23252, + 0x59c5f20e, 0x4387d303, 0xbe848fbb, 0x7cb3dd2a, 0xd7bfda2a, 0x420fcf9a, + 0xf820fd1e, 0x832687f0, 0xd19f7dc3, 0x0d7bfcbb, 0xeeac7f33, 0xed5bdfab, + 0x23f0fe79, 0xfd1cb3ad, 0x2e20cab4, 0xfb404e3f, 0x97639006, 0x977338c5, + 0x333fb67a, 0xa7e88834, 0x809edb52, 0xffe94f7a, 0x6e26a1bb, 0xe9dbaacf, + 0xefef325e, 0xde42ca26, 0x79e7e2ec, 0x1d48f74b, 0x41048e74, 0xcf07da1a, + 0x81ddbd52, 0xe1fd4479, 0xc0a47c21, 0x3cb5f403, 0x57e69a25, 0xf3a060da, + 0xed3e65e0, 0x952768fe, 0xa3fbb5fb, 0x96f9d3fd, 0x228df74c, 0xfe9442fa, + 0x53c6fa63, 0x4e2593e2, 0xdfd0d58d, 0xf41cb078, 0xbfe1178f, 0xa54f1401, + 0xc578d0c4, 0xfcfcbe4d, 0xce9da9b9, 0xcf9f7b63, 0xdc9a75c4, 0xe9b3b1f8, + 0x3f7750a5, 0xb44a607d, 0x20ea87d8, 0xe7fae9be, 0x07485137, 0x12b62aa5, + 0x49cf27f7, 0xd4081cfc, 0x39c81ce9, 0xfa59cfb1, 0xe907d1a3, 0xe50fdce7, + 0x529dc7c4, 0xc3b9c93b, 0xf9213ebb, 0x2769a9d0, 0xe53fb739, 0x6c0f5e33, + 0xeb72839f, 0x5e49ca70, 0x839f688f, 0x63b693e7, 0xf2f3023d, 0xe3ffe918, + 0x474dcebb, 0xe6513f7d, 0x25ec13f9, 0x87c7898d, 0x0917bc38, 0x39068138, + 0x87fe435e, 0xd2768cc6, 0x961f2217, 0xfe6e0182, 0x9d4fc298, 0x0f7bbccc, + 0xbf3167f2, 0xaaec08d7, 0xfed1d786, 0xc16a159b, 0xdc37ba38, 0x90c57d94, + 0x442c7fa0, 0x67eedd3c, 0x164a4dfb, 0x93b663ee, 0x4ed4017f, 0x3be57c76, + 0xbb33f23a, 0x51dbdd34, 0xd9fa057e, 0x72bb62c6, 0x4ceadb6d, 0x4d05d298, + 0xf49a2b7b, 0x91f39413, 0xeb7a732f, 0x9f897d4c, 0x92fb10ff, 0xe0fd04d3, + 0x48f59a1d, 0xf3c7121f, 0x7c6f4d7b, 0xb3a6f28c, 0xb4e4962d, 0x6d9d3f37, + 0xadee827a, 0xbbf412f8, 0xf00e2ddd, 0x94cbe165, 0xf3133007, 0x9f578c3f, + 0x79f9edfb, 0x6c83f91a, 0xa473dbbd, 0xbacf3ac7, 0x2e905c37, 0x607c1e5d, + 0x863fb827, 0x8d7186fc, 0xefba36ec, 0x005eb7a1, 0x7eadd975, 0xd5eeabd0, + 0x400bef1e, 0x6131e1fb, 0x760f9417, 0x7dff271d, 0xadebcf37, 0xf546bd05, + 0x2fb4bebd, 0x7a0ddaad, 0x2deb842b, 0xfe6517d4, 0xeab7146d, 0xfda3abdc, + 0xa7cd1594, 0x40fd70a3, 0x299f148f, 0xee937e6b, 0xfd117e9f, 0x8fd22c87, + 0xb30f94a1, 0xfd1439b7, 0xb979e510, 0xce2099ca, 0xfca3a417, 0xc8579e50, + 0xff3a04ae, 0xfdd1b52b, 0x798a2f11, 0x2ea0ab97, 0x5bcc5d63, 0x9acf7ce2, + 0xde62fdf9, 0x853c7b78, 0x0f9033cb, 0x8ae96f74, 0x40dc78b7, 0x42250791, + 0xe7c41cae, 0x4dff9ca9, 0xee147eca, 0xf7df212f, 0x294c2723, 0x9aac8e02, + 0xa58f3ae2, 0x885f3998, 0x1e5fa9ef, 0x7af9e277, 0x8f4f9f6f, 0xccefc549, + 0x7a68e7bd, 0x9f6c51e5, 0x1039417c, 0x8560724e, 0x55d61426, 0xf74482fa, + 0x5ecc953d, 0xd9cd0b9e, 0x747df522, 0xe6316c1f, 0x9eaf1ae5, 0x251d3797, + 0x953870a7, 0x5dffb8aa, 0x7da25dba, 0xbe1a73a5, 0x86f2075f, 0x1a2c05ce, + 0xf9173cb7, 0x8548416f, 0xbe4fddd6, 0x9d57ff51, 0x9e5eaf63, 0x9f0fd61b, + 0xd8dd2e97, 0xdd5d803a, 0x3ead895f, 0xf57cd437, 0xe7de6573, 0xb33cca0c, + 0xe1dc0335, 0x2e797331, 0x48b9ffde, 0x83c2efff, 0xb35cfbaf, 0x177a85ce, + 0xc3fb4be0, 0xf6a95fb7, 0xa8deaf88, 0xa0e612bf, 0xcd6b8ffd, 0x972cbbdf, + 0x9e31c75c, 0xb6bf80c4, 0x8e9d9f11, 0x1a77df72, 0x37b5e82e, 0x385c512e, + 0xb101ee84, 0x8f710e15, 0x7897784b, 0x39454662, 0x812a7622, 0xfa58e70f, + 0xfed28781, 0x5e78533f, 0xc74170d2, 0x3d962703, 0x78a33af3, 0x019485ce, + 0xf25f3ed7, 0x37ff9083, 0xac64be7d, 0xdfb76f2f, 0x4fb8c260, 0x507ffed7, + 0x956bb85c, 0x6fdf2671, 0x7808b230, 0xb69e1adf, 0xfbfe3dc5, 0x071f2a78, + 0xb9d383cf, 0xf5cd24fe, 0x7ea94ae3, 0xb22571bd, 0x697d5237, 0xe9b3a59f, + 0xaeb7e932, 0xee132c96, 0x39b67487, 0x556fc88c, 0x50affcff, 0x2d9dc3d4, + 0x5a3e51df, 0x29a7cfe7, 0xc89d6d4f, 0x24d83c17, 0xccdabcf2, 0x2bbcf87e, + 0x6c5cdbef, 0xfb28b0f7, 0x2e3c0ae2, 0xdc4a94a6, 0xa41eedc0, 0x7801d4f0, + 0xc7badbbf, 0xa67c6132, 0xe51230df, 0x41cff801, 0xe2fa37a8, 0xfeb0e609, + 0xf1ee2fe2, 0x8f353884, 0xf1896027, 0x1e38b884, 0xc63ac04f, 0x78c4b013, + 0x78c73e02, 0x9e31d602, 0x278c7580, 0x09e31d60, 0x013c6258, 0xce2f7f9f, + 0xe0817477, 0x234ef1e2, 0x9825fdc9, 0x5bf00cd7, 0x5ebfee22, 0x6fdf8db2, + 0x503be784, 0xaf955dff, 0xebe447b3, 0x3ed23738, 0xd95ed560, 0x73c22882, + 0xcc04f620, 0x843ee9db, 0x46aaa071, 0x8cdcb2c9, 0x3cd267cf, 0x7d64b5d6, + 0x6f9f1b31, 0x5ef058d3, 0x8e27a023, 0x81c97acf, 0xb69603f7, 0xd5b8a36c, + 0x94fdb0b8, 0x20d55fe7, 0xceb78c31, 0xb93f71d0, 0xc3a78642, 0xec953f69, + 0x1b5d0ae8, 0x3b652ff9, 0x79fbb324, 0x9751aaef, 0xfb284e48, 0x2bf90bd4, + 0x9834e156, 0xacf43c8b, 0xe15be795, 0x153e613f, 0xec9baf22, 0x68bb3710, + 0xe35fee21, 0x3a67f973, 0x36f15267, 0x1b87ddff, 0xb6955be5, 0x3cc6ae34, + 0xbbcd9bad, 0xf62a9b9a, 0xf9f833ab, 0x8b27bc91, 0xf185ef76, 0xc8e8367a, + 0xd434594e, 0xebe910b6, 0x714ac690, 0x0dfb4397, 0xdc9d67e4, 0x7711e898, + 0x510791c9, 0x46b163dc, 0x9ffdfd22, 0x54f2b689, 0x79b1d7a0, 0x32de29f3, + 0xf88fdc36, 0xbdc3a158, 0xd895f989, 0x3334e2ef, 0x7472b9c5, 0x9fd477ec, + 0xf052e3c8, 0xd12b5394, 0xcc85dbbd, 0xe606e742, 0x863df95a, 0x73837dca, + 0x50abcf19, 0x46f16ae8, 0x8b4bdf89, 0x8a10bc3f, 0x9e1c9cfb, 0xa03e5b73, + 0xebe64ffb, 0xa91bfdb8, 0x91e3fbe2, 0x89fcf30f, 0x94737805, 0x53b7f08c, + 0x9df5fa09, 0xf36e7876, 0xedc5141d, 0xf618737b, 0x4344785f, 0x6139c179, + 0xa46c1393, 0xde51c7e7, 0x47bae484, 0x7ae525fe, 0x6f33d3f2, 0xcb8690e2, + 0xf927801d, 0xaf48ad59, 0x51b1ef14, 0x98a6a479, 0xac0919ca, 0x5d6ef3df, + 0xc46cdffb, 0xf8aa73ef, 0x3cd7c93d, 0xfd73e7ff, 0x456b6f73, 0xeaa45d5e, + 0x47bc08d8, 0xa347f228, 0x1391e105, 0x87ce9fb6, 0xb7fe8ac5, 0x456fe427, + 0x99fd597c, 0xfdc7c71d, 0xdf000d99, 0x84905c5c, 0x15a773f1, 0xef74d7cf, + 0x47944c97, 0xdd1c957d, 0x53f30ab8, 0xba24e2aa, 0x67d73d27, 0xf4284e43, + 0x6d131b9f, 0xd55e3941, 0x9dafe3c4, 0xb83a7250, 0xfc4b21cd, 0x6ba7bc5b, + 0x4fe3c082, 0x5337b609, 0x9f3df407, 0xabacf828, 0x1fcf32e5, 0x767c71be, + 0xc80bdd2b, 0xf42abdf8, 0x989af307, 0xb4e29832, 0x34f51d0a, 0x3a416d84, + 0x89e848fa, 0xd53fb3d9, 0x92d11da0, 0xba456b64, 0x6974539e, 0xb3ad2855, + 0x929938ff, 0x271def77, 0xffb79773, 0x1ff6f917, 0x795354d7, 0x952966b4, + 0xfe76356d, 0x75f6d7de, 0x59c5cdea, 0xef3b624f, 0x9bd32b38, 0x02cf4803, + 0xb678f3bf, 0xf8155c57, 0xe7c6e55c, 0xe7025b63, 0xa43b45ad, 0xa9f74b4e, + 0x12f3be62, 0xce85c923, 0xabe37ed4, 0x148cdc0a, 0x8661ed8f, 0xecff08e1, + 0x0ab558a4, 0x78115fde, 0xc89be250, 0xe43eb82f, 0x5f912c17, 0x7e3eead4, + 0x2c0b5e79, 0x02edc99d, 0x0605d93b, 0xe5eaebc2, 0xbc244f20, 0x21e4c95f, + 0xc9782e4f, 0xee607013, 0x2d61f3a6, 0x47efba3a, 0x86ccf7c9, 0x7ef0cae2, + 0xcb938be4, 0xce3ec197, 0x42af749d, 0x13e50fa5, 0x7d139f03, 0xf3c75a1d, + 0x3e588af4, 0x6ae9d7bf, 0x7ae74339, 0x9f7707e6, 0xcfda0e78, 0xf648c47f, + 0x8588eacd, 0x7227ff23, 0x872a72e6, 0x7f78d3c7, 0xf77afa83, 0x7097ac37, + 0xbdf175ff, 0xadf1032c, 0x0610dfdc, 0xfbbf90df, 0x90dfdfaf, 0xef00369a, + 0xdc7bb06f, 0x8d7610df, 0xec461bfb, 0xfb86667e, 0x76230dfd, 0xbdebc8bf, + 0x333c37f7, 0xffa4e303, 0xfc37f78b, 0x7de7e706, 0x34b8c37f, 0x746f0f2e, + 0xb1d8037f, 0xe9fdf839, 0x962e6b78, 0xdedd6291, 0x888f95e7, 0x9556c77d, + 0xb996366d, 0xc7ba76fe, 0x91ca88fc, 0x2a47e589, 0x1cf8fde7, 0x1a6a62f8, + 0x13ee45f0, 0x1ef14319, 0x939d4896, 0x26f7c8f2, 0xffb00b5a, 0xd3ac12af, + 0xf38ef4b0, 0xc1f58ad7, 0xf7c2ee7c, 0x0a62f9de, 0x71a6545d, 0x8d2abfbb, + 0xdae8d1f3, 0x57edcffe, 0x9c84a9a5, 0x61bcfebc, 0xbe708bbe, 0x86d9fcca, + 0x0f9c4cc2, 0xcc58b7cc, 0x9bcb04b7, 0x0ab697bd, 0x922c907d, 0x724f138b, + 0x04ca943b, 0xed1023b5, 0x390f8185, 0x03be7102, 0x780dbbeb, 0x7b45e3fe, + 0x86ed01b7, 0x1b759717, 0x568bf9f0, 0xdded9f9e, 0xcf1a637f, 0xdd1848f3, + 0x190fdf4d, 0xdb7bdca0, 0x5af6881d, 0x5afbf142, 0x4b9d0c7b, 0xc3d2789b, + 0x7f13325e, 0x86cf110f, 0x4862a43c, 0x619e430f, 0x5c716f3c, 0x52b7e908, + 0xfa5a6f3d, 0xa42afdd0, 0xcc0764a3, 0x12fe8ddb, 0x3c7ba937, 0xe8baf1cf, + 0x3a1ee53b, 0xde3cd3b0, 0x4f9e3057, 0x23c8503a, 0x836713b4, 0x7e28a9bc, + 0xbf941fff, 0xf578d4e0, 0xf41c7747, 0xea564fe6, 0x7de0ef6d, 0x9e4d55cc, + 0xf3de16ed, 0x459efd20, 0x5a8decf1, 0x1a8b87f2, 0x5e596357, 0x7f16a9fe, + 0x4aec05de, 0x5760f68f, 0x9aafd47a, 0x2a3cd7a7, 0x3ab4bfef, 0x81719fac, + 0xa7715e0e, 0x671a4383, 0x87a7fa32, 0xbdc47c2a, 0x39f7fc6e, 0xe87388b6, + 0x9d9e3d2f, 0x3963f3c9, 0xaff7c05d, 0xd51d1cdf, 0x367b7b52, 0xb9be424b, + 0xc1c8a951, 0xb46d7bde, 0x09e13ee2, 0x2ab3defc, 0x1655f7e1, 0x510ec899, + 0xed52baf8, 0xed8d58ec, 0xbe78fc42, 0x7dd19a9b, 0x0354c755, 0xf8e4fdf9, + 0xb109f587, 0x5a158fb4, 0xbf6174eb, 0xba2593dd, 0x2f9c7e47, 0xaa39ab97, + 0x2597f2fc, 0x25da16bc, 0x036be77e, 0xe5a55ff5, 0x10cc0bf7, 0xf1c35ae7, + 0x57ca127e, 0x7fa16730, 0x01ee2b5e, 0x1c4495ab, 0xd603dc54, 0x01ee50e5, + 0x10b33c73, 0x9d3759e0, 0x85dc83df, 0x677b41f3, 0x03dc56a6, 0x3efb3f96, + 0xb94b3f7c, 0xd1f6387f, 0x47ba10cc, 0x5b7682ce, 0xf3b7065d, 0xdec47b95, + 0x51cbcc96, 0x621fd84f, 0x3ddf4e34, 0xf9c58372, 0xf9018714, 0x6c0fb95e, + 0x1cedbf90, 0x5efbcbe2, 0xfca4a7b0, 0x9fb00b59, 0xe55f3e34, 0xb34381be, + 0x9dba3e86, 0xfb85d1c3, 0xfc13555d, 0x379f4fc8, 0x04a4702a, 0x66a914fc, + 0x3fd01d76, 0xfdd1cdee, 0x8ed4eb69, 0x907ef015, 0xa2efdc5a, 0x742df616, + 0xda9c33ed, 0x2f50b55b, 0xb311627c, 0xc91ebda2, 0x38f77ee8, 0x820bcf3d, + 0x189618ef, 0x0fd196a6, 0x5e2e3c60, 0x2ffbc018, 0x158e630c, 0x5567f512, + 0x23f3f929, 0x188477f1, 0x7bf1f9c5, 0xbdf4e1ff, 0xb7bfc55d, 0x121ca1aa, + 0xebd1efcb, 0x7d23a55e, 0x3066b851, 0xb29307f9, 0x9cece53d, 0xaaef9e74, + 0x9ba61f94, 0xc3437b95, 0x56f38e11, 0x455e5326, 0x02bf21ad, 0x6efb30fd, + 0xe1703f7e, 0x67277bea, 0x0d5efce1, 0x9d9920b6, 0xbf48d29b, 0xe56f322f, + 0x0e7ddfac, 0x0c3b6dcf, 0xba54fcf4, 0x167a606d, 0x73ccf9c6, 0x7983c2f6, + 0x62d3dfd3, 0x39cda0de, 0x505be2f5, 0x1e37b14e, 0xa7447bc5, 0xfb5329dc, + 0xceff8c29, 0xc7c95b01, 0xa4bf6c99, 0x26fe870e, 0xcc48968f, 0x514c1875, + 0x0a16efe8, 0x73a4267c, 0x606b523d, 0x875ef133, 0x1383d5c2, 0x1938ee30, + 0x91fa91f3, 0xb9d3f3bf, 0x231da9be, 0x73bb466d, 0x679e58c8, 0x15afb4a3, + 0xe925b979, 0x0864ef5c, 0x21f528b8, 0xd17dbcb1, 0xac475d5a, 0x571a963f, + 0x5a4f9422, 0x9d70b3b2, 0xee586293, 0x1ffb8426, 0x874cbef8, 0xd22c0401, + 0xc234b6f3, 0x77758d83, 0x6df5c1ac, 0x75f5a14d, 0x9145318c, 0x5df7171e, + 0x3971302f, 0xdc4631dc, 0xf76a6813, 0xb1457a43, 0xcf5ef78a, 0xddf02417, + 0xf0c7dad2, 0x2fe692f7, 0xf6f9d3d3, 0xa34e4f05, 0x3afcceb8, 0x5f739f99, + 0x35ef79ef, 0x7193dbd8, 0x58f7de7e, 0x8d57df7b, 0x53748234, 0xba225eb4, + 0xd16b521b, 0xf752de62, 0xe0a3f046, 0x15d1917d, 0x91537e87, 0x215960c5, + 0xf59f73f5, 0x91e700cf, 0x8c0abbf8, 0xc3d5cce2, 0xb8e3776c, 0xe90a1b85, + 0x54df68fe, 0x0c1fed1b, 0xfd0f7f01, 0x39d2e7c3, 0xf0024ddf, 0xea42bdd2, + 0x178c08f6, 0x83cf29f9, 0xa246094c, 0xfbc30363, 0xa6343a3b, 0xc75f9c04, + 0xfd0a832a, 0x382b49c2, 0xe99f033d, 0xfcf1c3d5, 0xbe41f315, 0x9fbe2a1f, + 0x5f9d5cbd, 0xdc00728f, 0xa420bf1a, 0xe7a20ca7, 0x0cb62caf, 0x8799d79c, + 0xbb9428d8, 0xe46fd7f3, 0x00f412f3, 0x3c38e576, 0x5b667f2f, 0x2bb470f4, + 0xcaf9fa15, 0xdd38bd92, 0x94ee0e9d, 0x9eb0ff08, 0x3f8f68c3, 0x14b79969, + 0x03f3c3df, 0xb2931f48, 0x95bf945d, 0xcc339723, 0x6709ea7f, 0x47a9de74, + 0xb59ec1c8, 0x15c3b26a, 0x0fc8a2b9, 0xde2b07a0, 0x5be0a063, 0x57ff2391, + 0x87c01a7e, 0x672290e4, 0xd0a47914, 0xbc972297, 0x800e6ae9, 0xf4e1f6f9, + 0x453fc93d, 0x543ae1ee, 0x91e4fbc3, 0xdacd6782, 0x28976431, 0x2f91ce78, + 0xe1137eec, 0xbf246c50, 0x462e17ae, 0x4a25c13d, 0xdef09acb, 0xacfbdaee, + 0xe2dc6b1d, 0x7b14f7a5, 0xb7bf3f9e, 0xf9dcf3da, 0xe79ea5dc, 0xfd2f67ce, + 0x03da10ec, 0x0d6dfd27, 0xff139f88, 0x2ff9ea71, 0xff8bf9e0, 0xc79e2e71, + 0x3dd02f25, 0x7ccb3d13, 0xf9da3cc4, 0x496996bc, 0x7e110cef, 0x5e21fe2a, + 0xa7ce31e6, 0x4781d185, 0x43ce6f51, 0x7de3a538, 0xf9e08c57, 0x139f8177, + 0xab853f02, 0xc3b69c78, 0x76dc512e, 0xa7c14ade, 0xa3ef3d6b, 0xb58226f8, + 0xddf6c6fb, 0x43cdf13f, 0xd7c85109, 0xb613fdca, 0x8a3ee2b5, 0xbfc987a5, + 0x14f729b3, 0x29eebdda, 0xed4ada5c, 0xbde7bb58, 0x5699be10, 0x1975c52d, + 0x4bcd3b8f, 0x12f3c83a, 0xcc264837, 0xcf122a0f, 0x1e4ad68b, 0x4b3f8ae7, + 0x5373f1e7, 0x57ef9aba, 0x27a4df61, 0x523e9036, 0x06e414e8, 0xda2e739d, + 0xe85da190, 0x89e77f26, 0x5493f3e7, 0x69c3bf1e, 0x3e79e74a, 0x2c948815, + 0xa3122f3c, 0xcef2405d, 0x4a48fb4c, 0xc34979fb, 0x759c6357, 0x35fc7ade, + 0xbeb8b73c, 0xdd298f98, 0x3d10fdc4, 0xf23f2de8, 0xff95faab, 0xf8a879bd, + 0xfe695bcf, 0xbe9567e4, 0xfc55ebba, 0xbfd29b7d, 0x950f48e9, 0x4979130e, + 0xd3918ea9, 0x9f86ef28, 0x7814ad7b, 0x6bebb71f, 0x54a78c7f, 0x33bfe1ed, + 0x96076500, 0x298acb95, 0x01695a4e, 0xfaba08be, 0xaffbce5c, 0xef9fcdfe, + 0xc523d9c7, 0xefd2c2ef, 0xf9ee561b, 0xcab5e296, 0x7f7a1cef, 0xecfd2557, + 0x267ee3cf, 0x43bbfee6, 0xc435fb39, 0x3ccd552f, 0xf7b558ce, 0x5637ed32, + 0x6a155fed, 0x57fd67eb, 0x7ab3e79f, 0x62aa779c, 0xfdd12feb, 0x5738d726, + 0x9c4c3c14, 0xdd85bbfb, 0xd489e742, 0x1732f28c, 0xc7a3bf0b, 0xfcdd7f11, + 0x2a4daaf2, 0x51eca7ca, 0x8f30039b, 0xeff58ba1, 0xc61ccd27, 0xe045f4f5, + 0xa95fbc27, 0x7da641ab, 0xbe06aef1, 0xf0d951ef, 0x23de2b44, 0xa255b950, + 0x9ce57b6d, 0x991ee567, 0x7ef3dde9, 0xf8337f31, 0xdb2cf3da, 0x81f747e5, + 0xeb253895, 0x8f4f9836, 0xc0301cde, 0xc3593e6d, 0xe9957d38, 0x2f09239c, + 0xc329fe62, 0xd4799ecc, 0xbdd04f2d, 0x93aed004, 0x7cd797ec, 0xe82fcf19, + 0x3cf38a3e, 0xe50479bf, 0x1b389403, 0xa6bf692b, 0xfdf297c1, 0xef3c69ce, + 0xc6231ae3, 0xdb8c331b, 0xcf31e71d, 0x557fbf1c, 0xe716fb26, 0xce797c89, + 0x3b8cbeeb, 0x0c7777c4, 0x05d0f6e3, 0xfb4a9fc1, 0x7f876712, 0xdd3fb41c, + 0x539519f4, 0x37be3db1, 0xfea3a5b6, 0x97c7bd3c, 0xbd381dee, 0xb7dcb9e7, + 0xce8bbc61, 0x1b922131, 0xe30d159f, 0x37173dfb, 0x1c13fb8b, 0xa03ce2c1, + 0xbe73d693, 0x3b425221, 0xcbe442b9, 0x86f3df9e, 0xd8f88abf, 0xdbfce34e, + 0x57999271, 0xcfee49c5, 0x6fa3f944, 0xfc9388f7, 0x295ff56f, 0xf948779e, + 0xad6e9c62, 0xbfe1a7c8, 0x7c1265f7, 0xe6b1f627, 0x85df330c, 0x8fb015f7, + 0xb275eff8, 0xd1a7e641, 0xe7f39abf, 0xe1d38a60, 0xfd617cef, 0x9e798ffb, + 0x42119cc1, 0x67b784ae, 0x47673ee1, 0xca23b734, 0x022702d7, 0xbe80cb48, + 0x72bf00ec, 0xa0d98a87, 0xee30d8fe, 0xfa079d77, 0x91c30ed7, 0x09dffe79, + 0xdef10ff0, 0x3cebfb30, 0xc63ca6ff, 0xafe78095, 0xac3c8bcf, 0x425720f2, + 0x417bf430, 0x817949d0, 0xbefdc12b, 0x2e2df2e4, 0x20bc43ca, 0x3df18ff2, + 0x87ca35c6, 0xd11d76f3, 0xf73a4ea6, 0xa18fd7b6, 0xd37aaadd, 0xe2b0e88f, + 0x9d16c365, 0x6e7e1e9b, 0x2f8bb718, 0x2ceff968, 0xf9f3b7d8, 0xa06ff894, + 0xfa082e7e, 0x40d9f12e, 0xee213bf3, 0xf2d12873, 0xd186877a, 0xef749def, + 0x9db3f7e4, 0x87db688b, 0x99db9ce3, 0x1dfa794c, 0x4d858ed1, 0xe5e79ef4, + 0x73a2be95, 0xeecebce1, 0xe77ba3f4, 0x1363fef3, 0x6cf465e5, 0xff2849d5, + 0x74600ece, 0xb6ecec4e, 0xcfb7a401, 0x17da664a, 0x3061fb3a, 0xb35a57f5, + 0x960fce94, 0xfb409882, 0xb43cca13, 0x7b6ecedb, 0x17f90a26, 0x6eb16bea, + 0xfce61b63, 0x0774f911, 0xdcea77bf, 0xbb253f2b, 0xa52b93ef, 0x82b37ef7, + 0xdbfde54f, 0x16df1f82, 0x30eefcfc, 0xbe77d713, 0x6862a7ce, 0x01bf9c7d, + 0x001fe4ce, 0x67fdd13f, 0xa1cd9c27, 0xfa53f412, 0xf5159fa6, 0x95c6877c, + 0xc1c11cf0, 0x1bfefc57, 0xecf27f23, 0xebf260f6, 0xfd838c31, 0x469edd9c, + 0x7e4af5f9, 0xd9b424de, 0x04698f08, 0x73791cdf, 0xbf63dd3a, 0x17f297d5, + 0xa2dcd74b, 0x993d7ca2, 0xafa5dfdb, 0xea249fce, 0x2edfdc56, 0x0a83e3fd, + 0x471f68bc, 0x172fc3c9, 0xcd62b472, 0x6e78016d, 0xa659fd81, 0x6acbe2fc, + 0x0dee279e, 0xcb85a317, 0xcf7db29b, 0x0396df13, 0xfeefe39d, 0x34738995, + 0x78f0af65, 0xdbead974, 0x78f9269e, 0x9cf0c354, 0x13e705c4, 0xff70eefe, + 0xbeb9c851, 0xbed42def, 0xeff3da0c, 0xf9a7f23f, 0xb9d0d76c, 0xdd7c6f0e, + 0xc8aff7f4, 0xa5f7d6ff, 0xfa03b04e, 0xccb99fc9, 0x1bf81eda, 0x830681ca, + 0x794f4ec5, 0x8d79f3be, 0x0f3f2173, 0x70f92066, 0x8efc503e, 0xbbcf0d77, + 0xf13d5b2a, 0xfffef84f, 0x4343a703, 0x00800064, 0x00000000, 0x00088b1f, + 0x00000000, 0x7ccdff00, 0xd555740f, 0xf73eef99, 0x9b926e5f, 0xfe4026e4, + 0x426e1210, 0x3c498880, 0xf1101ff9, 0x314c4902, 0x04a2226a, 0x0921bc63, + 0xa0304804, 0xcc3b135d, 0xa404c5cb, 0x8d38cf0a, 0x0dea958a, 0x02ce1e45, + 0xad282827, 0xa20ae674, 0x6b1ac474, 0x83b1d8ed, 0x5a907117, 0xbb4c312d, + 0xefb4e3a2, 0x9cfb7dfb, 0x412e73dc, 0xd75efafa, 0x760b597a, 0x7fffb3be, + 0xedf7f7ff, 0xa5f3f11d, 0xc422a662, 0x109440ea, 0xfe7f82b9, 0xb9f87f84, + 0xbaff885e, 0xa9442ec6, 0xd4939d10, 0x95094b04, 0x3f855b6f, 0xaf07ca8b, + 0x2c1045bd, 0x7f73b6de, 0xfe5ebdbd, 0xc677eb4a, 0x64cabc2e, 0xc40e4621, + 0xbb537606, 0x3ea54edf, 0xcfb7efd4, 0x9c600ecf, 0xeee28933, 0xf6c1173a, + 0x798dcca1, 0x52ca2654, 0xca215488, 0xa6eb5884, 0x7df43d5f, 0x06e650e1, + 0xb9072bd4, 0xdfb971a4, 0x306b6eda, 0x04da9e2a, 0xefb507a9, 0x0cc439a0, + 0xb739d621, 0xa80b5b0f, 0x88acb024, 0x125460cb, 0x9f68fb95, 0x6b3ef0ce, + 0x1a1c6893, 0x1d4aa96f, 0xcc07d0a7, 0x30ed4c97, 0x0d5a164e, 0x85f3ea39, + 0x1de109f0, 0xf63af9a2, 0xcff3fb9b, 0x06577c64, 0x453ea21f, 0xbf94a718, + 0xcb27267a, 0x4a8585f9, 0xc68de2bf, 0xac36fa7a, 0x75deb411, 0x29de8f5d, + 0x58fbc20a, 0x0e351367, 0xc519df5a, 0x1339ebca, 0x35beee2d, 0x74f9d2ef, + 0x9e175efc, 0x9e69b847, 0x1562fc0e, 0xe1eaa162, 0xa7ee007d, 0x94fa3af1, + 0x964f3ced, 0xe4d8479c, 0x113c74fe, 0x71f51c5a, 0xab50bf54, 0xf5feccbf, + 0x3d6e5e75, 0xcf0b54cb, 0xf3cb267b, 0xfbd07cc8, 0x9bbaab2d, 0x5d7e2fea, + 0xbae4909c, 0x52f43f94, 0xeaf08708, 0x57fad1e3, 0x99c782aa, 0x7f79baa9, + 0x587d68eb, 0x0e5dace7, 0x7bb9bcd3, 0xfd9cf0cc, 0x90ef3866, 0x6a382e19, + 0xccd7d586, 0x5e6d12f0, 0x7b7b4f1d, 0x64d48088, 0xcb938f5f, 0x0b71e87f, + 0xf6212ccf, 0xfc32a4f7, 0xcb878f7c, 0xfe5c9ea1, 0xca8f42fe, 0x0a9ea1f0, + 0xf1ea5f86, 0xa7a47c32, 0xf71fcb86, 0xeff7f1d4, 0x18ea7869, 0xd7edf8b4, + 0x08d83a48, 0xd147e25f, 0x5e156781, 0x85cbcb0e, 0xf800e486, 0x0742d849, + 0xb979265e, 0x7d4f26b0, 0x18be03c8, 0xf020f339, 0x7754ef5b, 0x1e8bdc13, + 0x882c4269, 0x4a9dfdf3, 0x329dfaf8, 0x8b2d35bc, 0x50b2cdfb, 0x1c7e7bbb, + 0x3a71845d, 0x825da28a, 0xf96d0be6, 0x17352b64, 0x07be7189, 0x05c75a54, + 0xe05ec8fb, 0x78fbb3b7, 0xfaa6c893, 0xafb79ecd, 0xbb13f497, 0x988b8e31, + 0xcd10ae68, 0xfd16c256, 0x3bf456ba, 0x418467c0, 0x985c5d67, 0xccfb2b8e, + 0x376c43fa, 0x18ae34c0, 0xbbedc330, 0xeed7edcc, 0x01f30a89, 0xf4cfdfff, + 0x923ec67f, 0x9c7a26e6, 0x1db9ce7d, 0x2d1b3feb, 0x3f410f96, 0xc05b772c, + 0x87d11ba7, 0x756550f0, 0xb8d95eb1, 0x451dd943, 0x9aa1fdfb, 0x4f47fdc4, + 0x79104cce, 0x96bfe797, 0xc50e5231, 0x62bb7806, 0x89d33cc1, 0xe2d7212d, + 0x97495697, 0xf40b78d4, 0x1adabdd1, 0x98b4ef67, 0x20557fd6, 0x574fc4c6, + 0xc1324bef, 0x4d5343f9, 0x9239afed, 0x0c2faa6d, 0xb7d531ce, 0x55f9b6de, + 0xa589e92b, 0xed4d8bdb, 0x697e422e, 0xa4f7179f, 0xad6cfeb0, 0x778cd6bb, + 0x2dd3ada1, 0x276bddbf, 0xf7f6a17e, 0xfd534e1e, 0xedd69718, 0x51db21a5, + 0x54cf5b49, 0x8f595bfc, 0xb3ea2a0f, 0xd50b5e34, 0x745ea8fb, 0x0e9c79bb, + 0x36edbf0d, 0x96d377e1, 0xadf9a63e, 0x70e3bed4, 0x12b3604a, 0xb776bfe6, + 0x78d226f0, 0x170ce66b, 0x359c6904, 0x1961fd3f, 0x3ad3a9f8, 0xfe26e998, + 0xec094fba, 0x7cdf1375, 0x7930749a, 0x687fd52e, 0xfe0bbdf1, 0xe964ecfb, + 0xcf082acf, 0xaab7ed9f, 0x1ed32798, 0x85722e4c, 0xeed32ef9, 0x07fd018e, + 0x0135adfb, 0xad3a63a2, 0xe6149ac3, 0x49fec18f, 0xf0ae3931, 0x987e75be, + 0xbb4e08ee, 0x217afb17, 0x80567d5a, 0x5ed8f23f, 0x55693c5d, 0x0bed1fc0, + 0x9ae3bf15, 0xba373ef0, 0x3f7d3f65, 0x0bfc931f, 0x23915792, 0xab4fbdc7, + 0x57aaecff, 0x8fb43c0b, 0x99239e8e, 0xcb75e856, 0x5469bdfe, 0xbf7d3836, + 0x07da7ec3, 0x7cebfe67, 0x7bed679a, 0xf6a56156, 0x38b031ff, 0xefed2e7e, + 0xb57603d3, 0xfb07e096, 0xd108e87f, 0x02dad63e, 0xf6ca950e, 0x5e1d06e7, + 0x37d86f2a, 0xed57dfc8, 0xbf06ae6b, 0x5b5d16ae, 0x76f3efb1, 0x3e0377e2, + 0xbb2917da, 0x65eeb4dc, 0x7fde1685, 0xa1f08c7b, 0xff3acabe, 0x6fec64c4, + 0x9248529f, 0x3bab6e25, 0xefa668e8, 0x6fa942ce, 0xf465e522, 0x29aad2d4, + 0x48747ed4, 0x4e5fbc61, 0x7305963e, 0x8e963e59, 0x6dbcb879, 0x9274f88c, + 0xba89ef10, 0x791fb67c, 0xd1f784c2, 0xcfe65653, 0x00d6a3d1, 0x23bb47ec, + 0xe8297938, 0xa6764ff0, 0x4ff12743, 0x2749f105, 0xca8f3efd, 0x1356f9ba, + 0x1953deff, 0xe5f7e26b, 0x344720c2, 0xaa62edde, 0x76adbe09, 0x1dfda986, + 0x211d5db7, 0x7ae1450f, 0xc2f35bd6, 0x6e7704f5, 0xf8147bf2, 0xf991620f, + 0x989b953b, 0xfa9896cf, 0xc35b8a77, 0x7be7c0ed, 0x0b3c61de, 0x95b8ec31, + 0x893b64ec, 0x72d3f40f, 0x7bed19df, 0x46d3bf88, 0x7d39724c, 0xd2affa86, + 0xec05da4e, 0xf09af8a4, 0x8266865d, 0x76a5f2ed, 0xcdad0892, 0x58eb409b, + 0x7c2ac87f, 0x18643f66, 0x41bac5f4, 0xed4dce87, 0x9dfbb0b5, 0xed0167d4, + 0xec3fd3a3, 0xfe3172e8, 0x9284e96d, 0xe88afdf5, 0xcef6e24e, 0x6f0924f4, + 0xf643f7c2, 0xfc06428f, 0xd431bc61, 0x4336b49f, 0xd7eb225e, 0x0f61bed3, + 0x5fed8bd6, 0xd7ad5f40, 0xd5c6d7c7, 0x4ef573f9, 0x6f5867ea, 0x164f38e4, + 0xd79f987a, 0xfaf83bee, 0xd2cbc254, 0xc842c4ba, 0xbd50c74f, 0x52ef39bd, + 0xfdf5d33e, 0x004b76c5, 0xea7a3cf2, 0x68d9f338, 0xf9f98dbb, 0xef58f84a, + 0x48ffbc15, 0xfb455bfe, 0xabfcd271, 0x406a290e, 0x9780ed91, 0x08cbe0a9, + 0x804fa4bc, 0xe34f1d2f, 0x5fa88b78, 0x9d685f8d, 0x01288fab, 0xf04bc9e8, + 0x1b51e3a2, 0xb04f957f, 0x09eb497f, 0xc6227af0, 0xf2911513, 0xed03af77, + 0xc2297747, 0x0f195cad, 0x58398eb7, 0x90cfa7ae, 0xac391efb, 0x6fd3f0a8, + 0xf7f1b31f, 0x23a97e71, 0xde41157c, 0xce39f2cc, 0x5e52753f, 0x73258d96, + 0x7cd7ffbf, 0x99fe2574, 0x6dfa433e, 0xcb0efeba, 0x8fd203cd, 0x7c9b8c28, + 0xbf4e968e, 0xd01eb297, 0xfde5e9f4, 0x4deb3f52, 0x7f9803f2, 0x5b8bedc7, + 0xdda371e2, 0xbe089293, 0x9ddb354c, 0x21279b51, 0x346fe0d1, 0x14f53d93, + 0x25a75f83, 0x1f1c6887, 0x57d806fc, 0xb4fb1f4d, 0xcdf6b6f1, 0xfa190cc8, + 0x93d8b6f9, 0xdccfb505, 0xe6cb893c, 0xec327768, 0x6b66f345, 0x47e0ec1d, + 0xae494ddf, 0x68fa3e20, 0x2d727d8b, 0xfdd1f10d, 0x1f229925, 0x67971570, + 0x1e5a8d1f, 0x7eefc098, 0x9d1bb35d, 0xb67de3ff, 0x4e5b9f5f, 0x9c872fc5, + 0x5f1c396d, 0xdbace341, 0x9b996ef2, 0x8b16f6ec, 0x6a42bdef, 0xc832a9f7, + 0x07b85b76, 0xc3f2ea0b, 0x2ddac37e, 0xefb02955, 0xfe3c7f1d, 0x6fbbec34, + 0xfe193db3, 0x417e6fe6, 0xbb614f76, 0xf9c2fec5, 0xe7bfc968, 0xf40d8d9f, + 0x579fbf12, 0xbe9a3784, 0x5abeb1af, 0xd1d936e0, 0xfe63b7a3, 0xef349cc7, + 0xd81bcc14, 0x55798a9b, 0xebcc2cff, 0xc1333cdb, 0xdc7e0df7, 0x1fa53b3d, + 0xdbb357b7, 0x01a88417, 0x03bfe0dd, 0x474eff86, 0x01dff60d, 0x09477fc3, + 0x47df1dff, 0xde92ddf2, 0x388523bd, 0x8917fa7f, 0xabb62edc, 0xe7f85cae, + 0x2a312af7, 0x8abdccf4, 0xdd06e29a, 0x7b49a4f7, 0x722fd1aa, 0x908dd73d, + 0xcfe065af, 0xa29cc7eb, 0x0bbfc0d5, 0x5e09a245, 0xb5334cec, 0x996772af, + 0xbd486fea, 0x2dff54ca, 0xbe09a14f, 0xa9ae7731, 0x42ea4dfd, 0xc54b7c13, + 0xebed4cb7, 0x7826f5bd, 0xa9834d69, 0x66bab2fd, 0xcb1dfd53, 0x1bea98d7, + 0xf04c1b7c, 0x9bf7ed9d, 0xb5d5dfda, 0x15ef54d9, 0xdaec1b6e, 0x08ab9c51, + 0x7384ffef, 0xbef79515, 0xa465d335, 0x96c5fceb, 0xf809a1ae, 0xf4915a76, + 0xf62e6e63, 0x5f1114a6, 0x1f245866, 0x8b85e952, 0xc3c8a730, 0xa822e9f5, + 0x70ed73c8, 0xb226f81a, 0xfcfd645d, 0x3d1763d8, 0x2fadc344, 0x2360d55c, + 0xfcbf31bd, 0x820cf158, 0x6be0be8f, 0x987e91b0, 0x17b1ed7f, 0xfd7e09b3, + 0xfd646785, 0xa22ec735, 0x6d8be17e, 0x60a97eb2, 0x68b86297, 0xd69f834a, + 0xecfaff3d, 0x8b8caaed, 0x3973bfb0, 0x5a1e057e, 0x280f126d, 0x289fc483, + 0xa27f118f, 0xb3f88d7c, 0x25e68735, 0x927944fe, 0xfef897ce, 0x44be742f, + 0x97ce8a79, 0xe7467f28, 0x74c3944b, 0xf3f944be, 0xfe5ce59e, 0xfdc7c7a2, + 0xced3d97e, 0x5d3dfbe5, 0x7adffdfc, 0x75fcb9ba, 0x57bf9f8f, 0x0f716917, + 0xa4ca5004, 0xaf3f01dd, 0x8882ba77, 0xf623889f, 0x2cf5c6cf, 0x95e2bbc9, + 0x4cf15376, 0xf6548d16, 0x2c508976, 0x4b6434e4, 0x10e4e73c, 0xbf689884, + 0x136abd61, 0xd67e0ce7, 0xeb7b47df, 0x318e388b, 0x59facdcd, 0x2c5a7efb, + 0x3a2228cd, 0xddf2cd4d, 0x5beb4451, 0x25b2d456, 0xf5c7f481, 0xc1d9775f, + 0x4459ef2f, 0x327c44fb, 0x5993e347, 0xf446dec5, 0x02f3a0cb, 0x8d064df4, + 0xdfa5956b, 0x11cf2492, 0xdeb24551, 0x538e6542, 0x77e413f8, 0xae4923af, + 0x41c8f803, 0x11be0d99, 0xa34ce302, 0x172a4ef6, 0x700be338, 0x5eefa44e, + 0x122efc9b, 0x8d56e30c, 0xd77bd609, 0x7fb1b36d, 0x41136712, 0xf17683cc, + 0x1ce75e54, 0x4f88542a, 0xa970ebae, 0xd0a5c738, 0xb7114777, 0xdca95af3, + 0x5f6a7bf3, 0x1fc9aac0, 0xbcf5c453, 0xdc9b388f, 0x4f98d547, 0x553fd178, + 0x7f5a51a8, 0xa3f7aca7, 0xbb3875ff, 0xe7c97096, 0xd4281fc4, 0xf3c788bf, + 0x1f68ff62, 0x3107db2b, 0x681fce5e, 0x1cb0f8be, 0x150d2465, 0xc67fa9ba, + 0xbd0a977a, 0x30616bbd, 0x6970fa0d, 0x211d82e2, 0xbeef4fa2, 0x8e436f84, + 0x7be597be, 0xe77e7818, 0x950c9e27, 0x66935be0, 0xaf59414c, 0x40dfc1f9, + 0xd3f47e9f, 0x5de3a5f1, 0x6f8e97a7, 0x9e3a6e9d, 0x48bf44af, 0x4bd245ba, + 0x58d553a7, 0xdfc0ff18, 0xd309f4a5, 0xfffcafcf, 0xdb129f43, 0x15d620d0, + 0xb154e1d5, 0xebd12bae, 0x9d5111ee, 0xc79a4d40, 0xaca3af3c, 0x01cdf6cd, + 0xc2c45bde, 0xe470376a, 0x8e23e6b6, 0x196ed913, 0xb95e95da, 0xf188a6dd, + 0x6f15258e, 0xa5c66afb, 0x688a9eed, 0xbc589bd7, 0x47192bfd, 0xf5f603ba, + 0x102ec7a4, 0x9a337aa7, 0xef8094e8, 0xd121575e, 0x8fa6b171, 0xb62e8a4e, + 0xf996e41f, 0x8d4adf41, 0x56f38bd4, 0xe95b3fb3, 0xd587fb32, 0x61f5d75f, + 0x11c9eade, 0x019932fe, 0xda25edd8, 0x7e8837b8, 0x9a66b71e, 0xcd12ddb9, + 0x63925d0f, 0x48be7efe, 0x44b323f3, 0xa554f416, 0xc4bae550, 0x2b03f676, + 0x74dc72dd, 0x78665f8d, 0xf83e62ac, 0x506cf841, 0xcefdaf8e, 0x6f7ac5e1, + 0xbf867e10, 0xde5c0225, 0xce3c8228, 0x0148a44d, 0x1d8422df, 0x24738770, + 0xb32241d3, 0x10fbeade, 0x19e7d67e, 0xff38d9be, 0xafbed1a9, 0xb1e3cf80, + 0x43de3737, 0x5e2e2df3, 0xc77e839c, 0x9fec3d2a, 0x60ce731c, 0x6572097f, + 0xdfcb0a4f, 0xe4bec94f, 0x938edad0, 0x827941fd, 0x090e4fec, 0x7f641bcb, + 0xddc92f00, 0xdaafd02c, 0x04db08a3, 0xdd1b80f9, 0xf8ad848b, 0xc6fdfaf2, + 0xf34d1f82, 0x99bddf11, 0x7112bb38, 0xcb1337ee, 0x37dfb12b, 0xb22c5313, + 0x9970728c, 0x44ce72ff, 0xcfce9cfe, 0x85aaf9e1, 0xf1e5d26d, 0x1235e3ac, + 0xff9e3a9f, 0x2ccebc02, 0x73af009e, 0x4f1c9688, 0x1eb8be74, 0x58ce9ef1, + 0x2fbc4fa9, 0xe25489c7, 0xad878ddf, 0x6ff9c801, 0x8c34c4b0, 0x1914f12f, + 0x47a4fa3f, 0xc5be034c, 0xfefe049e, 0xdb678d6d, 0x3ef1e7ba, 0x70577557, + 0xafa724bf, 0xfbe698bc, 0x8b3828ac, 0xc9f1163c, 0x79f8deae, 0xcfe7cf34, + 0xfbf8555b, 0x76cf561d, 0x4de43a15, 0x8d2cfaab, 0x9e3ebe2b, 0xc61c6b79, + 0xb9e1349d, 0xf129c3a6, 0xda6b9fa8, 0xbe58ebb2, 0x1538bb85, 0x0a3f4d72, + 0xffb742e4, 0xa7e610d3, 0xbdd8733d, 0x40fef2e8, 0x5bd48c59, 0xacf59ed4, + 0xc7ea3f4e, 0x538d3a70, 0xfd297a46, 0xfff61891, 0x5bdeddb3, 0xa8225f80, + 0xcfd67fc9, 0x2593a3f3, 0x5988171e, 0x568e204f, 0x022ed279, 0x295a3f54, + 0xcba8e5f5, 0xeab8fac9, 0xe8362da7, 0x5f4d5ef7, 0x39d2a544, 0xd1ff20cb, + 0x31e1189e, 0x6e6c6ff0, 0x538e0992, 0x27da9aa7, 0xea9b6454, 0x4c73bd13, + 0x8a6a93f5, 0xba94f04c, 0x29f6a679, 0xe09917cb, 0x5312df34, 0x5bf6f4fb, + 0x87aeb04d, 0x9127e5d2, 0xd4c2b5d1, 0x4af77a7f, 0xff2cfb53, 0xf0bd535a, + 0xa973877b, 0x7fd68d7f, 0xe68db6c6, 0xa5af427a, 0x7f21720c, 0x39af8a9e, + 0x6afd10a9, 0x216aab5c, 0xbffb3397, 0xf58f5e63, 0x4aec2b6b, 0x2622827a, + 0xf06ffe11, 0x555ef598, 0x74ae19aa, 0xd206be17, 0xf59b762d, 0x0a91f92e, + 0xcbbd29f8, 0x48fefa66, 0x0b37a6b1, 0xbf9f0144, 0xdf7f44af, 0x23fd131c, + 0x3f2975f1, 0xf41858bc, 0x71bcb8c8, 0x1bcb885f, 0xbcb882f1, 0xde5c4611, + 0x79711ed8, 0xf2e23d63, 0x93e2fac6, 0x1d283e66, 0xf941f336, 0xd03e66fb, + 0x5e9233f9, 0xfe664373, 0xa7c53e10, 0xaebd037c, 0x9fe66f3d, 0x09d0fa48, + 0xed57e996, 0xb3f7c452, 0x75e9effe, 0x3abaf402, 0xfa71af4c, 0xcfe1be10, + 0x9d5e082e, 0xa4eab800, 0xbfe00455, 0xe1bcfb68, 0x36572eea, 0xb07fd3e9, + 0x3966def9, 0x37aaf8d7, 0xe8d5f24d, 0xa1a317c9, 0x1889dff7, 0xefaa753f, + 0x7cbf6817, 0x074cc5d2, 0x37c463f8, 0x14b3e71b, 0xcb9c5de8, 0x74f8e463, + 0xf875e72e, 0xf40d63bf, 0x5b4e3ad2, 0xe7e815fa, 0x7efbc41f, 0xe777fe8d, + 0xb7c82975, 0x83ba8aa6, 0xa6be68ab, 0x04ca8e7f, 0xf05d34dc, 0x85e452b9, + 0x790deb4a, 0xfa74a6ab, 0xb8f9eb4e, 0xa9073b58, 0x7ef34f54, 0xd4fd2c52, + 0xe0edd538, 0xf09e4bf8, 0xc742ee22, 0x7ca6cc97, 0xf454e3e0, 0xc063e06c, + 0x1ede22a2, 0xb0127bb2, 0xad4fff4f, 0xf822f902, 0x3327f0ad, 0xf7ae7f34, + 0xd6274e57, 0x30a77b3f, 0x02abd5d9, 0xe533614e, 0x3826dc8d, 0xd4d5287f, + 0x1e239afe, 0x30617d53, 0x7c5f54d7, 0xa5c13552, 0xf6a615c3, 0x4d7befe5, + 0x8d50dcf0, 0xe7b5fda9, 0xba704ceb, 0xf8127918, 0x73c8ae9d, 0x6c92f4f3, + 0xc8f67799, 0x83d358fc, 0xd6f79c89, 0x5fbad3cf, 0xf09ffa2e, 0x6f39933a, + 0xfe913fce, 0x688903bd, 0xfc839fc2, 0x6985d86b, 0xfb97e94e, 0x20cf3936, + 0xffe91f1e, 0xf0b17eeb, 0xf68d7957, 0x3b49fa87, 0xb40f9fa3, 0x97ee80f3, + 0xe1e0553f, 0x16fbdaf5, 0xc207c05a, 0xbf034a16, 0x09894537, 0x4a730ce3, + 0xd723dd24, 0x722bafaf, 0xdc0aa7fe, 0xb8da1f12, 0x7de53acf, 0xcb71c882, + 0x9d7f244b, 0x96a7519d, 0x5db4f950, 0xd6757f7d, 0xbd3cf9ff, 0x83487f71, + 0x235d34fc, 0xb168dfd7, 0x304f5ddc, 0x17f2c2c9, 0x6b56f30c, 0x299595f3, + 0xa69fb8df, 0xf9cf2d04, 0xf2008eb7, 0x379b977f, 0xe0fa21d5, 0x222ed407, + 0xf110aa3f, 0x74ef9fb2, 0x74f39f91, 0x1fe38db7, 0x5ecd0e4b, 0x9f81cfe1, + 0x4c49ef25, 0xe80b73a7, 0xe7055f0d, 0xad4a379d, 0x25b58ebc, 0xfac39e52, + 0x1fbeb05e, 0xa31d7215, 0x0f3e0edd, 0xcc3fc04d, 0x11bafa57, 0xc8e5b3e7, + 0xc44a1ef8, 0x19366cf7, 0xf88c03df, 0xf7c44a1e, 0x79f91df0, 0x03cfc8c0, + 0x301e7e46, 0x9128f3f2, 0x9d77c79f, 0xa0f1230f, 0x7e753b9f, 0xafda4212, + 0xaefe089c, 0xdfd2407d, 0xb75ec1b3, 0x6b58b69b, 0x514a3511, 0x941f2e98, + 0xa5dafe4a, 0xa0ed01e1, 0xaed72e57, 0x80979aca, 0xf0a8f0b8, 0x21bfb824, + 0xc2d7f9fe, 0xfd778e87, 0x5f961d1c, 0x93975f29, 0xae3cfd73, 0x3975b79f, + 0x48ef948e, 0x7789103d, 0xe79f31fe, 0x1e3e7cf9, 0x5ee4d007, 0x27ae8ba7, + 0x00d422ec, 0xb1c8157d, 0xc1f8de70, 0xbe5cb338, 0x9779c9a9, 0x3c672726, + 0xec0b64ee, 0xfd9bb74e, 0x474d768c, 0xf6da7cea, 0x1eed9598, 0xa15771d9, + 0x836dbf61, 0xe47af1d6, 0xafc87d3b, 0x7816fed0, 0x560fc705, 0x41812bf6, + 0x37ecd7ea, 0x850e5ddb, 0xd50b7d51, 0xfbbc8abf, 0xecbb48b6, 0xbe7075e5, + 0xd6d6b688, 0xad5fae6f, 0x46694f9d, 0x646ef407, 0x2527e47e, 0x0aa5bf9a, + 0x5f724ff5, 0xef08de7c, 0xc0abe34b, 0x37d8048c, 0x32ad579c, 0xa4f7c30e, + 0x90793c74, 0x861498af, 0xb9319f09, 0x367dbfb0, 0x52e7a675, 0x79f1d43e, + 0xde5e3e69, 0x452f1043, 0xcf4579f3, 0x7c867fc7, 0xe7aee83c, 0x9ff6b443, + 0x4ac2adf9, 0x50ecf9f8, 0x73f5e314, 0xb3dba9cb, 0xc9fc863d, 0x11177925, + 0xa3047b8f, 0xfea8a7fb, 0x97a5d609, 0x74c590be, 0xfa92e3df, 0x71e387cd, + 0x2038ed7e, 0x071d2cf3, 0x18e7278e, 0x12d9c4ec, 0x8b6fef1b, 0x4969f7c5, + 0xc37ef869, 0x0502afda, 0xf8b56b28, 0xc67ee450, 0x457cddf5, 0x7f692be6, + 0x146aefac, 0x4be91fde, 0xf3d33901, 0x3822f5ea, 0xcf9ea519, 0x60ab6df0, + 0x8cf9e83a, 0xef0560e6, 0x6aef5963, 0x09350c7b, 0x2aa9b93d, 0x73ce13c6, + 0x3de43284, 0x3be5cb99, 0x3ca98e96, 0xf3636dde, 0xd2e89c78, 0xe99f962c, + 0xc0363b7d, 0x4fb39cef, 0x908781d8, 0x89138e5d, 0x9fa1fba7, 0xd0e3fda8, + 0xfb86a585, 0xd6159b37, 0x2b211be7, 0x871f7c25, 0x5f0eb9f5, 0x2ae0d7ec, + 0x45bbdf09, 0x6bbb21c2, 0xf720929b, 0xf604388b, 0xc1fb1289, 0x16bf7979, + 0x503ec0b7, 0x0ef81f62, 0x7a18063d, 0x18f4300c, 0x9431e860, 0xbef863d0, + 0x1665d452, 0xa65e655a, 0x638728d2, 0xf069514e, 0x31979077, 0x18cbc8c2, + 0x632f23db, 0xc65e47ac, 0x8cbc8f58, 0xc65e4611, 0x19791ed8, 0x8cbc8c23, + 0x32f23db1, 0x19791846, 0x65e47b63, 0xcbc8f58c, 0x9791eb18, 0xcbc8c231, + 0x2f23db18, 0xbbbfac63, 0x6de5315b, 0x0df526ee, 0x99d96bbe, 0x29b1fcc4, + 0x94baaeab, 0xec61fbe8, 0xcf6dbf1f, 0xae8f9d06, 0xec6edf01, 0x9d25518c, + 0xdd246bfb, 0x79d2422d, 0xbce981a4, 0x2ae121c9, 0x813dc535, 0x47fc859f, + 0x7fcc8e65, 0x03fe44a0, 0x281ff225, 0xb4a8ff91, 0x4a07fcc9, 0x1df03fe4, + 0xc8940ff9, 0xfe44a07f, 0x1ff22503, 0x40ff9128, 0xfa07fc89, 0x1281ff21, + 0x477c0ff9, 0xf22503fe, 0x9a7ef81f, 0x883c81d6, 0xe7f82ebe, 0x23f3a639, + 0xfce9a1f1, 0xf0c136e8, 0xe1ed8dcf, 0xe1eb1b9f, 0xe1eb1b9f, 0xf8611b9f, + 0xf0f6c6e7, 0x5f708dcf, 0x0be58789, 0x1fb1ba7e, 0x9c2374fc, 0x813fefdf, + 0xbb4dd3d8, 0xca1af77e, 0xb4f29c50, 0x77bb26e2, 0x20579ff8, 0x568a156f, + 0xb2551332, 0x1589ca8b, 0xb4fb0495, 0x62056f7b, 0x737a02c4, 0xe6e89a1e, + 0xa7be0a0b, 0x2a65ff9b, 0x5179ebd7, 0x17ba21fe, 0xefec121e, 0xf87be48f, + 0x155fdebb, 0xbd4a2b6e, 0xb89e187d, 0x7afce45d, 0x8697d63b, 0x214d5075, + 0x6e1425ee, 0x443d1572, 0xa2d7b4fc, 0x0f99fbc8, 0x91b1fbc8, 0xe68af57c, + 0x1cb5ed37, 0xfd43163c, 0xbe159a46, 0x26cb3927, 0x808bda4e, 0xf822aea7, + 0x4d2c3f11, 0xaeb8fcd4, 0xa39fb879, 0x138f5baf, 0x22f09e92, 0x447f3e7f, + 0x9e695a38, 0x3853feeb, 0x39cfe0da, 0x7e811fa4, 0xed5e2738, 0x0dbbbc57, + 0x54a07dfc, 0xf9f5cbde, 0xa56bcc37, 0xefef57ef, 0xff06d79a, 0xfbf6462e, + 0x33c4cf5f, 0x53ee6f1e, 0x3f695b76, 0xef0bf7f3, 0x497bb520, 0xef57a7d3, + 0x795a3b77, 0xcda3b75e, 0x57608f78, 0x7383c3a6, 0xa65508a8, 0x1140ee72, + 0x78ea2fc8, 0x86bdfda3, 0x3f8a91fd, 0xbaef7889, 0x8feed17d, 0x39d1fc0d, + 0xef826894, 0xfee69239, 0x7c67c0d8, 0x4317194f, 0xfa143dc9, 0xc5a1627d, + 0x2f70d303, 0xb63eeeb9, 0x0711ce77, 0x495d77f0, 0x9bee1562, 0x9d42a389, + 0x692bbe09, 0xd68532de, 0x55780be5, 0xeeb9dbdc, 0x304ebb3f, 0x618ea7bc, + 0x79329f66, 0x70f60ea5, 0xc6095fb6, 0xf66e2a12, 0x13265a0f, 0xb37f937c, + 0xf7ed193d, 0xc0ee150b, 0xa0b7fa6c, 0x3cafbc28, 0x56896c31, 0xf8e22fc0, + 0x91ff0324, 0xfc0db8e6, 0x05daa852, 0xe6dea3f8, 0x44df43b6, 0xf7911bfa, + 0xb8ffc837, 0xb407de43, 0xd3afd8db, 0xb766a3fc, 0x3ec5eb5c, 0xcd1ffb3b, + 0x30ffc987, 0xfdd4ffdc, 0x075efd0d, 0x106a1df9, 0x8dd0fc76, 0x3aaa9faa, + 0xf7c7bc36, 0x0acd3e27, 0xbe244dec, 0xe0fb34fe, 0x0bf015ed, 0x9f40af49, + 0x45f0df92, 0x79bbad29, 0x9c7889cb, 0x17fe42e3, 0xd8b8dfd9, 0x9f3c58f7, + 0x47bcb54f, 0x3d2786ab, 0xd1a6d42e, 0xbfbb55a3, 0x2de911f3, 0xbbb0d4d2, + 0xa0bbdc41, 0x115fb2f5, 0xe10a27e9, 0x99ee25fe, 0x1e7ed3b5, 0xf6f56822, + 0xe2a9ade6, 0xf7517f52, 0xf369d737, 0xf3b3e9ae, 0x11769d3d, 0x26b07b60, + 0x4ebf6e60, 0xedd73ff3, 0x95777f33, 0xdd1d7169, 0x49ced4ef, 0xe6d9bdfa, + 0x632f8eb7, 0xcecba7bf, 0x371bcbf7, 0x1c483f4b, 0x23bc0114, 0xd8bcdc68, + 0xe3704d12, 0x4caaaf61, 0x6b6f37c0, 0x262d50fe, 0x8fd67c25, 0xb91eb0c5, + 0xc32a6c75, 0x72a58fb7, 0xae58c779, 0x0f988efc, 0xa55439d1, 0xf1a01e04, + 0xa0fcd5df, 0x08c7b865, 0x9853f9fa, 0x8f89478f, 0xa6814531, 0x9578e69f, + 0xd79708e3, 0x705b7dda, 0x5076b24f, 0x13795fb0, 0x58aa25fc, 0x18a9ff0e, + 0xc5559072, 0x146b67f7, 0x720b3331, 0x7be341b0, 0x7ac10392, 0xacfacbc3, + 0x7b803eb2, 0x077dcb31, 0xceb7a02d, 0x19ff3eff, 0xfc9be01b, 0x1793c38a, + 0xf3a0677e, 0x341ca477, 0x2c716ac5, 0x8d538c97, 0x58b0b1c7, 0x4ff09a5a, + 0xe2ebd3bf, 0x55c0bd73, 0xa12c2649, 0xd64f2e2a, 0xfd34bf57, 0xa61c3ece, + 0x46f8c2fe, 0xf4c2c5a3, 0x8f3f211a, 0xe18b87ef, 0xc9c814aa, 0xf708a576, + 0x64f5f5d3, 0x2aea2c54, 0xffa6129f, 0x48ae4d4a, 0xee7052ee, 0x99ddf8d8, + 0xde1be229, 0x9e10b405, 0x094d5f21, 0x842b6fa1, 0xc265f5ea, 0x6da4495b, + 0x713eda10, 0xb9d68161, 0xbd778342, 0x36c1fb54, 0xe187e317, 0x770565b5, + 0x5fc63ee2, 0x151b07ac, 0xd67fdf1b, 0xf14673f0, 0xfeb197b5, 0xae83550b, + 0x0e2379b1, 0x3f122dd0, 0xda1f6d77, 0xb0f09b31, 0xafd24cab, 0x976fd1d1, + 0x7603e5f7, 0xf25ad39c, 0x36115da4, 0x9c9de64f, 0x3c70f177, 0x47f7df51, + 0x48df7dda, 0x49940c7c, 0x7ad7f0fb, 0xc5b8f097, 0xa241e67b, 0x812df7e7, + 0x4de32f83, 0xd6df14c2, 0xf7ff5a32, 0xd79acf71, 0x11fde3ef, 0x189eb0df, + 0x5fc44fd7, 0x1f30b2ce, 0x7b3eecad, 0xe61d92d8, 0x5f6dd6a7, 0xce2cf93c, + 0x420fe4c1, 0x94db7d9e, 0xe5c15460, 0xb599ecf9, 0xcf2f2c31, 0x7ac1c77c, + 0x7c31d1b7, 0xc61599c2, 0x7fdd07e7, 0x327a976f, 0xe343d338, 0x568ae8ae, + 0x2a33f7a1, 0x7d029eea, 0xa654f362, 0xe0b9574b, 0xf7895ef1, 0xac7d833d, + 0xa7afc314, 0xb7fc1e22, 0xfea2656f, 0x0e59a39e, 0x23e6dfe8, 0x3d535b85, + 0x83dbefe8, 0xb72ecdfe, 0xfac5fe03, 0xb7b644be, 0x3e32294d, 0xf9cf1c4c, + 0xb5ff71b5, 0xf5f9da4c, 0x0b9e7215, 0x108939da, 0xb537af64, 0x948b7493, + 0x194e3d37, 0xc70ad719, 0xcb6cf657, 0xb2645c46, 0x973d7b50, 0x0f710be2, + 0xae385147, 0x18ff1912, 0xbc875797, 0x4fc91917, 0x4171eb9f, 0x36da9ced, + 0xabcd4e7e, 0xff3f814e, 0x5c46e2a8, 0xb9e5d5bb, 0xadc12e63, 0x49b8ed27, + 0x3c936a29, 0x4782348e, 0x77b8abbe, 0x15f7de83, 0x046adeb2, 0xbef08a4d, + 0xb6e582a0, 0xa4e54035, 0x9df7cbcb, 0xf8cf1e8f, 0xf415f611, 0x56ceb03a, + 0x6491d7b7, 0xfa5a77f0, 0xfef1af15, 0x7bff0ea2, 0xd9f79599, 0xe007c748, + 0xb2fbaeef, 0x07112b1c, 0xf707b725, 0xf8d73ef6, 0xed47ef44, 0x6d475ef8, + 0x7c1d78b6, 0x82fb4235, 0x457cc2de, 0x6257f186, 0xd4fcc37c, 0x4fb5fd9e, + 0xbc78e2ca, 0x3bed3766, 0xd79ba50b, 0x3c607849, 0xf1a0ec8d, 0xe30f3c3c, + 0xb01825bd, 0xee0f58ab, 0xc2bc1093, 0x9e63b01d, 0x9c857d95, 0x976df047, + 0x25b6f8f3, 0xcfe1f23a, 0x0c8edcd9, 0x7c479fa3, 0xc46cbe07, 0xaf327ea1, + 0x56e0fd97, 0x51de13c2, 0x6c1abde1, 0x9abe245a, 0xf6b7f5b5, 0xc6fd9a27, + 0xa0ed47fe, 0x5766834f, 0x5e90e922, 0x6578f92e, 0xde0742df, 0xbcdab41d, + 0xa7c12efc, 0x363ffbe1, 0xbc843f44, 0x13c0c345, 0x63822cf6, 0x9d7fa5cb, + 0xadf92e5e, 0x13383b36, 0x364668f7, 0xe1bdf344, 0xef3f7706, 0x8fdf1c77, + 0x97e07e11, 0xdf18ebb8, 0xdc7e27c4, 0x301d6bc3, 0x9ebc37d3, 0x75b71e38, + 0x6fe599a0, 0x70e7cd95, 0xf3b1d71b, 0x1f7899d5, 0xaf7240d5, 0x7db8fec0, + 0x739fe099, 0xc991dd8f, 0x0275a4fb, 0xa7aa71cf, 0xf984b53a, 0xe75af986, + 0x2962a69f, 0x457cfacf, 0x539e32e5, 0xdc713e54, 0xda724aff, 0x7859bdba, + 0x154bc711, 0x595ca2aa, 0xd4f9754e, 0x8b41b5e5, 0xaf6cb653, 0xbe833e17, + 0xf5ddfb21, 0xe9f804c2, 0x42b9d6d2, 0xf3e127a3, 0xd7886135, 0xd9e8d0ad, + 0x7b966d98, 0x6f71878c, 0x0517ebd0, 0xa51de267, 0xb79f5ede, 0x03f64931, + 0x6ecf83ff, 0xb78cb728, 0x35edc8df, 0x8de9a67d, 0xb1bd7196, 0xf4324b7f, + 0xf38541c6, 0x48771b61, 0x81e36ebf, 0xfd6f8e38, 0x3fcbe376, 0x7dda9dbb, + 0x9360f8fa, 0x6b437df1, 0x3689ea50, 0x37a0a7f2, 0xff766956, 0xf6ef815c, + 0xbb4352f2, 0x05981def, 0x543158b9, 0x04dfee78, 0x7d083bef, 0xaf03ebf3, + 0x13cf37bc, 0x3efaafb6, 0xc77b6e56, 0xe232ecde, 0x87bbea4d, 0xbdf25772, + 0xe70bd02c, 0x453e96af, 0x1dba3fe6, 0xf4ea7fec, 0x6683e48e, 0x9716df92, + 0x7459def9, 0x26fde5d2, 0xfd3ace9d, 0x7ceb7a75, 0xa75bd3a0, 0x3267bf13, + 0xbafafdf8, 0xbdd6d7ef, 0x4ddfe342, 0xadbf52e5, 0xac72cf68, 0x72cf7962, + 0xb5ef80b4, 0xf35686fa, 0xb93a71f7, 0x56fbf5c7, 0xfdde05c8, 0xdba34e80, + 0xb90e32ed, 0x653a12ff, 0xebebeec2, 0x1bc5ad58, 0xe1b8b4db, 0x260fcd2a, + 0xa46c3d3a, 0x2467ead3, 0x7f9e5a9d, 0xec7fdfeb, 0x3d49fde1, 0xfd8a23b6, + 0x074395c5, 0xdb0d5e99, 0x5167b51e, 0x65caa7bb, 0xcf5c71dc, 0x11ba1577, + 0x6db15f3f, 0x7ff90ed0, 0x046fdf4a, 0xf76a37bf, 0xc2bc7579, 0xbb0628fe, + 0xde87b7a7, 0xdcf3483b, 0x1e3a21b7, 0x79f475f7, 0xa8e4d35e, 0x09312ba5, + 0x3574b5f3, 0xab9c4fff, 0x291fbd74, 0xa5a36777, 0xf1a4ac3c, 0x17679720, + 0x194efcaa, 0xec89b7f9, 0x5c9a2beb, 0xc5e8453d, 0xd8f498fd, 0x7ef8e7a1, + 0x2a313dc5, 0x3939d6f2, 0x05e600a1, 0x0edd631f, 0xafc88bd2, 0xbe8474e5, + 0x45c83ac0, 0x28357be7, 0xfe6492e3, 0xdde09923, 0x2a7ef916, 0x33cb2adb, + 0x08461e9a, 0x7262f50d, 0x8ffb14a8, 0xf3975bd4, 0xd4fe742b, 0x53d489c7, + 0xafdfdb97, 0xd2bcbe34, 0x6966cefe, 0x355c92f1, 0x36f349d3, 0x455b323d, + 0xfb4ae8fc, 0x7cc8c474, 0x897ef8d3, 0x26922b59, 0x3c8e6fd8, 0xbf7e5d07, + 0x13c95503, 0xbc92f7ec, 0xfa2726b2, 0xfcf1f59d, 0x8fccbf48, 0x6ec8559c, + 0x1bb3bf51, 0x9b1ef9a2, 0x3e3d2fbe, 0x33bee7ff, 0x24f2eff8, 0x8a14ee2d, + 0x18d93f83, 0x507fc9a3, 0x6f5ef8c2, 0xfbdbaef8, 0x5c50eed3, 0x7f3f4192, + 0x43d9a5dc, 0x7901da11, 0x0433dd16, 0xfba71ce2, 0xf259c6cf, 0x7d729fc0, + 0xecfbbf7a, 0xe86ee9ea, 0x7c512db9, 0xa6fc9d2f, 0xb52388ad, 0x3e3913f9, + 0xf1775773, 0xce349db9, 0xf2e97d5d, 0xe7e694fd, 0x5ff4d2af, 0x5bcd7dec, + 0x677ed1cb, 0x7c7e1b96, 0x81ceab9b, 0x40ec5bf8, 0xfd9b23bd, 0xd00e795e, + 0x29f755f3, 0x7ddf8ea2, 0xae423f41, 0xc0e6af2c, 0x29deacde, 0x8b5afffd, + 0xe77c86d8, 0xeabadef4, 0x2787e834, 0x2e2f7e15, 0xd51e9176, 0x3ba467cf, + 0x4ba9aeba, 0xd65d80a9, 0x81cdc7de, 0x3f62b58d, 0x3b9c5e43, 0xd817f905, + 0xbc03d60f, 0x8be9a13c, 0xe26703d3, 0x7c61793c, 0x78efa5fe, 0xf3d0be74, + 0xfb886d66, 0x347f024c, 0x5a3f8326, 0xd6d8fcb5, 0xb70cc581, 0xf7e52e0d, + 0x4c68bd3a, 0x47d6c8e7, 0xe7f71eab, 0xc4ad9de3, 0xe2e76b47, 0xb517e19b, + 0xc44a8eef, 0xeed326b9, 0xa1fa34cf, 0xf20f83ad, 0x83f39dfb, 0xa77efcd1, + 0x995f5dd2, 0xb55cfb48, 0xd387be4b, 0x485555db, 0xb9db5bf9, 0xa70ef4d8, + 0x3dc4c68d, 0xc50fdfe0, 0xfd28bdf2, 0xd3834d7d, 0xf11e05e7, 0x47ae66ce, + 0xe349afbe, 0xe3099ef6, 0xae797af3, 0x30d7be47, 0xb9ba17bc, 0x7477fa81, + 0x718f18be, 0x6ef63dd6, 0x71086119, 0x528adaad, 0x9da17bc3, 0xdb50bdf2, + 0xdbbf1363, 0x42eeffd1, 0xca6111fb, 0x4815de2f, 0x17d43f60, 0xbbe40e14, + 0x7ec16e7d, 0xe8ab79ee, 0xfdd75d86, 0x937bfd12, 0x09f38786, 0xffa099fd, + 0x644fbd9a, 0x26fc6ec2, 0x7b8dc24e, 0xe817f8ef, 0x289edf21, 0x04db7fe9, + 0x7e2db7fb, 0xefeb2fe9, 0x1d9ef0c0, 0x8af6f0e7, 0x8d6f1e58, 0x5f489ef6, + 0x2c17f917, 0x89b1bfb7, 0xef03ac1a, 0x1fcfc084, 0xa06d82d8, 0x8fe407e7, + 0x5551df22, 0x83eff921, 0xdf356b7e, 0x80412253, 0xff41f15f, 0x23c8718b, + 0x95587eea, 0xbc5ed7f5, 0x5878dea3, 0xcd8dd7be, 0x8c73e61b, 0xeb25e2d0, + 0x36df92dd, 0x9d5ec8fe, 0x2afd993e, 0x0b61d2fe, 0xd7a2263a, 0x1a6fcd5a, + 0xe41d0f87, 0x7ec75973, 0x0c7417e9, 0x40bf619d, 0xf7f433f7, 0x9ff6eb80, + 0xef413f61, 0xc490feb7, 0xf921e74b, 0xa2d739bd, 0x4abc5bc7, 0x0acbce0e, + 0x5595cfc3, 0x19b66e37, 0x9f862ae1, 0x3f4b732b, 0x7ec236da, 0x3fb943f9, + 0x674cf3e7, 0xc12e369f, 0x3b7cc376, 0xf2a594c0, 0xfa170cfb, 0xb7e74c7b, + 0x3cf243ce, 0xd98cec14, 0xd76df7c6, 0x7b286cbb, 0xcf6c5d3b, 0x72597577, + 0x5c58256d, 0x4773fb0c, 0x53627bb5, 0x1a32fdd6, 0x31348271, 0xc592dc72, + 0x9802c3f7, 0xf9f8452a, 0x0efe98be, 0x3e4fc2e8, 0x0bf8c629, 0xe22e87a6, + 0x37d85f6f, 0x3f2237d7, 0xdb42afb2, 0x18a85e47, 0x98e53c7c, 0xb03fbbd4, + 0x57b06d8b, 0x902756c2, 0x916a3837, 0xabff8dfe, 0x0277f918, 0xcf32f15c, + 0xff2d963b, 0xc653837e, 0xe44747fb, 0xc20873df, 0x17fda08e, 0x897f6e4e, + 0x73f1a19f, 0x87cc945d, 0x33d8a2de, 0x698691fe, 0xc11df2c9, 0xadb2ebfa, + 0x703385f9, 0xefde4e8f, 0x4de5a0be, 0x91757f75, 0xb433afa6, 0x6a639673, + 0xaffc0baa, 0x7efcbd78, 0x63bc81f3, 0xe1ff982d, 0xfe40a711, 0xb89fbf4e, + 0x9e462468, 0xb0d6a66b, 0x363c537d, 0x8fed48d1, 0xb88259e5, 0x70b0ff9f, + 0x38575e72, 0x4b5cfc23, 0x56b3df34, 0x25f1be8e, 0xf5ba7cf4, 0xb409e38b, + 0x51bff4ff, 0xa6c0e854, 0x783f73d1, 0xb1c6ca9b, 0x8fb107dd, 0xef7de38f, + 0x1e9c4f40, 0x23e339ad, 0x1eec3f52, 0x7ed2aa72, 0x8ffae308, 0x7c65ffde, + 0xaebc2592, 0xe4e7230b, 0x7118c1df, 0xd1785c72, 0x238cab51, 0x42e7ac45, + 0x7bef87aa, 0xfbc63b53, 0x80259705, 0xa3a2d973, 0xfac7dfc7, 0x331ee116, + 0xfda775fc, 0x119da333, 0xc4448c9e, 0xfebaa1ad, 0xc3961e94, 0x707b747b, + 0x8fd7cb54, 0x952e38b8, 0x5c713bdc, 0x03f85de5, 0x2417e764, 0x5f99cf98, + 0xf37f4854, 0x87be8d0b, 0x64beebb2, 0x640b66bb, 0xd9aff768, 0xf6d32e7e, + 0xab5fdbaf, 0x0d32ff36, 0x165ccb0f, 0x22dbefb9, 0x81f1adf6, 0xae9d674e, + 0x9d2d3bfa, 0xc33be23e, 0x8a8ef027, 0x88ff92e8, 0x2e7587a4, 0xa797e5ec, + 0x893890b6, 0x84b5ffa9, 0xa057f2e9, 0x3f7f1047, 0xc7a6cfe8, 0xc91e99b0, + 0xd9e8c1bd, 0xb31e13f0, 0x79109fb0, 0x0ae452bf, 0xd64d03d6, 0xfa078e18, + 0x7cfde462, 0x9013ff92, 0xa7ee5d7f, 0x61f284d7, 0xf10b4f2f, 0xb215d634, + 0x45f7f10c, 0x0f59b373, 0x69c3134d, 0x16c0cefc, 0xd63f852a, 0x749f78ab, + 0x0e86515a, 0x5db90cbc, 0xd27ce2e3, 0xfbfc8085, 0x8189032d, 0xbcd15727, + 0x38f2cb03, 0x8841703f, 0xfbd02382, 0x67ec31ed, 0xd60a240d, 0xb30d0307, + 0xf4bf1ed8, 0xfc266b47, 0x188691b0, 0x140e4bce, 0xafc07686, 0x51e9981a, + 0x15f4d4fd, 0x1f82cc45, 0xf277afe6, 0x52f5033c, 0xc8ec0cbf, 0x44e2f790, + 0x47e439e0, 0xc31edfbe, 0x4181aef9, 0x42e21a6f, 0xf37de2d3, 0xa7fad2e7, + 0x0ddf255a, 0x2a77d164, 0x1aea571f, 0xbe5e30da, 0x21a8775c, 0x34bdf9e6, + 0xa90e744a, 0xba7efa22, 0x90f38e3b, 0x71ea9f3a, 0x33fee9d8, 0xfa4f024f, + 0x350fd83b, 0xaef1d2fe, 0x403be578, 0x9f3aff1d, 0xaef0d64d, 0x36fc926c, + 0xbd775f7e, 0xd3bafbe0, 0x33b10968, 0xf552ff70, 0x937fcf00, 0x758a5be0, + 0xba206ef7, 0x897eb158, 0xdf78d3ff, 0xd0df8137, 0xdfa2d734, 0x0af7e3bf, + 0x47ca424d, 0xa13efe93, 0x413efcdb, 0xe225a684, 0x11f3141e, 0xcbbdfff5, + 0xef7e0cd7, 0x3af1718c, 0x2dde573f, 0xffa9e543, 0xcf784eb6, 0x295ced65, + 0xbed139af, 0xfea75835, 0x1ff7436e, 0x927e154f, 0xfa7c3d01, 0xa1a637fe, + 0xebaf892c, 0x1bc7bb40, 0xd30d50fe, 0x885a61f0, 0xd87c9bdf, 0xc70655f0, + 0xc1bd3793, 0xaee7ff7c, 0x5f037ff7, 0xa0d7f003, 0x00a0d7f0 +}; + +static const u32 tsem_int_table_data_e1h[] = { + 0x00088b1f, 0x00000000, 0x51fbff00, 0x03f0c0cf, 0x3373f78a, 0x45e6fc30, + 0x5e0287f0, 0xb0c0ceca, 0x0257881c, 0x56204bf1, 0x50606364, 0xff5e2362, + 0x5b042972, 0xc181825c, 0x8aa78805, 0x0812f901, 0x06692171, 0x06495486, + 0x08497506, 0x7690337f, 0xeddca290, 0x2a1b0183, 0xc8098a60, 0x5846d821, + 0x31b191e4, 0x1c817c9a, 0x8084df2a, 0x73c681fe, 0x7bf951d4, 0x06b42155, + 0x9a2e7c54, 0x7ca83efc, 0xf35fd430, 0x1b9bb1d4, 0x27bfa642, 0x006840b0, + 0x849cc450, 0x00000398 +}; + +static const u32 tsem_pram_data_e1h[] = { + 0x00088b1f, 0x00000000, 0x7dedff00, 0xd554780b, 0x733ef0b5, 0x7993331e, + 0x31e424e4, 0x09261081, 0x83086820, 0x3ac54440, 0xbde311e1, 0x1a5e1db4, + 0x15e18fad, 0xa0484842, 0xdeb787e8, 0x2409033f, 0x88b06220, 0xf0ed6bd8, + 0xed160b48, 0x16850348, 0xd22d00e9, 0xb15ab077, 0x5ac17eda, 0xa4490850, + 0xcb6ad457, 0xfbdad6bf, 0x13267324, 0x5fafdb40, 0x4fc5ef7b, 0xfd9f6b36, + 0xd6bdaf5c, 0xb4518fda, 0x2b719664, 0x0ff09763, 0x8cad63a4, 0x74def4b1, + 0x26328b36, 0x21636a43, 0x52c668c7, 0x7bbf4d66, 0xce631a51, 0x36ef9a89, + 0x6b399228, 0x00b5dcfa, 0xf3689ecf, 0x36c79561, 0xc8b7d9ff, 0x8d86d8cb, + 0x017778ef, 0x7f05debc, 0xfff5f7c1, 0x24abc2c9, 0xd18f0ec6, 0x0a5d3c38, + 0x9d21735b, 0x60f0e56d, 0xfdf06616, 0xc672cf55, 0x13e7502c, 0x63114f18, + 0xe593fc3a, 0xb1843c23, 0x2086c60c, 0x2abfc5ec, 0xb3ef8319, 0xbd9eec04, + 0x5959ea94, 0xf6f1c240, 0x531d51a6, 0x299ba136, 0xc85ed469, 0x596bf545, + 0x7537d5c0, 0x6778f9f8, 0xdf1a3367, 0x71c7846c, 0x61f84158, 0x5b00eb0e, + 0x7db3bc60, 0xb3bf520f, 0x1ca33ba1, 0x6e6183ce, 0xf36f78cc, 0x856c7e07, + 0x92cd6776, 0x66174f08, 0xb0f378c1, 0xccad4f1e, 0x8b9a383f, 0xfb8d3769, + 0xa4283af1, 0x752b8ef5, 0x4ae34496, 0xb9bdf685, 0x8c3bef98, 0x31a759ed, + 0xf34635f6, 0xf5e01f55, 0xa6122b0f, 0xade23b3e, 0x6c3eed37, 0xf7cefa95, + 0x6cbeb3c7, 0xbc22776b, 0xccb9f094, 0x5a9bc7c6, 0x9483501a, 0x416677ef, + 0x3cc4e7fe, 0x323e0c06, 0xcf4c5d39, 0x88b7f902, 0xcaf9cffc, 0x8042b1a7, + 0x8f41843f, 0x12ec02a0, 0xba27edfd, 0x90dca2e9, 0xeb6ef86e, 0x1a07aefd, + 0xdea193df, 0x7ae65980, 0x0ce4afba, 0xa49507b6, 0x4b8028c0, 0x2e68f5cd, + 0x37763237, 0xbe9da573, 0x983dfe0e, 0x7484be0d, 0xf9f1fc06, 0x825ebfb1, + 0x1d61677e, 0x8dbf97b9, 0x33c3f0f4, 0x8c05ed5c, 0xe99ace35, 0x57cf3062, + 0x385d3303, 0xcd6757df, 0x97c779a4, 0x372b3d9f, 0x37d05839, 0xaf1f48df, + 0x43868e83, 0xf8b7417d, 0x566403ef, 0x3940291b, 0x4c70fe61, 0x5270cb3b, + 0x9187d080, 0x7e03c669, 0x87496e94, 0x997887fe, 0x1c60923f, 0x8366425f, + 0x881b2c72, 0x78ffd59f, 0xdda9cd80, 0x94b04cdf, 0x7b8c1386, 0xdf03b619, + 0x00d1a5dd, 0x2e34eff1, 0x58d3d9df, 0xec66e1d4, 0x1366bb8e, 0x29a4361e, + 0xc06feb09, 0x442312f1, 0x55f7c275, 0x659dc78e, 0xda7b6009, 0x8e10396c, + 0x18935f99, 0x28b2918f, 0x1ed9ff97, 0x3bdcbf4e, 0x13fa0a5e, 0xc0ad63e0, + 0xb0e45adb, 0x31e3bdf1, 0xe7c06bbe, 0x1e90ffc8, 0x76984bf7, 0x8d3db1db, + 0x20aaedb5, 0xe4320a39, 0x213fc82f, 0x3ff0bd49, 0x18e2aa6b, 0xd3f262b3, + 0xfa0e48d2, 0xad1e17ad, 0x140f5ca0, 0x021907f2, 0x03602c4f, 0xff8418f9, + 0xe7ad8dca, 0xd69d5ffb, 0x53bf0333, 0x8fa0d3f4, 0xa597ff24, 0x8e5dd74b, + 0xda7615af, 0x7fa85bd0, 0x8f44a99c, 0x0241c92b, 0xff44f4fe, 0xefeff805, + 0x698a0696, 0xea38d1bd, 0x6a1d9698, 0x37df4093, 0xf1f72e0e, 0x5a01e775, + 0x08f58c37, 0xe5027cff, 0x8ec38c1d, 0xaca7ae5a, 0x92b7a0b5, 0x79817ea1, + 0xd94c687d, 0x1da124df, 0xd69856c1, 0x6a3978b5, 0x07a224fc, 0x1e95e812, + 0x3bb5c4fa, 0xc6f58242, 0x88b37541, 0x36c3f2de, 0xdebe5e3e, 0xe8165868, + 0x856538d9, 0xa378f50d, 0xd70d9967, 0x65ecc68d, 0x5e43530c, 0xd9adf68d, + 0x2baecbde, 0x80ec7a6b, 0x4f6dc930, 0x31b1d67e, 0x6b186f58, 0x7f4328df, + 0x1625e92d, 0xdfc0ff6e, 0x16e8f764, 0x0a4b471c, 0xb6afb1eb, 0x72979ca1, + 0x37b06738, 0x16e00ebc, 0x8e7bf9bb, 0xed92df28, 0x8ec8870d, 0x1d845af0, + 0x91f5da21, 0x536c327d, 0x94323b6f, 0x858e361b, 0x863f5834, 0xec2e58ae, + 0xebc4af19, 0x75876131, 0x9a5a5e13, 0x048d2527, 0x00dc293b, 0xfc3d110d, + 0x6b1db0eb, 0x475f4593, 0x73ad887a, 0x6009bc20, 0x099dbfea, 0xf6f18e3b, + 0xca36edda, 0x0eddbb6f, 0x37ec50e9, 0xebe9ab19, 0xb63d7852, 0xdf20ec8e, + 0xbd8c5b46, 0xd1f203b3, 0xfd810b3e, 0x1d812c34, 0x453c6204, 0x2fb58a2a, + 0xba708625, 0x434a9780, 0x71b7c809, 0x7cc46b7e, 0xa68ee3a0, 0xa05e4949, + 0x3faf0ef3, 0x78f407c9, 0x820ce360, 0x4903b25b, 0xef9c0281, 0x1976248c, + 0x29b13efa, 0xb0491d30, 0xa7e7ba43, 0xb35fa993, 0x636c761d, 0xc61f9b51, + 0x7cc4d2dd, 0xd6538056, 0x8ed09207, 0xdcf987cd, 0x93b6f526, 0x7ed9b0fe, + 0x2794d6da, 0xdb0e5f21, 0xce2dfbe4, 0xcd51f93b, 0x9d4a748b, 0xade7e666, + 0x96978e21, 0x6d6edc69, 0x8dd77af1, 0xf994b840, 0x64f7c256, 0x73bcb9bf, + 0x945dffbd, 0x2f57e753, 0x3c079d12, 0x10f2b501, 0x5229fe7f, 0x85ee7dac, + 0xe7f062ff, 0xa76e609c, 0x54dbe265, 0x3bc6d8ff, 0x6cfed092, 0xf4920609, + 0x37f3be82, 0xd0a747ec, 0xc9ff4613, 0x8b7d444f, 0xc779df58, 0x4fc0cfcf, + 0x8dc4799f, 0xd721bb67, 0xe8d720c9, 0x92a7646f, 0x7d1df07e, 0x7b224c73, + 0xc0e3d0d0, 0xfc4ecc87, 0x13dbf116, 0x92ffd5f1, 0x273758d4, 0x4b9f8148, + 0x5aec9788, 0x0b0a77d2, 0xdf1a4afe, 0x77c8ce5b, 0xc8902c4a, 0xc4bdfdbe, + 0x59a7b9ed, 0x7ae637f0, 0xe8748641, 0x13d7c166, 0x2eeb1be5, 0x1bfec053, + 0x8cbd3fd5, 0x80594372, 0x6b365af4, 0x83953d23, 0xb23e577e, 0x799bd71c, + 0xd1f2efa8, 0x74a5afa4, 0xf4a66b04, 0xb4a1165a, 0x6a51b580, 0xd642e5e8, + 0x71d0f04d, 0xe0162381, 0x23ba5bdb, 0x74f30fcc, 0x10584414, 0x105e99c6, + 0x1d7ed090, 0xc9cbb52f, 0x146cbf20, 0xb940b6f3, 0x8d2f6e75, 0x24dcb62b, + 0xb5ef57a8, 0x33d05484, 0xe4db597b, 0x055bd464, 0xf7e5822c, 0xdba52d3a, + 0x8dcb7a0a, 0xef1c7817, 0xdf3004b2, 0x1f73ef68, 0x7f03db9a, 0x92b9465a, + 0xfe12b90d, 0x30a7ad35, 0xa3ea156e, 0x3015ae3d, 0xfa04d6ff, 0x76e16dca, + 0x76a3b8f9, 0x476bea3f, 0xbe461699, 0x2e682f4f, 0x3e7d3846, 0xdf00c9f3, + 0xb7ef0ef4, 0xbe31c701, 0x1de9de77, 0xdee90901, 0xbad0b1e6, 0xfe0718e1, + 0x59e3da35, 0x8c62fead, 0x1937c027, 0xf51055c7, 0x84bb00cb, 0xde9fde9f, + 0xd6327d74, 0x67b6eb8b, 0xf489b400, 0xa8997c57, 0x8db75567, 0xd57c040d, + 0xff256ebf, 0x7caba2fd, 0xb3e18b08, 0x63a2ea77, 0xec630fe6, 0x4a71dd6c, + 0x28daea3b, 0x493baced, 0x1b76ff69, 0x8be042ac, 0xe7cfffc8, 0x0feb7ec1, + 0x51de601f, 0xce10ee34, 0x84b4e9c7, 0x6dfe48f3, 0x6bd196b2, 0xf80080a7, + 0xcd9e306d, 0xbd68f263, 0x9e22fc45, 0x009631d5, 0xd6cb39e2, 0x882d2d2c, + 0xfcf177c9, 0x5a9f4771, 0x31d97a89, 0xbd418d9f, 0x656559b2, 0xe7c46748, + 0x255b481c, 0x0101fdcb, 0x427485cf, 0x7f783f7b, 0x40eb403b, 0x27804bd6, + 0x9bc503e4, 0x9fa995cc, 0x04fe6af4, 0x4904fe26, 0x2806caef, 0x636cfefc, + 0x2bfbcc1e, 0x06d6cf1c, 0xd843ad85, 0x22b579ab, 0x9ff9bb74, 0x34c560ec, + 0xf6d8f606, 0x50c769f2, 0x9fcbe73f, 0x7f21561c, 0x56f2ad70, 0xcd9e8c7b, + 0x04fb0329, 0x1590fef4, 0x90dcfce6, 0x2c0e8619, 0x4df9c728, 0x8b32fce6, + 0xcc5df7f0, 0xfc57f685, 0xf82d96bc, 0x7f7f4241, 0x3a8b1d75, 0xe25818d5, + 0x296034f8, 0x12b82ca3, 0x246cb7e6, 0x5accf8a3, 0x9b6ff70b, 0xc5f01eb1, + 0x8fae9106, 0xe548c76b, 0xac0b4e09, 0x4275d81d, 0x4b29fdbf, 0xe8058d71, + 0xa932d072, 0xaef282c6, 0x87da1844, 0x1fcd348e, 0xad7e504e, 0x93fea145, + 0x0cbf3694, 0x91beeae3, 0xde01b6f9, 0x51dda997, 0xc5658f94, 0xd5085f5e, + 0x47ec2f99, 0x1ac0a4ba, 0x29f7f288, 0x8c52b3c6, 0xfa85a567, 0xdd3b5089, + 0x126df380, 0x5ddbc3f6, 0xd0cbd236, 0x9c6fec0e, 0xf12a2df3, 0x4916a3db, + 0xd0483f21, 0xde454d65, 0xb6002563, 0xec66feeb, 0xa4129dc7, 0xccf7c8d4, + 0x3ea2f32d, 0xa6621ac8, 0x36adb95f, 0x32a3f907, 0xfe412910, 0xa3f19339, + 0x7bcc2a35, 0x29f31d5b, 0x33977f80, 0x5bc705b0, 0x70ed4f7d, 0xc86d77b4, + 0x94b8e9cb, 0x4db269fb, 0x14f95653, 0x28a657c8, 0x50f81551, 0xa4e47099, + 0x5434c6ea, 0x1769fc8c, 0x376016fe, 0x814b0c94, 0x5dff846d, 0xb6268dd9, + 0x70c3ea8f, 0x81b13d69, 0x0c56f7b9, 0x66d969df, 0x70cdd658, 0x4ae37a7f, + 0xfba87ce9, 0x3fc430d6, 0xdbac3b23, 0x7970edc5, 0xc710af82, 0x9ba6e1bb, + 0x17df4f08, 0x1f57b7fa, 0x80fe4d85, 0x1997e2bc, 0x7e62c743, 0x2bcbe533, + 0x74319e7e, 0x99a5e200, 0xbc9b6be6, 0x87b8f18c, 0x8553c79f, 0x37d46bbf, + 0x9e8ff0f0, 0x6c3fbc77, 0x38c0fa43, 0x4ecec26d, 0x58bc72f1, 0x0dbe1675, + 0x602992f0, 0x0fd7ce9b, 0xf34b4585, 0xfae01a78, 0x7e24f6b7, 0x2f35b257, + 0x83c3dbea, 0x98df2a35, 0x77c3cbc2, 0xfa34dccf, 0x614c7a4e, 0xa7f61b61, + 0xbe23fea0, 0x27b48808, 0x52e5a43f, 0x7ea3547e, 0x97c8cc22, 0x25f80e08, + 0xc0b37e53, 0x47d85faf, 0x9e54a77f, 0xb62609e6, 0x534f498f, 0x521b8051, + 0x357d90d6, 0x68621bd5, 0xcbb2bb57, 0xc73b2f49, 0xd55ded99, 0x9b9bb663, + 0xde74dbbc, 0x05d69fbe, 0xa6cf689b, 0xacf8a1af, 0x0ce4bb2d, 0xe71493b6, + 0x9a86db0f, 0x65c44561, 0xa7b0b25d, 0x9037606f, 0x655fac9f, 0x79f8507c, + 0x13fe836e, 0x609dbd38, 0x93bfa02f, 0x81776029, 0x0fbe4f41, 0xb6ffcc60, + 0x17db8c29, 0xf67a3f82, 0xf6e2521f, 0x7c78521f, 0x9c8dfd7f, 0xff46103f, + 0x212bedc7, 0x8e3dc4bf, 0x3b4373d7, 0xe3c63e3c, 0xb13f46f9, 0x5eef51df, + 0xfb46d098, 0x3f02ee00, 0xd3488fa5, 0xe5051da8, 0x98f3e614, 0xa615e3f0, + 0x5931fc53, 0xe75923cc, 0xb45d7cf1, 0x718c03a7, 0x3f44d74a, 0xf1468ff7, + 0xf9d06ef1, 0x853db178, 0xa4ded3c6, 0xe04f9f22, 0xbbb42efe, 0x97b73f31, + 0x249cc97e, 0x07eb0f90, 0x005c97b4, 0xfd537474, 0xcbea4590, 0xd7f08a47, + 0x43afe115, 0xa0b2d33b, 0x87ac019d, 0xf23f04cf, 0xdf61bfb8, 0x7f71100c, + 0x5a63bbe3, 0xe63ff8df, 0x9ff1c527, 0x6a529f91, 0xe3ec9f2e, 0x8f7c667c, + 0x181adbf7, 0x64bbafe7, 0xb3a40761, 0x52bf9c61, 0x52bf8aaf, 0x3e509e70, + 0x12cfd8c5, 0x513a92fc, 0xa70117e8, 0x8bf8350c, 0x83deddd3, 0x8f9fce4f, + 0xdc7abe0b, 0xb5dbabe0, 0xf4e9181e, 0x3f0e54f8, 0x07ec6296, 0x114d3e71, + 0x2c4ea4ed, 0x35493e21, 0xb979d7fa, 0x30bda1d4, 0x2942edd2, 0xd2db83e7, + 0x87b3be78, 0x2c92bc0f, 0xd20bd2f5, 0xaf6e68ac, 0xf9147a1e, 0x05f1386d, + 0xca55d5d1, 0xfc85cdf9, 0xf3faf126, 0x9154fca1, 0xa7d1e8ef, 0xa2ffa161, + 0xd665927e, 0xcf8857ee, 0xb6133ef8, 0xc2fea0e7, 0x7b72f3c7, 0xe824d4e9, + 0x29d743d2, 0x8b9721c1, 0x9516316b, 0x8ba21e2c, 0xd41b2164, 0xf946522f, + 0x92a97d87, 0x0e3efd04, 0xf972b1f8, 0x5d9af8a3, 0x2f1ed7c4, 0xc87e4238, + 0x01ac3ee3, 0x6f7af178, 0x2a1943cf, 0x4fd0f8b5, 0xc794bc7a, 0x4dfbe23f, + 0xbc7cbd2d, 0xd38ecb4d, 0x136e6967, 0x8b223e7f, 0xf93889fd, 0x9b9acb59, + 0xf909fd69, 0xf1313cdb, 0x7179788a, 0xd8fae44e, 0x0f2bebe1, 0x288a67c8, + 0x0beb0497, 0xc23ed7d2, 0x9f8a1f2c, 0xb8eb63eb, 0x9f45f100, 0xfbe44ef1, + 0x399a4a66, 0xfaf187ff, 0xf2757bd8, 0x110fcbd2, 0x8405beb1, 0xaf3bf8fe, + 0x696cff6f, 0x11f64fc8, 0xf4f100d2, 0x467025b2, 0xdce87c46, 0xf5b0743e, + 0xf4267f84, 0xa9b74183, 0xef85e314, 0x1c9e5cd9, 0x63d6847a, 0xf9e5c147, + 0x3fd8bd6e, 0x53a75b5c, 0x556f88fa, 0xf92f3cd9, 0xd86eb42d, 0xb62a9a8a, + 0xea1b3fc3, 0x3addf43c, 0x173b542a, 0x2b61c6e0, 0x6fb0db82, 0x9e93cfe1, + 0xfd8afa42, 0x2a5c6372, 0x47282bda, 0x25bf21d9, 0x7085ca8d, 0x1e08ea9a, + 0x927b4747, 0xf820e2e2, 0xc70d6056, 0x50275850, 0xfee08c2f, 0x04686390, + 0x1f341063, 0xe5532bf4, 0xf8829260, 0x628e6828, 0x75d143bc, 0x2906b792, + 0x38f91cc2, 0x7fc92bdf, 0x3de5c2c8, 0xbd5fda71, 0x4d47dc24, 0x8a45d720, + 0x06deec8d, 0x9824c235, 0x4628c35f, 0xae434b7e, 0x5233cfd9, 0x78e5c287, + 0xf87b4ef1, 0xaaf918ed, 0xe098a48e, 0xe159fd9a, 0x68e463b7, 0xc0fce331, + 0xafb44b96, 0xb13fc556, 0x839ed66a, 0x90617778, 0x625dda16, 0xb840cf69, + 0x51df758b, 0xfb3ca322, 0xf73728fd, 0x8831c1c9, 0x0111a4b7, 0x0f4523e2, + 0xda55f888, 0x5d1bed55, 0xe85eaf09, 0x9a42659e, 0xb1d4522d, 0xc69a4037, + 0x4c7198d3, 0xf67fc652, 0xaf701871, 0x69141cbd, 0xfc27a1ad, 0x3d48ffd2, + 0x17af1c51, 0x868f112a, 0x1572605e, 0xa441fb13, 0xfe42ac17, 0x64827aa6, + 0xaf186b8f, 0x878f78c4, 0xf0fe83eb, 0xefd628dd, 0x342f4235, 0x7ad05ea0, + 0xcea1bfe5, 0xd855b04b, 0xb6878ac9, 0x764a59f1, 0x1ae78430, 0x596bb332, + 0x593e027b, 0xfc520ae3, 0xb95670ea, 0x19afbf07, 0x6461ee5c, 0xc4fb73f7, + 0xac9aef18, 0x7ebb1672, 0x3979b8e2, 0xe7e2bcf3, 0xc4df1fd3, 0x1f0647af, + 0x3237c8a9, 0x12c39ea5, 0xe2957ea6, 0x861e7891, 0xd0235fdb, 0x925950fe, + 0x8f7d1d6f, 0xd1f2f396, 0x3ce69142, 0x6202e540, 0x235ff17f, 0xc049f35d, + 0xec307486, 0xb835bf59, 0x5ec2f51f, 0x234e5245, 0xbd3ac49e, 0x3765ed3a, + 0xdef8c1d2, 0x2fb5fd31, 0xd2af1aa0, 0x4f104ba2, 0xf83b9cb3, 0xa463643a, + 0x233b0c8f, 0x371cc0a9, 0xdb3c0bb3, 0xf2a65f02, 0xd8df04b3, 0xd1cb9a86, + 0x8bee2a79, 0x91725b84, 0x3971f1be, 0x9a4a072e, 0x0dc55f39, 0x679f1855, + 0x1c1e3dde, 0xa0d9eaef, 0x561f8177, 0xdfeb374f, 0xf2072c6c, 0xa7857bf2, + 0xabfd08ff, 0xcdf3bdcb, 0x07514809, 0xc99e47d8, 0xce10f6be, 0xec95a673, + 0x9e0c2445, 0x99e23087, 0x415939ac, 0x9fe2373e, 0x7d2f0383, 0x21cd7184, + 0x45c93ef3, 0xe856f341, 0xf65b7047, 0xc18ce8af, 0x7521be3c, 0x72fec48f, + 0x0f3d131c, 0xc0373c30, 0x47580ad8, 0x1ef38f71, 0x1bbeb14c, 0xf1e7e049, + 0x2b0f4176, 0xf48c81ca, 0x10ea5309, 0xec4b85fe, 0x75a3267b, 0xb7ebdf9b, + 0xb6163f80, 0xb0f67f90, 0x5adcf64e, 0x5c27ce99, 0xa303ffad, 0x926fd1d1, + 0xe4bcbac0, 0x9e7afab8, 0xc6317340, 0x459606e3, 0x5f1bae28, 0x9f9933ce, + 0xcfcf8a6f, 0x0ff17c15, 0xb4e6f3a0, 0x9d2be47c, 0xfbd061e8, 0x88707247, + 0x6f863e3a, 0xabe93f75, 0x4aa572f8, 0xed0aa870, 0xf3140acd, 0xca7eab7d, + 0xcbfc3f49, 0xeaefb469, 0xf45eaaf7, 0x55ef264b, 0x5c02b7a3, 0x679f95bd, + 0x93b21cb4, 0xcd3e74fc, 0x234ba8e1, 0x0efce53f, 0x1ac1ec89, 0x9b86db6b, + 0x57b7ce31, 0x85b76466, 0xbf382ccb, 0x6cee62d3, 0x85cb873f, 0xf5bd59c3, + 0xbf587df0, 0xf695bf62, 0x2c0fab19, 0x00cdc2fc, 0x92ae3c2f, 0xb2dd57ad, + 0xf0081b52, 0x4114b0a2, 0x97126bb8, 0x993ed0df, 0xddcbb7e4, 0x89db3196, + 0xe6361dfb, 0xedc606bd, 0x0598cb6a, 0xbf0caaf3, 0x2af58250, 0x5c3e4b77, + 0x6def2637, 0xf5059639, 0xb44977aa, 0xa778bccf, 0xe8637983, 0x8e55ba73, + 0x60f18ade, 0x43c62798, 0x12e6b216, 0xcb757bc4, 0xeaebcd46, 0xbad9f7a5, + 0xed6bcc11, 0x4177ab85, 0xc96f503f, 0xa70f92f3, 0x82c2c4b8, 0x079d27c8, + 0x9ddb65ec, 0xda95bf38, 0xabce1770, 0x0b72c351, 0xd9f673c3, 0xadbe38bd, + 0xaf7c095a, 0x56ab7a7c, 0x8b57c31e, 0xbcc75e77, 0x7a727c31, 0xe5e67e4b, + 0xb0b39dd6, 0xa78ec68e, 0x99c3c452, 0xc7a6d612, 0xb5933fc4, 0x648fa114, + 0xff06fb53, 0x64655e87, 0x745e87d7, 0xba0d5e11, 0x7eb9d32d, 0x4176e830, + 0xba547417, 0x37db628b, 0x07480dd2, 0xe82bee2b, 0xeb0e3e94, 0x609ba639, + 0x6cfa473d, 0x435dfc46, 0xef940cfb, 0x718ac89e, 0x47eddfbf, 0xb7f71e47, + 0xc62ac5fd, 0xce1c0207, 0x792827b8, 0x237f332f, 0xe706acdd, 0x75b911e0, + 0x1493a3ab, 0x5acdab90, 0xbc862970, 0xc9f86f1f, 0x1f0029a4, 0xc80d8350, + 0xb0520dff, 0x227fc782, 0x3597941e, 0x61e49f62, 0xfc63c20c, 0x7da34b3e, + 0x16f7cd81, 0x3125976d, 0xcb8434d7, 0x287189bf, 0x6a51e768, 0xf2768547, + 0xc64edcaf, 0xed4c137d, 0x6157dc64, 0xda99b3b4, 0x3b5d5fb1, 0xc9bbef9b, + 0x2afb9e3c, 0x41be768d, 0x6eaeb8ed, 0x4ff7195e, 0xfee78f34, 0xf3276a2a, + 0x43d91f1e, 0xc30a7ec6, 0x63c61ab8, 0xbf5ca776, 0xd1f2c58e, 0x7f636fa4, + 0x58aa902e, 0x909e4a3e, 0x14a79264, 0x1e09aa7f, 0x54d03a50, 0x67903d3e, + 0x76599efa, 0x3a5f1c6d, 0x0c138f49, 0xf0a68a83, 0x50369378, 0x3c53bd23, + 0x83f046d0, 0x77a49d03, 0x7829bc1e, 0xe137ee0d, 0x3eaf5158, 0xeb4705a8, + 0xe186f809, 0x65c5387e, 0xfb4c16bc, 0x1f62a5d8, 0x4fa0d272, 0xfa829f86, + 0xe1ee9635, 0xd71f0029, 0x7a867f8a, 0xfdca84f6, 0x4b4fc32a, 0x7fd232b2, + 0xdb45b98d, 0x6d783143, 0x22fc0c1a, 0xa4dbb6f5, 0x8fc83d06, 0x56e7aaaf, + 0x5da23729, 0xc5a1d1aa, 0x7b3eacdf, 0xb9d0a424, 0xac2bb230, 0xd88fe81a, + 0xbfe835fe, 0x037ffa80, 0x9faa7ef1, 0x1379adfe, 0x72dbfd4c, 0xdbfd4c2a, + 0xe41fe834, 0x9fea8fe3, 0xbf80ff44, 0xacbf409b, 0x5bfd40be, 0xffa82a73, + 0x98558d46, 0xe9ea4ffa, 0xfff61cff, 0xe7cfca9e, 0xde7f99f6, 0xe7f9e64d, + 0xafe79a54, 0xafbff9f1, 0x4ffa2c7e, 0x5c5ff9a2, 0xff3e67fd, 0x7f3e4a9c, + 0xa7b76f2b, 0xfe0f777f, 0x4bfc463f, 0xadfee25a, 0xf3cd13f9, 0x9e65521f, + 0xaff795bf, 0xef3d726a, 0x6bfd49df, 0x69472c6b, 0xa8aa43fe, 0xf41acd7f, + 0x83691f21, 0x1cf16a92, 0x5e48182f, 0x6fe133f4, 0xf823a53f, 0x9aa88af9, + 0x3078e347, 0xc5ddf389, 0x6737e024, 0x61653eaf, 0x97d04090, 0x2f4f044b, + 0xf1ac5dde, 0xc51087fd, 0xa188162d, 0x732fdfce, 0x9593747b, 0xee756dce, + 0xcf084397, 0xc50b74df, 0xecac6b47, 0x1fed00fe, 0xf904e182, 0xd4627c7f, + 0xc579d8b6, 0xd59a0ba7, 0xf8a6edd3, 0x684f1f34, 0x0b511b12, 0xeaa05be3, + 0xfa34f826, 0xdf87a05d, 0xd20c7f42, 0x7da32a33, 0x2fd1b7f7, 0x6e5626bb, + 0xb573f256, 0x014af621, 0x310eebcc, 0xc70ad3fe, 0x12e5e9f7, 0xb8bba79d, + 0xfa86a971, 0xc3b3416c, 0x08d50fe4, 0xb01f753a, 0xd5ff7186, 0x27753f38, + 0xbf632289, 0x63f9f43b, 0xdc2e3f68, 0xef54c032, 0xed5e161e, 0xd6f3f281, + 0x7b8c19cf, 0xb32a5f08, 0x11fb8f5e, 0xf106a6a0, 0x841b2af8, 0xd6b294f1, + 0xf59e2a8d, 0x354cb3bd, 0x0577edd9, 0x2a97f0cd, 0x1aa770cc, 0xd40e3156, + 0x5b6248b9, 0x6b7bdda1, 0x807f78d5, 0x4b45b9fa, 0xef25f615, 0x61a00eef, + 0x8bdd6416, 0xad98f5e9, 0xd3ef5d13, 0x3c635d79, 0x0f015f35, 0xf6e3d68e, + 0x432ff274, 0x0687e4e9, 0xf8ef3e75, 0xdaa7def1, 0xcf1801fc, 0x84c90f7d, + 0xb7f1f8cf, 0x2df8721f, 0x6fb7a760, 0x7e8a93f9, 0xe27cfc4e, 0x8aff7fc7, + 0x1ae8f9f8, 0x42730fae, 0x5321f9f1, 0x6b48c3dc, 0x376f17f6, 0x6fb7b5db, + 0x3bb1d937, 0x45e09ba7, 0xe54cbbe1, 0x63996e17, 0x79a0befa, 0xbcfbe991, + 0x7826a5a6, 0x5321e84e, 0xac57fbf9, 0xb7bf7d34, 0xfbe9ad76, 0x9a362a97, + 0x4f82bbe0, 0x59dfca99, 0xddf4d5b6, 0x17e46872, 0x5fea8e51, 0xc58ee995, + 0x1bd3cefb, 0xdf7cded0, 0x1e90f8a9, 0xc1fc60ef, 0x9795768a, 0x63fdced2, + 0xe82b7ce9, 0xdcdc72c1, 0xa4a6b8d8, 0xea2269be, 0xf3fa4665, 0xead33589, + 0xad3f0043, 0xf27f0979, 0x07458d16, 0xda9353a0, 0x72ddc7c3, 0x2bf6f7cc, + 0x8202df7c, 0x77efb63e, 0x7e713db9, 0x4339b6cd, 0xbff104f4, 0x8365b95e, + 0x92eb9d70, 0xab09c712, 0x31a9cee2, 0x7ce48ab6, 0x99d7c6a8, 0x83eb8d2a, + 0x93593daa, 0x7e0fae30, 0xcbdaf0f9, 0x289117f5, 0xfad0c72e, 0x187e474f, + 0x2fef8a64, 0x926f99de, 0x32c38eef, 0xea096b8d, 0xc3abd004, 0x8d7ec0d5, + 0xcd1c47ee, 0xc70a3999, 0xa1a03fe1, 0x4e9fd9de, 0x5d477aeb, 0x55b7f6e9, + 0xd2804fa4, 0x28caea77, 0xa4175d3d, 0x0abaedf4, 0xabaadf4a, 0x6ebdb4a5, + 0xafbfa505, 0x66fa510b, 0xbfa5135d, 0xf4a66bad, 0x4a16dd64, 0xa617537f, + 0x4fceb3b4, 0x3d0f21a9, 0xec2037fa, 0x8ca36361, 0xcc587b09, 0xe7bd21a5, + 0x9bc5169c, 0x0e2f382e, 0xc2ff7b47, 0x3fdd2b49, 0xf15f0fe8, 0x1d3fd6fc, + 0x94af64fd, 0x93900787, 0x9eddff1c, 0xb764e9c4, 0xfa0652b0, 0x6fb0ed68, + 0x1016e6fa, 0xc0cb20ac, 0xee9be482, 0xee2ed04a, 0x995e65c7, 0x5ddfcc4e, + 0x71e80338, 0x171f6bfa, 0x3543bb61, 0x1d25febe, 0x661d6995, 0x99beedd1, + 0xde3d3ea3, 0x2efe1fa4, 0xe774e307, 0x96d7f07b, 0x3464e743, 0xd0b9da9d, + 0x1f18656a, 0x41d070bb, 0x8e1787fb, 0x3ca3776f, 0xe1c8f32e, 0x8ff6c7b7, + 0x6e48eaaf, 0xbff269d8, 0x6685f0cd, 0xeb4234a9, 0xd67937b1, 0x3d2be428, + 0x939d36fc, 0xb46a50f3, 0x51a3ccb3, 0xe677673f, 0x71a678f3, 0x0a7764bf, + 0x9df82bf1, 0x3deffe54, 0x31dafe9e, 0x2b58c3c6, 0xb68d83fb, 0xe79e1906, + 0xbf7cafed, 0xb7fca4fc, 0x83baf146, 0x17b445ea, 0x25fff0ac, 0x10a04fba, + 0x135bb46c, 0xd1d64391, 0xd4dbbf98, 0x1af3d41f, 0xbca5fd3e, 0xf9adf1cb, + 0x18f5c8fe, 0xe25bfd58, 0xc512b562, 0x49788cad, 0x926ce297, 0x4bc6f746, + 0xbadc446a, 0x05aed6da, 0x6b7ceb21, 0xb6e365fe, 0xeb8eeb67, 0xc2aaee78, + 0xf3a1acd6, 0x39191153, 0xf9dcf505, 0xb40cfad6, 0x17cb1707, 0xa8240c1e, + 0xe3cad33f, 0x6ac28b7b, 0x151d79b7, 0x5da0c1fc, 0x3a1f9f23, 0x818e9e74, + 0xcedc2c3b, 0xbe776f8e, 0x49e2eaf5, 0x289f764b, 0x17dbd9b9, 0xbff64b4f, + 0x5e7c51a7, 0x92b8a661, 0x35973f81, 0xe30adf30, 0x8a79dcab, 0xd477d1ec, + 0x5caff0d0, 0x9df53f46, 0x7143d39f, 0x215e6339, 0xccfd86d6, 0x623a209d, + 0x80df3bde, 0x9fddf4f5, 0xa51cfca9, 0x8c6b9738, 0x9e2fd8c3, 0xadb9a027, + 0xf8bf698b, 0x4eff7ddd, 0x167cdff6, 0x581d1370, 0x91da1173, 0x14a599e7, + 0xbd9e74f1, 0x431b1eec, 0x94702687, 0x9af34f10, 0xd80c76cc, 0xe17826bf, + 0xce5c3316, 0x3ea06466, 0xb2a4df29, 0x33f344b0, 0xd5615f7d, 0x590b7e89, + 0x575c1aed, 0xe71e55eb, 0x6533ab9d, 0xead5e810, 0x68bd7def, 0x598fc00e, + 0xc468faf9, 0x72a5165f, 0xb232b03b, 0xd173c355, 0x7b1d687f, 0xeb0ccdc7, + 0x3ae0d787, 0x512bda10, 0xbf1e361c, 0xf1fc769f, 0xebd635e3, 0x3120713e, + 0x529dea8e, 0x5f8d73c2, 0xe8667c17, 0xde6273eb, 0x01f05f86, 0x427e31c2, + 0xf6e22ac4, 0xee919332, 0xc85b75e7, 0x7ddf4c92, 0x1edf9c51, 0x8bdeafab, + 0xab40fc71, 0xbe06ec95, 0xf394617f, 0xdf94835b, 0x9cbcfd21, 0x1688a7df, + 0x88937ed2, 0xa4f71beb, 0x217724e4, 0xfb167943, 0xf776f56c, 0xb8d78436, + 0x4e1ce82a, 0xb43bca0d, 0xe4bba8f7, 0x6dabc638, 0x07ea39ac, 0xe27ab5fe, + 0x66bc03f6, 0xf9f621d8, 0xf703306b, 0xfe3c7d0a, 0x2e6118ef, 0xe199f2e7, + 0x29e0f65f, 0x5b4c7c4a, 0xbf3c5ec9, 0x39e28ce5, 0xe9413605, 0xf2b7f1e8, + 0xe3e3dfd0, 0x1ece7867, 0x79d72fca, 0x571825f9, 0x7f2c7a01, 0xea66527d, + 0xcd51f465, 0xc70b1287, 0x4a3523ac, 0x587c86b7, 0xf942a1f3, 0x7a6f599f, + 0xd18d5561, 0x82d67f9b, 0xa00f51a7, 0x49f1c49e, 0x7eec4fd0, 0x7abe3818, + 0x36cb9cac, 0xe67c7f33, 0x9331a471, 0x835976fe, 0xc71a241f, 0xd3df6e67, + 0x96d97da7, 0x7f6c77fe, 0x93f69f68, 0xfd5fb513, 0x85f6e7bd, 0xfcad7d60, + 0x3c6e13ce, 0xd2aef754, 0xa7f7819c, 0xbb565aaa, 0x51df2e51, 0xeba46e42, + 0xe13961bb, 0x9b12e3fd, 0x277e77c1, 0x225ad3de, 0xb3eceef8, 0xfd017c8f, + 0xaa2d8b97, 0x9d81f14e, 0x9815a8d6, 0x22eb4972, 0xad3b1f2e, 0xefcc38a7, + 0x37ecd79d, 0x6fca8beb, 0xa5e1913d, 0xf090de7d, 0x1fe4a39f, 0xc7f1d92c, + 0x6abbb412, 0xbde93758, 0xffd87af8, 0x0f64a987, 0x68fbc1cc, 0xf38ddff1, + 0x2f02353d, 0xd08fad35, 0xd69abc79, 0xb779c5db, 0xe33bf276, 0xbb0855eb, + 0x389b06ff, 0x05f626ef, 0x30b0bc0d, 0x77ebfbb7, 0x0a78593d, 0xe3b1d5c6, + 0x20a96e67, 0xfeb94f96, 0xf79910bb, 0xfb7bef8d, 0xd04eab97, 0xb5f6b18f, + 0xf77b4eb1, 0x20e57f0b, 0xa8d4ab4f, 0xaac1fd1b, 0x3f9d2aad, 0xfb6e7aaf, + 0xf186bf37, 0xbeadd799, 0xe2fed061, 0x9bfc7ee7, 0xfc5e009b, 0x8d369a82, + 0xf789c34f, 0xd4fa0cc2, 0xae2bffc0, 0xe547a5ef, 0xe1ac7f77, 0x7fcc0a3d, + 0x2e97b538, 0xac385f8b, 0xf17d51b1, 0x58723931, 0xc415efe3, 0xaa7227d1, + 0xfa8afd04, 0xa8681f5d, 0x243ddebf, 0x04dcccb1, 0x63fadcf8, 0x4f118fb2, + 0xaf414f44, 0x95c5fa1e, 0x90ba01af, 0x57a38c5e, 0x908f397c, 0xe3176c7f, + 0xcfdfc0f1, 0x6df71f7f, 0x21f56b7e, 0xff9e2a1e, 0x73e71bb2, 0x7ce5a946, + 0x19d5f5fe, 0x42a68e78, 0x94e8650d, 0x678afcf2, 0x5bfe201e, 0x0c81e278, + 0xcfeedfbe, 0xb262e712, 0x9e0b9e70, 0x2cf34d9e, 0xc3e24167, 0x7bf3af8a, + 0xac2beff4, 0x720485f4, 0xedc6c872, 0xacdb33b0, 0x067899b4, 0xc7dc1217, + 0xb70e5978, 0x29703c50, 0x301e5bc5, 0x32d89ff6, 0x71b7df82, 0x19b26d7a, + 0x2960dde7, 0x1ddfe589, 0xa7486d8d, 0x99fd83b3, 0x61ae4718, 0x43e0484a, + 0xcaed04ba, 0x7266a627, 0x52af313a, 0xfe81ea24, 0x58f98c9f, 0xdbf54dbe, + 0xd8f54d0b, 0xfededca5, 0x61fe8b97, 0xbf6849dc, 0x7b00c99e, 0xcefcc130, + 0x9fc1f989, 0x67c31636, 0xe5cef231, 0x2e5ac77f, 0x87fc86ef, 0xf7e297a7, + 0xcb857eff, 0xfb43d611, 0xcd15c605, 0x6787efa4, 0xac1fa449, 0xce489a2c, + 0xce42a877, 0xf9e3dfcd, 0xe0afc605, 0x37c3dc7a, 0xd12a4fd8, 0xf2dbec81, + 0x563f504d, 0xeebf62af, 0x721aedbe, 0x83e850bc, 0x80fa7103, 0x557e9d3d, + 0x6a55b8fb, 0x435f9bf8, 0x0d7905f9, 0x557e5179, 0xdce18f7a, 0xb9bfa3ee, + 0x5cf6e41b, 0xb35b90c4, 0xdb978d5e, 0x59e33d8a, 0xe73db922, 0x7284b1f4, + 0xe509f90b, 0xfc4ed9d6, 0xabd68ffc, 0xb2df1e06, 0x1a45cf99, 0x7c3fb27a, + 0xffc9ebc6, 0xea1379b4, 0x0af3f849, 0x8fcbea2b, 0xfc1a1f06, 0x6aedf957, + 0xc3d5cf3a, 0xf61f06a7, 0x87c1a9f0, 0x2691e27d, 0x7f7fc63c, 0x530dff16, + 0x29501c08, 0x50755e7e, 0x4399e712, 0x238d06c7, 0x9969f97c, 0x06c7cd63, + 0xe1c2c5a5, 0x57123838, 0x07071fde, 0xe307cae2, 0xf9535ae0, 0x3547fdaa, + 0x6a36387e, 0xf8af272a, 0x0487f62f, 0x1d6301f1, 0x4f7d69aa, 0x387f210b, + 0xbabea9bb, 0x185c858a, 0xa6517f2f, 0xe0177978, 0xd3f40d78, 0x1c373bb5, + 0xdab23d02, 0xdd2be3ce, 0xd41adae9, 0xb77a5d7b, 0x6ecaed1b, 0x75f38f3b, + 0x29ddba05, 0xa9dcf631, 0xede93283, 0x4d2b30f6, 0x0dd277e4, 0x3b67c057, + 0x8f3befeb, 0x7da177ff, 0x954dfd0e, 0x302b399d, 0xd32cd32e, 0x2bf9c9f9, + 0xb9e374ef, 0xf983ae91, 0xfc832c5f, 0xf9913f05, 0xafc86476, 0x7bf8c564, + 0xe6d0b0ef, 0x53ee1289, 0x993e27af, 0x7ffb9077, 0xe627d7f3, 0xaf514afb, + 0x435cb9dc, 0xdb7e0afd, 0x1bfbb15b, 0x4f153b46, 0xfc1fe5c7, 0xcd1f2177, + 0xdca8e714, 0x141efe61, 0xbb128271, 0x6c318f90, 0x2dd3f08c, 0x4c32efb1, + 0x58be0b95, 0x3ae87406, 0x310c332e, 0x1328385c, 0xe6ec2e1d, 0x9e2804e7, + 0x75f2237f, 0x0345e937, 0x47281d5f, 0xafaff4d7, 0xaefef63a, 0x2fc82be8, + 0xfc28defb, 0xf63b482f, 0x07fc3ebd, 0xb5ef7f08, 0xdf58379c, 0xd90f93f2, + 0xeba4ff69, 0xbcf88b90, 0xe45fc5eb, 0x03e1057c, 0x775b8a56, 0x10a0fa1d, + 0x956ba6f9, 0x5df502b5, 0xb7ee60d7, 0x41f8bfd6, 0xb3ad3b61, 0xa5bf440d, + 0x4bdb8d76, 0x3dfe3f07, 0x70bd239e, 0x76856610, 0xc90721c4, 0xedf7cd51, + 0x7aeb6714, 0x58a283f1, 0x9d6fe07f, 0xafb112cf, 0x6562e5d9, 0x297c707b, + 0xe6a83f7c, 0x5f6e3707, 0x5a3ee789, 0xe0f36b0f, 0xfe1fe4fb, 0x68f510a5, + 0x1f6e1ed7, 0xcfedaa75, 0xc3ddbee0, 0xa0ddbf6b, 0x513abd02, 0x3d820698, + 0x0a63aeb2, 0x8bedd79e, 0xfc50bf97, 0xf1f16af0, 0x7c197fd5, 0xe7ae7e48, + 0x0934615c, 0xe8fa1f26, 0x3ea06ff7, 0xbe256438, 0x2e7be634, 0x96ec92b2, + 0xcf7bcd2b, 0x4b79b8ff, 0xf799abd1, 0x79f27f89, 0x838789df, 0x8395f7c6, + 0xe2fe7cbe, 0xe73f0483, 0xaf78d1f2, 0xb3dfdf92, 0x3fd9b8f3, 0x353ffceb, + 0xdd00f7dd, 0xb79e57dd, 0x3dcff49e, 0xfee9feef, 0xdd04fb93, 0x52f73c75, + 0xd0bfc3f3, 0x9ead3ef8, 0x6bfd25f3, 0xd761bdf2, 0x9af8b3af, 0x03963ef1, + 0xa75806bd, 0x4d19ae9d, 0x375c4618, 0xebdd0662, 0x6f79fb94, 0xf7124e63, + 0xbf89649f, 0xf306c0cb, 0xfe131fb8, 0xa05f1e14, 0x7e4e81fb, 0xf2714fcf, + 0xf14c847b, 0xeb34bbd1, 0xa3eb9dae, 0xfaec4533, 0xb3844193, 0xae28fa27, + 0x3657e71d, 0x812fcc48, 0xfb5cab5d, 0xbfd1c76f, 0xa2584751, 0x4f4a42d6, + 0xe228da61, 0x99aeaa95, 0x81671efc, 0xcd7bb619, 0x67b455b0, 0x36fc7c63, + 0xdc630b0f, 0x44791e5a, 0xf27373c7, 0x3de18518, 0x0e6b3b04, 0xf5617fa1, + 0x92dfeb98, 0xde714cc4, 0xce9fa76c, 0x1ec2abcd, 0x0b7e829d, 0x4601d9c2, + 0x1ec275fb, 0x74fcd255, 0x7dd6461f, 0xfd144e74, 0x7a182882, 0x4edeed2f, + 0xcff389f1, 0x8e02fa9e, 0x640ff167, 0x767c0366, 0x28b176ee, 0x1ac257d6, + 0xad953bfa, 0xc803bd32, 0xccd16894, 0xc3477d98, 0x1dfc5cce, 0x72a7cd17, + 0x0d3c358f, 0xfbee57ea, 0xf7ad2143, 0x6ec9baab, 0xf92b3d0e, 0xedd8685a, + 0x58afb885, 0x377b70a9, 0x92abbe9e, 0x71deffb8, 0x718651c0, 0x3f276902, + 0xb9195a4f, 0x9cc6b553, 0x49287993, 0xff11ca35, 0xfc497685, 0x5f18249d, + 0xc34639ec, 0x25d8edce, 0x57edf1f1, 0xca901de9, 0x62742f9d, 0xa4f2a3bc, + 0x62e687d5, 0x28f7cecd, 0x3bf93ebe, 0xc9dbb9cf, 0x7e4d93af, 0x72ff1f6e, + 0xb0fc4ca7, 0xec9ab5a4, 0x2f89805d, 0x3f844496, 0x9ffd29f7, 0x7179dfc5, + 0x5a705e1f, 0xb96fddfc, 0xb6729e31, 0x7e4dc5ad, 0xc7cbcee6, 0x93f8fa7b, + 0x9fc2b591, 0x8f78bcfc, 0x793fb132, 0xf601ff16, 0x38a4eed7, 0x00e77cbf, + 0x5a322f71, 0x6977b974, 0xfef73f16, 0xed0f1833, 0x19ee73d8, 0x5fd5771c, + 0xda0cf4ff, 0x5d90ecaf, 0x9a917dc7, 0xf8a55f67, 0x58ef5191, 0x767f8f12, + 0xc516faee, 0x9fc13adf, 0x5f3ad6c7, 0x7e83933c, 0x1f0be74c, 0xbe7fa065, + 0xf4a9c5fc, 0xbdf2ca2e, 0x02593393, 0xe45237f9, 0xc455f0df, 0x76e9e2ff, + 0xd928f5b4, 0xee81e7d9, 0xc4f4e7e8, 0x3cd52209, 0xf115e2fe, 0xe389dd81, + 0x01e27dad, 0x78bf33ad, 0x6e179e0b, 0x46a87d55, 0x781718ae, 0xfa39e805, + 0x5bb8e82a, 0x9f227fc4, 0xe05c6cbf, 0xe803fe3c, 0x7324c7f5, 0xd6fde05c, + 0xfbc0df05, 0x4075acaf, 0xe88171bf, 0x88cfe055, 0xe490bee7, 0x79424eef, + 0x8a6df3db, 0xa6fd20c7, 0x9f3b84c1, 0xe3073f7b, 0xdda8efe1, 0x107bd1f7, + 0xf4755a2f, 0x7c5f2b6f, 0x73a9e48d, 0x978a09ef, 0xed571132, 0x787f3d64, + 0xf19c4bfc, 0xe2e1d9ab, 0x074104f1, 0xdd78378c, 0x0ae22f94, 0x788daf9c, + 0x86717f43, 0x713c8e11, 0x43c78f5e, 0x21bc77aa, 0xba5ef7fc, 0x5e901349, + 0x1f1b2ea7, 0x23a0f037, 0x8d886e1e, 0xeb8e25a3, 0xe2d1c4f4, 0xcfc466e8, + 0x0064e27a, 0x24bc6367, 0x2896bd2c, 0x95b9db2e, 0xd53adfc7, 0x8c7be7c4, + 0x23be5ab8, 0x57c36e4e, 0xd2bb4f17, 0x9e2d3e3c, 0xd4bc3806, 0x3abe3c6e, + 0xdfac493e, 0xb7571c4b, 0x7eefde1f, 0x7ef9954d, 0x9c1acb85, 0xa6fdc0ea, + 0x5d1a53d6, 0x3dbf0328, 0x74676310, 0x1d8cf388, 0x6714cacf, 0x4a391359, + 0x7f5e3dfa, 0xf179fb18, 0xe3132de3, 0xaf9fb25d, 0x5c7b1d1f, 0xd3b42761, + 0xf100e471, 0xa7dd92f5, 0x6c73ce28, 0xf6b577e7, 0xd716f598, 0x7ccc708f, + 0x5c3f9e3a, 0x8986e3c8, 0x7729b7df, 0xe6a6bb70, 0x6a7ee260, 0xea67bf76, + 0xa2287167, 0x97a9f3f1, 0xe2acefef, 0x3bdb13bf, 0xfdd2a6db, 0xb911b3d2, + 0xf1fed134, 0xc4550eed, 0x0a799ba5, 0x3b9d28eb, 0x83efc13f, 0x89397b8c, + 0x3f2f69ce, 0xbe06fa51, 0xc41cb607, 0xd6cbed1a, 0x5b4f9c95, 0x083fd3ff, + 0xe27adde9, 0xafd7196e, 0x18df887d, 0x95e8b33b, 0xd02ec9da, 0x066f450f, + 0xc6bb21c6, 0x4e1b9deb, 0x87e34c5a, 0x5d71327e, 0xf0768068, 0xc39e017e, + 0xeec8f1c2, 0x8f1c5292, 0x7b745bac, 0xaab37382, 0x150bdc53, 0xf9baaaed, + 0x77c33b5c, 0xce9da0b8, 0xa4f9c691, 0xe9e23240, 0x3cd9b6fd, 0x2f9205b5, + 0x1deefe77, 0xea3b37a1, 0x0d7a2c7c, 0x7082a7bf, 0x5cbf388d, 0x0968f071, + 0x888ac1ea, 0x8c9df0c4, 0xe499ac45, 0x45239b66, 0xdb312f9c, 0x7f079515, + 0x5b2be54d, 0x2cc5f979, 0x3ef1e542, 0x57ddac4b, 0x671b191d, 0xeefe708f, + 0xaa4ee712, 0x73a22c3e, 0xf738c688, 0xa8ea7e08, 0xbe7a4dd3, 0xc4e7c70a, + 0xd46d497b, 0x8064754f, 0x5ca31fa9, 0x9b3787f5, 0xda56abda, 0x3faadf88, + 0xf7e51cfc, 0x879d57c8, 0xfb7fd0f0, 0xeee34c83, 0x3a46ff6d, 0xfdb7d8ff, + 0x7f1f9489, 0x8333d57e, 0x66b329c7, 0x184e691a, 0xb8c867f5, 0x149e543f, + 0xb5fc07ae, 0x5097c1e9, 0x9b5c781f, 0xf0cc7f72, 0x7409a6dd, 0x0e97fc0e, + 0xcdc1de71, 0x83bcfcdc, 0x75816433, 0x6dbe6bf8, 0x3a32271b, 0x23b2f0cf, + 0x8b033cf6, 0x311ea216, 0x1ef9f5ca, 0x1b21de77, 0x942a80ab, 0xc5f338c5, + 0xd3f57d3b, 0x7e10dbdd, 0x1bdfc5da, 0x87dd61cb, 0x76c37cf1, 0x62e43fe1, + 0xefbf327c, 0xf59f63bb, 0xc9b4b1bd, 0xf8874bc5, 0x9f59cd60, 0x66f7825a, + 0x7e2ceed2, 0x7e0e9061, 0x8257c583, 0xbed3e4e7, 0x0b263c55, 0x4fe766e0, + 0xe2abfc39, 0x3f003931, 0xc3957aeb, 0x073a258b, 0xeac8f9db, 0x3e17f412, + 0x059e9eb3, 0xe9eb3198, 0xcefe233f, 0x63bcde07, 0x55cf1781, 0x3de26b74, + 0x1b960082, 0x2fe3813c, 0x0be6f9db, 0xb10e0fe8, 0xfd44afb4, 0x3f178df2, + 0x8bfba148, 0x9d439de2, 0x4748e835, 0xe9709ac8, 0xfaf3e732, 0xf82c73bc, + 0xd04a7469, 0x58fe04e1, 0xbd04673b, 0x8ab5f5eb, 0x0e7e3619, 0x823e7cd0, + 0xd74469e9, 0x4cae82f9, 0x205cb7dc, 0x0e50b3e6, 0xde203c69, 0xf11bd62c, + 0x4aa872fe, 0x2fef54fe, 0x710d718b, 0x591efbf6, 0xde9d339e, 0xfe34a323, + 0x3b3fb23d, 0x3f314302, 0x1cc3fcab, 0x7de373e4, 0xca77f8b1, 0x496dd298, + 0x136fcf64, 0x37f594ef, 0xc19c4fde, 0xbcfdb1eb, 0x1cf77a1f, 0x3d1b3907, + 0xd1e1f35f, 0xc62bd1cf, 0x03d214f9, 0x8d44fcfc, 0x973e1fa0, 0x1e1ff748, + 0xdb5fb464, 0xe8fc9565, 0x597d7777, 0x7b37f5a7, 0x7ff234fe, 0x11b91cbb, + 0xf5d4673c, 0xebed2f15, 0x0fe0ef19, 0xb51c983e, 0x2e1e49bb, 0x45c3c9c6, + 0xfb9bff33, 0xdde4baed, 0xe9ed4edf, 0xa8303da2, 0x76c7ee63, 0xed5d7cc9, + 0x38d2f3aa, 0x61d0b306, 0xb6aed3b4, 0x614ee9bf, 0x00fa0b5f, 0xe2c667de, + 0xe9fecefd, 0xdfa0b777, 0x17e889dd, 0xcb9c7eff, 0xcb1fbc19, 0x463f299d, + 0xbfc5c8ef, 0xd74f171b, 0x29f9a51a, 0x719ab2bc, 0x13b23df0, 0x5e8dba0c, + 0x13e88631, 0xe44ac743, 0xdf07d1fb, 0x0d78e0b3, 0xcfd93dfa, 0x9d07f239, + 0xef88fd7c, 0x7daca32f, 0xf9413060, 0x49af4e95, 0x8ada175f, 0x67c80a7c, + 0x8bc785a6, 0x129796fa, 0xcfda07ce, 0xcef9dcbb, 0x0bb79d42, 0xf9c7aff8, + 0x746ff818, 0x17defd0a, 0x1cb0ebff, 0xabd29fe0, 0x5863ffc0, 0x1bfc3fae, + 0xa162da7e, 0x7ee31617, 0x1fcff015, 0xf23233bd, 0xd912dfa0, 0xa8bffc49, + 0x97fb1645, 0x432a5dfc, 0xb1ba2c8f, 0x87de30f6, 0x8975f45c, 0x78be74f8, + 0x789cf287, 0xbcfe3287, 0x88597960, 0xcf95e4f4, 0x0f49860d, 0xce69de2d, + 0xb7cbd9df, 0x17ce7439, 0xf7a33425, 0xfc78ccdd, 0x7d0a705f, 0x896edf31, + 0x9e335f7d, 0x2d6b830e, 0x59e5f3a6, 0x21da7b93, 0xf163ddbf, 0xb9f146be, + 0xe30caa9f, 0x6d257e3e, 0x308fbd1c, 0xed829a4e, 0x35b90b16, 0xc2b21bda, + 0x86e5a76c, 0xf30ff7cc, 0x0ff7cc9b, 0xef9b3587, 0xc5b35e1f, 0x6470ff7c, + 0xf0ff7cd8, 0x9bd79dba, 0x9b9151e0, 0xef47e54c, 0xc782649f, 0x54cdff44, + 0x19f1ec7e, 0xdb7c7826, 0x37f2a6dd, 0xfa6b9c9c, 0xa57b637e, 0xefcdfbe9, + 0xb7c1332c, 0xa987ff74, 0xd701747c, 0x56ea478b, 0x057de114, 0x96472f03, + 0xf31d166a, 0xe8b70e97, 0x19f9b185, 0xa6216f7e, 0x93f47e45, 0xc99793fb, + 0x628a87b6, 0xa662e7d7, 0x64daf49a, 0x74ee199b, 0x0732bf0a, 0xff8805f8, + 0x1ab938a7, 0x34d55b54, 0x8b81c01c, 0x6c39d286, 0x428baf90, 0x4abc5dbf, + 0xc931f6fd, 0x1ae892d7, 0xcbe5e384, 0xd2006f78, 0x8ec77f10, 0x94f8fbbf, + 0x9ea7ccdd, 0xcd8af47e, 0x69ff9c65, 0xbd6271e6, 0x9262ac6c, 0x9dff2313, + 0xd2f9b171, 0xfe7469c2, 0x5576bfa7, 0x76ebbccf, 0xb354be80, 0xe46a50e6, + 0xfc4b2eaf, 0x2e79257b, 0x173b6fe9, 0xfd8fa5bf, 0xfb42e794, 0xcde5ed29, + 0xc96d6e78, 0xefe4dd3d, 0x78cd5966, 0xfbf985e9, 0x9e78c6c2, 0xb80563ae, + 0xdaf71bce, 0xd6224016, 0x82ef9a6b, 0xe06467d7, 0x7eec8379, 0x2e39e0fc, + 0xa99fafae, 0x1f375d0b, 0xa66cc709, 0xd139e4fb, 0xdfb4129a, 0xd6738887, + 0xcf892d9b, 0xf02add3f, 0x148a8992, 0x46a704ed, 0xe5f3fbf1, 0x89f1ba6f, + 0xf06b2aa3, 0x9f7c1756, 0x48adba3b, 0x99e9fbbc, 0xb71deae1, 0x9c728fa1, + 0x9ef4cd81, 0xfc69983f, 0xe3cc85f7, 0x5027bcc9, 0x1bdf0b9a, 0x273e2d52, + 0xf612ddc1, 0xd8cc3da7, 0xf0df2800, 0xd7c69957, 0x3a46e470, 0x8339a417, + 0xe6371f14, 0x01b9c4c9, 0xfde03f63, 0x1fe459b4, 0x73db5c36, 0x97de882f, + 0x6819df79, 0xdfdf76c3, 0x2cf7f2a4, 0xefa64927, 0xa5e6ce39, 0xe51c60c7, + 0x0f8a0ead, 0x40be5b2a, 0xe1e68dfe, 0x467869e3, 0x8d12d962, 0xddb1c787, + 0x87801f1c, 0xfede89db, 0x63168bdc, 0x3abdf0d2, 0xa2fba359, 0x2389fb83, + 0xdf8c643c, 0xe744c23f, 0xe3cc6bac, 0xb13d3796, 0xeb9e18f4, 0x61f0ebd8, + 0xa8bae1d3, 0xde79aba0, 0x7c66d3ab, 0x5fbc2ef1, 0xef4c8af7, 0x19db7b5d, + 0xc8f9a54b, 0xbc0270e1, 0xf183741b, 0x97e3843f, 0x7cd094b7, 0x17bd0573, + 0x1d71bd02, 0xa50258f0, 0x0b0cff44, 0xcfc6f9c3, 0x78e42423, 0x7ee74ba5, + 0xcb9ca7bc, 0x75fe679f, 0xd5bda03b, 0xfbd77eae, 0xef5f1726, 0xefb4fd29, + 0xb59556f7, 0xf654c31d, 0x306764cb, 0xd63c3b56, 0xf5fd066e, 0x80d76c55, + 0x0b87e4e5, 0xedfeddb1, 0xf0d360b3, 0x67db2bdc, 0xff219768, 0xd6d97619, + 0xe8c5f9b8, 0xae2e1ddb, 0x0abd296f, 0xc70bbb7d, 0x68eee67b, 0x5d267b42, + 0xdaefac4b, 0x746bfe05, 0xc079d18d, 0x7e6bf67e, 0xc76c4aed, 0x5d1eb7f5, + 0x73c8dfc9, 0xe86a7c18, 0xb077ee79, 0x8ff68d72, 0xaf0f1c2e, 0x9dfb8e1d, + 0xcf3a3c9e, 0x833b5fdb, 0x2c697c56, 0xdbc0cfd2, 0xfb665d4f, 0x0bf8f01c, + 0x245fc781, 0xe01563c4, 0xe3c262d1, 0xd8cbaecb, 0xcf599f85, 0xf5ef9857, + 0x837c0a74, 0xf62effbe, 0xefe67e77, 0xb18e308b, 0xd245f664, 0x9fb99ff7, + 0x627af332, 0xcfd0e1f8, 0xe74fd8f3, 0xf88abfcc, 0xfdc53b69, 0x935ef7ea, + 0xeac6718c, 0xc37a3d49, 0x3cc3edc6, 0xf7e783d2, 0xce38fd59, 0xfe3ca9f3, + 0x0ddf7e74, 0x71ce30c7, 0x6a78eeae, 0x3fcf7d2c, 0x8548a27f, 0x39efcef6, + 0x1e90a451, 0x81de9b0f, 0xebf4beae, 0xf7b380a2, 0xbf0f421e, 0xb43af8d9, + 0x29e3cec9, 0xb8b9e24f, 0xd2ad8cd1, 0x99df0853, 0xf40d9619, 0xd7edb85e, + 0x2bc6df03, 0xc57dc7e6, 0xc97ab200, 0xf500b59f, 0xf1271ce8, 0x8d9f278b, + 0x5a7a85c8, 0x2f8f16b4, 0xc3cffb33, 0x77e9df0c, 0xf7a512bc, 0xb66f5dfa, + 0xf24af6d3, 0x3e256cdb, 0x07a6df45, 0x7ed0dd93, 0x4a57874a, 0x43abf806, + 0xe7d07ac7, 0xfd732657, 0x8d977ddb, 0xe696bbde, 0x0f96dcfd, 0x8665b97c, + 0xef1f7fc2, 0xf414bcf8, 0xfce97643, 0x90cf033d, 0x7b263e1e, 0xf7815678, + 0xbcc262f6, 0xd011de9f, 0xd4874e75, 0x62dacb2c, 0xe415a7e8, 0xcde02862, + 0xf9f8b5e5, 0x2f44c3ef, 0xbbc43359, 0x3d6f729c, 0xcae7a887, 0xf7c49e8e, + 0xbe69c7c2, 0x7dc50c9f, 0x1f165197, 0xde23cfbd, 0xea364c55, 0xc65afb89, + 0xd4bd173d, 0x2bb61efc, 0xee2966b0, 0xb93f38b7, 0x4a9656d5, 0xbf98b7ef, + 0x9dc7778b, 0x8ef9cce3, 0x8adec480, 0x7af8bbe1, 0xbf0de5f1, 0xe3e75323, + 0xa36757d8, 0xd3afeef9, 0xc041437d, 0xa1e75fbe, 0x979d60f4, 0x8dd50ff2, + 0xe75a34a0, 0xec1d34a3, 0xd40f6e00, 0xe807bc6e, 0x7f1f7690, 0xa3e0dfd7, + 0xfbf8ea47, 0x1ab03ddc, 0x66ef8939, 0x2642ff77, 0xf9fcacbc, 0xcde7e258, + 0xd1f7a0a3, 0xb79abdfc, 0xa7ecec62, 0x632cfc56, 0xac8be80a, 0x31927e87, + 0xb369f805, 0x805dcfc4, 0xeec528bd, 0x02d7af27, 0xfe0a5f5e, 0x46d4c56e, + 0xabc22c1b, 0x6c5de0d5, 0xfd0b140c, 0x0f23ffd5, 0xe3c1cefe, 0x5ef81659, + 0x68d4dca2, 0xab8e1cfb, 0xafcf64d6, 0x5b31e717, 0xbdfbf126, 0x6ebdfe46, + 0x4a776fae, 0x13baf7c5, 0xe1be0ff0, 0x6cd4fe4f, 0x1983bce3, 0xbc014c9f, + 0xb91fce00, 0x5925e397, 0xf7c3eb1f, 0x36e47fd4, 0x8efe19ec, 0x8fdfd18c, + 0x246eefc4, 0xedc4591f, 0xbdff0f1f, 0xbf8d348b, 0xa982c477, 0xd6fe77a6, + 0xc8427689, 0xd7fbe348, 0xeed121bb, 0x1807a3b8, 0xefe003ee, 0xf3fac43a, + 0xeff84759, 0x7a116c50, 0xa81e8169, 0xe51af9c2, 0xf5f1ef8c, 0x0a5eb48c, + 0xda39e3d6, 0x411628d0, 0xc572c6f9, 0x4dfd2e50, 0xc6133bfe, 0x02bdda39, + 0x8defc6cf, 0x72e249fc, 0x9da44e79, 0x0aef3d22, 0x9ef84a3c, 0x0e7b34f7, + 0xcfbd57f0, 0x19b145ea, 0x5a23f477, 0x684febaf, 0x9fcf3c36, 0xed14f07e, + 0xed4bd667, 0xcfa29a1a, 0x0dbcefbb, 0x6af5a5e3, 0xef87166d, 0xeb78c26a, + 0xa7daae93, 0xde478ff8, 0x43f21b79, 0x005778a6, 0x66f50439, 0x6780ddab, + 0x6641fa35, 0x3f0e555a, 0x18d99eef, 0x76b846ca, 0x804bbe0e, 0xdfb40370, + 0x841fe29a, 0xa694e4fc, 0x05bf1e37, 0xf4fca361, 0x60a77c46, 0xfbe75b97, + 0x2e60ce35, 0xb03d29da, 0x062bb00e, 0x6ccc3856, 0x57e6353c, 0x3a23f47d, + 0x20e4bcef, 0xfd2b8f7f, 0xe70974e0, 0x3a7fbe99, 0x7e82ffe1, 0x4bd2bdd2, + 0x7ce1ef71, 0x7171e07d, 0x7dc61e83, 0xe0d6a9db, 0xf131dc0f, 0xc5b9ef9f, + 0xce64eb7a, 0x7e85fbd8, 0x3da7ae51, 0x2d574711, 0xee94ddfc, 0x47ce8ca5, + 0xf4ed660f, 0xf110dc7e, 0xf8b960fb, 0xae8c8fbe, 0x40d57fa1, 0x9b877ef8, + 0xdb0ef3ef, 0x54dafb9d, 0x69dfcbd6, 0xa8fdda85, 0xfce3d387, 0x5e849b98, + 0xfe2f55be, 0x4dd21938, 0xa5de8052, 0xf7e01d0a, 0x2cced938, 0xa10ea792, + 0x5b35ceb3, 0xd574eff8, 0x2afca40e, 0x5d5ddf71, 0xbf40d915, 0x4a9cf16f, + 0x738bdcfb, 0x3bd71923, 0x8321d77b, 0xf0a716ff, 0x29bee37c, 0xbd9c63c2, + 0xf64b8cfb, 0x73c1cc6f, 0x7e1eef13, 0x64f0e89d, 0xba0d2e72, 0x1684f5ba, + 0xabbed174, 0xbbd60b86, 0x97f59ef6, 0x76d5ddd6, 0x5ccdf25f, 0x6c7bd1af, + 0xdc2f9a3b, 0xf73b788e, 0x7bf4c5b0, 0xa47a461a, 0xf20e710e, 0x2a0b075e, + 0x554700f8, 0x680cff76, 0x711e9ce7, 0xf876f8e3, 0x4ba2d703, 0x8ffe4960, + 0xcfa0ecdb, 0xbafcf25a, 0xf659f405, 0x368d8d63, 0x4d16b7e0, 0x98fc891f, + 0x11a1bc9d, 0x5db17df9, 0xb8ce3f16, 0x50ff25e1, 0xe002ae71, 0x767e1b93, + 0x7e4fee1b, 0xbe64fb66, 0xd9aa0ed9, 0xc05df7c4, 0x0192913e, 0x1e904b2f, + 0x6d6c5b00, 0x1b39cf74, 0xcd7a4369, 0x93732f7c, 0x6864f5c4, 0x5f3f8f36, + 0xc5667ee9, 0x8e160e87, 0xc49fc3b1, 0xa3f81f45, 0x7ed10942, 0x6e87c554, + 0xf7b7fefa, 0x03dd3763, 0x938fdbed, 0x54fd1bbe, 0xf143f6f5, 0x8fd7aad9, + 0xe47e7f90, 0xf6cec35a, 0xfcb0bad3, 0xc65e7105, 0x76c4cfee, 0xa099549e, + 0x805bf80f, 0x9f7b7a67, 0xf40521c3, 0x7d1ed1d1, 0x4a71b5b4, 0x4637d236, + 0xe9304d3f, 0x7402bf2b, 0xe0249a3b, 0xe5c4aed0, 0xe7cae293, 0xc69ef019, + 0x8efb1329, 0x2f7b49e7, 0xcaf2836c, 0x303dac5f, 0x25a36f8e, 0xa354bdae, + 0x7b53efff, 0x749dff06, 0xdf097d1f, 0x129a3a79, 0x65f3c628, 0x1799b3dd, + 0x4a1be1e5, 0x4317ddb7, 0x1e6e9387, 0xf0f8a86f, 0x7bfe133a, 0xca685ef1, + 0x35e7533f, 0xdc2f5bed, 0xefba65fd, 0x4efc5273, 0xf10b0551, 0xe74f6c7b, + 0xffabf69b, 0x759f1c6f, 0x8cfdc51c, 0x783fca63, 0x7a4d231c, 0x051c77a0, + 0x3acffca6, 0x5665390e, 0x4fee2e69, 0x7bd0b4ad, 0x90961995, 0xb9ed0f2d, + 0xa7e42d07, 0xe78b69a0, 0x3670c0ce, 0xf7adfefd, 0xda0e75a0, 0x1d855ee7, + 0x9e515257, 0xddfc5efc, 0x0a03d0a7, 0x6f905bad, 0x5547af53, 0x77c7ecd8, + 0x460ad8af, 0x07e779ed, 0x1fd1b9ab, 0xd8b9bbf3, 0x158ace8f, 0xcfa69fc8, + 0x5bd075a1, 0x960d60f6, 0x7b4ceadb, 0xc9333576, 0xab2bd92b, 0xd073a5a5, + 0xf25efdbe, 0xdf688d1b, 0xfb712664, 0x346f6246, 0xd131bf1e, 0xfbaf2e77, + 0x36e37b1e, 0x5784678c, 0xafd16bb1, 0x91c3db0b, 0xd5874823, 0x73c7b24e, + 0xe137091f, 0x16b5e5fc, 0x3946ddfa, 0x1b73bc25, 0xf70e8fc2, 0x4e11bda1, + 0x7bb5fae1, 0x81ec93a5, 0x22a17535, 0xbea5977c, 0xdb03af99, 0xf8ea261a, + 0x4e0d0b7b, 0x577e0ac0, 0x7bc2ef6b, 0xec7a7f25, 0x8ddb46a3, 0x4d7cc7a8, + 0x7b0e7403, 0x635d70b2, 0xe231b679, 0xe173ac3b, 0xba206c95, 0xff9c0692, + 0x4852b017, 0x76447ccf, 0x46738359, 0x5ff5e325, 0x2de0fbc2, 0x7f887a3d, + 0x20239fc7, 0x7a8c013c, 0xfbd95e50, 0x7bcc0a7d, 0x9eb9d7fb, 0x47da0d7a, + 0x13e60d3b, 0x9861bb22, 0xa7b1f342, 0xb164dff0, 0xfda3cc8f, 0xc39db0c8, + 0x77f923dd, 0x1b491f63, 0x247da166, 0x3d87c0bb, 0x3ed7978b, 0x80517ccf, + 0xe2939735, 0x59efc620, 0xc7f1993a, 0x62a5e3cf, 0xdf09259f, 0x47e18841, + 0xda32c35b, 0x4f7f8f44, 0x64fdfe39, 0xa2e6f985, 0xe6eb25dd, 0xc5938ffc, + 0xff2a52be, 0x4b7cc9fd, 0xafe7f690, 0xd3b22161, 0xbd289a40, 0x7f29458e, + 0x78276b14, 0xf9a57a34, 0x2bcb3d78, 0x64f9942e, 0xee3327b4, 0x415be232, + 0x5d75c759, 0xf8a3f617, 0xe9b4dadd, 0xfe9f69f3, 0x0a1a03ff, 0x8000e598, + 0x00008000, 0x00088b1f, 0x00000000, 0x7dbdff00, 0xd5947c09, 0x66fdf8b5, + 0x324ccc9f, 0x10926649, 0x04084cb2, 0x90938094, 0x49945044, 0xca5c5842, + 0x6c80b104, 0x6c806ac3, 0x7d58b52a, 0xd3040cbf, 0xac1abc80, 0x40ed0dc5, + 0x368ac5b1, 0xa351b468, 0x59f5561d, 0x2b148ffb, 0x4aa768ad, 0xb6293d95, + 0xd6d5f67d, 0xf7b9ce77, 0x32fbe666, 0x9fef6e03, 0xbbf71f2e, 0xd9cbbbf7, + 0xdee739ef, 0xe80d4e49, 0xb58ce59d, 0x5bdf87f9, 0xfeec61e3, 0x027b6fda, + 0x19b98cc5, 0xf3c275f3, 0xe9cd857e, 0x76c633b4, 0x0cb1d10d, 0x185996c6, + 0x54e63dfd, 0x4e6311a8, 0x6c60ab1d, 0x09fe138d, 0x6ce6b3df, 0xcbcacede, + 0x8c4c2b7d, 0x5358c65d, 0xa0533c26, 0x8a64b1dc, 0xf9afde11, 0x1a66557d, + 0xc702bff4, 0x3c57fe81, 0x74119958, 0xe77b77c0, 0x2cf03c9a, 0xff501677, + 0x35afefcb, 0xfd40c605, 0xbe4d8bfd, 0x2f6fde62, 0x4de0c7ce, 0xdbbe5061, + 0x50994dea, 0x9bff58c6, 0x5e03b67a, 0x937f8e7f, 0xb5f73f06, 0xc66640c0, + 0x9858b40e, 0xa163246f, 0x2c5591e4, 0xe63a9e19, 0xed8c6963, 0x7b367a37, + 0xc6cfd05d, 0x27ec5ee1, 0xa433e494, 0xab743942, 0xe50adbc7, 0xae9eac87, + 0x8fffac5e, 0x0f0eef24, 0x958d377d, 0x3b27fae2, 0x98c51a3f, 0xf2a1fbe2, + 0xf8f12db9, 0xed866130, 0x3d73eff0, 0x16ca978c, 0xf5d1edf9, 0x9d3a4bef, + 0x0a777087, 0x55b46eb8, 0xe9e93b96, 0xb2f3e273, 0x2a78c0d4, 0x9e1116d7, + 0x2cb3b55c, 0x1cb19ed8, 0x68b647e7, 0x0b1d2ebf, 0xf1da7f60, 0xfd0299ff, + 0xc593e396, 0xb3c49bc5, 0x6efc8bc4, 0x74cbe28d, 0x575e2716, 0x167aa7d3, + 0x1b298f4a, 0x3b4e4dfa, 0xfbd137be, 0x504b4e73, 0xca1e6307, 0x257fdc0a, + 0xeb2a74a0, 0xa7983035, 0x2c79293e, 0x35ab45d2, 0xa73e0779, 0x23fb1966, + 0xc73eb682, 0xc000b3ff, 0x18537e60, 0xc99bdf9f, 0x92535e53, 0x7d20fbf1, + 0x65dedd3f, 0x5fa0c360, 0x8875dd47, 0x98586bc7, 0x07e76bde, 0xdb107efd, + 0xba8f74ef, 0x7528ed7c, 0xbaaf7af9, 0xe09058cc, 0x734b4f75, 0xb46371c5, + 0x9b187bdf, 0x2e0719d6, 0x22b005df, 0xb2ef579c, 0x8a8f8e86, 0x99d0d3f6, + 0x75372aaa, 0x8f1d090f, 0xfe356719, 0x0ff20863, 0xaf3d775f, 0xe0730e62, + 0x06f788bb, 0xfae13116, 0x7e4d0280, 0x959b07e0, 0xe15f11f9, 0x031f56bd, + 0x9bb26cba, 0xc5015bb6, 0xcab53d4d, 0x736f7862, 0x31f23d40, 0x3369e196, + 0xb940f6f2, 0xf3f83f34, 0xb71be031, 0x26fb6b3f, 0xab29f885, 0x9f97cc76, + 0xeffc2377, 0x469fe02e, 0xf1087b03, 0x7a8eb033, 0x74464758, 0xef6d671d, + 0xad1d3057, 0x8e5c9747, 0x4a626174, 0x5f3d744a, 0xd4cb5e19, 0xdfba6af0, + 0x465dd41e, 0x002928e3, 0x5d0ec6b7, 0x9d6504d0, 0xfc84d7a5, 0x79d20f72, + 0x3b95bc1c, 0xf1687f39, 0x1cf119bc, 0xb1f69f87, 0x97885dca, 0x27e72772, + 0x2a7bdafb, 0xf9438f8e, 0x801256d9, 0x970376f6, 0xaff8069f, 0xc584e419, + 0xea65653f, 0xcc9a6858, 0x64e9fbf9, 0x2ab73d0f, 0x9af1057e, 0xb015f3a1, + 0x801ec642, 0x20b659b1, 0x03ef583c, 0xfd9e5956, 0xc8c5c9fd, 0xcca3de2f, + 0xc867f1c9, 0xaf2a7282, 0xf9793a7f, 0xc3ca20b4, 0xf692f281, 0x8f9444e0, + 0x3da8bcb2, 0x0bed0398, 0xf002b658, 0x3c08eb38, 0xe0387881, 0x03d61ad8, + 0x673eb4fd, 0x0e9198f6, 0x07efbd5c, 0x9e322e80, 0x504db337, 0x48bdcd6c, + 0xfb4d2cfb, 0xfc85d602, 0x0e7db09e, 0xdb4577b4, 0x9210c0b3, 0x6e22b743, + 0x46ad2401, 0xc3f39f8e, 0x71a9293d, 0xfa9f2ee0, 0x31680107, 0xe0d5a772, + 0x69dca0b5, 0xb923efb5, 0x9cbb9518, 0x99dfa3de, 0x5e81dfd4, 0xdc512360, + 0xc3c43334, 0xe627ec06, 0xebd1bd7b, 0x43f57ec4, 0xbc0bdb4a, 0xef53198c, + 0x3900669f, 0x658806d6, 0xb2763057, 0x73824ee3, 0x1f9f44db, 0x69d5b0f9, + 0x9d61eb60, 0xec40eceb, 0x2cd69700, 0x6dd70843, 0xc2b20532, 0x0d7ed105, + 0xe3cd0311, 0xe9187dbc, 0x34eb44b1, 0x354c0a7d, 0xcf61d70e, 0xfff3958a, + 0xa9d9e377, 0xb63c769d, 0x017b657f, 0xea71678c, 0x93c056bc, 0x1f6763d9, + 0xb6a3f0c6, 0x8683c31f, 0xdb68fdb8, 0xc427f849, 0x8c9231b3, 0xa59738f8, + 0x338a169b, 0x9ca991ef, 0xfcb2be9f, 0x5391af98, 0x6145a3ee, 0x24895efc, + 0x1c901417, 0xf40a9919, 0xff38e8d3, 0xe4879f1b, 0xc1df8655, 0x6dc713d9, + 0x04b2aacb, 0xfb32ae48, 0x7d7fb247, 0x7093fa62, 0x560ebd31, 0x9beb0e85, + 0x3177f619, 0x2f141838, 0x0c399be1, 0xc182f1ec, 0xa76d8cf5, 0x47b40cf9, + 0xff59887a, 0xd13f06dd, 0xa0aaf1b1, 0x5c700fc5, 0x896259e7, 0xe0ddb940, + 0xed00b7b9, 0x7ec1d7a7, 0x667ae0f2, 0x3e47f8aa, 0xc4dd8137, 0x959a7ec0, + 0x47ad53aa, 0xd812933e, 0xfc0a771d, 0xd73bda6c, 0xfa01795f, 0x47e67101, + 0x334a4dfa, 0x191f5138, 0x36be7c8d, 0x7cce37ec, 0xe089bf64, 0x2b5ecf75, + 0xd8a583f1, 0xa8bd4212, 0xe0cdaf1d, 0xc1b4f9a7, 0xce58827c, 0x39b7e3e1, + 0xd01dce0d, 0x892a36de, 0x67e06259, 0xe08b321a, 0x62e5de7f, 0x736fa87a, + 0x59c63d01, 0x54d384af, 0xa1d7d384, 0x2e8680cb, 0x08aefc47, 0x2e8625e9, + 0x1eea97bf, 0x5153974c, 0xf9f397fe, 0xfcec4b33, 0xc3c4a787, 0xd4fa20eb, + 0x44c54dd0, 0xcbbe43e6, 0x5876e784, 0xd35d582f, 0x3ce314f6, 0xcc0272a0, + 0x399db66f, 0xd37bde41, 0x9f21372b, 0x33eef454, 0x2e87e431, 0x5ea3ad37, + 0xf71daf7c, 0xff7f021f, 0x33d27548, 0xc9efa8e5, 0xaedf0049, 0x028f24de, + 0xdc695d55, 0xf77ed63e, 0xec22aa62, 0x34fe0e97, 0xfda2c644, 0xcc57db20, + 0xf01dbe67, 0xdac4983c, 0x7f77a02d, 0x29f72a92, 0x01a7f1f7, 0x99c61718, + 0x1de8d2f1, 0xf588f764, 0x80b5041f, 0x223233ed, 0xd7fd1563, 0x582edbc0, + 0x1ade0c7d, 0xb422912c, 0x14c7ff53, 0x357c44e8, 0x60648d1d, 0x29f0ebb9, + 0xadddf7b2, 0x7feb0edc, 0xba4216c1, 0x759f8c1b, 0x4ffabf34, 0xb8e0b287, + 0x37ab78c1, 0xaedec984, 0xea8f34ff, 0x4b41dd61, 0x067eb45a, 0xdc78e2d0, + 0x9c3858a7, 0xf0f13e10, 0xaf4143f1, 0x8fc01f12, 0x1f021da3, 0x840fa708, + 0x77803ebd, 0xf70da9b7, 0xfc2c6773, 0xe28df33d, 0xc7a109fb, 0x0bca483f, + 0x3e77b031, 0x35fb9228, 0xdeac464f, 0xeefab7a9, 0x66eb039d, 0xe3d9e96f, + 0x6d5a58f0, 0x707b476f, 0xa297d9a9, 0xbfa5fbc0, 0x0aeb2bd5, 0x07c48408, + 0xcf3c05cb, 0x88edef30, 0xab66e0bf, 0x9fc271f3, 0xb0531f7a, 0x9bdc72b5, + 0x6ef2fdf0, 0x9f4d17bd, 0x20f6d525, 0x5bd15bf6, 0xde03a4f5, 0x79b768af, + 0x74bbf418, 0x3d23f792, 0xd5af738e, 0xf700beb3, 0x872ac33d, 0x7e6bbf40, + 0x7944e054, 0xcfeb5b60, 0x140178b2, 0xdba619f7, 0x2b771e00, 0x252b178b, + 0x6cfbe280, 0x67800d1b, 0x4faabfc3, 0xf43ca15b, 0x968d9cbe, 0x425ec65c, + 0x5a768e59, 0xee3a7730, 0x538e7f53, 0x4ca682bb, 0x5fcfdc76, 0xf17289d3, + 0x19c3c9c6, 0xa5ddd4bb, 0xe79cc3b3, 0xb46f15a4, 0x6919f8c0, 0x8c1d12be, + 0x64ad2cb7, 0xe4b7f63a, 0x7f7f31de, 0xd3dbea10, 0x7b474f26, 0xbe26f003, + 0x1abd3e9f, 0x898ac854, 0x2b2dfcb2, 0x16365d96, 0x83c71bb5, 0x1d161cfc, + 0xaec4ed1f, 0x399e5934, 0xfb7c327d, 0xb5735541, 0x93dffa01, 0xf1636736, + 0x7e5d8c25, 0x07d3a57f, 0x769f3fe3, 0xcbb7ad13, 0xdfcfdb24, 0x5df683e8, + 0x08dfb02c, 0xb7de6ff5, 0x0005ba7c, 0x97f74aeb, 0xe9fd6138, 0x4e367b96, + 0xf06beabb, 0xbb4528cb, 0xb9a771df, 0x210e6f89, 0xf6d6f348, 0x157eb89b, + 0xe9c39efc, 0x0a3ca078, 0x72988eca, 0xad772f16, 0xde3f2f8f, 0xabfae749, + 0x7d7e292b, 0x2f971a69, 0x0eb0ef00, 0x16dbb3e9, 0x9510511a, 0x964fc027, + 0x5b5fc4f1, 0x5f009f38, 0x1f1074cd, 0xcbefedc7, 0x9dc02ff2, 0xf832e9fa, + 0x970fb86c, 0xcc180d72, 0x4c9ce386, 0x75e4a8f5, 0x9212ef45, 0x0ba62fb7, + 0xf870f5be, 0x72d5abb8, 0x8b7a5985, 0xbbf22e10, 0x059d6219, 0xd13f81a3, + 0x40f3008f, 0x85635cfe, 0x01fa3efd, 0xb26654f6, 0xf5dfd80b, 0xf6aa569f, + 0x4c75d1fd, 0xfa83f7a6, 0xa23cfe85, 0x17f16f7f, 0x45ea5781, 0xfaa2e5e0, + 0xda33ad8b, 0x314fda9f, 0xafee3fb8, 0x4c57a418, 0xbb79e7f1, 0xbf8013a4, + 0xadae462e, 0xa415f210, 0xcfcbed16, 0x8ec97f3d, 0xe3b1054d, 0x67f4e7ae, + 0xf3077d00, 0x457c820e, 0xf0615639, 0x2bed8b5d, 0x419cd37a, 0x836de885, + 0xd20337a0, 0x5773c49b, 0xad25735a, 0xdce28b77, 0xfc0ec711, 0xefae348f, + 0x1f143a2a, 0xf39927da, 0x31c5fa03, 0x1ff293f3, 0xfd12effa, 0x7e7a7197, + 0x179e8074, 0xff08ff20, 0x7d02f306, 0xff3c198f, 0x319d844f, 0xb39ebfa0, + 0x123e7086, 0xfe955f6e, 0x9f50fda5, 0xd3254f50, 0x868f333c, 0x63a4c193, + 0xa1f82dff, 0xe4c3f3ab, 0x755f512b, 0xe1e299eb, 0x51b946eb, 0xf064e521, + 0x86aad7f5, 0x95131d93, 0x67b21ecb, 0x5b0cdca4, 0x1bf6d12c, 0x6d3ebcb6, + 0x3355ca03, 0xe1e61fe0, 0x2f1483d2, 0x7763ce8d, 0xe397d71a, 0xcf17cc03, + 0xd5317c0e, 0xad08e521, 0xd5b5a1e3, 0xbf5c43ec, 0x23e3afd0, 0x3ccbf241, + 0x6038e024, 0x3dfd0887, 0x9a791cc3, 0xf4d47bfb, 0xa760cb28, 0xa30aea34, + 0xccfd63fd, 0x243fba18, 0x9f8b40e8, 0x009f2baf, 0x8384410e, 0xfbc3cd31, + 0xf682b287, 0x17f40185, 0xad6cffc0, 0x20a9bbdd, 0x2e76de66, 0x1d7add8f, + 0xe1176397, 0xaf3a570b, 0x41c17fef, 0x07851cfc, 0xd2fa63b7, 0xaedefcb8, + 0xdfb87563, 0x3e03a838, 0xf3b5fa41, 0x7e7b9e75, 0x67fbf508, 0x929beed1, + 0x304ddbcb, 0xb26be71e, 0x1c5e1b1f, 0x7f3d5dba, 0x7494dfde, 0xa38a970e, + 0x63b412be, 0x5eedf846, 0xf4542fdc, 0x8467dcce, 0xe28f5172, 0xce92d6c4, + 0x9f393a8b, 0xb8097502, 0xb63bbebc, 0x39a77fdf, 0x1475d1be, 0x3c62651d, + 0x7db2e7ce, 0xe39dba4a, 0x4667d613, 0x72d41a78, 0xb9bf3e54, 0x19f7f879, + 0x00f5bd61, 0x12db140f, 0x8b9d5d6e, 0x8f915bd7, 0xf22f328f, 0xc5ceb9f1, + 0xd78831ba, 0x77d91907, 0x7ee1f203, 0x8f690ebe, 0x22765d02, 0xe7a4165d, + 0x8e233f52, 0x50c56cfa, 0x26ed023f, 0xd3a9bef8, 0x857dc211, 0x25303d37, + 0xab39d71d, 0xc6fd1abf, 0x75e6b68d, 0x03f798d6, 0x3da1bbed, 0x3f4071d1, + 0x08b9e706, 0xe89e76f6, 0x1069a07a, 0x260d7afd, 0x2a42d3e0, 0x5d6e1187, + 0x7fbede26, 0x4478a301, 0x84dfbea3, 0xafbfa0f5, 0xac3cfa25, 0xe2fc434b, + 0xe6ed09be, 0x473fbd7a, 0xa67d7dc1, 0x007a8bd9, 0xef4421f6, 0x60ccad07, + 0x855ffe85, 0x1ae9ca27, 0x117b2dfd, 0x0a85355e, 0x7ee423c5, 0xee16e51f, + 0xb24c669b, 0xcfb23d11, 0x7e8e1b6e, 0xe38db75c, 0x88b1fa09, 0xd2962c7e, + 0xbffdff28, 0xff684bbc, 0x41dbf523, 0x0e7ea145, 0x477a355e, 0x08becc6b, + 0x7ff943fb, 0xb9cda950, 0xec5fe905, 0x743ec8eb, 0xda2ef545, 0x58f6a52b, + 0xfcc507bc, 0x47487922, 0xda28f6b1, 0x6cf603a7, 0x538d89f0, 0x3e5f2e41, + 0x73ac33ad, 0x9eed1522, 0xafe85dfe, 0x2b59ec06, 0xd056a1c0, 0xa082c1c5, + 0x37e7193e, 0xaf0fd602, 0x8a05250e, 0x71d1ed9b, 0x209f8432, 0x10fdc4c3, + 0x79fc4919, 0xe9eb9d3a, 0xf9fc5cbb, 0x24667886, 0x7c2bf7c7, 0x99c7ea24, + 0x54d8fcb9, 0xb6bfe5c9, 0xefd11add, 0x8b7bb657, 0x1efed515, 0xe935deec, + 0x7135eedc, 0x8bf710bf, 0x83da247f, 0x8a78439d, 0xf27e55da, 0xf43b49e3, + 0x5237bd6f, 0x7fc921b9, 0x7e89f92f, 0x38aafb07, 0x9890c9fb, 0x2016c9f7, + 0x7d8c919c, 0xc205e2dc, 0x8b78ec65, 0xef2bca85, 0xe414d1fa, 0xd42c55af, + 0x6abafc86, 0x63141ea7, 0xeecbfe74, 0xf60a7bba, 0x30a42cbf, 0x32fb828f, + 0x106bb53f, 0xd0d9bff0, 0xe7854a6c, 0xea9b0ef2, 0xe36dbabb, 0x2f296554, + 0x59fdbabe, 0x723142cd, 0xa65f2a26, 0xbf6d7bd0, 0x76b59e92, 0x1e2d07e8, + 0x67ecb75a, 0x68235dc9, 0x52fdb2fd, 0x2df5a5e6, 0xcf542f6d, 0x9274c1ff, + 0x27e6893b, 0xceed12e9, 0x9a79dc60, 0x003fef54, 0x31cd07f8, 0x9c3138f3, + 0xf49df1e6, 0x45d23740, 0x16361e74, 0xc70b151c, 0x608fce89, 0x64f60cad, + 0x3a0477e8, 0xdf485e09, 0xdb9d26ff, 0xee1d5f05, 0xfdd813a3, 0xdabfff63, + 0xb9f315fd, 0x0a1d659c, 0x3974811b, 0xfd876d5f, 0x3959f511, 0x0e426d3e, + 0x28eca875, 0x98b16bf4, 0xf9e0ddfd, 0x2eefa66c, 0x05fbcc9f, 0xb0b7643b, + 0xbdb98b97, 0xbd80c8fc, 0xff662f3c, 0x52997689, 0x7f8cf288, 0x53f428d7, + 0x26c3a9c1, 0xca3b8c0f, 0x42d7edc5, 0x1d3fafb7, 0x26b66fda, 0xca3f458f, + 0x085e6b66, 0xf8c0d1f5, 0x6ece5cdd, 0xbbc40e36, 0xdb9e1133, 0xab5b75ff, + 0x07bbf101, 0x83907fec, 0x601e8f95, 0x74f91891, 0xb7c55afd, 0x6ff0f00c, + 0x2f7ae781, 0xbdeb0fb7, 0xe870d361, 0xcf9ebb27, 0xaf73a72b, 0x2ef98862, + 0xb3b78ea7, 0xbf2a8cb8, 0x939443aa, 0xe70e5c5c, 0xe19585d4, 0xdb7b2ed0, + 0xfd80c54e, 0x2fa42a75, 0x51019bb3, 0x2ecc7031, 0xf5cd76e3, 0xa595db65, + 0xb43851c5, 0x9d8b6aeb, 0x0cf6b780, 0x4cf5179b, 0xee903b83, 0x0b1e79c2, + 0x978c1187, 0xa035eb1f, 0xf6e2dedd, 0x84bdf0b9, 0xccef4783, 0x3b6a3d46, + 0x31d9e7c6, 0xfae62fb0, 0x64b22285, 0x7690ef47, 0xdb8c6be9, 0x32a7a485, + 0x7d228fd6, 0x9197e727, 0x0644f426, 0xa7633c0b, 0xcf14edf6, 0x78c71e47, + 0x1da2fad6, 0xf4e58edc, 0xdfe85357, 0x326bef89, 0x856d292f, 0xc39b85f7, + 0xefb82586, 0x0fdf16de, 0x08f42a5c, 0xec4c63ac, 0x2f262e3a, 0x02633b64, + 0x13e484ff, 0xfbf8b4db, 0x407ec60e, 0xba8f95f5, 0xd6f9c26e, 0x8c31306f, + 0xb7f84907, 0x9c3efdb8, 0x76e7764f, 0xfd236105, 0xe95c727a, 0xe47ac3b7, + 0x924c0fdb, 0x25fd399f, 0xf56b0b94, 0x72b165be, 0xf089836e, 0xe8e6ed24, + 0x3f9db8fc, 0xebf5c5cf, 0x4cff6ed3, 0xf7634f9c, 0xacf3f216, 0x5327f9dc, + 0x96b53f3c, 0x47062e2f, 0x77f38ea5, 0xc50b1cfd, 0x351f2ac3, 0xdeac1d10, + 0xd1990a60, 0x87bddafe, 0x62ee77fb, 0xf51f945e, 0x65947b9d, 0xddeaee30, + 0x31e5947b, 0x1f5a1d70, 0x233e7052, 0xb90f921d, 0x3dd2d35c, 0x5ed18ffa, + 0xf6e56439, 0x7b4a99db, 0x67a6e310, 0x6c7a818c, 0xcd886677, 0xe2882c1b, + 0x533dd5e1, 0xf1c19f29, 0xcf8c398c, 0x2c8edd76, 0xbf6bb40b, 0xfa45e4d4, + 0xbe07716a, 0xa4f802eb, 0xf85dfc19, 0xe1cbaa7d, 0x7adf075d, 0xe514accc, + 0xc38517e0, 0xb93a1ae5, 0x3fce2efc, 0x0439084f, 0x3fc8a57f, 0x9f7c5c5b, + 0xed147601, 0xf9190eb3, 0x7c619e3a, 0x7dd3a7be, 0xafc7446d, 0xd9b8d1a5, + 0xfd0561f5, 0x9ea705d8, 0xfb26b921, 0x6f99d28f, 0x8bffce33, 0x84d3b3cf, + 0xc85ab6f4, 0x7747caa1, 0xccc61f2a, 0x9e9711fb, 0x06ef65da, 0xfd53b4ba, + 0x6a2ee9de, 0x7c1ecccf, 0xab77d0af, 0x8c797ea1, 0x88eb91bc, 0xe0767723, + 0x7ac7ec7a, 0x13b9700f, 0x31467ee6, 0x9f3e2d5f, 0xfb87f946, 0xf4db503b, + 0xe51c14de, 0x0d0efe81, 0xa4fea24b, 0xedf2d01c, 0x51ce82d3, 0xe4ecea5e, + 0x527b25a7, 0x2bb64fce, 0x833d5774, 0x5a7cbaf0, 0x61a1c12f, 0x53d6819b, + 0xbf0ff263, 0xc21f8625, 0xd877ee2e, 0x137dfb37, 0x7ffbfdca, 0x63d116f9, + 0x79428743, 0x2de3ac44, 0x27e88dd3, 0x47a13e08, 0x6e5af2fb, 0xcfadb02a, + 0xba7845bd, 0xe5cb8bb6, 0x863dae86, 0x9d28f6a5, 0xb7da9c16, 0xa1ace910, + 0x3f70ccd3, 0x0877f404, 0x53a5a3e7, 0x77291f09, 0xe413e113, 0x0b07f113, + 0xc2bf489a, 0xfd00aa3e, 0x9f6e5213, 0x66587e16, 0x143fefe7, 0x4fd28a70, + 0x254ba8e0, 0x17c4ad77, 0xf74aa705, 0xedff7059, 0xefbfc855, 0x8cf0e6aa, + 0x98ed579d, 0x9dd372c4, 0x2186f42e, 0x11d33792, 0xf203ef95, 0x91ff7c5f, + 0x0fbc37c0, 0x186cf7f3, 0xfe720dda, 0xb9a5fc5a, 0x438fbcb9, 0xf4f17d67, + 0x2407b49b, 0x9b6cfcdd, 0xfe47a541, 0x1c1132ed, 0x5032edff, 0x792b5bbf, + 0x91ab631c, 0xebadb3eb, 0x2794212c, 0xf29dceaf, 0xdaf2029a, 0x8c299371, + 0x25ba83cf, 0x307f58f5, 0xaedf8f9b, 0xe58addd3, 0xd676f5f6, 0x7df5784a, + 0x49fa22ee, 0x723e5c66, 0xb3ff7879, 0x07d59e5c, 0xff0621ed, 0x5acc0fac, + 0x9708fb46, 0x66f18bd5, 0xba603816, 0xae9831d1, 0xa5eccf3c, 0x3b6bbd7c, + 0x3c49ff39, 0xfa253c80, 0xe120fc92, 0x4867851a, 0x1f124fc5, 0x5d8fd1a7, + 0x6be5e9ce, 0x54ed05e5, 0xc7fee1c7, 0xcbb8f014, 0xf3015c79, 0xf28e2b0f, + 0xfa2242b8, 0x8df6bd5d, 0x4760e3ec, 0x9d7acaad, 0x616f929e, 0xefe2ab1f, + 0x2eef0231, 0x7b732cf1, 0x9d65f7f8, 0x8fab97c4, 0xdb3f1337, 0x66b971a7, + 0xc796a63f, 0x58a7fd8c, 0x6b37b72f, 0x30539d6c, 0xc7e6a65f, 0xf9f7138a, + 0xcde6e489, 0xfaefcf0a, 0x64fedb78, 0x9f62f7cc, 0x718ff581, 0x6f5f2b14, + 0x89cb9b8d, 0xe000bb33, 0xa6cdef44, 0x17f5d90b, 0x8f858feb, 0xd5cf0828, + 0x7667d602, 0x33f84f57, 0xa577affa, 0x92c04778, 0xe1beef4f, 0xbcc33f8e, + 0xe49ceccf, 0xaba5b745, 0xd3f44fd5, 0x717ab6ef, 0x7be2021f, 0xd709fa1a, + 0xbe4fee75, 0xf93bbe12, 0x28a565e4, 0x39bbe7b7, 0x567a9fdf, 0xb2e116bf, + 0xb8bf67fe, 0x8757eb1a, 0x8e337494, 0xffc7ebb3, 0xea7e86ce, 0x9f913676, + 0x5fc9f5a8, 0x416f3099, 0xdfceda17, 0x62714aef, 0xd93f93bb, 0xbbc23572, + 0xea95b3b5, 0x3b64fd4f, 0xecfdf795, 0x0ffcaf17, 0xc9fc6ffa, 0xea776c5e, + 0x9784bdd9, 0xf28180fa, 0xf5d112b3, 0xb97b3dd6, 0x8f3d44bc, 0xcb87307c, + 0x92d74931, 0x6cfe4f7e, 0xbd5884d1, 0x0bb7df21, 0x127b4e3f, 0x05a723d7, + 0xe2aeaeff, 0x4fd3ce71, 0xfed0e759, 0xc22914c0, 0x317d72fd, 0x02558ba7, + 0xb79df51e, 0xf4ed1b18, 0x3bf3f53d, 0x8e7c7be0, 0x3cc4fa01, 0xf3b56852, + 0x7a0bca73, 0xed0cf09a, 0x679fa3c6, 0x293ffcf6, 0x715b1f38, 0xcd3571b3, + 0x0f5e49f3, 0xafad8eab, 0xbfdf1358, 0x176dc1be, 0x83e70176, 0x1cdaaeec, + 0xb301c90f, 0x3d8c4477, 0x68175d9c, 0x35f0f8c5, 0x3d5e026b, 0x13c5f1e0, + 0x850ca787, 0x2946cff2, 0x7aff08e3, 0xa0b9eb85, 0x4069c69d, 0xd1f037ff, + 0x649f050f, 0x0ae19938, 0x8fdc0392, 0x06606355, 0xfaa7f93b, 0xb4344e49, + 0x53b83d0b, 0xfd2db7f8, 0xe8383779, 0x3115fb3b, 0xcef86df1, 0x7f72a76e, + 0x2f31b7de, 0x0e705a72, 0x898f1de9, 0xca4a7be6, 0xbb1c1603, 0xdf944c60, + 0x9422feb4, 0xb40eb537, 0x709f2b47, 0xe94fa3bb, 0xe9c2d247, 0x999f5143, + 0xdb27a3e1, 0x01fcc5f5, 0x5bff028d, 0x8a0ac895, 0xe3c0bf63, 0x47578dd8, + 0xcae5628a, 0xff7cdd1f, 0xcdd04e76, 0xbd3817b9, 0x68e9d41c, 0xc7707f7f, + 0xcaadede8, 0xd4a6fd60, 0x8d5f09f9, 0xf76e2f80, 0x768c39ae, 0xf31d4352, + 0x7635bf22, 0xbb067a09, 0xd8d3e115, 0xfb0cbb5d, 0x4e9aea1b, 0x2bb06a7e, + 0x72850ca6, 0x472b3d63, 0x56dec97e, 0x95e202f5, 0x767df375, 0xa3d81d76, + 0x83577788, 0x7a805f57, 0xd7addb8b, 0xefa0aa8c, 0x287ae6b7, 0x61ac153e, + 0x68adaeb4, 0x1abea2ff, 0xbfdb9a32, 0x37640d81, 0xf9124f31, 0x70c0593b, + 0x0c6fb62b, 0x8f9467ce, 0x17c3e5a1, 0x1be3b214, 0x1590b643, 0x9bb6bfbe, + 0xdd8d2fdb, 0x4acf0f9c, 0xb1a7c8f8, 0xd1f92177, 0x60b3339f, 0xd5f31f8c, + 0x3d72a617, 0xf499bcf9, 0x1f16e9e4, 0xba0470fb, 0x78aa3d33, 0x05ddeaea, + 0xbe6f1e3a, 0x58f38cc1, 0x61d1e62a, 0x553f72e4, 0xcdc2f1c8, 0x05671e7c, + 0x7c159f3d, 0x526dd67b, 0x419c1bfb, 0x159c37f2, 0x279fe1e3, 0x1829e843, + 0x985961ba, 0x377ebce8, 0xf665cfef, 0x4316dc95, 0xd1bed207, 0x433d93d2, + 0x01e57611, 0xf6418505, 0x3e2a99b6, 0x858ea6bd, 0xd79d609b, 0x2785d36c, + 0xe7bb258d, 0xebc79226, 0x9e5e2c4c, 0xeb833389, 0x7f749a8b, 0x6ba3fa09, + 0xb1bddb66, 0x249ae07e, 0x768ace9f, 0x3ff4a958, 0xde30cbfb, 0xe1c32273, + 0x6665bc45, 0x4bdae278, 0xdccff783, 0x23aebb8e, 0x0ff71638, 0x734975a1, + 0xda091e28, 0x4ed3fc89, 0xdff71ef8, 0x09fcae3b, 0xd2b77fdf, 0xf8c074bc, + 0xe8657e62, 0xfa1775f7, 0xe2fd70d7, 0xcf5bc6f0, 0x27696ed3, 0x7dc12c2f, + 0x3b2ce35e, 0x2ffdc3f1, 0xbd384b29, 0xbe432281, 0x60fe700b, 0x7b8f1fc0, + 0x0ec91e88, 0x87f66c6a, 0xe723d3e2, 0x8bb04697, 0xd2d64ed0, 0xa397dca3, + 0x43b589bc, 0xfe4a7f25, 0xfe8fb947, 0x92b74930, 0x9f28bfff, 0x3e72339f, + 0x47eb073c, 0xefa01f3a, 0x6f7d3917, 0x087c075a, 0x0f809bf5, 0xb6e4635b, + 0x41e2df76, 0xe7b28726, 0xf610b627, 0x8365e523, 0x81935fdb, 0x3af1ddf3, + 0xf94abaa5, 0xc6e2f8d6, 0x4dd90ba2, 0xcfef0316, 0x4b1afc02, 0x755b183f, + 0x8833d294, 0x36b6de72, 0x5162ffbe, 0xe5ebfd86, 0x27ce0dcd, 0x1ee19459, + 0x81924f9c, 0xc4f5033a, 0xed085b0e, 0xd207e95b, 0x0c9ae7ce, 0x6867ee45, + 0xc7fed2be, 0xbfb601f8, 0x5bec4333, 0x820dbb44, 0x15f6632f, 0x5d1e0fc4, + 0xe7944fe0, 0xc89f409d, 0xbf29beef, 0xea471c94, 0xc8fd2d35, 0xa7ae07f8, + 0xbb7138b6, 0x7f62bd8e, 0x87e7a1a5, 0x02abbc85, 0x7775c0de, 0x237fc318, + 0xc1c5bc7e, 0xc8200f28, 0x4718e97c, 0xe724657b, 0x45fd51a3, 0x667f7df8, + 0x95d218e0, 0x7be2abf4, 0x16ad2f8c, 0xbbd5c771, 0xf3d8a18c, 0x8c99f517, + 0x5873e9c6, 0x13e07a82, 0x61e0565d, 0xc5583efc, 0x33d461bc, 0x3c52b3df, + 0x72d40c08, 0x2c4d3794, 0x3e708c92, 0x8c781a98, 0x5bdf57e8, 0xb3c37e84, + 0xbe2c644a, 0xf7c6c07f, 0xebaffd3d, 0x9e612343, 0x1f912de7, 0xf9c0de60, + 0x20de8535, 0x8bdef3f4, 0x2ef73eef, 0x73fef6f4, 0xb08f85e6, 0x4586bf18, + 0xf8c437ef, 0x3825cfbd, 0xe829d047, 0x41c449a0, 0x3ed18199, 0x2e4cf6f9, + 0x63e7a31f, 0x3df41c78, 0x263fda9d, 0x5c99a99f, 0x3825757e, 0xc9919267, + 0x186ba5e9, 0xedfeb7e7, 0xeae1c50a, 0x8bfbaed6, 0x6ebff81e, 0x4f4c238d, + 0xab3b46a8, 0xeb0c19ce, 0x00dca2c6, 0x811973f9, 0x22a59677, 0x9da0dfaa, + 0x44f22261, 0xa97149d0, 0x2d3f4225, 0x1ff57eed, 0x0cea4f28, 0x14b132cc, + 0x0ff97fcf, 0x8faa850d, 0x5192cbed, 0xcef8afbc, 0x7fa8196d, 0x8877e732, + 0x1e792d3c, 0x97fd3aea, 0xbdf50f39, 0xc411ff4c, 0xee14fcd7, 0x1b7f9bb7, + 0xfdb24797, 0xb49fa116, 0x027ef1f4, 0xaccb1c3c, 0x7f7c88da, 0x7dffba5d, + 0xedbfce7c, 0x9d6e4aac, 0x7d3f2253, 0x16e7e904, 0xde71f787, 0xde6c5e5d, + 0x78e53fca, 0xbc01bf18, 0x16f495f7, 0x3a402dad, 0x077bcfed, 0x663d4efd, + 0x6acbd227, 0xd0c4e38c, 0x4e38a245, 0xc78df8e2, 0xf8d1f484, 0xb0f442a9, + 0xa3d5e7a4, 0x4346ef08, 0x8964e884, 0x6c784ec5, 0xe9c0d4fc, 0x2678dda9, + 0xdc07bf22, 0xfdf74b2f, 0xfbe1f883, 0x0e295313, 0xe1c2fc04, 0xce628d0b, + 0x0ccb1c55, 0xd1374cb0, 0x1fdc22ff, 0x5278b79d, 0xc9acbf30, 0x7e0f4034, + 0xc3bd8c4b, 0x3a6a1c72, 0xe89d79e8, 0x60259960, 0xdcbdbd42, 0x91e74cd7, + 0xcb84a7e6, 0x78b1c59d, 0x7cffa89f, 0xfbc717f4, 0xde3f2171, 0x8e7cf133, + 0xe5ce74c1, 0xa299edcc, 0x97e7365d, 0xdd58f2f7, 0x14bcf833, 0x7bddf09e, + 0x54b944c3, 0xbb448b94, 0x9d1e5e0c, 0xbdf2f9c9, 0x769dbcb1, 0xdf82a99c, + 0x0afa658e, 0x5df04e11, 0xf1f484d8, 0x7644358a, 0x37c8196a, 0xe6b76794, + 0x720a9d92, 0x3966746c, 0xa54e138d, 0x23d26676, 0x1ce419ac, 0xdcafb3e0, + 0x54d9f043, 0xf282f409, 0xc53365e6, 0x257e246b, 0x9cf8b55e, 0x0df9e624, + 0x652795c6, 0x2b8e0f96, 0xf09c3633, 0xe712f445, 0x7c22465c, 0x78e0e67d, + 0x9e9d7e00, 0x3c2e7a49, 0x566f9626, 0xb94a3809, 0x1a925ef6, 0x9e8547af, + 0x7af0299b, 0xec3aed1c, 0xfc4fdbc7, 0x6f1a5ef7, 0x7ae42aef, 0x4bddda47, + 0x263bbc84, 0x4a7cabe4, 0x73f5a23d, 0x7bfc131f, 0xe259232c, 0x55e22175, + 0x33901fea, 0x39df3c61, 0x926657ff, 0x3f436c33, 0xbb40bbe5, 0xf9aeb8a5, + 0xe985fee6, 0x0dbe37a0, 0x94a98cf6, 0x728e3bbe, 0xbbfed064, 0x8385d258, + 0xc86e5ea1, 0xeb29eb14, 0x51a971e7, 0x184b5d7c, 0xe2e50fc8, 0xff1f47f8, + 0xbbc39010, 0xf701ef31, 0x956f9873, 0xc1ecec46, 0x6bee00fe, 0xb851dd33, + 0x263bc76b, 0xa67d60e8, 0x28f3a062, 0xf104ac25, 0x4fadf0b6, 0xcba00b1c, + 0xa63ce2b3, 0xc3681ccf, 0xf1dcce7e, 0xc7e1d93a, 0x0ea2e14c, 0x537a9c7b, + 0x9407b1f8, 0x27a2fd68, 0xae9e74f4, 0x8fccf7ab, 0x97bac366, 0x38bdeaf4, + 0xfebb92e4, 0x68e5e6f6, 0x291af747, 0x7cfa029e, 0xdde701b3, 0x63c6edcc, + 0x9c1d353a, 0xafbd5dbe, 0x41e829d9, 0x7294fb9e, 0x8f8898e7, 0x2e5e64ae, + 0x7792926f, 0x5b83f960, 0xe30ebe6e, 0xff98cb54, 0x7ee00f90, 0x64e9d6f2, + 0x02ccdeff, 0xb4b36f94, 0x738e7d5d, 0x7cba8779, 0xce8383f3, 0x5e1c9279, + 0x17bed219, 0xf8eae37e, 0x0adfb8f1, 0x126d3cba, 0xe675f771, 0x57f771b8, + 0xe3475f04, 0xb8eafde3, 0x8e17cbfb, 0xe26937bb, 0x423b51ee, 0xfde7771b, + 0x0dec21be, 0xfe3637ec, 0xfe2aba7e, 0xeb155e3a, 0xa6d4fa68, 0x6378abca, + 0x4c92dd90, 0x5a9f4df5, 0x4ec7cc13, 0x88af4fef, 0x03dbce3f, 0xfce3a8e3, + 0x7c79efd1, 0x259fee5f, 0x3a7d349d, 0x2cacf484, 0xfa37fb4b, 0x6bd50e5d, + 0xff4b43cf, 0x0f8be4b3, 0x42196615, 0x622da2fe, 0xbca5ee9f, 0x2ed10fc9, + 0xea9cbe42, 0x53022579, 0x84e77a5c, 0x28b0c322, 0x01d768df, 0x122a75f4, + 0x674f8f23, 0x7fa45c3a, 0xe74bccbd, 0x2fdd04e5, 0xce86a3bc, 0xaef1fcdd, + 0xb9f54cea, 0x07f720c4, 0x907ef899, 0xe8c68c4e, 0xc7d1a65b, 0xff41bb4b, + 0x45fd9326, 0xfcfe80e7, 0x87a41df2, 0x067f3057, 0xcbdf7bd2, 0x5f02f323, + 0xf9cb0f43, 0x6c5c10dc, 0x2ea779e4, 0x8a661fb2, 0xf3d0dcf9, 0xb3af8d2a, + 0x8e348cf8, 0x199c798f, 0xf3e685b4, 0x806a2105, 0xf30355f2, 0x631ae747, + 0x95fcc513, 0x5e476e1e, 0x496c9e25, 0x6de70b20, 0x98f571c6, 0xc2ca12be, + 0xaf04eb67, 0x14939f07, 0x83cf81bf, 0x6b0a79e3, 0x3af6c1ce, 0xd7cf444b, + 0xa0c83309, 0x5e1256a3, 0xf2887654, 0x17e75986, 0x76f7c72e, 0x9313c907, + 0x16714798, 0xb75c45c8, 0xdd705985, 0x24f87b66, 0x33c4b7c5, 0x3e21e558, + 0xe4630e0e, 0x9d6248e7, 0xdbb5c70c, 0xb17106cf, 0xb054e64e, 0x0f9e756c, + 0x5e50c9df, 0x20c6f3f2, 0x3059bd2f, 0xafca33cf, 0x405e2057, 0x4fbf733e, + 0x98437aa2, 0xf2105b9f, 0xafcc4d2e, 0x21bbc855, 0x7388abcc, 0xeeef24f2, + 0x73a0ac73, 0xdfe62eee, 0xa1eef28b, 0x971469e4, 0x9a0164cb, 0x8334fa4f, + 0xfdb96e4a, 0x1ce672ea, 0x29de5683, 0x0121bf38, 0x3b0b7bf5, 0x4a44f946, + 0x79f59fd8, 0x46b3ed3a, 0x7665bfa1, 0x51979f12, 0x9e590fc8, 0x56f3c49d, + 0xbee964e6, 0x579c3e5e, 0x4c6f6fbd, 0xcfc3e7e3, 0x982c5865, 0xcc76009f, + 0x8fbe2c9c, 0xa2c83f7f, 0x93259579, 0x1f30eb3c, 0xf156ada6, 0xb77c07ae, + 0xeaf39c39, 0xc0baafd1, 0x0639fdc6, 0xea1dab4f, 0xf548afb7, 0x26e379e2, + 0x66dd8791, 0x8ddeae75, 0xe0e05e78, 0x1b7f58ed, 0x6fb715c6, 0xcf313a72, + 0x3fdd55d3, 0xaafb84c5, 0x83b9cce5, 0xcff7a1c5, 0xbe608f80, 0xe032c13f, + 0x23f41149, 0xf7c4efdf, 0xa93cbc85, 0xfca5f702, 0xb527b0af, 0x66cbe712, + 0x69371429, 0x4613d9ea, 0x9ce15a3f, 0xbfa3f212, 0x4c41fc23, 0x72e5fff0, + 0x575fc13c, 0xea9de946, 0xd7b9444b, 0x1da0e1be, 0x847bc39e, 0x1665d77f, + 0x3e18d771, 0xe13bc9c1, 0x1a388545, 0x38b8fd88, 0xfc99787f, 0x057b7ce3, + 0x38e1fe8b, 0x4971d1d5, 0x75164d4e, 0x7bc21b97, 0x14af9f91, 0x3cf112cf, + 0x8dc780b8, 0x8f76757b, 0xdbf9c749, 0x6f5b8852, 0x52e11ebf, 0x8ad8dce1, + 0x094ab9f3, 0xbfcf33d3, 0xb8e28f45, 0x017202d4, 0xafbc63f9, 0x4f33ce86, + 0xd41e7466, 0xebc4acb6, 0x2ceff784, 0xf421e7fc, 0x60eb8f47, 0x6d986714, + 0xbe197992, 0xe7b79e14, 0x0ad7f9a1, 0xa7359b1a, 0xd9194672, 0xdc267a25, + 0xfad8baaf, 0x4eae4ebf, 0x55deb0b9, 0x8935efe7, 0x3e5916bc, 0xba276591, + 0x94d64dff, 0x9f48b327, 0x9ee5b8f0, 0x8d7f612c, 0xce50a362, 0xe781c8c4, + 0xca99ddb0, 0x09c91237, 0x1390bd75, 0x19c6fa37, 0xf2177ec9, 0xbf65ca42, + 0xcb99dfc8, 0x6b84467c, 0xe34fb8af, 0x924ae570, 0x8059b317, 0x8abeffde, + 0xc90803e3, 0x30ddfd88, 0xdce76d4d, 0x679757e8, 0x41dad1cf, 0xdc726e1c, + 0xfd7501b9, 0x4ecf694c, 0xf3b3db53, 0x2a59fbbf, 0x9fcce3e9, 0x1f9e7c36, + 0xd269cbcd, 0x8a34e5e4, 0xeea69cbc, 0x63bb77c5, 0x3f8072f2, 0xb1a72f28, + 0x397962fb, 0xc779eedc, 0xf18bda18, 0xc256778b, 0xfb9e614a, 0x01c71e45, + 0x8d28e3cc, 0x2163a5d2, 0xc40293f7, 0xc7273f29, 0x0b73a369, 0xf252baed, + 0x3b27b6ab, 0x4deffe54, 0x4a3d38eb, 0xc3ccaa7f, 0xcd666d99, 0x774fdc9d, + 0x719be780, 0xf8485a3f, 0x52cc9e25, 0x03701fa4, 0xf234f1f9, 0xedce9dc0, + 0x51bcf746, 0xd39d2fe4, 0x79465253, 0xf9077649, 0xf2cc9ff1, 0x0273f7d0, + 0xbbe7e425, 0xe2973ec6, 0xdb3d4d2c, 0x51eccb0d, 0xd25cf9ba, 0x90d98d9b, + 0x63fc06de, 0x3fc998cf, 0xf5fb33e6, 0xeaae8043, 0x83f2614d, 0xbd1bd0c5, + 0x6e97a44f, 0x5636f816, 0x072ee7f9, 0x69bdf4b8, 0xc06ffba2, 0xda3f26f0, + 0x92a42fb3, 0x9330cf7f, 0x50d83e91, 0x7d9f08c9, 0xf9828fe8, 0x475a9c7f, + 0x5a86fa76, 0x5cec7a46, 0x65c7bf1a, 0xf21d0b25, 0x1b6abfa1, 0x7e8c51d0, + 0x5d53b558, 0x249d67ae, 0x0f77ebe7, 0x6b9247a2, 0x3035fe52, 0xf188de8f, + 0xf7f52ea5, 0xbe5ab86c, 0x3d390895, 0xadc9c6ee, 0x4e300798, 0x5b11e5c7, + 0x933a1de6, 0x9df3c5f6, 0x5451591f, 0x90b954fe, 0x38e7d4fd, 0xcbfce7a1, + 0xe8b970e5, 0xca27ab5f, 0xb574dd85, 0x1f70f981, 0x6820ed29, 0xba03e54f, + 0x4eaa3d1e, 0xf132cf39, 0xa4bfb49d, 0xaaf8961c, 0x11a20f1c, 0x10da6ce8, + 0x630cc761, 0xd0df10c3, 0x82b9d13f, 0xea34991b, 0xaffb883f, 0x4078c52b, + 0xaba4410f, 0x4212cea0, 0x9a536dfa, 0xd0593f49, 0x26e786ce, 0xf8724025, + 0x3d417597, 0xd604c7d2, 0xd075c37c, 0xd7a5a26e, 0xe8077286, 0xe521bae4, + 0x6569fa51, 0x8a3dbce1, 0xfea88e8a, 0x711bea4c, 0x8bea48e9, 0xddb9eff0, + 0xfb032d70, 0xfdf5c60e, 0x0737db81, 0x039fbe14, 0xda00ef3b, 0xa6e86f37, + 0xc74c9d13, 0x5da07efb, 0xff8d538d, 0xc3ebdd8b, 0x20572b50, 0x433c243a, + 0xf68f9c06, 0x949f1fbe, 0xb72d4c5b, 0x3c67d80a, 0xa1e37aaf, 0xdf3ee0ef, + 0x328d96b6, 0x49611ea0, 0xe27111de, 0xb10fb74d, 0x67fb3d7f, 0xf6e2dc70, + 0xe383e521, 0xb1467d16, 0x59d0d05f, 0x0b53a1e3, 0x3d28b337, 0x82b8be4a, + 0x00b3eb35, 0x78afca7e, 0xa40ae87c, 0xf18ba043, 0x461c5616, 0x3f7194b8, + 0x490fe49f, 0xb4a21577, 0x3e59d255, 0xbb3a47cb, 0xd61adbaa, 0x0c3f5327, + 0x444a09f3, 0x900ed2bf, 0xf8eb7d76, 0x8055f441, 0x16a5d179, 0x93d2216f, + 0x29c603b4, 0x2cee47de, 0x483ebb40, 0x3d0c7d76, 0x12e5cc3d, 0xadf913d0, + 0x7549e906, 0x24de86bd, 0xb9588fde, 0xcd64ac7e, 0x95989fb4, 0xb863f5c4, + 0x8fd266f6, 0xde892620, 0xe9c99d5e, 0x88f986ad, 0x9a992ade, 0xea2daa4e, + 0x611e96b2, 0xde9a9d44, 0x5a6f4402, 0x6f444d3a, 0x526f48f9, 0x9c5fa64f, + 0xf37c0ede, 0xcbe076f4, 0x63949bd0, 0x6aceac7b, 0xa9b3cc3b, 0x30bd214e, + 0xade1cdee, 0x50d91e58, 0x9eecf640, 0xaa7eef54, 0x65f5e66f, 0xe63d3ebd, + 0x11ae148d, 0x6afe05f5, 0x55ad372c, 0xf2b5dee8, 0x64af3c23, 0xbebc5df8, + 0x7ef37d64, 0x14dfb73c, 0x78bfdfe4, 0x01ce8db2, 0xf7c4da85, 0x58d51d95, + 0xdfe76a6e, 0xa2718c7f, 0x2bbf30cb, 0x2fef8ad4, 0xe5e05cd9, 0x3f6e5bdb, + 0xddeb124f, 0x9fb33ca3, 0xdfe0ebbe, 0x92c87cdd, 0xe6eec8c4, 0x62d5eff6, + 0xf1b6939d, 0xbc3eba75, 0xe8079a66, 0x907f7963, 0x748fb0ec, 0xe72415f5, + 0x2b63ec12, 0x7c1c8e95, 0x7ccafbca, 0x7ebb6f16, 0xee238f18, 0x366bfdc0, + 0xfc640bb7, 0xb5fce30d, 0xcb0df631, 0xecb0fe16, 0x9d20b881, 0x3b0f62db, + 0xe32d1fc8, 0x9807e183, 0xd71f7a82, 0x8a25df88, 0x6c2d4e17, 0x6a61fb26, + 0x46138cbe, 0xdc604b0c, 0x993fcf92, 0x634fcf12, 0xaafee6ce, 0x416f2213, + 0xf10bafbe, 0x483d88fc, 0x41df7424, 0x4e549bd2, 0x5df3aa65, 0xd9780a7b, + 0x3fe9b0fd, 0xbe0073db, 0x104366ba, 0x429e5b95, 0xeadf1f79, 0xe494e165, + 0x6a9ff3c1, 0xe5136160, 0xaff9f101, 0x7b893568, 0xbb5cb83a, 0x4d8fe051, + 0x3bf4411c, 0x5869e04b, 0xe35390b6, 0x539438d8, 0x7dbc0a37, 0xe46cd2db, + 0xa8c3ba7a, 0xd9451f91, 0x4a1eafa8, 0xebab8768, 0x4ea5f235, 0xd842bb8c, + 0x3f592bdf, 0x123f27f9, 0x8789f7f6, 0x8abdfdb8, 0xb27f9275, 0x776e61ef, + 0x90f2c036, 0xc67eb45e, 0xe5d4bbd5, 0xb9754e86, 0xf63ad411, 0x91add4df, + 0xefdcc53b, 0x4350f7db, 0xeaf9fa05, 0xfc937c1e, 0xce5275cb, 0x0672d484, + 0x672e6b0c, 0xfc94b81e, 0x7e595f43, 0x535d86ec, 0xf2bf2a85, 0x8c776cfa, + 0x9e79e4ff, 0xf8c8d227, 0xb1cfbd3e, 0x13dea1b6, 0x4fd4a3c5, 0x95a08fd2, + 0xbe42252f, 0x6f297ac8, 0x5fd7184a, 0xd37cafb0, 0xf6356d87, 0x07492add, + 0xfd25df62, 0x2a2ed213, 0xe908bb41, 0x7cf8d2eb, 0x0de9fa0b, 0xfd18b0f3, + 0x42ccb734, 0xc7dbd7f8, 0xfa2aec04, 0x48fa2468, 0xd7538fbc, 0xee47e86b, + 0xf4126ea3, 0x3a460373, 0xc83ffc60, 0x4e4adbfd, 0xff98b33f, 0xefcfd220, + 0x91fa7157, 0xbf2fb9fb, 0x63e9f37f, 0x1f726ff7, 0x71f745f8, 0xfd637403, + 0x3973dd29, 0x5ee06f3b, 0x373fda17, 0x1a2e9c29, 0x31fefe16, 0xca529fbc, + 0xcc2dc38b, 0xcb46306b, 0x16cdd3ad, 0x7bca378c, 0xfb5e66de, 0x1892c55e, + 0x51d673f9, 0x1b8443f9, 0xff9371eb, 0xfd26c1b4, 0xd99c7cda, 0xdfdbdeba, + 0x98f83945, 0xe7b6e28d, 0xb264635f, 0x9236df9c, 0x8b4fa1f2, 0xcf9cb6f8, + 0xbd7687cd, 0xacf98112, 0x9c6f3b58, 0xd5b8ec01, 0xcfefe84a, 0x0befe829, + 0x5d7a40ec, 0x7b8b0bad, 0xffc97b15, 0xec4dc72f, 0x5c920d37, 0xfae3ed34, + 0xa2495fb9, 0x5f7856fc, 0x7b071b14, 0xdf97286a, 0xf5279fd2, 0xdca2dbe8, + 0xb57bce2a, 0x0bfed55a, 0x59ef965d, 0x0adbff5c, 0x2df0575f, 0xf47bc923, + 0x16bc63df, 0x9a1b36b4, 0x985e7836, 0x0bf3b09f, 0x858427e4, 0x650cf93e, + 0x4663ac37, 0xc22f6f86, 0xbf8884e1, 0xbaf1109e, 0x7e3cc913, 0xf681ebf7, + 0x78bef9fc, 0xbdf1109e, 0xb8ea6913, 0x11176c8e, 0x8b78e3fa, 0x88c1bfc5, + 0xdfe67171, 0xf3c47a00, 0xf299b980, 0xf5f3e63e, 0xaa90bdf5, 0x3a7f473a, + 0x5c33f2bb, 0xff6e3dff, 0x65af38db, 0x40f3ea1d, 0xd29ee27d, 0x7d3f413e, + 0xe394fe56, 0xfdaece9e, 0x9bebbf0c, 0x1ccbefcb, 0x65904f28, 0x77dff53f, + 0xd2e48455, 0x113bf940, 0xfb9b4e71, 0x3e1fa439, 0x1b4e9c51, 0xc39ed397, + 0x17d5c6d4, 0x7113be48, 0x5e42f9f5, 0x7ee1e82d, 0xd61685fd, 0x17ea1436, + 0x9c5264f5, 0x58392eb6, 0x07ab8aa4, 0x9f2a5f6d, 0x5f69d242, 0x1c40ef6e, + 0x3898e1fa, 0x43888374, 0x75f5c836, 0x1ce7d7a9, 0xe7d37caa, 0xdd439d9b, + 0xdad0e383, 0xd1e785bc, 0xf14630de, 0xc393ab70, 0x5f5f46ad, 0xf3d8fe8d, + 0x7be518cb, 0xd2fafadf, 0xded7f456, 0x86dc51ba, 0x06efec29, 0xeb44e701, + 0xcc75fb72, 0x278bf2a3, 0x7acc4f31, 0x54d20486, 0x63e8b265, 0xd68735f2, + 0xcfbeab65, 0x6aa61e6d, 0x52f6bf9f, 0xb0417d55, 0x6c2e5554, 0x7ed542bf, + 0xaa954744, 0x6bc1f23c, 0xd84bed54, 0x97f214b0, 0x9f47a6bd, 0x3424bb12, + 0x7a3f5553, 0xefaa4dd7, 0x5bcd663f, 0x2ebb4227, 0x5d7efaab, 0x16f5f416, + 0x0db77057, 0xe74c63ae, 0x2c3f5512, 0x8a9584ac, 0xa75b3de8, 0x92b9f993, + 0xee3cbd65, 0x2af75970, 0xf5ab38d5, 0x6d4784f5, 0xf594b55c, 0xe1fca21f, + 0xb30de290, 0x95d671c1, 0xbbe9dbdd, 0x323fd98b, 0xa1edf0ee, 0xcd96ae22, + 0x6b5d39b2, 0x764ec2e9, 0x7a6df9e2, 0xb0961ff2, 0x122607a2, 0xe42c8cbc, + 0xf3bf8c19, 0xcec5fb8c, 0xbe5076ef, 0x2fafcdd7, 0xb398f9a5, 0xf56174d4, + 0x36c2e9a8, 0x0e174d4a, 0x520e9aaf, 0x40e9abc6, 0x9f54ef0b, 0x04582e9a, + 0x780173fe, 0xd3534fa7, 0x9c15ffcd, 0x3be06bd7, 0xd5af80ee, 0xf9e3704e, + 0x334ed261, 0x1b487b0b, 0xcef6902f, 0xdd85437d, 0x7191fa25, 0x48253680, + 0xf881fffb, 0x1e70f8de, 0x6a5a4bde, 0xafdc6669, 0xb43adfe4, 0x925fae3c, + 0x4bf227de, 0x12ceb84a, 0xe66ae1f6, 0xc47df927, 0xc749fdca, 0x3f92576b, + 0x266b0569, 0xccf4fbfb, 0x18efc2a9, 0xcb1776a4, 0x07941807, 0x8b29f600, + 0xc2aedbf1, 0x070bc02b, 0x51e953c3, 0x3f3c0ec2, 0x3ea47acb, 0x1a73f008, + 0x3a17bb6a, 0x95e56254, 0xff657fb4, 0x8e527e12, 0xe8cd7ec9, 0xd03e41cf, + 0x4a3635c8, 0xfb51c71b, 0x2c0d9071, 0x1d71b115, 0x0b8d8b0f, 0x5137fd69, + 0x5bec0dbf, 0x5f990e31, 0x5ce78ad0, 0xe47d39c7, 0xbd672c1f, 0xf4bdf0f3, + 0xe2ff90db, 0xbfe03612, 0x2ea7a848, 0x21be3712, 0x291e44a8, 0x962f1c18, + 0xc30067f1, 0xc7c2ef87, 0x2e4f1513, 0x8be663ce, 0x4748dd23, 0xde99fd83, + 0x3f412fa3, 0x3a7f5d7a, 0xc4c1abb6, 0xf27898ee, 0xd6844aab, 0xbbe66df3, + 0x7adcf63b, 0x329ceb23, 0xa0c8fc8f, 0x987ef11f, 0x62efee2e, 0xd87b5add, + 0x1d667e40, 0x7de904ac, 0xa3898b35, 0xa9eb4416, 0x965c1fac, 0xb3173e79, + 0xc723fe23, 0x3ccb9c29, 0xf909893f, 0x899ff727, 0xdf3279f6, 0x296bde41, + 0x39f47af3, 0xb2c74f82, 0xf03fd8b1, 0xfc873999, 0x4a97c00b, 0xe40e1f2c, + 0x20fd5101, 0x5facd43e, 0x1de83be6, 0x5a37e465, 0x2fdebb1a, 0xaf690f00, + 0x68c3975c, 0x63427fbd, 0xa485ed08, 0x61f3bf63, 0x2aaf5975, 0x04c9b33f, + 0x27f41a1b, 0xeef22f3c, 0x7b76d53a, 0xde4e8e71, 0x22ffa963, 0x0f8c4af0, + 0xf0272791, 0x2fed45f1, 0xe1272799, 0xe2239a58, 0x57b85133, 0xe5e3b8e4, + 0x5dc00c0b, 0x2ee02f5d, 0xbcb672e1, 0x2f88a7f7, 0x0648e3bd, 0x74bafbc2, + 0xa78895ff, 0x8f91a3dc, 0x5e745d14, 0x9433fa35, 0x5bbe7ae7, 0x1adfe74f, + 0xaff2e2af, 0x893d05f1, 0x663d7388, 0xaea917ba, 0x83d93f7b, 0xc0405a67, + 0xaa75fd82, 0x711c8605, 0x06823f01, 0x49f689de, 0x68373d72, 0xd5e64ee8, + 0xab673ac0, 0x1c306be8, 0xbfa3c766, 0x0a717d1a, 0xc81e7f9e, 0xe7f43207, + 0xa753dec5, 0xa0ba475d, 0x3fab4c87, 0x53fd7080, 0xec56ce6f, 0x73df46af, + 0xb3e11b28, 0x51f3a146, 0x3cfccc93, 0x7e2c90ea, 0xa47c6d5e, 0x79e78bd9, + 0x3df872b3, 0xf3bf235e, 0x4845e9c3, 0xc519cb77, 0x735bdfef, 0x6fde1a5b, + 0xa919c721, 0x251ce8e8, 0xffbccf63, 0x4f8c32bd, 0x83bca7ce, 0x7f716605, + 0x70b6edcf, 0x5f93c821, 0x4c7df899, 0x74cd61c6, 0x553fa4fe, 0x974dfe4f, + 0xfa464d9e, 0xe797f393, 0x3c7be54e, 0xbbf98f17, 0xd6a4fdf2, 0xc2b771fe, + 0x478e4273, 0x52698e75, 0x66b8ff75, 0x320f147b, 0xef11ae8f, 0x7afd056d, + 0x2efd22ce, 0x8f5b7bea, 0xb1e97d89, 0xb8f70311, 0xe3e36238, 0xca5f568d, + 0x717eb8e5, 0x9d5feb6f, 0x5a5494be, 0xd61efaaf, 0x5d6f2273, 0xa2449efe, + 0xe5b65f7b, 0x97dee228, 0x4e4f77af, 0x996afca2, 0x8fa5af3f, 0x8d0f410c, + 0xb86606a9, 0xfb73ce8c, 0xa5eed42f, 0x9ee3eb7f, 0xa3943ac3, 0xfc81f993, + 0xe397bd9e, 0x2cbdffe7, 0xd3cd19d6, 0xdc79d08b, 0x17bffc81, 0xbf782f2a, + 0xb7de2346, 0x99070319, 0xf788de1f, 0xd38b8e6d, 0xb1e7f42f, 0x9ddefc5f, + 0x4fbe1c8c, 0xbc7cc46f, 0x5cf7d8f4, 0x71c744ce, 0x48bafc89, 0xcfe7f232, + 0x5e74f5bb, 0xe9afe7fd, 0x3388eda6, 0x2e02d3ef, 0x7e0dba97, 0x1d1897cc, + 0x2747f7e6, 0xbdcf276a, 0xda9ff3c8, 0x455575f9, 0x31fce216, 0x78de37df, + 0xcaf80bef, 0x71a57779, 0x62be347c, 0x1a82f7e6, 0x57765e78, 0xc905645a, + 0xcf1aa70b, 0xf1ca1f7f, 0x244d75dc, 0x4d61ce8f, 0x44857ee7, 0x0f4de0f4, + 0x925ca1a4, 0x1855b8f7, 0x0c67159a, 0x1e8c5dbf, 0xabd770a2, 0xee183af0, + 0xfd97aa26, 0xf9cc3c9e, 0xce61e4f6, 0x73ff72a7, 0xe53d41f2, 0xdb430053, + 0x58b71f71, 0x8c93bbe8, 0x764e4fc7, 0x59dfb428, 0x2d6c6012, 0x3bc59dc8, + 0xf8fb7357, 0xa86d71f1, 0xfe3df0aa, 0x2ce2c78e, 0xe786aec6, 0x389a0d92, + 0x4947d8ba, 0xb36cba3d, 0x63adeeda, 0x7682ff9b, 0x4cd672d2, 0xfdc565fa, + 0x76ebefea, 0x8e31fb5e, 0xa3f78da7, 0x94ed188f, 0x87d85cf4, 0x82b17fa0, + 0xb87ea055, 0x4c4ff1f5, 0x891913f8, 0xc804e1f8, 0x5023e1db, 0x79e85aee, + 0xcf49c5a6, 0xa1beb991, 0x8aa700b9, 0x2e5e40dc, 0xe2de75fa, 0x7f5f3af0, + 0x3c0feb9e, 0xcb7a0c2c, 0x5279e7ac, 0x1e3c79e6, 0x87bc7dfe, 0x3662e000, + 0x9f497b73, 0x6fccd772, 0x44432cd1, 0x9c479757, 0x3f49530b, 0xfe90b379, + 0x9d4e4f5d, 0x3f77f086, 0xbae1f369, 0x4afa5536, 0xa9b11fd0, 0xb49b9f96, + 0x3e3c7998, 0xfb09f3f4, 0xbc36d5d0, 0x9e154b73, 0xecf6719b, 0x6f0aa30d, + 0xf285fdd7, 0xe6afda98, 0xba198679, 0x05a1dec8, 0xb6dcf1d1, 0xebc61650, + 0x7df9a3dd, 0x657d2e30, 0xdce79709, 0xb0146bfe, 0xf73c53ef, 0xe0f979e2, + 0xa18f20eb, 0x7e06f3df, 0xc652e3ae, 0xd1f32cf1, 0x3b58ec70, 0x2fc00cf7, + 0x2e06f7f6, 0xc6c254ed, 0x8417ba64, 0xebf53be2, 0x50f319c3, 0xa0613d2f, + 0x979c98f8, 0xaa4357eb, 0xf5260e30, 0xc9c53cd1, 0x8ec266fd, 0x1fe4cb9f, + 0x11cda38f, 0xd85732f4, 0x1c6cf3ef, 0x37984bce, 0xc9bbbf0f, 0xc07592c2, + 0x3baaf352, 0xab7d69cb, 0x2768a98d, 0x625078c8, 0xbfbe22fb, 0x0ea7f1ab, + 0xe9580e7e, 0x4e4ec22f, 0x02e92fa1, 0x2b9f587c, 0x9f88b0f8, 0x99c36387, + 0x8d8fe30f, 0xdfa48caf, 0xf12731c5, 0x27c83738, 0x738bde0b, 0xac36f510, + 0x564be57b, 0xbc8a1f7e, 0xefc9d127, 0x999a6d3f, 0xf3e74a53, 0x7dd3f68e, + 0x918ce716, 0x9063e23c, 0x67f3783b, 0xdf3da3db, 0xca39e032, 0xa0d3b06c, + 0x7fe8f5dc, 0xc8b0f2f1, 0xf0ffbc0a, 0xf38f47bd, 0x8f91a5f2, 0xa3f1fcb0, + 0xfbc2df7d, 0x234b1bc6, 0xd650f42b, 0x5e2ff63d, 0x20391b8f, 0x0cc794ac, + 0xffd08233, 0x076154a9, 0xfe742379, 0x91c5f1b9, 0xeabf58ba, 0x9cb9733f, + 0xede5653d, 0x45b0154e, 0xa3de1133, 0xa3ffb7e2, 0xb0f32f68, 0xf7e57ae5, + 0x77fe2b2c, 0xf2e5ca3f, 0xb738a571, 0xdac6c93c, 0x179e3cad, 0x1c3c064c, + 0xf14919e8, 0xd3723bc8, 0x8cee7db8, 0xb233bdd0, 0x11efed1f, 0x295771c8, + 0xce8bf7fc, 0x57ffb919, 0xe5c8efd6, 0xd9c61f72, 0xf70ce340, 0x33bef3f1, + 0x7f104a73, 0xc0833780, 0x8bdf819b, 0x0fcf9dbf, 0xe3dfc5fa, 0x0e303d01, + 0x3e07f8fd, 0xd105f683, 0xe4e96b79, 0x564e8217, 0x6c38f2b6, 0xd1216a7f, + 0xb89b24d3, 0xbd4ca4bf, 0x871e5d0e, 0x53733fdf, 0xf0073af9, 0x38d0a992, + 0x398e02ad, 0x6399a291, 0xf7bafcbe, 0x3bad1ffe, 0xbc3e5f06, 0x3740e487, + 0x9757a7bf, 0xf485f1c7, 0xdef6469c, 0xa77f5516, 0x1fbe69d6, 0xdc9ee8cf, + 0xfa42b4c6, 0x1ee2fbfe, 0x1b3f7952, 0x9630577e, 0xbf68a9db, 0x5821fbca, + 0x1b166af0, 0x07b81c57, 0x93dc53a2, 0xebceb03b, 0x9d3ac4ca, 0xd8ce9d62, + 0xe0183ddf, 0x79fd23cf, 0xe7ee62b3, 0xe007ef93, 0x715fd03f, 0xc54fe8a9, + 0x43faf1e7, 0x97844ebe, 0x78d37ebf, 0xc0d4f391, 0x9ace0073, 0x227849f9, + 0xc577d37f, 0xf394ba6a, 0xee5738fc, 0x5dfc358f, 0x13c715f0, 0xdc36a4f7, + 0x99abf3c1, 0x0dd74d47, 0xcc3a055d, 0x39df9037, 0x1e5a3370, 0xe665f7f5, + 0x0e71fd89, 0xbf9049cb, 0xbe2f3438, 0x6bde909f, 0xa97d87f7, 0xd4c5f7f2, + 0xb73e8a7e, 0x7187d7b7, 0xbcfcb3b5, 0xbf1a95ff, 0x9e95c60d, 0x8bbf47b1, + 0x797517ea, 0xdf871e65, 0x7f53bf60, 0xccafce1e, 0xc7acf55c, 0x2c7c4b0b, + 0xebca067b, 0xdbaa94b2, 0xaea3f7f0, 0x819dcbcc, 0x686cbcf2, 0x200527d5, + 0xcbcaafcf, 0x55d1e5e3, 0xf2c30c9f, 0xfdbc7963, 0x28b3df24, 0x6f3059ef, + 0x5109e4c6, 0x3ceae27b, 0x5f4dc10f, 0xda7ba3ad, 0x5f98ec06, 0x918ec999, + 0x2cf44d70, 0xe39aeb33, 0xe6a705c5, 0x684bf80d, 0xff1e371f, 0x313cc1e9, + 0x188fffb1, 0xbefffb54, 0xbb1e7e64, 0xa6ffe5ef, 0xf33328f3, 0x1e21d702, + 0x16676c9a, 0xbd794016, 0xdb8a7ded, 0x43b03e29, 0x71e2afd0, 0x5f30f9b2, + 0x3f26cce5, 0x956c4dda, 0xb82062d7, 0xde177f0a, 0x7bf00711, 0xee2795e9, + 0xf187ca1c, 0x08263ce3, 0xcaf4d039, 0x718efe3f, 0x7653a6df, 0x13899a2f, + 0x0dba1e7a, 0x3d09aeed, 0xeb83fc6f, 0x467e7e61, 0xfa027bce, 0xf8fde133, + 0x7fcd336e, 0xcb25cf42, 0xbf95fdb1, 0x3a4429ed, 0xb858eab9, 0xdf42c515, + 0xaa1cbfcb, 0x3ec3373a, 0x67de60be, 0x849b38c2, 0xf44d9fc7, 0x8f00973b, + 0xcf8f0e46, 0x9ced3f28, 0x845b70fb, 0xf9f573ec, 0x29dfb024, 0x259e7c8e, + 0x217e3179, 0xfd6bb9cf, 0x616b47a4, 0xaafef07d, 0x8c41987e, 0x53e93cfd, + 0x6892080b, 0xaaa592b9, 0x2196d5ca, 0xce35f6aa, 0xd4fd5502, 0xf5544bac, + 0xaa253dd3, 0x26a3b5f2, 0xef5fdaa8, 0x679554ad, 0x6aae9f8c, 0x55abeb5f, + 0x9dc24b95, 0x5ee3f6aa, 0x1fd756eb, 0x43c47a61, 0x7eef51e9, 0xf71f967c, + 0xe2b5bb91, 0x7c7ef344, 0x072bf84e, 0x7c4fd687, 0xfb9da7c5, 0x13f4bdf1, + 0x491bcf6b, 0xbd6cf1bf, 0xef8a643d, 0x1432ce1f, 0xd005ef46, 0xa379f8eb, + 0xc781a983, 0xbcf26f11, 0x13f424d1, 0x166a1203, 0x04f7e59d, 0xb47ee7cc, + 0x941888a3, 0xe41d734f, 0x6c6a3c7f, 0x9e5dea7e, 0x728b9007, 0x39feaaef, + 0xfa4f75aa, 0x775aa034, 0xc1a95b25, 0x72aa2dd3, 0x550ef38d, 0xeb59a9fb, + 0x3dd3f554, 0xda78351b, 0xef5f2aa2, 0xa783487d, 0x3d3c1aed, 0xf497aaa1, + 0x58fc23dd, 0x09ffa0af, 0xbd23139e, 0xab8788d5, 0x3e13f44f, 0x5476f7c6, + 0x38ae9e23, 0x2af849da, 0x51abfb0b, 0xd6bc565c, 0x619f1fbc, 0x77e187d8, + 0xe8b25afb, 0x43c5a079, 0x2d43ac7e, 0x5af9e8a3, 0xffde978b, 0x7a78cb57, + 0x47c5bafe, 0x4cb4dfcf, 0x8b6f67a3, 0x2d9d9e9f, 0x99fed49d, 0x07ee6e96, + 0x87b81f4b, 0x03fd1722, 0x469174e7, 0xfbbefc8c, 0xcfc91358, 0x73914973, + 0x1acf5e58, 0x97be5e49, 0x872f88cf, 0xbdc91878, 0xeafbe57f, 0xcdfed1f3, + 0x3e65efe3, 0x57cea746, 0xdff87682, 0xd7bceef3, 0xddd8cb90, 0xce59fceb, + 0xdfc65e54, 0xd36421e1, 0x79dc43ef, 0xce0efe2f, 0x284aa853, 0x0ce77288, + 0xdf89f72c, 0x77953c57, 0xf1608ce7, 0xfb9788d7, 0xffcbc506, 0x8da8748e, + 0xc2753f97, 0xcebf40e3, 0x3a46cfe1, 0x85871e10, 0x4ac7cb7f, 0x127bf88c, + 0x23128695, 0x1aa3d9ea, 0xc73e44bb, 0xcf3f2b99, 0xbdbae373, 0xf83e5237, + 0x3dfa4635, 0xdf0a99b9, 0xc776caf7, 0xe83eb9f2, 0xfb4cdebb, 0xdf3a23a9, + 0x3e8fe472, 0x8431ffa5, 0xbdfe5e73, 0x1cfaa7a4, 0xbf0879fd, 0xf01ffc9c, + 0x31ffbbb2, 0x36531bc5, 0xe724f872, 0x53ed27ff, 0x64f841be, 0x4f81c7e7, + 0xeb93be7e, 0x172fb0b1, 0x3e5900ed, 0xa06beb52, 0x6fa560f8, 0xb0e3ae04, + 0xd7f9ccdf, 0x208d08ef, 0xfcaf90ff, 0xcf3f18c6, 0xa246f923, 0x7078599b, + 0x379dfd10, 0x7ef143e9, 0x7c85ef77, 0x3a202fbe, 0x5ce67dc1, 0x8e0bed1b, + 0x03bdf8e8, 0xf347f6da, 0x74e0bef9, 0x7f7dfb82, 0x755ee02f, 0xcf53c343, + 0x6b7d7f41, 0x9f75d4ac, 0x63d9247f, 0x5d00cd7d, 0x13bee9a0, 0xbd7967cd, + 0x42402bd9, 0xf879daf1, 0xaa7fa82f, 0xbdbfb6e7, 0x5fdfed0d, 0x0e92f363, + 0xf04a5e71, 0x5e3449bb, 0xfb216e90, 0xdcccc169, 0xf38bd42a, 0xa16ffc44, + 0x614190c3, 0xc9aa4340, 0xb32cfd09, 0x0401b497, 0xad570ad9, 0xa56a7f09, + 0x3696e72e, 0xbe1aae7c, 0x013f84c5, 0xa7bc5f52, 0x06d8cd0d, 0x9272e160, + 0x5b37917f, 0xd68b5e60, 0x3f7c3dea, 0xaea3cf27, 0x2bf952fe, 0x888f7e92, + 0x0200233c, 0x20ff57ed, 0xfbbf2de0, 0xa2d78083, 0x185f117c, 0xae7cc6c3, + 0xcd2d5f8e, 0x82ca38c7, 0xc4128b37, 0xc2f5d417, 0xb89dfc7e, 0xdf7b58b7, + 0xddf71c88, 0x1fe76e7c, 0xa2650131, 0xd713793d, 0x7ce76303, 0xd61cbeb2, + 0xa9c7b63f, 0x4584fca3, 0x1e21cf0d, 0x3c0b77ce, 0xf237591a, 0xc5c10dd3, + 0x978e53ef, 0xc5ed9ce6, 0xd7b7a5f4, 0x2fab1d59, 0xeafe22cb, 0xbe397d58, + 0xf51aa3bf, 0xe18fd4a2, 0x8f213a96, 0x1e8e499b, 0xe54b5968, 0x7a412d43, + 0x2ed2d6be, 0xd50771e4, 0x41e5baff, 0x42438f21, 0xf7a2ef1e, 0xe8732d3d, + 0x804b4af9, 0x07a5d79e, 0xc9ff2136, 0x4b2cecb8, 0x0f6cf280, 0x1866643e, + 0x63df3b97, 0xe00c7ca6, 0x711ec788, 0x9991be61, 0xf36a55ce, 0x7e72b48e, + 0x06ba1e80, 0x15b273dd, 0x17c81bc7, 0x3f317b42, 0x661d3d31, 0xa5ca071e, + 0x5bfc7fa7, 0x3d874392, 0xd3da071e, 0x423fc8bf, 0xcfb0e2fa, 0xb94230e3, + 0x1ca2c7f3, 0x50cc38f0, 0x36ff93de, 0x38f41f6f, 0xe67e50ac, 0xfaf36fc7, + 0xf9e0a310, 0x07fc7f2f, 0x4c95f392, 0x51fc8039, 0x0c98296d, 0x75f402ea, + 0x8be401e5, 0x278b59a9, 0xcf0c5f23, 0x4c7d10f7, 0x803bacf7, 0x6d476be5, + 0x0e95e037, 0x06c97b3e, 0x55caaefc, 0x26efc06b, 0x01b2dce7, 0x7c329bbf, + 0xbbf6218b, 0x367bc569, 0xef3af960, 0xa7da0376, 0x958e51c3, 0x6591fb47, + 0xb4e52f59, 0xacbb8bcc, 0x60fa4fc7, 0xf49fb76c, 0xd54b8481, 0x31bbdaac, + 0xadd4d59e, 0x55f7f138, 0x032966aa, 0x5b980149, 0x7ef788d8, 0x943ebc82, + 0x1d65327f, 0x96135bf0, 0xbdf2a0af, 0xfd59beeb, 0x4ef91876, 0x11dfbf2b, + 0x1efa8efc, 0x31dfe1f3, 0x2e5afbf1, 0xf1b8b841, 0x0762dbdc, 0x02ca4fdd, + 0x2eb3b40e, 0x700f3d43, 0xfdf42718, 0x93acf152, 0x63becdef, 0xe61f3748, + 0x60e5fd8b, 0xe0b1f0f9, 0x9339cd7f, 0x3e42f504, 0x467a949c, 0xc0d1bbdc, + 0x7a0fc83a, 0x6d3abcb1, 0xcf36b8fe, 0x6b8be644, 0x59ea4af3, 0x507fef2f, + 0xafcf385e, 0x2e17941e, 0x5c4955f7, 0x5941ce9e, 0x68d30133, 0x5ff870d5, + 0x037f0120, 0x00008000, 0x00088b1f, 0x00000000, 0x3bd5ff00, 0xd554740b, + 0x9dcefbb5, 0x9924c85f, 0x0420807c, 0xa2499f27, 0x924033e4, 0x90c82426, + 0x4c1fc410, 0xf9481740, 0x90ff280c, 0x5636b044, 0x5634335d, 0xb51b6ac0, + 0xdf6ad0a5, 0xabec4540, 0x63411495, 0xa4107425, 0xaa7547d0, 0x7679a820, + 0xc8f80a40, 0xb8ab4067, 0xf7b78fa4, 0xe666f73e, 0xaa40124e, 0x0ac2f5ae, + 0xff9ee73b, 0xce7deffe, 0xbd9ab4e9, 0xa70004ba, 0x15b66dc9, 0xfecc7403, + 0x01d042eb, 0x5c0bf8fe, 0xfd9d00f9, 0x3eb1ebd5, 0xf419a10e, 0x98b00250, + 0x9600d8ba, 0x3208cf80, 0x78e19f42, 0x73fc0cd0, 0x59977f11, 0xdfa9190e, + 0xdfb5e7b2, 0x60103dc1, 0x042d4008, 0xb009908d, 0x1eaa25bc, 0x475a4642, + 0xf7f46b7d, 0x5a628066, 0xad386847, 0x3ad75fe3, 0x50e1b1af, 0x40e373d5, + 0xb738014e, 0xa533e4d3, 0x1f5fff73, 0x9df2f2c6, 0x36a3eb26, 0x2a3e7f82, + 0x5b342015, 0x9dc232fc, 0x37a0199e, 0xb8f2ec00, 0x8b3dfa19, 0x78076f41, + 0xe5c0d3dd, 0x2e469ebd, 0x1978f3ef, 0x61acf7ee, 0x334f17f8, 0xacf41fd7, + 0x1e9bf2e7, 0xe780c31f, 0x7d3efe79, 0x6ee1f2ee, 0xddbf4e0b, 0x55cc11d0, + 0x70019dd6, 0x90b3b277, 0x5d5de9d6, 0x04727891, 0x5e2fdef0, 0xc84ae58b, + 0x86f4b06d, 0x1acb06dd, 0x5ecb8129, 0xbbc3ee23, 0x84d7c62b, 0xa8737afb, + 0xa3d10c7b, 0x99f432bb, 0x290df10e, 0x94c3c641, 0xf4b1ee41, 0xd0e2325d, + 0x37ab3449, 0x5a77f09b, 0xac117de7, 0xecfb3700, 0xd9ce3d2e, 0xd7558f15, + 0xb2c78c00, 0xf1f9e717, 0xad155740, 0x4683720b, 0xfd22e71a, 0x25f1c38c, + 0xebc2d198, 0x30879840, 0x6c5bc046, 0x37bfe312, 0x9c7031c4, 0xf300b4ee, + 0x2fc6f741, 0x7af2db86, 0x2f1a3de3, 0x5aa3e1fd, 0x8b7a08ae, 0xb1a59e90, + 0x7756130e, 0x4697e048, 0xa83f1c21, 0x8e9c7012, 0xe09ea334, 0x82b210d8, + 0x8efe1e3a, 0x198c8f3b, 0x21e32fc1, 0x32ae5351, 0xafb4d10f, 0xea6ba6b6, + 0x79b2d23b, 0xaf531bfc, 0x18ebb4d3, 0xf3166a52, 0xb0449c4e, 0x3f5ee8d5, + 0x2a12e90f, 0x61363933, 0xf1315bfd, 0x30085005, 0x137e3639, 0x8662b7c1, + 0xe4dda8fb, 0x005217e3, 0xf65939f7, 0x54402a0f, 0xa91b64dd, 0xacc0f71d, + 0xbbb61b4a, 0xbb4cb725, 0xd026090e, 0x8c736f7e, 0x529f7cd7, 0xbfa6937a, + 0x22481ccb, 0x6b38d6b4, 0x1b6bdf34, 0x327d033f, 0x05e37940, 0x18068fd0, + 0x8cd16fe9, 0xab7f7a33, 0x43c8fda6, 0x8f589320, 0x43d8ea3a, 0x5384f8b0, + 0x39295626, 0x6087b0dd, 0xe181a7d9, 0x82700fb4, 0xf9083acd, 0xf07b914c, + 0xf2c7a04a, 0x1a5ca558, 0x102535f2, 0xae402e1d, 0x0e57e91e, 0x36321c03, + 0xebff4a96, 0xb183e20b, 0xe640040a, 0x62157ec0, 0x67473009, 0x483319f1, + 0xa37ca0ad, 0x7254783e, 0xce11eaa4, 0x54258392, 0x016082ee, 0xd2e75941, + 0x844d7f13, 0x36546186, 0xe0953b81, 0x67ee891b, 0xa53bff88, 0x5c589360, + 0xb9f89928, 0xcdef07fa, 0x42f58079, 0xeb84c38c, 0x47eb7dfb, 0x7fad6903, + 0xf9fc0c0f, 0xbf30b66b, 0x633f5bd7, 0xdae5a93c, 0x7f184fc6, 0x1563b96a, + 0x92e175cc, 0xb7300d9b, 0xffed6106, 0x2c6b73ca, 0x0d60bfa4, 0x5e16a9d1, + 0x0bc8ae37, 0xb39687b7, 0x442ef83d, 0x6b4357fd, 0xbda5431a, 0xabf6272e, + 0x44390831, 0x6271a88e, 0xa5189abf, 0xc5d67dec, 0x7b4a81e5, 0x6e1ab0ef, + 0xa7d6a69f, 0x7576f689, 0x78c5fbbc, 0x32b2d443, 0xf96a75de, 0x5d3fd10e, + 0xa2fbef9d, 0x5fea271c, 0x78d595f7, 0x7efac2f3, 0x9fd24dbf, 0x848f75a4, + 0xd6651791, 0x3f4907ff, 0x17074874, 0xdb7bfd32, 0x62bd6d07, 0x56fee61f, + 0x090b1af6, 0xfec537ff, 0x45b8e495, 0xdae39202, 0x1f4e0d07, 0xa9267fce, + 0x25a560a5, 0xf733af8c, 0xaabafc09, 0xb6329ce2, 0xce72fe5f, 0x391be226, + 0xf9a0d0ee, 0x50d8fdf8, 0x6a97eb1d, 0xa204e2d9, 0xcf4263e7, 0xe1a3fdab, + 0x34d7c6c2, 0x2f55ebf4, 0xcc1f3c4b, 0xaf9c5fc0, 0x1bc1f1f3, 0x651c251f, + 0x3709b205, 0x0d7a43ff, 0xba841be7, 0xdf7f14b4, 0x466abd40, 0x8264a73a, + 0x53ed8753, 0x4c7d415e, 0x60113d34, 0x95f0bbfd, 0x8284bf18, 0x1ec37cb2, + 0x65f377b6, 0x9fc46a94, 0x221dc727, 0x0b8aecbe, 0x2e9f1364, 0xebc5dc6c, + 0x855bb34a, 0xf286b31d, 0xbe79f122, 0x5c2ffe37, 0xbe17ff06, 0x04e3fc4d, + 0xeb7f49c7, 0x7d68c850, 0x797b2d4b, 0xef954bbf, 0xc3d24fac, 0xf72cb8ed, + 0x39c5772e, 0x1c3e1386, 0xeb8e9d0a, 0xbe0a256c, 0x1c93a506, 0x2764082f, + 0x0fe1d962, 0x3db3720c, 0x112c5838, 0x80e21bdd, 0x0525dee8, 0x41f48e0a, + 0x0b4f16ff, 0x9e6de1db, 0xcbdf8656, 0x8ab3c604, 0x5ef4acaf, 0xf9a5cdf8, + 0x6d5f812e, 0xdf8c37fd, 0xd1a0fac1, 0x8eeafd81, 0x12538f02, 0x08846e38, + 0x5d2932bd, 0xab4265f0, 0x72d5f5c4, 0x5350425e, 0x94e8271f, 0x7c491ce5, + 0xc1ea7cba, 0xb0a5478a, 0x858b8c3c, 0xe6249896, 0xd7c2876b, 0x956be20e, + 0x471f917f, 0x7bcf11eb, 0x3ebf602f, 0x5fe61bf0, 0x3c5479e0, 0xe6bc214d, + 0xed3af06a, 0xf69d7832, 0xfb75e26d, 0xec841c00, 0xdf188ef5, 0x78def4a6, + 0xf85d2fbe, 0x57be2a31, 0xabcf065f, 0xaf3c21bf, 0xb8f1b74e, 0xcfeef8d1, + 0x47d3451e, 0x721f775d, 0x72357c5a, 0xd153383a, 0x33f47a53, 0xfdd37bf3, + 0xe9e5bd27, 0xeb4bf4c9, 0x37fd6d2b, 0xbc68f74c, 0x095ac345, 0x3e962d5c, + 0x4eba48f4, 0xc21bfbec, 0x0cd0d8e3, 0xee363f8d, 0x8fe35bbc, 0x4a88c78d, + 0xa3deb7eb, 0xef5b5729, 0x31bfb4d7, 0xfea69575, 0x4d5adb26, 0x4fb92dfd, + 0x39b7ca68, 0x95f94436, 0x35f5351b, 0xea6adfce, 0xd6ec3767, 0x3c6dcfd4, + 0xe79fa9a0, 0xaca69bfd, 0x07a771e2, 0xe5da3e38, 0xd2f12b31, 0xc1158624, + 0xc1891540, 0xec43a70d, 0x9a06965f, 0x3925d8ab, 0x67fec2da, 0x4555df91, + 0xfec95461, 0xfd043d86, 0x9f12ab1e, 0xebdc32a5, 0xdf7eb1b1, 0xb865c9e7, + 0xe250e3df, 0x078652b3, 0x2e254e3d, 0xb68c3173, 0xf74c9e0b, 0xc7a40c80, + 0xe91697e4, 0xe5301700, 0x3bcaff8f, 0x3a0f8b42, 0xaed71474, 0x49f2f654, + 0x3e1fe7c5, 0x49f5fc80, 0xe541c983, 0x1b1fddf6, 0xf9bdf96c, 0x1979f665, + 0x367c119c, 0x066ff1bb, 0x2366b3f2, 0x21f4b7cb, 0x821909a7, 0x00fdc93f, + 0xcc330bd4, 0x7d414860, 0xe4866330, 0xeefe0268, 0x7e862485, 0xd64fd637, + 0xe584df83, 0x6fde8b1a, 0xb9a5e78a, 0xdf3fe8cc, 0x26099621, 0x1ea9783d, + 0x2e399252, 0xda3e9dbf, 0x329c1e50, 0xefdf80dc, 0xfb1bbf20, 0x18b4b4cd, + 0xb9deeec8, 0x0f9d87ff, 0xec3c3d60, 0x1e78e62d, 0x7f495826, 0x75f7de4b, + 0x2ff44717, 0x384d482f, 0x09d7c119, 0x8f14c324, 0x93808e4a, 0x0c7bd4e2, + 0xdeb6cd8e, 0xe4523efd, 0xb12cb269, 0xd57a16ff, 0x8524dbe4, 0xb7f713e5, + 0xacfb84df, 0x7da01e27, 0x39fc1836, 0xef57e405, 0xbebabf66, 0xd1015574, + 0x74827ea9, 0x8e1054cc, 0x3f1bea6f, 0x5a3dbf65, 0xcbc3473f, 0x808e3fc5, + 0x43eff995, 0x17e67ecf, 0xf76a0e35, 0x145cb9f8, 0xc6455574, 0xfdc6b343, + 0xa738a658, 0xef1153ec, 0x1e705f94, 0x3bee0ef9, 0x5bfc09e8, 0x8f3504f9, + 0xa215e6a0, 0x1eaa14f3, 0x757f7399, 0x5bf71b82, 0xfa156191, 0x8d3e3cde, + 0x5017a8e9, 0x1995b7d5, 0xc4f3f4bd, 0x67eb4b8c, 0xac37fd6d, 0xff94af9f, + 0x5d85536b, 0xa3fbe68d, 0x6818b753, 0x477f2a9d, 0xea2cfff3, 0xaacff383, + 0xd45e7c97, 0x351633d3, 0xaba5ca1b, 0x96a5f7e7, 0x8e0e2213, 0xd95f0bb6, + 0x8e98d81e, 0xf1cc9572, 0xc7be4985, 0x950f7941, 0xf467f70e, 0xca1ea7f2, + 0xa53fb4b8, 0xe3d6ffad, 0xae731380, 0xc6822ece, 0x7bdf589f, 0x665f4fdf, + 0x9b7f4fdf, 0xd4363efb, 0x80f970c6, 0x4eb239f6, 0xc4f88bd4, 0xdfe43a02, + 0x71cc9f6e, 0xe6f4e2e9, 0xa0678a78, 0xfa4f1434, 0x0c9b496e, 0xde821fe4, + 0xfc821fa9, 0xcfe148b9, 0x4bbff00e, 0x8f0758fc, 0xcb84a59d, 0xb7458aa2, + 0xfc5b9e92, 0x278c21b4, 0xf9c9dffe, 0xdfa53a92, 0x2376cb52, 0xb3e977ed, + 0x38ea76da, 0xf3682fb5, 0x371575a6, 0x1bb6029e, 0xd5f3ce01, 0xdbf6d76d, + 0x7297119b, 0x71659632, 0x72fde114, 0xec8bb4fa, 0x7ca221ba, 0x85f9c3c1, + 0x7fdf1983, 0xa6115bc2, 0xf5bddbcf, 0xd197bbcf, 0x9b7eef3f, 0x8f9a27fa, + 0x8d67b8e5, 0xcaafcf44, 0xceec5bc7, 0x556eb433, 0x9de8f73f, 0x77ac4cd7, + 0x226d8bba, 0xefcf7a2f, 0x4f89e29b, 0xb10700be, 0x3f257cc3, 0x8fcd5f3a, + 0x47e6d1ae, 0x39f875c7, 0x84f6370f, 0xe90e29af, 0xe5eede5e, 0x21d95d3c, + 0xcb059377, 0x94e839df, 0xb91a3fc9, 0xbad325d7, 0xf546ff55, 0x2c7ac277, + 0xe71df58b, 0x5caf3359, 0x5176a9df, 0x76d187b5, 0x5cd434b0, 0xcc6ff645, + 0x043d96f9, 0x7a3caebf, 0x10bbddb4, 0x9744f427, 0x847c5fc1, 0x63578cfc, + 0xf7a19b1c, 0x853233fa, 0x3bcd319f, 0x47f2c0cf, 0x36f287c2, 0x5b9b9155, + 0x9919dd93, 0xc534ce38, 0x4ecce85e, 0x6ad1d903, 0xd3e7e3b9, 0x3202af89, + 0x7def09e7, 0x7f179de8, 0x7e7cbb65, 0x09fadea1, 0xc5fd1ffb, 0x703af519, + 0xaa317c53, 0xfc9a36ca, 0x28db8a18, 0x11e6a86f, 0xb02fdba3, 0x72651657, + 0xe022ab9e, 0x17acf5a4, 0x5e8fe9eb, 0x35678df5, 0xe6fecb79, 0xb62b6faf, + 0x8f908fce, 0xc4f665ef, 0xe693d689, 0x94afbd30, 0xc5bffe2f, 0xf065932f, + 0xf367684a, 0x7ff09f25, 0xb3c1f841, 0x0e70c020, 0xc1ba1884, 0xf351e7ca, + 0x6ef0c1c1, 0x9b3c3170, 0x49925ee5, 0x3421ae7e, 0xf3aaf888, 0x88f32fe5, + 0x286f3a6f, 0xaf832e6f, 0xda293cef, 0x691eebff, 0x77bbf9e3, 0xf898797c, + 0xc321fbb3, 0xbb8de915, 0xd10f9d93, 0x57cfa37a, 0xf32f1cde, 0xaee40e39, + 0xb1a8b961, 0x61303e8a, 0x3639b720, 0x27e59d34, 0x6f0737ac, 0x3ce6f554, + 0x4c7f97ec, 0x960d7ac7, 0x363b3e48, 0x58ea0d6d, 0xa417f2c4, 0x6f2a64fb, + 0xcbf9f517, 0x96127d13, 0x4462cbf3, 0x3e893dfd, 0x2878a748, 0x173972c8, + 0x3ce1f580, 0x2ef17a10, 0x313ef270, 0xb090c832, 0xe69d82ff, 0x858f9c51, + 0xffe91660, 0xfaa38a02, 0xcbdfd388, 0x30bc7a14, 0xc2fbe843, 0xe45e6d4a, + 0x107d143f, 0x92fcaf6f, 0x72c861f0, 0x261608fa, 0xaa7d1e05, 0x3a41f288, + 0x75f284d8, 0x3e7eecaa, 0x15fb54df, 0x53372bdb, 0x7012adbb, 0x336de2bc, + 0x738b36f9, 0xe79141c5, 0xaab36764, 0xb6ed477e, 0x7f4c7e29, 0x1c7ec578, + 0x2b96f7f7, 0xc53f58af, 0xc79f9c6e, 0x2f3ca50f, 0x7e64f797, 0x85b0f350, + 0xe4bc10cf, 0xdddb1727, 0x143f493b, 0xb42c011a, 0x1c4467fe, 0x9c30d005, + 0x7e8ba3f2, 0x9f91d26d, 0x639a1ef1, 0x00f801c8, 0xff826ee3, 0xc133f18d, + 0x4cfc63bf, 0xcfc618f0, 0xf8c23f04, 0xf382e099, 0x42283123, 0x0f39647a, + 0xe7173e0b, 0x7debd17d, 0x3ab7c553, 0xe7919b7f, 0x19bbb78f, 0x7ef43dbf, + 0x0e747c15, 0x743135b3, 0xf825d24d, 0x73edbbad, 0x0fed2f3e, 0x6439ea2f, + 0x655efd74, 0xf5db051d, 0x5a0bff6c, 0x230bf183, 0x69947dda, 0xefe7ba64, + 0xe34f1138, 0xf07b5977, 0xcb7094eb, 0xfca27593, 0xc659e651, 0xf9ddbc6f, + 0xe515e125, 0xa3ed14fc, 0x279df5a0, 0x7c788bcb, 0x75a364ab, 0xdc71d684, + 0x688fb510, 0xdafba83c, 0x9478189a, 0x91dd6ffa, 0xbd413b41, 0x886e4203, + 0xf6bea48f, 0x3bd78abb, 0xb22a14c5, 0x5ca67ae2, 0xc2fa1b94, 0x3c7dbc7f, + 0xca9d79e3, 0xb879ea6f, 0xdd2a5fc2, 0xa3be56ae, 0x8d7203c7, 0x415cefd0, + 0x7646d4ba, 0xf93c42e9, 0x559e7c85, 0xf59ef246, 0xbbd3ed16, 0x8dbb065f, + 0x7f2358f9, 0x9d0a5905, 0x66df9814, 0xb6bd1174, 0xbacc9db6, 0xc9f4c2db, + 0x87ed805a, 0x7935d967, 0x2fb2fccf, 0x0a54f97e, 0x54d2b7b7, 0x6ac6c277, + 0x5dff8e2b, 0x6837eef3, 0xc7adb34b, 0x3cb113aa, 0x47da5537, 0x7d2d9e70, + 0x968d9262, 0xdff5e3eb, 0x1f7e3b95, 0x8eadd489, 0xc6e7f61a, 0xb0899293, + 0x58e6550f, 0x29ec6c3a, 0x35935b57, 0x87531be5, 0x64dfda6a, 0xdfd4d4cb, + 0x53423b92, 0xab7bceaf, 0x5da6b463, 0x83285261, 0x07dc3ae2, 0x966c05cb, + 0xf689767d, 0x11e6e87d, 0xdcfc9e58, 0x53720e1d, 0x93f52ab6, 0x88f955b7, + 0x4f88dd1e, 0xa7543a23, 0x7baed74b, 0x8a8b068a, 0x7edb6a1b, 0xbb69cfb3, + 0x9fa1b88a, 0x88196178, 0xe2fefb73, 0x0178e886, 0xa493e7f5, 0xbe5f0b3f, + 0xe384dadd, 0xe2fb2d6e, 0xf3ee1b1a, 0x238c2cb6, 0x7128dec8, 0xd3fc7f44, + 0x4d922723, 0x1901cff0, 0x3fc1f736, 0xf8543f00, 0x6fc9c051, 0xf7933fa3, + 0x3fdbf5d5, 0xfe71bf48, 0x8dc8abc0, 0x7df2a302, 0x5bc74685, 0xf53f292b, + 0x5ce81957, 0x3ae02e1f, 0xfd217eb0, 0x1ef9872d, 0xa3f8deee, 0xddfc2921, + 0x9d69ae4b, 0x935bff92, 0xb555f8a5, 0xa4347fbb, 0xf70f5c28, 0x87b4d31e, + 0x3447a507, 0xb5d387e5, 0x3fc6c7e5, 0x3fbfd912, 0xfae16cbf, 0xca374679, + 0x499fc2e9, 0xfa1f5f4e, 0x293d67a2, 0x5b687e8a, 0xe4f6fac4, 0x5b4625ee, + 0x75f6ef5c, 0x2de51e38, 0x6f63f617, 0xa7753d55, 0xd57d0d0c, 0x73e753af, + 0xbdf3bd7c, 0xfb27b887, 0xd8457de6, 0xdc12f7e1, 0xd93e48c6, 0x6fce2598, + 0xf13c373a, 0x9e7467d0, 0xaf88aafb, 0xfd85133a, 0x4a7ed828, 0x3a3b23a7, + 0x8157f040, 0xbb23a835, 0xd638bdd4, 0xf567280b, 0xbabce24b, 0x4223f242, + 0x55919aef, 0xccecfb7e, 0x9fc8cd27, 0x1a74ebef, 0xc14ddcbb, 0x64779616, + 0x764a9ccd, 0x3dc4f203, 0x9f6bafa4, 0xd840b23b, 0x37a14ad7, 0x29ff10e6, + 0x65500b76, 0x7a08ffd5, 0x19e918ec, 0xbb950bc2, 0xf6fd9d9f, 0x3fcfc8cf, + 0xe506f420, 0x7ecbbe15, 0xcda2d381, 0x9cb0b437, 0xc8b6dfe3, 0xac575bfb, + 0x1b36f63f, 0x1ea35f2d, 0x9b4b2779, 0x5f43e877, 0xd20b7dbc, 0x9955feb3, + 0xdb9d01ef, 0x08804f69, 0xc78d11fd, 0xcb32f5fa, 0xdaee5ab9, 0xb9224f29, + 0x3562fba0, 0x0df1bdf9, 0x2bff214e, 0x15be62ac, 0x4a9f3f63, 0x9b457a76, + 0xe9725c5e, 0x32359e6f, 0xd9e622d8, 0x98b4cbba, 0xfeba9aec, 0x4fa2ab6e, + 0x3499feda, 0x55c04f3e, 0xf457d87d, 0xe4290c0b, 0x1c48d417, 0x1b6e1ecf, + 0x3a78495c, 0x36df812c, 0xddb8878a, 0x269beb8c, 0x16efa386, 0x6a428bca, + 0x51e69eae, 0x9e355ae3, 0x0eeda3bd, 0xefb1f93b, 0x187f9f6e, 0x7b460729, + 0x1d37cf26, 0x1f77ecbc, 0x51a5744e, 0x72b2649e, 0x6270e1ff, 0xedfc83a8, + 0x256363c3, 0xe380cfba, 0xabe34c3f, 0x706c3afb, 0xbef035a5, 0xf3a97c94, + 0xec62f97a, 0xaa89c795, 0x1f96ad9e, 0x9d0b7f1c, 0x2b02cfdf, 0x6453b3c5, + 0x9fc357e1, 0x7aab3c84, 0x240a5eb5, 0x66cf3ad1, 0x53b54d4d, 0x27f1a53e, + 0x59b7de4a, 0x4aefef73, 0x389eeafd, 0xf98979fa, 0xe221cea7, 0x338aba8d, + 0xf38e9f3f, 0x4fbc61d7, 0xd6fcddfe, 0x7f0947dd, 0x4f7df1d1, 0xe66ff57c, + 0x67c77b7b, 0x62f651ae, 0x727c33ca, 0x8ef43a78, 0x02e27ad3, 0x1cdcbfd5, + 0xa8d6e7cb, 0x287c8558, 0xaef1fafc, 0xb12b23ec, 0x18bfe3fe, 0x8cf75d98, + 0xfdd745fd, 0x7377be58, 0xe3f9e32c, 0x1d92f024, 0x8e5378f9, 0x160d8bcf, + 0x64ed42e9, 0x1c5b60df, 0x7a9cd39f, 0x2f77e726, 0x77f27e50, 0x4843f676, + 0xc2e86c7e, 0x46fba29c, 0x21a5fdf4, 0x62dc0fdc, 0x5c8a85de, 0x7ff25bca, + 0x5bf5415a, 0xa13f3992, 0x33f4efd2, 0xd60a4e31, 0x02fe09fe, 0x19deb22b, + 0xee927bc9, 0xbdd32e29, 0x7c84a1f0, 0x3dc035d9, 0xf4bae88d, 0xb7787f97, + 0xb553f71c, 0x945fb6e5, 0xbc96fae1, 0x9c681033, 0xf6fb5d30, 0xccedce1b, + 0xe0aff214, 0x31f3d967, 0xfa1113be, 0xa24b7964, 0x3adf5ca6, 0x422277c4, + 0x81032d0f, 0xf895a863, 0x9156a09c, 0xfb9338ab, 0x72d75a4e, 0xf4ca8fba, + 0x474ff713, 0xe11579d1, 0xe31371ff, 0xeecf9a3f, 0xb2f88bb1, 0x24f3cd56, + 0xe4953983, 0xd7f02dd6, 0x26ce78fd, 0xdad6c78a, 0xcfb95493, 0xc91f9a9e, + 0xaf75ed9f, 0x24c79e71, 0xf4c639ee, 0x90ffae7d, 0x2fdb913d, 0xc9aa7f34, + 0x7e35d533, 0xd4ffc9a1, 0x01fb01e5, 0xa36c9aa3, 0x52b841ef, 0x34cccba1, + 0x6df89797, 0x2f13cb69, 0x3e7c641f, 0x34fbdf7d, 0xd30b7eef, 0xf12a0e0f, + 0xb5bc5458, 0x91567cd0, 0xff1a8dbf, 0x2386e4fc, 0x38ff9405, 0x014463b9, + 0xcbe769e5, 0x4abf9381, 0x1f4e7be7, 0xdb70803e, 0x2f39b7fe, 0x5edebd1e, + 0xa12418f7, 0x1f696a87, 0xc7ff74c9, 0x72ceceb5, 0xf1c3f42e, 0x7f19f347, + 0xfbba3e6a, 0x41e3bee3, 0xf8ea9d75, 0xf1d4faea, 0xdacf76d5, 0x69d21c45, + 0xfd90140c, 0x9873a22f, 0xc6757d88, 0x2d120a07, 0xda2addf4, 0x82396125, + 0xf3ddfedf, 0xa9f3e8aa, 0x2559739e, 0xb754751f, 0xe4467bea, 0xa7968ebf, + 0xbd48ee0c, 0xa9cf15fb, 0xf7aaf5d4, 0x16ad3b69, 0xb0de6ff6, 0x692be72b, + 0xb0ed4690, 0xff27e1de, 0x41c99b7b, 0xe4d3bc7e, 0x5072403a, 0xfdf3f46b, + 0xd39fb535, 0xd1efe6e4, 0x44eef979, 0xe53dd023, 0xf9ca81ee, 0xf5813fef, + 0xdba1c50a, 0xba558f08, 0xb0966d86, 0x67f5543e, 0x9efc08d1, 0xf546f747, + 0xf9013f61, 0xdb50a8a6, 0x6d1fbc3e, 0xa0b67179, 0xaeb25163, 0x4bf938cf, + 0xd04dce85, 0x16790b22, 0xc15cb476, 0x8e48ee3b, 0x14ea6bf4, 0x6f1ddf3d, + 0x6ec1d2f6, 0x4f714ef9, 0xdfef5cb5, 0x00b5104d, 0x95d12634, 0xaf18bf49, + 0xc9cfab55, 0xbb62cc86, 0xf2ed823c, 0x8fdc8518, 0x9f7c0d48, 0x35af7c35, + 0x01bc1320, 0x609d0c42, 0x324413d5, 0x2e009c30, 0x81a11386, 0x666824e1, + 0x30b43378, 0x0c0215bc, 0x137f7ae1, 0xd0783db0, 0x4dd3feca, 0x9764748b, + 0xedf7a68b, 0x16cf0f97, 0x7c7faa7a, 0xb92f96a0, 0x544c7c7a, 0x8bf6e1ee, + 0xccb96197, 0x4c5e2af7, 0x2fd89fc4, 0x04a97c06, 0xc79042c7, 0x9c8c4719, + 0x8dbaf149, 0x8156f9ef, 0x57d5cb93, 0xa0d28f88, 0xebceef5b, 0x7d552f03, + 0x828e49f3, 0x81b25797, 0xd7a545f9, 0x17a16c9c, 0x7c61ba54, 0xa0f64a9f, + 0x38613d37, 0xb628b3ad, 0xaa1b13f2, 0x21ecea8c, 0x6fa8f4d3, 0xae57468b, + 0xfd321524, 0xd1a7ebb9, 0xf2a2fbbd, 0xa8e897ca, 0x3ceccefe, 0x1cac2e51, + 0x17a0706d, 0x9b4fe52a, 0x72b76580, 0x468cdc7f, 0xc98dee80, 0xd85ce299, + 0x3723dcad, 0xe8abe9c9, 0x01e998be, 0x8ee37d60, 0x5fb00801, 0xf246dc8b, + 0xf9f613e2, 0x5fa0ab5e, 0x5c7bac71, 0xbbdd3176, 0x90dbc7f7, 0xaaaef70e, + 0xdaf7cc1e, 0x63fc628c, 0x5e236d03, 0x4c997c43, 0xbaab5ee2, 0xc6f7ac5f, + 0xd9283960, 0x87a63656, 0xe3aea5d7, 0x7c9de60a, 0x1b3f79a9, 0xf5469ee6, + 0x5c707360, 0xefb15431, 0x3b95b6db, 0x875c2470, 0x8c11d795, 0x88d95ecb, + 0x5cd29355, 0x777da873, 0x39c3e09c, 0xfee2a744, 0xe76cdae1, 0xbe3eecac, + 0xfcfaaf77, 0xa5e93f65, 0x7042e07f, 0xeed9159c, 0xbd5da8bb, 0x347c382e, + 0xb187efd2, 0x6f891a1f, 0x9096be54, 0x0f10b398, 0x19f04e4d, 0xac2a5e59, + 0x6659fe3d, 0x17ba2e58, 0x9f8878e0, 0x0aab9722, 0x992845dd, 0x6087b0d1, + 0x0ab9bba9, 0x869e686b, 0xbd4fdc6c, 0x7c485a1c, 0x8ef895d2, 0xb72c1ff1, + 0x2a7f04c3, 0xd76dacfa, 0x8a860781, 0xe4220ba2, 0x17d77eb2, 0x74807d9f, + 0x71673faf, 0x9df2f350, 0x7c52561b, 0x7a23caa0, 0xa37d1a87, 0x5698e7ca, + 0x961c1f13, 0x016ebcef, 0x4efb1fb5, 0xede9267b, 0x26c1ed71, 0xdbbb9f72, + 0x72150c8e, 0x9ff5faa2, 0x5f63574b, 0x3f91994e, 0x37f9c412, 0xc43b4dc7, + 0x250af7f9, 0x2f6549df, 0xa1c457ef, 0xfcb9bc6a, 0x6f7c1bc0, 0xd2f18718, + 0xeb28977e, 0x5df4fc5f, 0x459f12b7, 0xe35223bf, 0xdda57ad0, 0x23df76b2, + 0x77e88fb4, 0x8714f545, 0xaefff416, 0x2ae9fea8, 0xdfa3438e, 0xad9b3d15, + 0xbb14ade4, 0xb9ff8a08, 0xfb436948, 0x685c70b3, 0x6f7099f4, 0xe9599e2b, + 0xcd3952b0, 0xdc3d60e2, 0xdb2201b0, 0xccc9d3c3, 0x2f1caa2b, 0x5fb12359, + 0xf0b3e2ad, 0xd6939339, 0x60dcf851, 0xcfd197f6, 0x95d1f717, 0x19bd223c, + 0x5b0577a0, 0x74194313, 0x5b6b74bf, 0xf0fc83ae, 0xf09c7a3f, 0x3ebc2191, + 0x96a80e35, 0x77a2a85f, 0xc6eee742, 0xeef88af8, 0xcc9a6fc0, 0x96b15e58, + 0x2a50ff5e, 0xfc813738, 0x32fde2a9, 0xf01c68f8, 0x7941553d, 0xbe4201df, + 0xb03aa94d, 0xc623e045, 0x7d6c0036, 0x0a4c01e4, 0x937362fd, 0x8e71f534, + 0x13fd346b, 0xf534334a, 0x5de2314d, 0x819d780c, 0x7bf092bc, 0xf5e74491, + 0xc4107e9a, 0x77e1257f, 0x27e3ab21, 0x2377e7ee, 0x9f9cc596, 0x4a349e48, + 0xef24ded3, 0x2baf8994, 0xe86bd53e, 0x70ca1df9, 0x0f4ade23, 0xf3837fa1, + 0xd6d0e98c, 0x40bd04c7, 0xe90e62fd, 0x9308f935, 0x953e5b4d, 0x8627e4ad, + 0x7e4d30c1, 0x82ef07a2, 0xd69dcfef, 0x40945f31, 0x8a2a2fd6, 0xf006cf08, + 0xede37ad9, 0xeb7f081c, 0xc38b30dc, 0xf03aeb4b, 0x30724c92, 0xffc5a5d0, + 0xfc5a19e0, 0xf16b710f, 0x16b1743d, 0x5a0d69df, 0xa8db5f7c, 0x57ba6bc5, + 0x35ccb78b, 0xeded3463, 0x729a95cd, 0x359bface, 0x4df3afed, 0x3c4794d5, + 0x3ed3533f, 0xa6be65bf, 0xa975b0be, 0xb3e55ea6, 0xa460f8fe, 0xbf14457f, + 0x097740e9, 0xffbd183e, 0xbef99a07, 0xe4e7fa29, 0xa1417a28, 0x4f62a67f, + 0xfd3f8cde, 0xe4eb8918, 0x29ff5558, 0x030a8679, 0xd96f71c7, 0x48e2ab92, + 0xce76282f, 0x9839d8a5, 0x5b288cf0, 0x1011d945, 0x1d462af7, 0xdbc55575, + 0xb8857ee8, 0xba725157, 0xda812ab9, 0x9ab7bd47, 0xce692a52, 0x5fdfa3b9, + 0x92aef34d, 0x8fba2413, 0x4625ee28, 0xdf507fdf, 0x6338d561, 0xfde3e734, + 0xf352cbbd, 0x8027184a, 0x9d04e291, 0xf621df99, 0xeb1c83f6, 0xdcd3f665, + 0x59fdb7ec, 0xe9be7372, 0x38607376, 0x43a7f7f1, 0x883935dd, 0xc39d2eb7, + 0xf29e7ec6, 0x369bab4e, 0x7e9cefc6, 0x2dde8d3f, 0x4b986375, 0xabd1ccf9, + 0xbd1a73ff, 0x5be5c24b, 0x9c222583, 0x39399fa6, 0x683999ee, 0xd64b8e77, + 0xdf634647, 0x199cc737, 0x44cc764e, 0xf8a3fbe7, 0xd5167bdc, 0x0653e4f7, + 0xdf50fee3, 0x2f367506, 0x40fee39f, 0x0ce4f8e2, 0x2116560d, 0xca0c6bbf, + 0xaf1151bb, 0xa5f056cd, 0x94b36bc6, 0x10e38ff9, 0xcf9f518b, 0xe333fd6e, + 0x876a5965, 0x3835e712, 0x5dfe38ac, 0xf8a32cc3, 0xb473979e, 0x6af9c443, + 0xfe5436fc, 0x72f5f62a, 0xa596aff7, 0xa389ac7e, 0x3ee485e1, 0xf9d194f3, + 0xc5bef0b0, 0xc6d7c7f8, 0xbe3a1db2, 0x8ef38d36, 0x38bbf1e1, 0x41bb30af, + 0x6e7baf7b, 0xfe1a7be3, 0xa63de79b, 0x84a60fa9, 0xff71430c, 0x4c8797c1, + 0xafe22efc, 0x84a98773, 0xdba458e2, 0x757f4413, 0x39e3e0fc, 0xcbbe6813, + 0xaf0cf3ef, 0x57b95da3, 0x43f3eeab, 0x072e51cf, 0x7ba8c13d, 0xdc4d5e4e, + 0xebe342ab, 0x73fe4b90, 0xe8e01a48, 0x96938f2b, 0x76c5e22b, 0xbb697de5, + 0x5db4bef2, 0xaeda0f79, 0x576cffbc, 0xefaa7fde, 0x7025db73, 0x5992bdd2, + 0x79c5ed92, 0xf73efce9, 0xfd67da45, 0xbd0150d2, 0x0c2fac5f, 0x7e6491ce, + 0xfa07fb9f, 0xdcfbc7de, 0x41750902, 0xc73ce728, 0x7807a70d, 0x9f62c8bb, + 0x2889f2de, 0x9c7c851b, 0xcb01f2df, 0xba078fc3, 0xd7fe635f, 0x5be27ec9, + 0x3e251fef, 0xd067064f, 0xde0af538, 0x11c9eeef, 0x737b33e7, 0x0a8979c4, + 0x7a11c83f, 0xce413ced, 0xcd963d4b, 0x9bd6adef, 0xce15bdf8, 0xbcdeefc7, + 0x36be44bb, 0xa8dc5dfa, 0xa4fc993f, 0xcf7cd43f, 0xce711c91, 0x48e5ef4c, + 0x6a7e52ee, 0x82e5ef12, 0xbef4e181, 0xb93fee8e, 0x04387e28, 0x2efef14e, + 0x3be45367, 0xca392398, 0x41bbbcfd, 0xf96f3ef3, 0x921fe381, 0xb8e4f13e, + 0xd53e12cf, 0xe3cb6377, 0xf7bfb377, 0x4f03e635, 0x131c70e5, 0x92aa7e14, + 0x3f0fec0f, 0xeb020b9d, 0xefc3d2f2, 0xb3de22da, 0xbc553af1, 0x8f0ceba8, + 0x57fe6973, 0xf96a5af3, 0xd9d586e4, 0x7f884f24, 0xa5946f91, 0xe8fb53b9, + 0xe82b929f, 0x75cd333c, 0xda5fe691, 0x617ef220, 0xefbe68fe, 0x0787d27d, + 0xd7de7d2c, 0xef47fb57, 0x03aef973, 0xe7dc0f8c, 0xc45fda1c, 0x2372e33e, + 0x76d9d9f6, 0xed9e5d64, 0x55f7f7ea, 0x069b91df, 0xd49adc60, 0xad1d1e57, + 0x65ff844c, 0xd30ffb52, 0xe3a3fb6b, 0x56ea794d, 0x4ff46b92, 0x0d712bb6, + 0x0be25fd9, 0x376efed5, 0x7a8c1c63, 0x63ee0a4b, 0x12f34ffd, 0x79223fff, + 0xf9aa0ed9, 0xed09268c, 0xdc0de51c, 0xc82ed92b, 0xc41c5ad7, 0xf791dbbf, + 0x7af7c402, 0xb1e72c67, 0xbae7e2a3, 0xe1097758, 0x55bfdef1, 0x7af8a60e, + 0x566e5fdb, 0x976134e2, 0x2cfe158a, 0x1f69f9a6, 0xb7cc0979, 0x4afaca45, + 0x0fec0dcc, 0x16578197, 0x0f250b79, 0x269f76b2, 0x4d3ffbbe, 0x00a28ebb, + 0x0000a28e +}; + +static const u32 usem_int_table_data_e1h[] = { + 0x00088b1f, 0x00000000, 0x51fbff00, 0x03f0c0cf, 0x0058f78a, 0xc3031db1, + 0x86067b23, 0x06060770, 0x1c840631, 0x293af0ad, 0x8a4bf4ca, 0x03483030, + 0xcb102cb1, 0x4179f103, 0x820b8606, 0x542febc4, 0x28d7b041, 0x01143030, + 0x3a4025f9, 0x06180958, 0x10317640, 0xeff2021f, 0x202bf101, 0xc0cca5de, + 0xc0c8acc0, 0x5cc408a0, 0x82a25c40, 0x0252fcdf, 0xa8ca2af2, 0xbe3400fc, + 0xfd7e128d, 0xe5f8cafd, 0xc79012e7, 0x92aa1786, 0x28cf1f1f, 0xf8103bd0, + 0x5f2a39aa, 0xc1818cd5, 0x63562804, 0x435fe101, 0x8a03ef92, 0xf94199a9, + 0x07b4c0fa, 0xc7375fe4, 0xa04fee6e, 0x7e5014bc, 0xee690596, 0xe54261b1, + 0x684071fb, 0x58407700, 0x0003a800, 0x00000000 +}; + +static const u32 usem_pram_data_e1h[] = { + 0x00088b1f, 0x00000000, 0x7dedff00, 0x5514740d, 0xaeade89a, 0xfa4eeaea, + 0x84909527, 0x9ab0690a, 0xc5b18480, 0x21080982, 0x6fc24a98, 0x55d18cc8, + 0x45a88de4, 0x91f91070, 0xce332e80, 0x931d0f71, 0x27190469, 0x47e65cfa, + 0xfbf34df6, 0xc9e38de0, 0x0871ca30, 0x94180748, 0x4f2f7d9f, 0x99d9bc7d, + 0x76666b39, 0x04e61b9e, 0x7171946d, 0xefbe7c4f, 0xdd16f7bb, 0x380ea9d5, + 0xbeebadae, 0x6f7af478, 0xbbf7badd, 0xf7eefddf, 0x496abf7b, 0x2d4a202e, + 0x1fe31f21, 0x0475ff94, 0xaa6a6421, 0xce6cf50c, 0x24246ed3, 0xbcd1ec78, + 0x19098beb, 0xe7a5c4b5, 0x6e1fa3c1, 0x8fe53e9c, 0x227e426e, 0x115dc590, + 0x9d15d442, 0x9415726d, 0x44532bf7, 0xea91908d, 0xbe270986, 0x0999484a, + 0xfe84bcfd, 0xfeff0c7d, 0x242ce948, 0x0a8b5815, 0xe6a637cd, 0x7ef54ab5, + 0xd2fb5fe9, 0xe690b7fa, 0x8e0033c9, 0xac4dfc9f, 0xf213f4cc, 0x1e3bce24, + 0x322e1a9f, 0x7de2e00d, 0x1ff0f5a3, 0x941a3f98, 0x2102ede3, 0x202b4ba2, + 0x48be2122, 0x997be092, 0x6360fcf3, 0x8dc904eb, 0x35e6b66f, 0x843d6007, + 0xe872efcc, 0x60c09b37, 0x417aa925, 0x0146a18d, 0x448f8eee, 0x328eeeba, + 0x3de17a42, 0x810ae922, 0xa4291e72, 0x3fca7b78, 0x3bd6246e, 0x6881fe7a, + 0x55417e30, 0xc6d34492, 0x1091bcdf, 0xa6c843cd, 0x765a5e8d, 0xa978546c, + 0x21026d12, 0xd1a8dddf, 0x256363b2, 0x9e84b72d, 0xfc03ade9, 0x052e658b, + 0xb59b2220, 0x922d15db, 0xd85dcf1a, 0x09d3ade2, 0x631d1599, 0x5fa18494, + 0x6a908b89, 0xdbd412c0, 0x13c64224, 0xf725c28d, 0xfcf0a02c, 0x33cd6940, + 0xd176a923, 0xbf5c4c45, 0x88612aaf, 0xae9f4780, 0xaa5a4bd4, 0xd315fe9d, + 0xc25b9df6, 0x42e62fb8, 0x880fcbc4, 0xbc4517de, 0x07beb29b, 0x75bbb7fa, + 0x2b8c3d75, 0x845ef0ca, 0xd5f481d1, 0x20779c14, 0xb23e613e, 0x7fb6deb8, + 0x128e11a3, 0x15bb4f7c, 0xb3afcdf7, 0xfa476b7d, 0x7b97d872, 0x8a1d38f9, + 0xd27a30a1, 0x893d1389, 0xfc9e9d8a, 0x423d3b11, 0x0df6f28b, 0xfef30ebc, + 0x353d6850, 0x7d19d607, 0x81efa5d0, 0xa74251b6, 0xe35be380, 0x3a2e22ad, + 0x5b2f55af, 0x2afa2521, 0xd28bc7d3, 0x6f7b4075, 0xfb68779f, 0x5c14a02c, + 0x892f2cdf, 0x29080afa, 0xd6e8c4bc, 0x3cf89108, 0x5e48ebc0, 0x0f75059f, + 0x9243d12c, 0x650fce22, 0x03a04279, 0x7b9f0efd, 0x7dc34788, 0xb43c11e8, + 0xeb34627f, 0xd64b7f0f, 0x64e7d316, 0xef65868b, 0x6fd0b5f1, 0x7fb625ce, + 0x7c1371a9, 0x1cffdedc, 0x40bab30e, 0xe1112ecb, 0xd581b283, 0x425fbce3, + 0x75efa02c, 0xa90a0f1d, 0x043f3876, 0x2da7cfcf, 0xef5e7f3d, 0x39096325, + 0xc2e942a2, 0xe90475f6, 0x50e23d63, 0xbfdde7a3, 0x10b7ea00, 0x3c85bf56, + 0xb48244d0, 0x4452909d, 0x759f6b2a, 0x6d242659, 0xa126663f, 0xd20fb69e, + 0x08a2ec60, 0x33fa79ef, 0x7fbcc9da, 0x9499e366, 0xfed5248e, 0x0b7116bc, + 0x091f7d67, 0x83edbf14, 0xdc99bfff, 0x0642f48c, 0x8633a901, 0x5a559dd2, + 0x65d56efb, 0x6226af58, 0x9678a099, 0x5815df11, 0x9add69c6, 0xca52cbff, + 0x31cec9aa, 0x887bf861, 0xf9e2f734, 0x7b5884f1, 0x9b839e0d, 0xfb241ce0, + 0x3c740a88, 0xe9d13a73, 0xc4264839, 0x7c50c8be, 0xcaba0776, 0x9ebde19b, + 0xf1cb070b, 0x83c5f779, 0xbb67c8e5, 0x7115ec2f, 0xf67ebabc, 0x84940d5e, + 0x9415adf2, 0x56d9aa3e, 0x9503b5a6, 0x7853b465, 0xe9815a92, 0x7e55af30, + 0x6c36f81f, 0xdf018916, 0xc03bd726, 0x124fcb37, 0x2ea82411, 0x64d2c11f, + 0x3a70d7f3, 0x0aba4eee, 0xbb3ac367, 0xa33a5dfb, 0x3f7ff26b, 0xe0579eb6, + 0x9c3e03f3, 0x18e07bbf, 0x7382c785, 0xf7efa726, 0x04cfcd92, 0x2cf13df1, + 0xf1073e7d, 0x000f7084, 0x33def0fc, 0x1d6b3e1c, 0xe9445fc4, 0xead748b3, + 0x8237e814, 0x76586de8, 0xae32fc22, 0x88eba147, 0xfac1dc81, 0xea1f7c36, + 0xd78f4387, 0x651fff21, 0x3ca0f674, 0x4fe3572f, 0xeb52d78e, 0xe9f3f184, + 0x88e057f8, 0x5d6107b7, 0xdd25d335, 0x946afd03, 0xc1a4a884, 0x4c9e0575, + 0xafd635b8, 0xc16bcf93, 0x67c39db3, 0x08e305c1, 0x097f1c1e, 0xbc98f1d1, + 0x60f64c97, 0xeafa3219, 0xd1920380, 0x4de149aa, 0xaf9793ed, 0xfb2fdacb, + 0xcf6a0b3a, 0x9b1c2396, 0xe97d3b42, 0xbd972dfb, 0x60f6c3e8, 0x24cb1812, + 0x91765b84, 0x43d3b29b, 0x206a5930, 0x01a9a8df, 0x2d137c2e, 0x5a0291a7, + 0x6af5e74e, 0x72c1af5e, 0x74d398d3, 0xa68d60be, 0x1ac1f8e3, 0x83f7c75d, + 0xb7af0635, 0x4978e846, 0x8bf58f25, 0xd0e1fad2, 0x75f5c120, 0x83a7900e, + 0x897f3a5a, 0xbc11e4db, 0x0f5b6857, 0x7f189669, 0x48697931, 0xd600ef8c, + 0x2c895d69, 0x69ff2815, 0xf3a7086f, 0xf65e5ea3, 0xf9c932f1, 0xfbc6b115, + 0x8fb59049, 0x46f2b2f1, 0xd7f93cf6, 0xfdf65a2e, 0x4391549d, 0x11f1633e, + 0xc50a8cd5, 0x47c05f48, 0x4c3fd434, 0xe2c0fc82, 0x39f9b303, 0xc39f9094, + 0xa055f8b9, 0x49f94439, 0xec215dc9, 0x45b2abf7, 0x720fe421, 0x5f2cbff1, + 0x54eafd07, 0xad3a4253, 0xb4c813eb, 0x7ffba1a2, 0xe3f16d52, 0x2ca93f39, + 0x42be72f3, 0x7e6cf3cf, 0x8ed0639e, 0x5b5311fb, 0x5950f51c, 0x58df9e1d, + 0x57c4867c, 0x73287953, 0x8f79adf8, 0xa93efa71, 0x0aa27a88, 0x3e7665db, + 0x1d0e86d4, 0x0fb2f6ca, 0x864a585e, 0xcfcfdb8e, 0xf8f89fdb, 0x947cfc03, + 0x10ee6f8d, 0xa5bd5e40, 0x327f7c54, 0xfdf51bf2, 0xdb8f2831, 0xb25aee4a, + 0xf27af00e, 0xf3c74048, 0x7c9836b6, 0xfb385d61, 0x65f1fd78, 0xb8d6bd74, + 0x46bbbf56, 0x690b4f98, 0xff531af4, 0x4e7ca410, 0xe1f2a629, 0xe514726a, + 0x56bfa327, 0xc9f930a2, 0xe9ce39e9, 0xad9793b2, 0x7ba2ddbc, 0xd2a37e8b, + 0x3ace4117, 0x205fc5c8, 0xb8b92dde, 0xc425f890, 0x40889cfb, 0x0a85bbf5, + 0x94e16de8, 0xf2e4683c, 0x47d256e0, 0x9235f7d7, 0xc899e5a0, 0x69e90532, + 0x25cfe561, 0x94c2465a, 0xf3f216be, 0xf97e8431, 0xd64615be, 0x1f9d2075, + 0x0af7fbe5, 0x57481fd8, 0xb74b2323, 0x59ad864e, 0xdf740aa8, 0x2e920c17, + 0x3579c601, 0x42147660, 0x44b3abfb, 0xef6871fd, 0x7a2dfd19, 0xf1bd5e7e, + 0xd5ffda01, 0x6f950289, 0x5e9f2af3, 0x6fe01eb2, 0x17f7b08c, 0x5f25755a, + 0xdaf50f9f, 0xe887b78f, 0x9d38d8f9, 0x4ad4b9d1, 0xd38273f1, 0xf89a82cd, + 0xf0bfec76, 0x73ce97b2, 0xc3eff38c, 0x79611760, 0xcb4ea368, 0x8bc32185, + 0x13abea76, 0x02fe5c3d, 0x9cf5853f, 0x0279dc19, 0x72a7b1cf, 0xe01d59f2, + 0xd489a05a, 0x5cab9d7e, 0xb0066114, 0x502712ef, 0x11effdaf, 0xfa10a3a1, + 0xde9ed7cd, 0xddfa053a, 0x63ab9e3a, 0xe7cc6f9c, 0xf694eee7, 0xc0014346, + 0x609f6673, 0xf9f3df93, 0x7c6f9779, 0x96b224e3, 0xb171da33, 0xb339c600, + 0x7e51d05b, 0x9fb48c2e, 0x55f6866d, 0xee20d1fd, 0x5681eaeb, 0x17bee7aa, + 0x33cb4759, 0x17176797, 0xe760f251, 0x92cf9adc, 0x762ab7df, 0xd36bf6bd, + 0xa9fa6c0b, 0xd5b48fa1, 0x0904444f, 0xdad3e9f5, 0x16b73d3f, 0x8dcb05e1, + 0x7bc3b53d, 0x38ff7b46, 0x25f81385, 0x88977383, 0x7754ccf0, 0x45bef888, + 0x911d1627, 0x8f8a6ae8, 0xd3be1c85, 0x0f945d91, 0xf976d69d, 0xcae9f9f1, + 0xbf48485f, 0xc1b1e286, 0xce7de573, 0xb3f91ac7, 0x9ecb9553, 0xa7fcc308, + 0xf0cea222, 0x54f7a0db, 0xf948bb61, 0x7db17d58, 0x6d3c149c, 0xa9cf38a5, + 0x2bbe6c71, 0xcb7d73e3, 0x6feacf82, 0xf2f0b9c1, 0xc0a73bb7, 0x8ec886a3, + 0xae9053ad, 0xe5d28954, 0x3cfb7183, 0xd815f6ab, 0x6ba6bdf0, 0x2a7eada4, + 0x14daf0d2, 0x29dbb35a, 0xf1bdc647, 0xf89dac57, 0xd9a69417, 0x57b0212b, + 0x119fbe40, 0x5f04f09a, 0x6c894edd, 0x4253b672, 0xa24ca760, 0xa768e284, + 0xed1bda64, 0x3da14b68, 0xf7c48a3b, 0xf877c9a4, 0xb0aa94ab, 0x116faf9e, + 0xd97de352, 0x98570eca, 0xb3e2c3e2, 0x7daafb56, 0xf74e6e0f, 0x5ae9ac03, + 0x7dafab67, 0x7fcdd1f9, 0x559fdb4c, 0xc08ffbd6, 0x5efd82b9, 0x35911ecd, + 0x320c6fa4, 0x1a11b68a, 0x721ec3d5, 0xfd6295f5, 0x96dc925d, 0x299e780f, + 0x5f919791, 0xdf21060a, 0x682ca386, 0x0532590a, 0x7a6267ed, 0x2e0bdfa0, + 0xbc1761f3, 0xfc9c0c27, 0x0efdc050, 0x58e90419, 0xe8ad206c, 0xf360113f, + 0x07e9a5d6, 0xfee2e37f, 0xd9b09213, 0xe1df2e2f, 0x7aaf7c72, 0xdd204e40, + 0xe0697e90, 0x2c61ff8a, 0xf50977fe, 0x21240873, 0x0efe8c7c, 0x26ae57ce, + 0x3602c56f, 0xcc6df76e, 0x277dd7cf, 0xd774c7f3, 0x1c47f2b1, 0xdcbcfd9e, + 0xb2fe62e1, 0xe517e05c, 0x6fa46aff, 0x6205ef98, 0xbc51776e, 0x97027f70, + 0x6fd81ea3, 0x8d43ec37, 0x535dc660, 0x5595f853, 0x6fef5a56, 0xaeddcc13, + 0x25f7e712, 0xcfbfbe91, 0x7dfd9255, 0x59b867e8, 0xd70d9fbf, 0x13fa224f, + 0xe3048f08, 0x12b65a12, 0xee0c6826, 0x5df7f90f, 0x9dffc49e, 0x8eaed691, + 0xd58ee7e0, 0xa4b840dd, 0xa6175ec8, 0xa7138fa4, 0x3fed8cfb, 0xd167eb4e, + 0x4efdc4a5, 0x580bd658, 0x91563f32, 0xe49ea842, 0x4e293d07, 0xf59f89db, + 0x0a4ecf23, 0xdc48a963, 0x3f60284f, 0xa63f7de4, 0xa45149ed, 0x581afbfd, + 0xb17e2bd9, 0x6fc983f7, 0xc212cf09, 0xc77a3519, 0x9f01bd41, 0xa2175868, + 0x7a9f9c02, 0x290efec2, 0xafcc7cc7, 0xc0b6af51, 0xb96506f3, 0xc5766fcd, + 0xcfb291ff, 0x9d5c5da9, 0x41145d8c, 0x732b54ce, 0xa3b9bca9, 0x171f2ec9, + 0x3fd761dd, 0xebb12f16, 0xffb8df1f, 0x5b7c9b3a, 0xad827ab2, 0x3723ef7e, + 0x63e6ead9, 0x2deadb37, 0xf1b6b51d, 0xcf3adfee, 0xb3f97cf6, 0x2beadab7, + 0xab65dfb6, 0x5f7ddcaf, 0xcbb45c86, 0x641e4b69, 0xbf7abdf2, 0x64869d7d, + 0x6832dfaf, 0x97d5b797, 0xc888f5ec, 0xd11a83fd, 0x1af07fa8, 0xfeaa6cf9, + 0x67d7d379, 0x0c85465d, 0xfdb0eebf, 0x96fb72b7, 0x8f944d88, 0xbf16094a, + 0x8344f490, 0xd84df501, 0x8fbf0d35, 0x7f3fcc89, 0x530fb58f, 0x0fba54c9, + 0x66f31935, 0x6fbd678c, 0xdf8577cd, 0x684879f0, 0xb1f655ca, 0x039bce8d, + 0x277a57b9, 0x5d157c75, 0xbc4cbd93, 0xabd2eeb0, 0x67a03baf, 0xf81991e8, + 0x364f36ca, 0x5bf6657c, 0x7252fb89, 0x755b70ed, 0xf314f919, 0x15ee2d5b, + 0x15fff652, 0x626d0efd, 0x98cb6fd4, 0xeb79fb7e, 0x3cb69f9b, 0xd57d3226, + 0x7d38c7aa, 0x8574967c, 0xb577bffe, 0xd035b9e4, 0xf12f8f7e, 0xfec3b370, + 0x55cfc1bd, 0xb5baf42e, 0xe59bbfb0, 0xcbf42ac4, 0x7837f71d, 0x7b9e005b, + 0x533d3a80, 0xc524f052, 0xa7bf36b1, 0x6095f4a4, 0x87fee3bf, 0xfbdf7d29, + 0x9c321ce8, 0xe2936d5f, 0xf0771f9a, 0xcfc525c7, 0x873d7f5c, 0x9577b6f1, + 0x87adcef7, 0x9b1e7825, 0xeaed7443, 0xca751270, 0x67cdce55, 0xb82c7fce, + 0x7b406db7, 0xb936bd42, 0x58b7e966, 0xf5d387d6, 0x504d535e, 0x63e92b7d, + 0x846f93cf, 0xcbfd29c3, 0xcf52ebd2, 0xd30f457b, 0x69581af7, 0x6f79ec48, + 0x03d70143, 0x7ded6c0b, 0x9ee3d139, 0xa955cf08, 0x5e3434de, 0xf42bf549, + 0xcbf1582d, 0x0e7cf0f1, 0x16547baf, 0xf5c39c87, 0x59ea0f31, 0xc34cfa41, + 0xa678ac71, 0xb48ffe84, 0xd0c9aafd, 0xfb156a37, 0x5f864f73, 0xfed81641, + 0xf2194ad6, 0xe4ee2330, 0x8d3af8bd, 0xf4b91c4b, 0x10d78d3a, 0x9cd71ed5, + 0x3f786975, 0xc21facf5, 0xa2755fa0, 0x9cedb883, 0xe9f938c2, 0x4ba448e3, + 0x55d5fb60, 0xd3a422d7, 0x74f16807, 0xa6434ddf, 0x136f1174, 0x627a76c2, + 0x8b9f49ed, 0x5608c9d1, 0xad88faf6, 0xd4f4e3ec, 0x5caba367, 0x13d23be9, + 0xaa80f344, 0x5118ae5b, 0xdbfd4012, 0xbd67e820, 0x538c4a0e, 0xe2cd5a8c, + 0xa8a1e514, 0xfd8552da, 0xc4076464, 0x26ddde1b, 0x057f9c60, 0x47342321, + 0xf0f1a2fa, 0xcebcfcd9, 0x3d023a46, 0x03e8d67d, 0x8d2ea83d, 0xcbe7015a, + 0xe9323e81, 0xbc757cb2, 0x6d5ff68d, 0x3e8b2ba7, 0x1654fd33, 0xfc327a9d, + 0xa3088755, 0x6748adb3, 0xb3a50c37, 0xf15edc51, 0xc680783e, 0x7d5b9eb5, + 0xff7ea040, 0x291f3b7e, 0x9d3c3d5f, 0x0df518fd, 0xfe7313f4, 0x03f5cb52, + 0xfdf894ab, 0x269b280a, 0xd681f8da, 0xd2f4a6e1, 0xf180bc77, 0x272a5e19, + 0x1c7f8cdc, 0x8ba3fc67, 0xbd79c7b7, 0x66eac135, 0x3e75d582, 0x2571d77e, + 0x293f5e8d, 0x4226cc5d, 0xe5fe0e42, 0x6b6bb574, 0xc66f953d, 0x718f9274, + 0x2ba43ac5, 0x4214ebd4, 0xe4f5fefd, 0x53f471e2, 0xbc542bd7, 0xa241ba90, + 0xeade8027, 0x4c074788, 0xbde1a391, 0x5d338aed, 0xfcd249bd, 0xccbcb396, + 0x1674056f, 0xfda0a715, 0xb2cce8c3, 0x63f9f09f, 0x7a7b3ed0, 0xbf6c0ef2, + 0x5bfc1c65, 0x2c6e9434, 0x9af8b3ba, 0x28d51765, 0x63840ceb, 0x6c93ff88, + 0x10e7f6a2, 0xb320e7ff, 0x3df9b347, 0x93779e87, 0xcb9245d3, 0x956eab13, + 0x25699c96, 0xa093b976, 0x9f39bcfb, 0xe1c2bf50, 0x69df1222, 0x9c5d4f93, + 0x1fb4e2ae, 0xc61c7bac, 0xc15ea17b, 0xf9c693f9, 0xf3dfed10, 0x39c74ca1, + 0x71c5685a, 0x3f51cf92, 0x5b27ea84, 0x727b1f18, 0xbf7d90ac, 0x05b3be61, + 0x02e861e1, 0x0dc96d71, 0xd6df0a57, 0x037cbabe, 0x2c9ea1cf, 0x5413e515, + 0xa3a09a71, 0x3890fd17, 0x4f160ce7, 0x14329f2a, 0x0bba4faf, 0xe26eff29, + 0xbfaef3cf, 0xd1c4e54c, 0x7eecfbc8, 0x93de2003, 0x79e66f36, 0xa2ec1dad, + 0x8f780171, 0x41a5fdc6, 0xfec1e462, 0xed69a1e5, 0xcab54f10, 0xff4c45cd, + 0xe65f6ccb, 0x96d9fa66, 0xad4f164a, 0x53a88495, 0xba363e7c, 0x37f7c555, + 0xc6bfad09, 0x3fd150fb, 0xa7ef04cb, 0xd7f5a911, 0xd5ef014b, 0x5bc9d463, + 0x04ffaa48, 0x4bd1ee3e, 0x7b8c341b, 0xb508551c, 0x7bf68e2b, 0x910960e3, + 0xdf991aa3, 0xad4ae345, 0x77c022da, 0xb9ec7aad, 0x889a18a7, 0x544cca50, + 0xf5c64f7c, 0x9396b9c1, 0x7ee975b1, 0xce1f6b16, 0x6d7dad28, 0x5965ee38, + 0x27bd428f, 0xf51bb890, 0x17afc46d, 0x9e5f21f0, 0x7d1380f6, 0xcb820237, + 0xdcf7f9e1, 0xe26def4c, 0x99bf0b75, 0x988510f3, 0x5f6a6972, 0x6fc1d0a4, + 0x0dc4c309, 0x4512349a, 0x48e01315, 0x771fd184, 0xaf1d1c62, 0x6a7d6149, + 0xe470fc79, 0xed4bc320, 0x47bd1765, 0x18b37486, 0x341a68e0, 0x1a385f29, + 0x0750d73e, 0x99fa37f3, 0xd91007a9, 0xc5884bf9, 0x8d071b79, 0xd1cf08f3, + 0x09559dca, 0x12ab9768, 0x329fc622, 0xbeb07dfd, 0xfe5f5c62, 0x7e944bc4, + 0x46fb076a, 0x17d1c7a4, 0xccff76ea, 0x28f7c199, 0x1ff2665d, 0x37af6939, + 0xa9fc992a, 0x76b5e293, 0x7c30ae30, 0xb69dcd12, 0x7f95b5af, 0xad1e21f0, + 0x7c76bdfd, 0xbde33735, 0x844bdacd, 0xe28699c6, 0x775d24eb, 0xfb195f0a, + 0x435f0598, 0xcf1d9ff9, 0xe0c19572, 0xa7f09cfe, 0xa71e15b8, 0xf329fb60, + 0x34647a73, 0x1f239fa3, 0xc89df1ca, 0x0f38247b, 0xb95f1e70, 0xd16faa58, + 0x1a6278d8, 0xeeaa393f, 0x4b56b5dd, 0xfc7637e7, 0xb137e364, 0xfc6c0fb2, + 0xcfccba46, 0xd6173f23, 0x76494abe, 0x704be4de, 0x73a9823e, 0x3adf8992, + 0x353c2bbc, 0x7681feed, 0xeb47c690, 0x4f1eb654, 0x1eebe33f, 0xa6dea3ac, + 0xf94be280, 0xca478b35, 0xe787286c, 0xf4ef9e2c, 0xef015d1c, 0xfc2b8c85, + 0x5fef89dc, 0xe3c21fb9, 0xd1c657c6, 0xaef7d2e6, 0xbfe59f36, 0x1ef3a4f9, + 0x5972fcb2, 0x685f779e, 0x700ff364, 0x74791238, 0xcfc6197c, 0xd12e72a3, + 0xbfca10ff, 0xf6c2b271, 0x31fefedd, 0x27be9eb5, 0x7dd3d657, 0xbe6f874a, + 0xb8341c83, 0x6ebbcb1c, 0xc297afee, 0xccbcc778, 0x5a91e00f, 0xcaa58e89, + 0xee1d52fc, 0xe808bd4e, 0x4ce3f362, 0x784de4be, 0x64d26f0c, 0x86f74395, + 0xa061b9f4, 0xec4f9d8b, 0x8e51936e, 0xebc744e8, 0x7babe5e7, 0x5b85fe6d, + 0xf8c2d0d0, 0x7783b8d2, 0x27fc431f, 0x35fea51e, 0x02fff519, 0x6ddebb07, + 0x475708a8, 0xfa955cd9, 0x96f70b31, 0x43ee7de3, 0x28aae617, 0x6c85a29f, + 0xbe77ee9e, 0x25f484d2, 0x518bea87, 0xf3bf776e, 0x22c6279d, 0x8fb7431e, + 0x4f3af543, 0x47289d22, 0x1cfe2565, 0x3c80e7c5, 0x5837ef15, 0x714278f3, + 0xbeb0fdef, 0x9037e743, 0x0a3c626f, 0x2903e3ea, 0x310e43fb, 0x9237e3fb, + 0xbf00cb29, 0xc4ae443f, 0x73c03451, 0x507e8540, 0x691e800f, 0xb70f3f40, + 0x2c2fba67, 0xe9e93af7, 0x4c9c10b1, 0x1f83a73c, 0x75a3bf53, 0xba93695f, + 0x5c606bde, 0x8efdfce1, 0x86c6a0f7, 0x104f52c8, 0x8fcd77df, 0xebff5847, + 0xec17d987, 0xc29040ff, 0x80e98b73, 0x1e782bdf, 0x1e5d41bd, 0xe49c6e18, + 0x7bce1346, 0xb17979f7, 0x97483f93, 0xf7905e99, 0xf71506ee, 0xba09f507, + 0xf4fde33f, 0xff66787e, 0x7176e3ff, 0x4d7257be, 0xcf4b4e7e, 0xbaf47d81, + 0xf1a1f4d3, 0x59a71b32, 0xd3966f32, 0xb0a4a8f8, 0x8527e278, 0xf19906e7, + 0xd664bf2f, 0xc74325c9, 0xfac4f9db, 0x4f65fde1, 0x325f7448, 0xfee4ffdb, + 0xcc82fdcc, 0xaf7a14ef, 0xbfd719f4, 0xfeb5f3eb, 0xa1af9fff, 0xd73a2dcf, + 0xb87a7d39, 0x76e1e53d, 0x2fd1d613, 0x3057ca94, 0xde65bfc9, 0x7e4bce41, + 0x61166a7f, 0xf3c8d6fb, 0xb2431a32, 0x9ea73e4d, 0xfa095d6b, 0x67ef4bdc, + 0x7bb25635, 0x9dfeed4e, 0x7827ced4, 0x951a6c7b, 0xd1aff48b, 0x489515ec, + 0x532cdc5a, 0xd057c49f, 0xdbcfc7ef, 0x6f79ff5f, 0x0345cf08, 0x7e999f97, + 0x99a3d39d, 0xa2f8727d, 0xc6dd206c, 0x81dc8e26, 0xbfdac4e7, 0xef72e7bf, + 0xeba32170, 0xe3cc9968, 0x3ff68430, 0xddef265d, 0xd151eac2, 0x39e13bf2, + 0x68f4c4be, 0xaa26e54f, 0x7cf23597, 0x4e351218, 0x96bb3c60, 0x52b237c3, + 0x9e02e3a0, 0x5b51bda8, 0x1ff994b9, 0x0444135a, 0x79069cbc, 0x52eb651c, + 0x1e16fdd2, 0xa875e995, 0x52d349ef, 0xe5635efa, 0x5c3c69ef, 0x6f3d724e, + 0x08e7e806, 0x271ad267, 0xc67e5f03, 0x8c5503c7, 0xfe56364f, 0x7b3faa4f, + 0xd3c3f432, 0x5f5c0de1, 0x4fc43f5a, 0x596fae97, 0xeb2b9378, 0xc44f3ea8, + 0x978e3ad5, 0xf4ce5719, 0xf1194af3, 0xece43939, 0xec26a8ff, 0xe896367e, + 0xdeb8375f, 0xbd33f465, 0x83df9aab, 0xc0f7e6ad, 0x459fd1aa, 0x8bdf854b, + 0x1e2c8b8d, 0x999559f5, 0xfbe1dff1, 0xefe2b91f, 0x9f837563, 0xcf581a97, + 0xfed0f0d8, 0x8a229edd, 0x391fcb07, 0xc78f63c6, 0x8a0f84f7, 0xdd846eec, + 0xf85c75ef, 0xbbeb8f9d, 0xdd6f4fd4, 0xe175989f, 0x9b191f75, 0x0f2b0ba2, + 0xf99fa663, 0x9625eaa7, 0xe2533487, 0xf80cf2f7, 0xd9fa1a67, 0x23ed5fd8, + 0x90106f04, 0x0fddaf3a, 0x52490b7b, 0x7e41a2ff, 0xd65bef4f, 0x361dbb12, + 0xa0967fd4, 0x93f4cbeb, 0x0fac6755, 0x576fc13d, 0x6579eea6, 0xf2243fd7, + 0x9a7e35b6, 0x8ad6b69f, 0xa2e47c07, 0x329c1476, 0x190e49c9, 0x9fac3c24, + 0x9ff39db6, 0x193c8cf6, 0xf9a0ca98, 0x16d7fd84, 0x7b73f2cf, 0x7db1a42b, + 0x1e24abf7, 0x607e630f, 0x10fd40af, 0xa023db40, 0x26b5546e, 0xb29c340a, + 0x7882d430, 0xf3d1b6d7, 0xe4c83758, 0x684031b0, 0xfe818a5e, 0x110f3c0b, + 0xf1667dbb, 0xebb0631b, 0x18b1e638, 0xbf7588e3, 0xce7f65d7, 0xc103f7df, + 0x08e94309, 0x9ff5218e, 0x9f7f79fa, 0x7ea7fcc6, 0x4758274e, 0xfd1fa97f, + 0xc3e650a4, 0x354f3434, 0x171f7ce3, 0x8bf0a79e, 0xcf3e99a4, 0x83d3b4ab, + 0x43f767e8, 0x2880f933, 0x37363cb1, 0x9b94739c, 0xbdfdb162, 0x370ec8f7, + 0xa3075bb5, 0x8bc50b6a, 0xb34bc76c, 0xefc2f0c0, 0x75f2d6e9, 0x3f63377d, + 0xcfb78313, 0xa1de630f, 0xda0f7edf, 0xa0c49fa2, 0x2e25e58b, 0x493d9816, + 0xb04f2fde, 0x2584d17e, 0x4efda07f, 0x46f927ee, 0xc1051892, 0x770979ec, + 0xf11ba891, 0xfe889ff0, 0xf953cc5d, 0xc7176be0, 0x96fea178, 0xfc9be58b, + 0xdbe482e3, 0xbf98090f, 0x079dfe60, 0xa3fda6e8, 0x0b59de0f, 0xafe5bd43, + 0x3d29d028, 0xd186307c, 0xae349003, 0x951e70fb, 0x896eb027, 0x7ac6566e, + 0xd611e933, 0xcefee7e3, 0x73d275cc, 0xba43eb82, 0x7db7fab3, 0xf16fc1f4, + 0xcf3775de, 0xf0bee897, 0xf3e424c1, 0xd824f343, 0x93c872f9, 0x8b49e838, + 0x3fc8259b, 0x25e29d05, 0xd44dcf43, 0xc587def1, 0x830b8ef7, 0x0fba1e0d, + 0xcb773e76, 0xa49d3b25, 0xf890def8, 0xc1f135c0, 0xa860c023, 0x1f833b9f, + 0xdac1f266, 0xffca3ec1, 0xfc1f2d3e, 0x0f9c97ed, 0x344481de, 0xf813c695, + 0xc5f3517d, 0xbf3fa39f, 0x90b6564a, 0xef8ef1a1, 0x0679d805, 0x87be273b, + 0x5b3aa9c6, 0x17e2d996, 0x50941c56, 0xedda43fb, 0xb865b5dd, 0x57e7c2f8, + 0xafbf717a, 0xa03324c3, 0x9a6c6eeb, 0xafe928c1, 0x84f7f9e0, 0x70cbc5de, + 0x7cb21f9d, 0xeec0326d, 0x76dd8169, 0x3dff8242, 0xdbdeb971, 0x4f8a1fe7, + 0x8e513b59, 0x143b21f7, 0x53fc7796, 0x531140e5, 0xeef4ed53, 0x91f2b329, + 0xd01d7f0d, 0x7dd38445, 0x60e2c924, 0x8bdfe281, 0x43723798, 0x663ea657, + 0x475de2d8, 0x9f94b384, 0x8fe2aa07, 0xd81b9aa3, 0xe96ba767, 0xe96fbb12, + 0xbb43fdc7, 0x481e4327, 0x57b8e749, 0xae39d7b5, 0xade2b01f, 0xf540ff53, + 0xff2e57dd, 0x07f5c581, 0x6eaff7ec, 0xbc7c3cb9, 0x7e71bff5, 0xc7cf3cf5, + 0xa9f3817c, 0x73879e2e, 0xbd09e780, 0xd038f988, 0xe3e7907e, 0x3cf98cbc, + 0x668de954, 0xf38ae7dc, 0x7e56ac3c, 0xf3c12baf, 0x5392e2b3, 0xa24c825e, + 0xcbbf3c7d, 0xebef7e9b, 0x73565a8b, 0x0bd56679, 0xd228cdfb, 0xf46048df, + 0xe0ed9f18, 0x69f40bf4, 0x88ad838c, 0xa71a4c05, 0xae5b29ea, 0xf9d8f3e2, + 0x4c894a98, 0xe3b36d5c, 0x0551a8e7, 0x986691c7, 0xfd98655e, 0xbf1e5592, + 0xda3a8418, 0x03a32a3d, 0x456e5cb1, 0x22e13fbb, 0xded2ba2b, 0xb31e4eff, + 0x15efbedf, 0xff6f7572, 0xc7d878dc, 0xc1c3841e, 0xe6f7101f, 0x458e0ae5, + 0xfc54c513, 0x978e132d, 0xc67a3e38, 0x5f21c73a, 0x0672baf2, 0x78150de7, + 0x6fcac8cf, 0x32acf967, 0xedf94e94, 0xb7a676a9, 0xe43cf75a, 0x3366fe90, + 0x967eab9e, 0xbcb57d3f, 0x6e5cc3d3, 0xeb72e56d, 0xa39725d0, 0x10156fff, + 0x1efdfa72, 0xefd3dcab, 0x8e5dffdc, 0x5863c3d7, 0x6fec78be, 0x64703a5d, + 0x46c6a8d2, 0xd43c7f21, 0x56bae2cf, 0xc713571e, 0x466aa365, 0x8c673d09, + 0xf97355bf, 0x2fd898dc, 0x51b01fa1, 0xefe84b8a, 0xae5f29ab, 0x6563fae2, + 0x3a67fc59, 0xf58dd3cb, 0x7e5978b7, 0x29d14ec6, 0x67e16d6e, 0x9e0cb3cf, + 0xa12e3546, 0xe55e711f, 0x6ff1090e, 0x5637d9e5, 0x2279652e, 0x242713f3, + 0xc0d3678a, 0x1df5abf1, 0x588f34ed, 0x9c827587, 0x7a226a2e, 0x76f6a35c, + 0xb6fd429b, 0xfe5087cf, 0xb2c27258, 0xcfe53217, 0xb532d1c9, 0x1749627b, + 0xd187beff, 0xf314a734, 0x3f9fd943, 0xc4e9eec4, 0x123deb76, 0xea05d3f6, + 0xc95858c7, 0x95fccdf2, 0x29ab1f4c, 0x654ed9db, 0x63885c51, 0x3f95807e, + 0xebb118da, 0xeffad55b, 0x564c31db, 0x672ed97d, 0x23bd7166, 0xafe12fd3, + 0xf1e7a8ca, 0x4c953ffb, 0x61e3dd1e, 0x47e549f7, 0x4f78e984, 0xa111ef25, + 0x4af9e10c, 0x93eeee5e, 0x2c6504de, 0x7ffa9d3c, 0xafe4f544, 0xf2e7ce31, + 0x1cf34f3d, 0x81397ec4, 0xb40c1772, 0x90a97c8c, 0xe12ae542, 0x6d72a17a, + 0x1f5f96f7, 0xcc79f8cd, 0x32a5f2cd, 0xdd7c29fb, 0x75ba38ff, 0xb15f13b1, + 0x223f579e, 0xe5623950, 0xc4ab57b5, 0x564f3a70, 0x6cbeeb7f, 0x37cb20f5, + 0x66e9c4db, 0x4ef0d2df, 0xbce153b4, 0xfcf04e18, 0x8f3b1e73, 0xd879e6cf, + 0xcd2f5cbc, 0x3ca3f7ec, 0x3f6aefc6, 0x8e1d4c7e, 0x406a786f, 0x177ee1ee, + 0x10e471b3, 0x5896579b, 0x7933e429, 0xcac7ca73, 0x85ccbc09, 0x22b9b9dc, + 0x0b907477, 0x7941f6ba, 0xf6d0abca, 0x2a1ec086, 0xc781721f, 0xb1e21c8a, + 0x5374635a, 0xf2e9dbad, 0xf2deb9ef, 0xd19cbc8b, 0x3999a2cf, 0xa0b923e4, + 0xd72fea9f, 0xe3373879, 0xa53fb5cb, 0x33cf5cb9, 0x23e529b2, 0x4b8fefff, + 0xf4c1ce2c, 0xd345679a, 0xa3af6f63, 0x43f69071, 0x897bface, 0xc476672f, + 0xdfa03aa2, 0x9624c7db, 0x13efe939, 0x17c673f3, 0x8e001b4a, 0xe738467b, + 0xe7e754cd, 0x66db1f0c, 0x644b1c03, 0xbec387c0, 0x1c21cc2c, 0xdf764573, + 0x2af3c68b, 0x98a3fb5f, 0xdfc08766, 0xbb295738, 0x12ecc8ef, 0xa0e97d13, + 0x53860b27, 0x7725b87c, 0x51adb8fb, 0x9951e94c, 0xc03d7c70, 0x9c4398e0, + 0xe56fa8f5, 0xf28bbf0e, 0xc9bbd02a, 0x459ca7ce, 0x9f92db5f, 0x115afd3b, + 0x5e29e0d3, 0x72649d4a, 0xafa8e093, 0x7397cf6e, 0x0095efa6, 0xe775da9e, + 0x2cfe7aef, 0x8541fc87, 0x76688a72, 0x246d1f21, 0x4c217771, 0x5d71777d, + 0x3e7baf14, 0x38dcd855, 0xc3f4f411, 0x4efa5de7, 0x4ef2523a, 0x5d54df1a, + 0x797ff42e, 0xa2889eb6, 0x942ebebf, 0xfbb0f1ec, 0x6afbec6f, 0xb0f0c4fd, + 0x7bf4bcfb, 0xb98fd557, 0x747bb0a7, 0xafbcdecc, 0xa7de90b0, 0xb64fe86c, + 0x62c2f7e3, 0x40ef8d8f, 0xbfaeaebb, 0xfe8dd697, 0x65e76a3e, 0x6a7d9bda, + 0x3cc7bb2f, 0xb4524c1d, 0xf4bd423f, 0xed5fa39e, 0xeede3035, 0x835d0497, + 0xcb3f527e, 0x59549157, 0xde0a1837, 0x7cac71c4, 0xcf2f0694, 0x7e59501b, + 0xe4f4cd53, 0x61f768ed, 0xe017cd3b, 0x255aaff1, 0x0d42e34e, 0xa98bdf19, + 0xef09124f, 0x0bc6643b, 0x7b33f566, 0x409c4877, 0x46d1fe65, 0x8ccf07ee, + 0x99739c1b, 0x3e70f97d, 0x283b01ef, 0x63929458, 0x13af7815, 0x124910fd, + 0x7ca1868f, 0x737e6256, 0x0f8f8845, 0x45c39c63, 0x489331d7, 0x15940964, + 0xbbf4cd65, 0xa51f884c, 0xf0162f80, 0x30b13152, 0xa2a3bece, 0xfe5a7c52, + 0xdf5b4d98, 0x5885fea4, 0x3fe3b719, 0x2228e254, 0x7844098d, 0xf95ccbdb, + 0x25b38f48, 0xf8fbc512, 0x1f7e3cb5, 0x2526cd54, 0x97a6ed48, 0x9f8c0285, + 0xdf3e3468, 0xa2b3df80, 0x89a8de7e, 0xbcd3ce70, 0x67edfa0a, 0xc43f27aa, + 0x7f5604fb, 0x6f7fb0c1, 0xb4486c84, 0x05edbc63, 0x80f82997, 0x5fde050e, + 0xacedbcaa, 0x2fe6e940, 0x4ae4978b, 0x427d113f, 0x5639d3ab, 0x5177c873, + 0x1f3150df, 0x7fcd2a64, 0x1b2be471, 0xc69e0c02, 0x051a437e, 0x9815a75d, + 0xe7be2137, 0x81da5eec, 0x36ee8b75, 0xd62bf167, 0xc3db1bfd, 0x939fcefb, + 0x11defe91, 0xba47aefa, 0x212eb2ba, 0xf4fea419, 0xd14b1771, 0xde7a0d4f, + 0x67bd1f6c, 0xee309718, 0xfb79c162, 0xbd455318, 0x633f9b26, 0xf7ecee51, + 0x7662a56d, 0xdc81eb3d, 0x9f949de9, 0xb46fd15f, 0xe9884ed7, 0x94be8cfa, + 0xe73433ea, 0xc80f8d26, 0xfd5a499a, 0x28eaffd4, 0x0ee63717, 0x942173fe, + 0x2a95c18b, 0x2fd8d39e, 0x627c77d9, 0xceff60ff, 0x1d3877f2, 0x87730437, + 0x4e301bd7, 0xc19ab051, 0xb8302795, 0xae0d82dc, 0x6f464191, 0x0ee40d3f, + 0xdca0d35f, 0xf9f7341b, 0xfb59bde8, 0xfeb900f9, 0x76f6a753, 0x5239426c, + 0x70fbd029, 0x600e7f20, 0x6dcad9bf, 0x79bbf1b3, 0xe987762b, 0xaae7d277, + 0xa08a3a3b, 0xa8d152be, 0x605bde5f, 0xde34e4be, 0xb73f9d17, 0x7f72affb, + 0x53f964d8, 0x02a3ed99, 0xd837c522, 0x9cfa6f9f, 0xedffcfed, 0xd9b297c4, + 0x73f96f9f, 0x0f668fc7, 0xe47e7f63, 0x6cd2fe63, 0xdca3eafc, 0x8f6a779d, + 0x2ec597dd, 0x5f10e60c, 0x766c2bf3, 0x8d316ee1, 0x4dc2523f, 0x9bf5578f, + 0xc5777e84, 0x71a45ec1, 0x5ed9dd1b, 0x0ee7f4ac, 0x38c35faf, 0x1cb3bd66, + 0x5dcfe19f, 0x2856f07c, 0x38ed0aef, 0x488f0c5e, 0x4d2fe614, 0x9b177dc5, + 0xf2e76ceb, 0x972751ae, 0xe59f7d39, 0xc1d1dcd6, 0xf9117cb9, 0x70f7f385, + 0xc4b632ad, 0x149abf59, 0xe75e2990, 0x1c7fd98d, 0xcec4adef, 0x68f90513, + 0xdbb89c2c, 0x96fe1f69, 0x9b8beddb, 0x45ccbd18, 0xafd69bf9, 0x97e2cfc5, + 0x32b9738f, 0x7139cb2f, 0xb9f3e7f3, 0x42be7a3f, 0xfd0e038c, 0x7dbb9dbe, + 0xca12373f, 0xf0cef979, 0xbdd7cfbe, 0xe2bf8b20, 0x7383b97b, 0x939c395b, + 0x70cef579, 0xd1dc97fe, 0x0031a2dd, 0xe9f522c7, 0xcf776839, 0x5cdcdad7, + 0x3bf2ef7e, 0xfc46dbc8, 0xd3fa2662, 0x0a6b89e0, 0x910cfefd, 0xbe3950a7, + 0xdee30fdf, 0x4ca3640b, 0xb3e7d349, 0x7e8b81f0, 0xa1f987e6, 0xcd397664, + 0xa5ede563, 0x12bdc4f4, 0x119777bb, 0x1f7b47bf, 0x378849f3, 0x679a044e, + 0xf2c451d2, 0x805e68e9, 0x25deaf15, 0xb10fdf39, 0x5564f5f2, 0x55faa7cf, + 0x0caefb3f, 0xccf9b1d8, 0x6ff3d58e, 0x88e3c873, 0x97572d95, 0x11df930e, + 0xd31b9b54, 0xb0c154ed, 0x6f609ddb, 0xda7f0ffe, 0xeecb00fd, 0x7cd957fc, + 0xeb936fdd, 0xeafc683b, 0xfb27b6f3, 0xa0cf6873, 0xb08fd0fe, 0xaf3cd097, + 0x307c764b, 0xf9ba00fa, 0x74a0ff97, 0xa6701a53, 0x0380b29b, 0x368ebcdd, + 0x759fb417, 0x8ff340ff, 0xb0af1a1d, 0x37eb39c6, 0x6d8fa8bd, 0x98bc5b52, + 0x4d3312f7, 0xf767eeaf, 0xeff3d2b1, 0xebcdbaf6, 0xd597e7d3, 0x022fbd38, + 0x80c4e8fa, 0x459fbe93, 0x8fadfd1f, 0xfcb7ff9d, 0xc22dcb84, 0x21be17f2, + 0x2c49efd0, 0xf4ee9d26, 0x337997df, 0xe4bf3b90, 0xff282a57, 0xcf5a706b, + 0x416ffc30, 0xbff013e0, 0x7efe719f, 0xeeffaf91, 0x9faf4cd5, 0xfd4712a3, + 0xd9dcfeed, 0x287ea575, 0x1d2f14e7, 0x72c90f5e, 0xfe872c3f, 0x0a8173fe, + 0x76588f9c, 0x5fb8a3d2, 0x1d527699, 0xf4d923e7, 0x477327fc, 0x03aee757, + 0x9723ef78, 0x30efe8dc, 0x3b468fc4, 0x373ef7e1, 0xf6871bf0, 0xa2413067, + 0x195fad24, 0xaadd0a79, 0xfd6742b1, 0xaed06d6e, 0x6f3e65df, 0x537da1c9, + 0x91f38158, 0xee0def61, 0x597c9dc9, 0x16fcc554, 0x37ce9d47, 0x8e63fb9c, + 0xec9b0c7c, 0x81538b7e, 0x9c5bf36b, 0x4fe5f3b5, 0xcc38b7e7, 0x589334ee, + 0x3c4df896, 0xbd1e7677, 0xeaf8097f, 0x30df5a77, 0xc41df27c, 0x27ca5fdb, + 0xb9edebb3, 0x45a38fe3, 0xc3ed8f9c, 0xc6712cfc, 0x1f70e76f, 0x8f9c44ca, + 0xaf9d63c1, 0x2dde38fb, 0x39832a78, 0x9b9e7b8b, 0x8efc6224, 0x787e7950, + 0x70e79322, 0xa70526de, 0x0e3197f2, 0x076236d7, 0xced285c6, 0xb5e0e4dd, + 0x38e9bb9d, 0xbb9c35ce, 0x7de34e99, 0x4d9773da, 0xfce42c8e, 0xe0212df6, + 0x38bdcf98, 0x45e2fe77, 0x55afd1e3, 0x83e70ce4, 0xfdf1dcc1, 0x5c9f1509, + 0x2cf7599e, 0x7df8cd5f, 0xfe3967c3, 0xa339fc5a, 0x3162d2e3, 0xc9b2b725, + 0xd1ca5cd9, 0x3a393482, 0xcc1f0b37, 0x69253c25, 0x10efa9f8, 0x0a2539e8, + 0xcce1f1a1, 0xa5fff8ef, 0xa2fc03df, 0xc3046f95, 0x5937efb6, 0xa0b92b79, + 0x6bc51bc7, 0xce182788, 0x0fedefdf, 0xcbd339ca, 0xdcc7ff91, 0xb5844adf, + 0x7eca70ec, 0xf279e093, 0xed04ada8, 0x3ac74f4d, 0xd3c63f7a, 0xfe812eb4, + 0xd021d24b, 0xe51090ef, 0x4b7f3a75, 0xe42bfa28, 0x74f9430f, 0xbf72672c, + 0x1af7e90a, 0xff1228fd, 0x9bcf931d, 0x52af3f5e, 0x2efbf2ca, 0x0407f7d6, + 0xcbaefd85, 0x2f532e0b, 0xd64f3b48, 0x35ae7777, 0x3d0af79f, 0xf7d6fbc1, + 0x50815bd0, 0x14b121f6, 0x9e7fbea7, 0x56befdfa, 0x46bd0f8b, 0xe0336fbf, + 0x9b17bfa2, 0xfd33fdfa, 0xb45549b5, 0xa68fe69d, 0x53ad2f7e, 0xd17be993, + 0xbdf12b51, 0xbc64f2dd, 0xbee30447, 0x5bf7a416, 0x5efbfa4c, 0x7efd1ef0, + 0x779faa62, 0xd8871f32, 0x8ebaf4f3, 0x8973e907, 0xf36cfff7, 0x3016d6ef, + 0x102d55be, 0xecfdefdb, 0xe69073df, 0x740fd63f, 0x99bc3cd1, 0xefe8bafb, + 0x301cce4e, 0xcf8e1baf, 0x6b915fc0, 0x4289163a, 0x952e0a5e, 0xfac05bae, + 0xfbb4be10, 0xcc369f45, 0xba073378, 0xf787b414, 0xea3af1ef, 0x980a874f, + 0x9f77935c, 0x196aa048, 0x3fa8ead0, 0x23e377d4, 0x53187e36, 0xf8f5d00f, + 0xdf341207, 0xebc8c9e8, 0x33073bf4, 0x82f7d8ab, 0x1dc40e67, 0x0d369ff3, + 0x0933381c, 0x3a2145e9, 0x6c679efe, 0x77e9e580, 0xe377ea47, 0x7beb20fd, + 0xa35df847, 0xe1d2466f, 0x1fba2cee, 0x01ca66fd, 0xfc61b8df, 0xec3eb825, + 0x517211d7, 0xdc8eecba, 0x861047b1, 0x246ffdd2, 0x128299f3, 0x6fde7bdb, + 0xb39d71fa, 0x1dfbe587, 0xdc8e39c4, 0xa5f4c055, 0x8bc36efd, 0x7fb627bf, + 0xc9c3a48f, 0x7df6ccf9, 0x54f301b6, 0x5136fde1, 0x49eb438f, 0x3c4259b9, + 0x48152c9e, 0x577f1867, 0x386f80f4, 0x074592bf, 0xcf59664f, 0x9f1602da, + 0xf1ddd8e9, 0xdc7f9a0d, 0x27c8ec5f, 0xe6851824, 0xf13e71cb, 0x523cc781, + 0xdf143250, 0x5176c79b, 0xbfe9163f, 0xfd7c2ae3, 0xa61df671, 0x3cdfceae, + 0xfbf9b504, 0x6be44f5a, 0x0fe74ed7, 0xa63847e3, 0xbbe75d0e, 0x29b7c9f5, + 0xd6e83a9f, 0x385d1f30, 0xb7e0481a, 0x10eece3b, 0xe25b5e68, 0xc3a51f15, + 0xa36fdb0b, 0x99ec51df, 0xffb031ec, 0xb475dd85, 0xffd2f0de, 0xf05e620a, + 0xfa44979a, 0x2bd7015d, 0x0f9883e7, 0xfbd3d6bb, 0xf27cd214, 0xfbd09125, + 0xf485d193, 0x736f487b, 0xb32e4899, 0x563cf2fa, 0xe7a3b35d, 0xc5771c5e, + 0x07921ecb, 0xe5f9ace3, 0x099f5f03, 0x735e07f5, 0xc96937e3, 0xf26d3d9a, + 0x3dfc62a8, 0xeb0ba138, 0x5bf2bf8f, 0xf5bbcf3a, 0xbf166f2c, 0xc7bf80db, + 0xb7b06efe, 0x5f684ef4, 0x5cf9ff19, 0x79f2bfec, 0x5a6dc741, 0x77e7bdb9, + 0x17cafe38, 0xbbf0e3dd, 0xf9f6ab17, 0x8f269688, 0xe6fa5e1b, 0x35de11d7, + 0x47d4dca7, 0x61f062bf, 0xa963f299, 0x5afdc653, 0x1969e7b3, 0xb4ff19f3, + 0x8f3a35f1, 0xfb35c785, 0xef781e61, 0x1d0417a1, 0x8b90f697, 0x3bfabefd, + 0xbc5bccbf, 0x6aeb8fcb, 0xf7c7af93, 0xc649b97f, 0x97c40f7e, 0x10d3cc1e, + 0x5cf21dbe, 0x0efb7384, 0x7eda7979, 0x8677daad, 0x00fff5c2, 0xdd70bcab, + 0x00008000, 0x00088b1f, 0x00000000, 0x7de5ff00, 0xd5547809, 0x73b9f0d9, + 0x993ac967, 0x49327bec, 0x07014100, 0x3a0b6188, 0xe8251b59, 0x88a8a820, + 0xb2108113, 0xab07d48b, 0x490067fd, 0xa8a35141, 0xc0758ac5, 0x0d45a360, + 0x03ac6d10, 0xa8a0481d, 0x820b06d0, 0x2009db55, 0x710c819b, 0x77ea96c3, + 0x3b9cf7de, 0x6266f7b9, 0xbffbf5a2, 0x1f1fff7e, 0x9cf7393c, 0x7f77967b, + 0x13def3df, 0x96f90842, 0x3eb93bfe, 0x9a3ede2b, 0xd73f0efe, 0x3acf2ff4, + 0xfa1b3108, 0x588495ea, 0x8be8c25b, 0xe67e975a, 0x3be7be98, 0xb9092322, + 0x66aa908a, 0x08839891, 0xff8b7cfe, 0x4b121277, 0xfe987fff, 0x1dcb431a, + 0x19cdaee1, 0x86ba78f0, 0xc4b210e4, 0xd3377f44, 0xbd59177f, 0x25dec4d7, + 0x7c8e5f5a, 0xd47ca97c, 0x69eb8411, 0x7cb09874, 0xe58091c2, 0x31330e93, + 0xd3c8465f, 0xae58918e, 0xf9f05877, 0xb0931caf, 0x62b0e0dc, 0x09476bf9, + 0x0d872e96, 0xcc726dfb, 0x61c9b2c1, 0x3a2fe7c7, 0x766cb02a, 0x97f3e3d4, + 0xdcb0cb1d, 0xf3e270e2, 0xb1ab1d57, 0x6234716c, 0x1eb1cdb9, 0x0b8756cb, + 0x68e1bdfb, 0xd1cdb2c6, 0xef7fcf82, 0xedd2c368, 0xd3b960f0, 0x8f4b0fb1, + 0xddcb13a3, 0x7658a38e, 0xdef8bc38, 0x2c69c75e, 0x1bb872d7, 0x969e4973, + 0x2568cdc2, 0x25828126, 0xa79ad4aa, 0x1b28f5a3, 0x75cdc7ab, 0x3d69e9e6, + 0x14eb4ece, 0x9ed5498e, 0x27ad033c, 0xb4f6b3d5, 0x107e4807, 0x5939a7ad, + 0x6b5ae67b, 0x67ad307e, 0x11f6b236, 0x21f99c1b, 0xc5c23eb4, 0xe2df2fda, + 0xf5a50fc9, 0xfb585bcb, 0x08293758, 0x1eb1f5a3, 0xdfbf1f56, 0xeb4e105a, + 0x3d593be3, 0x816723e7, 0xbc73d691, 0xdd29fdec, 0x5a08829e, 0xed63e29f, + 0x85225f57, 0x9abf5a26, 0x0fcf5808, 0xa48c2bcb, 0xab137cf5, 0x6994a717, + 0x6fe801cd, 0x9f3bcea7, 0xdbb85a50, 0x4da25d94, 0xf7bd75a4, 0x6421621e, + 0x895a69a5, 0x9f853276, 0xf6802c8e, 0xd8c54ca7, 0xa593d1ee, 0xd31bfed0, + 0x5bbed80d, 0x37f6c667, 0x5d58734d, 0x77f6c66f, 0xef58654d, 0xfdb159d0, + 0xab255363, 0xded8adeb, 0xeb07ba63, 0x6c76757b, 0xc01f2217, 0xedeaf7f1, + 0x7684fed8, 0xad214955, 0x57b4882f, 0xaf5d2899, 0x2415ec14, 0x25b5e80b, + 0xb5e946c1, 0x80732041, 0xcc99663f, 0x890d0fc8, 0xa6c92b7a, 0xce57ffeb, + 0x69c0a20b, 0xe5ea063b, 0x81943e2f, 0xd1352ce3, 0x74752b7e, 0x71f0711c, + 0x9266feae, 0xbfab9c62, 0xf9c690a9, 0x3c138e39, 0x7e7671b4, 0x9eb94533, + 0x71a52a6f, 0xe15f701a, 0xd5d7db43, 0xd72ae6df, 0x34b56df3, 0x4e3863ce, + 0xe3d6d0e4, 0x8c544dd1, 0x922dd1e3, 0xe38f59c6, 0x3d6d0ec4, 0xc564fd56, + 0x62fd5638, 0x388d9c69, 0xc6d0e24e, 0x2aa7e8f1, 0x92afa3d7, 0xe11979c6, + 0x7db43a9c, 0x94d30d59, 0x48d431eb, 0xf5c76ce3, 0x9c6d0c64, 0xf84ae1dd, + 0xc3f70eec, 0x0ce38dc7, 0xf2beda1f, 0xe4f84a8d, 0xd9f0fd1b, 0x351afb83, + 0x1b7671b4, 0x6dd9f095, 0x4fe7c3f4, 0x43319eb8, 0x847e57db, 0x11f93e12, + 0xc11cf87e, 0xda1b8cf5, 0x95623a7a, 0xf588e9f0, 0xeb8bc7c3, 0xeb686ab9, + 0xc2538c29, 0x0fce30a7, 0xce38339f, 0xd38da1e4, 0x4f84a711, 0x3e1f9c47, + 0xb4ce38bd, 0x30abeda1, 0xc29f095e, 0xfe7c3f78, 0xd9e4e389, 0x843d719b, + 0xf03e138e, 0x95537b38, 0xea9bd9f0, 0x12368f87, 0xc7445ce0, 0x9c7c1ac9, + 0x7c2534e2, 0xf0fcd38a, 0xae71c709, 0x7b38da1d, 0xd9f094d3, 0x4f87e69b, + 0x63338e1c, 0x4e2afb68, 0x38a7c257, 0x1ae7c19d, 0x33d438ed, 0x445a7754, + 0x524fcafa, 0xed02acf2, 0x5d589a2f, 0xd8085934, 0xcf64a23d, 0x48ab4e90, + 0x896d87fb, 0x9110ff1c, 0x23f935db, 0xc39c2922, 0x5d851a2d, 0x84293113, + 0xd5f64798, 0x8a51ad23, 0x9249747a, 0x2dac7fa2, 0x3f1ed153, 0x7b4572e7, + 0xa2bc7da2, 0x45315c9e, 0x3eb53fd1, 0x5f4f515f, 0x7fa29d76, 0x4546f386, + 0x6df56b3d, 0x1bc3fe8a, 0x5fb452ef, 0xd152beb6, 0x44b5ca3e, 0xf9a2bf51, + 0x63fe8a67, 0xda28565a, 0x487b6caf, 0xf3ce3ed1, 0x613ea284, 0xfd14afdf, + 0xa4dceaaf, 0xf4789f68, 0x64fb4565, 0x7d4536ef, 0x2bdfe9ea, 0xedf34ffa, + 0xb9afd456, 0x7fa28ef8, 0xa28bf91e, 0xa1f4105e, 0xe9917fa2, 0x27fda2b8, + 0xecaa9f09, 0xc9d330d4, 0x045d782b, 0x50bfa2be, 0xea26717a, 0x84f55ed1, + 0x4faeb1eb, 0x6819730a, 0xb978577d, 0x1fa504f9, 0xe6f9eefd, 0x403f4a18, + 0x05da8433, 0x97154979, 0x7bf3e979, 0x332fd8a7, 0xeaf7e7d1, 0x029a57ed, + 0xde9437d8, 0xa5009204, 0xbaa50359, 0x463a17fd, 0x97c9f9ef, 0xf7d17446, + 0x11be34eb, 0x4dfeb491, 0xc07dde54, 0x0d488e1f, 0x488841f2, 0x885fa1ea, + 0xfe815881, 0xf391917f, 0x0fc65382, 0x9da953ab, 0xbb8df421, 0x404f675a, + 0xf7722a3b, 0x1a6bb06a, 0x92bee952, 0xf1f07908, 0xc39cfb5d, 0xe5a9fbe8, + 0x9e3a7609, 0x8aec4f41, 0xfe74f5f9, 0x1aff38d1, 0x01b1ff98, 0x4e6437e6, + 0x941fcc52, 0x3f98a156, 0x37e74f48, 0xf22eb211, 0x453f3e1d, 0xbf6a14c2, + 0xce36fe3f, 0xc0ab486f, 0x27a17ff9, 0x43f98a15, 0x033ff3fc, 0xcc3cf8fc, + 0xff601b1f, 0xfb945399, 0xee54ab4f, 0xfff6cf5f, 0x7c7be442, 0x7fdc10fe, + 0xd907e3d3, 0xd92ad3fe, 0x5c6c0dfe, 0x3f46fcff, 0xf9825ffc, 0x7e601b5f, + 0x72ae5643, 0xcad5e9ff, 0xfcd81bfd, 0xcaff23db, 0xf9c30fe7, 0x80ff1f5b, + 0x1abd3fed, 0xec1bd7e7, 0x7d1fa016, 0x8bbd4872, 0xa8524fce, 0xe40f1497, + 0x7281e742, 0x1a651464, 0x33236a42, 0x86f71d71, 0x32fb7a30, 0xca1bd284, + 0x273e2733, 0xa9392a2e, 0x69cb555f, 0x9e4b6abd, 0xb61ee41e, 0x90b211c7, + 0x9b41752f, 0x9e4df488, 0xd386b834, 0x136f9ef5, 0xf05f509d, 0xc81734e4, + 0xb9033ad7, 0x69ef06d3, 0x7f9e0789, 0x4d98d4f2, 0xcba97df2, 0x93ba8d85, + 0xf9bf195e, 0x327cc0fd, 0xcfae9eb2, 0xea293268, 0x471fa8c7, 0x11f3bfa8, + 0xf5087bf5, 0xd8eb8e7f, 0xfea37f7c, 0xd4bdd41e, 0x427683df, 0x11dd2396, + 0x30f0f5a7, 0x911b7eba, 0xcfb8ac7e, 0xe8a5905b, 0xbfc65a78, 0x2e0ad6c7, + 0xcb9dc7c0, 0xfbf02942, 0x8ce653d6, 0x0cebd456, 0x5aefbfac, 0xc049b5c1, + 0x9f00ec31, 0x023c7c99, 0x73eb4b44, 0x239dec4c, 0x15ec673b, 0x5fcc848c, + 0xd1714c9d, 0x622cce37, 0xf7d3c5d5, 0xa65a5a6f, 0x72e01a23, 0xd0097521, + 0xf11d7ccf, 0x8cecdfa0, 0x7139a325, 0x66def5d0, 0xb4cfe362, 0x65784eea, + 0x0ba399eb, 0x7ae8dab2, 0xb88994e6, 0xca2559fe, 0x0ceebff6, 0xd2c66ab5, + 0x9c3af572, 0xb29b26e7, 0xca3996fd, 0x6576adfa, 0x1d55ea9d, 0x2bdbd5e8, + 0x5829cfd4, 0xfae73ee8, 0x4a174ae1, 0x870779d7, 0x3af51dc3, 0xd4af02a7, + 0xed4bd6ed, 0x6a141d74, 0x5f7c2fb8, 0xceffdfec, 0x997aca65, 0xbf9f5953, + 0xa73e355a, 0xff1c939b, 0x683e80c7, 0x83e80a79, 0xa704f3c2, 0xaab93e8f, + 0xfd9b8fa4, 0x21f460db, 0x96a4e3ed, 0x06e4e0a1, 0x1b0b1f46, 0x43d30343, + 0xac1e9f99, 0xe892fa72, 0x87a71e61, 0x2c3d398f, 0xaba4af5a, 0x556b895b, + 0xf6ff7d02, 0x4f10bbb5, 0x8c650bef, 0xe897ee1e, 0x07a0abc1, 0x3507a73b, + 0x7a71e6fe, 0xa31f7798, 0xbd3e3507, 0xebbc1e9c, 0xcc91d33f, 0x78a578fe, + 0x1e29d450, 0xe9377854, 0x3e281e81, 0x5dc3d202, 0x8dd37dfe, 0xde7cfad3, + 0x9c5f0fd6, 0x133db01e, 0x4e104ec0, 0xff567ef8, 0x284e54fe, 0x07d68bea, + 0xdb5d7fc6, 0x6427b5c6, 0x5e5a6bcf, 0xb6427b5a, 0xade6aace, 0xd762fa8a, + 0x8bfe8a9b, 0xd452efd6, 0xadbe3617, 0xf57f3fe8, 0xccbd4541, 0xffa281f9, + 0x14bacb9d, 0x9fd477ed, 0x5edfb451, 0xbf514171, 0xa2b5fed5, 0x84732dff, + 0x9bf5e447, 0xc88fc16c, 0x892acffb, 0x5a67d454, 0x35fd1513, 0x00dd473b, + 0xb0ffb8f4, 0xf8fec048, 0xd1ea72c2, 0xea50d9a9, 0x84e7d02c, 0x707c8cc3, + 0xcb1231d2, 0xf20b0ed3, 0x24c759c9, 0xb5b7cf2c, 0xa15e8187, 0x449cb47a, + 0x44f73d52, 0xb9d59ade, 0xea09d7a0, 0xf89f87df, 0x0a671ac9, 0x99444f21, + 0xd74a7f91, 0x026789eb, 0x27280221, 0x289f2ebe, 0xd20ef76b, 0x8a2a9ebe, + 0xa5edfee8, 0xebcfc0de, 0x074b289e, 0x3e9035bd, 0x60c93fa1, 0x3f70f527, + 0x2d5edd40, 0x39fc9b10, 0x1d702b21, 0x5d3d71ef, 0xa2f267ad, 0x3e625b7a, + 0x33dd4231, 0xe6bbfea2, 0x164ca16b, 0xa592740f, 0xeb45e7e0, 0x7bc850af, + 0xf8e13642, 0x14135d8b, 0xa79aabcf, 0xdeebde2a, 0x6bbae225, 0xbd509641, + 0xb6c2207d, 0xb3f40a2d, 0xd66d3da7, 0x75a75818, 0xadc8147b, 0x23b458b6, + 0x6bcd1dbb, 0x7f00e84f, 0x769e582d, 0xd27961b4, 0x627b59e1, 0x1f7be038, + 0x9d1cc796, 0x471d7a58, 0xc39bfcb1, 0x8e47e58b, 0xd5fe58d3, 0xa8f2c3e1, + 0xef9622e3, 0x3023c83b, 0x104721ce, 0x4c39ef96, 0x123a7658, 0x70ef3cb0, + 0xdf123ce1, 0xa777460d, 0x0b3edeb9, 0xce8017f4, 0xac55470e, 0x47d29d59, + 0x513c1f67, 0xc126748b, 0x81bd74b9, 0x829c43d3, 0xbcd4bc1e, 0xbd4bf981, + 0xd7afb483, 0xe81c3a71, 0x75edc0fd, 0xe87bfe9b, 0xd98a2e2d, 0xde943fc5, + 0x5929e8fa, 0x83594f45, 0x3925d3d1, 0x9945c53d, 0xf4e41e98, 0x23ec30f4, + 0x2a321f80, 0x55f2605a, 0xd7acefb2, 0x4b54006a, 0x29ff0982, 0x9f2f7ac1, + 0xdbed257b, 0x6ba07689, 0xdeade824, 0x9118ff91, 0xf7a1e944, 0xc67e4528, + 0xd353fbc0, 0xb770c0c9, 0xee543fa2, 0xee8f48a2, 0xc21c1edf, 0x21ac1ae0, + 0x213c6425, 0x68bf866b, 0xd6346bb9, 0x4e7004b5, 0xe199965c, 0xb6a5c601, + 0x3077c035, 0xff0caeb8, 0x778c2c72, 0xccff57f2, 0x8a2e3281, 0xed21d7d9, + 0xc4f9da22, 0xe00582f3, 0x064bd7eb, 0xe7c4024b, 0x26f5c37d, 0x74c813b4, + 0xd79cfc25, 0x86b7e029, 0xf513a8c2, 0xc202637e, 0x2397d86f, 0xbf008712, + 0x60fbe4c1, 0xf60bbcf0, 0xcf00dffd, 0x60e3e4c1, 0xcd589172, 0xfdd1b6af, + 0x331cecf7, 0xc83321fe, 0x57e64cc1, 0x9eef000e, 0x0617ea7c, 0xd105e3a0, + 0xc745efda, 0x1d12713d, 0x3a11a677, 0x17e01ecf, 0xeb6f7efa, 0x17801165, + 0xe08338ff, 0xc7c3f853, 0x9fefe069, 0x778e50cb, 0xdebc6ab3, 0xc1182f7d, + 0x30925aef, 0x0089cd7f, 0x9aca9078, 0xc26be596, 0x9b6876e4, 0x28dbdeb2, + 0xbae0b494, 0xc7b311cc, 0x5fa89e80, 0x32f6e4c3, 0x9671a52c, 0x3ce39424, + 0x22b39b67, 0x62e7bf98, 0x244b60f2, 0x8eb38bca, 0x63ffec0a, 0x71a067af, + 0x4f50f5a4, 0x020f1c97, 0xb2db4c79, 0x203fee06, 0xd73f6b3d, 0xb894bc43, + 0x9d825f75, 0x7dff4418, 0xd1077e0b, 0xb71a5d62, 0x1a7445ae, 0x5be784ae, + 0xf7d1f314, 0xf5a527cc, 0xdf177e67, 0x8949c968, 0x78bea96e, 0x0b1ed611, + 0x8d78bbf4, 0x69ab2edc, 0xaf515bb9, 0x8d6fbb6b, 0x82ab8edc, 0x25fca85f, + 0xe81682f5, 0x51939aa6, 0xb56c368f, 0x3cb7d740, 0xa9788cda, 0x9abf5813, + 0x4edeaf20, 0x656b9d1f, 0x7d681b78, 0x19411d67, 0x8abf8a5a, 0xf83d46a0, + 0xa32d1559, 0x9ccf410a, 0x07195d6b, 0xec4ab7fa, 0xe016d7bd, 0x79723ffd, + 0xf3a5d8bf, 0x4e7ced29, 0x2b8e841f, 0x09fd37db, 0xd68bc3f3, 0x2e2c35bb, + 0x28f71ea3, 0xe0d57b8c, 0x72dda9f0, 0xb9aa78b0, 0xdb6a9c3f, 0x28ede82e, + 0x397fe917, 0xe092707d, 0x76da3cb7, 0x5f8e9a34, 0xf185dcd9, 0xe73ad38b, + 0x43bffb88, 0x5fdff65e, 0x50c9c258, 0xa49cbed9, 0x6bb9e613, 0x98889f12, + 0xca90f96f, 0xeaef33f1, 0x7221c808, 0xad92f689, 0x4d5b9c03, 0x73df9f4e, + 0x29556b57, 0x1bccfbc0, 0x5befd1d3, 0xc4466c40, 0x01cc6903, 0xd11ce73f, + 0xce9c0094, 0x138cf791, 0x14b87864, 0x53f847ad, 0x7c98e83f, 0x520fd47d, + 0xa41fa9d4, 0x1b9397a8, 0x4e54b4e3, 0x23a93f96, 0xa7f7012e, 0x368eef68, + 0x488bb8e1, 0x35d8037d, 0x2ef0fc52, 0x5326d113, 0xbbf35eb9, 0x20ca72e7, + 0xecc31dde, 0x7f5ce961, 0x89f19531, 0x65b2bdb4, 0xdb4adea3, 0xb84eb78f, + 0xfa684a99, 0x0921abbe, 0x175febce, 0xfdcd9b2c, 0xd77dfbe1, 0x64af5eaf, + 0x2fcbf52f, 0x69a8ebe0, 0x00aeac16, 0xc3191674, 0x07d257e8, 0x45263119, + 0xaa8c691c, 0x2f55593e, 0x7d55fa82, 0xcfcc1ff5, 0xcfc14431, 0x63eda3cb, + 0xff196262, 0x682c9f82, 0x3fcf487d, 0x7e84fc78, 0x51fe4fe3, 0xf2514fc7, + 0x28bf1d19, 0x711faae6, 0xd6fd61fc, 0xf8d0333f, 0xe57bbf35, 0xe795270d, + 0x653daf95, 0x38ced424, 0xb38c6da3, 0x6f57fc50, 0x3a04655e, 0x1a75ad38, + 0xb8cf9e81, 0x005712c4, 0x4fdab679, 0x0130d60f, 0x2bf09ce2, 0xcbecff1d, + 0x7e0f5f0f, 0x759b97cb, 0x365f8c26, 0xca063c1b, 0x8badb5a7, 0xac58c94b, + 0x2ffab177, 0x6f50882e, 0xe567d253, 0x338a9e6f, 0x259d2387, 0xef4e306b, + 0xb6a07f41, 0xd06293e9, 0x87c475ef, 0x0f7ea67c, 0x8518bfe6, 0x1f4ca7fa, + 0x031dbfd1, 0x3ef07122, 0x7d6ba9fb, 0x846882f8, 0x2053daf2, 0x82e7a84f, + 0x7bf51871, 0xbfcedc15, 0x063c262f, 0x3244d8e5, 0x0498e411, 0x7662e217, + 0x7e97cafe, 0xae8bb639, 0x5de9bbab, 0x978320a3, 0x2dbd6fc4, 0xbdff9ff3, + 0x79b96079, 0xdca3f29e, 0x82f4949e, 0x27fb8db9, 0xeb56566e, 0x54a9c63c, + 0xd46f543e, 0x71f49c59, 0xbc2f2bf5, 0x1f882bf8, 0x0cb0607f, 0xbd57e3a7, + 0x29fde7b2, 0x55b55eb4, 0xb6ca5317, 0xf5c42611, 0xfe8ea7e1, 0x0fbe365b, + 0xf7db951f, 0xd863cde8, 0xfaa207f3, 0x75b552f0, 0xe98c9e97, 0x96828f0f, + 0x586f7a5d, 0x74b4fc00, 0xb5bd8315, 0xf4afa5f2, 0xb33b5210, 0x19f12053, + 0x71b9e001, 0x0063da0f, 0xc727c427, 0xaa7f1f97, 0x2f1475fe, 0xf8d5d720, + 0x8dbbf752, 0x17181bcb, 0x7d285af2, 0xba7bfabf, 0x1abf8a8e, 0x8a87002c, + 0xc231ef57, 0xeb694e7e, 0xb73f9d19, 0xe74ace2a, 0xe339d0af, 0xe7b2584c, + 0x29febf15, 0x83a2dfd2, 0xf1638d3f, 0x06a26b41, 0x11339575, 0xc370b9f6, + 0x72cfb84d, 0xac3a4762, 0x81b44e78, 0x4b42fcbc, 0xe006b64a, 0xf4cb1213, + 0x144da9f3, 0xa79f74b9, 0xf9071fc0, 0xdae89efe, 0xddcb7e8c, 0x29fc7f18, + 0xd8b50bdf, 0x1045feb0, 0x31fbd7c3, 0x501f6e1a, 0xbf4e5deb, 0x04e8bf4d, + 0xb54d9d3c, 0x5739c3c6, 0x393ad11d, 0xe96f843c, 0xa2c1e2b8, 0x62278678, + 0xf7f0e6d6, 0x0055dda8, 0xa77fa1cf, 0x563c1ace, 0x36f91ef1, 0xa5fe6fa3, + 0xeeba7e7c, 0x4e97b010, 0xffb605c5, 0xd1fdf0c7, 0xa3224e9f, 0x33bf1933, + 0xc35a6ffe, 0x7fe25df8, 0x6812ccd7, 0xe310fcff, 0xf40f7823, 0x27975d25, + 0xcd77db1e, 0x183e5016, 0x9f102788, 0x9f38e937, 0xf4d5db2b, 0x15afd742, + 0x03746422, 0x1e2144f3, 0x7f2a9ed0, 0x932fbe92, 0xaf3075a3, 0x12b8ffb1, + 0xf2e22f1f, 0x792a9fe0, 0x39303640, 0xeb5db030, 0x9d30f164, 0x015fc5eb, + 0x757e52ff, 0x757f819a, 0xa7ffd836, 0xbfdfda5b, 0xa7edf28d, 0x2adf122d, + 0x6f9aaae5, 0x94fdb62b, 0xf9aa9d00, 0x7a94d3f6, 0xe96f9012, 0x9b7c80f3, + 0x911ffde2, 0x871c12ab, 0x28e12ac5, 0xe081c9c9, 0x7f9396a9, 0x94073188, + 0x10e7f493, 0x8f4fe9c9, 0xf44a1d12, 0x9adbf957, 0x7e479074, 0xd0e8953a, + 0x1d12a74f, 0x84adf7aa, 0x9bbdbaa3, 0x6df018e2, 0xe787537b, 0xc16ed519, + 0x777e4065, 0x46ce4dee, 0xcd515978, 0xc9bdc691, 0x4bbaf231, 0xf5516f55, + 0x36eaaab7, 0xaabb7f55, 0x5fe8af5e, 0x27aed6dd, 0x451e0748, 0xb3d9713f, + 0x4084f8e4, 0x7e62eb74, 0xbd05eb52, 0xcc23e813, 0x56ebef87, 0x23e42710, + 0x788876fa, 0x6143d34e, 0x84f100dc, 0x272e192d, 0x82ab2395, 0x8bef1f99, + 0xdc8037d5, 0x8cf931eb, 0x660f5051, 0xcd8f71f6, 0xd9948c67, 0x116e5d99, + 0x45d7b6e5, 0x39f9024a, 0x3c20b354, 0x76a064bd, 0x13d4fe76, 0xf30b1c62, + 0x69618915, 0xd3be20cb, 0x48e05a28, 0x5bf2c169, 0xd40e708c, 0x61bacee3, + 0xf0be7d0e, 0xb9a5916d, 0x44daad38, 0x9a717f99, 0x15ce9f38, 0x2d76df20, + 0x377cc9d2, 0xac1637f3, 0x95f74c0d, 0xb0f2bdfc, 0xaf907aa5, 0x26384fd4, + 0xc691473f, 0x7aa0d8a9, 0xf9ce9eee, 0xeafd11a3, 0xbb6526ca, 0xaba5fb9d, + 0x4718fe25, 0x90bf71c6, 0x7cb845c5, 0xdf47122e, 0xa1e28730, 0x0c489f67, + 0x16ebdeb4, 0x5bbd0f11, 0xb5c41704, 0x9d963388, 0xca1f1357, 0xdd5e0945, + 0x0d9747c0, 0x5fbaaf2c, 0x7ee738ff, 0x3e3797a0, 0xd02cfb1c, 0x8c1f1bf3, + 0xbfea0b78, 0x21f6923b, 0x60bfdfe9, 0xc39e3067, 0x470cecf7, 0x71d9ef3a, + 0xa87eed20, 0xc0b069bf, 0x7e767b3a, 0xa6e81635, 0x02a18567, 0x2a4f5de4, + 0xdcae8b8b, 0x2f58d5f1, 0x1107d9ea, 0xf563db7f, 0xff725ecc, 0x0c426ff3, + 0x60577494, 0x450cec47, 0x7dfbaa3e, 0xf8e08bb0, 0xc3d8e55f, 0xd4fdbc7e, + 0x9e8bbcf2, 0x1b673270, 0xe5922fac, 0x35bdd415, 0x74e585f9, 0x5dd69afe, + 0xbdb4f9fa, 0x1aff0fe0, 0x67b4720b, 0xce8fb31b, 0x86bfbceb, 0x4f9d82bc, + 0x47487fed, 0x981e75f1, 0x23da8929, 0x074f874f, 0x970fe97e, 0x6a9c617f, + 0xfc38f0a8, 0x821e06bf, 0x70b9c995, 0xfb009057, 0x1f6ffafe, 0x80d17c62, + 0xf7ed2974, 0x68e596d3, 0xefb60cb7, 0xdb9fffcf, 0xca19e0b7, 0xfee3a3be, + 0x4cfdf7b3, 0xa7d719ac, 0x74fe83e6, 0xac5ee3be, 0xc16e12bf, 0xde910ef5, + 0x38b1c427, 0xfeea7fcd, 0xb7de37bf, 0x071bbc51, 0xff8df7df, 0xf6fef16b, + 0x13778e3c, 0xfdd6539c, 0xbeb85fe1, 0x96e72bef, 0x7de387fc, 0x764bfda0, + 0xeb6341bd, 0x9beba3cc, 0xc1c31a43, 0xb635b8b0, 0x32a43f77, 0x8f3f521a, + 0x54eaf581, 0xf95296e7, 0x9ff31c42, 0xfd068274, 0xc0937242, 0x4fe642fd, + 0x8bedcf5d, 0xd1ca53eb, 0xcadebd7e, 0xb5a27cec, 0x21b2f2d9, 0x05816f6f, + 0xfc64a6e3, 0x6fd43b51, 0x4aebc69a, 0x024ff2bf, 0x8ed40ab1, 0x64ad3ebf, + 0x37b3d81f, 0x063d68a4, 0x79417656, 0x4f9fc8d8, 0xb73dfa52, 0x5bf595da, + 0x37eb28e6, 0x066ef1f1, 0x7fce8ae3, 0x41704db3, 0xfa97549c, 0x4dc42c64, + 0x44750b75, 0xa77f2010, 0x17f8157e, 0xef94d937, 0x991ee83b, 0x98e0c8ff, + 0x40256612, 0x8f6e3a17, 0x58598616, 0xd846c53d, 0xfb0b90b9, 0xc4ac636b, + 0x9f2fba39, 0x59507178, 0x04739c15, 0x8e10148d, 0x5115ac37, 0x168d050e, + 0x49b65d70, 0xfd1fcc3a, 0x01cb6344, 0x984e94fc, 0xb633fb58, 0x69c00b0c, + 0x39738731, 0x893b47a9, 0xdbf6fa5c, 0x2b881cdc, 0x16b3b413, 0x4199095b, + 0x5cf282fd, 0xf90213c1, 0x8ce25a46, 0x56f10f18, 0xc4531c81, 0xf875955b, + 0x6fae3ab9, 0x0ffac19c, 0x763fc744, 0x37ca77f9, 0xd26ba8c7, 0x9c70e505, + 0xe3f72b5e, 0x383374ee, 0xae0b55d6, 0x8f47a44c, 0x673b26ce, 0xf1678b4a, + 0x303fbfbf, 0xef31f901, 0xcc1131b1, 0xefc6ccbf, 0x7db8eac9, 0x4734ebda, + 0xd7a55c40, 0xe3cfc59d, 0x00f68c0a, 0xfb90707c, 0xbc817f75, 0x14f65a32, + 0xf8228d0a, 0xf187c40d, 0x30616744, 0xef201cd9, 0x0d389bf1, 0xa3d6438f, + 0x623f099f, 0xfd91e00e, 0x46afa22c, 0xb6f0c944, 0xed19c676, 0x8078fed8, + 0xf3b2639f, 0xbe177f97, 0x5c0247e0, 0x8b7b060f, 0x6bf6016d, 0x5f7c678a, + 0x3d6bfbba, 0xba37f1f8, 0x97007433, 0xc5450b1b, 0x3c506d39, 0x9027ffb7, + 0xd2aeb009, 0x271ad7dd, 0x89f65e03, 0xdf0a6096, 0xbd05f73a, 0x9ff9c03d, + 0x3e309e1a, 0x2ce8339e, 0xe3cf00e5, 0xf013048f, 0x73f00ed3, 0x8f90d1a5, + 0x07431a3f, 0x25638856, 0x53b8b3c6, 0xcb09bc6d, 0xba79a559, 0xe8ef3a58, + 0xc838d356, 0xfde24fe3, 0xd8cde36b, 0x93dfcc9e, 0xb35525fa, 0x537a5d7e, + 0xbffda06d, 0x73f02098, 0x93bdcb13, 0xbc3cff84, 0xee163de5, 0x543d07c9, + 0x6aedf928, 0x1fc826ba, 0x0b8225bd, 0x5df804f4, 0x50152f58, 0xb0d01d4f, + 0x4c8de776, 0xaf744b9e, 0x87317386, 0x797f34b3, 0xe9e7a33c, 0x3824bf9c, + 0xaf55f04b, 0xe54fea57, 0x78f235d5, 0xe36d0dc7, 0x5a3d055e, 0x1a4c16eb, + 0xd6ad543a, 0xac3e07ab, 0x075c7b6b, 0xcd5bfef1, 0x47aa5c6c, 0x8fcfcac6, + 0xb8b5e36b, 0x53f1f69e, 0x7c9d01e7, 0x33da96b6, 0x82eb7df4, 0xc390460b, + 0x3f963407, 0xf3921e43, 0xfcd9224f, 0x43eaf21d, 0x50b2a987, 0x03371f27, + 0x3aab39d7, 0x99e1074f, 0xe977abdb, 0x54f465e2, 0xed851f1b, 0x6aa4f3d2, + 0x4e7878f3, 0x3875c3e7, 0xf810351f, 0x4b74601e, 0x79277e27, 0xa3247d7b, + 0x5d968ac3, 0x6067ac7a, 0x693e697f, 0xcd3f351e, 0x9be6552e, 0xa6f02fce, + 0x0d4a5c00, 0x0096a59e, 0x20991a74, 0x4f7c739d, 0x74a5613d, 0x23fff63b, + 0xd254b13d, 0x6fcc5e13, 0x80ffde96, 0x9e9939cb, 0x27a40f88, 0xc7372c96, + 0xec961e03, 0x26078ac8, 0x5176f259, 0x713d205c, 0x2dcec1d8, 0x91eff08f, + 0x3d53667b, 0x4f4ca571, 0x3a460ecc, 0x1ed7bf51, 0x213d443f, 0xb2ffede1, + 0x7a0c39bc, 0xbf7f0022, 0x3713d2af, 0x4f50cbbb, 0x545b3cdc, 0x6073577c, + 0x17913d50, 0x75d62b77, 0xf400d096, 0xd1db9873, 0x375e7847, 0x22fa03cc, + 0x7084c12c, 0x818deb53, 0xa1b6fae4, 0x21fff5ca, 0x7d724b38, 0x0db3b509, + 0x90e88119, 0xb92f3d20, 0x0175ca95, 0xf5c991e8, 0x78f07725, 0xdace4a9a, + 0xcb66ce40, 0xbf7b2ce5, 0x42f4ced6, 0x2fc65b5d, 0xdbf6d2e7, 0x2096751a, + 0x3eb6ffda, 0x97239bb9, 0x2c0961bb, 0xdc9faa8f, 0xf77260ad, 0xb404f733, + 0xdfda069f, 0x52de5cc7, 0x12cc3679, 0xcce63e80, 0x777c550d, 0x1fdc7c75, + 0x7e076f47, 0xb9e22039, 0x0edc27e1, 0x8fee3fd8, 0x574f60d9, 0x70e4f5f2, + 0x90779e7c, 0xbf0a42ca, 0x9ecc0582, 0x2222d9ae, 0x195b6afc, 0x0b36d7ff, + 0x17ad332e, 0xcf1aff8f, 0xb076aaff, 0x83ba3ff3, 0xfe193cd2, 0x1b780eab, + 0xb55cee20, 0x4bf3c051, 0x78075bc8, 0x2cf0e22e, 0x9fa154b7, 0x5863cea3, + 0x44dc6213, 0x30f1c4ae, 0xfbc35aee, 0x187c1a97, 0x8dfd2ec7, 0xfa48d960, + 0x0cd43be7, 0xf80ceebb, 0xaacd5527, 0x783596e7, 0x185f014e, 0xd35b5d83, + 0x25bf6ca2, 0x42ddf181, 0x3b7a33d1, 0x167f65f8, 0x9df4812d, 0x9f0fcfd4, + 0x3e137f8a, 0xb27c2907, 0x2cf83c7f, 0xb8c2ef76, 0x8b85f7f4, 0x26b71e1a, + 0xdf02f950, 0xd9278de9, 0x689f8fc0, 0x9c5f28ac, 0xa79888ef, 0xe1f1e0b2, + 0x162cfb8a, 0xd01cb871, 0xa1121bd8, 0x67cb2d5f, 0xeb61b459, 0x9f5a389e, + 0x41c642db, 0x7ad17b38, 0xebf63ea5, 0xea3356ff, 0x5bf5b9f7, 0x5c8bc805, + 0xaaf7bfc8, 0x0c5e3d70, 0x2c7731f9, 0xf69efaa3, 0x60de3f9f, 0x83d7f387, + 0x9f943ec1, 0xcd3efd12, 0xbe49f7e9, 0xbe49e38e, 0x6d53d442, 0xd2f90982, + 0x16f4cc13, 0xad3053c5, 0xaafe4fb7, 0xc585e398, 0x1e18da31, 0x80de28eb, + 0xbcdd8baf, 0xc1ecc2de, 0xd817dddb, 0x977b99b9, 0xa0abde0e, 0xde51a3fd, + 0x96efd059, 0xe39c23f4, 0xf0c9c5e5, 0xd18ba3bb, 0x82c166ff, 0xbff45c0f, + 0x03bf077f, 0x67b255e0, 0x095f8a86, 0xf0ab4f4e, 0xb3b8307c, 0xf39e0274, + 0xd04d9608, 0xe7891dd9, 0xd91a2712, 0xfc4d25fd, 0x805f353d, 0xc59661ff, + 0xc2c26665, 0x24b5af21, 0x7102f318, 0x9f664cde, 0xff94e5c9, 0x7e5e39fb, + 0x3a983cdf, 0x597689d2, 0x3d9afe5f, 0x2bc61e33, 0xbccab411, 0xfdf21f32, + 0xc7fe308f, 0x493e35df, 0x72fd4208, 0x6d3d898f, 0x2713d54f, 0x3ad5f7c8, + 0x345ba3a4, 0x4173f7e6, 0x23a43cbe, 0xed9f1fc0, 0xdcc8eabf, 0x91176818, + 0x4c0eca3e, 0x4ad085a8, 0x227dcb19, 0xbd31f765, 0xffcf9c74, 0xadafaa57, + 0xc129f197, 0xba44760e, 0xd9c0fbe0, 0x66455d96, 0x1f64b788, 0x6ae7055c, + 0xef4c0ab3, 0x5c780fbf, 0x3ba64223, 0x00bab639, 0xee7bb4fd, 0x8ecf9016, + 0x38c17c52, 0x78cecd37, 0xbeba7dff, 0xe2c7563b, 0x6b5cd8f9, 0x5e70cdec, + 0x68bf7736, 0xf37ed331, 0x830f086f, 0x23e9b5f3, 0xc1976245, 0x89d20ee5, + 0xf5b99df1, 0x7c04df77, 0xa1f54152, 0xc1e50198, 0x6fa878a2, 0x3afdf010, + 0x260f5da7, 0x0bfae74d, 0x7f3a6cfa, 0xe007ed39, 0xfac0dbae, 0x160935d5, + 0x772df948, 0xb2728e3f, 0x0bc049bc, 0xfda93a4d, 0x75c6c41b, 0x3b71d105, + 0x69f7d037, 0x0fbc117d, 0xde4536e3, 0x7560e70c, 0xfef89d74, 0xee78e5a4, + 0xa3df4e59, 0xe9b3a4cd, 0xf16f1c6e, 0xc9008106, 0x78ca4c56, 0xb78c1274, + 0xf681675f, 0xd19ebb23, 0xd1e7bac3, 0xf8e912f9, 0x116f45f3, 0x17eee3c6, + 0xce6f784c, 0x77c80596, 0x48ef9c3d, 0xee767cfd, 0xfbe9102d, 0xff3cad2c, + 0x9644eae1, 0x6cbe5d4f, 0xcbec0379, 0xd0cd8ceb, 0xd05d3d20, 0x413f1e83, + 0xf6a76de1, 0xcb3d71eb, 0x1e7768ab, 0xf2657bd7, 0x2cc4f6f3, 0x6d05ffa4, + 0x16672879, 0xcf9e1b12, 0x7b3397db, 0xb0556ba4, 0x4c3b004b, 0xe7834a67, + 0xf80cabed, 0x4c2bfcfc, 0xf54f9cef, 0xd4f51c62, 0xef811d06, 0xc86e56d6, + 0x78f01a7a, 0x02ce8b6a, 0x39f169f1, 0xe8bd2e76, 0x6b271615, 0x3dc6c0df, + 0x5be4ccd5, 0x153773c1, 0x445edc83, 0xf70194e5, 0xe56394a7, 0x53944ae6, + 0xb93305cf, 0x6a5796a4, 0xb8d15539, 0x5a1eb031, 0x0f581c5a, 0x38b034a5, + 0xb9fa00e7, 0x7b31848e, 0x0f193c77, 0x35652b79, 0x03d6f3a9, 0x12c1df3d, + 0x6f3d3bc6, 0xe814f17e, 0x0270eadd, 0xa6b56a4f, 0x1f4605a7, 0x5cffe404, + 0x802fd6f7, 0x06e62a1f, 0x272f005b, 0x47c01f01, 0xbcf1a36b, 0x8655dcb4, + 0x3af29770, 0xd257ad17, 0xbc8714bb, 0xab122ed5, 0x84557f5c, 0xdfacab12, + 0xba539f91, 0xd9dcf3a5, 0x0582b826, 0xfded77a8, 0x4dd63669, 0xdc65aeb8, + 0x8e1b583e, 0xbee47d74, 0x6e80ab0b, 0x10203de7, 0xd389dbb0, 0xb0fa00de, + 0x8660bd76, 0x07a2eeb8, 0xe88bfbd8, 0x23eeb0fb, 0xa2fa30cf, 0x3e066e74, + 0xf8f0dda8, 0x24dfec5e, 0x23fc6198, 0x9ed0cb1b, 0x048a70a8, 0xd0ba9bdb, + 0x0afaa08f, 0x9dda9bf3, 0x41f01c62, 0x130683ed, 0xf44b939c, 0x1767d124, + 0x412567cf, 0xe8b3b196, 0xe689417b, 0xce297480, 0x14fafc11, 0xc9cea7e8, + 0x15ebade8, 0x6458059d, 0xdf64fa70, 0x27f44b41, 0xf765fd02, 0x86fb5fd1, + 0xe3d03d02, 0xe7809729, 0xbf4005f9, 0x492f9f40, 0x261219f1, 0xa306a3b7, + 0xf61d354f, 0xd9b83fa3, 0x3e8fab28, 0xd3547a25, 0xb92d31e1, 0xcf7dd619, + 0x47dc60aa, 0x379bc341, 0x867c632f, 0x0d0540e7, 0x5f01c5f7, 0x5e596b97, + 0x1ad70489, 0xea43cb2d, 0x9727aeb7, 0xb28713eb, 0xae3ad53e, 0xe3ef0c48, + 0xc9e59107, 0x7f3ce878, 0xe602f2dc, 0xb97b9deb, 0x6fb47aeb, 0x0074a2de, + 0x4e12dff0, 0xb887e83c, 0xb6551e50, 0x67cc568a, 0x66727ad4, 0x2977fcc9, + 0xb5eaa2ef, 0xe5778470, 0x94ab8336, 0xc6f95fbe, 0xfe78b1f1, 0xdfd982bd, + 0xb40597ce, 0x3bd3898f, 0xa91bbe16, 0x0ffcb2d4, 0x62f05db5, 0x75778b22, + 0x073a19bf, 0x79a136ec, 0x551f9e17, 0x33a2dcb6, 0xcfbbe2c8, 0x7ea4ea25, + 0xa4e31e78, 0xe3ef8678, 0xfbf27d61, 0x8fbca4c9, 0xfd1897ee, 0xd0e9b655, + 0xde6cab9e, 0xfff21e7a, 0xd01a8f2a, 0xbe6baddf, 0x05cdf980, 0x0462bdaf, + 0x89b5d478, 0x7eafbc8a, 0x22cd56f9, 0xb6d48f9e, 0x07fe60d6, 0x4939e3ad, + 0x6fcf0b6d, 0x40f99efa, 0x78edaf55, 0x584149c3, 0x4637fdb5, 0x9db3bfe0, + 0xbdf88d9b, 0xe777f34b, 0xafcbf63f, 0xf3c3596a, 0x229c66ab, 0xe7031f28, + 0x5f859d57, 0x26752128, 0xca4e7b72, 0xf2666b53, 0xc733ae8d, 0xec6e2016, + 0xf95ebbb7, 0x1f90d7e2, 0xd3edbddc, 0xabbac35f, 0xd7ecf9bf, 0x7641cf90, + 0x4ec09b06, 0x30f97ba9, 0xef4a53e6, 0x7ee44d9d, 0xc1bf4be2, 0x1ff3d47c, + 0xda302c18, 0xd2a71df9, 0xbf38fec0, 0xc838ebf5, 0xa3ba5d33, 0x4b3be308, + 0x27882f5f, 0x5207e201, 0x1aebf409, 0x1aac3e42, 0xedaded6f, 0x8e727798, + 0x84e41de2, 0xa5ae6f3f, 0x9a23e586, 0x96dcbe79, 0xfdc7f9c0, 0x675ae3f2, + 0xe40d30dd, 0x13b32b63, 0x3b93cd06, 0xe579f144, 0x85b8f010, 0xccb643e7, + 0xb93ccef8, 0xc50bf073, 0x32927057, 0xd68bee4f, 0x0affcf85, 0x07a35ada, + 0x0cf393cc, 0x7e527e01, 0x6b44e1f3, 0xd1f0124c, 0x7e62dfb6, 0xd4afe022, + 0x8bfaf20c, 0x9f178834, 0x2e30f9d6, 0xc061dbe1, 0x772aedef, 0x3a7e411c, + 0xcc41faff, 0xcf3c261f, 0xfff13cf8, 0x1e507cb0, 0x0a6baa03, 0x1c75f967, + 0x677f900f, 0x9e73e236, 0x5ae8c767, 0x281bbfca, 0x8934aeef, 0xde5255d9, + 0x87d34d75, 0x0fad9f3c, 0xc024c26f, 0xe677d757, 0x30704a35, 0xca261c01, + 0xe7034af3, 0x4af3fa39, 0x7c037855, 0xe7f71c82, 0x0a7ad28d, 0x84ba0fe4, + 0x94f28123, 0xf9646fcf, 0x8175e7a8, 0xf2956fbf, 0xc2a27f4c, 0x81dfb4b7, + 0xdbe245f8, 0x7df1f6c1, 0xc93134e1, 0xe1aae38c, 0xb0297dd5, 0x124caf7c, + 0xd23df486, 0x542fdf80, 0x23efea0b, 0xd65d0316, 0xf1e976b4, 0xafc90b9e, + 0xe6edfbe2, 0x97eeb6f1, 0x6c3bcc45, 0xf9476968, 0xb51f96ae, 0xbd451cfc, + 0x989207de, 0x636daadc, 0x5b7ba3fa, 0x8e8c2bb8, 0x4dfbbdd3, 0x2ddaeba4, + 0xb8f7985d, 0xdebb79b7, 0x067f3b2b, 0xad92e1fd, 0x5dd5fbbf, 0xf39e5163, + 0xf3d4ad7b, 0xa9e7c43c, 0xa79e0773, 0xc505cb6e, 0x16ce553c, 0xf06c29bd, + 0xad6acef9, 0x6778c0b7, 0x751d993b, 0x092c45b6, 0x4d4efdf4, 0xb39f8e92, + 0xea92b237, 0x2bdfbc51, 0x25e7dd9c, 0x2ed0431a, 0xe93e1a5b, 0xb923dc28, + 0xf98f5c34, 0xf3972b17, 0x5b9f8d7c, 0x2bdf0012, 0xb023afc3, 0x5f0055de, + 0x33af7f99, 0x73d809d9, 0xb65b04ba, 0x5a461cfc, 0x43463ebf, 0x2ffc325c, + 0x07892f0d, 0x9d6894ff, 0xeb8eb029, 0x82d2bf33, 0xb074ec5e, 0x74b93ef8, + 0xef3c187c, 0x44f69ad4, 0x0b3b71d3, 0x66840b05, 0x4bbdd3fb, 0x69987f11, + 0x0a83de55, 0xbfb0fe39, 0xed068b5e, 0xc78d70c4, 0xf090bb44, 0x7404cee0, + 0xacc4cd70, 0x7cd4c38d, 0xc87f8fcc, 0xbe0c3411, 0x6a1233ef, 0x8b3f42b6, + 0x462f7156, 0xeaad24c4, 0x68720c9e, 0x30d7a518, 0xbc52af4e, 0x4efd9c2e, + 0xfde2f5c7, 0xc9a3911b, 0xb5df2072, 0x27b476e1, 0xf8ad19d6, 0x19fd1afd, + 0x51127909, 0xbf22c424, 0xabce87d7, 0xce840fb8, 0x5a47a8ab, 0x12e8f595, + 0xfa4089ed, 0xa3af9a26, 0x38430c58, 0xb8691644, 0x1d2d6cbd, 0xeeb7d71e, + 0xf16258c8, 0x308cfb40, 0xeca74bcc, 0x23ef94e5, 0x6eb94c2c, 0x9c853eba, + 0x75ed1888, 0x153ad86a, 0x2cc44dcf, 0xcaadfee0, 0x8abd74e7, 0xdc4927fa, + 0x2d12d14e, 0xa0b0bbc8, 0xdfe1c24e, 0x83f780ab, 0x1c545b5a, 0xd6132a61, + 0xdf099749, 0x7df04437, 0xfd15f9d0, 0x603d104d, 0x21c72bf3, 0x77f92629, + 0x3d725789, 0xedb26af8, 0x3937904b, 0x2098f5e9, 0x58209b9c, 0x6da04c4f, + 0x4f9418ee, 0x300acb99, 0x6468452f, 0x2d6c3574, 0xe619be41, 0xe42ff963, + 0x53b410c1, 0x19c4410d, 0xb7be1e3c, 0x78dd4e22, 0xf9c5c598, 0x4342bccf, + 0xa6aed287, 0x73df46b4, 0x0b35f2fb, 0xa05a1229, 0x59ff8e89, 0x4c975592, + 0xb4cc35fb, 0xc1c66827, 0xd23cd6f6, 0x3b5c8291, 0x9a86220a, 0xec0fabe5, + 0x8552c69b, 0xe2075ee0, 0xf4007d5c, 0xa754a370, 0xfbbe1d82, 0xd7f10c6e, + 0xde5441ad, 0x7ab26637, 0x1fabb3f4, 0x5e47fb81, 0xc345b74b, 0x74c8243c, + 0x79879e39, 0x83ff70a2, 0x9d6917e9, 0xc5bc9b23, 0x9e2cd921, 0x0ecff70a, + 0x877ff70f, 0x7378fa8d, 0xa0f75498, 0x3d6b617f, 0xa6ad7288, 0x6bb620e5, + 0xf4cb4ea0, 0x72716f68, 0x925b7524, 0x3091999f, 0xb2daec0a, 0xe7dd0d04, + 0x0e67e4d4, 0x70e56368, 0x07014e78, 0x0f678aed, 0xc3954bec, 0xc003d9e1, + 0xc38543eb, 0x7d9f67d4, 0x18c7ee04, 0x5d29beea, 0x7386494c, 0xde0d3cf9, + 0x68f135c3, 0xe85fc618, 0x23ea304f, 0x01c6ce3e, 0xfc95d3be, 0x3e4e3a14, + 0x97d1238c, 0x57449ef4, 0x164dd103, 0xeece5d31, 0xcfd25477, 0xe9d6c93d, + 0x64d2c780, 0xab94c5eb, 0x5df8ff70, 0x997b74f8, 0x8fba30ad, 0x7d9849ae, + 0x30e18dc2, 0x61b35dff, 0xd35d697e, 0x998896f3, 0x264c2710, 0xb83c77d2, + 0xce65d89f, 0x9f7411e0, 0xe60d56b1, 0x6c9abf6f, 0x33de0dbf, 0xa879f1ce, + 0x8026a478, 0xf620827d, 0x47f123cd, 0xc7e60ec3, 0x5c699437, 0xb079d82b, + 0xd1f5e300, 0x1f455787, 0x6d1f463e, 0xb51f485d, 0x1f462eee, 0x43f3cb6d, + 0xf81ab9f8, 0x37c48dd1, 0x9f5ef00e, 0x4b4336dc, 0xea1e9ef1, 0x74a6486b, + 0x3ebe73a1, 0xc21474a3, 0xd0e016b5, 0x5d7c3f0f, 0xc206bed2, 0xccbee36f, + 0x9f834787, 0xe7835fb9, 0xa4dc1261, 0xb3254f7e, 0x54a2ccfc, 0x8700fdfb, + 0xbdde49ba, 0xfb6dbe80, 0x0ebcc3de, 0x771bfee3, 0xd9c6fbc1, 0xbee64314, + 0xaff71b79, 0x1b9e7bc0, 0xe5deecdd, 0x8273e208, 0x1e181f5e, 0xf0fc7f8c, + 0x3467bb00, 0xf90ba3c0, 0xddfe65e5, 0xfc3be512, 0x943d374e, 0x68f123dd, + 0xdedf3b32, 0x92f22c94, 0xfbb161d9, 0x7fe0f57b, 0xc1a83dd5, 0x8e50b1fe, + 0x41ffef96, 0x5929b7ec, 0x93c3c8ab, 0x13d12af0, 0x70a1a495, 0x8675451f, + 0xfd2559fd, 0xca668544, 0x7bde93c6, 0x0b6c41d4, 0xec4ca128, 0xd01eebb8, + 0x967e94ab, 0xa31bde29, 0xf9b8060b, 0x67d287e9, 0xf7d0fc20, 0x177c625e, + 0xc2f60a15, 0x22258ed6, 0x4430abde, 0x7dc0e6bc, 0x4e7fb482, 0x46dfa928, + 0xa089cfdf, 0x79a3d425, 0x93d79e3d, 0x91f59959, 0xe7d02345, 0x765c791b, + 0xfeff3257, 0xfcba6b4e, 0x675031c6, 0x084dcd70, 0xf120bd45, 0x0f8296ad, + 0xfcb5b5ce, 0x97d33b7c, 0x49bc01a9, 0x69f5ac7c, 0x6954e13c, 0x1acd6a65, + 0xc77873c8, 0x79c1b761, 0xe77240e1, 0xbbec51ba, 0xc3f3f542, 0xd83f3d7c, + 0xdfbcfebe, 0x8187c7f7, 0xbc826a6f, 0xeb48de8f, 0xc33ea3b5, 0xd08aed38, + 0x75dfa9da, 0xfd7a820f, 0x653a5cef, 0xfcf0fb04, 0x20494345, 0x85383b3b, + 0x639f6dc1, 0xc397be0e, 0xf12379ef, 0xecabbe52, 0xe36845fb, 0x32a21976, + 0x9da39f13, 0x408a3575, 0x1b53a7c0, 0x6687ef05, 0x35e2b9e0, 0xa518efaa, + 0x3dabb2f3, 0x13980e2c, 0xf9c52ae1, 0x3cc2c8ae, 0xd9917242, 0x3ff4414b, + 0xe22a8738, 0xa3d666e7, 0x87500ea6, 0x858dd139, 0x06447e38, 0x88f2b5c6, + 0x9cb67ef2, 0x0356a778, 0x381959ed, 0xaa90415e, 0xdc608b3d, 0x39765c8a, + 0xc888afee, 0x1bd433ec, 0xc790168d, 0xfa5247d3, 0xa33fcfe7, 0xe40dd2ff, + 0x3f3299ce, 0xadf35ae3, 0xdd8542b6, 0xc2f788d2, 0xf12ffbbc, 0x17f940ce, + 0x3f30a577, 0x66c39f63, 0x35007c83, 0xc2cdf31c, 0xfee6e183, 0x4fc356f0, + 0x8e096f0d, 0x7de5b86a, 0xab842964, 0x51f0d4c7, 0xfcefa3c3, 0xf016b5d2, + 0x44523450, 0xbdc125fd, 0xbe187c3f, 0xfb451dde, 0x142f4009, 0x2ccf00de, + 0x247bf301, 0xaf88b6fb, 0x68b7da8f, 0x86c416bf, 0x0d47dc63, 0xb470fed7, + 0xf5c51696, 0xc02f6fed, 0x09ca386b, 0x59119746, 0x089cb788, 0x2fc821cb, + 0x19c31123, 0x21ae78dd, 0xd78ffcf2, 0x811cbe20, 0x0a7bc1cb, 0xf85361af, + 0x45cd75e1, 0xe45b9da5, 0xf6033e2e, 0x7d744e73, 0x63cc2447, 0xcc5bf460, + 0x106b4ffd, 0xf0a41fcb, 0x37a4a63c, 0xe89d8cc2, 0xb7a7170c, 0x6f49df63, + 0xcfdfb526, 0x070d4de8, 0x835ede89, 0xc3fb9307, 0x5bb7a24d, 0x223c7853, + 0xbd80a489, 0xeccdf63c, 0xc4df9008, 0x2e30151d, 0xcda8f131, 0x1f9f0e3f, + 0x762059e9, 0xd65373ff, 0xf6c721bf, 0x93292d53, 0xf6d1b563, 0x720094da, + 0x6993a24c, 0x88d35f1c, 0x99c41773, 0xe7ed11a6, 0xa3207f7e, 0xa6f7ff6f, + 0x99243f70, 0xdf3ec324, 0xf933364f, 0xdfe9f7cf, 0x612f3537, 0x7f3e5cfe, + 0x7e18506e, 0xda7c41e7, 0x33dc3f6e, 0xa71bfef1, 0x1d6faa3e, 0xa49fde3a, + 0xcf6613d5, 0x8ffbc5cd, 0xb7c85c29, 0x78eb7da1, 0xe2d04538, 0x1d7c383d, + 0x9c839ae7, 0x1ad6e790, 0x052c7f6d, 0xfec21ee2, 0xad3fb8b1, 0x3fe80467, + 0x6d67fb75, 0x4ed0b51d, 0x3f6395fb, 0x912afebe, 0x876f99d1, 0x6329b5c1, + 0xb2953b60, 0x8909ea37, 0xbbe1723f, 0xdf812bca, 0xdbac227c, 0x7655cfcd, + 0xbf40a85e, 0x0f4c4ad0, 0xdbc7415e, 0xdf8c5bd3, 0xb1501403, 0xf4d4fd03, + 0x356ba6af, 0xdf12171d, 0x3faf783c, 0x507f3afd, 0xc764803e, 0x90e6e9f9, + 0xf4fc6e92, 0x037f6d12, 0xfb27a7e8, 0xecc1a793, 0x59fd903e, 0xc93fe81c, + 0x47b3ef4e, 0xbf426fac, 0xc975ec81, 0x629bdf4e, 0x2d3f40f7, 0x9fbe87ec, + 0x81acd239, 0x4f3ff4ef, 0xfc02eeb1, 0x60cbf648, 0xd0e9077e, 0xbd749192, + 0x5a1e38f3, 0x07ef0434, 0xf0112e76, 0x883bec7e, 0xddf3074f, 0xf853af51, + 0x7d82f3b7, 0xce1fbb7f, 0x865f9711, 0xf8764479, 0xf7c4546a, 0x03725e59, + 0x7d23bbd7, 0xbbffc023, 0x7df29973, 0xdc566612, 0xda37fab3, 0xc60a3137, + 0x77c2c6f5, 0x654e65bc, 0xd2fcf57f, 0xaae3d43e, 0xb0d3abdf, 0x9ee06fef, + 0x6ecc8b6b, 0xecc29638, 0xdf7aff1c, 0x5025f7e1, 0xedde8378, 0x3d728f75, + 0xa57e8014, 0x6c941ed2, 0xd7eecad5, 0xcc30eef2, 0x898f7409, 0xef048f34, + 0x8253a4b9, 0xd1023fe7, 0xc59dae5f, 0x7a4f3403, 0x52f5e714, 0x8857cc39, + 0x16b0df76, 0xeaeced01, 0x7ccd3c96, 0xfccfbd85, 0x3ef67ee1, 0xfd01abdc, + 0x7b31775b, 0xfa3965bf, 0xccadd50d, 0xf708d9ff, 0x85f12446, 0xc03f468c, + 0xfe42d7ef, 0x63dc0d54, 0x5a3ddac8, 0x91ab3fda, 0xdcf11ff5, 0xc335c623, + 0x27b52fc0, 0x2391cdc0, 0x1a3dd752, 0x86a7fd44, 0xa84c120c, 0x752c34ff, + 0x276bf5dd, 0x651ce951, 0x48dee015, 0x6c347f5a, 0xe8fdd0f2, 0x3c4fa911, + 0xea04f10a, 0xcaa6a57f, 0xf881dafc, 0x8cd52223, 0x9fc81c70, 0x36dd2d7d, + 0x97165522, 0x37bfe350, 0xf4011cc8, 0xd9fb86b7, 0x8f9b2dd7, 0x65f043fe, + 0x4f20d297, 0x7de3972c, 0xb78f2a42, 0xc1efb286, 0x5cd342eb, 0x896ea720, + 0xf1804fb6, 0x1a5f767b, 0x77e4f101, 0xff471e46, 0x9befcdcd, 0xb0a8efdc, + 0xafd6f3c9, 0x71f4654e, 0x2376a8dd, 0xae331ff8, 0xa77e0bfa, 0xeecb4e7e, + 0xa49eeb5f, 0xcdbbd857, 0xc3574529, 0xc14952f8, 0xce7c8227, 0x0a38eecd, + 0x3d207f7a, 0xac07a7d1, 0x7201e802, 0x9e1c60e9, 0x31eeb507, 0x9ba35c42, + 0xae7ef77f, 0x2eee3db5, 0xfd6cd65a, 0xaefc118b, 0x5d99521b, 0x89db4e7d, + 0xbf54f5f7, 0x127de22e, 0xdbb8de74, 0x3adcce21, 0x3621e73f, 0x0f5c904d, + 0x7b57ff8e, 0xff058db2, 0xc9107ef0, 0xe4169c3e, 0xdcfac174, 0xfb8c45cb, + 0x78fe234e, 0x722bde27, 0x0d68ab4d, 0x17b7f636, 0xf14aa617, 0x3be63365, + 0x79b1352d, 0xdccfe206, 0x25c4d18b, 0x57206fbb, 0xfd6111eb, 0xf0e317b9, + 0x997db9f9, 0xef014aeb, 0x0e196744, 0x07496ac3, 0x3cfca3da, 0xc074fe89, + 0x793bd33d, 0x9fad0fe5, 0xc48a9acd, 0x0090f54a, 0x863d97f6, 0xbc990905, + 0x6bc4ec97, 0xa4e32a2e, 0xd255bb6a, 0x71eef96b, 0xa448420f, 0xe167989b, + 0xb4fb0ef7, 0xb6a59f98, 0xc57c8b6b, 0x8fafd803, 0x6b6dfd23, 0x7a050acd, + 0x87ba0229, 0x67eb7e38, 0x2d4c7f78, 0xf70cdcf1, 0x8ab6d4f8, 0xbc810f26, + 0x802beca2, 0x2ffd246f, 0x52eda5c1, 0x8858d07b, 0x9a29bdb3, 0xf73f4056, + 0x13874817, 0xf5097cfe, 0x0eb779d3, 0xdba94fef, 0xbe7189f1, 0xef381fcc, + 0xf4aaf766, 0x9f2b8fb8, 0x015f45b7, 0x30d56def, 0xef63b6ff, 0xee41423f, + 0x6f52e1fc, 0x92d5fa34, 0x5f6feffe, 0x105c5da3, 0xc7e3fa2e, 0x8899fb72, + 0x3f2087b9, 0x474228ab, 0xfb606144, 0xf223ef37, 0x6fe93860, 0x4ee1f807, + 0x83805aac, 0xc3f02eda, 0x6c176559, 0x5af6e549, 0xf70f192a, 0x8a5db60c, + 0x51efc2ae, 0x15a6a1dd, 0x7661ff18, 0xd9c74f4f, 0xf3c3a627, 0x8fbb22fd, + 0xfc8892e0, 0x55677bb4, 0x1f0657ba, 0x6f11192a, 0x385e265f, 0xffed16ff, + 0x16109ee5, 0xae5ad70f, 0xd0d77f90, 0xe1c5dfd7, 0xe76249e5, 0xb824ce6a, + 0xdb07e82f, 0xfcfdddb5, 0xae41b7f3, 0x8af904d6, 0xd88fbc41, 0xfc07a5d0, + 0xdedaa517, 0x25a5f265, 0x938be414, 0x3a1327e4, 0xc908456f, 0x2df2ba07, + 0xf3c82627, 0x469f7d7b, 0xdec97803, 0x3879819c, 0xc773f32f, 0xfa8d2dc5, + 0x5adc990c, 0x4eadcfcc, 0x51699ceb, 0xd333e7b2, 0xbd397c98, 0x9479f2a7, + 0xc8181fc3, 0x777a00f0, 0x93931a5c, 0xe9cef5db, 0x31dfa05b, 0xd41f7e0d, + 0x7bf7f7b1, 0xc5da9ee1, 0x40e3cd47, 0x31a6858f, 0xffdb683e, 0xd773de32, + 0x216811f6, 0xca9a37aa, 0xf79d0d44, 0x7166622d, 0xf41a43b8, 0x4bf1fdbb, + 0x7d868d62, 0xbcf5f106, 0x38a34fb5, 0xdf8b7ae7, 0x9735faa7, 0x2ca93d43, + 0x5f6db60e, 0xc85df47e, 0x805ef67f, 0x6f09dd57, 0x17dcd183, 0xb0ec93b7, + 0x4db687c9, 0x9d7f431f, 0xbf81addc, 0x87cc4374, 0x5fb08936, 0x224269f3, + 0x2ecfd205, 0x025de3a3, 0xbde348bc, 0xa3c6cdd5, 0xfc0dd8eb, 0x6a9fc12a, + 0xd34787f6, 0xda9d5bfa, 0x92dfc828, 0x43ed2fe0, 0x42dcdf9a, 0x90c31bac, + 0xbedbac95, 0xdd2c7e23, 0x44c13f7f, 0x91f0fba4, 0x5aa6572e, 0x1d98d2c3, + 0xd3f50693, 0xded0427b, 0x24f5ced9, 0x074b2849, 0x1a7849f8, 0x85e2c693, + 0x9a067ad2, 0xd31a647f, 0x7df952a3, 0x9d65fae9, 0xc37489d9, 0x3b3433ef, + 0x9059413d, 0x8596d627, 0x96480f7f, 0x0d323b47, 0xcad3ddec, 0xbcdaebfb, + 0xef7c0d1a, 0x8843bb55, 0x864febc4, 0xe9fb3768, 0xf482db4c, 0x209476d7, + 0xdf36571f, 0xc487e2cd, 0xf5efcc93, 0xe070f3c2, 0x9e2e7e1f, 0xb272d028, + 0x64cae37b, 0x08c7af84, 0x2707d57c, 0xd65037ca, 0x5e81ea37, 0xe5652f17, + 0xbcbe7e22, 0xf91dbd78, 0xcb037cb3, 0xcb4fcc1f, 0xd399fa60, 0x2484d12b, + 0x8ec95e41, 0x697f0654, 0xba736fdd, 0xaebad33d, 0xf4a5e61d, 0x98f00255, + 0xd3f8f6d2, 0x5e895cb0, 0x70e934cf, 0xe5108a9c, 0x8e0cfbf9, 0x310fd7cf, + 0xa4dc9f7a, 0xa4fb87cb, 0x09893b26, 0x356fd1e2, 0x7e41166d, 0x9cf405bf, + 0xf41cf8c1, 0x0f3de9ed, 0xf40cfe85, 0x4086975b, 0x9ebb7bdc, 0xf1956c54, + 0xdfc6c745, 0xb2b7f829, 0x8c74f979, 0x04a37baf, 0xdf12f390, 0xaedf704a, + 0xfc8b5cb7, 0xff8abd7f, 0x2bfbd90b, 0xdfb42f00, 0xebffce3a, 0xd3ff284a, + 0x914d9147, 0x5db38c02, 0xb19ef81f, 0xfe903fa5, 0xdbd572fc, 0x4d2eae4f, + 0x35eab943, 0x6bf9d166, 0xb8b2f467, 0x4e3eb4a7, 0x250aeb37, 0x0010c9ba, + 0x83148dfe, 0x145e00c3, 0xd4cf40ae, 0xc6f3be2e, 0xfb95c8d1, 0xc35e78b4, + 0x1e7883cf, 0x8c947207, 0x99e4fb5f, 0x55f6b7c4, 0x8539b7c0, 0x6ec12bf5, + 0x22752e8f, 0xec119e7d, 0x9f5451e9, 0x0e3e019d, 0x70160f20, 0xcea5f1f9, + 0xea7dd83e, 0x15cf4049, 0xfd8403d4, 0x09820d90, 0x9bb522f0, 0x653f3037, + 0x7a4f1f13, 0x307fd52e, 0xeefd7dbc, 0x8694dca1, 0x1e9f19f1, 0xb84750f2, + 0x42231e98, 0xd103f23e, 0x7c04975c, 0xafea98b6, 0xebfa64db, 0xe911ae8c, + 0x16c38254, 0x465fe74e, 0xe5cf7db2, 0x1a50f174, 0x64d3be91, 0x5ab417f0, + 0x28b3f181, 0x61173e30, 0xa67b33fc, 0x3ef48b5c, 0x9bbd3023, 0x828a7fc0, + 0x11b3d7bf, 0xc4b233e9, 0xaca9df84, 0x23825ad3, 0x0b91f615, 0xbfcd8ecb, + 0xe80dbf44, 0x207df817, 0xfa00affa, 0xdee80127, 0x865ee945, 0x280e893f, + 0x934bec5d, 0x174d43e1, 0x04a1b9d2, 0x73aaed97, 0x0674e8c7, 0xf7972f27, + 0x5ff201e6, 0x60fcfda4, 0x87ee9f3c, 0x3c33bfe7, 0xe015f1f7, 0x1d0f925b, + 0xc40f2e5c, 0x26e9f95f, 0x3ee677f6, 0x26f98f9e, 0xa9fcfc8d, 0xad27cf85, + 0xcfa702fb, 0x5e8fce81, 0xd2fbb64d, 0xe69ce754, 0x51f47dd1, 0x25d9edc4, + 0x7e780d9b, 0x005a15bf, 0x2e211d6f, 0x26a3f7f9, 0x2148352d, 0x819e977e, + 0xc3e897eb, 0x864f4cbc, 0xccbf79d1, 0x3c80eb28, 0x3a749f9e, 0x7dd0c74b, + 0x673bd56c, 0xdffb40cf, 0x7f8c2d72, 0x04c6a96d, 0xab48ebf1, 0x06f88049, + 0xe1f02892, 0x84cf367e, 0xe815cb2c, 0x132d9b07, 0xa4841e40, 0xc70478f3, + 0x818704af, 0x7840dcf4, 0xe7e74fcd, 0x2d5dbc7f, 0xbe704e47, 0x8e590f71, + 0x27e04538, 0x10afb123, 0x4cb9fd61, 0x48e5f9fe, 0xc5f3c12e, 0x7295d22b, + 0x88ffaa44, 0x748ae472, 0xe4991cb9, 0xe847280d, 0x8ffe404f, 0x76885a6d, + 0xd81a392c, 0xce9a9d8e, 0xe82c70f4, 0xd62fda4f, 0x6e9efec9, 0xca59ba48, + 0xc83cc29f, 0x9e0326c6, 0xc872484b, 0xc3e49b38, 0x823607df, 0xb35e85be, + 0xc1a747ed, 0xde826fb9, 0x67d0e70c, 0xfbc43e74, 0x3780ea19, 0x04d87d22, + 0x790077c0, 0xe21e2044, 0x8b0a6bfc, 0xe46e8be3, 0x04452593, 0xe6c767f5, + 0x15574889, 0xd00299a5, 0xa473656d, 0x8551ed00, 0x29c80d26, 0x97131f69, + 0x949f4889, 0xcba6660f, 0xb3a260f8, 0xa578045e, 0x7413db47, 0xd3d88491, + 0xc7906e5b, 0x75a0ee83, 0xd6883c79, 0xf13efb1f, 0xaff3fb20, 0xa0f1063e, + 0x79d66965, 0xc9abef30, 0x2be03b36, 0xe31ebe27, 0xb7cd43c6, 0x52f4a1f8, + 0xa44ee3c7, 0x38e34a93, 0x5e779c45, 0xbce319b3, 0x6a7ac0f7, 0x0d3e4e93, + 0x19fde1c3, 0xb66ded01, 0x172e188e, 0xf10447c8, 0x17ab6311, 0xc922fe21, + 0x947a471d, 0x700b2fe4, 0x1bf122be, 0xa3b02dc8, 0x880afca5, 0x39e38583, + 0x43fb0b80, 0x2f66423d, 0x04d52dac, 0xa9f967bc, 0xcf7fb0f4, 0x67c951ee, + 0x1be7fee2, 0x4fbe933f, 0x9e9f9114, 0xebc9974a, 0xe2c7a575, 0xbb06f9d8, + 0x3e1ef067, 0x2c2bf3c7, 0xa62cbe7f, 0x7187deef, 0xf213bd06, 0x98958958, + 0x66bcb24d, 0xc2782dc1, 0x1ff63f21, 0x3c52b102, 0xc443fcf4, 0x63fff9f2, + 0x3b00c92b, 0x81634dbe, 0xff2d4638, 0x4e92d29e, 0x1697bbf0, 0x5e636f7e, + 0x9755987b, 0x25ff7f0d, 0x6d9f7f88, 0x4c9b9e55, 0xa16da5f2, 0x06dd2bed, + 0x3d8fdbfc, 0xf5dfd279, 0xd1f7e0b0, 0x1ec77c12, 0xf3123758, 0x168db545, + 0xc14db3e0, 0xc14dfc6c, 0x29b80e2c, 0x1ccf7a58, 0xa07b7a01, 0x65dcfc73, + 0x944f1859, 0x3eb997e2, 0xc9f0088f, 0x2c3599f4, 0xa7cd8e79, 0xb7dc11f5, + 0xc2dfbe74, 0xdf7dbfe1, 0x79f41136, 0x4ae3614e, 0xa44e77f0, 0x2f81dbda, + 0xed2ae4a6, 0xbea16cbd, 0x24d3ee1d, 0x93f412d7, 0xf6893e24, 0xc6105d92, + 0xb5ea3c8a, 0xe5399f82, 0xf81775b4, 0x22361193, 0xbcb278c0, 0xb8c13fa2, + 0xcc2ac624, 0xfce4e3a0, 0x4c6dff9d, 0x7df6ce3e, 0x7df002f9, 0x60a1674c, + 0xce9fdd1e, 0x9ddf83d7, 0x005ff2cd, 0x983f92bf, 0xf1cbdbfe, 0xfd481bef, + 0x3e7971cf, 0x802f6ed5, 0xcfdd3410, 0xe4ef30c7, 0x1d76ae39, 0x0ac4cf5d, + 0x2cdebb67, 0x8262cfdb, 0x9d7b25e3, 0xa3c48fb8, 0x2f283cf6, 0x38e244a6, + 0x307b4e53, 0x9ebe266f, 0x49113a40, 0x76843ced, 0xa77d6a54, 0xbedcf800, + 0x37ae376f, 0x9583b3a5, 0x71b6bf9c, 0xd75a40bb, 0xef6614c5, 0xdfe7e45c, + 0xde98e70d, 0xc76e90bc, 0x1f6928bc, 0x84f6790d, 0x7afe3a7a, 0x1ec9f7c8, + 0x9887df38, 0xff9f92f5, 0xdd47f035, 0xa05eef1c, 0x20dc7541, 0xc431ff6e, + 0xe632dc47, 0xbfdfaf8e, 0xb1790044, 0xb8e06e7e, 0xcf017fc1, 0x00fdf3f7, + 0x0000fdf3, 0x00088b1f, 0x00000000, 0x3dedff00, 0xd5547c79, 0x96cee7b9, + 0x80593ec9, 0x66e42484, 0x430b2125, 0x39f6aac2, 0xa6c30109, 0xb641a6c3, + 0x64900f61, 0xefa5a0a2, 0x693066d9, 0x0bebc80c, 0xa96d2d16, 0x967d540e, + 0xd5241b42, 0x613a0750, 0xc1d82a2b, 0x1a55a2a5, 0x48541514, 0x8b62d420, + 0x77df7df5, 0xbdcccdce, 0xec450899, 0xfc3dfd1f, 0xf7393bf9, 0x77ce7b9e, + 0xdf3befbe, 0x4999ce7a, 0xb2f6058e, 0x3336c638, 0xc112de56, 0x7c259fe0, + 0x5563246a, 0xdc930e69, 0xf12fb18f, 0x4d8caddf, 0x9e1b105a, 0x1750111e, + 0xc7563ddf, 0x8c8d8bec, 0x70b83a8d, 0xec674b37, 0xcf8e4957, 0xb4044752, + 0xa87ef82b, 0x86b19f23, 0x0c945b64, 0x56253bcf, 0xc76ce381, 0x376f9e12, + 0x64e5faf2, 0x5e30631d, 0x79512c85, 0xe5ea7521, 0x7f532864, 0x52cca439, + 0x7942ed08, 0xa55fa53b, 0xeff32c9c, 0x9c3f2664, 0xf7c01c3f, 0x314face9, + 0x817b0f3e, 0xf6315dbf, 0x6cdfe30b, 0xc0358c73, 0x8e29d3db, 0x98df9c74, + 0x7a03eed1, 0x772fe019, 0x9940301d, 0x440f6ac2, 0x728343c6, 0x75c4fd46, + 0x2828f6b0, 0xc0744e63, 0x912b1804, 0x9bbc6963, 0x073174ce, 0x625c33c0, + 0x16879c76, 0x170811ae, 0x2bef178c, 0xe2045895, 0xc7143ec5, 0xab54991b, + 0xf1280237, 0x658932cc, 0x4cb230c0, 0xdb478aed, 0x6a11e80e, 0xfd8f5d9b, + 0xd0b24c4e, 0x4734c6f3, 0x7eff2d42, 0xe2cf7e34, 0x8014d26d, 0x199fe46f, + 0xd6d50f5b, 0x9c92a523, 0xf194e38f, 0xe21b3192, 0x67a459e9, 0x02055c00, + 0x8781729e, 0xc63bfdde, 0x3ef1ff61, 0x4e824d9d, 0x70889d46, 0x6a3a6833, + 0xe11ead75, 0x893e678f, 0x95b18001, 0x8c131296, 0x9565549b, 0x9393ae90, + 0xea6493ec, 0xfe021e07, 0xee744b1b, 0xc3eef87a, 0xc9cbb641, 0x33e57cf0, + 0x369dd7cb, 0x97d84113, 0xcb757ff0, 0xb3baaa3d, 0x4eeb3bed, 0x2bebf8e7, + 0xf8448ff1, 0xb33320ff, 0xfc87c091, 0xe71b5b15, 0xaaf840a8, 0x583f1dcd, + 0x5f9af500, 0x3a62667c, 0x17cc3ba4, 0x48f678e0, 0x00c2f851, 0x37a7b8fe, + 0xe8c11dbd, 0xf4125c3d, 0x96f4009e, 0x72fbd37b, 0x73f50c72, 0x3b5b19d3, + 0x9db457f2, 0xe03df849, 0x9bce056b, 0x918a3bc5, 0xab7de2cf, 0xd8e00cf5, + 0xb888f48d, 0x7e143d3a, 0xf9cc9cbf, 0xaac3a15d, 0xec2adb24, 0xa33272f7, + 0x2ca55d71, 0x986f9f07, 0x07772bac, 0x7087b3e1, 0x035f7eb0, 0x819867cf, + 0x99e3f7f5, 0xdcfefe79, 0x9dde027f, 0xf09eb7f8, 0x03c210fe, 0x80ca8f78, + 0xf270ff79, 0x3f91fd7b, 0x17aee675, 0xb547c025, 0x61eb2f47, 0xc40ff50a, + 0x4ffe90da, 0x10d648b4, 0xa3c07768, 0xa2787e27, 0x921dcc31, 0xfcf787e6, + 0xd90ba26f, 0xfac52850, 0xbf010767, 0x4633be30, 0x7f00df8c, 0x169df8c0, + 0x754fad5e, 0x900e48fc, 0xfe784f27, 0xce788a12, 0xa76c904b, 0x8d85b18b, + 0x9eb237be, 0xbe09167f, 0x24bfc10f, 0x26b0ebc4, 0x3bac2e3d, 0xf443bb1d, + 0xc8adb744, 0xc758a307, 0x5c00b7ab, 0xaa51dcbf, 0x4df00473, 0x79a5db77, + 0x677e01fb, 0x8b215478, 0x9b9072c6, 0xee744301, 0xfc8d92bf, 0x22cd7136, + 0xc5777b92, 0xca07b639, 0xde7297c7, 0xfc90728f, 0x30f9639c, 0x49b6870f, + 0x0a03865f, 0x0639cca3, 0x1f5583c0, 0x78c3d566, 0xdfbc612d, 0xa8b40392, + 0xe0167d58, 0x1ed7f107, 0xcfabf846, 0x46977582, 0xf38f3e70, 0x6269183e, + 0x1bbcf089, 0x53b623d6, 0x780ebee0, 0x4de1c1bd, 0x2e187cb6, 0x87ef42f8, + 0x482e87af, 0x1f5fe807, 0x7479a069, 0xd22b30b2, 0x6364c5b3, 0x49d77f48, + 0xba146ebe, 0xeb9e08d5, 0xe1388cf4, 0x713df980, 0xdf8ad922, 0x8775b677, + 0x47bc60ea, 0x71c71d53, 0xae94fa5e, 0xf23e7b28, 0x476e7749, 0xd7b7c93e, + 0xa3eebe10, 0xf23ac7ef, 0xef7e6baf, 0x5f49f204, 0x221a73f3, 0x6268a49a, + 0x9fd2d91b, 0xa7e68458, 0xd3c923e5, 0x4854b9fe, 0x3ca18feb, 0xee620d74, + 0x6377987a, 0x19a7e081, 0xaf75c64c, 0xaa7d77a5, 0x603953fd, 0x6a9fdedd, + 0xc2f38f3f, 0x688a9271, 0xbef85d9e, 0x62a2d8f0, 0x57e70ea3, 0xa66f50c6, + 0xdecb19af, 0x33cff62f, 0xa15cccc4, 0x49f9fe45, 0x1632e606, 0xeb3fcc05, + 0x4651e14a, 0x7a42bef3, 0xea0fc981, 0x28274e00, 0x8169f585, 0x5d12f7f3, + 0xab3cc5aa, 0x3d5e11cd, 0x1ab58bcc, 0xe450ed3f, 0x79ef7a41, 0xd2429d00, + 0x13d61e68, 0xdbf3a40e, 0xc47ad611, 0xb167c193, 0x42bcd247, 0xbd1b3df1, + 0xf0f10120, 0x765b24ab, 0x7db1c00a, 0xeebe232d, 0xdbdcc9dc, 0x0ebbd260, + 0xb66f88ea, 0xffc421b2, 0xe7177443, 0x5d6823d9, 0xfb41a5c7, 0x1d66bee1, + 0xb72cdfca, 0x9ab943ac, 0xe9d16beb, 0xfd1c1f88, 0xba9e38d3, 0xde5f000d, + 0x75fd5a8e, 0xda6a45f2, 0xa053ac35, 0x53b6065b, 0xede0a6e8, 0xb70fc116, + 0x3150de20, 0xed3e1974, 0x06f1fb30, 0xb1496174, 0xac63fbbd, 0xa9e21063, + 0xd947cf7d, 0xcd5fd01d, 0x21e68fbe, 0x1b7e6a5e, 0xf650cc42, 0xe468dcdb, + 0xc125f3fb, 0xeb4f9aed, 0x6006ed6a, 0x74b4fcc6, 0xcc55ef92, 0x017b4267, + 0x10ddbae4, 0x6201d720, 0xe8d47f7a, 0x1ffd8c9b, 0x6b67a11d, 0xd6ddcf01, + 0x10580351, 0xaf94a17d, 0x0596dda0, 0x0f691c72, 0x19ee17df, 0xf1784d1e, + 0xd05e92c4, 0x575a3fb6, 0xf6332f69, 0x61d1dfdd, 0xf86e15a1, 0x1ec6b27e, + 0xf5c69b9a, 0xb8d3b7f0, 0x6cc1039e, 0x3dcf3843, 0xc176e917, 0x6f4573a3, + 0xd3c03144, 0x8ad7d6b9, 0xe747c05d, 0x0bd56f98, 0x452edeb8, 0x26bfb430, + 0x78a37b0f, 0x7d7fa46d, 0x9f346b7e, 0x3f9eb7fb, 0xfb432516, 0xc40ebbc9, + 0xf7f002bb, 0xd4b8662d, 0x3869d7c3, 0x99f1a32e, 0xe91b23a1, 0xdb385ec1, + 0xf272865f, 0x9cf1439e, 0x0230c00f, 0x7216af3a, 0x68f8d7ee, 0xb97d804c, + 0x565ec6a6, 0x5f57afec, 0xc0ee650e, 0xb267c1ba, 0x08f3e044, 0x16925e7a, + 0xc07c8f19, 0x2881b206, 0xd7c4fa6f, 0xfb53e235, 0xd1e7c15c, 0xa1076761, + 0x0fbe717d, 0x8169f8bb, 0xafbe1eef, 0xb2cbd873, 0xbf97f5fc, 0x07b7cfd0, + 0xe8bd6ef9, 0x663adbbf, 0x937dda00, 0x4b4cde4d, 0xb98c7690, 0x4f169da9, + 0x16595d2f, 0x773efd8e, 0x183ca439, 0xdc69f55c, 0x7b6ebd0e, 0x154028e5, + 0xc4d61760, 0x269a7e39, 0x5869c2ec, 0x8f1eedcf, 0x5f87bfeb, 0x16fbdc84, + 0xfae3b573, 0x4287f2d5, 0x742b9fef, 0x4849624b, 0x9934aab7, 0x0f58abf3, + 0xe2d0faca, 0x324e5b51, 0x7f304731, 0xbc1e81e0, 0xc8173286, 0x8d5b55c3, + 0x5d8fe7a4, 0x31467379, 0x5b47fbf0, 0x6107968c, 0x1d9fcac8, 0xbc21fe48, + 0x62161caf, 0x91fea091, 0x75c4cdec, 0x7a67ecbf, 0x47c3f23b, 0x5ff5565b, + 0xb027e504, 0x8e00ab7e, 0xf48d5b65, 0x7deb72bc, 0x58acfcf4, 0xd67ecbd7, + 0xe5e50f2f, 0xfbeb83b1, 0xbf2b1d23, 0xa44ee878, 0x25932ecb, 0x5594186f, + 0x597b243b, 0x3c57be00, 0xefaaaa19, 0x9c4ab1d2, 0x26574287, 0xcbde7a39, + 0x69ebcf00, 0x7767afba, 0x2776d57a, 0x0baf99d8, 0x1d3ede3a, 0xa2335de6, + 0x03fbec9b, 0x9f48c387, 0x4f422efc, 0xd877a476, 0x0a1e5f5f, 0x185fb1f5, + 0x09e364ac, 0x74138f3a, 0xe4872c66, 0xaf3352f6, 0x2063dd8f, 0xa46c743b, + 0x05edf09e, 0x4a465ab9, 0x0e3116de, 0xf287fdda, 0x4d96fe9d, 0xb8dda063, + 0x3d432368, 0x15de1ff4, 0xc9e81993, 0xde1b2f5b, 0x4f9808eb, 0xd019b329, + 0x46612e2e, 0x6175f3d5, 0xaed0db51, 0xa80cce85, 0xd59ac70f, 0x4e65c7ef, + 0xc4f68b3c, 0xb9fa8b38, 0x1add7fc2, 0xf0e071b9, 0x824c8fc7, 0xaa3d2e79, + 0x6afa7b27, 0x9c15f972, 0xfbd21657, 0xe03b39a5, 0x3b0263bb, 0xd47caec7, + 0x35fc8890, 0x420f625a, 0xc12ba3fd, 0x4518e5d7, 0x73a0333e, 0x53ce9f8e, + 0xea7bcbac, 0x18efecb8, 0x1d4f4f7d, 0x7976bfe1, 0xeaf2d5f6, 0x1a266957, + 0xb43fab5f, 0xd29be7eb, 0x1d87931f, 0xa48ae41a, 0x3f2c69f2, 0xafe5c5dd, + 0xf5685e56, 0x16970285, 0x7acbeade, 0x00789e95, 0x4088c9e5, 0xf7a2617d, + 0xbe3fd037, 0x7f883d25, 0xe10cf60c, 0x40d235cb, 0x5dd8397e, 0x4700e925, + 0x571c847e, 0x58352002, 0xae51c3d2, 0xca3b2435, 0x05bc45d2, 0x1dbca8ed, + 0x1f943acd, 0xa31af13d, 0xf8a36e3a, 0x39d293af, 0x79d358df, 0xf257fc1d, + 0x567b15fb, 0xfb1563b1, 0x42ffe955, 0x35da83aa, 0x371e3096, 0x75f6e188, + 0xb3ac8e7a, 0xeaebff40, 0x81a76c12, 0x93ae1f9f, 0x393964a9, 0x2adfa43a, + 0xcbb41b81, 0xfed73bf1, 0x07d79a30, 0xd710bd92, 0x38293ae5, 0x174c6d7f, + 0x64ecc3fc, 0x97cf2807, 0xd7970694, 0xd0374ddf, 0x9b1e4a7c, 0xb4ed0835, + 0x1eefda0f, 0x03f47284, 0x7687d780, 0xfd1ac183, 0x46d5f655, 0x5bff1eb1, + 0x11188be8, 0x5c1ff807, 0xd5875027, 0xf345db6c, 0x79bad3b4, 0xca82aeb8, + 0xa1add61f, 0xd3d3f3f7, 0xc94b5e08, 0xa00cf6ab, 0x7a0de9df, 0x4c4b07d2, + 0xf818ecf6, 0x4759b4ee, 0x6bf784f1, 0x235bca23, 0xff2339f0, 0x9363c971, + 0xa175c29e, 0xcc5f31c0, 0x6e79afa3, 0x7d3ebf4c, 0xa23acd5c, 0xf0f52f50, + 0x7a5e89e3, 0x67c807f9, 0x3fa3ac9d, 0xbe4a73b6, 0x6ce41dec, 0x8c0a0d75, + 0xb64e1dcb, 0x6bbe446d, 0x5c3cb131, 0x5c612d17, 0xfce168ef, 0x75b3e0b1, + 0x2f823975, 0x80d3b6ac, 0x7ed1bbaf, 0x403e7185, 0xee84157d, 0x5fba0b8f, + 0x9e3db64a, 0x208ff44e, 0x01e69d3b, 0x9066b2fc, 0x073e2b6d, 0x08e7ecbf, + 0x3c01c8c7, 0xd939773e, 0x4da1e422, 0xfd8dfee2, 0x135efa19, 0xde2beb7f, + 0x34a385a3, 0x1b59e383, 0x254a5207, 0xd85bb40e, 0x2dd313e3, 0xdc9cf8aa, + 0xe2c16cc2, 0x130c963f, 0xd9b04bb5, 0xdf72e1f4, 0xe3b86eeb, 0xe31e973d, + 0x8acc155c, 0x2dc069cb, 0xff18ed2d, 0xaf732c4a, 0x6358f8c5, 0xba1d768c, + 0x4b2fd142, 0xbbfae877, 0x9f7f5da0, 0x7004c4a3, 0x9fda96bc, 0x6ac01be0, + 0x86bd22d7, 0xe934743b, 0xdcc307e1, 0x434ce292, 0x1f216293, 0xe2868561, + 0x714fab7a, 0x237f10f8, 0x9bd6d717, 0xba1f8c64, 0x2b3b9fc8, 0x81635239, + 0x0a1ece3f, 0x9eef6a0b, 0x52677412, 0x009640e9, 0x24693ce3, 0xf27f0c3c, + 0xef0879d1, 0x336f27f0, 0x90f10148, 0xd48dd22f, 0x15a1ecfe, 0x789f14a9, + 0xa565842b, 0x2ff7eef5, 0x0437dfa2, 0x829b77be, 0xc105ddf3, 0xa72dd73f, + 0x51cec03b, 0xe90be9cb, 0x9ab4f101, 0xa7248bea, 0xfd73a58f, 0xcb4353f0, + 0xcf8081e1, 0x56662e9f, 0x678afbc4, 0x759c52b6, 0xc265a9b7, 0x8d4f9c0e, + 0xe5bc618e, 0x1edfe1e0, 0xe276881e, 0xda187962, 0x1fdf3d07, 0xcf88dedd, + 0x86c95a7f, 0xdd13fe21, 0xbb8c251b, 0x4cda167c, 0xa9ecfaf8, 0xa616b610, + 0xcb78fcb4, 0xfa84ff84, 0x431d2ae6, 0x379da2b9, 0x25d4648c, 0xea35e960, + 0xa3fa7346, 0x0ee853fc, 0x7a42658c, 0xfc437428, 0xe0f282ed, 0xfc13cf53, + 0xa5af5c0a, 0x15df84ca, 0x809aeccf, 0x2ab0327c, 0x8038c256, 0xd5d7d702, + 0x7f503713, 0xb88c6666, 0x9b99fd26, 0x6a7f4411, 0xb24366f5, 0x5ddb1f2d, + 0x46fe7f4d, 0x908257f0, 0x8c793d0f, 0xab8a3aa3, 0x3bb2e969, 0xfb5c57bd, + 0x9fe71c66, 0x953f6b8d, 0xae341b1e, 0xe5c4ddbd, 0x9b2c7368, 0x7ac8353f, + 0xa3758b70, 0x4265d4db, 0x91ef18bd, 0xcba5ca82, 0x812e5cc9, 0xe11dbcdc, + 0x5a1ef253, 0xbf041ab9, 0x7de03333, 0x7eef0eee, 0x9314556c, 0xd7668e19, + 0x5fc12f90, 0xdcce320d, 0xbc8f0e0c, 0x7285a81a, 0x3c9196b2, 0x079bba82, + 0xca12bcf7, 0x3cc7a01f, 0xc8fa3d15, 0x2d4ded3f, 0x9293bca1, 0x552d7a6f, + 0x67d747ed, 0x956ced28, 0x1f4a5fd8, 0xc056bef2, 0x6277f305, 0x4cd5f8bb, + 0xf2515795, 0x2eb5f129, 0xd51c34c9, 0x6938a30a, 0xad639c6a, 0x8d75da11, + 0x506dd661, 0x29639e8f, 0x5b197941, 0xbcc76d69, 0x1e39e34b, 0x87bc6f57, + 0x7ea41fb9, 0x23997cf8, 0x1a54fddd, 0x5fa05ba7, 0x6515e8af, 0xeaefa07e, + 0x6b5c3832, 0xe87d2e89, 0xaeb81bbb, 0xdae327fe, 0x084dd2ec, 0x7dd2b5cf, + 0x075f064b, 0x247ba357, 0x51e44ee0, 0x0b6de3b4, 0xc9f01e36, 0xabde11cf, + 0x22bdc9f1, 0x79ad74bf, 0x5f4989ca, 0xc6f48f53, 0xe1836feb, 0x5d64c375, + 0xc9e7018e, 0xf4c1acc2, 0x888cb1de, 0xd5c707af, 0x04c745f3, 0x117caa5c, + 0xefd953fc, 0xfd683c4f, 0xf38460c3, 0x69f93d15, 0xc3af7c4f, 0xf2567484, + 0xcebc0a0f, 0x06cc49bf, 0x6ff3a1fa, 0xe7952a7a, 0x18a91e35, 0x0392befd, + 0xef3ec857, 0xd91bff6c, 0xfb1a9de7, 0x5ef7195c, 0x5f5c6f60, 0xb411f4e3, + 0xe16e2e7e, 0x933d04f1, 0xc60b747f, 0x99188fcd, 0x27fe265b, 0x0be685fb, + 0xdae08bf5, 0x8efdb178, 0xcbc7d248, 0x78445c5e, 0x63ad1e8e, 0x62be0072, + 0x0e4c616c, 0x795c57c0, 0xcfdeaaac, 0x7ed5503e, 0xeaba4540, 0x8863a27d, + 0x65527dea, 0x529eaa91, 0x7daa937b, 0x55529aea, 0x5135cd3d, 0x69a33ed5, + 0xd59eaa9a, 0xfdaab77c, 0x6da8d0f6, 0xd971e794, 0xdf30997c, 0x83be62c5, + 0x7d542f37, 0x8bc8cb07, 0x8225b4f9, 0x1f6c9fdc, 0x4502447f, 0x47c458b2, + 0x542bdd72, 0x56692efd, 0xac0c37c7, 0xe01270eb, 0x592dc6af, 0xb65f50bd, + 0x797efd59, 0xe7c256db, 0xf9fab772, 0xf5d467ca, 0xf3d363c2, 0xb067ae28, + 0x4ebae317, 0xa78c8ccc, 0x97888ebc, 0xaece955c, 0xe745d7c1, 0x9d350490, + 0x9d356543, 0xcf0bf8b5, 0x87bcd589, 0x7f02beff, 0x5f355691, 0xbbf8537c, + 0x5f1d5335, 0xa39255fa, 0xe61fb334, 0x31eb5651, 0x79cac4ff, 0xedbbbb1e, + 0x3951e152, 0xab255e48, 0x62655e57, 0x597c6066, 0x313a55e4, 0x5d9436bf, + 0xc0ed7e43, 0x108788e7, 0xb0465cd0, 0xab68d9ff, 0x169f27b9, 0x68a3cfea, + 0x1e8f57e5, 0xc6cc754e, 0xfea55df1, 0x7c3d643c, 0x8ffa323d, 0xc9538476, + 0x54fb2947, 0x63202286, 0x3e08ffe0, 0xc01fa54f, 0x67ec22c3, 0x386c4952, + 0x0ebb71fa, 0x097e4bde, 0x7973c4f3, 0x6c0f2407, 0x931f601f, 0x3fc1681e, + 0xaeaf4913, 0xb57ae4c8, 0x8fc0332a, 0x3e58de64, 0x7dabd0ae, 0x9de4a3f5, + 0xfda52afa, 0x75a3ca7a, 0x6dd66149, 0x637ae441, 0x2fd4d7e6, 0x63c57a67, + 0xfd03331b, 0x0fbafb94, 0xbc077ca3, 0x45f9c3af, 0x94de8246, 0x47f37afc, + 0xdeb451e1, 0xbbd45eba, 0x8b83c307, 0x363a3966, 0xd31f9fdf, 0x398b7bc2, + 0xf38866c9, 0xb89a3dd7, 0xb711634d, 0xe4cb1e63, 0x8477cbf6, 0xe629ddde, + 0x0df8d4e9, 0x1fee26ce, 0xf4a86ac3, 0x3b0bd804, 0xbda92333, 0x2764a93e, + 0xc455bdc2, 0x24d31a17, 0x9251af1a, 0x492fbf48, 0xf389dd2d, 0xb259939d, + 0xc4a7cb03, 0x19333bb8, 0x1ce9cd95, 0x37ec591e, 0xc4affa51, 0x2cb0fdf6, + 0xa66772a5, 0x2c99c445, 0x0d3d6843, 0x26b8d1b4, 0xcb7cf07d, 0x5e7c99b3, + 0xf24860d1, 0x78aa6cef, 0xc72178f6, 0x421d7e30, 0x7936c98b, 0xdc557f5c, + 0xbc5375fa, 0xf44b5b88, 0xcde50db9, 0x7d8e82ad, 0x396db1c5, 0x4e288396, + 0x0dec71b5, 0xad8e3ca1, 0xc57bb9c4, 0x83e3adb1, 0x0e91b1c6, 0xf5feb1e1, + 0x9f2fcc70, 0xb4de5193, 0xe8f51c99, 0x06fd748f, 0x9c785aec, 0xf8a0eee3, + 0x0cd1c176, 0x8d1dfa2b, 0x247f6c69, 0xc65acff2, 0xeb6deed0, 0x0a183dd0, + 0x98b837ef, 0xd98fdf05, 0x6599fdc2, 0x4e2b659b, 0xe7d75953, 0xcc9c7933, + 0x64637e08, 0xad377e11, 0x1bdde31d, 0x5458b066, 0x79accd0b, 0x19da146c, + 0x7f50585b, 0xa7e0acea, 0xf5fb2549, 0x0ba695b4, 0x9d0828f8, 0x14ea66ce, + 0xd20ce67f, 0xa3975473, 0xb899e79b, 0x8711207c, 0x1d41db7e, 0xefdae1d9, + 0xf6341c3f, 0x8155f23c, 0x271c783b, 0x5bf3853a, 0x12fd9242, 0xdad05ff6, + 0xb4394261, 0x8ba7914c, 0x7400cc75, 0x3ae82e9f, 0x9fdf0b7d, 0xf97caec0, + 0xbfb15ea5, 0x50cff518, 0x119b2c4e, 0xc8b8c6e9, 0x8b9a4f32, 0x144bb2e0, + 0x8e7a71f7, 0x6cbeb1db, 0xfa0b70f8, 0x99b7b6e1, 0x990e61f4, 0x23cb8c6e, + 0x9150fb03, 0xe357a40f, 0x4d329f29, 0x8a745bf0, 0xdc82704c, 0xf80e10de, + 0xed65b65e, 0xf29fdc7e, 0xe519cfc6, 0xbbe84e4d, 0x33676246, 0x8a6b3901, + 0x39b034b0, 0x0271f845, 0xf44333f5, 0x8c1bfae3, 0x3b8ff66b, 0xcd22f3d3, + 0xb99184e7, 0x9d47c0cc, 0xd192ef7b, 0x67ec6d8e, 0x8b5f12b6, 0xbd49e37c, + 0x54a4fbe3, 0x08355d0c, 0xb84f2cda, 0x743bf705, 0x05337dee, 0x7eefffe3, + 0xed123bb7, 0xba1b3fc2, 0xbf80ad22, 0x16bc0f33, 0xbe7a0369, 0xf69e80fb, + 0x7a13cd4f, 0x7e7bc140, 0xdafbc716, 0x16467b2c, 0xbeebf394, 0x1fb81918, + 0x47e9ad88, 0xaddcbcfc, 0x8f52d4a7, 0x98067cdc, 0xe367255b, 0xae457554, + 0xfb821b57, 0xf8b30b87, 0x63be5fba, 0xc64929ab, 0xb2231df1, 0x0c677e60, + 0xb4ce8f9c, 0x9a576e4a, 0x3b859e1f, 0xe0929986, 0x213d9fd5, 0xc9fa8bcc, + 0x08b233e0, 0xe0240f2e, 0xbfa0870b, 0xfbc3ce16, 0x25bfa9c2, 0xb1f9728f, + 0x035ac600, 0x967875f8, 0xced05c93, 0xf2bbc963, 0xd78001f8, 0x8624eb25, + 0x7fb61076, 0x58e7e800, 0xcc05d0f3, 0xb9e76a9f, 0x0396a5c0, 0x265afc8a, + 0x49a8bce8, 0xe7997efd, 0x3167ea61, 0x067ed073, 0xccb3bdad, 0xb423e133, + 0xce76b437, 0x66c523c5, 0x59150f5c, 0xc9198ec2, 0xdf097d46, 0x47a447d7, + 0x27ac823b, 0xceb4fca5, 0x71facc42, 0x33ca999d, 0x8cca8c75, 0x55c7ce2c, + 0xd1e3e39e, 0xdb69a9fe, 0x9fedeb45, 0xce7b838e, 0xfccddd46, 0xce26b47a, + 0x64748351, 0x1e3a9295, 0x44dbb5be, 0xcfc09676, 0x0e7cf11c, 0x30e803e2, + 0x6e9b599b, 0xa9ccfa01, 0x4df3fa32, 0xcafdfff0, 0x7cc1477c, 0x5f3ed7f5, + 0x42d59e65, 0xd7f3295f, 0xe0867df2, 0x4e4fc5c3, 0x28081c6d, 0xd1fbdfa9, + 0xafee0ea0, 0x2bf08ebd, 0xd98cb57c, 0xe10627c7, 0x3d9e851f, 0x6ff9e27c, + 0xc7428f9a, 0xc40bcdc5, 0x22095dbc, 0xf180989e, 0x68df2d44, 0x17cb44f9, + 0x831d8de7, 0xf96b3d70, 0xd847d942, 0x4acc3ecb, 0x58b17927, 0x38c78db6, + 0x6f6612e1, 0x6825b8a4, 0xaceb4604, 0xe17ff0f9, 0xf3927b3a, 0x7189bd79, + 0x661759bf, 0x253df945, 0x7180c3a2, 0x977c6351, 0x6efdf101, 0x1813d716, + 0x4238a03b, 0x5e72463f, 0x72e3a49f, 0x3aa6553f, 0x37e754cb, 0x82fc0bf6, + 0xcf8c9a57, 0xbabf84a7, 0x9e82b65a, 0x9a677aca, 0x94d0e401, 0xa75757e8, + 0xac85fd41, 0x8019a777, 0xbd24a67f, 0x480d297a, 0x24eb37b8, 0x7abde7af, + 0xbf015309, 0xaf33facb, 0xa750ccdf, 0x8eacf6b2, 0xec7cae69, 0x7feaa2df, + 0x924f2c2d, 0xea59d767, 0xc1b57443, 0x59cbd5e4, 0x19987e4a, 0xe7bb1c71, + 0x7ed027f7, 0xa2fb2bb7, 0xbed5466c, 0x80af8628, 0xfe0927cf, 0x1451f161, + 0x7f889f07, 0x19275e03, 0xbdf8edbc, 0xfc25ecce, 0x160d660e, 0xad803bd4, + 0xf7165f4d, 0xfd5adfcd, 0x3f38d924, 0xf485b24a, 0xe61afd4c, 0x95a0cd08, + 0xd2c7eca5, 0xcc58fdf1, 0xf02be38e, 0x82f7e328, 0x886b480b, 0x0b6b840d, + 0xd5c0a3f5, 0x85c42c39, 0xcbb158fa, 0xa53ab815, 0x9019c7ae, 0xa7dba7e2, + 0x76ba44cc, 0x920d7646, 0xa7a3fea0, 0x7aa74d27, 0x25c7aebf, 0xc8dd406b, + 0xeb2178e9, 0x7f9869f3, 0xdb38dffe, 0x213fd405, 0xb13fbe26, 0x3020e309, + 0x1cfdc3ce, 0x00b7dc2e, 0x22f5677c, 0xc898a5df, 0xae1b298e, 0x5dfebb8e, + 0x365d59f0, 0x3485c72f, 0xbe071ed7, 0x6c4ab674, 0x5e77b42d, 0xfda136e9, + 0xca73c539, 0xa6b0fa84, 0xed0994f5, 0x43ac1a9d, 0x4c5b353f, 0x879eed41, + 0xdd0af5b3, 0xa1f5fe55, 0xc7efec94, 0xc5b67ee3, 0xb834ed12, 0x38cc4f77, + 0x00bbdfac, 0xddd8c967, 0x871aecb7, 0xb7b5cd9f, 0xf9cb1f7f, 0x3c50e3ac, + 0x872cd0b0, 0xceefe55e, 0xf9570cae, 0xe36b73cb, 0xcdf9f554, 0x27901d40, + 0xa924d7f3, 0x85a812e3, 0xcc599e00, 0xa3ed0fff, 0x59c7410a, 0x287c1b09, + 0x8c396687, 0x3a7940ae, 0x10d6b3c5, 0x4ad7708b, 0x5cdf3256, 0x66efc64c, + 0x694219f3, 0xfbe60570, 0x20f1b5c7, 0x8f154d6b, 0x3ac1cc23, 0xa54e75e0, + 0xe010c6e4, 0xbd1314a1, 0xf449b677, 0xb1b6d9de, 0xbef1162c, 0x6e78a25a, + 0xce2281ff, 0x7cfee422, 0x61d82b01, 0xf667ec46, 0x438b127d, 0x08e221b9, + 0x2bf3fc0a, 0x7f12cfca, 0x3281f88a, 0xec190acf, 0x3f3e7879, 0xca2343f5, + 0xe9df9855, 0xd53e150e, 0xeab5b9f5, 0xea35fcfa, 0xb0b6697a, 0x1e58f3d3, + 0xb2dba7ae, 0x2fad0325, 0xe534ff51, 0x0178af8f, 0xfb38d69e, 0x97d46cc4, + 0xd9e52f26, 0xc7ffc15b, 0x9e1ef2ba, 0x775a30d7, 0x3ad067e0, 0xd67d6896, + 0x12966d1b, 0x25abcff4, 0x2cd9dbe2, 0xf3490fc0, 0xbebaa7b7, 0xd9bbfd77, + 0xda86ee42, 0x7fbe5357, 0x0a7964af, 0x6c19951e, 0xeb2ff406, 0x7ff7c8fb, + 0xebdb9b2f, 0x7c8eb0af, 0x991b2b84, 0x3d94e814, 0xaaec9a3d, 0x702ddfec, + 0xbb20dc61, 0xc640f818, 0xd5edcf75, 0xbd5ec249, 0xf430ec1d, 0x2df5b32b, + 0x87df2415, 0xdf242c9a, 0xc8ab1d85, 0xd42fdb0b, 0xe4a4ec76, 0xb8d71423, + 0xd206f37d, 0xb619998b, 0xdf008da2, 0xfc7ca1c3, 0x6e48f787, 0x93599fdc, + 0xe7e4987f, 0x1c0b6000, 0xc84126b7, 0xbef536d1, 0xd72801dc, 0xe4e97f70, + 0xd1371a7c, 0x8dbb70ac, 0x2de4a0e4, 0xf2097dd5, 0x37188069, 0x79a640b7, + 0x22d15ff7, 0x9853bce1, 0x01fa2d6b, 0xef8cd9d5, 0x75e5113f, 0x24ca09c7, + 0xeff33e6d, 0x13aab728, 0xef9e843a, 0xfcad7d32, 0x8dfeef41, 0xf77a23d9, + 0x7da7d30f, 0xdf78fe38, 0x038c2895, 0xe337bbdf, 0xeabdf72b, 0x9e78eacd, + 0xe78ea2d1, 0xcb51ca4d, 0xb556299f, 0x7463b9dc, 0x54fdea86, 0xfdea9e5b, + 0x5562f2f4, 0x66fda67d, 0x2abbfb55, 0x21eaaac6, 0xf1351309, 0x36dc7545, + 0xb71d473c, 0xe3aab48d, 0xfe2f21b3, 0xbc0242a6, 0x0eaecc98, 0x09a1e007, + 0x58e8c6d6, 0x8bc91ebf, 0x8650c682, 0x60468715, 0xc42c34d9, 0x34d27c8b, + 0x7f33ec50, 0x2f04bef1, 0xde8e63f4, 0xeb14c661, 0x6977252f, 0x6801f41c, + 0x4322fda2, 0xabfb501e, 0xebe10db7, 0xce5f294a, 0x1833bc76, 0x8cff9fe8, + 0x61fdc49c, 0xcc3dc51f, 0x45db8c61, 0x2ec999cf, 0x4a6fe252, 0x2505793f, + 0xfe6ba43e, 0x0bca3603, 0xc16636b3, 0x9336c57c, 0x673cd3c8, 0xdbf2efa2, + 0x80b6743a, 0xcc18edf5, 0xed4790ed, 0xffb013a5, 0x59680f1a, 0xdf9b4f5c, + 0x8bfee133, 0x147b4f1a, 0xfb42b3ea, 0x8ff4267b, 0x9e85cffc, 0xa1857433, + 0x16ebf83d, 0x34f3d07d, 0xde7983d1, 0xeb90b0f2, 0xc7f3ef73, 0xfa464a5d, + 0x5ddcf3e5, 0x8c3d5e5d, 0x9ae4173f, 0x83933f8b, 0xcf9069c9, 0xd1f57b2a, + 0xa09f6544, 0xee0fa54d, 0x9235ed1e, 0xb754a9fe, 0xc7833f9f, 0xab8e405b, + 0x9237279f, 0xc3ac617c, 0x9070f188, 0x5ff7aaeb, 0x21bf0b64, 0x9fa3e58f, + 0xfc1ec274, 0x21f4d0fc, 0x09ef9a06, 0xc3a258c7, 0xf44f80a3, 0x85ed1fb7, + 0xabd78e3f, 0xf2276de1, 0xb4fd0040, 0xe10fe6ed, 0x1f677cf2, 0xa0a97b72, + 0x57c936ef, 0x69d54284, 0x9dfe230f, 0x12b05e6d, 0x4e1cfbcf, 0xf311acf9, + 0x237f73a8, 0x7fb7d431, 0xf6917f6a, 0x1d769b73, 0x8b7e8fea, 0x7f50e5b3, + 0x6557fc06, 0x3da2d794, 0x4561fc0f, 0xcda6a7fb, 0xb757f04b, 0xf3e3b714, + 0x8ac936ea, 0x7ad9d922, 0x93cd3c61, 0xb07f9075, 0xf2b80fad, 0x6abb7306, + 0x4a9960e4, 0x44c603a7, 0xe21adfbd, 0x0fc84b76, 0xae109f20, 0x866b123d, + 0xe675b6fa, 0x5659fba0, 0xb1fbe10e, 0x5133ae0e, 0xbe0aa69c, 0x4e1c79c7, + 0x23326c39, 0x7982ed3f, 0xe38f3849, 0xffb1c333, 0x768646d5, 0xb9df0286, + 0x9c49df14, 0x8d8b5bff, 0xd579f70c, 0xbe13d62f, 0xf22d5adf, 0x683e4b1c, + 0x48b8c24c, 0xb58738b5, 0x07f29bb8, 0x3b72556f, 0x2312ec6d, 0xf759cbad, + 0xcb457b70, 0xfedf0ad7, 0x96a9f044, 0xdb7cb57f, 0xaf2b5f8b, 0x0fa75f8f, + 0x42d7e1ee, 0xff40fbd4, 0x70871871, 0xc39f877d, 0xc072b8ac, 0x4ee00038, + 0x7158b46f, 0xde816b1f, 0x28fefdfd, 0xf7f00e37, 0x4ab6aac3, 0x77c8fe5c, + 0x9a92fce3, 0x84bd6c4c, 0xb6e9c4fc, 0x664dd054, 0xc538525d, 0x28e97c8f, + 0xf394d2a7, 0xb1564679, 0x5c2ae28b, 0x9f3c14fe, 0x007d75b0, 0xbe0bc6ff, + 0x9e62e454, 0x51763989, 0xe065b19e, 0xa767e854, 0x83a1fb91, 0x19597f44, + 0x42a7e35d, 0xbf1890f9, 0x97973076, 0x887ebd4a, 0xfc4ea7f0, 0xc539f08c, + 0x713ff1cc, 0xce0e778d, 0x1dfd97e3, 0x9d5ca3f7, 0x558fe83c, 0xd29af7a8, + 0xbca7ca5f, 0x1d92b304, 0x0efbc4ae, 0xcb68f98c, 0x686f982a, 0x37d1186e, + 0x0b46ef74, 0xd66873f2, 0x208e01f0, 0xce94a7fc, 0x01cc69cb, 0xe5cd5f3e, + 0xfa952a0c, 0x4d67fdd4, 0x73c55e74, 0x97ad3c61, 0x5cf489cb, 0x62dbeef9, + 0x7d8816fd, 0x049e4aee, 0x7461b6e4, 0x829dbf91, 0x8ebb8607, 0x4f3c2047, + 0xdd56bd12, 0x74f186c3, 0xff9a46dd, 0xd2e3aaec, 0x2ee7e802, 0x0118cda3, + 0x7463fef8, 0xdfdc4ac5, 0xc81d52f7, 0x57dc10fa, 0x8f99066c, 0x542d9bfb, + 0x5025d5f7, 0x993ad5fd, 0xf6097dca, 0xfe860c9f, 0xcdac1e67, 0x29e2fda2, + 0x614bd98f, 0x46a3ce9c, 0x4cda03b1, 0x77928276, 0x99e8f6ee, 0xb777de19, + 0x809f7c4a, 0xe5de7f80, 0xf900e624, 0x878e36f2, 0xaf359371, 0x56b3dc91, + 0x7e8f185e, 0x53aab0d2, 0xae77588d, 0xb478cbf9, 0x3e824e2f, 0xbb033e41, + 0x2848259f, 0x709b8e4f, 0xcb9cf13f, 0x4ecfd471, 0x5c78d75d, 0x127dae77, + 0xb64fb7e5, 0xe00d305d, 0x67c28afa, 0x367e605b, 0x834fff80, 0xc33e7863, + 0xe9c74c33, 0x35db9c3b, 0x87da1f82, 0xe90a2dfc, 0xff235e61, 0xfefc66e1, + 0xbae19e88, 0x15da5f5e, 0x87220965, 0xcfb8884f, 0x8f789adb, 0x5c985652, + 0xa9471859, 0x0fdf05d0, 0x9ee0e6fa, 0x53ad0578, 0xc40527fc, 0x94c2e6ab, + 0x0fc963a2, 0x7ac186f2, 0x7b19eb9e, 0xad6580d6, 0xfb53dec4, 0x00bdec67, + 0x3e2fbe3b, 0x06b2d6bc, 0xd7f2cbfb, 0x8c0c8fd1, 0x191fa273, 0x921afe2c, + 0xabe03992, 0x0ece65e2, 0x5e80efb0, 0xc9386035, 0x79efc871, 0xf3df9e54, + 0xc7eb8c90, 0x18f5d61c, 0xad960bea, 0xdaa3bf23, 0x5e87b6a5, 0xf8ebe5ce, + 0xb78e5ce5, 0xff6ac1ce, 0x8ba4fc09, 0x27e09fc8, 0x9346e145, 0xfb49ff00, + 0x3327fc9c, 0x37182bae, 0x6cf3e80f, 0x96e4fa30, 0x1bbf15fe, 0xcf899ac4, + 0xf239f019, 0xba9e7697, 0x1327911c, 0xae167aeb, 0x36dfe46b, 0xfdb5aebe, + 0xa25b97be, 0xebf681cb, 0xbd003dc4, 0xf7972af8, 0x2259bd57, 0xc737397c, + 0xb1ce9e11, 0xe052f6cd, 0x070073cb, 0xed3a6de6, 0xcc18f0f6, 0xe1ec3b03, + 0x397e11b1, 0x9c39b350, 0x39975bbe, 0xd4016e2d, 0xbe70e407, 0xd636df3f, + 0xb79e788c, 0x653faf99, 0x59de93bc, 0x469eb871, 0x564cbb18, 0x39ec9f78, + 0xe0768515, 0xe3d33d88, 0x05f61d70, 0x47a0b867, 0x2b559af5, 0x7e71c74f, + 0x9288fcc0, 0xe83e77e7, 0x57fe2135, 0xbfc461ae, 0xa9fdcfed, 0x79f1d706, + 0xf505b84f, 0xe1bdb9e1, 0xb8bf3a2e, 0x93adc42f, 0x45710fc8, 0x673b5c83, + 0xec9db8ec, 0x0b7a3dcd, 0x7dce8ffa, 0xeb863c9f, 0x085cf9d1, 0xa56c7e5a, + 0xa80ba1e7, 0x133caaf7, 0xe90a1ace, 0x74bfcd7c, 0xb9af543d, 0xd4abe69f, + 0xcb33a93f, 0x1bcf4728, 0xd9589cb8, 0xdfec9bb6, 0x0bba5795, 0xb9cd9f71, + 0x891f7fbd, 0xbbf9cd72, 0xcf2891ee, 0x8f742f9c, 0xe7cef7c4, 0xd9836bc3, + 0x4433ff2d, 0xf452f44f, 0x06ebda65, 0x73e8bc55, 0x0d691fc1, 0x80e9e5cd, + 0x67c711bf, 0x794f5e50, 0x474b223f, 0xbc4694e7, 0x24b71651, 0x9f06bbe0, + 0x0f9f1ca1, 0xbe165e3f, 0xcf2f8038, 0xb8951ae7, 0x79c575d3, 0x6461adf0, + 0xa7c75c40, 0xbb4285b3, 0x3f033e75, 0xb9295037, 0xfb00dfd1, 0x3f1dfb45, + 0xce3cbabf, 0x04ec9ebd, 0xe182a4fb, 0xaeb2cf58, 0x98ac5197, 0xd806650f, + 0x3a7cb34b, 0x51f0086f, 0x4bc42785, 0x70cfbef6, 0x8ec2ea8a, 0xa3e1779a, + 0x482934c8, 0xd5e7269c, 0xb5c72871, 0x17f81af1, 0xf62b7089, 0x79131fd5, + 0xd6b928fc, 0xe77dc3a2, 0x3e781a73, 0xa75c57b4, 0x178a36e2, 0xb23be369, + 0xbf19936f, 0x16753393, 0x4bb15784, 0x41ad8e91, 0xd05e80e4, 0x0d5f5951, + 0xa7d11d3e, 0xce6a57c1, 0x0e4af284, 0x16ad5f5f, 0x6b639d1d, 0x0a7f4cf0, + 0x570d0be3, 0x802f0aee, 0x9f5e1a71, 0x5b1cf0c6, 0x9cd4a5a7, 0xb95ddf85, + 0xdf333ccd, 0xf1da37cf, 0x76e1ce5e, 0x085edf91, 0x423cffae, 0xf4abfd9e, + 0xbfce5b60, 0xff041e87, 0xdc3977fc, 0xe3cd9f3f, 0xd73fdc27, 0x2e450fea, + 0x0976fd2b, 0xcb96f73a, 0x01cec967, 0x72e49a3f, 0xed4c8e57, 0xe3533d92, + 0x7d7ebfc8, 0xd11c9c46, 0x830cffbb, 0xdf9b1755, 0x9ec57fbb, 0x876cba73, + 0xd8f7e8cc, 0xe756fef8, 0x13ce890c, 0xd39ff628, 0xee5d912e, 0x6374639c, + 0xdf2e053b, 0x9d8f1e0c, 0x43ba3369, 0xa89dbf25, 0xef3d91d8, 0x57bd12ad, + 0x7ec54aec, 0x7c79d9f4, 0xfe70c677, 0xe3825f7e, 0x2783d423, 0x7cf4a1bd, + 0x9cfe18c4, 0xf421fb31, 0x53baeeab, 0x84072462, 0xa9f0a95d, 0xe8bceed6, + 0xf3caf8c9, 0x7f045b41, 0x906ceb2a, 0x7a287d66, 0x53c0806c, 0x62f1ea0d, + 0xab9fe3d4, 0xbf6d73ec, 0x8effc7a0, 0x9e400ff0, 0x1bf87280, 0x7f307b06, + 0xbf45bffd, 0x7e82b9e1, 0x082583be, 0xd1f30a6f, 0xf4befefe, 0x9d843feb, + 0x01fbd7d3, 0x6d5cdd62, 0xfdcc8f3d, 0xa2e7aed7, 0xf58f7fdc, 0xf61f63dc, + 0xcdf8ce71, 0x739b92dc, 0xfa619e61, 0xae095f5a, 0x418d97bf, 0x0984bdf7, + 0x5dfc0e3f, 0xa50e7d15, 0x1fe87498, 0xfc792b39, 0xfe4629a0, 0x2f31f903, + 0xc9dce9ea, 0xd107f04a, 0x39715b8e, 0xb42aca86, 0xfd9ca197, 0x47ca71cc, + 0xc354aecc, 0x5d3184df, 0x349efefc, 0x73cfda37, 0x99c51959, 0x2c627ae6, + 0xa9a38e78, 0x5c61cb5f, 0xf4a7ae57, 0xed8153f2, 0xcded2b97, 0x26b70e3c, + 0x336df691, 0xb7303d8d, 0xabf76b56, 0x459b83ed, 0x3b2fa8dc, 0x50f685e1, + 0xe88e572e, 0x60d79d69, 0x632869bc, 0x0b970f26, 0x4e3c35ce, 0x4b59e352, + 0xc5ab4ce7, 0x1f0633fb, 0xbf28a1c5, 0x7acf4d06, 0xf5c7f636, 0x7cea6cc8, + 0x6f93f552, 0xe6d4bc90, 0xb95b6295, 0xe956725c, 0xa4691e45, 0xf06af584, + 0x7da00727, 0x2077cb29, 0xd52e01de, 0x2ec5557e, 0x4af226d8, 0x4fbc8f17, + 0x3dece87e, 0x9a91e47d, 0x923cf226, 0x3bd617d8, 0x10f8748f, 0x5ab93fee, + 0xeda6a91e, 0x8bfd11b8, 0x3693e5ab, 0x8ee3aae4, 0xdf1e06a9, 0x1648f54d, + 0x7aa5578c, 0xad47bcf8, 0x7afb230b, 0xe38bbbfc, 0x74281e50, 0xe3953f3a, + 0x975bfcf7, 0xd1eb684a, 0x284b06bb, 0xb785ebcc, 0xc496bf56, 0xc659b2eb, + 0xd38756ef, 0xdeef19fd, 0x7df88e1b, 0xcfa44a01, 0xc10c27f3, 0x78fe93e3, + 0x8a5cd6f5, 0xb5788b3b, 0xa461f401, 0xfda3ae3f, 0xd77c50ae, 0xc50aee04, + 0xbcf0f735, 0x63a2537f, 0x9c7fd522, 0x3b229ece, 0xe8f146d1, 0x18d7c0dd, + 0xc983ca37, 0x57fa5e62, 0xf301ac61, 0x1cfd4d48, 0xfa3ad12f, 0x75c64eb1, + 0xfe53df04, 0x264bb5c9, 0xc32888fd, 0x09a14f3c, 0x52fda160, 0x10d5df7c, + 0xf044c741, 0x04cf3167, 0x3cc0ccd0, 0xf7c89e74, 0x03318614, 0xd1b0fff6, + 0xf3173eb1, 0xeb06ed4b, 0xd6045a5a, 0x4dc7bc38, 0x6c92779b, 0xe4ae5f3c, + 0x79bc949f, 0x0927f95f, 0xfce429c7, 0xb126f947, 0x33c9572f, 0x94ed3bb1, + 0x5d1faafc, 0xcd7fd0cb, 0xbf4cdcc2, 0xf9ff9a1b, 0xfc907078, 0x33075fcf, + 0xf9d5cf21, 0xcf39f5c6, 0xb3fe9f12, 0xb991c679, 0x8e6e1a37, 0xc3dc2d1f, + 0x27f62e63, 0xbf8bebbf, 0xf59e9146, 0xec3e9374, 0x3e610aec, 0xf0763f8a, + 0x9f87bbb8, 0xff04ec73, 0x9e805fad, 0xfbc3919d, 0x4b19efdd, 0x2beadffc, + 0xdff6c70b, 0xbad87613, 0x474c67d7, 0x33e5df7b, 0xc63f7ed0, 0xead63fb8, + 0xbb408c33, 0x25d206e5, 0xde483724, 0xf5c61ccf, 0x791d7693, 0x20f5fe84, + 0xb1fe019e, 0xcc3f716f, 0x57e79ab9, 0x382e422c, 0xfd5e796b, 0x497f4a70, + 0x080fa789, 0xd3d97f96, 0xee637a45, 0xebf68972, 0xe5fe6b5f, 0xf9e0c491, + 0xa76dd9f8, 0xca5fe782, 0xecfc93c7, 0x8dad9e2b, 0x110fe763, 0xc780aff2, + 0xb5cf1fb1, 0x6b63bcd0, 0x600c9587, 0x40dff9fe, 0x4869fc3a, 0x81bb3e10, + 0xf7917ffd, 0x247ff6cd, 0x1fcd9bfb, 0xc7e4c14b, 0x7a3fec0d, 0xff0b37f0, + 0xfe186fd0, 0xf861be87, 0xf861bf6b, 0xfffce7c7, 0xba9e80fe, 0xddafff36, + 0x07dda02f, 0x12e2f210, 0x487bbe17, 0x85e5d0da, 0x5cf51cd2, 0xd0720485, + 0xed24f310, 0x863c9db7, 0x95d6c3e7, 0x255bdd99, 0x0501beff, 0xdcf99d5f, + 0x5fe4b48f, 0x1bcaa170, 0xc595f364, 0x0c6cbc61, 0x33b83f23, 0x68f3dc54, + 0xa54e24b0, 0xc4963df3, 0x34976069, 0xf24e71f5, 0x2fc2f9c7, 0xe48f43ec, + 0x39bc9415, 0x9cd3c704, 0xa1ca50c3, 0x6966af22, 0x99f8fbe3, 0x469c4e41, + 0x6889cae3, 0xe41f450f, 0xccbca3cf, 0x92e095b6, 0x3f91a6d3, 0x7c21a728, + 0x6ffc888f, 0x34ecc4ec, 0x82c74b8c, 0xc179885d, 0x241f988d, 0xed42d67f, + 0xe796f194, 0x311ef1f1, 0xb9f30932, 0xcfbe5cae, 0x25f91d89, 0x5e4a6fd9, + 0x7bd1a8ef, 0x7944817a, 0xaf288bbd, 0xf9bce98f, 0x1304d2db, 0x5bf37e03, + 0x7c6f942d, 0xe6ffcc65, 0x3c92f3f0, 0xc2cab7cf, 0xbf401c9b, 0xb558e019, + 0x77f898b7, 0x6f31fef6, 0x23ff41ce, 0xd483df93, 0xf114afcb, 0xde221382, + 0x940bc4a1, 0x223bd6fc, 0xe312724e, 0x6076502f, 0xe8ca043c, 0xb68ddd3c, + 0x82f3a2df, 0x244797c8, 0x1d721f1e, 0x62a1f1e3, 0x70233593, 0x1e72653f, + 0x5e0583e7, 0xe250bf9e, 0x7cc5db3d, 0xf7a3bf8a, 0x5a5d8086, 0x426058dc, + 0x98dc5f3d, 0xa1658612, 0x0febadcd, 0x78b59ef8, 0x5fa14e97, 0xceca3e30, + 0xbafd76e3, 0xdf945d23, 0xfbc9addb, 0xfbe3cf2f, 0xfc13de19, 0x3a751cb8, + 0x0cb2ab94, 0x463e68f5, 0xdd5162df, 0x7394a847, 0x38462fc1, 0xb8713417, + 0xf5cf7c15, 0x9c7163ca, 0x1aba8753, 0x4caa2cb1, 0xf7714b1b, 0x688d0baa, + 0x74af39bf, 0xe295be1f, 0xfd192665, 0xea1d7989, 0xc0549bb8, 0x96ee61f7, + 0xd77239f8, 0xc7f90304, 0xc40c13c5, 0x4373b13f, 0x358d7fc9, 0xd6047d32, + 0xa8bb72a7, 0x2c7e3ca8, 0x188cd9d6, 0x8e8b07b2, 0xf24b31c8, 0xd8b071fd, + 0x21fbab09, 0x6796ae9e, 0xfb69e255, 0x21b76c12, 0x3cd9ff3d, 0xd7d1f56b, + 0x32a9bf69, 0x4a2f052f, 0x3cafb4be, 0xc1efb2ab, 0xb5497e59, 0xe869c34f, + 0xc7f18f1a, 0x4ca7bde2, 0x25a5ff62, 0x879fcd21, 0x8173de2d, 0xbe4aaff2, + 0x817b59d5, 0x8ef86aec, 0xad6a5fee, 0xe7d7f9e3, 0xdb2c0e00, 0x8036de60, + 0x6f30b7e7, 0x6f303d2c, 0x2eafbe7c, 0x9d6f4a87, 0x75fdca95, 0x062ca9a3, + 0xc58c49f6, 0xca05edbc, 0xf5e4d6db, 0x794937da, 0xfb38d6bd, 0x80af883d, + 0xb5d51fbc, 0x187d3f79, 0x8f38d78f, 0x947ce918, 0xe499a8f3, 0x41678977, + 0x9f07fa2a, 0x22a4771d, 0x779835dc, 0xf38be00b, 0xde286b36, 0x6ede7407, + 0x5b7cc50d, 0x1359fb71, 0x31a987ee, 0x0f184cf8, 0x7093c803, 0xf5b3a2cb, + 0xebf7df02, 0xfc450929, 0xd63f355e, 0xb1f9fff6, 0x163f267f, 0x249f5fe9, + 0x3aec8a47, 0x8f2c56db, 0x049742d8, 0x767589c8, 0x97594f9e, 0x70eb4e99, + 0x663d3d93, 0x0d7f4071, 0x117e3ce5, 0x3433213b, 0xc0a3b9f0, 0x1627f248, + 0x320b47ef, 0x2f1be1fe, 0x93070fb7, 0x998fe7db, 0xfb5a3ce9, 0x1da9659e, + 0x07e17cf9, 0x95d6e3c6, 0x73c54e2f, 0x2113ae7a, 0xebc78b2c, 0xa638f154, + 0x15f5cbc9, 0xae5d9b97, 0x7ed285b3, 0xa841aea1, 0x33f1b5b7, 0xc41ae866, + 0x892dbaf5, 0x25712b9f, 0x57acd1b1, 0xe66dee7e, 0x088f037e, 0x91d72ace, + 0x74f250be, 0x5606e545, 0xb459fc07, 0xfca6e8c6, 0x14e1b95c, 0x637e17bd, + 0x0928a583, 0x51e4fcf9, 0x6ae30593, 0xb598f8da, 0x74a6c9fc, 0x255adef8, + 0x575a7159, 0xfb29e3cb, 0xb5b6e7c0, 0xdb78c38f, 0x54dcd630, 0xcb0fdf06, + 0xff7059d4, 0x1e7cef74, 0x245dffdf, 0x9c6d1cec, 0xee8cf90d, 0xe1c4d30f, + 0xed7a10bf, 0x6f3fa10b, 0x08d200c6, 0x77ca3f7f, 0x2699fe5a, 0xe2beb8ec, + 0x0f42a5fa, 0xad179436, 0x4efa44cb, 0x27d431d6, 0xe6a5e50d, 0x2cfe80cc, + 0xdb7f7cf9, 0x8c1f9823, 0xf20fcc0f, 0x2f36a03c, 0xe2b9c8a8, 0x23c7cff6, + 0xbc8137be, 0x4ce63d46, 0xe283f9e0, 0x5047257d, 0xe4e1f86e, 0xa129be7c, + 0x18879ee7, 0x70c5e7c6, 0xaf6b9cff, 0xa2b9f144, 0x87f697c9, 0x41d99d43, + 0x3b5ca1ef, 0x811f599a, 0x61b268f2, 0x71eb9e04, 0x3c9ea5da, 0xa693e613, + 0x2272a1ff, 0x9e28339e, 0xd238ec39, 0x231ce665, 0xf4540fed, 0x543ff4de, + 0xb7efe78c, 0xef86183e, 0xa86b2473, 0x4bcbcf8c, 0x1da4f9f1, 0xb3a48c5e, + 0xc81d0829, 0xd3d1df73, 0xfb375c06, 0x7cd61c12, 0xaa78b780, 0xe1cd33c8, + 0x67a67a7a, 0xa7bf38aa, 0x52079bd6, 0x5078a33e, 0xf298a7b7, 0xffb87147, + 0x6fafdf21, 0x1e82f78a, 0x7a71bc8b, 0x85be5a6c, 0xf41439f0, 0x3b13c218, + 0xb5e9e795, 0xfe08b7f4, 0xf52f4be8, 0xff518725, 0x5c2f79e0, 0x6f42529f, + 0xdc632e3d, 0xebda1467, 0xd52e5e12, 0x09d5ff27, 0xc3e98ebe, 0xf017ab9e, + 0xaa7fb9f5, 0x67935fed, 0x37ffcbaa, 0xff0933c9, 0x2937c94b, 0x023bdafe, + 0xaef94acf, 0xfb5f0b90, 0xd72a037c, 0x621be7a0, 0x986f9f83, 0x27f742d7, + 0x0e1be729, 0xaec95899, 0x2b4fdc78, 0xa7b93bce, 0xe8749d92, 0xfe376f27, + 0x3bcf1e22, 0x47541649, 0x49c72dd5, 0x70f72bcf, 0xe13e78d6, 0xbe16d6f1, + 0x2dbabc3f, 0x89567df8, 0xd997bf42, 0x6a8dc918, 0x7c76dfb1, 0xf513c8ab, + 0x37ef2dc4, 0x9d2dc604, 0xb29fafb2, 0xfe4dd78f, 0xd98e3a9e, 0x46b2dc57, + 0x52a3f7b9, 0xb87ea2b2, 0x66dc3eda, 0xcfb75fb1, 0xabeda638, 0xe36ae5f7, + 0x7bf28798, 0x1e5105ce, 0x5c21b5e7, 0x2438544e, 0xacce8fba, 0xbed157b3, + 0x25927dfd, 0x3fef3ed8, 0x3af5f3e5, 0x9e41e449, 0x78fe7136, 0xae7e26fa, + 0x21e1cf19, 0xc7de9fdd, 0x5d3ce1cf, 0x28e1cfc4, 0x7ce50f79, 0xef3fae4d, + 0x94efe741, 0x39ca3973, 0xf85ce51b, 0x7461cdd4, 0xc6c3fdaf, 0xf76e0496, + 0xc33eb8ba, 0x587de1bf, 0xb60dab08, 0x5f9f7f5e, 0xfd1f2eb2, 0x6e1bfcc0, + 0x0fcf9d3f, 0x42ca9712, 0xb9c6123f, 0x82fe0f94, 0x17f30599, 0xf6af9afe, + 0xf5aea817, 0xde546e17, 0xdd9f21a3, 0x0c8f79e8, 0xc0de3766, 0xc37fb7fe, + 0x8c1d3ffd, 0xc1a1f56e, 0x2caf19cf, 0xcd747910, 0x5eb04cef, 0x5eb925e7, + 0x37e4926f, 0xba7ca66f, 0x8ae9f291, 0xe48a6d5c, 0xc054dffd, 0xce52aae5, + 0x31936514, 0x21ccbc78, 0x9c6fffde, 0x94014c6d, 0xe3a8cf79, 0xea2d0597, + 0x36d0e5f8, 0xc344fdf5, 0x87fbeabc, 0xefa88f8a, 0x53e11aa5, 0xea354bdf, + 0xaa5efa84, 0x7bea1d31, 0xa33e6ea9, 0x5bea97be, 0xe5f8ea5d, 0x69a797ad, + 0x09ba71ce, 0xb9c0257f, 0x358ddf81, 0x87dcd22f, 0x87dcd3a5, 0x0fb9a615, + 0x92ef734b, 0x35cd37e8, 0x962f7350, 0x98b17e7a, 0xfebfcb8f, 0x7973dc7c, + 0x65c7c8b2, 0x8f77e284, 0xefd26794, 0xa9e728d3, 0xccf82cff, 0x2da8e057, + 0x078e7680, 0x5f20d427, 0x190dac75, 0xc7177184, 0x78fa8983, 0x0fc707e0, + 0xa38fba24, 0xda44c1f4, 0x61a8b3df, 0x4549d918, 0xd27646cc, 0xf41638dc, + 0x171f98fe, 0xb0b5b970, 0xd14cc8d6, 0xc26c9838, 0xd73901df, 0x80efd124, + 0x53e73de0, 0x192b0f80, 0x75eac3e7, 0xef28a3c7, 0x72cef42d, 0x59560a8e, + 0xf3ce8cbb, 0x5291ef6b, 0xb4538cf4, 0xa62d62ab, 0xc577e844, 0x1f5a7686, + 0x9ca67bda, 0xff9d036c, 0x3cd16eaf, 0xee8dbdaf, 0x9b998003, 0xb6722ed0, + 0xb0ffdfa9, 0xaccde440, 0xc7eb8acc, 0x19a47f71, 0x8152cced, 0x241b059f, + 0x1709e60b, 0xbbf7b435, 0x8e8bea0b, 0x52efc9e8, 0xdd7ac3f0, 0xbf4f95ff, + 0x48f171af, 0x17d1d916, 0xb6007965, 0xbf714473, 0x46383241, 0x71b9f3e1, + 0xff78518e, 0x915bd762, 0x9d87f678, 0xbb27acba, 0x42a16c01, 0xac2cdfb2, + 0xbbde3030, 0x8fe968c0, 0xbb1716f1, 0x4dfc8137, 0xf82affe1, 0x9fc19a71, + 0xf83ac28d, 0xd27e7cab, 0x8fd11297, 0xd8175b54, 0xd80e3847, 0x9acfe441, + 0xda2d7999, 0xe6e56741, 0xdb0268fe, 0xfb246fbf, 0x188ee162, 0x36162fb2, + 0xfde1358c, 0x635b0b2a, 0x732d3f68, 0xff475ed9, 0xa9e7a156, 0x09c3e286, + 0x96c2efd0, 0x4d5eab34, 0x455fd3c7, 0xa74d15c7, 0xee9dfa14, 0x83a77e83, + 0xa6e80fd1, 0x8692fe7a, 0x3881ec6e, 0xe737e73a, 0x1859439e, 0x1b58bbff, + 0xd2fbbf4a, 0x71702fdb, 0x4df1793b, 0x7ca7ff2a, 0x475f8f60, 0xbdd05bbf, + 0x4fd10461, 0x7ff2b74b, 0xe7851a2c, 0x91dbd8af, 0xb98fed0c, 0x34fe6c19, + 0xbe2593f4, 0x4fd6e6de, 0xe77b4728, 0xff9f217d, 0xe3a4fc20, 0x5d8127e8, + 0x49fa1aff, 0xf8437f50, 0x9fa26f49, 0xe85be504, 0x5a794127, 0xacaa83dc, + 0xe204603b, 0xdc05b3db, 0x23db39ae, 0x602757f7, 0x1ffcad7c, 0x01d08daf, + 0xfd73f5ef, 0xdf71cee5, 0x9b0eec62, 0x98aebeda, 0x3bafb6a1, 0x09f1968c, + 0xf1d607a8, 0xfb42c17c, 0xccf6aacd, 0xee309b20, 0xfd8a72c1, 0xc91f49cf, + 0xcc7b8c26, 0x6aa71c9a, 0x9253677f, 0xca152eaa, 0xcf2a2edc, 0x7bbf3d50, + 0xbeaa9e4e, 0x661832e0, 0x68f2efc8, 0x85ab3f5a, 0x68d8c4df, 0x6f0b174e, + 0xd476a97b, 0xbc036f80, 0xe91a8e97, 0x0a1e96bd, 0xd66f175d, 0xd1773c53, + 0x00b98966, 0x8bcdd3c4, 0x727d7d68, 0xa7ee9222, 0xfc51dc6a, 0x9fa868ca, + 0xfda461da, 0xe21aa765, 0xf6f7807e, 0x2fd1da9c, 0x39edcf0a, 0x7ee2f51a, + 0x5dc90b1b, 0x0db1dfa5, 0x73f7e96b, 0xac43b816, 0x41cd8f74, 0x1d4ae3d7, + 0x32da6eed, 0x75e4eb83, 0x112bdbbd, 0xdf846cfd, 0x2714a1ed, 0x2e64633f, + 0x8b9bd80b, 0x675c383a, 0xf580d624, 0x64efa1b3, 0x38e01b7f, 0xa979a537, + 0xfd2aed0e, 0x3f247ed1, 0xe433d59f, 0x18f739db, 0xe5f55ee9, 0x62b7e86f, + 0x4945499d, 0xfa7ade9c, 0x3db6285d, 0x5d67fa84, 0x6ed021c0, 0xb6422ff5, + 0x2f7117ad, 0xc0a6ffaa, 0x27f05ebd, 0x1899d1f2, 0x60218b66, 0xe3e1fc79, + 0xef28fde3, 0xbba7c7e3, 0x33bde710, 0x10a23ede, 0x4bc7c7d6, 0xdf2485dd, + 0xeb47e81e, 0xd3f78b4a, 0x5cbf2e26, 0xbf240eb8, 0x33aff4dc, 0x916afe7e, + 0x4adfdad1, 0x22786b72, 0x1bd3adca, 0x6467148c, 0xcf145b06, 0x7c4b3dcb, + 0xda738cac, 0xf8478f20, 0xd1a5374e, 0x1b85c339, 0x90ffa4f4, 0x377b78ff, + 0x7a8dffe7, 0xaeeffa07, 0xfe81c926, 0x566f96bb, 0x7e8a33dd, 0xef7b4647, + 0x4f9e5292, 0xa50879e4, 0xff2f62be, 0xbc36139d, 0x20a330c3, 0x7c0d1e70, + 0xd568c73c, 0xa5542fef, 0x8464feff, 0x467ce50e, 0x39d39e34, 0xf89ebafb, + 0xf37a6cec, 0xe7a004c8, 0x23fdbaa7, 0x4ff50dbf, 0x343eb8a6, 0xa0763d40, + 0xee216163, 0x186dd0bf, 0x3ba6e784, 0xe0ffef3d, 0xe3eef866, 0x2d2b469d, + 0xd3df7173, 0x53cbed8a, 0x10dceabf, 0x3c81de63, 0x944b68ee, 0xe52b9f00, + 0x333dcd16, 0x0ef23f1c, 0x6cb0d71e, 0xf78e71e2, 0x47ae4447, 0x26916d3f, + 0x38bef18e, 0x215f783f, 0xdd8a2b97, 0xb72142f0, 0x38e916ef, 0xc5bf837f, + 0x95318df9, 0xf6e4501e, 0x289dfc4a, 0x280f5fbd, 0x358abb72, 0x4dfd7dd3, + 0x9f3ce985, 0xfee9b925, 0x79bc1aa5, 0xb52fda1f, 0xeab63f70, 0xf9371099, + 0xbe6832a9, 0x65e0fb00, 0x98564f21, 0xec863e76, 0xf8f98cbb, 0x3eed353c, + 0xfa97ba36, 0x9feb7ad2, 0x0dad96a5, 0xd1bfd4b1, 0x9719fb8a, 0xdd5af589, + 0x3cbdb92c, 0x747a4a0f, 0x8967e889, 0xfd5aa3d0, 0x692f4bd4, 0x8d12d1f4, + 0x6acd65de, 0x46f00b3d, 0xbc0a38e0, 0xe1ed385a, 0x15878491, 0xe7df7ccd, + 0xf0fb8752, 0x64b704ed, 0x82f68a05, 0x97b31967, 0x9e3ce0c5, 0x16ba7ee1, + 0x7abced3e, 0xa9e62bc1, 0xf5a97b85, 0xaf2f9d02, 0xbe1121da, 0xe850f3b4, + 0x14e3b5a1, 0x71752cba, 0x48f52efc, 0x7a0fcf44, 0xfb4643ec, 0x61be1543, + 0xc05ff02d, 0xc11f0af7, 0xf9476ebc, 0xc8136cb6, 0xfcdeb4e3, 0x44b582b4, + 0x30d4df21, 0x0bde236f, 0x72dbd675, 0xbc3498e7, 0xdd38ee0f, 0xd62735a3, + 0x018ba59b, 0xfe96ba54, 0xcfc53ca8, 0x5f7c5ae7, 0x8bd7be8d, 0x0cf2263f, + 0x6be01df4, 0x3a7a93c9, 0x4ed013ff, 0x5a2ec7f8, 0x972e955f, 0x95cff309, + 0xe55f7e06, 0x1a74e0d5, 0x5df9eff8, 0xcf815e15, 0xe7f70d1b, 0x5dd97d85, + 0x07ef4159, 0x8ef9e653, 0xd5573390, 0x5deb06f7, 0x3f7df48c, 0x7d35e309, + 0x42a5efc9, 0xbd412fcf, 0x9b87e50f, 0xb03dd377, 0x4dda6c1f, 0x769b3ef7, + 0x0b7da12e, 0xf45e6e1f, 0x9d5dfc03, 0x222c770f, 0x27ecbf3d, 0x98779e8a, + 0xb187ed02, 0xf13c179b, 0x67dbe45d, 0xbcaf2942, 0xf843a0f4, 0xa1572041, + 0xcb99bc9d, 0xcb89b651, 0x0fa865d5, 0x0e1f49f3, 0x2ff776c6, 0xfe460c75, + 0x7a4e780f, 0x8e45fef2, 0x7e85ef5f, 0xb865ffef, 0xb65345d5, 0xda5c7978, + 0x587d45e2, 0x279bef7d, 0x410677f1, 0x1df1bfff, 0x7543ff45, 0xf063bc6a, + 0x42675c50, 0xb7eb57ef, 0x9da0b20e, 0xbfc4f420, 0x110bdf1a, 0x715f64df, + 0xc4d7bf7c, 0x06fefcf1, 0x1dc6f78e, 0xbebfe419, 0x764194d7, 0xb23b7bd5, + 0xd78bdf08, 0xaec9be03, 0x5576d596, 0xfd1be013, 0xc037c407, 0x2ca0f0b5, + 0xf8e56df0, 0x6678e26e, 0xb8b9781b, 0xf45d5e17, 0xfff712bb, 0x768ac43c, + 0x2f5099c2, 0x76674fd9, 0x34aee9e9, 0xec52eec5, 0xe6b0bf9e, 0x533ed1c7, + 0xdb3cbdf0, 0x65f28857, 0x47dfc6ce, 0xef97de21, 0x5e93c1e2, 0x01b666f8, + 0xc7fb7f68, 0xee93b1ef, 0xd8f4fa46, 0x9748d749, 0xfda7661a, 0x8f7835ca, + 0xbec06159, 0x31f7e568, 0x65a0fbb5, 0x610caf1e, 0xe119b356, 0xfefed649, + 0xbee183a7, 0x2eb2cfe8, 0xd697bbcc, 0x77ea9771, 0x5e676e86, 0xc067de23, + 0xefda245a, 0x24babd52, 0x7de184aa, 0xc704b5c8, 0xea92a1a6, 0xf5aa0677, + 0xab17b23a, 0x546edc4c, 0xafffa3ee, 0xf83edca1, 0x0fdca1af, 0x85a86079, + 0xf8c63b9f, 0x8abbee3b, 0x1dfc5134, 0x1c04a7fc, 0x8437b5df, 0x611276e8, + 0x4debfc02, 0x71513ee2, 0x61e51a1f, 0x23b36e61, 0xc76a7894, 0x8b79f8cf, + 0xb1d92b10, 0x2f74d1f1, 0x9e42ddf0, 0xb4688ecd, 0x1b981ea3, 0x0961b261, + 0xc7f0bafd, 0x30a58c8c, 0x1c6f8c3c, 0xe7dfa268, 0xd8ee6398, 0xfcef2e89, + 0x33eff784, 0x7f4b70eb, 0x71c44583, 0xeb8cbf5b, 0x7d3f174d, 0x39bbf7d4, + 0x3dc782c3, 0x25f0267e, 0x5f946cd9, 0xc3be8108, 0x50f70e00, 0xeca2f099, + 0x805b676b, 0xefbd914e, 0x339e5389, 0xba77bf17, 0x3767e00a, 0xa320ce31, + 0x7aaaff09, 0x7fbf8995, 0xddafd7fe, 0xb19929b5, 0x805c9957, 0x9942ab74, + 0x82fd7e81, 0xe7ee3768, 0x91ef03ba, 0x40d2c58a, 0xc0cd32fc, 0x365e3a5c, + 0x439e6045, 0xbb751fdc, 0xd1cce7c0, 0x780d1bcc, 0xbea8bef7, 0xaf2ef587, + 0xf0183bce, 0x53de077b, 0xd1f78857, 0x8c0b46c9, 0x8a972f63, 0x7aa90fd0, + 0x7de0daf0, 0xef27d7e9, 0xd40b74da, 0xe70e3a75, 0x61fc7877, 0x01e5c636, + 0xec0cf30f, 0xf388bea0, 0x19c5e201, 0x8efed32b, 0xda247bae, 0xe3c4a287, + 0xf30ffa15, 0x8e89e3c7, 0xd07c05b3, 0x7e14534f, 0xaf4e0a6f, 0xf2550e3f, + 0x47e42d73, 0x6eeb14af, 0x76deb2a5, 0x67dbd7a8, 0xeed11d0a, 0x16cdbc05, + 0xa2eb5f65, 0x6e8bac5b, 0x0d4e2eb1, 0x6bf3fc55, 0xf0458f1b, 0xf5951b7b, + 0xfbc21d52, 0x43bfc657, 0xc6861794, 0x3c0abf52, 0xe9fc38da, 0x7fb27ae6, + 0x38c9ff2a, 0xa11c807c, 0xea64977c, 0x97a88c5a, 0x8ad423fe, 0xa9b67472, + 0xa236ab25, 0x1ee53b77, 0x67cc39c2, 0x110179e4, 0x667a1307, 0xee823e9c, + 0xf1239cb5, 0x2cee6ddf, 0xc0e97489, 0x94277c0e, 0x3ffce3ef, 0x73ff310d, + 0x00008000, 0x00088b1f, 0x00000000, 0x7de5ff00, 0xd5547c7b, 0x733ef0b5, + 0xcc923cce, 0xccd79324, 0x90984204, 0x4c794107, 0x6010849e, 0x080200f2, + 0xc1210f0e, 0x0f0c1320, 0x84432121, 0x33bd1f16, 0x52811e10, 0x5042d41b, + 0xa50503a0, 0xd4546d56, 0x40135168, 0xa34bd41b, 0xad7a16d5, 0xa28a3c37, + 0xfdb91122, 0xbe557bd1, 0x273ed6b5, 0x08993399, 0x7dfbdef6, 0xfbf37c7f, + 0x6759dbf1, 0x6b1fb3ef, 0xfb5ef7af, 0x65a3c570, 0xcab18e2c, 0x4b3f04fb, + 0xd4416c66, 0x91b0668f, 0x24ea4700, 0x4b0a3f2c, 0xc648b3f2, 0x534eb216, + 0xae57d432, 0x0f728b4a, 0x91536c67, 0xc600d8c8, 0xdcaa2f98, 0x18437009, + 0x6766e053, 0xa64e6322, 0x9ca771c0, 0x7ce6c646, 0x75fafd73, 0x9dcbe382, + 0x7e5d8c51, 0x1667ae53, 0x46f2ff7a, 0xeb00b3f8, 0xfb639407, 0xea50bfcb, + 0x2dfaf307, 0xaf0a7d4a, 0xbfd299ff, 0xaa0f6f0c, 0xbf54175f, 0x2da9c38b, + 0x803ee529, 0x5f198b2b, 0x6fe08177, 0x1f2d7580, 0x172c6765, 0x696df5e0, + 0x1cd7ac1e, 0x6b3165e5, 0xb8dce4d3, 0x5ae1cb9d, 0x319e2a3e, 0xe4de74d1, + 0x2caef806, 0xd051f2e7, 0xf748ea6e, 0xcb940728, 0xdd3e0a67, 0x03f31828, + 0xc4cbba7f, 0x51400cd8, 0x8ebbb40b, 0xe5bd09bf, 0xea1a51f2, 0xef26667f, + 0xf437c14f, 0xf4cfff93, 0xaf38eff3, 0x453f555c, 0xde1ff88e, 0xe77db3cf, + 0x999ff533, 0x7a965c4f, 0xf009773e, 0x9ec618ee, 0xc62e76cb, 0xb1d2b179, + 0xd8c7961a, 0xbf4606bd, 0x88e2ff15, 0x9fe031fa, 0x41d9149d, 0xf58afd40, + 0xd0d9492d, 0x5f678aff, 0xef025a49, 0x52f0b5b3, 0xaf2b6302, 0xcb19cc89, + 0x8135dd58, 0x4fdbcfca, 0x9f30eceb, 0x75db8795, 0x1d5da093, 0xf3012594, + 0xc9e791aa, 0xcb349758, 0x074f3014, 0xc1e713cc, 0xe2b953b6, 0xee128bd9, + 0xcb4d0ae7, 0x90e2c785, 0xce0704c6, 0xb37d7823, 0x1f7d7c1c, 0x32d65633, + 0xc7bd6fbc, 0xbefd5021, 0xe21d675c, 0x5183a66d, 0xe20d25ff, 0x7c085742, + 0x57f722bd, 0xfea8ce19, 0xc1933cee, 0xfdce780e, 0x8260ddc0, 0x9dd92c79, + 0x3cc2259c, 0xbe2c8e56, 0xd563fb0f, 0x95bc2a05, 0xe277ad01, 0x0b6ea4fa, + 0x23ebf283, 0xe60c51b9, 0xb9d31955, 0x7632659a, 0x6cd251d8, 0xb4d8c718, + 0x019f0a9d, 0x65bbc2cb, 0x5f9e057a, 0x5c7c0a5e, 0xf3e71df6, 0x9bb32d9d, + 0x703a6f91, 0x82cfd03e, 0x51c223d1, 0x4725743e, 0xcfc0cc68, 0x0eaa2335, + 0x182dfee3, 0x3e126e3d, 0xd29bd22f, 0x8cbf08ab, 0x8466a2e8, 0x8f58e7eb, + 0xc3ac19ed, 0x9f8b6bad, 0xbf70eb07, 0xb07c3a2d, 0x08c8f70e, 0xde043fb7, + 0xc7ef267e, 0xca998761, 0x33cc0d0e, 0xca1e77ab, 0x57998cf8, 0xe77f4277, + 0x6e6427d7, 0x473afe85, 0x7840bd14, 0x1cefc791, 0x8e07f6e1, 0xd2c35e7f, + 0x9f9b859b, 0x3f791ec7, 0xcdf7905e, 0x26f40855, 0xfc3afae3, 0xa11a559b, + 0x16dce782, 0xbd199ccb, 0x0339dcf0, 0x65797055, 0xfcfdaa8a, 0xf5555bea, + 0x399df5d3, 0xfa145728, 0x528f9e0e, 0xf9a38082, 0xe14c99d4, 0xafebac02, + 0x4fe3fe47, 0x5cbf0277, 0x043a203e, 0xaf3dcf58, 0x58d3fc1d, 0xf6057568, + 0xdb0b3637, 0x5824a3db, 0x221d67ef, 0x27bc8adb, 0x16e9a539, 0x155196c6, + 0xe7589763, 0x5e78428e, 0x257db6c7, 0xf32e3ec2, 0xf70dbd2c, 0xf6bf1ef3, + 0x7cc0576c, 0xb05bc249, 0xe6a7cc9d, 0x28063ae3, 0xdd48715a, 0xb6a7e94e, + 0x67b9e825, 0x57a827f2, 0xb8744760, 0xeaad753f, 0xa61d0ffa, 0xf0110bb8, + 0xbacb1647, 0xc578240e, 0x309261f3, 0xc8dde804, 0x95e979d7, 0xe23b3a33, + 0xd00af507, 0x517c64fd, 0xc107fe44, 0xd25ffc0f, 0x05d7467a, 0x761dabf5, + 0xc4cacfc2, 0x047d9255, 0xfa8943d4, 0xadc81264, 0xce9ba028, 0x30e23676, + 0x6c97c3e0, 0x2e841c72, 0x66cdaf6a, 0xcbe91b2c, 0x780d1a55, 0x3b44b0ec, + 0x34ee501a, 0x2be7a14e, 0xff5045af, 0x273b107f, 0xbdf0fea1, 0xa083b02c, + 0x5c0fa617, 0xd3d71eb0, 0x7e1bee11, 0xfd3b8c2f, 0x10cb93b7, 0x0b0f2b6f, + 0xe9a7a44e, 0xab39fbe2, 0x9a69aca0, 0x174fef42, 0xc3108759, 0x3bb5d458, + 0x19805fa9, 0x33cc5803, 0x2f30656d, 0xfe96d751, 0x9d1bca38, 0xdd4de489, + 0x6f7a30b5, 0xa7c9895a, 0x64effa81, 0xe2eda279, 0x6d789af3, 0x742bd526, + 0xa10e6521, 0xc6d6057a, 0x1916901f, 0xed40bdb1, 0x95bb5ea7, 0x6fbd654a, + 0x0e2afc67, 0xfe369ce5, 0xb081a4ea, 0x04e3b7ee, 0x58294e33, 0x19ed7f1e, + 0xc842c51d, 0x50719eab, 0x7a7f430e, 0x1a50c394, 0x32039db3, 0x1e33ff01, + 0xb80c92ec, 0x8cc1a31e, 0x9f919af8, 0xc0125f69, 0x0ad1e267, 0xf68fee1d, + 0xa874f7d1, 0x9650f5af, 0xa2d7d404, 0x57de1ebc, 0x1533db5e, 0xd68ebd79, + 0x761fe8ab, 0xcfa235e8, 0x8132ccbb, 0x92647cca, 0x77ef2bdb, 0x3ee00f22, + 0x1ff7a8be, 0xb2d3bf84, 0xd099d9dd, 0x2b11674f, 0x67e49e7f, 0xd34cd267, + 0x61fcdcff, 0xefb80d9f, 0x8e270eb0, 0xaedf233b, 0xe5fd0ad9, 0xf383acf7, + 0x91d68df3, 0x83ffb726, 0xbf62d6c8, 0xa130987f, 0xb5fd09d3, 0x8d9d903f, + 0x7719417a, 0xf08ea64a, 0xdfddccc2, 0xbad7d830, 0xc8ec23d7, 0x5681d3f7, + 0x4d7eee10, 0x4c9fdfef, 0x871099cf, 0x80bf7ea5, 0x9dd91ffc, 0xe4a77a8e, + 0xa436b08d, 0xc237f6e3, 0x1f1fd424, 0xe0a7bae6, 0x31bc967e, 0x7a0054b4, + 0x4bd11e77, 0xe71fec8c, 0xdfde7c54, 0xbf246f7c, 0xe14ce982, 0xe723774f, + 0x4e992a97, 0xe7fcc917, 0x6be8f996, 0xf0f8958f, 0xd26107eb, 0x0f458eb0, + 0xa30e230a, 0x393760bd, 0x7cbdecd2, 0xd0d45d39, 0x1adfa77a, 0xa6806fed, + 0x55a2d735, 0x2d7b587c, 0x58efe659, 0xdbf0ae7a, 0xf44f9922, 0x2d517db2, + 0xb762b5d3, 0x38b8fc28, 0xd23f7ddb, 0xe006f4cd, 0xbdcf187b, 0xf907213e, + 0x746e97a9, 0xa02fa466, 0x0092db1b, 0xaf6869fe, 0xe8a76860, 0x37445ce3, + 0xda0650d5, 0xec7b8b29, 0x0b24f314, 0x86c67fcc, 0xd656cd64, 0x81fdef5b, + 0xc9935ff4, 0x6322d8f5, 0xb5da1a5b, 0x63984f5a, 0x4aebcc3d, 0xe2127d9c, + 0xc70b7ea7, 0x55d6bd63, 0xfd467682, 0x3b01c12e, 0xca07f644, 0x1e53bca5, + 0xae803b9d, 0x648dae2b, 0xecc7c076, 0xae54a96b, 0x19fee91c, 0xdaeaa1e2, + 0x46bf795c, 0xf9ecc952, 0x6acf9c1a, 0x4033d703, 0xe5bf7cf1, 0x8cf55df9, + 0x779da2b6, 0xd52d5df5, 0xec902a7f, 0xdf4eb967, 0xd6979c5e, 0x83ec77af, + 0x65aa7d79, 0xd7ec333e, 0xf322cddd, 0x50d5bf41, 0x43cca1ba, 0xf4ed0485, + 0x76fe881f, 0x9ccd176c, 0x578859d1, 0x5e806f58, 0xa67428bd, 0x2fea18ff, + 0xa25a6f4d, 0xf19d4149, 0xc3ea3c6e, 0x4c8bcf4b, 0xacf7e784, 0x6282d37a, + 0x97dc56a6, 0xd5fa8664, 0x0b5d3f82, 0x3899f082, 0xefa421f7, 0xfcb7e6cf, + 0x9dda1f29, 0xd2217a6f, 0x5b9fa01d, 0xec34b6a4, 0xe9f005a7, 0x6cb7b983, + 0xdcfccb13, 0x399889fe, 0x15ce97a2, 0xf7a60eba, 0x0852d7e5, 0xf47b5f4f, + 0x06be8fa4, 0xfa0165fa, 0x8a3fd148, 0x90f457bc, 0x12b5df42, 0xc6b56397, + 0x392fbf28, 0x74ccff50, 0x65fd2115, 0x16348e08, 0x3ff67fa8, 0x70fc8054, + 0xc0d1ce39, 0xc287f57a, 0x6d7b2f0f, 0xfd5ebc80, 0x2283f0a4, 0xaf3915d7, + 0xbfa2bfd0, 0x5ff37f8a, 0xfe05fc2f, 0xfdcb297c, 0x54c1d211, 0xa9b1eb89, + 0x68e88992, 0x094cdc62, 0xe5e6e7e9, 0x9e5919e9, 0xd3c9519e, 0x83e8fd95, + 0xdf7d3233, 0x41fc3f2c, 0x2f760f6e, 0xef2893d9, 0xcb4bfb03, 0xfb8abe2e, + 0xae4c8ffe, 0xe6a7ff6f, 0xf81e9fdd, 0x6ffccf47, 0xb85c0f4e, 0xcc603d49, + 0x60bb51d2, 0x3fa0cfb9, 0x5f97fb94, 0xbd47e61b, 0x3d0331f0, 0x48f0fa81, + 0xaca0fd84, 0x846f4817, 0x4fbff947, 0xbdcbec2f, 0x1b9598db, 0xb2982f52, + 0x417a1bfe, 0x6f852fa1, 0xf8513e14, 0x148f9822, 0x53f698be, 0x9f711bf0, + 0xd7643100, 0x71a7be49, 0x88f6b51d, 0x1ecfe44c, 0x40b0ee7b, 0x5f47d6fc, + 0xcbd3fcc8, 0xa1fd6a2f, 0x2fc287f0, 0xcad4ff0a, 0xe658b1fc, 0x8e2f850f, + 0x148f2d89, 0xb2bb7bc0, 0x1f11e3dc, 0x3cd49f0a, 0xfa27ac1f, 0x74862ba5, + 0xc3ce38b5, 0xa16aae90, 0x7d2ba40c, 0x9250fc3f, 0x43f4c3f5, 0xd1cdd666, + 0x7dffdcd3, 0x0fdb9a7a, 0xeffbcd3d, 0x7b5f53d0, 0x7639cff6, 0x39d7cf98, + 0x7b936f20, 0x3bda6de9, 0x2911db8c, 0x7f002fdc, 0xa1dde693, 0xa071441b, + 0x0799d769, 0x05d8a8f1, 0x83b8e58b, 0xd9cda742, 0xfe7007ee, 0x5fa3feca, + 0xe4e6eab0, 0x3eb3ed1e, 0x7e8753ae, 0x032862ca, 0xecfe81ed, 0xdc0fdf60, + 0xb93795e7, 0xfeb3dbcf, 0xedc7edc7, 0xc7eda159, 0xfb3bff87, 0xc984bd3a, + 0x2a3bbef1, 0x3fb0859c, 0x5661973f, 0x9c788151, 0xcfd4af9b, 0x454ce5dd, + 0xbc78c0f9, 0xfc7b8e50, 0xdf619441, 0xd0a5d3bc, 0x3d23da7e, 0x9fac3ef5, + 0x13d51858, 0x6f581127, 0x9f9ee7fb, 0xed1b7a73, 0x93c71347, 0x8d724bbb, + 0x00738008, 0xf9c00536, 0xde6ef041, 0x62ea523e, 0xfc17b266, 0x46e91cf4, + 0xecfbe2c8, 0x601fb00a, 0xa35fe3f8, 0x0c0b30be, 0x71751ce3, 0x1afcdefb, + 0xc0ab5ae5, 0xc1efdfd0, 0x60577303, 0x11e5761c, 0x4fab8641, 0x9846c13b, + 0xa7c3987f, 0xf2ed96b2, 0x16bf7249, 0x4fd1878a, 0x453822db, 0x5f26afe8, + 0xee490ff0, 0x5953ef8b, 0x3f84fd6a, 0xd33efd49, 0xf7b0fdc5, 0xfde91f91, + 0x9b7ef421, 0x3f8c07fe, 0xfd3990af, 0x2fd1fc21, 0x39a576e5, 0xffeb2151, + 0xf1f2259e, 0x8d01f8e5, 0xb7668f0f, 0xb83d7f70, 0xbf3277fd, 0x32346a74, + 0x42ec373e, 0x14ea76fc, 0x42ec377c, 0x98c89bba, 0xe3069e2a, 0xdd961c13, + 0xf128d150, 0xf0833ae5, 0xfdeb7df5, 0x7baf87a8, 0xda0be5f1, 0xe0f7fd2f, + 0xfbc42bbb, 0x6dfbf576, 0x175fb7df, 0xd32fbcfa, 0x8e8532ed, 0x8f7a2a9d, + 0x9f445c92, 0x19827151, 0x5d2b69e3, 0x6fd0db61, 0x87cfe5e8, 0x953b3f88, + 0xfc3e82f3, 0x528af3f7, 0x7249d923, 0x90bbedfb, 0x9e9a5d7f, 0x7b1f9cf6, + 0x33399ae8, 0x0214af00, 0x5e53f784, 0x1be5da68, 0xf541744e, 0xf3014b04, + 0x96c7e60e, 0x8830b820, 0x23fe657f, 0x00fa81f9, 0xf28694f0, 0xce8cee2d, + 0xc527401e, 0x974f1cd9, 0xf28e5604, 0xdb98b3b4, 0x78439d93, 0xdb9b28b9, + 0x39b3538f, 0xcb92ce5d, 0x3c00f0ce, 0xa7e8aa24, 0x8096fd0d, 0x2a9e1375, + 0x3f7594e2, 0xac1b7157, 0xd78633ab, 0xb33f6657, 0x0bd857cb, 0x5777f707, + 0x181573f6, 0xffededbf, 0x8ed1a7b7, 0xb6f190a8, 0xb4e5bb28, 0xb3ef28cf, + 0xf90cf485, 0x3e1f4061, 0x48b50794, 0xfa5f421f, 0x0fbb25b8, 0xde82fb3f, + 0xe7bf6a77, 0x1f76477d, 0xbd0674fa, 0x3f71b4cf, 0xdf797de4, 0xd7da0b6e, + 0x2d7da0b2, 0x152b820d, 0xbf92afd8, 0xd45e5c8a, 0x25a37dba, 0x209be30e, + 0x3d205967, 0x767241bf, 0xdfa15985, 0xaf48d3b6, 0x4edcf4bd, 0x22d59e78, + 0xe8ef9bef, 0x33c3942e, 0xf4170e51, 0x0e51b3c2, 0x02ac7c11, 0xf57ac7cf, + 0x9faa71d5, 0x7fb4a8d7, 0xfcd7f493, 0x6f7f4a0d, 0x23ecac11, 0xf49efdf3, + 0x772c855d, 0x34e3af98, 0xc23f2fd6, 0x0bc5ffdf, 0x2f7f4e27, 0xe105343f, + 0xec107765, 0xe8ff6a0b, 0x86dbf40d, 0x0c1ff7a0, 0x0416dfaa, 0x8dc10737, + 0xaaabf7ea, 0x2ac3e205, 0x88dc07a0, 0xa60cbe60, 0x3dd9838f, 0x3e8f4e76, + 0xdf648c17, 0x5a6af8a9, 0xfb7f8703, 0x1a2a9fc2, 0xf670018d, 0xe91f0aa9, + 0xe80d1877, 0x0ff8cb52, 0x044fae64, 0x23f6d07a, 0xe1f4f737, 0x193d790b, + 0xd79efac1, 0x99fe3bff, 0x2a47e740, 0xa898e4bb, 0x6545db86, 0xaf4e17de, + 0xb39c0636, 0xa055bfb2, 0x79ffdd5f, 0x3c0ab9ce, 0x8bb1e9cf, 0x9c2b677c, + 0xda54eb01, 0xbaf6fa4f, 0x99bde388, 0x00e2b67d, 0xcb15179e, 0xbc319ce7, + 0xa2297d04, 0xe393aebe, 0x135e9338, 0x2b2fa85d, 0xead2dbc3, 0xd620ed03, + 0x6ceb8e92, 0xfda4407f, 0xfec035f1, 0x98aa9e00, 0xf67a875d, 0x31d4e66e, + 0xa3dae570, 0x013ed6a2, 0x407b1def, 0xfa7a8b5c, 0x16b1b5e3, 0x735287f4, + 0x2c717fb8, 0x3165b06a, 0x0b11edc0, 0x6fb6de49, 0x51e5489e, 0xdba9b9d1, + 0xecf9d8cc, 0x61c6152b, 0x78451f58, 0x52e17aea, 0xf7a03ac5, 0x9a76d973, + 0x6cc63b87, 0x7b7b4569, 0x0fce96ab, 0x3c506241, 0xfa67eaa9, 0xabb7f44c, + 0xe74addd6, 0x317e8b63, 0xb4025273, 0x4b51b45b, 0x1a5d26e7, 0xcfce1273, + 0x0ea275bd, 0xc837abeb, 0x95326fa5, 0xabf77c6f, 0xdf684886, 0xec7047bd, + 0xaee3f687, 0x1233bcb6, 0x298da5e0, 0xd7a2dc0e, 0x199869af, 0x3cdb39c6, + 0x5d022fd4, 0xbcf30b9e, 0x67b78335, 0x37e97ed8, 0x723393f6, 0x5e68bdb0, + 0xcf09bb8f, 0xb0be7ed1, 0xe02fdc45, 0xe14d22bc, 0xc2e92c02, 0x3ae28cb7, + 0xfdea3617, 0x6b3ba718, 0x8cd5df74, 0xd16b34e3, 0x041767d2, 0x7800a47b, + 0xf9b30e10, 0xae7c04b6, 0x0d97f797, 0xaf3e02a8, 0x0fd0f4d2, 0xd12593e9, + 0xd872161c, 0x8eb083fc, 0x5286bb0b, 0x1cfeeb1c, 0xed0726a7, 0xff305cf2, + 0x5cbe71e2, 0x1df1bd6f, 0xddfc9f3f, 0x482c8b17, 0xce1ca65f, 0x5b5faf4f, + 0x60145964, 0x24b92d57, 0xa1bc1d11, 0xf9c6afb3, 0x483e11be, 0xe81b3f40, + 0xe7e31620, 0x02dfb2d5, 0x85f6bcf4, 0x27d5f610, 0x57ed22d9, 0x0be34ffb, + 0xe97b7f71, 0x482fea3a, 0x006fe4a7, 0xe238749c, 0xe773d431, 0x39d96bf5, + 0x6307c664, 0x8ecb0e29, 0xb49e1185, 0xc3f9874f, 0xea8e3192, 0x31ef849c, + 0x2cfa4b5b, 0xca1f0053, 0x33eaffed, 0x42bffb51, 0xfefbf47b, 0x5337fbea, + 0xd286b9e0, 0xc9a4697e, 0x27c5c687, 0xfb849326, 0xbde4b1f1, 0xbf9e1f70, + 0x1e92d1ee, 0xfe27b258, 0x3f946ec1, 0x5f183740, 0x4d575e0b, 0x31c7968e, + 0x5f4be3fa, 0x9552fce2, 0xff3892bf, 0xff32f8fb, 0x07f9c0f0, 0xe5f3fd8c, + 0x4f973352, 0x5d68f693, 0x734b4fc8, 0x779e124d, 0xf379ef16, 0xd2fdd220, + 0x7a596155, 0x3dd2f898, 0x2eafda7a, 0x8667c993, 0x49a4777a, 0x9272868a, + 0xe4f7bfbc, 0x1129fe70, 0xa2c86499, 0x5dc60372, 0x8bc47395, 0x31d91f6b, + 0x8cf9c61a, 0x068ee7f9, 0x72715dfc, 0x5872bd3a, 0xf063f8a4, 0x89ed62b9, + 0xec457417, 0xec57389f, 0x86b13ce7, 0xe8fc9175, 0xf8315cef, 0x4e61713c, + 0x36a279f0, 0x972bcf1d, 0x2589e7ca, 0xff9a05bb, 0x5fa2b5d2, 0x892ff30f, + 0xf3e3f1e5, 0xa183a05e, 0x199f7eb4, 0x728fa5e0, 0x0994b3fd, 0x39fc037e, + 0x8a2af779, 0xcb287e67, 0xb9812a9b, 0x85cfce90, 0xdfd09239, 0x8c27b25f, + 0xef74bcf0, 0x05da7f3d, 0x9bad75ef, 0x5fe8171e, 0xe0fa41af, 0x98866678, + 0x593e7ede, 0xe42493f7, 0x825f9283, 0x5deb0c9f, 0xad9ecd1a, 0x4b7dc648, + 0x4f73c248, 0xf5d2dda5, 0x76f3a40f, 0xbac367e0, 0xb488b6ab, 0x9ea2f60e, + 0xbcf021f4, 0x8cb5e48d, 0x270deacf, 0xcfae3a74, 0xb64f2d98, 0xcf28edb3, + 0xf08a75b7, 0x17a859fe, 0x5f3f848d, 0x7cdc4057, 0x4095f621, 0xeb8dc4f2, + 0x0b08d4ab, 0xdd3f5167, 0x7f6fe43a, 0x776fb70e, 0x53f40962, 0x8bb8e495, + 0xe90fd1e2, 0x7993eb1d, 0x0f32a23f, 0x356af3f0, 0x7ce84b9d, 0xc53d25f3, + 0x8436ea57, 0x7922c339, 0xd0f3c65e, 0x24c49d6f, 0xcbf60c5d, 0xe76359d7, + 0x9f9e03f2, 0xc6bcf092, 0x6d63e5c4, 0xc8dbe034, 0xfd034709, 0x52bfc65f, + 0x23097f78, 0x19efdf7b, 0x1fade85f, 0x15f11236, 0xe71cb73b, 0xfc488cf1, + 0x2878c80b, 0x67bced1f, 0xaff46cc4, 0x9b1cb6ab, 0xc576f284, 0x7c669973, + 0x3fd9eab5, 0x2158be92, 0xda1773ef, 0x003fa8fb, 0x57ca0e7e, 0x8b71fe64, + 0x8af43e3c, 0xbf650f8c, 0x2ddafa95, 0x07af1e5a, 0xa4828eb9, 0xa99fdd76, + 0xa7535adf, 0xed6de505, 0x943cda8b, 0xfe7047cb, 0xbad17ed0, 0x80a78541, + 0xa369167e, 0x6a9fa8cc, 0x0875d37c, 0x040934d7, 0x9f17bef7, 0xf9f8f484, + 0x91239786, 0xb585ce4e, 0xea1ea1a5, 0xd8e6155e, 0xf3300b8f, 0x1be7dcf8, + 0x1c63f6d2, 0x69dcdaa7, 0xaac05d02, 0xa0c4a757, 0xdcd8febc, 0x8ffac3a6, + 0x0835925b, 0x42e6cd3b, 0x28d29d84, 0xf3973f82, 0xf487e85b, 0xacfdf023, + 0x6e98fa79, 0x25d78c08, 0x33d2f7af, 0x78c74c7f, 0x67526d4f, 0xd811ea3a, + 0x8881f4ef, 0xd204a7e7, 0x169f2bc3, 0x7b23619d, 0xee257bf7, 0x72d7f037, + 0x1e579f79, 0x48c7f97e, 0xbf712bf7, 0x0bd2fab3, 0x7a71edd0, 0x49befcfe, + 0x1c7fbf8c, 0x5bd142e9, 0x62d06f00, 0xe1c74ddc, 0xc01d3233, 0xdcfe52f3, + 0x66e49c37, 0x8a81fe6f, 0xdfdbfbde, 0x5bfde4ef, 0xf24f4eb4, 0xbd793bf5, + 0x8c5e5b5d, 0xf4bbfdc4, 0xf0b7b1cc, 0x79f6a55c, 0x10f6cad0, 0xa3e32f74, + 0x491fd70e, 0xa27b27f3, 0xd91bd70e, 0x3a1efebb, 0x8eadf997, 0xeb29f5f1, + 0xf5e493ad, 0xfbf2f52b, 0x617e15d7, 0x0f0ebe32, 0xf325fce5, 0xda2bf213, + 0xdcfaca65, 0x857dfc31, 0xb972d33e, 0x97291add, 0x4912dccc, 0xbfb03bf9, + 0x7e806728, 0x6e453a9c, 0xcf4b9340, 0xf603fcc1, 0x6e7f994b, 0x905ba72e, + 0x98e8ce6b, 0xd2ec7dde, 0xf2a165b0, 0x397292c3, 0xb46ccf1e, 0xfe02b526, + 0x8b3f073e, 0x5e800ff2, 0x14f180a5, 0x2bc651ba, 0xa9cccdf9, 0xbfe86eb8, + 0xc657fb0d, 0x2117d8fd, 0x331f3f61, 0xfcca1fce, 0x692cbe15, 0x33353058, + 0x325ddb12, 0x75c70ca5, 0x9b95f973, 0x9df7a66b, 0xfbc01f68, 0xe28156ce, + 0xbf6467d4, 0x97c6ccfe, 0xef0d1723, 0x796cf7a5, 0x38c3f8de, 0x153cf058, + 0x67a00bfa, 0xe6c9679a, 0x56115379, 0x974c1be6, 0xfa14de0a, 0x93c60f64, + 0xa74c12dd, 0xbe8a6344, 0xe7a7fb14, 0x9433c4ba, 0x79e7d39f, 0xddb27f70, + 0x33e30e73, 0x2d7e3728, 0x6c6e49fa, 0x0d4f1db0, 0x33f0e7d0, 0x7595ea06, + 0x8b9b26ab, 0x69f69cf0, 0x8da681c1, 0xb7e02fa2, 0x33d00a4d, 0x95dfde8a, + 0xea53f3cb, 0x71179ce2, 0xed3e6aff, 0xef69149c, 0x5dc737b5, 0x30a3136d, + 0xe798752e, 0x53d8f5b9, 0xfa271c5f, 0x9b9d65af, 0xdaaa7fd0, 0xa3e9c7f2, + 0xad7fce91, 0xaa9bf3a5, 0x6875138d, 0xf073dfc7, 0xc7443cee, 0x9214c6d9, + 0xe40f17e7, 0x987a1366, 0xe81732d9, 0x23c0fabf, 0xf3c3e773, 0x41d156ea, + 0x41fa1d72, 0x935aadbe, 0x73d4714d, 0x0bd35d61, 0x4fbf5ed0, 0x3ebda334, + 0x83ee60f6, 0x69ac7ed8, 0xc3ae3470, 0x60962079, 0x7a4514a7, 0x956fb141, + 0x2d06bffc, 0x9906f7df, 0x29efee8f, 0x34959d39, 0xf9e3a434, 0x903ef77b, + 0x2b1fa0cb, 0x3696f675, 0x2b35ef1c, 0xe07513f9, 0xe862d8fe, 0xafec9c1c, + 0x48663a65, 0x86e7a2c8, 0x427e7804, 0xf506b9db, 0xa63589c7, 0x013875cc, + 0x45bc9bf1, 0xe7e66edc, 0x7c7cb18b, 0x3cca6f05, 0x1af4cbd6, 0x7ef29fdc, + 0x280bfa07, 0x5ff9e547, 0xb9ebf0dc, 0x1e2effa8, 0x75c18b4a, 0x585af27f, + 0x9f4bda23, 0x545cb968, 0xee3b07fa, 0x05bda07c, 0x060a9b76, 0x03054d3b, + 0xdb579ddd, 0x7e69eb7d, 0xedaae68f, 0x95ee8534, 0xb960d17c, 0xa7d763d1, + 0xa53cb0fe, 0x2880bc2f, 0x9472d420, 0x697ef071, 0x602fb7c4, 0x2692e0fe, + 0xeb0f59bd, 0x8ff48f3c, 0x8a2f56e7, 0x41a73c7e, 0xe1f91c1b, 0x7ed98bfc, + 0x7c971bf4, 0x2d25e1c4, 0x280edf82, 0xb37dbe3d, 0x8317ed88, 0x0215691d, + 0xb747e4ec, 0xb83645cf, 0x4a6f70e2, 0x0e57f680, 0xa80a7cf1, 0xc7d90636, + 0xffd8256f, 0x4ac5dbef, 0xe218e1dc, 0xdbf856fd, 0x77881cc1, 0xbf8adf05, + 0x45d006f4, 0x7c40567e, 0xec8cbbdd, 0x6ebc2fe2, 0x670b2f2a, 0xf48b1a1e, + 0xec728a6c, 0xd77ed787, 0x103888fa, 0xe670fdf7, 0x16f7e837, 0xc8cca318, + 0xd77a5fc7, 0x17e561d2, 0xca950f5e, 0xb7712bbe, 0xe9db8771, 0xb35b2fbd, + 0xf7858c8f, 0x7146375e, 0xf9e4e6b1, 0x1bfbc123, 0xef72479c, 0x7c56d1aa, + 0xb3ebacae, 0x2b3ef8fb, 0xd0ecfef3, 0xaeb891dd, 0x8f63c7f6, 0x8dfdc18c, + 0xdda33288, 0x23ce54b7, 0xedccd0b9, 0x510d4fe7, 0xfb06dc4f, 0xd9eee9fc, + 0x74f20616, 0xb99cfb71, 0x6bc97cf8, 0x7eed1982, 0x23336bc7, 0x37f6ce31, + 0x8cd22ba9, 0x86d7bc25, 0x22fc91f3, 0x3282a7ca, 0x17db1b36, 0x9ecc49b4, + 0x44c3474c, 0x90be632f, 0x7f006dfc, 0x2e29cf0e, 0xc5384df2, 0x8b17e045, + 0x5f8b2279, 0x1e94f1e1, 0xebf656bf, 0x4eebcac6, 0xf8e18bcd, 0xe4979f92, + 0xec9fe7f3, 0xf606617e, 0xd680f177, 0xf2fef38c, 0x5ffa9680, 0x0698fe0e, + 0x21e9fbe6, 0x8c20dfee, 0x43c5f1fe, 0xde598fdc, 0xda98fdc2, 0x2ea75a55, + 0x965d2faa, 0xbf43b404, 0x71d99e11, 0x3a647bdc, 0xb975e854, 0x396faf93, + 0xef5c4be8, 0x9a37e88d, 0xbc426cb5, 0xd17cd0fd, 0x901dfa60, 0x3d1796a7, + 0xbd1fdb74, 0xfe4578c8, 0xe855ba47, 0x3f337962, 0xc9698faf, 0x53fa422c, + 0x2f9144e8, 0x819662be, 0xc741b97a, 0xc7cf3032, 0xa07709a7, 0xb469985c, + 0xcc5f516b, 0x452aeb8e, 0xe3cc6cf4, 0xd12c5df2, 0x97a83538, 0x3f24f41a, + 0x764fe582, 0x5f23b71e, 0x79625c05, 0xe7999e7b, 0xf90f3273, 0xfa094a27, + 0xf3ea106a, 0xff311199, 0xce268761, 0x94ee9297, 0xc733fe60, 0x7149acc6, + 0x2979b280, 0xe8094ef5, 0xcc76667c, 0x9e00438b, 0xebc2979a, 0x6ae4c547, + 0x2eb75e01, 0x8052ceed, 0xc739e697, 0x738c05e7, 0x1075a0f1, 0x179e0fae, + 0x9e1c01e5, 0xfac52ee6, 0xe4919d3a, 0x7ba165fb, 0xdee4dae4, 0x66bdeff6, + 0xf677f8fa, 0xcb4bb85e, 0x11c31c92, 0xba1fe656, 0x39cf287c, 0xf3c42f3d, + 0xca2a8045, 0xfefdf3d7, 0xf041da14, 0xbf601973, 0x6ee9976e, 0x86d8c191, + 0xb51ac074, 0x27d8f45f, 0x47303260, 0x3afb8494, 0xdba3a643, 0x7c76b6a5, + 0x60db187f, 0xd32060be, 0xd8f5f76b, 0x303ee5fe, 0xf4a0bb28, 0x5972f407, + 0xba05eb0b, 0xd73c8017, 0x80096b02, 0x73904ae4, 0xffdf91c2, 0xf06dfb03, + 0xda30aeb1, 0xca334a87, 0x35b98147, 0x8daca1d7, 0x71891c88, 0xa6cbe715, + 0x73ec2336, 0xc41133fd, 0x7628f71f, 0xe89f3b8f, 0xaf99b57d, 0x880bb987, + 0xf4c8d71e, 0x799789f8, 0x6f98b552, 0x094bf47d, 0x04b3f1e6, 0x87dc1af7, + 0x49bbcd1a, 0xe7e476f5, 0x3fb44886, 0x3a2b3d2e, 0x35f6836e, 0x0ecaddb2, + 0x4172cbc4, 0xf5009b6c, 0xf6c3c91d, 0xe6f23ea3, 0x45fefd71, 0x03d25b72, + 0xb9925728, 0xeeed049f, 0x5b2cbe42, 0xdb1e393f, 0xe6dcf17d, 0x6fb0c5d4, + 0x913f107a, 0xd029ceb0, 0x5bac3e67, 0xe748b00b, 0x07ea7ecd, 0xf0917dea, + 0x23f2537c, 0x990e9c49, 0xd95ef90b, 0x7def051f, 0x468603f6, 0x606356fb, + 0x875ff45a, 0xe466ddb1, 0x3e5f654f, 0x00de0031, 0xc83113df, 0x7faaf300, + 0xea5bc791, 0x5303d605, 0x7e8fa8fc, 0x57ec937c, 0x4a9f4760, 0xfbbeecfe, + 0xfe65f4e6, 0xf10e1d3e, 0xeee6f583, 0xe7729092, 0xbeb279d7, 0xd79964cc, + 0xfb4961b9, 0x336e54bb, 0x4bb4ac51, 0x83789eb8, 0x7ea2e903, 0x25e90a4f, + 0xfc9a7396, 0xdb1da566, 0xb2f44b1d, 0x7da45929, 0xa055a7b8, 0xade9ca3c, + 0xaa1d9903, 0xa58d6b6e, 0x025af232, 0xc4f8bf3d, 0x2e5c393b, 0xfe9a7df1, + 0xf298b5a4, 0x5a1c9e95, 0xf9e9f3cc, 0xba65ea3c, 0xc57cf053, 0xf92cf1c5, + 0xc42ced86, 0x96876938, 0xa764edf9, 0x0239faf0, 0xc74afde1, 0xc4f50939, + 0x8b02719c, 0xe70c5805, 0x69b7ae74, 0x7e043d98, 0x84fef2f5, 0x3d99c3d9, + 0x08688fc0, 0xef8fdc8b, 0x13b39f31, 0x727986fd, 0x188c88bb, 0x3f653b55, + 0x98e8cae7, 0x1b765c67, 0xe47363ae, 0x2fa40ea4, 0x6a806393, 0xd468bd5c, + 0xadcc1d22, 0x9cc7ef54, 0x5b586a39, 0x63c915f8, 0xb9faa16d, 0xcf86a9de, + 0x8c38fb2a, 0xc7dc0b0d, 0xd139fc00, 0xd4e2bf4e, 0xfb31fc73, 0xe78042ce, + 0xf30fe006, 0x4a24ae66, 0x61cdbf84, 0xb7805f1c, 0x51e748fd, 0x45bc6af9, + 0x8a78d53b, 0x23e3532d, 0xaf5ea5de, 0xaa887cb5, 0x8b7dc13e, 0xb2e07eaa, + 0xc83c152c, 0x3f6aa053, 0x0ab16d78, 0x554df64e, 0x9c694fb5, 0x9ad382a5, + 0x0fdaabe6, 0xaaa45e6d, 0xae5fe61f, 0x50f5bfaa, 0xd11e0abd, 0xfdaabf72, + 0xaaf5d6a8, 0xadb6ccfa, 0x8eecfaaa, 0x6e705587, 0xf6aa63e7, 0x57ed4fa3, + 0x7ae98fd5, 0xf63f554a, 0xf055e7d3, 0x5557eeb8, 0x3b5c27ed, 0xd88b82aa, + 0x25f6aa3b, 0xe0aa3f86, 0x537fe689, 0x3b6c9fb5, 0x629faaa7, 0x3f555cff, + 0x156be32d, 0x5ff1dd3c, 0x580ff6aa, 0x68d18edc, 0x105f89af, 0xe02c355f, + 0x63a5757c, 0x38f901b6, 0xfe9ab46b, 0xcafd6532, 0xc6125952, 0x858a2669, + 0xad9fc46d, 0xfbdb57e0, 0x73e92bea, 0x77e31397, 0x2f7e65ec, 0x8ed40a2d, + 0xb47e3014, 0x640e00d3, 0x665b1c2f, 0x2ef1c156, 0xb5bdaa9b, 0x4faaaedc, + 0xeaa86770, 0xa8732e07, 0x7c9e41e0, 0x6bc1fb55, 0xd9382a9d, 0x9f6aa657, + 0xc152e8d2, 0xaae54d69, 0xdd9b43f6, 0xfe61faaa, 0x5bfaaa65, 0xf054790f, + 0xaab59688, 0x7d5aa3f6, 0xb6ccfaaa, 0x767d5546, 0xce0a9347, 0xb5566ced, + 0xafca7d1f, 0x75d31faa, 0xf63f5548, 0x3c1516d3, 0xd555bbae, 0x36b5c27e, + 0x4ec45c15, 0x1897daa8, 0x13c153de, 0xed55a7cd, 0xa8cedb27, 0x2fd8a7ea, + 0xfb15eaaa, 0x57c65a64, 0xbdb2e7ea, 0x0ff1dd32, 0x62befbd5, 0x31f59e27, + 0xdd02f3df, 0x3d1a6a63, 0x902fec84, 0x22615ddb, 0x8a2e37da, 0xe260c51b, + 0x9465d020, 0x42ba204f, 0xe292a057, 0xafa4714f, 0x31d8b548, 0x3ef407bf, + 0xe49a3100, 0x2387b464, 0xc4aeed7a, 0x6f37d9eb, 0xc3c5ed77, 0x37f3a023, + 0x411fbb47, 0xf2de58fe, 0xbbb424dc, 0x4dbe61ef, 0xe2898f38, 0xe02ea8f0, + 0xea61938f, 0x4e528638, 0x025e0031, 0xd6113bc6, 0x3df59894, 0xc314fefe, + 0xa7bed417, 0x21be395f, 0x03eafac0, 0xfc087ffa, 0xb2ec0902, 0x0df02f26, + 0x7b0f8638, 0xea3f04cd, 0xc3bc11b5, 0xd9b2a76b, 0x63e5419b, 0xefd5075e, + 0xbc13e6f6, 0xd824ebd7, 0x72a32def, 0xcf45d7bf, 0x09cb780f, 0x65fc027e, + 0xff810f2c, 0xe053e58c, 0xd3fd6307, 0xfc2317e0, 0x6547d7ac, 0x9e91b78b, + 0x226def3f, 0x99b7b0f8, 0x7ebc97e0, 0x87bd5b2a, 0xdbd57ca8, 0xbc47f542, + 0xeebf04ad, 0xcdb8236d, 0x51f041db, 0xc7c1276f, 0x7e08a7bd, 0x6545dbcb, + 0x2a53f787, 0x5376f6df, 0x6bdebbfd, 0x97eef704, 0xb265deda, 0xa654b7fd, + 0xedc71603, 0x4b7c25be, 0x5c7267d9, 0x874ca977, 0x2b3062da, 0x20381e30, + 0xcbe63f7d, 0x649d22e6, 0xfbbc9d10, 0x60f3ec43, 0xe9294bff, 0xf5d239fe, + 0x67c7812a, 0xe72dbd14, 0x4f762825, 0xb7ee1ae5, 0x167b002e, 0x0a3e17cf, + 0x15e7f6e3, 0xed03368f, 0xdc214ab3, 0x572fe781, 0xbb237f3c, 0x3939e182, + 0x23c2fc90, 0x035b7dfa, 0x784ab6fc, 0x2fef035f, 0xf34c951c, 0x5a1d64a9, + 0x98957f3a, 0xfba18c53, 0x868c5fd0, 0x6907cbe7, 0x1b47e47c, 0x95e87df9, + 0xf197dd23, 0xe2cf15f9, 0xa5f3b0b7, 0x3b9d0766, 0xc5b7d74e, 0xc978c3cf, + 0x7de29109, 0x4ea3e1fd, 0xb7ef3fce, 0x898bf5fe, 0x7d976768, 0xff11ba27, + 0x72a6b527, 0xf2681f8c, 0x934f9c79, 0xdf9551af, 0xf90b748d, 0xe4ddfe50, + 0x28034bb9, 0x55f8fbfc, 0xdc9bdc4f, 0x8edf37eb, 0xc1d827ae, 0x4b5d9933, + 0xf9cc90f9, 0x75743266, 0x3c137307, 0xaca8f98f, 0xc70ee119, 0x9f982a7e, + 0x3e817760, 0x82bad429, 0xcf2f15e7, 0x8f9e5e2b, 0xe51f0e52, 0x72f3e38e, + 0x8e4ebcd2, 0xeb8e9c99, 0x2355e652, 0xc19fbbdf, 0xfce2f7ba, 0x57dafefe, + 0xbe948417, 0x40bff1f4, 0x2f0c4617, 0xe7863b42, 0x2bc00d27, 0x7dc37ef8, + 0x0a007bfc, 0x8062545d, 0x507bdf10, 0xbd01fba0, 0x81f40274, 0x375c557e, + 0x3a0423dd, 0x2e75c4c9, 0xbdd2231f, 0x7f1a93f9, 0xd1e740ba, 0x4718758b, + 0xf4071a58, 0x3a7fa431, 0x5bdf2958, 0x7d039e50, 0xbefec58d, 0x0674657c, + 0xf5eeabe2, 0x57c47631, 0x6bdf8683, 0x3a2dbdf6, 0x170bde78, 0x11d8e2e5, + 0x9264bf14, 0xa6f181c3, 0xf2d0fae9, 0x9f794ef5, 0x65b4da4e, 0x7d4fea7e, + 0x9f3b336e, 0xf3b39bfb, 0x7ea3bc79, 0x223527d5, 0xd1e4fbcc, 0xa5ff748b, + 0xfed7fccf, 0x01a947f4, 0x7ad75c74, 0x8233f286, 0x1e48fddb, 0x511ba157, + 0x33ef7267, 0x87abce06, 0xc3e7e78e, 0x068f7fb8, 0x3a214e3a, 0x93e780be, + 0xa8f6f433, 0x01765079, 0x74a0da4a, 0x7e4cd2ff, 0xa0e622dd, 0xa8b99ab2, + 0x8edb0a5c, 0x6df2eb74, 0x97be21d7, 0xbe7a16b3, 0x0b6eff32, 0x8d12f1d2, + 0x1adefc9b, 0xf3c5f0cc, 0x6a5dd662, 0xd1ddbc03, 0x1b4deeb8, 0xd3766fa0, + 0xaf1889f6, 0x7aafe59d, 0x0799cb13, 0xef980b84, 0x8b517c0a, 0x3c12eaf3, + 0xf8c0071b, 0xda2e9ff3, 0xcf9e1038, 0xb07ef910, 0x287ef877, 0xdd782372, + 0xf86b07c0, 0x2eb49cba, 0xc54cb231, 0x99eb9507, 0xcdeb8853, 0x8be1efbb, + 0x3eff15fc, 0xd497e510, 0x75eee74d, 0x7063ebaf, 0xae33979f, 0x12a705df, + 0x3af450df, 0xc15f3a23, 0xeed81dc2, 0x3fae9933, 0xae88c41b, 0xdd18133f, + 0x4dec57b3, 0x65b6e496, 0xe7eaf4a5, 0x23d3cd3a, 0xbfa04f11, 0x9f3d11b7, + 0x9994d96b, 0x9fdf728c, 0xf686f684, 0x21a3bd29, 0xd847a559, 0xb8de88f5, + 0x1e5a43d6, 0x979e0a67, 0x3fd6ff90, 0xebd0bed0, 0x3dcf0f98, 0x1e59af80, + 0x1d00f3f2, 0xa20355f1, 0xc563e316, 0xbf3f3b2e, 0x527ff755, 0xb7c76f9e, + 0x83eb8e3c, 0xcbbde0f5, 0x3d70e3be, 0x1def0fa5, 0x8586e487, 0xc9bf38d1, + 0x33d5a527, 0x2576331e, 0x7fbe3da2, 0x5c29fb80, 0x51cf12af, 0xe48ec4fc, + 0x5ee9524f, 0x4516c15b, 0xc4bcf31e, 0x9d0e5cf1, 0x087ddad4, 0xa64a2c9f, + 0x5f22bff8, 0xf1e7cf6f, 0x7895dbaf, 0xbc506157, 0xc2ee282b, 0xbfc7430a, + 0x71687318, 0x47d8c37e, 0xde283e0a, 0x3ec5c8a2, 0xf941b67a, 0xe29d843e, + 0x97f13d12, 0x2fe27b0f, 0xc9d75714, 0x4f319372, 0xbee02b86, 0x5c1cb589, + 0x609f9514, 0x3f2aa960, 0x0782acc1, 0xf6aa6c79, 0x55dad783, 0x0cbec9f5, + 0xa34a7d55, 0x35a70543, 0x0fdaabe5, 0xe0aa766d, 0x5532fe61, 0xb90f5bfb, + 0x9688f054, 0x51fb5572, 0x7d556ead, 0x5532db66, 0x4787767d, 0xae76e705, + 0x7d1fb555, 0x1faaa7ca, 0xaaa8d5d3, 0x9369fb1f, 0xddd71e0a, 0xe13f6aac, + 0x5f555f9a, 0xaaad7ec4, 0xa73c312f, 0xc7297f82, 0x5f9a2615, 0xd937bd51, + 0xf782aed6, 0xcbb8f386, 0xf509fb14, 0xfafef2fb, 0x1f89c22a, 0xa7bc65a6, + 0xffbf6faa, 0xc0959d96, 0x35fbfe2f, 0x28ee67e4, 0x9589fae3, 0x083a7317, + 0x3ba76de3, 0x4bc6ab4e, 0x9193bb12, 0x79a2ed8e, 0x6a75f200, 0x78a3ccfe, + 0x5cee91d6, 0x2ee28c55, 0x51fb6ca3, 0x3d716f2c, 0x336c8c57, 0xa3bdfcbc, + 0x7f748e58, 0xcc640c55, 0x8fa2cb1c, 0xc9e59961, 0x14e2b12c, 0x863cced7, + 0x556f9e65, 0x3059ca09, 0x0a5b3f07, 0xdf0ffef3, 0x25df742d, 0x826bbf12, + 0x49c92ff1, 0x413abb74, 0xbabe7c43, 0x7c7948c2, 0x0946b196, 0x5e9d959d, + 0x20e3d0cf, 0x588f2cd3, 0xb07c6036, 0xff79ec11, 0xc00fb050, 0x1772c7be, + 0x707eefd8, 0x7d82b682, 0xb036e58f, 0xe3f9f1ef, 0x6c23df60, 0x11ab2479, + 0xdefd5bdf, 0xd021b2e2, 0x1235e0ff, 0xb3610f7d, 0x28eab35d, 0x46b6c7cc, + 0xba057947, 0x30c347e4, 0xad5066cf, 0x174f27a6, 0x46abbd51, 0x0bdfc9ea, + 0x55b67683, 0x8cdc151a, 0xf1ac117f, 0x41877de1, 0x1c67b623, 0xbd1d0070, + 0x3b50b712, 0xd299d60c, 0x1a2fb159, 0x39cc31e0, 0x82c9f607, 0x27fd017b, + 0xc4ac1c17, 0xf860e47c, 0xd8d74295, 0x90371831, 0x9f21865a, 0x947e879a, + 0x52daf380, 0x634399fc, 0x57f671c6, 0xec75871e, 0xe7970f89, 0x48b2bfb9, + 0x9d7e99ba, 0xd3c4c713, 0xbca84f73, 0xb863a98d, 0xd02e4ffe, 0x66107928, + 0x4e564f94, 0xf60acc22, 0xdbc81451, 0x9ed6639d, 0x3241df41, 0x37ba04fb, + 0x21bbdf2d, 0x3c10a414, 0x4e4f3c21, 0xfcfc0019, 0x1cbb9c78, 0x337563d7, + 0xfe303676, 0xef0d4cb5, 0xab3cfd84, 0x768f9ded, 0xc127c6a1, 0x72bfb41a, + 0xce301c39, 0x5eb005ee, 0xd4ea7780, 0xcc50ce76, 0x57fa819b, 0x2e79c8c7, + 0xa076ccdf, 0xbcaaf67d, 0x19bcc79e, 0xe8b5e759, 0xceb239e7, 0x60345f83, + 0x83704799, 0xba56b57c, 0xa21a981c, 0x3b42febd, 0x0b619bde, 0x73ea0b59, + 0xc02ebe7c, 0xf72959ee, 0x122ebdab, 0x2e0db4de, 0xf8c04c47, 0x84f0515a, + 0x4fd04efa, 0x478448c6, 0x7aa3036d, 0x04fbb1ed, 0x80c03efc, 0x98b0bf4a, + 0x7808f1fa, 0xe36d62ee, 0xb65607cf, 0xff00d508, 0xf55d8c66, 0xcb818fbd, + 0x7801fe60, 0x013e49b2, 0x0f6c25f3, 0x83c404fa, 0xe072eccd, 0xbbb326b9, + 0xb6e6e754, 0xe75979b5, 0x2ede7163, 0x6861e607, 0xe6fc29a7, 0xa6b9e331, + 0x0fe39cf6, 0xdca1e798, 0xeedafdab, 0xb10b8a88, 0x77d4a50e, 0xfd91fbf1, + 0xdd2647d5, 0x393d21ef, 0x73c768df, 0x18565fd0, 0xa085f7cb, 0xfbc8dfb3, + 0xbbe7b9b2, 0x163e7c46, 0xd149e391, 0x399b5f57, 0xeb7228fd, 0x2b0e68de, + 0x283bdcfd, 0x797dfac7, 0x30e6d601, 0xef980ee6, 0xcf07184e, 0xaedff529, + 0xf4de2332, 0xc814de72, 0xfba79225, 0x9f9064f6, 0x7d3f4c18, 0x6f4400f8, + 0x65d21654, 0xe801bf97, 0x4740bf46, 0xfeb21bdf, 0xe50126cb, 0x44d600c8, + 0x41d64f09, 0xea121da5, 0xcc3dc973, 0xbe8ec215, 0xfb283f11, 0x7d25d8a9, + 0x67fecff7, 0x3bc01efa, 0x3ebe1f3c, 0xfdc56ed9, 0xfeb4e853, 0x604c7c44, + 0x31a9c59e, 0x59f3af9c, 0x5a7c8893, 0x2ca85ac0, 0x8e549d64, 0x3a54dd67, + 0xb2c25999, 0x2ca83998, 0x272a2e65, 0x65950f31, 0xa9ca89ac, 0xdbca85ac, + 0xe0952758, 0x62e951cf, 0x673bf266, 0xe5831d81, 0x72a2e61c, 0xf950f32e, + 0xe5df4c99, 0xf9e089ac, 0x56ca85ac, 0x50fb7fe0, 0xa818838c, 0x1cf2023c, + 0x9e41d7cb, 0xf206d963, 0x38c7aedc, 0xc7950648, 0xdf2a0ebd, 0xd953e6f2, + 0xbb5275e1, 0x5465bdb7, 0x5175ebbe, 0x4e5bd279, 0x4dd7a765, 0x2ef7deed, + 0xaf03f2a3, 0x793fca87, 0xca7952d7, 0x2ff2a3eb, 0x872a46de, 0x1d3e78ea, + 0xc4cae8cb, 0x73a4f3bc, 0xf41da73a, 0x1f2c9e51, 0xbf35398f, 0xfb839618, + 0x13b3a1a8, 0x02bde96b, 0x4335a3d2, 0xb714f743, 0x770bd466, 0x24f9b943, + 0x56f563b7, 0xd6c9d913, 0xe602d5e6, 0x5d0ab5af, 0xadec0462, 0x605840b1, + 0x74513d00, 0x70886d84, 0x63dbac20, 0xa7dc3a00, 0x83ef74f5, 0xe2abfd7a, + 0xece80302, 0x9ffbd302, 0xaa61c53f, 0x359c731f, 0x298e0198, 0x5783db08, + 0x281e70c9, 0x8d5f1384, 0x26f78058, 0x34ec0af2, 0xc19327cf, 0x27fca6b1, + 0x9919f923, 0xf13367cd, 0x5acc7b3c, 0xc5fa1663, 0x3e28ed01, 0xe0bb5fdd, + 0xddbde57a, 0x880d2cab, 0xc017cd87, 0x4947813d, 0x18995d29, 0x57ec0b87, + 0x33e37373, 0x0fc67bf1, 0x4f7c276c, 0xe71e3f7f, 0xfb90521c, 0x83ce9eff, + 0xfd7b5be9, 0x9e1a73dc, 0x7a831908, 0x973440fd, 0xc283dd3b, 0x40ef2f29, + 0x496f0c8c, 0x466d75a5, 0x79b5d618, 0xe3b210eb, 0xeab9840f, 0xcffd604f, + 0x73979434, 0x75bddc20, 0x14a9c118, 0xe31cd99f, 0x94bd40c9, 0xe3f5c114, + 0xc3fbc48e, 0xce35ef02, 0xe97ee028, 0x9dabc2ce, 0x6a9fd0fb, 0xb3cc30d4, + 0x68b8dfdb, 0xf3f4064b, 0xe5126dab, 0xab8d44f5, 0xf50692de, 0xf268b643, + 0xe1e65944, 0xadb57e3c, 0x33cc09fa, 0x4b7891de, 0x9bf43a4c, 0xa4cfcb22, + 0xfc4caed8, 0x5d0ed64e, 0x3bd07ce8, 0x86a97e64, 0xfe82ce6e, 0x14e3924d, + 0x0f3cb4fb, 0xa6b76953, 0x47dbcb80, 0x3b52f1c6, 0xf4efc781, 0x98fdc383, + 0x98345e77, 0x1b2c7bc7, 0xb1ef140c, 0x7be7fe24, 0xb2dea193, 0x9340e35b, + 0xacd6b256, 0xf589fbc3, 0xf905ac15, 0xdfc09f71, 0x76e20df7, 0x432c1832, + 0x3df80666, 0xa5646f60, 0x6d49c406, 0xe3013ee5, 0x6b834518, 0x5b2b8c04, + 0x180b9712, 0xbb94b0ff, 0xfd09b705, 0xffd50f24, 0x557b9c76, 0x56c7ac01, + 0xceabef09, 0xb809dd51, 0x3ce4fbaf, 0x592bd063, 0x1dede381, 0x51b0f1c7, + 0x1b7df462, 0xcd1d06df, 0xf75f182b, 0x1fbe2f8f, 0x31f657fb, 0x58dc7eb8, + 0xd6078fbe, 0x07c810c3, 0xe0fc7863, 0x6401c1e4, 0x11d8cf2f, 0xf23f44ee, + 0x4a5bf6e4, 0xc0b87e09, 0xc9eff689, 0x3df40583, 0x4f0f19bf, 0x052776a5, + 0x817181d6, 0xa7cf0f19, 0xa52683ef, 0x497efa30, 0xd11d19f7, 0x97878ce3, + 0x5fdfefcb, 0x1af9f58a, 0x9fd06fdf, 0x2a786fce, 0x0505e302, 0x6207e7a6, + 0xb5d35279, 0x73d3bf1a, 0x2bfd99bb, 0x96d76baa, 0xc1959fb8, 0x0fb7331f, + 0xc63c62d1, 0x43f3c05f, 0x96a73367, 0xc8b81fe7, 0xd43c2dbf, 0xccaf0c79, + 0x2ee96f8e, 0x671fb4c1, 0x9638f9ab, 0x340e6dc5, 0x876959a3, 0x939638eb, + 0x68a53d3a, 0x6a9d94de, 0x54658e3a, 0xfc8fdb91, 0xccbfe4fd, 0x8049fe7d, + 0xb564ff07, 0xad99ee99, 0x9fb29aef, 0xba5a95e2, 0xdf2bb597, 0x012224d3, + 0x50c29a1b, 0xd62c243e, 0xf45977d0, 0x08d14dc9, 0x52a717eb, 0xe881fc1e, + 0xeeb465a6, 0x788670b4, 0x10f41b7c, 0x732ec5d2, 0x13f21853, 0xc3ed25f0, + 0xea7d32b3, 0x68e63da3, 0x679f2e7c, 0xbf93b4f4, 0xe6587863, 0x53747d33, + 0xc4e340b4, 0xcca7f7c9, 0x956ece74, 0xa04ef9f5, 0x2c13b417, 0x8c3ef726, + 0x7272ed6f, 0x3919f7fe, 0x4df3605d, 0x77c9ffa0, 0x9ada1402, 0x3f70d33c, + 0x3a92952c, 0x20d417cf, 0x17be8bf6, 0x8741bdc5, 0x43b0dda0, 0x19c830e0, + 0x461c3dfe, 0xcd98c577, 0x7c87d968, 0xe2dfccac, 0xeb87f756, 0x7dec6598, + 0xd3bba14f, 0x943ffaf2, 0xde6e5dcb, 0xbfdf329f, 0x3ce5d814, 0x58d76673, + 0xf3e39ec8, 0x02687581, 0x8ed013e6, 0x6f33d7d6, 0xfbf1b0e6, 0xdf816ea1, + 0x2976651b, 0x12d5fd70, 0x8cdbd9e5, 0x75fe512f, 0x4f7f9ea4, 0x63ede7f3, + 0x41a7c40c, 0x40b2f8eb, 0x6048fb8e, 0xa9bb4367, 0xf3016e95, 0x9f801afc, + 0xc8b29fd1, 0x225125b0, 0x2e316d7d, 0xeb01b412, 0x935624b5, 0xee5a9e9e, + 0x96f7875e, 0xe047e6a7, 0x34d90817, 0xccc1b2d6, 0x6a78fbf9, 0x299ea51e, + 0xa6a3ca3f, 0x03c340f5, 0x17efc5d5, 0x58839fc1, 0xd430d15b, 0x42593f9f, + 0xee3b2df9, 0x10f94a9f, 0xb5f63303, 0x7d7788a3, 0x2d9df7c5, 0xd4adf1e0, + 0xc0f9d2dd, 0x96ae2475, 0x03b5f954, 0xd030d46a, 0xe8560a83, 0x8b2c2aca, + 0x26a3b8c6, 0x74d4f862, 0x1a919b94, 0xe6401dfe, 0xfa98e613, 0x743e95ca, + 0xd95fe325, 0xa9b1f89f, 0x518b4f84, 0xbac0fb43, 0x4c3b861d, 0x7d95caf2, + 0x604873c2, 0x6ef7cc73, 0x78fd1528, 0xed86d1ff, 0x66ee0ed1, 0xc1afb8f1, + 0x6b4fb4fb, 0x728e9a9f, 0x4cc6bb7a, 0x78414e79, 0x21f33d05, 0xe3db29f9, + 0x4b9e1ea8, 0x427b8a06, 0xc5baca3f, 0x3f7ab050, 0x0f7ed46e, 0x9e999ceb, + 0xc0f9f7dc, 0x875339c4, 0x7a06fcc1, 0x707fed18, 0xd507d0fd, 0x707e4afb, + 0xcc79fa0e, 0xec4ff6df, 0x03c4d4e7, 0x050fe4a5, 0x7742abed, 0xf5a1b149, + 0x3963dbc2, 0x3845265f, 0xbb232fde, 0xc13b2242, 0x0f8a4835, 0x8fa693f4, + 0x84ecfee5, 0x87a48d97, 0xdd0339d8, 0x75b4732f, 0x59d714fe, 0x7943557c, + 0x7bbe6fba, 0x50a991f4, 0x0fd7fc4e, 0x7681dfea, 0x5235bf13, 0xacabfdde, + 0x82060a6b, 0xf25a1d7c, 0x7a5dd71b, 0x440309a2, 0xee8c950d, 0xd4e3280b, + 0x4efce3c8, 0x7c9177eb, 0xba31261d, 0x0211807f, 0xbc785f65, 0x2d5ff280, + 0x2ab98ebc, 0xb48fc89b, 0x98670ea6, 0x5ac0d3a7, 0xf8b924ee, 0xcfbe8e85, + 0xaedcab39, 0xcff5822d, 0xab6bb4aa, 0x9e259f90, 0xdcbb3fa7, 0x5767cf41, + 0x0373f83a, 0xdca73e7f, 0x54e7cf49, 0x2373f93a, 0xdc7c073c, 0xf4efee51, + 0x1877bf42, 0x3c1aec63, 0xf174a80f, 0xaa7a6bfa, 0x01fc177f, 0x0f0bebcc, + 0x6fbc93f3, 0xcfc354fa, 0x89c26a8b, 0xaca6f5ae, 0x10defc0e, 0x7dd0d2ab, + 0x8920fd05, 0x973709ee, 0xfdf8fcbb, 0x5358c7b9, 0x55efae02, 0xf919bd77, + 0xc944d5ef, 0x157beb8c, 0x33cc5bdc, 0x94932df2, 0xafb2617c, 0xa44ead5e, + 0x727d9cf3, 0xd8b7defc, 0xb066f140, 0xccde2875, 0xed900f16, 0x1fa7ae18, + 0xdf47145f, 0x3bd48a65, 0xfc40cede, 0xfdfbe41e, 0x7f7e76f3, 0x086072d6, + 0x2c2707e5, 0x8657a00b, 0x88a8b7fc, 0x325615ee, 0x5b7f8e33, 0xda2a6ba5, + 0x99bb0d91, 0xf030c503, 0xfb0fbd37, 0x766ceb49, 0x8b1a5fbf, 0x21c39370, + 0xc9500672, 0xfaf70685, 0x4f5c7613, 0xaff2868d, 0xfbf2dd9b, 0xc407c535, + 0xbe7e5ee4, 0x4543e645, 0x3795f47e, 0xc7ec0e8e, 0xc0ec5156, 0xe02de0f8, + 0xff3c6397, 0xf0839d71, 0x512f9bec, 0x6e2de41e, 0xd91ccda9, 0x7289dfcb, + 0x1f20b7bf, 0xd487bf62, 0x80f436fc, 0xcb768f9a, 0x6b38fa7c, 0xdfb16293, + 0xa6fd4666, 0xf7414b36, 0xd4053a18, 0xfafcc147, 0x894138e4, 0xd0f0a98f, + 0xa135cf07, 0xaebbd9d7, 0xb4e91396, 0x175f0d2e, 0xd243f7e3, 0x409fcf8d, + 0x2e5e9879, 0x6549bc91, 0xfae3ef4d, 0x60480f53, 0xb97ec2d0, 0xbdf1c2b3, + 0x4869b6db, 0x9d674dac, 0xb46e1724, 0x11de256e, 0xf5e0cebc, 0xd22b1f4d, + 0xc1ec7afa, 0x07b2068d, 0x8407dc77, 0x56f64511, 0x7e15c638, 0x73b8ae3b, + 0x50fbb42c, 0xd7b547b6, 0x1a4f2e45, 0x5aa7448c, 0x811983eb, 0x8b1787f1, + 0x4b1c3f8a, 0x956762ed, 0xc845b8f1, 0x277f6fef, 0x4ba637f7, 0xf6376f9d, + 0xfca0f0d3, 0xddbe7530, 0x82036b84, 0x8252c3f2, 0x556ec3f2, 0x67344fd5, + 0x8d87e507, 0x2b0fca0d, 0x32d3c151, 0x87e505a6, 0xb7c156cd, 0x6aa9dfe7, + 0xb779d33f, 0xd9767eaa, 0x1dfd550a, 0xf0557bae, 0x5407f2bc, 0x0ddc2bed, + 0x973bfaaa, 0x1f5554fd, 0xa5293fec, 0xddcb90a1, 0x7bcf369d, 0xed96c014, + 0xbefa10a9, 0x23df703b, 0xefc85823, 0xe4294f97, 0xf297e57a, 0xb3e639bd, + 0xcc71e2a9, 0xebc55369, 0x0c0a0ada, 0x5d8fd05d, 0xf233f8e7, 0xf0e82633, + 0xea9b6b73, 0x3d7dad9c, 0xeafe83b4, 0xa8ac434d, 0xebfe30ef, 0xe0dee506, + 0x8579d0d7, 0x80b571b5, 0x56dbadcf, 0x35cab8f3, 0x7af3c51d, 0xa8cac1e6, + 0x73e5afbf, 0xbb9e652d, 0x63d238e5, 0x85424718, 0xefc29ce4, 0x76f1840f, + 0xb894590f, 0x4dfa9ba3, 0x28f9d7c8, 0x23daaf0f, 0xc1b81c60, 0x10dee8cd, + 0xfe3883da, 0xfa0ee5d7, 0x717f7ade, 0x1b5e1dc6, 0xb678c273, 0x3a75bed5, + 0x614e5b58, 0xf05ddee2, 0xc8c3cdbe, 0x26167018, 0x4c78c5ed, 0xe89da169, + 0x78e2413a, 0xabe57c7e, 0xf1809f17, 0xd0b02c76, 0xfae0b8bd, 0xbe477581, + 0xea7beb7a, 0xe97daf1f, 0x7bef92f4, 0x99eb657f, 0xfdf5014d, 0x07cb49c6, + 0x0e5fbea8, 0x3e790b38, 0xaba64730, 0xc51d02ba, 0xbac5e6b1, 0x78c21667, + 0x33fe0b97, 0xf7bc10ef, 0x5deafda5, 0xf9e10728, 0xed0e7c1c, 0xa65faf08, + 0x927ca15e, 0xbec15ba4, 0x2fffd237, 0x1b6e9211, 0x6b25fee4, 0x81c63765, + 0x3b3a4dea, 0x0d03f9fa, 0xb3e759c9, 0xba0d6b19, 0xeff8a6a7, 0xdbf8f78f, + 0xff7fe42d, 0xd9fb90b8, 0x44fee42b, 0x199f7f33, 0x93af747c, 0xf810b3ec, + 0x059b2310, 0xaa035794, 0x7c810ba5, 0x51d26ed1, 0x9462c11c, 0x65c60ee3, + 0x1280b8aa, 0x2d376837, 0x2dee9011, 0x3c50f76d, 0x9405e31f, 0x92fb81bf, + 0x305e37db, 0xf34a90d0, 0xd67fbfea, 0x08423cf3, 0x3cd04e31, 0xf044f894, + 0x27b47e38, 0x86d73f50, 0xf2bfbc87, 0x2351614a, 0xd75d97ee, 0x9464defd, + 0x496befdf, 0x2f47f51f, 0x0fee1f98, 0x21477fe8, 0x1f31eff7, 0xe639f03c, + 0xfa55fb7b, 0x0fee913d, 0x662a0c10, 0xcb6baeb0, 0x6def1c50, 0xad49de3e, + 0x20f646c3, 0xbbd43da8, 0x1eb90bbb, 0x544e8358, 0xf719f23c, 0xaf819bcb, + 0x6bcc7cb1, 0x376cfb26, 0x7bc21ff0, 0xfd2a76bd, 0xf72a0cde, 0x7f541d7b, + 0xf04f9bc0, 0xc1275e13, 0x5465bc87, 0xd175e53e, 0xe5bda7f3, 0x75eb3f04, + 0x5de2d953, 0xf79fcf46, 0xec3e087a, 0x4bf04b5d, 0x61a60f68, 0xca91ba9c, + 0x544dbd57, 0x4cdbc47f, 0x3f5eebf0, 0x43de6d95, 0xb7a8fcf4, 0xdee3e085, + 0xf2df8256, 0xe1dc11b6, 0x6df2a0ed, 0x7f3d276f, 0xe08a7bd7, 0x3a4eb80d, + 0xf4ec686f, 0x2d7fa1c6, 0x7719f7d1, 0x68cdabb9, 0x34aadb5f, 0xec153f74, + 0xce307bab, 0x9f92bbb1, 0x2479e263, 0x62d881c6, 0xb693d90d, 0x4c4f47aa, + 0x5439faa4, 0xc12b9f8f, 0x2aeb38c3, 0x5ab2bf6e, 0x62b3b51d, 0xb7bc1422, + 0xec92a6bb, 0x70f4a6d5, 0x92aeb7aa, 0x5c7beec8, 0xbf2689e3, 0xe4892eec, + 0xedcb55b7, 0xde0e8507, 0xbde7f793, 0x35ce7e42, 0x7f9f3c6c, 0x3d684a64, + 0x3950b172, 0xc0ec694f, 0xc016d9f5, 0x0bbe70fa, 0x5cf01b56, 0x4358bad6, + 0xaabbb0e7, 0x626cb9f9, 0x6157f715, 0x6617143e, 0x29f91255, 0x681b05d6, + 0xb355895e, 0xf43cdea8, 0xd3f468c1, 0x67ab3d9b, 0x252b7cd2, 0xbb366b8a, + 0x39e3468f, 0xbe72e3db, 0x9c3e3593, 0xcf05e3ee, 0x3fce22e7, 0xbbfe77b7, + 0x89bf7be5, 0x820277f2, 0x977ca1d7, 0xe3933773, 0x421a0f78, 0x1c98f1c6, + 0x38144cc7, 0x1235b1ff, 0xd65edff1, 0xff748616, 0xf944a558, 0x9f8b0323, + 0x2af1855a, 0x37f738e7, 0x8f7ed085, 0x04a8e73d, 0xef194c70, 0xe96ac87f, + 0x10eefc09, 0x4dc5f7ec, 0xf2cb7cf0, 0x8df42e6d, 0xd7d9b763, 0x5735bb21, + 0xf18094bd, 0xbd4144af, 0x29194a3f, 0x9d7babdb, 0x56c7bfbc, 0xd60dfbf3, + 0x8f938755, 0xc7c371f3, 0xa180fd41, 0x9a61851f, 0xbb1cca4a, 0xe2464506, + 0x1c2be902, 0xb6c56c2f, 0x7e2f1c32, 0x2f19539b, 0x59bbc713, 0x49fe0d3c, + 0x7dd435a9, 0xc9e4fedf, 0xe0c8e48d, 0xfd9e7271, 0xe5103640, 0x2e5ae3c8, + 0x71ef7cb7, 0x8292927b, 0x471df4c6, 0xf25017c9, 0x05f38207, 0x35fbca46, + 0x9e42cf50, 0xb1ee8ee7, 0x3e327dfb, 0xcf28bab7, 0x24c25926, 0x65af561d, + 0xd73ee0f7, 0xd79b8517, 0xa507a085, 0x18e5187c, 0x38d87820, 0x9d7b6f4e, + 0x3f78cadb, 0x38cfde1a, 0x22e08ab6, 0x4217d9a3, 0xa3e52b5e, 0xc6233f72, + 0x7038f971, 0xde5bd3f9, 0x5b7dfdc2, 0x8f51b94b, 0xc85bfc69, 0x922938bf, + 0xb6201d7c, 0x60227bec, 0xf5e4335e, 0x0ff3a63e, 0x66e873c3, 0xca386fe8, + 0xe197e455, 0x3e040798, 0x95de0046, 0xe38f26f7, 0x37cf757a, 0xfce9a39b, + 0x3086c179, 0x999a8fb4, 0xaac1e881, 0x066744f5, 0xe05583d0, 0x9e0975df, + 0x4e9c67bf, 0x16355f39, 0x0cb9e1e5, 0x2825cbd7, 0xafde6097, 0x3e924755, + 0x60faa92c, 0x0b8028da, 0xcf944aaf, 0xcf0d58f2, 0x37f31ccf, 0xbc89e50d, + 0xf7ee13fe, 0x2951ff8d, 0x720975f9, 0xf3f64bb9, 0x03991b0a, 0x5617e3ef, + 0x1a9fc91b, 0x1b3a4d77, 0x485127e8, 0x0bfd073a, 0xdb19af1e, 0x15eea92d, + 0xdd54f98d, 0xa22a301e, 0xa5d0919d, 0x705b6e7e, 0x1844ccf8, 0xbf86b9a7, + 0x9fcdfcdc, 0x5bec204f, 0x8938a1ad, 0x9e0bcf72, 0x539c5024, 0xde6025f2, + 0x230316e6, 0x32ad6e79, 0xb41e5198, 0xfe49c25b, 0xc9185735, 0x5a9cdd0e, + 0xb276861f, 0x68eac17e, 0x7ceb072c, 0xba7630fb, 0x77a3b5f9, 0xbc90c6d9, + 0x6dbefded, 0x7703d83e, 0x51efe4eb, 0x513bdb1d, 0xf3c97942, 0x76bcb659, + 0x152faf74, 0x3cd1359b, 0x80361aec, 0x9e07be2f, 0x5c86e3cf, 0x5075d85f, + 0x22b6f00f, 0xa0e343f7, 0xd7ce213e, 0x8d3b558e, 0x5e292b67, 0x3046498b, + 0xc3dab6be, 0x3ba9d3f0, 0x810cb32b, 0xc9f0ae7c, 0xf9ffe50f, 0x0ddf39f2, + 0xfa0dc0e5, 0xafbf11bd, 0xd37ce029, 0xefad3f9f, 0xfe2a9e47, 0xf963dbf1, + 0xa4b6c8fb, 0x42eacf57, 0xf1fa57da, 0xebe46e5c, 0x8cca9e78, 0x3df449f2, + 0x2ebe19f2, 0x2ef9f309, 0xcd42e7cb, 0x139d1316, 0x6d610f37, 0x5be06e78, + 0x9ef1e1a4, 0xb9affe38, 0x87c50872, 0x689e0876, 0xd7c60a5f, 0x7fb8c9dd, + 0x96fc06cd, 0xe24f3c1b, 0x3df99d72, 0x86af3c66, 0xce05967e, 0x977c443f, + 0x6bca61ec, 0xecf78910, 0x867880ba, 0x190a5135, 0xadd718bf, 0x535c2786, + 0xfd4c45c3, 0x8312921d, 0x56689e1a, 0xebc91fc3, 0x3f536c9f, 0xc357629f, + 0x878e8389, 0x7f5e7869, 0x7d975c50, 0x41a5f180, 0x8f369af2, 0x06f5f7e4, + 0xb8f0d575, 0x81c8126c, 0x8e71bec8, 0x202fcc81, 0xafe382fe, 0x28eb1909, + 0x0eab6f2e, 0x2879078e, 0x971c141e, 0x023dc74d, 0x2472783e, 0x2a8f3bcf, + 0x7e455f72, 0xe7c51b49, 0x7aeee4f1, 0xf8629f3a, 0xa2048df1, 0x79287717, + 0xf0819a08, 0x7c87f4a0, 0x3f580be1, 0x7c2043f2, 0x19adc8b0, 0xc2f9cb9f, + 0x873fa817, 0x5ee96977, 0x7f5e3ca9, 0x67f0a1fc, 0xa28e7cbe, 0x955cdde4, + 0x6ef252fb, 0x82f9cb56, 0x3af941ad, 0xe94b1357, 0xced5fe1e, 0xf143c37b, + 0x4f9df221, 0xcb10f9cf, 0x0dfe722d, 0x286fa1f2, 0xae7c43e7, 0x2b9576ff, + 0x5878bd94, 0x0e2b33d6, 0x7ce5b3dd, 0x5b6afac0, 0xbae0a956, 0x04b6fbd6, + 0xc0ad47e6, 0xacf9303f, 0xdf814991, 0xe674bec3, 0x40344f2f, 0x9dd62eb9, + 0x4dab7881, 0xe2f94b3b, 0x0e9477ca, 0xb2347acb, 0x3afdb424, 0x9663e656, + 0x638aa311, 0xfa88f128, 0x0c6b76ed, 0xae1517bc, 0x0c38e9e4, 0xc72b8f94, + 0x07dbfa37, 0xba08b5fd, 0x4b03dc0f, 0xa89efa1e, 0x3d245afe, 0x62f389bf, + 0xbfa7ae27, 0x78c55078, 0x36cdc78e, 0x83c6274f, 0x33dd32b4, 0x0f27e003, + 0x94ff80f9, 0x44dac1fb, 0x8b485c75, 0xfed04cf9, 0xe232d371, 0xb03ee527, + 0x0245d1ed, 0x788d89ca, 0x2fb237bf, 0x8ff3051f, 0x0f17ce55, 0x4f181fe6, + 0xc7dfd705, 0xe0834bf5, 0x0a5ca370, 0x2fffcf5e, 0x94c6a07e, 0xe4f649d3, + 0xfebb70a0, 0x1dc0ec7b, 0xbe265f5e, 0xb3dc39b7, 0x1f7ecf0c, 0x783c5f1e, + 0x5def0da3, 0xfc03b233, 0xc42de7e3, 0x321dcffc, 0xd38c6e9d, 0xe6593d10, + 0x0189f65b, 0xb9d164f4, 0xb40ed193, 0xa321dfc8, 0x368fc61f, 0x0d6ff65a, + 0xcf62be31, 0xe579d8f4, 0xb8c08f30, 0xf6476c80, 0x80e7778c, 0x3f40627d, + 0x933bbd16, 0xfbc9ebc6, 0xf4dbc793, 0x53b78dcf, 0xe329038e, 0xaf52ef59, + 0xd0f3aacf, 0xfcb2acfa, 0x89dbc655, 0xbfe50beb, 0xd93c68dd, 0x6f19ecaf, + 0x567d7aa1, 0x67d687bd, 0xa0f7be55, 0x9fe9b78c, 0xf32b4f1b, 0x7ef946e7, + 0xc93c3693, 0xdfd8fc8f, 0x9e8680bd, 0x19976afc, 0x2546d0e5, 0xf9cb264e, + 0xbe72412b, 0xcaf3965e, 0x52e257fb, 0xa579ee29, 0x9439b663, 0xceb9477c, + 0xc98afb64, 0xed9315f6, 0x9467842b, 0x0f1d599c, 0xf197f8f4, 0x3bf10bb5, + 0x9c563326, 0xf80249c9, 0x73dff8ca, 0x8733c9f8, 0xe52bc207, 0xf873d613, + 0x13573391, 0x9fdca81d, 0x39df885e, 0x72e58c89, 0x32b79958, 0xb9e327ee, + 0x36b752df, 0x40f5c785, 0x6efca25e, 0xffd0f248, 0xb13975bf, 0xbfff123b, + 0xdd41baca, 0x06daefaa, 0xd36b7597, 0xfd68fbf9, 0x171e61e4, 0x94b3e797, + 0xea651bfb, 0x91911bfb, 0x0a2ec95b, 0xca337e63, 0x938308b1, 0x9f2e19ee, + 0x70bd2760, 0x73947307, 0xc69eda7b, 0x7df818f3, 0x72f9d98f, 0x17c2e6bf, + 0x8d0efeb1, 0x79fa2373, 0x10598e1f, 0x92a3668f, 0xef6b762f, 0x3f03cabd, + 0x8cedfee4, 0x11b70273, 0x621c78a3, 0xf09d914d, 0x434f1813, 0x7c3fb07b, + 0xc6084fc6, 0x33e393a7, 0x69f1c9c6, 0x075c8eee, 0xdd175ffb, 0x7c4f596d, + 0x5f1216da, 0x841af07d, 0x981341bf, 0xa888ffe2, 0x6f846f3f, 0x5e4aaf05, + 0x4f60835d, 0x4a901fe3, 0x32c5e550, 0x3a87b0e6, 0xe5ecd8df, 0x7a3d00e7, + 0xd0cdd135, 0x1cd9d30e, 0xddf79819, 0x32189df0, 0x8135cd5f, 0x9175f9eb, + 0xd8ef94e1, 0x3f23a910, 0x2a723db4, 0x64abb8c3, 0x2978449c, 0x3ca32c8d, + 0xb5963144, 0x9c169fa0, 0x2d462d7f, 0x7118fca7, 0x89697d20, 0xbbf93d89, + 0x95f2034e, 0x9511ce78, 0x9370048c, 0x8dd2d7f9, 0xa663aff2, 0x48ebfcf2, + 0x64e31d9d, 0x90ba4d1b, 0x1369d7f9, 0x8ed03db8, 0xf5c38beb, 0x30f7f8e8, + 0x664975e4, 0xcf8cde7e, 0xd9fcf023, 0xa7ffa1ec, 0xda7f5948, 0x4a5f4e04, + 0x515af47b, 0x873a883e, 0x5116ed1d, 0x21a50efe, 0x0232c351, 0xbe3297e4, + 0xf096827d, 0x999158fb, 0x703567df, 0x1fc6757b, 0x57d1e742, 0x86e2504d, + 0x3faee9a1, 0xe1a599ba, 0x5f0a66f9, 0x28ea31ce, 0xd18e6e0f, 0x9957df46, + 0x69f88403, 0xf1fb404c, 0x61bdf8f3, 0x7a4361c9, 0x09d8e3fa, 0x6191fe2f, + 0xedcb9c38, 0xe968a7f7, 0x02fbdd3e, 0xfa623a73, 0x5cba79e6, 0x3cd113d1, + 0x33b6fdbc, 0xd31d901b, 0x93b23146, 0xa8fcb49e, 0xc0008f09, 0x04f1f82f, + 0xf71cc758, 0xbbe889cc, 0x7ccf2acc, 0x45d7db13, 0x9cae7970, 0xf045d4ab, + 0x5e7ba7ff, 0xd827fbac, 0x67c172fe, 0x5f48c591, 0x7d127752, 0x3db7b20f, + 0xb404af9d, 0x4f10986f, 0xebf067ed, 0xddf4dd66, 0xe7712b89, 0xda33723f, + 0x7b285b1f, 0x160cfd0a, 0xfc8a4fb0, 0xf0237f40, 0x8119fa39, 0x609effff, + 0x8576b7c9, 0x694a2790, 0xbd31fdb1, 0x2580e41a, 0x952a3de1, 0x629c3be7, + 0x3ec43f99, 0xeef9941f, 0x9bf7b69f, 0xbd79b661, 0xf9d83ef6, 0x971f1107, + 0xe0b7dfca, 0x965754a7, 0xbef6457e, 0xa1f0a756, 0x5e97fc9d, 0xb7ce7d58, + 0x8e94dbd3, 0xe219e9f7, 0xcad5fa01, 0xaf5946f2, 0x8ccbbb76, 0xf195bef6, + 0xd9a99fff, 0x9a5e9ddb, 0x07fefbd6, 0x2f987af2, 0xbe57de9d, 0x744b63af, + 0xa1cb496f, 0x9f3928bc, 0x6792acc8, 0x27a34b33, 0x741da1c6, 0xed187317, + 0x75a6b4b8, 0x503b57c8, 0x771da15e, 0x3be23ef4, 0xf047a26b, 0x91c60319, + 0xff2b47ef, 0xb8d5e32f, 0x8ecf5a52, 0xc3c47f1e, 0x744b5fc8, 0xbadca275, + 0x5e96a8fa, 0xaeac51da, 0xdcba25b7, 0x4b7e60eb, 0x377cf30e, 0xffd8256b, + 0x2bd85f18, 0xe61b2c50, 0xbe017941, 0x888fee24, 0xfffa46cd, 0xdd62bb1b, + 0x4edf0847, 0x4a348ffb, 0xabb430e2, 0x7b23ac1d, 0x9ee0a36e, 0x69adefc2, + 0xc938a858, 0x71e04dbf, 0x98268f80, 0xed999e79, 0x6c7e9c4f, 0xc757a41f, + 0x5fff3cde, 0x3ff8e391, 0xbdd3b28d, 0xda3ec51f, 0x347f8fd6, 0x1bdf29cd, + 0x8c8af452, 0x1b73033f, 0xc1445f90, 0x878483c5, 0x29ea7a9e, 0x2a9fe30b, + 0xc8b67184, 0x4fd28ff6, 0x2a9faa78, 0x924e1dc3, 0xc9d98297, 0x63d985f5, + 0x6e1f01f3, 0x390c56fe, 0xd653827e, 0x647e8337, 0x76a5f6c3, 0xc1960677, + 0x25363ff7, 0xfdc0c92d, 0xed5534dc, 0x6b3a6e5f, 0x87e633ff, 0x917d1ffc, + 0x80005820, 0x00008000, 0x00088b1f, 0x00000000, 0x5795ff00, 0x7794487f, + 0xf7be7f18, 0x9ef777be, 0xaf35de9e, 0xbdb4d3bb, 0xb484ba67, 0xc589975d, + 0x819cf7c2, 0x116ba8b1, 0x9bdb205d, 0xa6ab9593, 0xe3054159, 0x9532cb7d, + 0x6c23fad8, 0x98b7618c, 0xfd4ff85b, 0x18c481b1, 0x21152126, 0x06d8c46e, + 0x6a44e61b, 0x04124904, 0xf9e7b96b, 0xef79efbe, 0xfde8ea6b, 0xf79ee7c3, + 0x3cfcfcfb, 0xfaafde3f, 0xc9f4271d, 0xde8a3700, 0x012a3908, 0xa29cb7bc, + 0xd0cc019b, 0x7532f353, 0xaf20098d, 0x0ddce45d, 0x01ca27ef, 0x4bd6863a, + 0x6f520572, 0x100e546c, 0xc004c40d, 0x270d1bc7, 0x5ef2322a, 0x39c830ef, + 0x21061af4, 0x952bbc40, 0xa8c5fe8d, 0xc5394a02, 0xde630c35, 0x0d74dc8c, + 0xe494bb06, 0x3b454107, 0x2e79e89e, 0xc5098927, 0x0052fa81, 0x91ba3aa2, + 0x435ca0fc, 0x0712acbd, 0x9fc06548, 0x7df8c819, 0x76e4e354, 0xa363ca3a, + 0x513e3cb5, 0x4779e076, 0xd1d61638, 0x42bffb4f, 0xf3dbf492, 0x3ed14601, + 0xa403e406, 0x7ae30ae5, 0x37ed3b69, 0x3bdf3c8c, 0x43af44b6, 0x89e2fa5c, + 0x7aec8562, 0xf51d251b, 0x45ca9c85, 0xbd9155ed, 0xbbd9f375, 0x57b4da71, + 0x3b23acae, 0xc3d93f31, 0x735e79a8, 0xed33af71, 0x6c48fe08, 0xa0012d62, + 0x28041883, 0x97e5c4a0, 0xcfdc85e5, 0x0bfe8a99, 0x31c9c49a, 0x220f8329, + 0x655c9feb, 0x8360bcf2, 0xa5cd7ab6, 0xf0c4a95e, 0xff6f4737, 0x09aee695, + 0xd783dd8b, 0x96f8d90e, 0x135de381, 0xa7ecba96, 0x9c0d881f, 0xee301106, + 0x9c11c603, 0x117753cc, 0xc7cb079e, 0x9bf96b87, 0xd3c51729, 0x0d5dc9eb, + 0x0715e23e, 0x4d040154, 0xca0cbddb, 0x9d63ec44, 0x22fb4565, 0x6b5922f8, + 0x38ec7b9c, 0xebd816e4, 0xeac49d30, 0x074c1f63, 0x1e110520, 0x936bd70c, + 0xbbe9bd0c, 0xbc212d7f, 0x1a1dfad2, 0x7403767a, 0xdda7126a, 0x4adc361a, + 0x985a7380, 0x0e783df3, 0x7f4ae148, 0x13e63f7f, 0x22e89324, 0x7b3f9494, + 0x7b73e30b, 0xda07511d, 0xbcad8565, 0x6385ddbf, 0x5af31d11, 0xe75042fe, + 0xb375efab, 0x0789d8ef, 0xa38c3191, 0x4f95302e, 0x8c27207a, 0x9c46fd38, + 0xcb3f8e97, 0x6d2e7ca7, 0x5ce8fcc6, 0xbf9c3d54, 0x252c5f2f, 0xf31b6e5c, + 0x439116de, 0x6d3e4b01, 0x512e9fb7, 0x30077e2d, 0xb9f3197e, 0xfd11f98e, + 0xfa23f301, 0x3447e623, 0x30fbbc77, 0x74683da0, 0xda18a5c9, 0x8c8326a0, + 0x65690ef9, 0xa2d4de9c, 0xd56b0e9c, 0x14d2de9c, 0xab4777ae, 0x96aef4e7, + 0x4b4474e0, 0xa9aa3a72, 0x6d67ee5c, 0xb4f7a71f, 0xd17f4e56, 0xabfa718e, + 0xbbfa73a6, 0xef69c9d6, 0x2bf2571e, 0x4180778c, 0x8f259af2, 0x681db0ef, + 0xf39aae0e, 0x02267a10, 0xdd5e7f60, 0x8e68a6a8, 0x11bf987a, 0xc7ce2056, + 0x3d51648f, 0xf2393edb, 0xf33cef60, 0xfd5c7df1, 0x65ccb146, 0xef8ba775, + 0xb16f76bd, 0x7307dacf, 0x6f75c2e9, 0x5d2a7be5, 0x8909f8ef, 0xeaa0bbef, + 0x4423b94a, 0xdfb4643f, 0xa9954982, 0x299e5c39, 0x521dc88b, 0x5a5f9e64, + 0x69f64dde, 0x55df78bf, 0x504f2ea8, 0x9c084047, 0x89e707b4, 0xd50d3f77, + 0x291f0352, 0xd439eb0f, 0xcebb21ec, 0x3cf82b63, 0x68ae12f7, 0x26324cef, + 0xe77d1629, 0x6b5498ee, 0x807693e9, 0xf5faf9fa, 0xd8afd985, 0xe9fd4019, + 0x29d9e734, 0x5c850779, 0x1f1011fc, 0x629deecd, 0x20ef5bfa, 0xe6670eb0, + 0x6507fb98, 0x9cdef1b3, 0xf6834fdf, 0xc64e9ebe, 0x4f7c807c, 0x6f674bb5, + 0x3648bee2, 0xf6f84ebe, 0x10a5ea88, 0x9bf530e2, 0x28632e1b, 0x3a739a7f, + 0x42e9ce66, 0x0861d3f5, 0x0a700c20, 0xa9d1626e, 0x347d2a4f, 0x8e25ed17, + 0x793cd4fa, 0xd9e663fe, 0xa3ec6d92, 0x4eae0d96, 0x7b25a38a, 0xcf300a79, + 0x63ea795d, 0x1bc7a3ea, 0x95adcefe, 0xe5a9ee29, 0xbc9b1c89, 0xf9367cce, + 0x941a54a7, 0xec6c5adf, 0xefb4e5bb, 0x2816723c, 0x5d997d96, 0xcf8d9af6, + 0x62801689, 0xe347afd9, 0xb08c7f46, 0x1dfa9268, 0x764c9cf7, 0xc0f29c46, + 0xb232e218, 0x476d17d1, 0xdcecd291, 0x08c714cb, 0x031a2503, 0xfdedf6d8, + 0xbdfdc012, 0xa24ec995, 0x9271403b, 0x212a4efe, 0xeab8bef2, 0xeddda389, + 0x97bfdad0, 0x13f239f1, 0xaa30f83e, 0xf9d5ffd3, 0x5e380527, 0x3f3f585d, + 0xf9e7afd6, 0x7989cd9e, 0xd3c78d70, 0x329f83fd, 0xd9821bb4, 0x39f7cc27, + 0x6c10fd18, 0x0b31f510, 0x764ef80e, 0x0ee66555, 0x95620a0b, 0x2cbc2fa9, + 0x69daadbf, 0x339ebbe3, 0x37701dfe, 0xfe14ea43, 0xcfd8aedc, 0x79dbd477, + 0xa095ee7c, 0xb83322fd, 0xdce7099d, 0xb78a7478, 0xe8b78cd0, 0x50b68fcb, + 0x8915379d, 0x90839f86, 0xe156fba2, 0xfac27111, 0x19af761d, 0xcf3c0455, + 0x4654424f, 0xf60382bd, 0xd1950073, 0x0092879c, 0xb07ea05f, 0x7e2dcf09, + 0x3cb61743, 0x3b89ab64, 0xc27e4f5f, 0xc6ea0f78, 0xed5211fd, 0x8e201c72, + 0x4b41c2b3, 0xc049bce3, 0xe0fda0a2, 0x0f8f076e, 0xbe7e1af4, 0x8a0cb66c, + 0xe4cc1e37, 0xb3043c1d, 0x9f973af2, 0x3d8bef3f, 0x5c516e5b, 0x6bad9505, + 0x5968f106, 0xcb0e3814, 0x4725209a, 0x36e30e38, 0xe6be8a1c, 0x07d93e79, + 0x0e38c790, 0xfc7cf3b6, 0x627f53d2, 0xfcb6e3fe, 0xf34f3b55, 0x9a3d1603, + 0xf34f2b1f, 0xbf566503, 0x79ee8b25, 0x4ac3fefa, 0x944ffbe3, 0xf7b4ffbe, + 0x3c4ffbe9, 0xc03d6cc7, 0xc09cf1c7, 0xaefe3664, 0x17ba0a80, 0xe05f7705, + 0xf58278f5, 0x519ee810, 0x9ef7e018, 0xa1cff6b9, 0xa114b17d, 0xe39f0389, + 0xa4e06676, 0x8faa4117, 0x4ca22b7e, 0x46d560f5, 0xc12f2ccc, 0x22771bfb, + 0x1677739f, 0x33ce1248, 0x0856e0db, 0x791bb777, 0x40b9994c, 0x82f7c7ca, + 0xe33df803, 0x78910324, 0xd22547f0, 0xf7e06803, 0xa0d78638, 0xfd85ec99, + 0x90f52ad0, 0x4bd0dd3f, 0xabe8c9fb, 0x8b55998e, 0x64563beb, 0xebf466fc, + 0x196593fc, 0x8fe10bff, 0xba64c0e8, 0x8fa6425e, 0xdefb78ff, 0xa8efbe3a, + 0x436fd0f3, 0xbf395fa6, 0xd247ecc7, 0x41f0bda7, 0x5a3c38fa, 0x8c3fff41, + 0x768ecd1f, 0xfa1e4b33, 0xe3cf023b, 0xc6cded15, 0xbef99611, 0xb4cbcd9f, + 0xf179aaf7, 0xced7b2c7, 0x6f3e065e, 0x4a40379f, 0xda82f7e7, 0xed2e6287, + 0xb6c1cc37, 0xd8b79027, 0xf60a7b3b, 0x6a2fdd51, 0xec09b165, 0xcd43b3af, + 0xf7413efc, 0x3a5e338d, 0xfb145957, 0xbc68383e, 0x7675270f, 0xb226f91a, + 0x52564a53, 0xc257ffb6, 0xe2c7680d, 0x67593fef, 0x0e50717f, 0x00000e50 +}; + +static const u32 csem_int_table_data_e1h[] = { + 0x00088b1f, 0x00000000, 0xe4b3ff00, 0x51f86066, 0xb97bc10f, 0x726e1818, + 0x0143f821, 0xd08667cf, 0x0c0c2c6a, 0xc6cc401a, 0xcec0c0c4, 0x717ebc44, + 0x1d7b044e, 0x4cc30307, 0x31c8de20, 0x481afef0, 0x7e87957c, 0x42f2a976, + 0x81c16968, 0x970837f7, 0xd430310b, 0x04303309, 0x4ff84088, 0x2be55045, + 0x366c1084, 0x12ecca49, 0x0007ea02, 0x0fb3beda, 0x00000380 +}; + +static const u32 csem_pram_data_e1h[] = { + 0x00088b1f, 0x00000000, 0x7de5ff00, 0xd554780b, 0x733ef0b5, 0x7993331e, + 0x0f20f264, 0x0084f102, 0x021c42a2, 0x27888784, 0x01a0c421, 0x54bc8083, + 0x490c7786, 0x4fed0226, 0x099def5b, 0x6d6b4441, 0x2f06d8b4, 0x1a080ef5, + 0xd1a07515, 0x01d09c06, 0x6bdab114, 0xeada5454, 0x8088a0ed, 0xc5978490, + 0xd7bfca96, 0x7324e7da, 0x6a24264e, 0xffffdffb, 0x6df9f8fe, 0xece7d9f6, + 0xed7af6bd, 0x7b5ed6b5, 0x93c5208f, 0xb908abc4, 0x11377f0c, 0x2109e112, + 0xb6cb3a7d, 0x2463f682, 0x2bff1099, 0x238dbca2, 0x239dfb84, 0x4248d37c, + 0x05ccdede, 0xde1eb4cc, 0xd6842363, 0x169a6f4f, 0xb2116730, 0x8159b877, + 0xcd6f4ff7, 0x97c4fac7, 0xb40a703f, 0x5e65f2bd, 0xcf69ba80, 0x4ec46709, + 0xf2dcd788, 0x79f40dc8, 0xd93ccbfb, 0xfe228742, 0x42922689, 0x610b31c8, + 0x7d59177f, 0x2b5595a9, 0x1bbdef37, 0x326b2dfa, 0xa7ed2b13, 0xa9b2d772, + 0xb2fad037, 0x57812283, 0x48d5b72a, 0x9efd697d, 0xfa841700, 0xc67f3d9a, + 0x480ada71, 0x21287059, 0x22167d27, 0xceeb4d5f, 0xf4999496, 0x47607979, + 0xbe5fbc11, 0xe89b739d, 0xf69be5fb, 0x97fd0c7e, 0x79038a37, 0x06f2ffda, + 0xb087911b, 0x98132fb1, 0x00a992c7, 0x229be56f, 0xd97ad331, 0x011295a5, + 0x5275091c, 0x7fc603a9, 0x301d9254, 0x471c41ce, 0xb3e567c3, 0x5dfa1c74, + 0x1b9c8bd5, 0x226556a6, 0x75a7801e, 0x53f67597, 0x8d579876, 0xdfbe1834, + 0xef0480f5, 0x782c0b2d, 0x7c032ac5, 0x8022a59b, 0x6966d373, 0xfeced0e9, + 0xa5bc3796, 0x7d58eb83, 0xaa27aa76, 0xf49e58dd, 0x3b9b2211, 0x2884e5eb, + 0x1dc03b41, 0xeb0da690, 0x4b9e7e7c, 0xf4146420, 0xd2d913cf, 0x0c253fd9, + 0x03ff81f2, 0x83e04ffa, 0x5b604766, 0x56bd2756, 0xe5bfe8b8, 0x759d7a4e, + 0xda13f4a9, 0xd7fba2f3, 0x0e8047ca, 0x9f3a9e14, 0x7cc7cb0b, 0xf06e5869, + 0x5fb788c9, 0x596086fa, 0xf3e373ef, 0xb0637c27, 0xb053e4dc, 0x8c57d27c, + 0x8a57c065, 0xcdf16def, 0xcfab72c6, 0xf69fcf83, 0xe0d96195, 0xcfe7c6ab, + 0xb96356f9, 0xe7c7e7dd, 0x63d6fa2f, 0x61d5f419, 0x8f57d3b9, 0x802fa365, + 0x6be2bdef, 0x17c9b2c0, 0x7dbbe7c4, 0x7c86584d, 0x00f72c61, 0xf619697d, + 0xcfb960b5, 0xd7cb1877, 0xeefc117c, 0x9638ef80, 0x7778ab0f, 0x02f9278e, + 0x21539bc5, 0x242e2a2e, 0x17c944b1, 0x94b13d69, 0xf4ee53d5, 0x9eb44be7, + 0x8a75a1e2, 0xe115bec7, 0xf7ad337c, 0x99ed66ad, 0x0b0291f7, 0x59fa67ad, + 0x958780fb, 0x0fad2b02, 0x83ed63a8, 0xe20bf937, 0x80707d68, 0x3dbb5fb5, + 0xf5a3605c, 0x3dac836b, 0xda264427, 0xcc273d69, 0x2b6fb9ea, 0x9eb41d13, + 0x79eac2db, 0x3a27fb1f, 0xc22f3d69, 0x2a771fbe, 0xd69e313c, 0xf6b3b5c7, + 0xa1489709, 0x1027d68b, 0xf605eb0e, 0x5a04c2fc, 0x7ab1702f, 0x8205bf51, + 0xf6ff831c, 0x84459188, 0xff8342f2, 0xa7484536, 0x92b22975, 0xfd3e29b8, + 0x161eb1b3, 0x7f6862c9, 0x1140bfdb, 0x44bad2c6, 0x7ffb4156, 0x7db1cbfb, + 0x7b63289f, 0xb6257fbb, 0x6c6493ef, 0x87dcd537, 0x0544d7f5, 0xee6b93db, + 0x935ff7c7, 0x5c1f6c14, 0x0fd608f3, 0x1f6c1e88, 0x7c2bf353, 0xc1e480ff, + 0x06d6c7f6, 0xff5a4294, 0x05b3ce0f, 0xf396baf8, 0xe06c9194, 0x295a60d7, + 0x1c75d7e5, 0xf1f20d99, 0x95353010, 0x92e97587, 0xcf6dfa02, 0xe29ef23f, + 0x93b79539, 0xe9f4bea1, 0x9fb0b287, 0x911fb1e7, 0xdcf7c3f6, 0xc66f84cf, + 0xf099fae8, 0x4fd6994d, 0x6b57bc23, 0x7b3f5ded, 0x87a719be, 0xad729be7, + 0xc7ec669f, 0x4d79bbd1, 0x0f5e3cb8, 0xad0ae5cf, 0x4fd8039f, 0x09e0ef42, + 0xfd75a38b, 0x5a65c584, 0x3f60ef3f, 0x8f077a7d, 0xf5d58d22, 0x68f748a3, + 0x7ec61cfd, 0x4fd77bd2, 0x0f41ba58, 0xeb5cb48f, 0xd3f608e7, 0x52f377bf, + 0xe1ea37cc, 0xfd6a5731, 0x67ba449c, 0x7d9faef5, 0xf67e3d0e, 0x73f03a39, + 0xd419e10e, 0x381579bb, 0x7029f8f5, 0x12e7e076, 0xef4d73f6, 0xd4e7d9fa, + 0xb39f67e3, 0x07223f03, 0xbbd61af3, 0xebc41579, 0xdf1053f1, 0x07271f81, + 0x1def0cf0, 0xd1f5af3c, 0x3eb5e7e3, 0x4549f81d, 0x0ef54678, 0x3d14c29e, + 0x3a530a7e, 0x3c2323f0, 0xcfd77b63, 0xfc7a296b, 0x81d296bc, 0x9fb06b9f, + 0xaf377b1b, 0x7e3d54c2, 0xf03b530a, 0xe4fd8b93, 0x1e101a7b, 0x7471fb42, + 0xfe81cfdf, 0xe81cfc7a, 0x1b9f81df, 0xb4499fb0, 0xfb9eec9f, 0xe3d4ca29, + 0x03b328a7, 0xe788853f, 0xe7ebbdc9, 0x3f1ea640, 0xf03b3207, 0x99fb0533, + 0x1579bbd2, 0x4fc7a55d, 0x3f0c55d1, 0x71c30937, 0xa76ba19d, 0xdc9fa79b, + 0xe15f2fdc, 0x8bbcfbe8, 0x9b9779d5, 0x6bc3dd80, 0x51690cf6, 0x7dbefa78, + 0x43ee427b, 0x29aeda24, 0xe3f00bb8, 0xb45e56a0, 0x263f135d, 0x2547674e, + 0x7aba8928, 0xdd5f7152, 0x074a7dfb, 0x6753dae8, 0x4f6bab5f, 0xeaeae4f7, + 0x74e36519, 0x2eaff7ef, 0x5aafd5d0, 0xfdee8b7d, 0xbaedff2c, 0xb9faf67a, + 0xd507f7ba, 0x5fb5d42d, 0x6bae5f5d, 0x42b026bf, 0xe1aebf57, 0x87f7bac7, + 0xdae8d705, 0x487a6faf, 0xfc3c3ed7, 0xe23eae98, 0xf7ba13e0, 0xd16cb547, + 0xfc3e8fb5, 0x6c7dae9c, 0x7eaea764, 0xbaddf1c3, 0xdf6c6ff7, 0x74dfaba7, + 0xf7baf7f1, 0x7afbc9f3, 0x67f2db7b, 0x5c93fbdd, 0x6fdae99f, 0x60d2fb4e, + 0xc75ddaa7, 0x3ceb53ae, 0xbf4115c8, 0xa12e9fc4, 0x48761abd, 0xdafa9758, + 0x58e29f99, 0xfca51f2a, 0x245bed23, 0xd25f2327, 0xe4376a3f, 0x3abb2df7, + 0x70ff9f42, 0x176ae79c, 0xc943fe7d, 0x862bbd73, 0x8df9437d, 0xca506923, + 0xed8d2826, 0xdf8c880f, 0x0d2e320b, 0xf7bf423e, 0x2707da9a, 0x7cf5fad0, + 0xe3e4107e, 0x7684ce15, 0xaa4f1c75, 0x3338bde1, 0x81e9bf41, 0xfca7bcac, + 0xbeb0f251, 0xb833b53f, 0x8bd77ece, 0xa3b4349e, 0x83f13e6a, 0x3faeb39d, + 0x425f579d, 0x093ee55e, 0xefd207fb, 0xf34d2ffb, 0x12ccfed0, 0xc7a233f5, + 0x43f8e897, 0xc830fc71, 0x7f1801c3, 0xcdf1d754, 0xc6e8c603, 0xe99664b7, + 0x7448b7c6, 0xbf21177c, 0x1d5cf9af, 0x1c61129f, 0x9f716f21, 0xcce6f8e3, + 0x01ff1c32, 0xd15dfa89, 0x8c75c7e3, 0xfff302df, 0x0ff9bbb0, 0x7f9fa718, + 0xfe7eb966, 0x9fff9b12, 0xe3ab4e6a, 0xfffce1c7, 0xf3669dcc, 0xf3672ccf, + 0x3b7eb337, 0xe07677c6, 0x1fe3023f, 0x737c66eb, 0xfcfd78f6, 0xcfd0aaaf, + 0x3fc6ccdf, 0x1d417359, 0x7fe38edf, 0xf3605dc9, 0xc702aabf, 0x371ecc97, + 0x11948ff0, 0xe3a01d57, 0xf1547e93, 0xd0bb02a5, 0x921ca071, 0x90868548, + 0x8400dc6d, 0x8c7187e3, 0xa38abedf, 0xccfa86fc, 0x8049cf8f, 0xea3cce6a, + 0xbebcaa37, 0x04be7b7c, 0xa9db0f7a, 0x0544b5bf, 0x8f137175, 0x98364dfc, + 0xbc288303, 0x1fbc4dad, 0xdc378bea, 0xeafd0018, 0xa5f99335, 0xc2409df0, + 0xc7f3fcf0, 0x9e896d87, 0x525cb197, 0x448b1e27, 0x1f875bc9, 0x54864058, + 0x0126f853, 0xacea8c13, 0x38fd4a7f, 0xa63f8c70, 0xfea10f7e, 0x1b2267cf, + 0xbfa9bfef, 0xf508f507, 0x2671d0f7, 0xed1df835, 0x851a50ee, 0xff8554bf, + 0xebc98153, 0x017277a7, 0xafcf953f, 0xfd1c347e, 0x6dabf9eb, 0x709de914, + 0xe927f02c, 0x7e5e74ea, 0x2efb53a0, 0x870b6073, 0x5f0195f8, 0x093450d3, + 0x833eb459, 0xfdf3bae2, 0x394cf68f, 0xb90939c0, 0x2a622883, 0x55aeff7d, + 0x1d177f5c, 0xce62a677, 0x9290eb65, 0x26b94261, 0x8431a619, 0x5c38dedc, + 0x69903da4, 0x2469f88a, 0xc5e9dc6a, 0x52ccfafa, 0x5455bd7d, 0xab851344, + 0x36471a75, 0xcd677ed3, 0xe36bb7d6, 0x3225340c, 0x95e3ab3a, 0xd3a49c52, + 0xcca0b347, 0xa42ec785, 0xfb176cf3, 0xbbc78356, 0xf4612448, 0x087dfde3, + 0x8c9fd5d0, 0xb175cdef, 0x9de11b79, 0x52945a2d, 0x0bd9cf3a, 0xb7f000f8, + 0xed3ffe11, 0x1ca629b1, 0x85ffae5a, 0xe75d4c48, 0x8e7f8463, 0xa09f38c7, + 0xbcfceb08, 0xc673e332, 0xfa54c737, 0x41fc0a7f, 0x3f802fcb, 0x5547fc28, + 0xabd4e8fe, 0x66bc3f8c, 0x87e054cf, 0x413c8df6, 0x72fcaaba, 0x4b2fca87, + 0x417cf4ea, 0x3a044788, 0xe5cd9b2e, 0x07c5143e, 0x583e54b3, 0x9be7af56, + 0x4c5f88bb, 0x3997418f, 0x9fdf361b, 0xdf9d7726, 0xccdf2a27, 0xe22f787b, + 0x193ceba7, 0xe956ee9d, 0xbeb55774, 0xae950efd, 0x9d74a977, 0xebe8ff5d, + 0xb9907d54, 0x79044072, 0xa344fef7, 0x4f474467, 0x234f4a8f, 0xf4ab779c, + 0x8c47fbbc, 0x2378469e, 0xf5233d2a, 0xa03244e7, 0xf846bc2b, 0x32eeafe6, + 0x2d6b8c1f, 0xa7a6c7f0, 0xe57f29b7, 0x95e7a8d1, 0x8f2bc9c1, 0xf2d9c946, + 0xfaba6986, 0xba39813d, 0x2fd597f7, 0xa92fb5d0, 0xbed747bb, 0xbabdfd68, + 0x8fff02fa, 0x5fcfef74, 0xbf6ba35d, 0x5d41faab, 0x47b2bcfb, 0x9e39f575, + 0x67f7ba8d, 0x6bacdecd, 0xacfa599f, 0xf17a7dae, 0x9a7d5d0e, 0xbef74bb2, + 0xb735cf69, 0xfdbe7f01, 0x9ec04f01, 0x02fee0b8, 0xdc1799e3, 0x39de1ba2, + 0xaf9193ea, 0x6086f98f, 0x46e7dc79, 0x1be93fbe, 0xd36b6583, 0x13ac3b7e, + 0x4a5c5d74, 0x32690812, 0xdf59adcd, 0x8269d60f, 0xe4c869eb, 0xfad3f1a9, + 0xf28c937e, 0x912f5250, 0x384208f0, 0x38546c58, 0xf6a8f9da, 0xf5ed0f48, + 0x7527f154, 0xc4892f6d, 0x6c7dee7e, 0x97c055c1, 0xf40faddd, 0x9eec032f, + 0x37aed536, 0xa47057b6, 0x2139fa34, 0xab0e106b, 0x151dd989, 0x8aff9312, + 0xc405e99d, 0xe0f0f509, 0x178d2bea, 0x0a9e4ca4, 0x93ad927c, 0xd7f565e3, + 0x813bf4e9, 0xe01f7268, 0xe7ba11b7, 0xd06e1bcb, 0x2f6a777d, 0x8157708f, + 0xcb0b18ae, 0x2667e962, 0xfde1c3d0, 0x0187d399, 0xac51ca9c, 0xbb41f537, + 0x78af94f0, 0x4041d1e5, 0x8f2c52bf, 0x796366fb, 0xf2c1e7cc, 0xcb0cafa8, + 0x58d57d4f, 0xb1ab7c46, 0x1f9f6ffc, 0xeb7d8fcb, 0xaf93fcb1, 0xbec3cb0e, + 0xf43f2c7a, 0xe43cb005, 0x3df2c06b, 0x16cb105f, 0xad96135f, 0x4d4b053e, + 0xbbe27aee, 0x7c3aeae3, 0x062ff812, 0xfeb5499f, 0x3be3f59a, 0x7f8e2cf9, + 0xc34cf900, 0x59bd4973, 0x1d1487e5, 0x2f80243f, 0x43d67c87, 0xf2a8bd7b, + 0xc7df7761, 0xf96ef76e, 0x94dbf0d7, 0x9d6fc9ef, 0xe06194fc, 0xf89eeca7, + 0xc51f1869, 0x2e4c534f, 0xfca8f766, 0x479853f4, 0x2e62bf0c, 0xa27d2118, + 0xdf2535ec, 0x0ad8eb04, 0x3e841f75, 0x7559fac0, 0x6efa5aec, 0x8175da0b, + 0x9c6eb021, 0xc1b7f21d, 0xf6708fb0, 0x567e2530, 0xf233f3f7, 0x5778f749, + 0x1a59bfd0, 0xea4f44a0, 0x638d6eda, 0x489ab578, 0xdaeba131, 0x769e8383, + 0x758a1c2f, 0xf7c22481, 0x4734f701, 0xada97e8c, 0x09edf80c, 0xaf8eb5af, + 0x63bfa072, 0x0f3dfc4f, 0x662629ca, 0xe7edc72f, 0xe1276ed1, 0xdf80dca7, + 0xecc9758e, 0x7b78834e, 0x85c920fb, 0xa8990376, 0x40bf9fc7, 0x2907bf87, + 0xdd705a8e, 0xfc434bad, 0x706afc0d, 0xd7f02f7a, 0x09ef7e93, 0xde610b9f, + 0xf67c02ff, 0xd27b1fa4, 0x5f91448b, 0x6ff3a26c, 0xf72c33db, 0xbdc61921, + 0xfdb5be32, 0x8f3c2335, 0x6e3e4b7f, 0xb8f8d14b, 0x1f809325, 0xd9cbcaa4, + 0x81e3abc6, 0xf4fd1d2e, 0x77ee4f40, 0xff82649f, 0xdf4b3a7e, 0xfec603df, + 0x5dc225e2, 0x4875c74f, 0x7ea78912, 0xc6d9ef25, 0x8ee33fa3, 0xb06e21f8, + 0x95aee6c7, 0xf93c6fc1, 0x7a19615f, 0xce17c7d6, 0x09ca7c1e, 0x348ad87e, + 0x0c68fabe, 0x65656a3a, 0x1edaab30, 0xe934afed, 0xb8eb67eb, 0x4bce20e2, + 0x0c319f8e, 0xf55719d6, 0x7ef41151, 0x3f5a961a, 0x1c24d22b, 0x764364e7, + 0x02fff33c, 0x4f6c9f4c, 0xd2737d40, 0xfff7c167, 0xd774f0d9, 0x210f068f, + 0x0b33e48d, 0x96da73e8, 0xddfbfddd, 0x5e7083ca, 0x0929f882, 0xbf815f89, + 0x5fffa569, 0x0afd001e, 0xf5fad758, 0xf9bf7906, 0x5dbe787a, 0x4efd1e37, + 0xe18cf6d6, 0x4ee5eebb, 0xbe34c720, 0x8bfbf4a7, 0xbcbdbfba, 0xb7ad5ac1, + 0x75741363, 0xb57a536f, 0x7f85aece, 0xcd5ee180, 0x5584b009, 0x26d86ca8, + 0x3f03d7d8, 0x24e086ed, 0x7b1c2ff8, 0x9112d2af, 0x4b8a323c, 0xc2e9f00b, + 0xcbff1a31, 0xf54cfeb3, 0x44b789d4, 0x2e467202, 0x3af2a851, 0x3d2ba3fb, + 0x22fad131, 0x71b0b6b5, 0x5bac0979, 0x15b95e27, 0xa4c590fd, 0x71fe09d4, + 0x83cba919, 0x6269ed78, 0x3cf9062a, 0x8e73de4d, 0xab479288, 0x173ce120, + 0xf1dbd7ad, 0xd5d7bfd4, 0xebebd597, 0x29edc94b, 0x74bf6fb0, 0x1c024883, + 0xfb7d0de8, 0xfb0bbcd7, 0xd7aa465d, 0x41bdbac1, 0x42d9eb64, 0xa8321117, + 0xedfcaade, 0xd016f3af, 0x71604bba, 0xfa1f6d16, 0xffe6449e, 0x4b370794, + 0xacff6d0a, 0x541dc471, 0x03efd103, 0xf2dd60eb, 0xb7b9ccbf, 0xf7e95dc9, + 0xc237e16d, 0x5d03d9ab, 0x3855c3f6, 0x25381b2a, 0xc81ec310, 0x67263814, + 0x102bbeaa, 0xc7b8ba5c, 0x3bfd4354, 0xd13253f3, 0xde6ed3f1, 0x628c2793, + 0x1ffe03fc, 0x9e4bb427, 0x5a7fd3ef, 0xfe0bfe97, 0xa3f7fda9, 0xfae9e7fd, + 0xed4ffa9f, 0xf817607f, 0xbfeac6e7, 0xbc2fb7f2, 0xa4faa7e2, 0x9dc7a5fc, + 0x2793ae84, 0x3714ba84, 0xb6c56fa5, 0xe7409dfb, 0x09df82e3, 0xc0227afc, + 0xac620717, 0x9c0a8f5b, 0xec518f1a, 0xe0ddc41c, 0x93ffb49f, 0xe314fdcf, + 0x136d5f11, 0x6b4f185d, 0x54cd8730, 0xef1aab0e, 0x58392129, 0x0feac23f, + 0xdea1e19c, 0xf2bfe7a4, 0x814f1e67, 0x29ca10fc, 0x8c297c6a, 0xd6d56cf6, + 0x7d608bcf, 0x947692f2, 0x3077e323, 0xd444c5fe, 0xf8a40b7f, 0x4e14edae, + 0x5578138c, 0x7f1b78bc, 0x4277867a, 0xd00bf939, 0x4113d417, 0x5df8de3f, + 0xaea76a99, 0xc7c91c11, 0xa3dff46c, 0x8bd068c9, 0x80485e1a, 0xcfb5a9d9, + 0x08e72afe, 0xd6d4eb85, 0x145c9cb7, 0x3a7934be, 0x9ff45c1b, 0xf5eee5bb, + 0xb7952b6e, 0x5b487b68, 0xd526e4b7, 0xb2b10ebe, 0x213b0c42, 0xb362a79f, + 0xc7d3f6e8, 0xf53c2f15, 0xcf1013f4, 0x3dd9a3fc, 0xfcbff688, 0x1c3fd785, + 0x77cbeb47, 0x6c25c988, 0xa52e761a, 0xfa5e3e93, 0x4edceaff, 0xe6ff947a, + 0xc61e4975, 0xd897df9e, 0x3be59749, 0x58644af6, 0x0c4c7c57, 0xf62295ee, + 0x1e09f418, 0xa17b0229, 0x4abfd9f6, 0xb13c6710, 0x59a92387, 0xf9b9f031, + 0x0007b475, 0x954f484f, 0x33f41d5e, 0x74a5efbc, 0xa46dbd01, 0x45bdf197, + 0x7e817eaa, 0xf282cf21, 0x21bb8bf7, 0x664fea0f, 0xeca1e037, 0x984e95c5, + 0x354217cf, 0xdf5ff3e3, 0xf1d0a29f, 0x8a7f44cb, 0xbcf64b0b, 0x201fc9ec, + 0xf77b2dff, 0x5f182907, 0x09ba4a22, 0x3a7f22d7, 0xa6c973cc, 0xa5cf3899, + 0x587c83c4, 0x14be6bf6, 0x8105e1f4, 0x2188ef14, 0xc9915627, 0x285b17c9, + 0xbf3ce971, 0xf2127f00, 0x03e3de83, 0xbeeed0db, 0xf83e8097, 0x6a173a81, + 0x82fd6031, 0x2febd185, 0xc040baea, 0xdfe68cfa, 0x00b40fad, 0x57f64e9d, + 0xc5df6152, 0x8abf044b, 0xed32ee0f, 0x52777f97, 0x9113a32a, 0x3bf53c85, + 0x844feeba, 0x8b7ef0e7, 0x747358a8, 0x59cb91df, 0x52afe39d, 0xc770a7c7, + 0x45fd7ac1, 0x35fb6c4a, 0x00f4d44f, 0xf8a3b75d, 0x99de4a2c, 0x907d6ffc, + 0xff26bbc9, 0xd0c56981, 0x9310fe7e, 0xd60ef823, 0x38570a43, 0xcef7db15, + 0x503f50e0, 0x9c963a3f, 0x3955156f, 0xf91bb7d7, 0x702fc285, 0x037c51f1, + 0x1d2224e3, 0xe965df70, 0x947dfa06, 0xb8c2f51e, 0x6afdaece, 0xf34cbc72, + 0x3ebd455b, 0x1e989b20, 0xf2aedee8, 0xc42a9e23, 0x804fd3c0, 0xf57952fc, + 0x62bf20cb, 0xcbffcc29, 0x9c3ffbed, 0xcbf6e54b, 0x7ab726a0, 0xdb946abd, + 0x48a39db2, 0xd2fdb92c, 0xe53126ee, 0x298f3e96, 0xf208f6b7, 0xbd69fff3, + 0x1871e1aa, 0x4ebaf1e0, 0xb27a6a3c, 0xf51a7c3b, 0x464141e4, 0x24f51abc, + 0xf2443bfd, 0xc6a3f2ba, 0x95ff1a87, 0x15795f3f, 0x3e0ea3e8, 0x83b0f8d5, + 0xec3e354f, 0xe1d5df12, 0x017ed8d1, 0x5c2869f6, 0xa71b2cf3, 0xa4aea51e, + 0xbee09da5, 0x1e0cfe4d, 0xe72d55f7, 0x2103cb09, 0x7e87e622, 0x051eaa64, + 0xbf84ea76, 0x87fa71df, 0xc479de14, 0x80bcb22f, 0xfeed113a, 0x8f2f974b, + 0xab99f3a7, 0x451e79e2, 0x974a14fb, 0x8e1702d9, 0x11ce70a3, 0x113e3f88, + 0xf91cb7e2, 0x798e0a34, 0xfc3afa65, 0xece9484d, 0xbff7a7a7, 0x5df29fad, + 0x5d2977cb, 0xc8441d3f, 0x388a50fb, 0x57cd10bc, 0x14ae80d3, 0x5c91de7f, + 0xa9ea0060, 0xe51a5088, 0x3228bd77, 0xc2ddf3fb, 0xbec0a3e9, 0x2c359fc9, + 0x60fbf19e, 0xaabd7bf4, 0x97eb3b3e, 0x9fcf41e3, 0x7fa3650d, 0x22e0f67b, + 0xd0bcac47, 0xbd9f2afd, 0xb4bbeeae, 0x9e3ab9d9, 0x691b7ff2, 0x6fc6fb47, + 0x316d92b7, 0x8a3705f6, 0xe956be9a, 0x3a78ff46, 0x0f956cfe, 0xe34fd0e7, + 0x36e8a373, 0xc109ca63, 0xf00e95d9, 0x1f9469f7, 0x0bf17df6, 0xddf80d7c, + 0x95148d6f, 0x9fdfb0c6, 0x6137f157, 0x9f98d7df, 0x17ca185b, 0x76858f00, + 0x7907175e, 0xa1d7934a, 0x35c02864, 0x3f3ddf61, 0xd8f9451b, 0x4377907b, + 0x7437ae3e, 0xf0c4f246, 0x84f88d87, 0x3ccec1fe, 0x5f10ba22, 0x4ba5881f, + 0xcc1faf00, 0xd7d812b4, 0x57725f7c, 0x817382c6, 0x7337ad99, 0x9185e948, + 0xf87dffdc, 0x08e59fcd, 0x9c7c5017, 0xefbcb3b5, 0xe4c7fcae, 0x0b8bacfe, + 0x87c070d4, 0x7327ab3c, 0x15a38801, 0xc6cfcf11, 0x37ef2873, 0xfcafeb45, + 0x402f69a6, 0x88554f5e, 0x7b689973, 0x80911095, 0x3b4dbd8f, 0x6fdfb004, + 0xf1828995, 0xd87aa108, 0xd7b8a88c, 0x7c405111, 0xdcdbffed, 0xe7bf00bb, + 0xc0099866, 0xe33d0ca5, 0x5ce03b04, 0x41ca0468, 0x83faf377, 0x142d4c8f, + 0xfc821fa1, 0xa287e461, 0x3eae9b64, 0xe7e92273, 0x609b74a6, 0xc774ac8e, + 0xc4ad5fa0, 0xfad7acf8, 0x99fff2cd, 0xf54f1b7e, 0x316be31b, 0x2addbf5a, + 0xd28fbe31, 0xf4b1a96f, 0x391a8adb, 0x4562f815, 0xd02a7673, 0x4b9bc575, + 0x6fd2c4fa, 0x7f98f86f, 0x679aa6ff, 0xea8fd6de, 0xf4a3ebb7, 0xdfaa3f5b, + 0x4775c462, 0x6fd4bd49, 0xf919ff96, 0x5bf4037b, 0xab16f98c, 0x5bf4d3f8, + 0xf506a871, 0x5e3f715b, 0x93752f97, 0x5b7e93d4, 0xac4cf8f0, 0x0c5b6e8b, + 0x82bc01fe, 0xd5537b7e, 0xe80e3073, 0x5c977fb9, 0x55cf4adf, 0xfdcf56f6, + 0xd359e10f, 0x73fa2b73, 0xe574cf68, 0x56e7a643, 0xb73d3164, 0xb9e999a2, + 0x9e988315, 0x82b7ea33, 0x7d8dfa2e, 0x7e84355f, 0xd6647e8f, 0xeda4eeaf, + 0xb745b325, 0x225fbe85, 0xaa33e76b, 0xbbeb4547, 0xd1ba977f, 0x7833ee77, + 0x7d27a5ce, 0xbbe80ef7, 0x06c7a841, 0xf9191c82, 0x368196e3, 0x07dd3e5d, + 0xfe7b1f5f, 0x3f979025, 0x7f7fe8f0, 0xd27e6264, 0x8d8faf9e, 0x00fbb900, + 0xeefaa1e0, 0x5aff9559, 0xa7d47e7d, 0x79328713, 0xe18fbcaf, 0x6391aaaf, + 0x07c55df3, 0xfe075864, 0xe8fd1176, 0x1f999abb, 0xd2dccb3d, 0xfe7e06c7, + 0x2e5112ff, 0x82c95fe9, 0x7d987e28, 0x9ee31cb1, 0x5b9ce33b, 0x2d9ccfc0, + 0xb1d80b10, 0x72de0ff3, 0xf9d7ec02, 0xdda3d717, 0x279e1f3b, 0x8fbc8e92, + 0x527a1d39, 0x6dcebf6f, 0x067af1da, 0x310f9ae9, 0x32e8ccc1, 0xd8172561, + 0x3f35d59c, 0x9865da82, 0x93cc62df, 0xff3abdf8, 0xf1047c59, 0xdde1de45, + 0xcfc862db, 0x72788def, 0xae54bc33, 0xaa78f5e2, 0x89e262e6, 0x4164ba52, + 0xee5e274a, 0x2eb2397a, 0xe1efda03, 0xce32dfd0, 0x719bc35b, 0x351e1afe, + 0xfabe66ff, 0x91d0bcfe, 0x1a227998, 0x8be4bb9e, 0xe0377868, 0xcf4d6de3, + 0x8186475c, 0xf2647e5c, 0xf0146cfc, 0x8c79efd1, 0x6731deeb, 0xd2bcee90, + 0xa65e2a7b, 0xa6148e78, 0x524780c8, 0xb7367c0d, 0x29ebc76c, 0x29b77e74, + 0x5210b959, 0xc937f99f, 0xfd88f103, 0x83d476d6, 0x348e1f1a, 0xab30b933, + 0xbe83e57a, 0x6f5c42ae, 0xca17389a, 0xe7a0d857, 0xef333cd4, 0xf6fe4c7d, + 0x975d7f73, 0x0cf11231, 0xd22905cb, 0x0ba02bd6, 0x1094e7fd, 0xe8178ba3, + 0x9539ff42, 0xbc001fb4, 0xee732557, 0xb4dfbc30, 0xa7e07ee3, 0x39f4ac37, + 0xe71979c8, 0x61d0c2de, 0x22b94f4f, 0xf8b10b1f, 0x79198318, 0x7ce7eb9d, + 0xabb12f78, 0xdcc1327d, 0x31c001f2, 0x66cdca81, 0xffa01878, 0x68dfd145, + 0xa0f918bf, 0xeea07ca7, 0xc5573df8, 0x07401bf3, 0x5dbbe03b, 0x1bc87b02, + 0xd68feb66, 0x42e415ee, 0x87469bc4, 0x8cbeba26, 0xc5307464, 0x5a6df3c0, + 0x37b3c55d, 0xfdf089c4, 0x26ffea64, 0xf7ebb071, 0xdf8d01f5, 0x3c5772cd, + 0x3d215c41, 0x7e806f4a, 0xacd7de8b, 0xf1177a6a, 0x6a2acb75, 0xf15dc99e, + 0xf407d1a5, 0xd6f095e0, 0x1d34fcad, 0xf6179989, 0xa467e56d, 0x7b3f2f59, + 0x5d6fedac, 0x66b5710f, 0x090af50e, 0x07e2e825, 0x6ecccc33, 0x20f56fd9, + 0x29bfb79f, 0x5dc8b7ba, 0x9524cff5, 0x44afe02e, 0x089c4f9f, 0xe9bd0113, + 0xb4cf92b2, 0xfc600f79, 0xbc1ebd16, 0xfd20f561, 0xba7febba, 0xddbfd999, + 0xfd5a63d9, 0xf20f1866, 0x78fd651a, 0x8b48f5c6, 0x2f34f52b, 0x77ee3a8f, + 0xce36979d, 0xf097ddb7, 0xc78c1692, 0xbb13fb69, 0x114ecf79, 0x4e62c7ec, + 0xb5e3efd0, 0x3fe6fee3, 0xa4dbffa1, 0x0ff7dd51, 0xc530a3f1, 0x9fdb1bf3, + 0xe9f638c2, 0x054c8ee7, 0x2afe59f9, 0xfe542c4f, 0x483bb75a, 0x4889e598, + 0x37942760, 0xf9c60af2, 0xf4de7085, 0x7a833b28, 0x2f1f0c32, 0x95ef5039, + 0x4a0734ef, 0xafe5f7e8, 0xf103967c, 0x4c35d6b7, 0x539ff9ff, 0xc91fd1f9, + 0x72807c81, 0x1bcfed81, 0xca98f3e9, 0xd976a79f, 0xe6fe8366, 0xde39d81a, + 0xd12ce0f2, 0x7867151c, 0x38b22cd0, 0xe61b2ef7, 0xe59ffb61, 0xe0198f30, + 0xaa473e8b, 0x7a9e87e5, 0xf2e5e996, 0xe7003126, 0x761bcb81, 0xbc5c42b4, + 0xed19b0fc, 0x19c36f57, 0xf89bd7dc, 0xbcec0bd2, 0x8baf1371, 0x43897687, + 0x3361f036, 0x2b1acfc4, 0xfad00f51, 0xd507ac11, 0x8cb7dfb8, 0xa97f2d93, + 0x453f15f9, 0x3cdff2e1, 0xc173c4e3, 0x189cdb2d, 0xf2b86c8f, 0xb89740be, + 0x3541f063, 0x0be538ee, 0xec43eb82, 0x9549e3b8, 0x7d66424f, 0x243491dc, + 0xc2923c61, 0x231a5799, 0xffc1d17e, 0x12785c2f, 0xed4ecdf6, 0x8049f2fc, + 0x739be2bb, 0xe284fe4f, 0x17202a93, 0xe7dedbac, 0x067dc03e, 0x550fbbed, + 0xecfad27d, 0xd34fb833, 0x1bb347fa, 0xfe6d6b7a, 0x29f61322, 0x9d7c775a, + 0x55dc7102, 0x5fd093cd, 0xc4f2f55b, 0x1fc31254, 0xdfe04ad0, 0x89f62f40, + 0xdfdb748c, 0xe0133fb8, 0x0ee94d3c, 0x3c4777eb, 0xe2c95839, 0x471ab2f4, + 0x5f7b1ede, 0xb8dc4bae, 0x376dfa71, 0x28de3ac2, 0x8bd265ba, 0x4a21f1f8, + 0x417bebcf, 0x3eeaedc7, 0x15ca7041, 0xe1a7c7e3, 0x175e941f, 0xfc38facc, + 0xff25c685, 0x35b404f9, 0x3f1b7526, 0x7f02f70e, 0x5edfbeda, 0x202c42b3, + 0xc79f3b47, 0x8fd03db8, 0xf5a41efa, 0x10990b85, 0xb62e3977, 0xd7f98ddf, + 0xa3cc66cd, 0x08fe6f2a, 0xe5f5a9e5, 0x8d5f7177, 0xad6ffba8, 0xed8fe3a4, + 0x9d3ea893, 0xc583ab77, 0x403a559d, 0xe2765a5c, 0xccfe3573, 0x4b8b5af8, + 0x1e8f1777, 0xf6c01963, 0xc8fdd5df, 0x967fadca, 0xcfde2188, 0x1d7a018d, + 0xaa3ee2b9, 0xe0170786, 0x7ef47461, 0x7ff8ec4b, 0x818b7ec7, 0xb04f406e, + 0x53f63ac7, 0xc41fbd68, 0x47dc03d5, 0x5aeff6b1, 0x9a7db337, 0xde763156, + 0x32ffb6a2, 0x77d862c2, 0xdf6ef409, 0x7c79a7a5, 0x83653c5b, 0x2ba7da13, + 0x8a5d4ebe, 0xb0efdfad, 0x01bdea70, 0xbf5f71df, 0x0de63382, 0xacbe04cc, + 0x81223c6c, 0x6fada53d, 0xa94f7cda, 0xe7a9f3fe, 0xb2273c78, 0xf51fb82e, + 0x547f51bb, 0x34371611, 0x61665bc2, 0x89aaab7a, 0x76a71fad, 0xda76023a, + 0xbb7da9cf, 0xb6abaf90, 0xb4fc911f, 0xbf0d03bf, 0x79512291, 0x047eb056, + 0xf53fe0a2, 0xb61cdee2, 0x75fcc4bf, 0x543f38e3, 0x6286f1c7, 0x7edde38f, + 0x72ce3746, 0xe762507f, 0xde3cae7e, 0x05994149, 0x116c9dfd, 0x9ffde409, + 0xb1c5f20c, 0x58e656f2, 0xc59e2d44, 0xa3ae87e4, 0xc1d30e78, 0x89f25dce, + 0xabddda12, 0xc30e631c, 0x0e55ff79, 0x45f88649, 0xe3cb0d6d, 0x7737fda9, + 0x36bbd01a, 0x8fdc0ee1, 0xd7e033ab, 0x87caec95, 0xb0ab86b8, 0xabb02474, + 0x2824ef51, 0xabfc1d26, 0x32a9c51c, 0x6aad7385, 0x8dc111a7, 0x677942e7, + 0x87cc3151, 0xd65c9977, 0xa20efb18, 0xa27894bd, 0xf4ba22f0, 0xa5c938e7, + 0xa3f43211, 0x5854dfe5, 0xa3600e5a, 0x6314c14b, 0x377b0c61, 0xe70b867f, + 0xf55db6dd, 0xbb22141f, 0x191e5852, 0x3b6d23ac, 0xf5c873e3, 0x285121f8, + 0xe7d4da3f, 0x7bbdf6dc, 0x75ad2f41, 0xca812512, 0xccaac519, 0xd679c367, + 0x1b2e16e1, 0x7fccf4f8, 0xb5fb4abd, 0x2bf47886, 0x3e5aecda, 0x720092a9, + 0x630f2366, 0xf2b020de, 0x384ea4e5, 0x0484f98d, 0x4fba895e, 0x476f1263, + 0x26ece87f, 0xc9e01f16, 0xcf1abfb5, 0x002473e2, 0xcbebabf0, 0xb3ce1572, + 0xf0c3b884, 0xc60776fe, 0xb9bd9603, 0xe807e508, 0xa4af8d10, 0xd7b9fd62, + 0x0733ab7a, 0x568d99fc, 0x2bf1afd5, 0x66ce702d, 0x9f6fdab1, 0x58b9fd52, + 0x907e862a, 0xbcaa25d7, 0xe8b4b97e, 0x79a3e620, 0x4f9ea296, 0x373fad9d, + 0x12d3cc6b, 0x0727ea88, 0x25dcff98, 0x3369ab6f, 0xdfcc6dc2, 0xafa0de5a, + 0x04fc786b, 0x8035e6f4, 0x52bf624e, 0xfc47b01c, 0x6aff0646, 0x8f6fc8fc, + 0x1e9a735f, 0x8f5956bf, 0x2310db5f, 0x75f8f4fe, 0xd2f8f5b8, 0xf0eed2fc, + 0x7f463f1b, 0x855ff90e, 0xdaaad15f, 0xe95e2a91, 0x8525a95f, 0x3b806ca9, + 0x5ca3085d, 0xc328e518, 0xdfe0e61e, 0x350393fd, 0x81db95f8, 0x9d4d3dfa, + 0x7d98b70f, 0xe2390367, 0xca375e01, 0x04049c11, 0x1f236f3d, 0x81598ebb, + 0xcb919f58, 0xcf4f75d7, 0x3b5ed395, 0xb57e90b2, 0x7af7f809, 0xde7607e4, + 0x6a049137, 0xdd4e40b3, 0x83bf582e, 0xb17b8b3e, 0x10bef708, 0x7041e2f7, + 0xcb0b8bdf, 0x957cd447, 0xcf04a1b6, 0xe7c3060d, 0x3d3f4053, 0x153edb92, + 0x09779ef4, 0xf83d0529, 0x7e763883, 0xecb521e0, 0x7aa92717, 0x9bcdf0b5, + 0x2890fbe0, 0xb6f579c3, 0x20cb36d0, 0x78f137a8, 0xa1378a8f, 0xbf181aee, + 0xb8322435, 0x83025b16, 0x2cd20e20, 0x8badb8e2, 0xccb9e3c7, 0xc42dfb0e, + 0x42da45f2, 0x4517399f, 0xa6d6f3e9, 0x71035c5f, 0xd8a68dae, 0xac932a79, + 0xfeb7efa6, 0xede4bb06, 0xbcb2b24d, 0xd00647ba, 0x3b4d5479, 0x4cc3aeab, + 0xe9506e1e, 0x5bd2dafc, 0x872ffe70, 0x91d61938, 0x5bcefe22, 0x8e79d187, + 0xe35040fd, 0x395e2c33, 0x16bf7d52, 0xd7ea0bf4, 0xfa79f7ba, 0x8151d770, + 0x91bd39c0, 0xdfd14bd5, 0xf949d57a, 0x9e45f29c, 0x7c011c12, 0xc04a185b, + 0x1fbc737b, 0x47ebb413, 0xfe3a08b5, 0xd5d753cc, 0x179508bc, 0xeb0e5130, + 0x0446c7db, 0xe0141d83, 0x386ebf81, 0xd0be7fae, 0x4e5ddaaa, 0xbe7c0292, + 0x41cf12e1, 0x3b5b6bde, 0x70a1af71, 0x8bee2db7, 0x879db470, 0xbcb4bf53, + 0x5ac717c4, 0x195a57ef, 0x08946c5f, 0x971b33ae, 0xb8be31da, 0x55f9696f, + 0xf57fbeb0, 0xb155cf23, 0xe94791ce, 0x8f9678a7, 0x3193c4a5, 0x396bdfc0, + 0xf4baf786, 0xfef918d2, 0xfc6b3f1a, 0xfa75f1ad, 0xac4f38d2, 0xac6fc6bc, + 0x582b4ecc, 0xc093843a, 0xe1c3db5f, 0x35d6dc71, 0xbb9e2b9e, 0x193593f1, + 0xe9b78f00, 0x96ddda1c, 0xd93cec50, 0xf627560d, 0x5fc6badf, 0x3f7c7903, + 0x7a09c2a4, 0x377efbb2, 0x63f5bfa0, 0x77c2ca08, 0x7805ba96, 0x8589778e, + 0xb778816c, 0xbb7e9750, 0xe27ff803, 0xde1475e4, 0xb84d4a27, 0xdd146ebe, + 0x92bfbf08, 0xa83f8c10, 0x537edcf1, 0xf3e8e6c9, 0xf35a4fcc, 0x7a52b39f, + 0x2175673c, 0x6e3c925d, 0xff77e00e, 0x904eafe3, 0x668bb6ef, 0xd55f63a4, + 0x7bbed21f, 0xb6eccadd, 0x56ca7119, 0x25949ef8, 0x3db89ca3, 0x11e2f74e, + 0xc5026f70, 0x751c947b, 0xdf8fcfd2, 0x8ea87a25, 0xda24f0a3, 0x4497c84d, + 0x2e976451, 0x3947e94e, 0x8482e4d2, 0x6c790239, 0x42e55e9a, 0xe541d85c, + 0x1ec5a460, 0xb123bf06, 0x829bce8c, 0xd6162560, 0xaa708b5f, 0xe6365ce3, + 0xccbe53c9, 0x0451c383, 0x8890a243, 0xfa6bfd0b, 0x6bd3d356, 0xcbca0813, + 0x408547da, 0x9367ed2d, 0x7c42b110, 0x0b914b25, 0x5128d520, 0x78bcf190, + 0xf98232ff, 0x5fecb697, 0x2dd87427, 0x7f87e854, 0xb58fcfc3, 0x69c7c79f, + 0x01fcf2f8, 0xc1ce46f4, 0xde607df6, 0x3c6cadb8, 0xb416ebf7, 0x87f43bd3, + 0xa9158f6a, 0xcfd8efeb, 0x209f2c4d, 0xde89137c, 0x0fea3367, 0x7b193ecd, + 0xec0d6463, 0x23fd8d17, 0xab769383, 0xd4a377c0, 0x13e876f9, 0x1d1cdd75, + 0x7e84faa2, 0xb11a1b9f, 0xcac1ee1f, 0x71c998fd, 0xd0727d17, 0xbefe03cf, + 0xf2311eab, 0x9530f0c5, 0xa87db54b, 0xb869f70c, 0x7ed0ea3a, 0x9277a0c6, + 0x454c8da7, 0x37e5573b, 0xf9359e23, 0xee7dca36, 0x337ef76a, 0x91f98b83, + 0xd7087186, 0x0d9c8709, 0x1e6de97a, 0x7cb6fdec, 0xd70a078a, 0x28fe412f, + 0x07ce12fd, 0x37fcc326, 0x82b66e84, 0xf5e77c9c, 0x8ebf4424, 0x867ed3ca, + 0xf5c7c4f7, 0x09c4f5c1, 0x7bdaa878, 0xc24f5d5e, 0x390eef48, 0x1d1272a0, + 0xdff8d12f, 0x7c9aefc8, 0x1bc5c2d4, 0x8ece78d9, 0x73cb3ac0, 0xc60cbc41, + 0x00b9364c, 0x5dbd9aaf, 0xc4b7daab, 0xdff68e9f, 0xd751172a, 0xf000cca3, + 0xd9a8ad49, 0x744b6eeb, 0xa3956a7c, 0xfb4af520, 0xd48bdea9, 0x673a8b3f, + 0xd1da15e3, 0x945ef37f, 0xc677f9f0, 0x2285135f, 0xd1bf874f, 0xe2baa371, + 0x108e3e2f, 0xffd85f76, 0x6e9bf3f3, 0xe4078fe4, 0x40ddf9ce, 0xa846af3c, + 0xb95bc8fe, 0xe326d6be, 0xf2d28727, 0x6d05eaba, 0x3d3bb3ff, 0xd1f79460, + 0x31fb7515, 0xbc83d2dc, 0x7e2a6d7b, 0xfa0e9909, 0xda985c6c, 0xe55d592d, + 0x3f3abcff, 0xbde18daf, 0xc1f68eed, 0x79eb4f20, 0xda1c754f, 0x0993118b, + 0x045d8aec, 0xdef71eed, 0xf7944ea3, 0xfadd2496, 0xf02ed5d3, 0xf66a7ca3, + 0x1a9766a9, 0x4bb0ebdf, 0x8b46f5d5, 0x544d728f, 0x4f3c285e, 0x00fc79c5, + 0xf98bad47, 0x15c070af, 0x5693d8f4, 0x97f02d4f, 0x0e25ce8d, 0x84864bf6, + 0x25bc58b3, 0xeecf93ac, 0x9066d1e4, 0x0fc520b7, 0xba7e7fac, 0xbae20dfe, + 0x5c4c6787, 0x6a978302, 0xfa6fb021, 0x583611e5, 0xf1fcc115, 0xfeec397e, + 0xecb97e9a, 0x71cdccbe, 0x62d97ecc, 0x96b49f28, 0x12f3013e, 0xe737e205, + 0x01b8777e, 0x3e438854, 0x03d4a715, 0x0ac52c3e, 0x45c323ce, 0x77a51cdc, + 0x20e41086, 0x42b1226f, 0x91fc58e6, 0xd23fee74, 0xe44a32fe, 0x8c8fe07c, + 0x8dcf0481, 0x149d8066, 0xc6af4e83, 0x5ecfdf89, 0x0e72ec6f, 0x7e5555e6, + 0xbe74480e, 0x1cec2549, 0x87dc474c, 0x6df80f82, 0x9381dc75, 0xf6c0bd6d, + 0x0c09fd59, 0x0dff46cf, 0x12f30608, 0x12fdfad4, 0xe889ac11, 0x7f81f95f, + 0xfa0b26fd, 0x0ee23657, 0x28fdbe82, 0xd767c58e, 0x50f5ee71, 0x6ed0b9ff, + 0x347e7b81, 0xe1e4d1b9, 0xbbb7f191, 0xf3aafa05, 0xe039b3c6, 0x78b952fb, + 0x3adcf00f, 0xb5e0ecfe, 0x4cf69338, 0xaf0a77c6, 0xe8d7b7cb, 0xe8ea24d7, + 0x4ab88567, 0x48779eb4, 0x6f6ec043, 0xe0dce2e5, 0xc3deb557, 0x8b397831, + 0xd0411e7a, 0xc6cd33cd, 0x553691fc, 0x2e3dfe7f, 0x5b51f90b, 0xd6fce84f, + 0x30d7fc63, 0xa8738e8f, 0xc6a77386, 0xd969a973, 0x74a0711d, 0x952dc7cc, + 0x72332ee0, 0x3b436436, 0xcf6cebce, 0x4bce3124, 0x31ac46a6, 0x256b05cf, + 0x80d7dbc5, 0x3ab154b7, 0xea71f401, 0x188f4c5d, 0xf9c6d1f1, 0x7d801f87, + 0x31883fb4, 0x32b451f3, 0x84d6ed2d, 0xb4fdf4c5, 0x6a58c9f4, 0x42edebcf, + 0x9262b8cc, 0xe77efb8d, 0xc589eb26, 0xd9266fe0, 0x3da77f68, 0xa0a87def, + 0xdc63b7f8, 0xe18e3ebd, 0xe18e3ebd, 0xf0d25ebd, 0xfc83c729, 0xbaddd675, + 0x3e0da7bc, 0x7900824b, 0x9474fe88, 0x462e25cf, 0x15f7ceef, 0x10fa6fb4, + 0x501cf265, 0xb2441b12, 0xc59ef90d, 0x21f3b487, 0x9b3df4bf, 0x6e52f900, + 0xefea965b, 0x137d185b, 0x37e7dc18, 0x5371c24c, 0x60eb1ac8, 0xa5a5e78a, + 0x8dc43726, 0x93fc2f4e, 0x2f4c8e13, 0x03c968cc, 0xf3854879, 0xd3bdf491, + 0xf30dc7bc, 0x8aa7ae4c, 0x05f1892a, 0xd3a525c8, 0x5cefdc64, 0x77998a60, + 0xf6c6da3d, 0xb9c68f4f, 0x9b4b4cb0, 0xacea748a, 0x5f802497, 0x2a53e462, + 0x478be9af, 0xa6639e76, 0x62d8a37c, 0x489b5bc8, 0xdf5c389a, 0x64af88c2, + 0xbd559d8d, 0x324bc9ad, 0x5bec21c8, 0xaa3d5295, 0xfa8079d1, 0x45c60a6a, + 0xbd0b8ff1, 0x1bf835f1, 0x500b1bce, 0x44726a2f, 0x6f3d3086, 0x151bbd05, + 0xfe6b6d0f, 0x3bec3fa8, 0xe76ff27e, 0xf4efb01c, 0x01dda117, 0x7df8f67a, + 0x1ce03bef, 0xb1f727d3, 0x06ddc8b8, 0x8d916d3f, 0x5b26ffe9, 0xd7985ce9, + 0xf23fdf7c, 0x4afc513c, 0x93fdb356, 0xe1bc027b, 0xdefebbbc, 0x9260caa0, + 0x3f211ee1, 0x8852b5e2, 0x68dfd71d, 0x7b96f163, 0x32966fb6, 0x53df1864, + 0x571fe301, 0x8de3d0fd, 0x0d2afeec, 0x87db859e, 0xfd9be04b, 0xf7566425, + 0xb6445bdf, 0xb025287e, 0xf151e67f, 0x80f38466, 0x92f6af7a, 0xcc7e59c7, + 0x6ad63a02, 0x213d87aa, 0x38c3de76, 0xc89f258f, 0x7894a945, 0xd0e41e4b, + 0xeff786ef, 0x6799eba3, 0xcfb803f5, 0xd7679c66, 0xf4147d7b, 0xf4a996cf, + 0x5db79e36, 0xe0fb6216, 0xe507898b, 0xdbf9cbb3, 0x63173b10, 0x3d9e378c, + 0x3c036d98, 0xc6a6dcfc, 0x68c8f313, 0xf3bdb738, 0x2bf880e0, 0x4a7d5bdd, + 0xee0a2fbd, 0xb8f286ed, 0x1739608f, 0xef8a408c, 0x45bbd08a, 0x4d555fc0, + 0xb43ef03b, 0x2a8fab6f, 0x909c2743, 0x25e9ad4b, 0x036e876a, 0x9cc5923a, + 0xdaad3ece, 0x7e624e7c, 0x9dcfc335, 0x013bf3ea, 0xef90391f, 0x3c74ff2d, + 0x159df7a5, 0xfbe8f9e2, 0xe9b05ed2, 0x3b7be1f7, 0x959e6d5f, 0x3695feea, + 0xcfdf237f, 0xf170f955, 0xfaeb69d6, 0x36d49452, 0x9ea9917f, 0x41f3c38b, + 0x232d5f1a, 0x31e945a5, 0x67a347f8, 0x7e849f07, 0xe8d1f386, 0x816eb8b8, + 0x9a7f6f3a, 0x06987fba, 0xdf2329f1, 0xbb2e74f4, 0x82648c55, 0xa2f91b3c, + 0x4ffb9bb5, 0x3d98db76, 0x8a5658b1, 0x73526f40, 0xca2b9d77, 0xd42e399e, + 0xc809f81d, 0xe7c656d9, 0x9c0f7a1d, 0x6fe7d060, 0xafdeb889, 0x70a9c870, + 0x6bd21fdf, 0x9823e42c, 0x369ef0fd, 0xa29f31ce, 0xdf01140c, 0xf49e58c5, + 0x07032a95, 0xdd2fb675, 0xf609ce78, 0x8210db76, 0x8756a271, 0x6d2fde1e, + 0x2f89ea3c, 0x08547a55, 0x19fcdf2d, 0x16d6d474, 0x7638b3cc, 0x5d338d49, + 0x9ac71732, 0xeb6764a7, 0x35ef5128, 0x3b955bbb, 0xaf998fcd, 0x10eeefd2, + 0xb85f3fdb, 0xa3d21a69, 0xeaa5be4b, 0xe4682cff, 0xe918cf50, 0x337dc4b3, + 0x0a2d9fe6, 0x5df7e3e4, 0x461e45e8, 0xe6e91bba, 0xbdd8bbb5, 0x04b5426d, + 0xdb1dd8f7, 0xe37ee1c4, 0xe2f46ef2, 0x5be9bb4c, 0x8f38c7cd, 0xb65fe0ee, + 0x5f5d66b5, 0x2e1ff302, 0xe11b9f01, 0x84bfe6d7, 0xa92f4c28, 0x5e6eedf3, + 0xcb137224, 0xf9d750cb, 0x0a9ce07b, 0xcc3c97ec, 0x356dfcb3, 0xafc1a4ee, + 0x479c6bc1, 0xe7815f11, 0x79eada09, 0xdbbec3cc, 0xbf07581f, 0x5af77027, + 0xeedbd70e, 0x11e9a4e8, 0xaaa77f6d, 0x69e60169, 0x603f6879, 0x4c7db6b7, + 0x7ac4bed8, 0xeb75ef0e, 0x96219e96, 0x3d1dd49f, 0x5b746109, 0xfe06e94c, + 0x12fbd766, 0xd18195f2, 0xc98142fb, 0x7de8c0ca, 0xfcc4122a, 0xd30de594, + 0xed8bcf74, 0x93de3d7a, 0x84ea91fc, 0x4d2cf198, 0xd3f934de, 0x976bd1e4, + 0x04297d99, 0x0164640e, 0x7f451e7e, 0xd9e7ea86, 0x625f7576, 0x6aa57d0e, + 0xbedd39e3, 0x8c3192c4, 0x12f84b5e, 0x9e9dde7c, 0xe9d078a5, 0x7d7685e9, + 0x9df7c5de, 0x4d0f368f, 0x19f9b44e, 0xbdf8c4e5, 0x3c5a1e91, 0x231748cf, + 0xf04e003d, 0xb66ede2b, 0x3850d605, 0xdc18e6df, 0xc22b66fe, 0x51369add, + 0x559a7381, 0xfcb0f3e9, 0x0e987c03, 0x8d6960f6, 0xd543fd1d, 0xbbd91aef, + 0x6aae4438, 0x556cbd87, 0x4e73b046, 0x27c049a5, 0xd3226a13, 0x1e422e2d, + 0x22e6f87d, 0xc27f6fb8, 0x10e991a3, 0xe1fc7f7a, 0x2dbeacc9, 0x0dc5bef2, + 0x5adff7f7, 0x83eff784, 0xfbf1817e, 0xfbe0d995, 0x73c4eb6e, 0xdeccbae5, + 0x9d2e691f, 0x66adeec7, 0x1ed415ed, 0xaef5d0b3, 0xd7e0d0e2, 0x5a2b7e40, + 0x0e218a4a, 0x77110154, 0x2a55deba, 0x872db0ce, 0xe8e3f3ad, 0x9e6d877b, + 0x175fc8ad, 0x58bae2d7, 0xf9404871, 0x3c590722, 0xb573a056, 0xc6d6efd2, + 0xe298bb51, 0xc5a26d77, 0x7d307e0d, 0x78ff07ee, 0xcb22a26d, 0xfa35cf51, + 0xc70077c1, 0x1fcb135a, 0xe0e6fbd8, 0xec15c8f8, 0x523ebd80, 0x7ecbfe02, + 0x634b059f, 0xc2e4be7b, 0x26f91bf3, 0xb6311f16, 0x61e9a3bf, 0x5f006722, + 0x50941d54, 0xec0fe1fe, 0xe4c24acd, 0x73b08aa4, 0x08879567, 0x3aa9b39e, + 0x6ce78458, 0xa7c21ce0, 0xaff03d3a, 0xc9d36739, 0x054f0c57, 0x44225702, + 0xb7685b8d, 0xaa7ceaea, 0x87cc0869, 0x386e71f0, 0x9867c227, 0xf9d277aa, + 0x92d157f3, 0xb97043e2, 0xa66fb879, 0x1e04e26e, 0x55aacbee, 0x35a9a3ef, + 0xdaf0f3b1, 0xfc554778, 0x475f6568, 0xf740a7e9, 0xe4b4efd3, 0x09fed8d9, + 0x7cdad1fa, 0x7085396b, 0x4ebd9fe0, 0x6e42fcf0, 0xf80fd932, 0x0c6511b3, + 0x48e49bf0, 0xf6cdf154, 0x065fe9af, 0xe9b36e94, 0xf7e53237, 0xe3fc3ebf, + 0xd827b822, 0x995a6f1d, 0xed97eb45, 0x30cf563e, 0x2ca2cb9d, 0xacfc39cc, + 0xdce99d7e, 0x1de75a00, 0x1b0eac35, 0x13e174ad, 0xfc8a6b1d, 0x951c6143, + 0xd72bb7df, 0x260b7f01, 0xf611c716, 0xa39fb849, 0xa5aca7e5, 0x28fc033c, + 0x97166439, 0xde7829a9, 0x02f27106, 0x897c8645, 0x47bdeadd, 0xf0d4b5df, + 0x784cdbca, 0x8094181f, 0xe183877f, 0x690ba353, 0xbc83ae54, 0xae54125d, + 0xbebc7d83, 0x01cb8f0e, 0xb76f13fb, 0xde7d004c, 0xf29fdef8, 0xabf6fef0, + 0xde233f58, 0x9d233ea6, 0xf6dfe9cf, 0x2fbd1cdf, 0xdf91d7de, 0x64a3be07, + 0x9395fb40, 0x2a4ee45d, 0x910ab587, 0xaff06ca5, 0x2364fef5, 0xb0e9fa61, + 0x03bfb4ad, 0xd71849f5, 0x8f76d5b1, 0x9fa3750c, 0x7b125a4c, 0xe5276795, + 0xa1fdc6ac, 0xc3a68cc4, 0xf85d610b, 0x8497bb1d, 0x37cc1453, 0x7ee3a97d, + 0x28718236, 0x4373891b, 0x49b8989c, 0x8d453f9a, 0x5f1899a7, 0xf945e725, + 0xe87ceacb, 0x179085f7, 0xf2c6da3f, 0x78fce819, 0x89c3afd0, 0x8808e58c, + 0x4903658b, 0x4ddf583d, 0x427f8782, 0xcacc7ffb, 0x069651e2, 0xce378ba2, + 0x74bb3077, 0xf76453bd, 0xdbc189b7, 0x3b88aec1, 0x57605c43, 0x125afdb4, + 0x705e3f70, 0x74fb8add, 0xd7184c07, 0xb80c467e, 0xfda87f60, 0x42de411a, + 0x536bfb3a, 0xfbf5aee9, 0x035f2498, 0x399fbe71, 0x7c99fd59, 0xeddb7982, + 0xec00a427, 0x586626df, 0x47e3a3aa, 0xdecc1db3, 0xdc15766d, 0x767880ee, + 0xf1811c73, 0x3389ef47, 0xdf9e3d01, 0xbe056b9e, 0x44700978, 0x766890f1, + 0x25fd0bdd, 0x66f0a39e, 0xcf9673e1, 0xe3c3c82f, 0xddc77e29, 0xdee19762, + 0xc1ac67ac, 0xf54f305b, 0x13de1305, 0x9ee492fc, 0xce97f506, 0xc3d02eca, + 0xe30564cf, 0x982f3e70, 0xc52f3e70, 0x82bb5fb5, 0x10d0fdc2, 0x6c12df16, + 0x2cfd0044, 0x7be40a98, 0xf9514fc1, 0x4fd7d358, 0x18f472a8, 0x82dcf047, + 0x3947ca60, 0xda87f2d2, 0x0fe609da, 0xc2d199f5, 0x4dc73f03, 0x614ce2d3, + 0xe343e21e, 0x73da094b, 0x9e22ede3, 0x65fc816b, 0x4136df38, 0x3e13c3d5, + 0xf96128ae, 0x7043eec0, 0xbb7ee78f, 0xba981f7a, 0xca9379af, 0x08923727, + 0x37eda16f, 0x70ee245e, 0xaf9fdc16, 0xda787fdf, 0x524e5f60, 0x5dda57fb, + 0x9f38f085, 0x49bfede8, 0x602745f5, 0x8a202c3d, 0xd134fc00, 0x3b076862, + 0xeef709d2, 0x77af9feb, 0x2652f6a8, 0x5bce8cc9, 0x269df6d3, 0xa23743f1, + 0xb92c5afd, 0xec3b2f01, 0x0f9047ca, 0xc9116fe0, 0x4f90e295, 0xe17e58fb, + 0x02368b90, 0xfe521457, 0xae7cc3b4, 0x5bf3afad, 0x1dafbce9, 0x3e07fac8, + 0xf572fd04, 0x409393af, 0xe9518fdf, 0xdf1a95a5, 0xe2b97f01, 0xaeb97f19, + 0x6dcf94ef, 0xd3cf160e, 0x0ef80de4, 0x062dd9fa, 0xdfdac5e6, 0x0dbafca6, + 0x3b0ec6f4, 0xa7ee3f41, 0x20d996e9, 0xa738da67, 0x9636be54, 0xec566aeb, + 0xf279df85, 0x46eb605f, 0x528bdf61, 0x949fbaf4, 0xaf77fcc0, 0x2a7d375c, + 0x45d99de4, 0x514b2bcc, 0xf34541cf, 0xbf147a4b, 0x6ad77c68, 0x8d217167, + 0x7aee267f, 0x13e7879f, 0xcae2102f, 0x8afe1d22, 0xfc133fc6, 0x9df7dc61, + 0x627f9840, 0xdd9d9fe4, 0x79fe4ff0, 0xd5bd0059, 0x320e7f85, 0x6f8ee9fe, + 0x8f783f68, 0x5a7f9185, 0xd0ffaa1c, 0xc25cff2d, 0x9aabfbf3, 0x7f715e27, + 0xcfa7c9b2, 0x63963547, 0x95f3b16d, 0x77de2a9d, 0xe6b77549, 0x6298de80, + 0x04f5e762, 0x853b7192, 0x769c5777, 0x36757e4f, 0x4c0877d4, 0x9908ed0f, + 0xb0ed0f51, 0xaf183c7b, 0xf3b0b34d, 0x022782aa, 0x7ddc0fe7, 0xeff4722d, + 0x60ed3c8e, 0xf0c504e3, 0x1ec02fd8, 0xc1f1937f, 0x3cb92998, 0x2fa59ea4, + 0xe4617a66, 0xfc336971, 0xcea3dcde, 0x17a073fc, 0xc0770053, 0xbc254717, + 0xa8eaa957, 0xb7f1fa84, 0x822dde7b, 0xd796a878, 0xbbf77a3c, 0x7f100545, + 0xfb7e3276, 0x5a77cabb, 0x807c8f1d, 0xb3dc34be, 0xfce3b63f, 0xfc9efe95, + 0x9ca3e052, 0xfde376ce, 0xb638c1f1, 0xc88b325f, 0xfd310c22, 0x70fde968, + 0x1ef1999d, 0x766159f9, 0x21c66dde, 0xe47bec4f, 0xde30fe55, 0xefed4e67, + 0xdfd82764, 0x81ecb7cf, 0xd99108d0, 0xaa941dba, 0x467e63af, 0x93f03675, + 0x47f88726, 0x64fc17f1, 0x0c77ee88, 0xd1ebaae6, 0xdd816ec3, 0x70911547, + 0x8467f21f, 0xd754177d, 0x16675cb1, 0xeabb97be, 0xe70079c5, 0x3f653288, + 0xc5c1a5d0, 0x939ff3e3, 0xe81b25b0, 0xff7016e6, 0x13ca2824, 0xdf3ae0bf, + 0x10e94223, 0xdddf6d3b, 0x8c046e27, 0x33d3a8ff, 0xa07609ca, 0xbe107ed0, + 0x772e3d1b, 0xfb71e804, 0xb049b5f0, 0x537069ae, 0xd9b78ab8, 0xe0d0e13b, + 0xfc64e01a, 0xc173a8f2, 0x7c03c028, 0xe9a97a07, 0x7c0b31c8, 0xb043f1af, + 0x83e30cf9, 0x3e00be28, 0x6e0be4e8, 0x3c35d43e, 0x41f9504c, 0xf9b3ffab, + 0xf46b8b42, 0xb71017c8, 0xbe277e70, 0x35780598, 0xe7b505f2, 0xb0c676ee, + 0xcb1282e7, 0x5f3e3493, 0xf7c7cf6d, 0x3cc112dd, 0xcac7b227, 0x93d0c77e, + 0xbf1efb80, 0xdb31b171, 0x4996393e, 0xaf72514d, 0xdaf5d993, 0x0f0ca6ef, + 0x0e7f6873, 0x4ee28aa7, 0xa1faf3b4, 0xf8ab749e, 0x0e38c723, 0x5cc517ee, + 0x43b00cf8, 0xaf6049c3, 0x8497370d, 0xda761e41, 0xfd806426, 0x9f1b6b98, + 0x657ff30d, 0x60b7aac8, 0x6fa57b49, 0xcab66fd9, 0xa695f69d, 0xddabf70f, + 0x9dfbe36a, 0x49bb7d6c, 0x409be761, 0xa1c347af, 0x26400fad, 0xcf0b8380, + 0xa1b65d32, 0x28450f1e, 0x38026ede, 0x72f61e28, 0x87ec11a4, 0x3c92937c, + 0x3ec0ec11, 0x6ce00161, 0x133afe6b, 0xa1259de2, 0xbc030e37, 0xabbeda25, + 0x6aefbf5b, 0x7b35b7b4, 0x343ff348, 0x7bf3497b, 0xf682aec1, 0x1773eaf9, + 0xac0acefc, 0xde0b616f, 0x59d8f09f, 0x95451af9, 0xa3ce8167, 0x6dc79d44, + 0xd2e105a4, 0xaa994fee, 0x20e4a3e2, 0xa07357f5, 0x1429909d, 0xfbd4530f, + 0xf5b8a653, 0x36dc43f7, 0x29fdf626, 0xbd3d3f5a, 0x6e375c6f, 0x7d3fec30, + 0x8fa0f2df, 0x7bf297dd, 0xc787f31f, 0x02fde00d, 0xb263bfac, 0x2e137dd8, + 0x52838786, 0x2bec75ec, 0x99c79e55, 0xfe703922, 0xbfeeef7a, 0x6fb9bae3, + 0x043fdff7, 0x09ec723b, 0xee1e4081, 0xe32313b8, 0x8c601f31, 0xf5a57c8c, + 0xd1bcfdeb, 0x1273d846, 0x0732fbfd, 0xd5ca3c28, 0xcb059f00, 0xf63d4f57, + 0xfcefe80b, 0x9f448151, 0x3c9228f3, 0x5f2e2103, 0xd0cefea4, 0x53d98e01, + 0xf501fb5a, 0xe2fe3df7, 0x2d11e2d4, 0x8aaf7682, 0x53ce8a39, 0x343efbd4, + 0x5e394eba, 0xe9c8427c, 0xfbf81f4a, 0xb421c467, 0x5519c3f8, 0x7ffd922f, + 0x3738f3c4, 0x802bde37, 0x1a737efd, 0x71a8944f, 0xd3d4cb27, 0x1c438a8f, + 0xdfec1a77, 0x62fecffd, 0xbf29e42a, 0xa3ca63cd, 0xade3b437, 0xf0b7a81c, + 0x3151ef31, 0xd0e6f7e2, 0xca8f78bd, 0x1f2678ac, 0xee3f8d3d, 0xd727ca5a, + 0xb309dd03, 0x3dd8f303, 0xeefa4624, 0x491ffddb, 0xe3dda191, 0x1bfa3bbb, + 0xa9eaf0e9, 0xeab7dc02, 0xbe461e89, 0xe9e743dd, 0x277e1abf, 0xf8fc42d5, + 0xac2ea93b, 0xc34be6bf, 0xdeafc6ba, 0xc092a7e6, 0x74f8d3ce, 0x9be31252, + 0x917ebbb1, 0xf49dec44, 0xbaede232, 0x97bf4678, 0xe25d9aad, 0x3e95399e, + 0x43ae9f7a, 0xd27ea8c8, 0xa5627902, 0x0eb3ac2a, 0x425da115, 0xc62bf3d4, + 0x7f166df5, 0xa75024e7, 0xcfcefd3d, 0xaf41790c, 0xf8a71f7e, 0xd6013aed, + 0x156122c1, 0x1daa63d3, 0xa463c1af, 0x14a407f3, 0x3e0eefe1, 0xe1181f23, + 0xbf23b97c, 0x40f5c15e, 0xe99bddfb, 0xc4c4b303, 0xf0d0f318, 0xf5d08331, + 0xebf7bb38, 0xdebc7171, 0xbc773f7e, 0x6b401df0, 0xa466f277, 0xd35db19b, + 0x4030451f, 0xb07e962e, 0xa7c5664f, 0x5d143ca0, 0xf9028894, 0xe7f4fd12, + 0xd5c949f8, 0x5d2b6fc8, 0xfc7759ec, 0x27917556, 0x7c9d119e, 0x6a3d3627, + 0x25dbbe03, 0x8e20d9d4, 0x5a7da37a, 0xe15e882d, 0xf03305e7, 0x89888abe, + 0x526d6840, 0x887ecce8, 0x130f7833, 0x1050cf3c, 0xf8113bda, 0x05a135f4, + 0xf3b6acfd, 0xb28b56d4, 0xb5429b3b, 0x9acbb036, 0xbc79d992, 0x97440903, + 0xca95fd2f, 0xcf474daf, 0xb462554e, 0x7d31730f, 0xc9289d3e, 0x459ff439, + 0x807f29eb, 0x81c7dc1f, 0xce429271, 0xd8327afd, 0xfdd8732d, 0xa3cd6dd8, + 0xf0a64f5f, 0x8095deb6, 0xd352667a, 0x28baf703, 0x18ff8221, 0x17dbcf81, + 0x425f7870, 0x7ac6ec91, 0xf42ce2d1, 0x937f46fb, 0xda04bd34, 0xf7e88b27, + 0x042be24c, 0x4e9d5788, 0x8eeaf0e3, 0x06a45cdd, 0x3fd87f7e, 0x5c438d8d, + 0x4ff024fe, 0x1a492bdf, 0x2791bf8e, 0xf841f56b, 0xe0c48b3b, 0xf97aadbf, + 0x6d335edc, 0xc393355f, 0xae49e2fc, 0xe28fe20c, 0x12f5a29f, 0x50f6ebce, + 0xf5f0016a, 0x39fd62f4, 0x4f6ab0c7, 0x91b52cce, 0x247ef440, 0x3eb942e7, + 0x03bf6d60, 0x59bc377f, 0x4d3f3024, 0xf9516fce, 0x24ecd67d, 0x08d377dd, + 0xb9353bb3, 0xbf9555ba, 0x79bf545b, 0x3743278e, 0xf661297e, 0x7b481fd0, + 0xc7ec9021, 0x3d1fb62e, 0xd0e5bdb5, 0xef89783c, 0xe1f40a37, 0x7e0c43ad, + 0x16b15f2f, 0x738d22f9, 0x6e31bde3, 0x636dfb7d, 0xfca375f4, 0x4cc3f51a, + 0xbbe3dac8, 0x1f4d09ea, 0x45e66ccc, 0xcccd0788, 0xbb4678a7, 0xf7b76f58, + 0xc7462fa4, 0x2e2fa375, 0x1983f7c9, 0x7c5f45d2, 0xf49dfc5c, 0xdba96fc5, + 0xf5ca8632, 0xe8de9a3b, 0xde83fa4f, 0xff6fc498, 0x1b51f005, 0x31cd375d, + 0x775b48f8, 0x114038b4, 0x03d46395, 0xcc7ed8a7, 0xc4e98ba4, 0x0e33a23f, + 0xa847a1d0, 0x618ee25d, 0xcf8a9d2f, 0xd24fddd6, 0xeca257a1, 0xfbef3112, + 0xa89325db, 0x02e52a3d, 0xbe10fd7c, 0x921ef522, 0x82b04822, 0x19da61f8, + 0x0579038c, 0xfae2cfea, 0x73d314fc, 0x625c5ff4, 0xed187ca7, 0x5d0e2d15, + 0x29ecd2e6, 0xc474bf3d, 0x7bb06723, 0x293e3557, 0xfc827c02, 0x9f71e0cf, + 0xff37c8c0, 0xb5e2611b, 0x00800011, 0x00000000, 0x00088b1f, 0x00000000, + 0x7cbdff00, 0x55547809, 0x753eeeb6, 0x2a490d4e, 0x62c65549, 0x4a61270a, + 0x0843c048, 0x91602018, 0x520c6201, 0xad0e2280, 0x210c0e05, 0xfaf5cd09, + 0xe76f6dba, 0xd11a0484, 0xfdb1c5af, 0x15fbbe9e, 0x2b8fbd5e, 0x30188a41, + 0x015b9260, 0x06d88081, 0x9f3e01c1, 0xa88d2a5d, 0x6e874921, 0x3efdd82f, + 0xef6b5ade, 0x8a555493, 0x77befa6e, 0x66f6d25f, 0xf5af3d9f, 0x610f69af, + 0x4cd9532a, 0xf83096c6, 0xb05b1951, 0xd3dcc2d5, 0x7f36ef21, 0xfa31b415, + 0x05ff06b9, 0x635e1262, 0x33739889, 0x5dd8c696, 0xbfb2fea2, 0xf3f19ba8, + 0xfaf0f2b2, 0xdf85b177, 0xdd8c094a, 0x3666bcc1, 0x3d3bb18e, 0xff4fe591, + 0xbbf28641, 0x4f7f8456, 0x5ca7c471, 0x8c7f8388, 0xc9afe367, 0x4dc9958c, + 0xc05edfcf, 0x5949df58, 0x266af2b3, 0x0751ff1c, 0xf6d1ff1f, 0xc7967492, + 0xc53dbbd8, 0x8f485e89, 0x270cc1d6, 0x6755d631, 0xe404f4a3, 0x1af0d07d, + 0xeb02dcfe, 0xdfaf30b3, 0x94f6290e, 0x92cea94f, 0x80e09b18, 0x7f21534e, + 0x0c9fd605, 0xd863a365, 0x5e62d9d7, 0xc91d8c59, 0xa0fb9736, 0xa7f4075d, + 0xe801bf43, 0x0f7e875f, 0xff2839d5, 0xf28b9d5e, 0xf5129ca3, 0x13089353, + 0x4558c19c, 0x2f769dce, 0xc8e35bb4, 0x9cab3ca2, 0x1b7a4264, 0x797b2ff3, + 0xde81d334, 0x14ab8247, 0x5ab18529, 0x3359a497, 0xab00f887, 0xfa84afb1, + 0x35de8295, 0x83e6255b, 0xaf9f95ef, 0xbf4064af, 0x0f1876de, 0x2a5b53e8, + 0xcff06cfb, 0x9f67b692, 0xb33379e7, 0xf886d44a, 0x852f88bb, 0x153a57cd, + 0x58b38c1b, 0xc6193493, 0xf6f1b771, 0x9f25bbb7, 0xa45cff0a, 0x23a3f385, + 0x44cbef82, 0xfff18b3f, 0x72e2dda0, 0x7e8017c9, 0xb7861716, 0xc165765b, + 0xe1d4d2b7, 0x7c865a38, 0x2f1c3a9f, 0x8fbe0ccb, 0xef916365, 0x7e962f97, + 0xf10d9538, 0xe48d322d, 0xf5f96473, 0x6feabcf8, 0xff68d9f0, 0x11bcf8b7, + 0x3cfc8269, 0xc6a2d57c, 0xedb0b633, 0x79f20aa7, 0xfa8515e1, 0xe4f5c6ad, + 0xcb067942, 0xb1fcf5c0, 0xdb99ff27, 0xdafd50d9, 0xbc583fb6, 0x9ebfae53, + 0x37be35bf, 0xe075a551, 0xa1bceeb8, 0xc0142b71, 0xb6f3ac20, 0x46fa70ec, + 0x5f9235f2, 0x48bb444b, 0x58896d7e, 0xd617c187, 0x111a2003, 0x6457ee85, + 0xf8f5c79a, 0x8b17c836, 0x3796bc77, 0x7fb19cbc, 0xf50eba21, 0xbac4f827, + 0x3e14cf15, 0x3c88732f, 0x44f5ae00, 0x17656fe0, 0xc4c2c40b, 0xff2c5d16, + 0x9354c156, 0xeb2157d8, 0x0caf9fc0, 0xfd43cb3e, 0x41195d97, 0x5b8c67f2, + 0x92dd30a6, 0x5cb9df8f, 0x06afce46, 0xf58099fb, 0x96ffa275, 0x7e15a61d, + 0x0b5cc758, 0x6983c07b, 0x1c5b4f2c, 0xdfb7f512, 0x7d7aa261, 0xd899b27f, + 0xe9ed8c4d, 0x30662f48, 0x78eacd3f, 0xdfa2f51f, 0x7e7da8cc, 0xe6e7e702, + 0xc0c7a678, 0xb6e94cf8, 0x4a270079, 0x20d96331, 0x8b48ca67, 0x6cba01af, + 0x941e0252, 0x614d3ebb, 0x537720f5, 0xb38c1db0, 0x2f7e90f9, 0xfe6c9603, + 0x21a9a26a, 0xba07db13, 0x9bbd40e7, 0x1b7515f3, 0xd55a7154, 0x6f79629f, + 0xed81d5bb, 0xb7fc0efa, 0xf3f6334e, 0x0cc1a627, 0x00ed7bd9, 0xb22f282a, + 0x37a87d9b, 0xb293e4ca, 0xfd7df209, 0x2a3ea18c, 0x6128115a, 0xacb9b7c0, + 0xe901c1bb, 0x1463e46c, 0xf5c55dfe, 0x6b7ae0ce, 0x9e69f004, 0xa13cd3e0, + 0x65da4aaf, 0xf1251bd2, 0x0e658fb2, 0x045ba7e9, 0xdde9e68f, 0xee308925, + 0x1ad2453c, 0x15cb7f20, 0x6f8f0c25, 0x69ba3ea1, 0x89951f48, 0xaafdddfe, + 0xcd819602, 0x2df8e167, 0xa87ae56b, 0x5df116c4, 0x49681fd8, 0x84732ab8, + 0xdd46cf97, 0x60bef809, 0x25e85fe0, 0xca7f6116, 0x0424bfe4, 0x2c7b0e81, + 0xc0e74fee, 0x994ffbbc, 0x9df06bd9, 0xaccc845d, 0x8d69f4e1, 0xe99147b0, + 0xb7588e81, 0x83daf30a, 0x7e63b238, 0x7a9d5ba4, 0x8353fafd, 0x8cb8c5fd, + 0x154b4d3d, 0x3cb04596, 0xa21b4ae3, 0x0afa30fb, 0xb5d2443e, 0x7779e859, + 0x543de3ab, 0xd8e8c3c3, 0x79ec80b5, 0x05551fc9, 0x4bdfdf55, 0xf65e434f, + 0x2375885c, 0x185cf7fe, 0xf479c6e9, 0x1bdc73c4, 0xfce070f2, 0x51ea2c40, + 0x00aaa7a0, 0x369dfa4e, 0x33c235ed, 0x88ff0397, 0x906dbe89, 0x71cf1f3f, + 0xffb627bf, 0x7dd22e44, 0x0d7b4991, 0x8c365187, 0xf5053a5b, 0xe7a5d6e7, + 0x6e498ccd, 0xe40cfd26, 0xec1d5249, 0x9075483e, 0x9e9fc427, 0x27287cc4, + 0x3867e666, 0xbd9b836e, 0x22bce982, 0x3ee91135, 0xdb767d00, 0x11353fb1, + 0x72fecf71, 0xca67a679, 0xd737fa70, 0xe3028f31, 0x3cd9d4b4, 0xfd85e80a, + 0xb7ca0e75, 0x3d28b9d6, 0xba52a758, 0x9f84fde9, 0xeb50ffa1, 0x109478b6, + 0xc49e52bd, 0xd03cc3f5, 0x79af383b, 0x80e9f24c, 0x304f79bd, 0x03904792, + 0xf90926df, 0x1ec9eb05, 0x67f027a2, 0x67921820, 0x8ce34a8d, 0xe20a9234, + 0x89ae7e7b, 0xe01383da, 0x7873237b, 0x587fe07d, 0x5bf0b97e, 0x4bba77ee, + 0x65be909c, 0x813994f7, 0x5dd2cdbe, 0xca312f87, 0xcdefc42f, 0x25f2ddd2, + 0x607a7fe8, 0xd819fb3e, 0x18c0e98b, 0xdcfc2ba4, 0xd19ff38b, 0x1fc86169, + 0x9f24ac30, 0xfe7c86f9, 0x60174920, 0x6ba1143c, 0xb59da0a3, 0xda788032, + 0x48c982cf, 0x279b02f7, 0xb977e50e, 0x2dc1e393, 0xa092e9dd, 0x16a959bf, + 0x3a55464d, 0x037d33ce, 0x1533afd0, 0x9dfa8406, 0xd5a3699d, 0xb1db443c, + 0xddbe50cf, 0x26407b36, 0x09ee64c3, 0x74f3d886, 0xe503aaf6, 0x35dc7517, + 0xbf5d23b0, 0xcf49d04b, 0x50f8b15d, 0x4e9d75af, 0xce3002d0, 0xf2362bdc, + 0x21b19b2f, 0x6c476dc8, 0x33d254c2, 0xa0c3413b, 0x3af8d8fc, 0xebbd9a16, + 0x02dfa49c, 0x76803f87, 0x18c03eff, 0xddb9d7ea, 0x87e8cb9f, 0xd2729896, + 0xc3cf3083, 0x4c44a4d2, 0x425dfa5f, 0x13a7a51e, 0x1d3e907a, 0xc71538a6, + 0x2d4eb8fd, 0xf9780f1d, 0x8e958ea0, 0x587c7c07, 0x54f4a367, 0xd3d2839d, + 0x0f4a2e75, 0xe7e23943, 0xbe239408, 0xe639418e, 0xa639438f, 0x983f43ef, + 0x9bb43fba, 0x7de77e50, 0xcd305768, 0xd29e37bf, 0x2de27be6, 0x048e8eb8, + 0x8f8c64d6, 0x06c40a78, 0xfa06985a, 0x49fd2923, 0x9fb018db, 0x6914ef56, + 0x293d2c1a, 0xf20556fd, 0xf8cc2fef, 0xbca09ff9, 0x49e32928, 0x8ef7cc1b, + 0x9396f6d3, 0x6e7e2f90, 0xc47693ec, 0xa0b1fbe7, 0x990e9124, 0x9b20ddc7, + 0x8c6951d3, 0x59bbb224, 0x8d93e421, 0xa5ade67c, 0x25e58500, 0x64e65cc1, + 0xb367d9ec, 0x7d01b56e, 0xff79c797, 0xbd16f311, 0x0c74bcab, 0x40ee99e6, + 0x3ecc9779, 0x52d1f792, 0x7fb052ca, 0x82deec5b, 0xc07f10a4, 0x193efd2d, + 0xb74cc3f5, 0xc4299cc4, 0x6904df6f, 0x6f51bbe8, 0x20acbd8b, 0xc3b47009, + 0x669e1329, 0x9f6e4914, 0x1afcb87d, 0x579c66f5, 0x337f914b, 0xc4682e2f, + 0x93b97174, 0x37159ef2, 0x97fca237, 0xbed7afda, 0xe5bfda84, 0xc538d334, + 0x628bd40a, 0xd37a8d17, 0x7fe86401, 0xf58f1ff7, 0x3eb886bd, 0x87886de3, + 0x332b997c, 0x9a3a165f, 0x63b9de51, 0x1e57961b, 0xd2b92169, 0x133535e2, + 0x9a5dd8a1, 0xedf3e50c, 0x15401692, 0x6365f458, 0x243b9632, 0xdf36c90d, + 0x0283ed3d, 0x6b2f1f2c, 0x467f31f3, 0x7a40752d, 0xe73f995a, 0x985bd412, + 0xa0d9a89d, 0xcfc0e9dd, 0xe77e232f, 0x316bc767, 0xbe05c62a, 0xaf306a57, + 0x157ab559, 0x496cf1d7, 0x4aa3f602, 0xcdf2099a, 0x13fc97b7, 0x93d8a3ce, + 0xcb0924c8, 0xb1fa0a9d, 0x97eefd2f, 0xd7a80ea5, 0x9431219c, 0x9c81d39f, + 0xf3fe71ef, 0x18d562bb, 0xc5b35098, 0x9aed8a51, 0x1363922d, 0x58253de5, + 0x56689f5f, 0x4f7e80df, 0xf64713de, 0x3cc3f2a0, 0xde4e8bf2, 0x42ec8a33, + 0xc54587e5, 0x71349e98, 0xc3f2bdbf, 0x372a72ca, 0x952a00b1, 0x427f7bca, + 0xfc97b6ed, 0xfa0534b2, 0x93ac7f7f, 0xa9f00b74, 0x6bd10954, 0xd8499f50, + 0xaa6adefe, 0xffa529df, 0xbfd43cfc, 0x6f98979c, 0xa417f185, 0x2fd584c4, + 0xcb0ced1f, 0x511f8c57, 0xb1d884aa, 0xb0ccbcca, 0x5205edfc, 0xfa90f8e9, + 0xb098a29e, 0x6752d2fc, 0xfa90f8e9, 0x088e5477, 0x23bf2fcb, 0xdf3f2c33, + 0x8feb8b34, 0xca59563a, 0x94b2bee5, 0xd22ccdfc, 0x5e0ef943, 0x3f9418f7, + 0xc7f9e504, 0xef953fb9, 0xf80a7f04, 0x80bc7a52, 0xd0e380fc, 0xe20bcb0e, + 0x59d31e84, 0xda266bb7, 0x83e3f101, 0x8b17c85f, 0xf06efcec, 0x5f22a60b, + 0xcc876ec1, 0x6e1ed4bf, 0xb9639bc7, 0xbcce509f, 0x67e04e8d, 0xf9055779, + 0xf5296557, 0xf4860105, 0x391f6f0c, 0xcfa2506f, 0xec3887df, 0x966f4852, + 0xef188e8f, 0xfc9da978, 0x95dfe118, 0xb8c6568b, 0xa377774c, 0xc3ac637f, + 0xeb7aff18, 0xc88b9729, 0xeb5bfc2f, 0xa4bd905a, 0xfcea2934, 0x133f9037, + 0x249ccf39, 0x7f82af11, 0x57617e45, 0xf08bf912, 0x4fcd1293, 0x4a9ffc30, + 0x50ce73d0, 0x5297673d, 0xbeb94c96, 0xbdfa339e, 0x1837ff9e, 0xacf68887, + 0x8df1a649, 0x55df83f6, 0x9df7fa29, 0xca3e3f50, 0xfa2914f7, 0xebc3d7f7, + 0x06d453cf, 0x09f3c83b, 0xd23a6926, 0xa0aaa4fd, 0xc672566b, 0xd96988dd, + 0xdd055ee7, 0xf5e785c2, 0xf4e74c46, 0x615a4ef8, 0xcb66b7fd, 0x183fee2a, + 0xbae4517e, 0x7f7127d6, 0x3515c4e4, 0x66f2854e, 0xb8c38d5d, 0x3509f9a3, + 0x66abe30e, 0x38c72b37, 0xb4ce3dd2, 0x7710e301, 0xff90a42e, 0xf7d71249, + 0x48ded15e, 0x2f5eca0f, 0x5b6adfea, 0x93e8d7f0, 0xb7ed5cd4, 0xa04e2e20, + 0xdc3797bf, 0xf8a13bdf, 0x89de38ec, 0x4f767c27, 0x51bf3e88, 0x6083cf7f, + 0x9538819a, 0xa4faa13c, 0x09e316c4, 0x0e651fd5, 0x1a7e5867, 0x6ed03ffa, + 0x58446ba1, 0xccd55bbb, 0xc7e07ab0, 0xd43fa366, 0x0ad96160, 0xac5353ea, + 0x245e7e86, 0xeb10bf1d, 0x740eecd7, 0x453998a3, 0xec51bd95, 0xe9c25693, + 0xc9fdf917, 0x25cf1e24, 0x1cf5f327, 0x6bf3e24b, 0x99dc3d94, 0xf119ff03, + 0x58879910, 0x07f60575, 0x7710bb3d, 0x32e99c5a, 0xe76ce0b8, 0x2ab71573, + 0xba6d6780, 0x41c61fe9, 0xde73d0fe, 0x07f0155b, 0xb7a639b4, 0xdeff20b3, + 0xf9792b73, 0x66e9a64d, 0xd57fb18d, 0x0a5add57, 0xcf148af9, 0x7d7f106f, + 0x0956fb66, 0x926280f4, 0x50ca7e58, 0x0594fc5c, 0x16302aec, 0x0276e640, + 0x3cace3ed, 0x0189ae8e, 0x8bf587fd, 0xabd22add, 0x73e0c626, 0x3bed0d30, + 0xd8466f7b, 0x059c5c7e, 0x32fb41da, 0x715ff79b, 0x205b6abc, 0xf47d0541, + 0x74b281e8, 0x24b1c5c4, 0xf73fad07, 0xd42e39ed, 0x37af3053, 0x1fff5711, + 0xe38075e7, 0x8d5e7c38, 0x4f4e3e66, 0xda096e73, 0xc0b1dcdf, 0x5f88690e, + 0xdf4a8af9, 0x1580fc63, 0x2eddcff2, 0x706c6fdc, 0xd7f4345a, 0x535e218f, + 0x106d3c6f, 0x1c7216fb, 0x689c8dc7, 0xd217b0da, 0x7cbc0adf, 0xe2a6e388, + 0x4b19fd38, 0xd1cc0f00, 0x0a74b19f, 0x641e23cf, 0xfd1fbf39, 0xc49ffeee, + 0x8f2f146b, 0x17e2ffee, 0xbef4ff90, 0xc2ed0d5c, 0x9f4e58b9, 0x86acbe15, + 0x59a7e420, 0x9f70637d, 0x3dec9fd1, 0xc7bfeb8b, 0x78409bea, 0xc7886fb3, + 0xa33725fe, 0xf388c478, 0x2d539e20, 0xfffb86e3, 0x3665c7c3, 0xb35df3a4, + 0x718d9d38, 0xb436a681, 0xf2169f3f, 0x603cc6ef, 0x7c716ffc, 0xf3833e63, + 0x641da360, 0x5fdf180f, 0x43f115ea, 0xfbe76c99, 0xd137bfb3, 0x0a2d4abe, + 0x3edfe421, 0xcf38a26f, 0x602ddfd8, 0x1f599c7c, 0xb269926c, 0x14cefc3a, + 0xa4d8295b, 0xf6e28ab5, 0x444add19, 0x3b26ed5c, 0xbfb44739, 0x625bcbb9, + 0xf0b3f4c7, 0x7c44737a, 0x327cc85e, 0x82b34fc6, 0xb7ade511, 0xcffd837d, + 0xddfe18b9, 0xdcec2c92, 0x74323648, 0x88a363ff, 0x664e0687, 0x155e2225, + 0xa0640188, 0x599545bf, 0xfe90d261, 0x7a83a968, 0x3693d456, 0x719ca74a, + 0xb4e3883c, 0x27b001d6, 0x5174bea1, 0x94d5c86a, 0x3601ec33, 0x811c6435, + 0x038e837f, 0x4e3a719f, 0xa6ff660b, 0x2ee6f208, 0x43a9f333, 0xe82d9874, + 0xc5196105, 0xed170375, 0x1e669764, 0xbca3265f, 0xa6265d5a, 0x462fac86, + 0x886a658d, 0x4ecb8d9e, 0x82cbcb0a, 0xe1318d8f, 0x3174c7fe, 0x3236bc4e, + 0x0fc33fac, 0x3079f831, 0xfa174169, 0x6bedd327, 0x2c491fc8, 0xbfeb0acc, + 0xbd3864e0, 0x8dc799f3, 0x39f6af71, 0xe67eff23, 0xefcc2519, 0x276c0c28, + 0x1e7e147c, 0xf9f67dfe, 0x64dcfcf0, 0xc9156fb1, 0x93d1ebb7, 0x514dfd4d, + 0x4f4fdfca, 0x9e9c3ba7, 0xf4e1e5c9, 0xd384f54c, 0x38457d33, 0xc37846bd, + 0xcd6a31e9, 0x31f2b0e4, 0xf2c3f21b, 0x3b367f63, 0x18267eac, 0xb8fcd0c2, + 0xf56115ad, 0x1a5f6c27, 0xf2f49f96, 0x73f5613d, 0xcac2ab7c, 0xfbae7773, + 0xc53ff8bb, 0x3eac31bf, 0x57f4d992, 0xeb537ff8, 0xfde361e3, 0x9ffff157, + 0x8b76e422, 0x604edbd0, 0x1987ee2b, 0x0ddd0af6, 0xb6ce97d4, 0x3f715763, + 0x69562f46, 0x60af4a1f, 0xbd94035a, 0xd4247b20, 0xd480a36f, 0x8d1bd026, + 0xf506b626, 0x264daffe, 0xe4349fda, 0xf732477c, 0xf3247633, 0x29b3acfd, + 0xd3ce225a, 0x4ce7a7d0, 0x7ea03fdb, 0x1bea6c13, 0x814c7f64, 0x730e305b, + 0x579fb4a9, 0xe2a85092, 0x523caa3e, 0x70133c5b, 0x33293968, 0xe1ac8930, + 0x201ff3e4, 0x6ddb2e3d, 0x4e54e22a, 0xb768eaf2, 0x37fe5d60, 0xec057920, + 0x6353da2b, 0xe9d69f1e, 0x325e30ab, 0x1b5c2bf2, 0x15fd6336, 0x809fcdf7, + 0xf7e0ec71, 0x9557eafb, 0x742bd086, 0xf8a34b5d, 0xdcc94d47, 0xb9eb19ae, + 0x0436aac7, 0x64d3de61, 0x2ec1ffae, 0xbac32534, 0x984f49cf, 0x9ba59fb9, + 0x3b02cfd1, 0x4e01e749, 0x4237a870, 0x8f64389a, 0xa2006bd4, 0x1bdf1673, + 0x4e5d212f, 0xc3c61ac8, 0x6109c5bf, 0x646aa11c, 0xf436efff, 0x3a26aaac, + 0x6035e643, 0x0757f70f, 0x7a471a1e, 0xa0fdecf8, 0x67af0164, 0x463d7c2d, + 0x0f428bfd, 0x70f4277f, 0x90dfea0f, 0x3b35e87d, 0x3f478f9e, 0xf7366cfb, + 0x67ef8dab, 0xc639f992, 0x57ee6499, 0xd98ced57, 0xaf043e70, 0x58677ed5, + 0xc475b6be, 0xca7dd086, 0x5e3d632a, 0xacf5c149, 0xdd537217, 0x87b84c15, + 0x1a7e5f91, 0xe3b356e9, 0xb1fbfdf2, 0x8d3fa9bd, 0xc69d53db, 0x4653ebbb, + 0x7f5dfdfe, 0xe9fe6166, 0x9a66c9d7, 0x2f38d7d7, 0xe2439748, 0x072c1c00, + 0xf4c4ef1b, 0x9402d158, 0x901ef837, 0x8bb8bf20, 0x2d5f5199, 0x919a66f1, + 0xf699a7f8, 0x5a583ef1, 0xed4ab26f, 0x3a1e60ef, 0xfee4fea7, 0x37ac78ea, + 0x0fd19fd8, 0x6ffa0008, 0x73753a9f, 0xccdfee1a, 0x807fc895, 0xddf86cf1, + 0xcda8df73, 0xf18d7768, 0x4bde613e, 0x963e031f, 0x35fa8d32, 0xdc7867fa, + 0xcf87a212, 0xf7005859, 0x5673f473, 0x9f301bdf, 0x01c7e88d, 0xa7b6361e, + 0xb7d07f93, 0xbf763fee, 0x181ef504, 0xfe831c15, 0x7f75b9cc, 0xbab8889e, + 0xa99965fb, 0x9c4f1f80, 0x3f48cff7, 0x1f672e83, 0xe58f1cba, 0xae1097e0, + 0x86ab2ed8, 0xdd6e7272, 0x7ea189ae, 0x3e6539bf, 0xa2e7414b, 0x39ea3930, + 0xb97c6445, 0xe7fbe2ce, 0x4eee51c7, 0x033fa998, 0x3e056b9f, 0xe9aa6637, + 0x18dcf8a1, 0xf24f883f, 0x21be374f, 0xd8d95e93, 0x3ee7431e, 0xd45c0b1f, + 0xd6fabaee, 0xb8662ae3, 0xe035f85f, 0xfe5c0554, 0x82aa701e, 0xe00df05f, + 0x655bf314, 0xf7ce3a4f, 0x4ebfa7eb, 0x8ef8b8a0, 0x9f779b1b, 0xbdc9ffd4, + 0x5ce3df48, 0xc0d806be, 0x5af76427, 0x83f45472, 0xfd5ff64b, 0x4d43f504, + 0x65f6958b, 0x4783392f, 0x07fac15f, 0x6bf58624, 0xcca43102, 0x1f245a6b, + 0x6bad67ee, 0x1465bbdd, 0x2d35d7e4, 0xd6984029, 0x63d23026, 0x0f92cd35, + 0xd42eb7f7, 0xee7855e9, 0xeaf07250, 0xf7b7ec05, 0x62f7ef20, 0xc620fe9d, + 0x2bcdbd8b, 0xd6fec0bf, 0x0c5958b7, 0xb019cfe2, 0xf6f1c28c, 0x6f1c7e4a, + 0x0b59ff8d, 0xf5e6bff6, 0x0dd1e325, 0xbf59daac, 0xa87f742a, 0x8b29ff77, + 0xd35a740a, 0x5102ecf2, 0x779b80af, 0xe9b9d85f, 0x83fd5f5a, 0x7822f1a1, + 0x399f4cb3, 0x03e36f74, 0x6d15ff41, 0x9c901ae3, 0xbdf6c7a0, 0x2b1e9122, + 0xd63d414b, 0xbd7ffbb1, 0xf81de38b, 0x3710139f, 0xe8c6e0ac, 0xf93a3ccd, + 0x1c62350d, 0x05b4f176, 0x169ac1e3, 0xe76885f3, 0xcf14be41, 0x88cf1c52, + 0xe8fd2367, 0x8c4b40ad, 0x58ccf45b, 0xded90f92, 0xf309596f, 0x805615f9, + 0x7e8e28f9, 0x6fc82acb, 0xb2f5124d, 0x7168be6c, 0x0a292bf0, 0xc596c7d1, + 0xcb239fcf, 0x87e5165f, 0xe0b3beb3, 0x7a8d5bfe, 0xadb882d1, 0xcfcb7c09, + 0x5cbf5beb, 0xeed28ee0, 0xf76e14a5, 0x9acf26cc, 0xf243051d, 0x14da51b1, + 0xf1b5bb44, 0x275524c0, 0x9a41eb3e, 0x1518bedf, 0xffb251d7, 0x90c199db, + 0x7c07befe, 0x91bf7ee0, 0xe5f3d9af, 0xedd23354, 0x2aa72fed, 0x7bdf43f1, + 0xa26becd3, 0x94bc97ed, 0xe6eeedc2, 0x1c45cf04, 0x55bf7ab7, 0x8ef844dd, + 0xef8802d1, 0xdf3a38b6, 0x365b7c00, 0xfbe28415, 0x4d779a6e, 0xbda1ac9b, + 0xe25d69ad, 0xf1faa7ad, 0x6e41b21a, 0xce23af9d, 0xf0878764, 0xe302fec8, + 0x3ae714cd, 0xa6e68fa0, 0xb9469f78, 0xaafaec54, 0x1a8afdd0, 0xcf033053, + 0xbd9ab619, 0xc887e7db, 0xd5d76c9f, 0xa5cf784d, 0xd5935935, 0x4d99fe21, + 0x6abd2f9c, 0xed092130, 0x9271d826, 0x09b7c097, 0xad2dff48, 0xee50da0f, + 0x70714fef, 0x15745a3e, 0xc6ee67f7, 0xab7bac3c, 0xe506b3c5, 0x2c5a6b6a, + 0xdf476f8f, 0x2f59bed8, 0x3c04ebca, 0xfed2f407, 0x5bc0af45, 0xfa4618ef, + 0xccd0ee97, 0xad3722c2, 0x0ebcc6d7, 0x5adb57ac, 0xf76a155f, 0xa5dc0f7a, + 0xb1ccfce1, 0xe34b3dbc, 0xf71c8d78, 0xf90ce208, 0x7db55a64, 0x8fdd887e, + 0xd45877ac, 0x14c0e833, 0x6051f69d, 0xfc347768, 0xfc5291de, 0xe6d1ca2e, + 0xea364f24, 0x86270561, 0x512d5478, 0x3bf501e7, 0xfd466f91, 0x168e823d, + 0x7481d7b3, 0xcde4537d, 0x19d10f16, 0x39455b04, 0x965f5c1e, 0x7d9caa25, + 0x35bde621, 0x91ef9c33, 0xf2173ef5, 0xaee93666, 0x0ecf3855, 0x4fa6e499, + 0x1bfe27ed, 0x5702faf5, 0x2edbff39, 0x5cf78edf, 0x272e66b6, 0x6ff77e7c, + 0x4872f939, 0xe294e6bf, 0xf7feb873, 0x9ab63e05, 0xfbce1775, 0x2a3ac468, + 0x94c13c52, 0x36247d90, 0x7086e53a, 0xa4fc44c2, 0xf1077b09, 0xf5bbed13, + 0xafba58b1, 0x09c457b5, 0x4e10f30a, 0x92a698e2, 0xef66e31f, 0x868c3de3, + 0x06db134e, 0x14dc04d9, 0x4b27390a, 0x90464d90, 0x2841b6e5, 0x58b6c78c, + 0x3617c7fe, 0xf9e23457, 0xee65d33f, 0x13ef850f, 0x96e4b730, 0xde07f742, + 0xfb63775b, 0x1b7aaf03, 0xf723ce50, 0x4c056607, 0x37892d2b, 0x5ef04fb0, + 0x827dd445, 0x78f0d4b8, 0xd2aa99d3, 0x1cd9fce4, 0xac40fe87, 0xb13bef8f, + 0xd3e388e9, 0x7f285348, 0x8b53c5d7, 0x736d9bd4, 0xfc5fa902, 0x45adb6d5, + 0x39e36720, 0x80df301d, 0x7f720e60, 0xe1df7063, 0xefe4c9bd, 0x29923e82, + 0xb98876de, 0x00aff044, 0xac1e24fc, 0x16fb6169, 0x263fa381, 0x9dddfea0, + 0xfc887ea4, 0xd32e3fe9, 0x25188dbd, 0x91467168, 0x3fe8fdaf, 0x6f723f83, + 0xb6b3d72a, 0x67ce7e56, 0xed0cdd53, 0x31c38c7c, 0xb3910e4d, 0x37ee54c4, + 0x973d1f57, 0xf27f0161, 0x4264e992, 0x7ebff41e, 0x6e02735f, 0xfd9d5583, + 0x955e2668, 0x4ef147b9, 0xdf7a854f, 0xda263b49, 0xeadc3fd0, 0xf1f48a9b, + 0x3ee8b207, 0xe98514e3, 0xf9f0fe4a, 0x8b0cbed4, 0xf35c9302, 0x53a53272, + 0x46afa6da, 0xc036b53f, 0x98638bd7, 0xb4e60541, 0x6def944a, 0xfec2486d, + 0x7dbdff6a, 0x5da9ea24, 0xf67f7ca9, 0xbcb92bcd, 0xac14c2bd, 0x14ea9e5f, + 0x7099f778, 0xd8976ebf, 0x22bdebe7, 0xfc633d53, 0x65f3ad29, 0x2f20e007, + 0xed10fdb0, 0xc959b62b, 0x9d798a9f, 0xc5b47a71, 0x6d5479d0, 0xf68642c7, + 0x34c9cfa8, 0xc777ca09, 0xd3ff93f6, 0xf1556edf, 0xb1c633fc, 0xefbca19d, + 0x72a7f716, 0xf6cdb000, 0x78c6efa1, 0xc1bf6d31, 0x05c4393d, 0x28c6c39d, + 0x7b5cd9db, 0x89e3bd28, 0xee716bde, 0xc04e38a9, 0xfd12e784, 0xa35f3ba0, + 0x93cd0d79, 0x3cc6b8d1, 0xefcf4873, 0xf85ff4b6, 0xcbcd0a45, 0x61c83881, + 0x6dac9e7c, 0x31abc512, 0x23ad370e, 0xba6aa1c6, 0xb55e7c34, 0x0301c153, + 0x26f5f9f9, 0x28cf2836, 0x43b1b5df, 0xc2c81b79, 0xe4262cee, 0xd2b6e0ff, + 0x283cd0a2, 0xf6a1c29a, 0x6db17cbf, 0xed11635b, 0xf032e9ab, 0xf8d20e3f, + 0x97275c24, 0x7709102b, 0x03a73e6a, 0xb38ba3de, 0xfac1f2f1, 0xe63b7380, + 0x669ebced, 0x6455c475, 0x79d0bc92, 0x3d9fe19c, 0xdc2e052a, 0x79edac02, + 0x079893d6, 0x1d31eaeb, 0xea09ac7a, 0x3fd2bf7d, 0x4ef90031, 0xc449f7ab, + 0xaf9f3be7, 0xea0a6a7a, 0xad66dddd, 0x504ff512, 0xe0fc8e7f, 0xb6eacd37, + 0xa363b910, 0x9ee8d3fb, 0xb538c45e, 0x873d3767, 0x01df6e7e, 0xe7f3c549, + 0x067f733e, 0xeda6bbce, 0xf5ea0b1b, 0x925f03da, 0xe6939b5f, 0xf815317d, + 0x4f5ad857, 0xb166cdf7, 0x2cdf74ed, 0x7e07f857, 0x0327d717, 0x56be2667, + 0x7787c21f, 0x7eb1bc85, 0x53b458ef, 0x3b5e426d, 0x7485de30, 0xe3dde75f, + 0x227dffb0, 0xd5da371e, 0x90a343b3, 0x7bd89bee, 0x1dda0e94, 0x7df7429f, + 0x3db13f73, 0xbfa90ee0, 0xbeffc84f, 0x2df7ee54, 0xc2eef34a, 0x7e7556f9, + 0x78abc165, 0x19fde7b5, 0x21fa5f18, 0xd144772e, 0x1bf28323, 0x4ab54f21, + 0xd7eb05bf, 0x57a4645e, 0x898ddf80, 0x9f5dbfc0, 0x095e4eb4, 0x4f01f7df, + 0x385fd112, 0x7dc4e3cb, 0xac28cf66, 0x0ff1ff5f, 0xfd8f5153, 0xfc049c0f, + 0xaaf687ef, 0xc03748b1, 0xca2c717f, 0x7a465ed9, 0x3cd390cd, 0x9f685394, + 0xc02ff887, 0xe5e90e7c, 0x0aee96dd, 0x267dcb92, 0xf8097286, 0xfc007927, + 0xe72ed03b, 0xa81e4039, 0xf39224fd, 0x3726dddd, 0xd7a0b3f9, 0x78be5027, + 0x7777e619, 0xce483a97, 0x1f3edcf1, 0x887035e5, 0x8633f1fa, 0xc4814c6e, + 0x12fba13c, 0xc409a989, 0x8e5f4337, 0xcfebf211, 0x58351356, 0x872c9c47, + 0xbd8847c9, 0x4f6179e4, 0x6d2ed3b3, 0x7e34617b, 0x84edc69e, 0x7549d843, + 0x7ffde91a, 0xe36ab610, 0x9b8bd991, 0x40ff2fd0, 0xb10ef2a6, 0x3810122f, + 0x45f62439, 0xc9a86ed0, 0x7e2dbefc, 0xbc79019f, 0xbdd33d8f, 0x51cd04a1, + 0xc3f6f961, 0xf8f6ce98, 0x2c65d04b, 0xd87dd15a, 0x173cc5cc, 0xe872d7f1, + 0xbfbc5cd6, 0xc79677d6, 0xf63f2d79, 0xd026f17f, 0xa00eb1e1, 0x053b147f, + 0x81fc21cb, 0xb98a359f, 0x49f79786, 0xd7e88f42, 0xbd8f102a, 0x1e50f22d, + 0xc0035226, 0x5e5ffcc6, 0x74dbdffc, 0xe6953fc8, 0xf09086be, 0xa1af7ba7, + 0xfa9df6fc, 0x72c50d31, 0x28af99df, 0xb8b16e7e, 0x2d3f1173, 0x46721059, + 0xa9f7e9c1, 0x8143e266, 0x173d4595, 0xe5c6971c, 0x9ecea260, 0x963e2892, + 0x9f8c3e1d, 0x05b7645b, 0x4c8ba0fc, 0xf5073e5f, 0x7d2fd88d, 0x371f8998, + 0x1e7f02fc, 0xd187d911, 0xf5bb016f, 0xe7910bc8, 0x5bf26eee, 0xc622fd8c, + 0x5f109836, 0xf624dbab, 0x6b1681df, 0xbfaf0d5e, 0x5f2bdc5e, 0xe8e3badb, + 0xbaebe028, 0xd1ca23d7, 0x0573a16f, 0xeba3c53f, 0xffcfc29b, 0xff09a5c7, + 0x871b1c65, 0x8ae00bfe, 0x615984f4, 0xf1c0565d, 0x075ee947, 0x899771d2, + 0x2bf40bd3, 0xf843a7c9, 0xb98bbb31, 0xc4bfea5e, 0xce4f5ee8, 0xbc61ff4e, + 0x29bb333f, 0x6631c353, 0x767cbc2b, 0xf73f266b, 0x9e327c51, 0xbdba17fb, + 0xd6bfc80b, 0x7ef067dd, 0x2fa11ac6, 0x717e0399, 0x7eac457f, 0xd6eff08d, + 0x55ef22fa, 0x8ad53a72, 0xaf98b37a, 0xbd5dc701, 0xaa0fdf93, 0xbf5e19da, + 0xfd69d056, 0xe28ea7cb, 0x3fb55cb6, 0xa9d05ca2, 0xdee235b6, 0x959cef07, + 0x657d89a7, 0x46fc1f71, 0x6f7c27ef, 0x47c6fee6, 0x7ca31fa2, 0x57df1a6d, + 0x206581ad, 0x64fbd77f, 0x8d68e21f, 0xbf7027a4, 0xc257d997, 0x60341efa, + 0x3eb3ee20, 0xa0f4e824, 0x1fad0fc0, 0xcabf57da, 0xf43c23df, 0xd7fcf874, + 0x14658f31, 0xe5a47f7c, 0xdfdc16a7, 0x9adbc48b, 0xbff93326, 0x227d04eb, + 0x106eb5f1, 0x682ddb3f, 0x55f122df, 0x33ae95e3, 0xffb7ee7f, 0xe0dfcedf, + 0x4dd13af3, 0xfb403995, 0x4a2f5544, 0x7f5eae9a, 0x11eb835d, 0xd77bfbeb, + 0x8b90c5b5, 0xf1326cc9, 0x06f93cbb, 0x7f70a5e3, 0xcb85af7b, 0xf7c280cd, + 0x453c0db1, 0xfc205fb6, 0x732f85f5, 0xeb52f5bf, 0x97dc04e5, 0x481eebee, + 0xca9a9460, 0x7e623ed1, 0x7a5e887c, 0x93c78d29, 0xff5f5c5b, 0x85f9fd1a, + 0xde1acd7b, 0xc63f5aef, 0xbe3b41ec, 0xb491cc7e, 0xe77621f1, 0xe17f5155, + 0xc53787de, 0xbfc47ee0, 0x658a1a49, 0x1e3fdb5f, 0x24debcc2, 0xfda01369, + 0xdf81eed1, 0x6aeebde2, 0xec4cdc57, 0x2cbdb6af, 0x8fe43777, 0x0b5d36be, + 0x268f3f8d, 0x1c2df5f1, 0xdabb2663, 0x5fee3233, 0xd0bf712a, 0xbbe483bd, + 0x16dbe0e7, 0x5bbfb7ba, 0xe8182e62, 0x5bf0eba8, 0x67bbd03a, 0x3a0b29ff, + 0xa72d25eb, 0xe2bfc12c, 0x70825c2f, 0xa9fb402c, 0x2f742ddb, 0x2defdf71, + 0xf3525e78, 0x4fb497fa, 0x7cfd0eb5, 0x955ec7f4, 0xe1cf1de9, 0x882c77f6, + 0x89269aa7, 0x968667a5, 0xf51ca99b, 0x69bfe620, 0xc0d4fae2, 0x4b812ae9, + 0x6e06a703, 0xf3fd0957, 0xb8e8d6e0, 0x23d4f434, 0x2465bdcc, 0xd370f7f4, + 0xf35fba4a, 0xfaf0f6f0, 0xbcce31ab, 0x5c73eb09, 0xbc397eae, 0x1e20ed7c, + 0x91d3d275, 0x4333eefa, 0x1cb0e4ff, 0x6040e3c4, 0x700558d5, 0x75a9c3ff, + 0x73945963, 0xbec2939b, 0x7af5f61b, 0xbd6dedf4, 0x58bb416c, 0xf14cda3b, + 0x3fe8ed45, 0xf2f14259, 0x82cbc095, 0x9f103fb6, 0xe93adb2a, 0xe622e87e, + 0x5e748f5d, 0x40e716d4, 0xc832b97f, 0xcda2b8e5, 0x3849f3ea, 0xc3d9133f, + 0x88dfcc45, 0xe0ebe838, 0x83f42cef, 0x4c4df912, 0x82d5b7e8, 0x9d05abee, + 0x363c4357, 0x8889ef0a, 0xc446bc78, 0x77b36bdd, 0x15abc51c, 0xfd7ca235, + 0x4809c3f1, 0xf5c60ae7, 0xeb9f854f, 0x867f831f, 0x7b94893d, 0x23f754b0, + 0xacdaabff, 0x36fb5f74, 0x6b6e7fa1, 0x0d23fd02, 0x237d03d7, 0xf9bdf8e2, + 0x91de7c7d, 0x25a6b3f6, 0x5a6f7ebc, 0x406bd12a, 0xe989c1f8, 0xbe088f42, + 0xb8b3f655, 0x42afe83c, 0xb51f3595, 0xfc7056ea, 0x4780a9ae, 0x1d4bbfe8, + 0x9eed1897, 0x56fe9192, 0x7e46f7f8, 0x418bee31, 0xbb63bf7d, 0x7f7e343d, + 0x97db9d3c, 0x1d64b375, 0xef1210f9, 0x8ccfce2c, 0x4c4cef1a, 0xa32e7bc7, + 0x5a7a7c1f, 0xdee3bc68, 0xf8f11131, 0x95f3d72b, 0xb6a7bf78, 0xde97eb89, + 0x1137e842, 0xfe4677fd, 0xd5936d70, 0x2d497187, 0x65de89e0, 0x5e505e21, + 0xc232a4db, 0x3f379a4b, 0xb7bd067d, 0xd5bde334, 0xa760ad25, 0xa525fba1, + 0x1dfc207f, 0x0dd7cf1f, 0x168f4b74, 0x4371183f, 0x9fee15cd, 0x946bdf1a, + 0x350fc520, 0x729efc6d, 0x19aba1cb, 0xbedf3099, 0x58c8fff6, 0xe9c3e909, + 0x296b5fdc, 0xf7857ff6, 0x6dd87e6c, 0x0e87ea8b, 0x91a971ea, 0x1cc6a5e4, + 0xe4ff234c, 0x3783f800, 0xd1f1bc43, 0xb46f1477, 0x00798a1c, 0x577bc3f7, + 0xfe3ac779, 0xd9ea9f0a, 0x3767f226, 0xd14a46b1, 0xfff509cf, 0xbdf83b56, + 0x1d84479d, 0x8013fcc4, 0xeea047eb, 0xfae1fcbc, 0xd537d0c1, 0x996bd702, + 0x348e65be, 0x0b544f5c, 0xdbcaa9b9, 0x91df4741, 0x90b5507e, 0xc9fcf027, + 0x41fa45ee, 0xeb87a78f, 0x628ffa99, 0x3bedcfc9, 0x4f703b2e, 0xcffbe818, + 0x03dfd123, 0xca2b3eff, 0x0277e83e, 0xbce23d9f, 0x2650beb5, 0xf16699fa, + 0x809bf0d4, 0xbe9b848e, 0xc61f7653, 0xef1db909, 0xaa0e2164, 0x50bd4276, + 0x7a3e03f9, 0x8f94fee9, 0xe3f92bef, 0x28c74ce8, 0xcef1d5df, 0xfd5bc464, + 0xe44e3f47, 0xd13ab9fc, 0xf9fd7292, 0xf124a919, 0xf124d7f8, 0x129f77f8, + 0xabb8c04c, 0x09ec80f6, 0xf06ec7bd, 0x238129fb, 0xff38f0a6, 0xe6957499, + 0xf1c6df53, 0x29e76a61, 0xef9cbf8c, 0xfc6998f3, 0x80c5e561, 0xef62bf9b, + 0x300bce18, 0x27ee6b50, 0x329ed5fc, 0x4f6a7cd1, 0xda85a40d, 0x4dfb1d7d, + 0xbf57fd47, 0x893e919e, 0x6f77a863, 0x908177c3, 0x18b3edbf, 0x668ea7f2, + 0xfa49553d, 0xa8664b2b, 0x68fb1ebf, 0x7b50a4dd, 0xcfce9c91, 0xc1d219b7, + 0x0bcc5e85, 0x87417c7c, 0xd8a96c4d, 0x7e78e027, 0x103fc441, 0x8f4aed5f, + 0xa8dd5f12, 0x6edf5c5f, 0x5c8fb865, 0xf74ace7b, 0x5f687e70, 0xbb3bf14d, + 0xfa849de2, 0x37bd7986, 0xc758fa61, 0xfdf849ea, 0x37b58e87, 0xb4a7bed1, + 0xe99ecc29, 0xfa173f38, 0xe1a71f4b, 0xf6ea98bb, 0x611ee98f, 0xe699bb75, + 0x7b50f98f, 0xedce96d6, 0x0c675f59, 0x2c486fed, 0x8d80e38b, 0x7d77eb0f, + 0x2ff211cb, 0x61cab7d6, 0x768c1aef, 0x7ef9d327, 0x0381b77f, 0x3e26e4bf, + 0xfae9e5ef, 0x3e69b7d6, 0xf13f6655, 0xccc9beb1, 0x14f377cb, 0xa76a4efc, + 0xe71d24b3, 0xbff717bf, 0xed08b9f9, 0x924d4073, 0x1cec818f, 0x7887be1f, + 0x5d013f1f, 0xc6267c07, 0x3ce95bbf, 0x1c6ba1b9, 0xe819b7bd, 0x9a253b7a, + 0xe78938dd, 0x13950028, 0x890e3c99, 0xc5d67f2c, 0x9c4e1ff7, 0xc4ecfae5, + 0x68a4ef7c, 0xc5674d7a, 0x04974e3c, 0xbbf85bbd, 0xcf7ac8f0, 0x8e76fe88, + 0x7ae04fd6, 0xd0c6f67a, 0x938f5c79, 0x3496a7ef, 0xddf0571f, 0x348b5546, + 0x5548ed03, 0xaef4a7f6, 0xa805f203, 0x0702aad7, 0xbab1dce8, 0x7702ef69, + 0xefdc7994, 0xc2ad76e2, 0x333cfd12, 0x79f1c5c3, 0x22a9699a, 0x04ca7a8e, + 0x34ae9de3, 0x2cfbf83b, 0x76f33efe, 0x2d9787a1, 0x729f9332, 0x7e66a99a, + 0x17cfc16e, 0x7b3d0b16, 0x91cfd0bb, 0x7d0d86ef, 0x67e8a77c, 0x336cabc9, + 0xbe442f9e, 0xf853be23, 0x9b994b7b, 0xff7c8ffa, 0xfbf0a77d, 0x404eff22, + 0xe1e84b9a, 0xea226c89, 0x07d83f61, 0x9cc6fbe4, 0xb7b3b218, 0xd510994d, + 0xd4f7c04f, 0x8d4f78aa, 0xfaffc1a9, 0x7ec94f9c, 0xfb3ce89d, 0x3fc3dd16, + 0xa2b2c31b, 0xd90d8f9c, 0xefee432f, 0xe7177ce0, 0x3e0ed50d, 0x97ff8347, + 0xdd0a3220, 0x3ff832d7, 0x3fe1f04b, 0x9b266f7d, 0x20fba129, 0x2cef6507, + 0xffde2a57, 0x1aff21ed, 0x0bf64056, 0xd62195d6, 0xb10d6195, 0xac46974b, + 0xa1e38a8c, 0x5ce925f5, 0xda50a7ff, 0xf9256399, 0xf44bf6ab, 0xc03aae3e, + 0x0efab1e5, 0x2709f689, 0x7dd274b6, 0x92a5e585, 0xec6ae6e6, 0xc0cfce0c, + 0xb71b62d1, 0x065e06e7, 0x847025e9, 0x6fdf68e5, 0x123df617, 0xf758934f, + 0x2effec02, 0x3de1a4b7, 0x68e2ebc4, 0xa823b4c5, 0x2387afae, 0xf519a5c0, + 0x5e9e2466, 0x22577972, 0x5c7e20fd, 0x3ffa053e, 0x064df391, 0x3ae6a7e2, + 0x9084f472, 0xfd769db3, 0xf5ffda04, 0xbd5ce2cd, 0x8835a739, 0xe462e974, + 0xbb38f607, 0xfee46cb7, 0x57ab9d31, 0xbee86207, 0x1c5b7564, 0x6eaaafbd, + 0x8c9d8fa9, 0xac9b6471, 0xb2be41c5, 0xc62954e5, 0xfc0595ef, 0xa58d479e, + 0xb9d0fc9f, 0x5cc7de29, 0x7afdf033, 0xba79d87d, 0xe1ebcf31, 0x3dcf523d, + 0xea56be83, 0x79fe9d7f, 0xe365d046, 0x9369cbf1, 0x7aa31e19, 0xf779c69f, + 0x82d3791d, 0x276a054f, 0xaf00b3bf, 0x52e33d56, 0xa6a2dea9, 0xc6dc46ce, + 0x45ffe635, 0xefbf83ba, 0x9346fb30, 0x6377997f, 0x0fea4bf7, 0xfe8a9b1c, + 0xf1e76f74, 0x9c1096a9, 0x7d046cf7, 0xf57f851d, 0x57e424cc, 0x969254a1, + 0xcb877f0a, 0xe1fb6d73, 0xe85fdc34, 0xc3ce3941, 0xb404e3f4, 0x4f7bd593, + 0xbf404c27, 0x8d4f1f63, 0xc9b52efe, 0xc1298f54, 0x87c67789, 0xcd336fce, + 0xf79f92ef, 0xe27058c3, 0xe5a129b2, 0xf5afff0d, 0x77a441c0, 0xa6182db5, + 0x413a0c07, 0x5cef4f74, 0x9d2b0ef5, 0x4b79e3d3, 0x4facfde8, 0x866eff04, + 0x75e507a0, 0x8f339e16, 0x614cd743, 0x615e61f7, 0xcf092501, 0xbf320383, + 0xf49a36b7, 0xfe314cfc, 0x13a04acd, 0x12ceb5ef, 0x59b393e7, 0xc79bd537, + 0x337529fa, 0x2dd3bd07, 0x85a51a66, 0x186dc0b6, 0xfdf9e5fe, 0x9024fef4, + 0xd82f38a6, 0x28e07bc4, 0x9ba21efc, 0xf4182ec2, 0x8b1cf190, 0x5c8c07df, + 0x1eb19f4f, 0xe83fd737, 0xd6bde05a, 0xf3a7e642, 0x282cb9f3, 0xafa3d1ce, + 0x6fc40e63, 0x17366e78, 0xa25899dc, 0x17ea8f87, 0x68e47ae1, 0x46de09eb, + 0x0ea5666c, 0x48149f9c, 0xbb8b5d33, 0xe1f475f1, 0x67dc472d, 0xf7bfb07e, + 0xe7430517, 0xb1db5a8e, 0xae1ef0cf, 0x3dd376e4, 0x35df0d5d, 0x50129c63, + 0x58f5067a, 0xd755a816, 0x8f511faa, 0x981def19, 0x8cfdd197, 0xb80ef7c8, + 0x7f218bdc, 0xbfb8c7af, 0x54b7d3ba, 0xb0efbfc5, 0x7f46c522, 0x96df2607, + 0x0ff71d31, 0x1fdec9fd, 0xa4e75711, 0x89d409a6, 0x7e419be2, 0x1c55c0a8, + 0xfae21773, 0xdef1b725, 0x065e1182, 0x31a7d5df, 0x6712f77a, 0x9e51efe5, + 0x92da1c02, 0xde2afd08, 0x944f661f, 0x6eefe8a8, 0xf434da71, 0xdf38ace7, + 0x36f9a1b8, 0x8a3df8d8, 0x0f865b06, 0x2f71b8f5, 0x0d9e922c, 0x926e8b40, + 0xfe46cd43, 0x997bc472, 0x19bcda5f, 0x8f1d6023, 0xdfd317c6, 0x53ddca07, + 0xbcbf42e4, 0x69bbbc41, 0xc7d27490, 0xefc4d3ba, 0x17773233, 0x8b7693f9, + 0x9dfb8dba, 0x206faf74, 0xf3bf2545, 0xd896fc70, 0x586f90c9, 0xaa3dd129, + 0x31355486, 0xcbef00b3, 0x7bf50ccb, 0x17495743, 0x8f6c07da, 0x93837c7e, + 0x53d6e3df, 0x43ebdd19, 0x7c19143e, 0xc1f10d30, 0xe4f7ee2f, 0x831adedb, + 0x52d3f5fb, 0x9bb60958, 0x404f7016, 0x4bef189a, 0x46b32f80, 0xf0f7e2a4, + 0x714c567b, 0x830a7dd0, 0x0214002f, 0xdbf043b7, 0x78c393e0, 0xc256ef1f, + 0xfc1bc7de, 0xf3962a7b, 0x5c378cc9, 0x155b51c6, 0xcfe48dfb, 0xec3501ff, + 0x4a307ca6, 0x00004a30 +}; + +static const u32 xsem_int_table_data_e1h[] = { + 0x00088b1f, 0x00000000, 0x566bff00, 0x51f86063, 0x54b7c08f, 0x8aae1818, + 0x12d18aa1, 0x6066113f, 0x60611330, 0x4de20688, 0x01f77b40, 0xcc40fde9, + 0xc0c0ca21, 0x4005c409, 0x37881ebc, 0xa03df100, 0xb7341af8, 0x6061e3cd, + 0x8bc40058, 0x10097880, 0x303371bb, 0x6f1373b8, 0x06197dff, 0x04452c86, + 0xfd90157f, 0xfe7e995e, 0x5ed86c1f, 0x9df6be9f, 0xc1b7da00, 0x0617c102, + 0xa05a37b2, 0x8164d9aa, 0x68cd8cdf, 0xf8d05bf2, 0xdfe8f15b, 0x7fca8ce1, + 0xffca8360, 0x60c0c765, 0x3fe082e5, 0x16efc1b4, 0xd4099c74, 0xbc42e59b, + 0xa88c47fa, 0x104c49fc, 0xc472001a, 0x03a8ec47, 0x000003a8 +}; + +static const u32 xsem_pram_data_e1h[] = { + 0x00088b1f, 0x00000000, 0x7dedff00, 0xd554780b, 0x733ef0b5, 0x9992bcce, + 0x24324ce4, 0x02709201, 0x1c45a1e1, 0x62d11262, 0x0409813d, 0xa8513a0d, + 0xf09862a1, 0x404c108c, 0x3fc6d0a4, 0x05102183, 0xb91060e9, 0x080ffb56, + 0xded2f45e, 0x8b42d148, 0xd881f074, 0xd7a17ed6, 0x32adb57a, 0x68a3e2a2, + 0xbdb56c62, 0x5ad7787d, 0x9ccc9f7b, 0x7ad104c9, 0x3fff6dbd, 0xdfb3b87e, + 0x5af7af7b, 0xc513ef7b, 0x23bcc996, 0x7f18fb18, 0xd6ac672e, 0x121b18c5, + 0x7e39174f, 0x17ebfe7b, 0xb0dfebc5, 0xf1aedab2, 0x6d9ac750, 0x2f105cd7, + 0xc636ec67, 0xdfbb18ca, 0x65813199, 0x61185a62, 0x38dc5019, 0x19cac2c4, + 0xf46559bb, 0x2f47bf73, 0xeb194a94, 0x77576add, 0x55b94115, 0x90bc90cb, + 0x0d4a3ede, 0xcb4fd849, 0xedef7cc1, 0xe4177556, 0x963f9fd9, 0xe0e2bfb1, + 0x938e19fd, 0xfc12d8c3, 0xd663147d, 0x982cc83f, 0x251fe90d, 0xb2b7ef4a, + 0x9f580179, 0x5586bd55, 0x53ebe2b8, 0x0a7601bd, 0x41b11fca, 0xbd5b943d, + 0x7c704701, 0x263cfebc, 0x9fd9fad1, 0x637c695b, 0x1af576be, 0x0dfb4e87, + 0x3de589c9, 0x96065f6a, 0x96be1fb7, 0xda1a81c6, 0x4fae1367, 0x29ef7a83, + 0xc7c4b31b, 0x4229c38f, 0xed7918f3, 0x717bcc30, 0x82c35f3c, 0x0d57dc36, + 0x6169180b, 0x97d4c254, 0x1cd3ca51, 0x99baf69e, 0xe366a98c, 0xfed22aa9, + 0x45d90df2, 0x9b2c7e54, 0x9e3133da, 0xf28f21b6, 0x533cb4ea, 0xfd8acc79, + 0x80d65200, 0xad2e7ffb, 0x3a50b071, 0x5fc787d0, 0x700621bf, 0xac7bf5cb, + 0x0adf8231, 0xe95bf086, 0x4c63f0e0, 0xfc844d77, 0xa7f3c642, 0xc442c1dd, + 0x597fd1db, 0x4fed8852, 0x64292e57, 0x7771be90, 0x5fe115ae, 0xfd40e389, + 0xaa4b1dc2, 0x16c604d9, 0x098ced84, 0xff0c7d5c, 0x3f203bea, 0x513f9e2e, + 0xe855baac, 0xc1ffc277, 0x9d3f8e10, 0xe6235ef0, 0x0ded200b, 0x8db6fc85, + 0xc740cbef, 0xfee642f3, 0xbfa63b35, 0xacd4f389, 0x32379731, 0x97f4f7b7, + 0xf31f17e0, 0xd4f08c7d, 0x192e8981, 0x7a710748, 0x199f1108, 0x25eb00f9, + 0x5e00043c, 0x6f481788, 0x54c259b8, 0xa89f7913, 0x203e45d7, 0x369141f2, + 0x4890f28b, 0x223ca2c3, 0x1e512ed2, 0x916ef915, 0x28542def, 0xfa8b958d, + 0x0de68c0d, 0xbe52f08e, 0xcf8915fb, 0x147b3633, 0xb81ad76d, 0x43ce9e20, + 0x78085ebc, 0xc04e816d, 0x2974f3bf, 0x6068bd32, 0xfbda78bb, 0xb40bb632, + 0x123bb5d8, 0xa7fc21da, 0x01e42494, 0x095939a7, 0x73d32f79, 0x452df313, + 0x099ca06f, 0x1d345838, 0xd60af1f0, 0x6537bc00, 0x7c83bf07, 0x3345e306, + 0x2e587db0, 0x64d779a3, 0x15cf5e13, 0x04cec01f, 0x12bd4c1f, 0x0f9101a6, + 0x2a7e105b, 0x6f9c4a0b, 0xfce9c498, 0x48b5351f, 0xfc369f08, 0xc253e015, + 0x1c234f02, 0x83599d54, 0x06d98380, 0xa149677e, 0x39df9062, 0x3a645761, + 0x967723c0, 0x3c052ec4, 0x169cdece, 0x871e03b1, 0xe57c73e7, 0x80e42c2b, + 0x663bbb74, 0xdbf683c9, 0x6ddf310f, 0x9ce8fed0, 0xda08520d, 0x3e67af6f, + 0xf67dbf6c, 0xc60ca192, 0x26c73edf, 0x4aaa1f21, 0x5e7c8ac0, 0xe486ab31, + 0xd67cbf42, 0xf306166d, 0xf00ddecf, 0xd86a76c7, 0xc8de7282, 0xd07b45fb, + 0xe7c7c45c, 0x40daafe1, 0x19d2fefc, 0x835d5028, 0x9678bfe3, 0x3d00b514, + 0x9201e855, 0x3e75b327, 0x020f31be, 0x2c7c712a, 0x9ecf75c7, 0xa8999455, + 0x6dd3924f, 0xd24056a0, 0x415abbb2, 0x97898d28, 0x8d7555df, 0x990dfb1b, + 0x982d2dbd, 0x67b35d62, 0xf2c0e23d, 0xb34776f3, 0x0c0edd30, 0x2875c511, + 0x27ad2741, 0xbb3bf7c8, 0xbfb26e5f, 0xc3eb8c7e, 0xf6e5d03c, 0xc8156d59, + 0x2083db67, 0xbbde1091, 0x9c693be7, 0x5e386bda, 0x3c99bac5, 0x0895f297, + 0x7dc0d747, 0x3fd625de, 0x556038bb, 0xa3be1e09, 0x87c2294a, 0xefa864f9, + 0x4eb4559b, 0x338e06d1, 0x43da14bb, 0x87f620fa, 0xaab6777d, 0x6b674e34, + 0x46efe51e, 0xbbb8e078, 0xe2709f9b, 0x90e02078, 0xd566fa9d, 0x8d535854, + 0x9ff3e7e7, 0x71bafd10, 0xf1f131bc, 0xcee3141f, 0x7bb5adde, 0x635abc71, + 0xacd1137d, 0x0c0a7960, 0xcf25f209, 0x619a9217, 0x521d3c9c, 0xc43ff718, + 0x60317efe, 0x2fde3e5c, 0x77bfdffd, 0xd2f93415, 0x3e1e8715, 0xfe43e900, + 0x11be1e37, 0x1563cdc6, 0x3cc0b705, 0x3e6d7b79, 0xb37d9de4, 0x1bbc8e76, + 0xdf6cd9d2, 0x5c328ff9, 0x6929d6f7, 0x16c38eb8, 0x414b5d9f, 0x7c38b33f, + 0x0268e992, 0x27f9032c, 0x884e1e99, 0x3a0b767d, 0xd3c0507a, 0x1583e758, + 0x0abbdcf7, 0x65331dc6, 0x90f3c96d, 0x6594ebfe, 0xa0dd714b, 0x0f3ff607, + 0x8ae87ff8, 0x06daef6f, 0x382c95f9, 0x1efe0245, 0xafd6ed3b, 0xd3f6c01d, + 0xae2f569d, 0x29f595cf, 0x9ebf55f5, 0x1fa4aab2, 0x8bc89b34, 0x9eb8d994, + 0x363b5189, 0xfbf83ea8, 0x44ba034c, 0x172097f4, 0x356e101b, 0x9f3e5e7e, + 0x48d8db55, 0xd70773c0, 0x4b37f37b, 0x3e0d0724, 0x087c17ac, 0x869fab0c, + 0xd8fc81df, 0x068700c7, 0x2a9de761, 0x54efd466, 0xfb41148b, 0x35e3bbb7, + 0x6a778e2b, 0x1c0ca8fd, 0x28c754ff, 0x32b92a5b, 0xf2ece3bf, 0x07a435e6, + 0xad538ba0, 0x4e67a09a, 0xfb0df3df, 0x977243ab, 0xe8d65d02, 0x343a6f92, + 0xba966e09, 0xedcf2824, 0x7d91b228, 0x84ebe825, 0x13bb519b, 0x2c0f92ed, + 0xd2b4767c, 0xf306b85e, 0x9e89d33b, 0xdcf7afa7, 0xbf7af98f, 0xb63e619d, + 0x77ad2c6e, 0x1f89fafe, 0xaafb08be, 0x557dd90f, 0xe086fe50, 0x9f5e80a7, + 0xc212f581, 0x1e1c5c63, 0x55eac9c1, 0x7e7e1093, 0x2d36efab, 0xd62b2f0e, + 0x47e6fc03, 0x0ab0de87, 0x242b79e6, 0xf06c9cf9, 0xcebabf7d, 0xa863e42e, + 0xa9caf51c, 0x27cff670, 0xb60b78c1, 0xf4031c55, 0xb00a9eb1, 0x46bc606f, + 0x0035d807, 0xbfb7c5e7, 0xc520133f, 0xce92422a, 0x07f9fc60, 0xe03b11ec, + 0x23203e61, 0xa2f3d71b, 0x90768233, 0x498257a1, 0xafc0d672, 0xd0a9ff31, + 0xcb940ca8, 0xc6721ddd, 0x1e38b4af, 0x1f6477e7, 0x6eb14bcb, 0x1c868f03, + 0xd66c2f9f, 0xf5c7f418, 0xb8dc3c03, 0xb311c5fe, 0x92d75b3d, 0xa73bb269, + 0xc2d7f41a, 0x38416fe9, 0x3f0f54d7, 0xfe3089ae, 0x5b3bfe62, 0xf276e7ec, + 0x9df21d2b, 0x6b1bfe38, 0x6e0eddae, 0xce96eb08, 0x996fd158, 0x81989e1f, + 0xedce9d69, 0xd83f3adf, 0x25cfe8bb, 0x8fe8e9d9, 0x4fa9824c, 0x819c5d94, + 0xef5c1b74, 0xc5a790d9, 0x6fe06bf1, 0x9db30ed1, 0x55d850bc, 0x7de6f5c1, + 0xdd3fedc5, 0xb2497686, 0x79d86f1d, 0xa2842ed0, 0x5cc5aeaa, 0xcbdf760f, + 0xce9c5952, 0xbfd99d03, 0x8e73b927, 0xed0ead72, 0x453c51ef, 0xed12abbf, + 0x798ba059, 0x7af9fa6b, 0x3abdea1c, 0x76e3e696, 0x37f84c6b, 0xd7296cff, + 0xe38c7553, 0xf79ade79, 0x6bcd3f49, 0xc86af4e1, 0xce3864c3, 0x71f199f4, + 0x9d3324f5, 0xba66e8d6, 0x846ab6bc, 0xc0ecfda9, 0x75fd5358, 0xea9a17b5, + 0x362f04e7, 0xb86fafe5, 0x86fed4dc, 0xba66e9e6, 0xfb43de7f, 0x3075e830, + 0xe84cfffc, 0xd9279fd5, 0x7d5a4667, 0x900a5fd1, 0xb0d64f8f, 0x674c2eda, + 0xc9c838f3, 0xd37e9e0a, 0x0b07e3c2, 0x9a3a0531, 0xf6cbf229, 0x27afc33a, + 0x977967ac, 0x3a6f94c7, 0x7afc3438, 0x09967ec2, 0x9255b2b8, 0xc8d67c82, + 0x1672d8ab, 0x5339442b, 0xdc68d2e2, 0x1cb12c9b, 0xdeb0f7cc, 0x6af4951c, + 0xc0d2f894, 0x64e749d7, 0xfc42dd87, 0x65fe4511, 0x6267ac6b, 0xa7c0bcc6, + 0xc8d330ec, 0x41d8536f, 0x0e92fb94, 0x2445804d, 0x42e6cbcd, 0x70766efa, + 0xcf41259a, 0xfccf2d4b, 0xe4809a51, 0x9d39ef91, 0xf11a55ce, 0x55f239cd, + 0x580c1495, 0x937a68ca, 0x581ffd5e, 0xe79f0df7, 0x5a4ec1ba, 0x7bad05f2, + 0xf3eca595, 0x166ef75b, 0xeb493ffc, 0xe39c7896, 0xa6f75f73, 0xf3dd73cf, + 0x1c989d84, 0x3173a84f, 0xf11a6fee, 0x9ea3c805, 0x6bef9996, 0x6905297b, + 0x415efd0d, 0x694a55d9, 0xb5cdfc84, 0xca3cfef6, 0xe56e57ef, 0xcf21bbf9, + 0x9def5fa8, 0x8d308b23, 0x1a51c7b9, 0xd66471a1, 0xccbd7e4c, 0x52e78fba, + 0xa283e839, 0xbb703eb8, 0xdd7bf98d, 0xbd5ea9a3, 0xcd8bb78b, 0x02f6491c, + 0xea3213d7, 0x39176a09, 0x57da2b9e, 0x9140bb52, 0x8ec4f344, 0x3242718a, + 0xde0eeca5, 0x4b9dd22e, 0xb718f8e3, 0xc86a7947, 0x7c79efdd, 0x0f27e8b5, + 0x459cac87, 0xbd015469, 0x085b2659, 0x0e1fe08e, 0x041dbc25, 0x38385ec0, + 0x788a4fdc, 0x2ff9726e, 0x942b1c85, 0x35bf4a15, 0xca9acfb9, 0xa71fed3f, + 0x491552d8, 0xae02ff51, 0xa363e807, 0xb077af9b, 0x57ae4e79, 0x92aff652, + 0xe6b7bd79, 0xf66ce929, 0x4b0ae66e, 0x7ea29220, 0x03c780b6, 0xe2d5a4b7, + 0xbbed45f8, 0xfd02463b, 0x3d935c9c, 0x09c2fd11, 0xf805d218, 0xd24285e5, + 0x81ffe80a, 0xdfe4c8a5, 0xb5796bcc, 0xfb8bd73d, 0x5a444ef7, 0xf9e402fe, + 0xb7e8790b, 0x72f1a94b, 0x1bf022d8, 0x807747be, 0xf189735e, 0x0b4346ee, + 0x0f7485f7, 0xd8b5705b, 0x9f90955f, 0xc4dd7e7d, 0x12c49acf, 0x0ced19fb, + 0x951b46fe, 0x390a7a71, 0x75df904b, 0x9784a6b6, 0x48633a0b, 0x27ff0667, + 0x0d5b0f8f, 0x017d4065, 0x2c967018, 0xc625cfde, 0xebdd2053, 0xb2e47a08, + 0xc4713904, 0xc4b8c517, 0xf20ed9c9, 0xcf2d82a3, 0xb1eb88bc, 0x40299fa4, + 0x08d7077c, 0xb90214b9, 0xc7d848e4, 0x272f9467, 0xbb6f429d, 0xea371eb9, + 0xfafa165f, 0x6f502f83, 0x9e039e17, 0xfb04823f, 0xa2950c9d, 0xc6b2c645, + 0x32c30c33, 0xc863e5d9, 0xc1ecab8f, 0x8965cb2f, 0x86945af4, 0xf0d4fb70, + 0xc22af964, 0xb9f2f293, 0x4b90d3c3, 0xb51615c3, 0xc1adbe23, 0x901eb899, + 0x30bf14b2, 0xf959f9d6, 0xa14bc0d7, 0x52bb0585, 0xcaef87c8, 0x7f1bfea2, + 0xef34f920, 0x53c52f78, 0x8fd4b5e6, 0xa87cdb38, 0x60932d07, 0xd9a62ed7, + 0x351f22cf, 0xb397175c, 0xf3ee91eb, 0x7ab4b59b, 0xf310efc8, 0x931acdd6, + 0x00ad7b86, 0x53e318fb, 0x84b32768, 0xfda26438, 0x1c3f189c, 0xfc36aecc, + 0x1b813ac0, 0xe7086b80, 0x51b3d635, 0x836da9d8, 0x0b1ba9d8, 0x687c0b7b, + 0x75fade9f, 0xabb1e109, 0x73b72cc3, 0x676fde5b, 0xa37323a0, 0x530d256b, + 0x25f259a5, 0xfadec9c0, 0xf3ae0151, 0xb91fade4, 0xe4efc153, 0x42dc0f9a, + 0x5bff9078, 0x2c5ffc27, 0xf0b7f827, 0x3f7245f8, 0x35f77f63, 0xb6e4f5f3, + 0xfcf090ac, 0x66dcfa6c, 0x9b0de309, 0xcde6bec4, 0x945145f5, 0x488f8fe5, + 0x35e79f28, 0x7ce256f7, 0x4fbd0d75, 0x1bae1ca3, 0x943a7ccf, 0x4a39add7, + 0x08e59574, 0x8b2e5b7e, 0x6f41a1d3, 0xe53c0f60, 0x87be4891, 0x49f10958, + 0xad7a0644, 0x70b84ed4, 0x2fbb467d, 0x9bf24f8a, 0xd63084a7, 0xe3ccd151, + 0xe87740a6, 0x62fec129, 0x45a52f04, 0x5ca145f2, 0x34f9b669, 0xa6bc9fd8, + 0xb422ce66, 0x3e6c1a1f, 0x5b1dda1d, 0xf9451e51, 0x491acf7e, 0x7ecd11c4, + 0x3f36a2b8, 0xd1768e9b, 0xc9930b5c, 0xd1abd06e, 0x9d0557df, 0xf740b3b5, + 0xe1d72c68, 0x2197e83f, 0xc586d5ca, 0xd0c998d5, 0x02f1496d, 0x1650e89d, + 0x66b1cc72, 0xd317346b, 0xffc99b62, 0x50379b92, 0xed8ec07c, 0x3f35b1a1, + 0x1a61bea9, 0xaac9939d, 0x2c84fcb9, 0xf026c9ce, 0xb592b273, 0x075e7517, + 0xf5bd29eb, 0x74c0ffda, 0xe01f220e, 0xe6eebe56, 0x75f85aec, 0xb5e77b52, + 0xed677e98, 0xcf959f87, 0xdcf33d99, 0x2f28dcf9, 0xcf91ce50, 0x41d7e107, + 0x22e5a5f9, 0xf836373a, 0x07cb64e6, 0x832bed29, 0xd8f9926f, 0x827d3748, + 0x1854d83c, 0x7efe402b, 0xe3c5ed65, 0x9add7fb0, 0xb08d1faf, 0xb5d7ff38, + 0x81f3a0ac, 0x5a997379, 0x3f940d25, 0x7fa5e3c9, 0xb490f956, 0x3905ffdf, + 0xfa0929a1, 0xcbffe0ca, 0xc156faff, 0x2ea7e8d9, 0xa3ce97bf, 0x53d11fc0, + 0x04fbe9e9, 0xec55ac7d, 0x5033af44, 0xb84883c0, 0xb9e0fa02, 0xf7c2cca3, + 0xe6fb026d, 0x157e6072, 0x04735ff2, 0xae3ae227, 0xe81dbc80, 0xedc48664, + 0xd70a099f, 0x8b3f7197, 0x9d865ddb, 0x4743f395, 0xb712dd2c, 0x62d8269b, + 0x390fd073, 0x30c6d6b9, 0xd0f27c6e, 0x75fcbd7f, 0x90e877d8, 0xd61a37c3, + 0x83614110, 0x3b1d07f5, 0x7b714543, 0xd81764ee, 0xbeb9e3d9, 0x5e6c7b46, + 0x4ee7448b, 0xa9a427e0, 0xd2de1217, 0xbb71dc6a, 0x827a122d, 0xbbe036f4, + 0xd03ddea0, 0x187183be, 0xa5a1338e, 0xd6150ae6, 0x4b64df75, 0xae3d2a55, + 0x3e9c3958, 0xff82ff2b, 0x0c7e8857, 0x97ef13ae, 0x8a3b4cc8, 0x03ea81a6, + 0xf6f169f8, 0x9d91dfe0, 0x4a8a179f, 0x59973c76, 0xc6d25c5f, 0x7321d2f9, + 0x52be73fb, 0xa240e786, 0xa4a5b27e, 0x0b9f8b4d, 0xc1e298b1, 0x5761b3b8, + 0x852ebe0e, 0x25e4369d, 0xc1ad93c6, 0xf5f454c6, 0x7997e945, 0x7cfa6a6a, + 0x53fee147, 0xf824e2b7, 0xbb42f3cf, 0x31e47214, 0xb00beed1, 0xe57abf7b, + 0x2e0e2fa8, 0xaa7ec45f, 0xb3f6b9fe, 0x9ff90afd, 0x33393f6a, 0xf3f0b9fe, + 0x1fb917c2, 0xd6ece7f0, 0x4f2d7214, 0x173c97e8, 0x7149b48b, 0xd5f209f9, + 0xfd93ed8d, 0xae41bfd4, 0xd8535ae6, 0xff388df7, 0xea443c10, 0x359d78a5, + 0xedf74594, 0x704675f2, 0x9467e619, 0x852ed197, 0x585e11fa, 0xb457941c, + 0x52961c04, 0xc6185bcc, 0x7c5beadd, 0x9ebf9e54, 0x4ec115c7, 0x2fa0688c, + 0x9c788587, 0x75e4186f, 0x2977b7c8, 0x1e410f94, 0x02df7de3, 0x57fb60b4, + 0xb73a015d, 0x50ef5995, 0x763a2f3c, 0xd7ca8dab, 0x5927c7f7, 0x479c22dd, + 0x0ee45f8c, 0x5f3ed044, 0xdf8714ff, 0xf78ed0ab, 0xbc516c07, 0x54981631, + 0x7699e3c4, 0x675c8f1e, 0x478c4a2b, 0xae518406, 0xf88a7bf3, 0x068826ab, + 0x2bd797c6, 0xa8de31bb, 0x3e5d80b4, 0x81b70e21, 0x71ccebf7, 0x185fc345, + 0x85ea92cd, 0x944230bf, 0x73f10e8f, 0xc47ea343, 0x81bf64b6, 0x4e6b0f97, + 0xd7319e5d, 0x212807ec, 0xa8ce8f7e, 0xfae6bc57, 0x8cae82e1, 0x15ad67b8, + 0x6a7486fc, 0xc6e7425e, 0x05d9121d, 0x5c1768f5, 0x806bb718, 0x69fe28e0, + 0x9dac55d0, 0x909105db, 0x76ade385, 0x93f22ecc, 0xb8d0d75c, 0xb4607d86, + 0xc9ef5faf, 0xec764f9a, 0xa85efc6d, 0x1dfd97e0, 0x3f426d17, 0x6be6c0e4, + 0x63e98a7f, 0xe7d39be1, 0xd4c2bc10, 0xceb6e0ee, 0x8c6f312b, 0x93ccf803, + 0xf1993c79, 0x5e7772b8, 0x2431e106, 0x033e06f2, 0x5e7f0873, 0x3387dd1b, + 0x416656e8, 0xac1ef1c6, 0x093a27aa, 0xd2847c8b, 0x3f7c79e3, 0xbe3c5c1b, + 0x22a1f50d, 0x6d5da76a, 0x8c4bb4a1, 0x3e7cdd13, 0x0f7daba7, 0x33fdda53, + 0xc33eef9e, 0xf27de0f3, 0x38901df5, 0xf4178e1d, 0xa7256ab8, 0x343f7163, + 0xf472fc78, 0xe22cf34b, 0x8f5033fc, 0x72cf2c74, 0x72df98a8, 0x3f1e7949, + 0xa3ba611f, 0xe8ce213c, 0xb19c51b5, 0xa19abdcd, 0x6cb3ba9c, 0xe42f1475, + 0xfc8cf9c8, 0x47df3955, 0xc0743b79, 0x79f03f38, 0x8921ee88, 0x8235bffb, + 0xa7126c26, 0x25e79603, 0xaf746c7c, 0xb649c3ce, 0x45fab25c, 0xb1e6dfec, + 0x4f3078d1, 0x4779f22d, 0x3e97c8be, 0x027d62f8, 0xb75c3a5e, 0x0b7fc839, + 0x5cfdc3df, 0xc11d17c1, 0x17ef0390, 0x0e2569b5, 0x0957530d, 0xea462df9, + 0x76a25972, 0x8c49d7a2, 0xe29349ce, 0xb7b7b29f, 0x36e9fd15, 0xf55bf94f, + 0x78a6ef62, 0x3f4380ab, 0xe24b8c7d, 0x4e5f3f93, 0xddf86a7c, 0xaf9cdd7b, + 0x1163cedb, 0x9368a73c, 0xe2995e38, 0xd7fbc3cb, 0xda8b1a69, 0xd1ca0632, + 0x2e6c5734, 0xce3643ae, 0x073c0451, 0x6e6dbb93, 0xf8aa5e5f, 0x7f78c27c, + 0x1b4d3e41, 0xfa4fe66f, 0x61a6f581, 0x23bffb0a, 0x5448c1eb, 0x5079c5e3, + 0xc6e42e9e, 0xd5e46d26, 0x9ede2d16, 0xe3851886, 0xbea05686, 0xe1c6e832, + 0x14cee9b2, 0xfb15f4f3, 0x5510176a, 0xe3dcb8b1, 0x8af289f7, 0x4067e613, + 0x871788ef, 0xf87f2c9a, 0x453f46bc, 0x56e303cc, 0x2a65835d, 0x44a6971f, + 0x7a62e9f9, 0xaf1f8246, 0xfaf1e668, 0x5f3e758a, 0x1fe43f62, 0xcfc5cc57, + 0x536ed8d9, 0xee4d44fc, 0x9f35a21f, 0x7e275bb7, 0xefc5dab8, 0xf475b435, + 0xdc605a95, 0xfbcc3bb1, 0xa66b1677, 0x4bb23efb, 0xdaf0821d, 0xfa425790, + 0x42fae070, 0x1c91f4a1, 0x018f0860, 0x6f824cf8, 0x9e02fe8a, 0x01157e9c, + 0x0671e497, 0xdd27f79e, 0x29edd0e7, 0x60b1b1f7, 0xdf9523bb, 0xdf314537, + 0xccbbf113, 0xcd79a7fd, 0xe6f955f5, 0xe3e2ecbc, 0x03a26d33, 0x0c56ddf7, + 0xc81aec7c, 0xedfbc9c7, 0xf3e4ebe7, 0xc5076112, 0xf426b9e5, 0x077476b0, + 0xa3b4d9c5, 0xae419ef8, 0x7897da02, 0x859afc8a, 0x3cfc95e7, 0x2edfc850, + 0xce27cfd1, 0x49924317, 0xc4da37ee, 0x25ed683d, 0x24f25b94, 0x207ae31b, + 0x7dede4e4, 0xbc862ecf, 0xfd40db1b, 0xc037685d, 0xcbd61eef, 0x85b540f5, + 0xdd853bca, 0x47c92df1, 0x906a9ee5, 0x3f941616, 0x97335cfc, 0xdf5e62e9, + 0xbce397b3, 0x9f3a16d5, 0xa1a2c76c, 0xfa9d6a08, 0xda9859d9, 0x7632d90d, + 0xd4c5e29d, 0x86edc3ea, 0xb8bd8feb, 0x5eec6340, 0x0b4bf36b, 0xf4791e50, + 0xf150c5a3, 0xf43965e4, 0x63d3a38e, 0xeffe7151, 0x2d2f7c79, 0xcdb4f584, + 0xd05dbe64, 0x9166becf, 0xc06e9703, 0x165b3af1, 0x63bb35c1, 0x7478c31d, + 0x47b1e6f6, 0xc56cdc71, 0xace8f147, 0x3aa7a66a, 0xced0bc0f, 0xea8dd4fd, + 0x600b7913, 0xfd60bbbe, 0xec553f74, 0x7482e11f, 0x34c976da, 0xbf3edfa2, + 0x021be1ae, 0x51d820a5, 0x5476ed0c, 0xa3b97d71, 0x65ff38d8, 0xe709667a, + 0x6bc51b53, 0xda429e40, 0x174364e1, 0xa4c67c22, 0xd80280f9, 0x1f6e37bd, + 0xe55e8a9a, 0xb1ef2e46, 0x6064bdbf, 0x716e91bd, 0xfa8a1a4f, 0xf2ccfd66, + 0x3ac216b7, 0x9ab999ee, 0xcfbc86f2, 0x8c27d426, 0xdd2f149b, 0xbde3933b, + 0x007a03cd, 0x7a09ddd6, 0x2a804140, 0xa4d7a1be, 0xb97eefe0, 0x00f5cd55, + 0xcf9e2ff2, 0x8da62b84, 0x45bc5b3b, 0x24fae2a9, 0x551bd0cb, 0x771875be, + 0xb451fe83, 0xbc1c70c3, 0x8ea90ddf, 0x7c90edfb, 0x433c212f, 0x9eda6d33, + 0x83aeb3a2, 0x149287f4, 0x9363de3f, 0x8f1239c4, 0x1d616617, 0xd58769d0, + 0xc618bdb7, 0xf16998ed, 0xcea284ed, 0xe79492ea, 0x9cd5d947, 0x7d5817df, + 0x7d45354e, 0x7ba32b5b, 0xdf7e7d8f, 0x96768a0b, 0xebccb9f5, 0xe7e36ada, + 0x0c1c06d6, 0x1553cc7b, 0x977481db, 0x7ba34aed, 0x94348493, 0x0bef2a8f, + 0x6881d6f4, 0xf3f12cd9, 0x8b9c5945, 0x9e81ba75, 0x36dd3f90, 0x4968dfba, + 0x0d9dac9f, 0xe835720f, 0x737114c5, 0x37c85f8f, 0x04ec31fc, 0x4cce9ffc, + 0xecde517a, 0x9676fd24, 0xe8629afe, 0x0c633c43, 0xf253c79a, 0xea3fbc2d, + 0xc2b7c441, 0x8192b642, 0xf3b4ade3, 0x7af25eb8, 0xd7e81f64, 0x087fda0c, + 0x42e009f9, 0x048af8fc, 0x7a252cf0, 0x8141ec89, 0x979722f2, 0x445a059d, + 0x7d2103bc, 0x46dfc36e, 0xcfaf9c0e, 0x55ebe61f, 0xa27cfc59, 0xf6379e28, + 0xe7122fff, 0x8c05d097, 0x8e3819e6, 0xde57fa4e, 0x1cf1a11d, 0x42d6734c, + 0x2ea8c73b, 0x81a2c2df, 0xdfcfb7fa, 0xe03e71d5, 0x0fc3d36d, 0xd4862d77, + 0x41c731a1, 0xfb1dc780, 0x30f5bd76, 0xc2be381b, 0xbf027f38, 0x433a3ed3, + 0x0e50e39d, 0xeb7faf39, 0x6983bc7e, 0x41273a4b, 0x72bfa004, 0x03b0757b, + 0xbc7934e9, 0x57918ece, 0x9deb8c2b, 0x22fbe25c, 0x08f2cb92, 0xd20777cd, + 0x97fb83a1, 0x411ab672, 0x1d5d9e79, 0x641eb954, 0x4e9708c5, 0x35472281, + 0x614f0e8b, 0x62966d5f, 0x7c475f77, 0xb47b7ccc, 0xc93ce781, 0x7bb4cdeb, + 0xeaaefcb8, 0x3e9073a5, 0x17b0b37f, 0xe9923ef8, 0x37bfb939, 0xf5c2aec0, + 0xf3f355f6, 0x7b596faa, 0xfc1e30f3, 0x4fc13bad, 0x9273b44b, 0x36c330e0, + 0xbb2de884, 0xe23dd19a, 0x3b96e6bb, 0x9d7f00b3, 0x4d4e2555, 0xf689d918, + 0x7cf56776, 0x7237b76e, 0x25ec1bbb, 0xaae0ff7a, 0x718f7d06, 0x67ff6112, + 0xf592398b, 0x8c50677f, 0x1ffee5eb, 0x3e6bf24b, 0xec41fc71, 0x32fafb09, + 0x9e833ba2, 0x7db29f6f, 0x6305ea28, 0xac14b7df, 0xbca11476, 0x92616198, + 0xe883f246, 0x7fc83379, 0x29d9377c, 0x3a235e81, 0xfda28e68, 0x2629e9d1, + 0x37d7e83a, 0x21e74f33, 0xe57d3a5e, 0xdeaf503b, 0x89d23d55, 0xeaabbe8b, + 0xae51dbb6, 0x785a086e, 0xaedfa62c, 0xfa0f4c19, 0x97bdb3b4, 0xeffafff9, + 0x867fd36f, 0x0283d99e, 0x6ce7d20f, 0x22a790aa, 0x371fd5de, 0x5fbf0808, + 0x724f7e17, 0x239fe6fc, 0x82bf833d, 0x471bfa1d, 0x90fb6ee0, 0x636fbc78, + 0x3ae85971, 0xb36be786, 0xf7801efc, 0xf7a32f0c, 0xaf6f5636, 0x96345ce9, + 0x3206ebef, 0x705e5762, 0xf76ce38b, 0x2cf9ecd5, 0x7ec0e907, 0x39995010, + 0x058dbb78, 0xfaae29a7, 0x775f9dda, 0xe2dc75f0, 0x371d6760, 0xaf76c5ec, + 0xf0f39b59, 0x82c6c61e, 0x6d773a72, 0x7517f903, 0xf092bf11, 0x4a757bb0, + 0x051abead, 0xf8cadbf9, 0xfb7d4cb9, 0xc6164a2d, 0x9d0f3441, 0x01f92a6b, + 0x65ff2245, 0xd478c325, 0xa0286f0c, 0xe15e7d02, 0xd2a2dc8d, 0xe3cebe21, + 0x82c95e28, 0xc2857ffc, 0xce7e36fc, 0x5f8463f8, 0xaed4f7bb, 0xd1af084d, + 0xcddf74b9, 0x57d5a780, 0xa31373bf, 0x8fa8a379, 0x4f492881, 0xf1fcf1da, + 0xa3f9f8c2, 0x38c27f71, 0x3ecf7c87, 0x9497e492, 0x288fec7f, 0x31a826ef, + 0x4f804acb, 0x8f56359a, 0x0d71b07c, 0xc1f00e30, 0x67ee7cc6, 0x7bf3778d, + 0x267bc63d, 0xb6a07e7b, 0xada5da1e, 0x007ad075, 0x33352efe, 0x0a1bb71e, + 0x1bda02f6, 0x6a5ddeed, 0x756fc13d, 0x7d0a7d5e, 0xf213a462, 0x8708d583, + 0x21ac6fc2, 0xbc7eda3f, 0xb2bca199, 0xe9cf07e7, 0xf30ad15c, 0x2eedfe23, + 0xd1b395f6, 0xad817b41, 0xe23f9536, 0x75fb7070, 0xee2ff202, 0xe283ad7f, + 0x7d0f1bb9, 0xd2fac5e3, 0x502c79f8, 0x0b9ac8e6, 0xc6b0e7e2, 0x38e4cdbd, + 0x2ab9ff7a, 0x8cecf7e3, 0x0906fab8, 0xe29915cc, 0x7fb47feb, 0x31f5f18e, + 0x48eca0b6, 0x5d675f11, 0x3e74e7d9, 0x42997690, 0x470a26f7, 0xf9e260b2, + 0x4fc2dbe3, 0xb609d233, 0xefefd266, 0xb295e5e1, 0xf713e1c1, 0x16737d8f, + 0xc8b7f8f1, 0x2ebe2847, 0x51900be3, 0xcc787e89, 0xf9468f90, 0x8cf71e51, + 0xbf62b8f1, 0x29d6d4fc, 0xc90f1fdc, 0x5fe58945, 0x97753cac, 0xa6f87295, + 0x965eef78, 0x3f442443, 0x14c5eade, 0x5d736f67, 0x4fbe26a3, 0x7249e237, + 0x2377bf03, 0xf1134f57, 0x09498973, 0x603b347a, 0x551933d6, 0x7b80fce6, + 0xf6fa493a, 0xa787211e, 0x9d3dc439, 0x31fe5672, 0xb4fc9c9f, 0xc3af710c, + 0x2748c97d, 0x235561d9, 0x0919bee9, 0xc9ba0489, 0xfaced2aa, 0xf0b0ed4e, + 0x77888ecf, 0x9ef15197, 0x7ef109f1, 0xbf7c29ed, 0x63b18636, 0x3d28e3ad, + 0xf2a3eade, 0x124eb49f, 0x14c8424e, 0x7c0ab19f, 0x71574b5a, 0x57ac413f, + 0xbc05eb11, 0x3a788867, 0x576c4bbd, 0x2360dc79, 0x8ba09ff0, 0xeb9f8f28, + 0x9afe9cb5, 0xbef98abf, 0x47f71f7c, 0xa71e7358, 0xb78db0c3, 0x70b31d0f, + 0xb889b53a, 0x5fbc4a4a, 0xef6c9bd6, 0xffcbf2f3, 0x9cf29190, 0xbf2582a4, + 0x53e5e2df, 0x8e52231d, 0x4d8ea953, 0xde7a7ed9, 0xcfdb2985, 0x594e2ed0, + 0xcbb8e57e, 0x89f38e53, 0xbd2147e7, 0xfc4e5c7b, 0xe5fd0d7b, 0xf41ff0bd, + 0x76e8245b, 0x9befcaa1, 0x928bf519, 0x741977de, 0x9c692cbe, 0xedcc3b25, + 0xcf9be596, 0x7a4c6eb7, 0x9d4cb71f, 0x3ce266f6, 0xeb9af6cb, 0x5da4f38d, + 0xcc5f7d06, 0xe734fe2e, 0x7e3e46a2, 0xe830134e, 0xa9f788cb, 0x66651f3c, + 0xc526a539, 0x37917501, 0x790cf7ce, 0x39f89517, 0xb3c8af4c, 0xa6af5e2c, + 0x25967909, 0x3148e4e4, 0x6f18895e, 0x8f5f317f, 0x35c8b3e5, 0xb2e33bd4, + 0x2561f9cc, 0x7102fcf1, 0x7ae502fe, 0xe03b4276, 0xdb0f3d56, 0xbbdfe66d, + 0x5cc57ac0, 0xe84f3a1f, 0x39426b35, 0xcf1ce51e, 0xf4c7bd22, 0x364e3e12, + 0x92b5176f, 0xc1edd21f, 0xffab207d, 0xcfb784b0, 0x8d42ede4, 0xe908aeb4, + 0x026f9c13, 0xa67d9be6, 0x788ab778, 0xa96afe81, 0x07944a57, 0x8a671156, + 0xba1625e3, 0xf616f610, 0x15b07972, 0xf18481e5, 0x78961292, 0xdb9c6c8e, + 0xa27df9f5, 0x19b8ad5c, 0x9f8a7ff8, 0x88f6f091, 0xb8cc2bf8, 0xca8fdf0e, + 0xae171e7e, 0x9bfa6660, 0xf134c8ea, 0xe66aa559, 0x6679e9f7, 0x99a19f3e, + 0xd7e41bf9, 0x1e74c53c, 0xc84dbdd8, 0x9f932523, 0x8b33fa03, 0x3ffe3d3e, + 0x9c72bd29, 0xbd009e59, 0x3679c7ae, 0x8925c162, 0xb456a3ed, 0x3cdd10af, + 0x3c962a8d, 0xf2851fe2, 0x9d31ef9b, 0x24fb5573, 0x3dbdc627, 0x45a5f83a, + 0xfb755e74, 0x93865428, 0x07d92a2c, 0x269f4fc2, 0x7808f6e6, 0x49eb531f, + 0xcbd9df6e, 0x6c878c24, 0xeb7d5af5, 0xd77e8034, 0xaf28f935, 0xb9f0cfa7, + 0x955f0132, 0x699bcd25, 0xfb233f5c, 0xfb73ac3c, 0xbf8bab74, 0xe675515b, + 0xb1e9005d, 0x8ce2993c, 0xf48434ba, 0xf3efc799, 0x0311fa26, 0xdfa8f9fb, + 0xb24e6573, 0x2bbaa70f, 0x0f1dfa53, 0xdf4c8b39, 0x20d451fd, 0x4d8cfb8d, + 0xd1768a1d, 0xe3d5cad6, 0x48e69483, 0xf93dfd89, 0x5afbca52, 0x8d3b4e3d, + 0xfe6d6957, 0xdb8009dd, 0xe285bf16, 0x53fc5bd4, 0xabe62b24, 0x3dc5c519, + 0xd28fa3a5, 0xdd041477, 0xb3ee82cb, 0x1ae3b1fd, 0x592731c6, 0x99ed587c, + 0x3c09cfc4, 0xfbc24d7e, 0xdc557dc9, 0xcbe4f096, 0xc0d86aeb, 0x93aab3f9, + 0xf53d58fc, 0xcd393fbd, 0x52dceb4a, 0x718a96e0, 0x55e6d67d, 0x702b9714, + 0xf1453db3, 0xf9fa1975, 0x78f35b19, 0xa2864784, 0xe91e784a, 0x9ef6f3f7, + 0xe7863649, 0x43601edb, 0xeef9abcc, 0x7fe81388, 0x8676d0da, 0xac68f778, + 0xa709fd1c, 0xc60b661e, 0xa6ac1e23, 0xfe33f178, 0x42d719ac, 0x8f1776bb, + 0x5633b4a7, 0xa63d7085, 0xa77c5167, 0xfbb79dbf, 0xec945c79, 0x1fcfa58a, + 0xba08f08f, 0x1164bd38, 0xb1fdaa5e, 0xfe600b1d, 0x38041d6a, 0x90f4f38c, + 0xea9f2a5c, 0x75a5cc0f, 0x3ac6ed7a, 0x5fad7ee9, 0x738c15d7, 0x9eb10e54, + 0x5843fdf5, 0x6a3b22cd, 0x4a4b3fab, 0xdc463f45, 0x3925cb76, 0x3bac1dbc, + 0x6a750fd1, 0x736c7c66, 0x81cd3f72, 0xd6e301f2, 0xdbd100fe, 0x1540d673, + 0x2b9e95c6, 0x3cbd12b3, 0x3fd7c657, 0xfdd2afc5, 0x8f24cf5a, 0x7f7df2a4, + 0x5674ff92, 0xc7ac9efe, 0x263c2196, 0x350d21ff, 0xdde9f81a, 0xfc8fe632, + 0xe30ae80e, 0xbf7cd557, 0xf1ef8d83, 0xea39d337, 0x94ecbcb1, 0xadd230f0, + 0xe5c98f02, 0x5c793bef, 0x69ebab7a, 0x4de91339, 0xf0cfc893, 0x66a7bbf8, + 0x1d4c1d02, 0x05df435d, 0xedecae79, 0x8f3faa36, 0xdf754fd7, 0x29e90fb2, + 0x724e9f9c, 0x1f5c7928, 0x8f8135c2, 0xf1f39d55, 0x4694fe57, 0xdbab68f2, + 0x308a9112, 0xf9e0e755, 0x49cca851, 0x95add4f1, 0xe4945f36, 0x579a62d3, + 0x5dab4ef5, 0x7e53e904, 0x16d51e7e, 0x637a4f98, 0x0aba8eaa, 0x0f2cb9fe, + 0x98691e90, 0x23cf724b, 0xd736aeec, 0x63d72714, 0xec2c7b66, 0x41ae392f, + 0xc5b370bf, 0xeef9b587, 0x42629e29, 0x462bf70f, 0x846ede30, 0x7e32bfb0, + 0x6335e2a7, 0x7c92df96, 0x7cd3ae4e, 0x7b2e4259, 0xd02a4526, 0xf615cd45, + 0x4cc1a78a, 0xc35e5967, 0x040f030e, 0x752dcfe6, 0x7c71803e, 0xb8f35cef, + 0x53f72a59, 0x2fc6e592, 0x0bfda99c, 0xfa1b3f43, 0x276a5c38, 0xa1f06f39, + 0xd1830fc1, 0x947df185, 0x22ff0b9f, 0xfe244fa0, 0x2ff085fb, 0x4bdf179e, + 0x17f84179, 0xac6fa59d, 0x3fbd46cf, 0xe739d197, 0xf8dfc28b, 0x7e37f095, + 0x18c6fe83, 0x51fa2394, 0x559f8b94, 0xa6724f6e, 0xd64e5f11, 0x18454c4e, + 0x09dc657f, 0xa25da257, 0x85557e1a, 0x5e915145, 0x993e48d6, 0x52afb6e8, + 0x9f9d4145, 0xd0504645, 0x3b0639e1, 0xb3443b01, 0xf4ad2079, 0xe2a5b44e, + 0x7fee2893, 0x0e53fa0c, 0x09e547e1, 0xfbef8a3f, 0x4f9f6227, 0x1873ef89, + 0xebc82df6, 0xdd2f3c0a, 0x93bf3562, 0x7cb8d233, 0xc8437216, 0x6d0569bb, + 0x56c7f50c, 0xc912c790, 0x9daf2e63, 0x3d9117f9, 0x39cf9035, 0x02b16cff, + 0x3c13c73c, 0x3fca534b, 0xa40f4057, 0x1a4977c0, 0x716e9f8f, 0x00aee606, + 0x64a96d78, 0x0aa6d724, 0xa2eb0d39, 0xbd1e3677, 0x4cf911b9, 0xd146be05, + 0xb503d7e0, 0xe7f07f18, 0x0c5f89bb, 0xf492ccf9, 0xed3900e4, 0xfef8a2ca, + 0x1da725e7, 0x708eb0de, 0x0e67cb8a, 0x74cf902f, 0xc945ffbe, 0x9f18cbe7, + 0x583fb2f7, 0x3edfe822, 0xb3c97657, 0x90af9df8, 0xad1be2c7, 0x541cb27d, + 0x1faf2e54, 0xe0b38fc2, 0xff1fcefb, 0xb5c934e5, 0xea1aad47, 0x5a8fa9c3, + 0x60df78a3, 0x1dfe4ef9, 0x2711cb0d, 0x7ddef7cd, 0xdb751f3c, 0xeeff6c74, + 0x60e4896e, 0xcb7bbd93, 0xf7bea197, 0xfde19951, 0xd0091601, 0xc6d3b9bb, + 0x9e41cd39, 0xd9e4ec5f, 0xd68f3be5, 0x8386ff61, 0xd6a68676, 0xae4b43f2, + 0x97e432fa, 0x6c32b71c, 0x3acf7cb2, 0xfa2f30db, 0xe6175289, 0xfdf0a67b, + 0x23931e86, 0x64f48768, 0x06cce774, 0x7c03bf38, 0x9b76a682, 0x16673bbb, + 0xe46967ec, 0x6fd86991, 0x87c93ee9, 0xd1f53a6c, 0x4286c73d, 0xf10fe5bf, + 0xf6cb5877, 0x412d33a6, 0x203e9dce, 0xdc7ef147, 0x9e27d84a, 0xe1612e4b, + 0xcbcfc869, 0x69b56cf7, 0x3bc97e09, 0x3d9a77c0, 0x10fe5f9e, 0x6efd03cc, + 0xc3e49efa, 0xe164de2d, 0x0ef7b4f1, 0x701f6b39, 0xd9d6fee1, 0x5f71b8c6, + 0x6ed86d1b, 0x31fea449, 0xdbeb86a7, 0xf5069b69, 0x69dbef4b, 0x0f409c5b, + 0x897ef6cb, 0x76740969, 0xdca8c77a, 0x3bcbd1b3, 0xd7122720, 0xa3c454b3, + 0xd5b11299, 0x4b5fc424, 0x7de23dd3, 0xdf1a6cac, 0x5fa11b90, 0xa167d232, + 0x5704ddc7, 0x512b6f03, 0xbc716958, 0x8f02a9f5, 0xe2796f4a, 0x05ba46f8, + 0x09eb00f1, 0xf4c25c83, 0x985b902e, 0x85b9036e, 0xf08ed9f8, 0x58b37483, + 0x5664c677, 0x433b7a81, 0xf51b0747, 0x85615e8c, 0xe780567c, 0x2506e673, + 0x37fb2ced, 0x60d6edd2, 0xff259e3d, 0x95b5da7b, 0xdb33f80a, 0x6015c16d, + 0x94bbb349, 0x907e95b9, 0x05a4afbb, 0xfd834a1f, 0x0d8297af, 0xcae979dc, + 0x83737f43, 0x99dfef38, 0x367c11a6, 0xf7d1b50c, 0x50dfb684, 0x8f7f00fe, + 0xfdb2e1c7, 0xa20fc586, 0xf671847e, 0x185638d3, 0x8f27d467, 0xc9375393, + 0x5d4e4e34, 0x8fce3183, 0xb9e71c68, 0xeebdb38d, 0xea7af352, 0x3ce31a96, + 0x5bf80695, 0x7db73eef, 0x6c9bcce5, 0x46bccf5e, 0xae77271a, 0xd052fef1, + 0x65d6eb0f, 0xf3ed77a8, 0x12c1dc94, 0x374a68e9, 0xae06e7ce, 0xcca3a44a, + 0x7e266949, 0xa659e8f2, 0x30d5767c, 0x8121fb53, 0xdcfaa691, 0xe893f3da, + 0x7d92a5d2, 0xd43c7981, 0xbd68d8f4, 0x923661b6, 0x1cc3153b, 0xcc3d5f94, + 0xf5677245, 0xa8b1c1a5, 0xa8ad71d7, 0x82db5767, 0x57baa617, 0xe24a5f82, + 0x0b35e58f, 0x1bf5c9a6, 0x329cde85, 0x5e63cffc, 0x964dfe85, 0xc81e31de, + 0xd15e9bbf, 0x10fefb8b, 0xcfc616f5, 0xed8cd665, 0x2501f0d2, 0x95141f9e, + 0x804a103f, 0xd001476b, 0xecde824b, 0x90f306b0, 0x8eebff1e, 0x5815db5b, + 0xd80286df, 0xfec630cf, 0xd3eb7694, 0x2f3c62a1, 0x28f74c59, 0x5efe36ed, + 0x1b7e7fba, 0xe69e3fcc, 0x4780e967, 0x9bd73a5b, 0x47dbf3c9, 0xefcd324e, + 0xcd306c28, 0xfcc1b0ef, 0x9b691fc0, 0x00fcc5da, 0x4b194bbf, 0xf9a76f4f, + 0x340d85ed, 0x6b1b46ff, 0xd69fcd30, 0x0e9abf3f, 0x1f49cefb, 0x2f23ff64, + 0x70bfef35, 0x36ff79a9, 0x9b61ffbe, 0xa7f314ee, 0xa787fed1, 0x5ff7c9df, + 0xdfef94b8, 0x9fedc7ce, 0xfe1fa33f, 0x663fce1a, 0xa3edf990, 0x3ff79b26, + 0x7fbcd1a2, 0xfcff9f3b, 0xf98b774d, 0x97ff345d, 0xfbe6efd2, 0xf348d11f, + 0x1f41ecdb, 0x786d91d2, 0xc5fa335a, 0x5fa41f2c, 0x9d40c92e, 0xce3c71d2, + 0xf71a46f8, 0x71a756d3, 0x0d30fbba, 0x9715cde8, 0x1c022ca7, 0x4dfe7608, + 0xed97a682, 0x3b71b0ab, 0x7a764425, 0xa0f55c7f, 0x6d8cfa4c, 0x9df047b3, + 0xe5077bef, 0x6e17e610, 0xaeec8cbb, 0x2eff3b26, 0x14585332, 0xfbb8dfcb, + 0xfb895d82, 0x85174e4a, 0x0963a7ad, 0xdf2fd57c, 0xcd71b0a7, 0x2a691fc8, + 0x3f918fd1, 0x1da3f68d, 0x28c737bf, 0xbfcad37d, 0xda3afcb3, 0xf913639d, + 0xdf3f1d66, 0x31e7b10e, 0xb155fc5e, 0x870ad3fe, 0xfc55e9f7, 0x6e1f783b, + 0xc7df415d, 0x374e145b, 0x024d4bd9, 0xec87bd4f, 0x343efa11, 0xcf8403a8, + 0x8c8ac475, 0xe6647cbd, 0x5c973c31, 0xd4db23b2, 0xb48b2e6f, 0x178ef7e3, + 0x402fae6c, 0x5afaeaff, 0xf14c897b, 0xb7387d07, 0xb470d88b, 0x6c0f6a8b, + 0xf28c62b5, 0xa9eb5aba, 0x39ff4258, 0xfafe7341, 0x3dfe7306, 0xf18ac46b, + 0x946ef7ab, 0xfc22ced8, 0xdeb9950e, 0x7a7e6798, 0x8a5f7196, 0xc02afbe6, + 0xdd142860, 0x33c52980, 0x56fefe55, 0xf58d7de5, 0x2ad37d34, 0x43638fce, + 0x21e3bbf8, 0x2a747bfc, 0x7af277df, 0x3d0eaceb, 0x5ba9eb00, 0x933c132b, + 0x923b1fd7, 0x1fc05bae, 0x80f8ed8b, 0xef26e1de, 0xf3fd7927, 0x47ef24d6, + 0xd5b3efa5, 0x43cb9287, 0x91b8f8a6, 0xe8ac1d36, 0x9a8bbf34, 0x077a69d1, + 0x94c6b7b5, 0xc73231bf, 0x8ec97ed4, 0xa2fd537a, 0xfaa68df0, 0x4c2b1d05, + 0x5ad0faf9, 0x6b79fb53, 0x6fea99d6, 0x54ddbe68, 0x56c37d7f, 0xf04e7e53, + 0xafed4c5f, 0xaa69ddab, 0xef391cb7, 0xf28fba6a, 0x11de994b, 0x7a75defd, + 0xbf9bda0b, 0x77142977, 0x2cfd0b7b, 0x1a55da3b, 0xe41defa5, 0x0e419fef, + 0x4260662e, 0x52fe963d, 0x9464c77b, 0xe7e48ccb, 0xb64fd30f, 0x3b19f287, + 0xfc11ae9a, 0x16361de4, 0xbd53c6cd, 0xee3a7eac, 0x63ea1395, 0x03bf509f, + 0x81a2fd18, 0x752c72f5, 0xfaaed379, 0xe7bb6711, 0x0ec430c3, 0x5291ea5b, + 0x128d83fb, 0x1b96240b, 0x086666ef, 0xbe28db39, 0x7fb8debb, 0x3f8c14e8, + 0x63a2da34, 0x5f36cf9a, 0x4e48c497, 0x043ff5a2, 0x29b861e9, 0xef6cb09e, + 0x9f7f1328, 0xbad32a39, 0x0099426e, 0xb4caf572, 0xe728cbc0, 0xc2c9f459, + 0x2bbcf16b, 0xf5057f5d, 0x84383b1e, 0xd699faf4, 0xadd7ceaa, 0xa5009f88, + 0x52d6b56f, 0x4835ba7a, 0x0dadebe9, 0x6d6a9e94, 0xbad634a6, 0x5a57d286, + 0xa6fe9443, 0x5fd283b5, 0x7d2986b5, 0xa50775b1, 0x2846b42f, 0xa755af7d, + 0x7e87e0d4, 0xf6101bf9, 0x185bf0b0, 0xd8b0f613, 0xab7c7acb, 0xa3ee7c4b, + 0xae7d5bfb, 0xbda0c70f, 0x9da2f7df, 0x060e39ee, 0x1b7a64af, 0xd93a8f1c, + 0xd9238b2b, 0xae4de014, 0x3c71a677, 0x0aac2d39, 0x3edc7def, 0xc61f41fa, + 0xf0af2141, 0x57c450a0, 0x15bee293, 0xee5360c3, 0xe989e327, 0xddf013bd, + 0xff7be9ca, 0xcee38e54, 0x647ee748, 0xe93293da, 0xc07d1661, 0x9f05ed77, + 0x8fd26e1e, 0xc2efa65f, 0xbf0fdbbf, 0xbbf442ee, 0x34aba537, 0x3b01df7e, + 0x0efa25c5, 0xefbdd3a7, 0xd00fe3be, 0x7995c1fd, 0xeff13872, 0xcba7241b, + 0xaec28abb, 0x1d34fd84, 0xc2fbe734, 0xc9175552, 0x16732d63, 0x556a5fde, + 0x468fafc3, 0x6a51e7fc, 0xcf32b38c, 0xb3bcf346, 0x7fb89477, 0x607ae11b, + 0x15e8879f, 0xff6a4efc, 0xb067af79, 0x30f58c71, 0xe6bd8076, 0xf41da7a0, + 0xdac1d61d, 0xca4f4a0f, 0xde746cef, 0x21fad873, 0xf0690bda, 0x5473df8f, + 0xdb8c6f28, 0xf08725d4, 0x61b03b3b, 0x4fd07cd3, 0xec7a7c33, 0x9add3837, + 0x875cadef, 0xde5bfe38, 0x0a4b36db, 0xa0a34fd2, 0xd5c51ea6, 0x8c9ef781, + 0xe24db6f7, 0x23b9739c, 0x446a0b66, 0x6768dd8e, 0xd0649fcc, 0xafdd769f, + 0xfdbfde41, 0xfba32b53, 0x9a9de2b7, 0x0e1e1e31, 0x40bf205a, 0x581fe6e4, + 0xb7d77146, 0xec92bb1f, 0x402c8593, 0x581a10f7, 0xffb7be98, 0x1c50b32e, + 0x8bf65dfb, 0xfc128b8c, 0x2f78758d, 0x9bf50cbd, 0x7d82cf59, 0xd92fca66, + 0x662fce61, 0xbd20e4d7, 0xa566de2f, 0x118dcef8, 0x970afd73, 0xc25bf04a, + 0xdca0379a, 0x95fc2f5f, 0x86532af9, 0xff2fdf03, 0xf5e5fdc1, 0x1c9df1e3, + 0x7c46df97, 0x6e2cc6e0, 0xdaed2ca7, 0x72efc369, 0xa2e076bc, 0x61997eaf, + 0x8c06c8ff, 0x951e8493, 0x8c9dde28, 0xfebb4fbf, 0xfa1af5e4, 0x429c4064, + 0x5ef963ac, 0x917be529, 0xbc492eed, 0xfa51082f, 0x61b7d8a0, 0xca4feeb7, + 0xffca491f, 0x99ff2924, 0x4ccbcde9, 0x0ae256f4, 0xe10d77ee, 0x82f685f4, + 0xfc52f4a4, 0x9f8f33f6, 0x23fc6037, 0xf9f8eb9f, 0x1d3ef4cc, 0xe7c9ffc6, + 0x80f17e3a, 0x2ae0bff5, 0xf2fe381b, 0xb1f77c1f, 0xa59bc810, 0x06777eff, + 0x5b7a1bbe, 0x7be0e709, 0xed3dc6a1, 0xde58f7f4, 0x48194252, 0xe4476fcf, + 0x6e91e794, 0xba0f41b7, 0xdd4bef0b, 0xf8c2bf84, 0xe9bc3cef, 0x3ee7b42a, + 0xc95563dc, 0xa76bda5f, 0x1d37dbfb, 0x61ee91b8, 0x9e55fe41, 0x1de748df, + 0xf4cd074d, 0xef5ff4b9, 0x1ef8c1ce, 0x27f08a50, 0xdd2f64a2, 0x698dfbb4, + 0x589a87a8, 0x7259f12f, 0x0fff9c3f, 0xeb1f2459, 0xeb03996d, 0x2698f38d, + 0x03a69701, 0x57dee89b, 0xe21981d3, 0xec8c4b7e, 0x0d7ee4f0, 0xabfa0ec2, + 0x1697bc4b, 0xb80c5bf7, 0x83b708b0, 0x67ba1eda, 0xaeb0abc2, 0x9a7fbb33, + 0xcbc02521, 0xaebeb7e0, 0x87f7ff05, 0xf972e0da, 0xc5efe13d, 0x9fa845fb, + 0x6fd85076, 0x68da7987, 0x7da0668d, 0x9f93b8dc, 0xf77e363b, 0x45ef0781, + 0x3b25f57f, 0x7d9797c5, 0x2e17e9f7, 0x47b2fc85, 0xbe6adeac, 0x1394970d, + 0xfc134fc7, 0x06a8fbc3, 0xff7e963e, 0x01769b69, 0x8ac96f2f, 0x23d965e3, + 0x82ec6d47, 0xda98f081, 0x7316d475, 0xd74fc0a5, 0xced0d3ab, 0x23e87b6a, + 0x6f95fa1b, 0xbe18911f, 0xcf0018af, 0xbd934f9d, 0x7c227080, 0xe3f57c0a, + 0x137da92f, 0x7ae505e0, 0xdb92be32, 0x52f9449d, 0xf8c5c7c6, 0xf7f7d024, + 0xec71887e, 0x087dd95f, 0xddef8687, 0x79fb819c, 0x74e66953, 0x8e7b7f7e, + 0x5837f30e, 0xa52a3943, 0x3be1bcbc, 0x2dfd10b7, 0x0e4b7139, 0xa1f50ff7, + 0x1a1fee3c, 0x745cfb8a, 0xe7da6cdf, 0x3a241662, 0xa65fb86c, 0x57bf9b7b, + 0x2923d558, 0xf05da4f8, 0x00bb9bc9, 0x37cfb0b9, 0xd0d6fdc5, 0x6efe642f, + 0xde3f9c47, 0xd9e3c462, 0xdeffca4a, 0xbd75f1c1, 0xebbc62db, 0x77e89872, + 0xc46ec6f7, 0x7a053bd3, 0x9ad5c62e, 0xf0121298, 0xfbc63e90, 0x732a272c, + 0xfbf89e39, 0x7607ea24, 0xc72c54c1, 0x7a56ddf6, 0x8fd09497, 0x9f145c7d, + 0x1f98957f, 0xfa869dd6, 0xd61ccdfc, 0x38bbea90, 0xe192ddfb, 0x04b37787, + 0x77e04b3a, 0x6fbbffce, 0xf06efce7, 0x0aa6a47f, 0x3cf77feb, 0x87ec23e7, + 0x15d612fa, 0xa3faa5cd, 0x0f9224b3, 0xc54d1676, 0x82adbbe7, 0xc9f5cdcf, + 0x57eb02f4, 0x9fb680f0, 0x2c9e706e, 0xd5c503c2, 0xfe836f16, 0xe7157289, + 0xae3818cd, 0x844bc7c1, 0x93b9083c, 0x37ddbbee, 0x1efe9ce4, 0xf235a34e, + 0xbfc8bde0, 0x0d21afc0, 0xf74ad7f9, 0xefbb7fba, 0x06be17c9, 0x2edbfb7c, + 0x72cd6f83, 0x1b6f9935, 0x73a1eff6, 0xfdbe64c2, 0x2958036d, 0xca16f8a9, + 0x436df253, 0xae457fec, 0xc87c701a, 0x86ab966d, 0x9e0c1c9c, 0xefd272c9, + 0x49ca52d6, 0x959e79f8, 0x8347a40f, 0x5bfa0d0e, 0xe9cb6ffa, 0x4e9faffc, + 0xa7ec3a0d, 0x070e8353, 0x704c67c4, 0x815fae4c, 0x10b60c3a, 0x78a56438, + 0x4961e362, 0x1d0b67dc, 0xf04a5e1b, 0xb1cd49d2, 0xdee1b1f0, 0x29247cc4, + 0x5ed495df, 0x9207ca4f, 0xf29307da, 0x8df6a6cd, 0x31b49f07, 0xa9a883a2, + 0xb7cd7d9d, 0xfc296bd9, 0x350f4358, 0x16df781d, 0xefc8fa42, 0xb3fca1b5, + 0x802c06de, 0x65c7c3f1, 0x00f61f8a, 0x3cc0378c, 0xe88afb3d, 0xc9ddb5bc, + 0x21decdfd, 0xf7280db6, 0x8cded47a, 0xb93bcc2c, 0xe813dc7d, 0xd824f0cd, + 0x961eaf99, 0x22c76e49, 0xd0a1efa9, 0x6780534d, 0x2a7b906c, 0x27b43c46, + 0xbcddff8d, 0x7f45d94a, 0x2c2fa35f, 0xc2f5b9d3, 0xdfd1d775, 0x3c39e861, + 0x285aeaea, 0xccacf45f, 0xba42678f, 0xbfc13432, 0xb6858b78, 0xdcf0964f, + 0xc9d1336e, 0xdfdcc382, 0x3539b858, 0xfd152fdd, 0xd156bb16, 0x4fc072f7, + 0xef189538, 0xb869c635, 0xf0fca92f, 0xc23f8295, 0xdd2df7e4, 0x0a0fae6d, + 0x219dc9bf, 0x3644cce4, 0x30ebdc51, 0x52bf877d, 0x2d757f1e, 0xb8e7a1e0, + 0xa4377f4c, 0x784cb0ef, 0xcfc7dbe8, 0xdf88594d, 0xf589bd23, 0xe1cf12da, + 0x8d1f20cf, 0x9d5e5c1d, 0xf2e5f479, 0x3cbd226f, 0xdf09ebf6, 0x63ccf486, + 0x11f98d2f, 0x9ff07fe6, 0x0366bf85, 0xe23d4fdb, 0xcf7278a4, 0x79d13711, + 0x15cfe3cf, 0x87f3137e, 0xebc714ec, 0x04d1f239, 0xdb9ebba4, 0xef280dec, + 0xf7f80a7a, 0xff1edb7a, 0xf48c4268, 0xdfc27aec, 0xa7ee0ca4, 0xd3fe1df5, + 0xa71ef82b, 0x0aec30ef, 0xe92388ed, 0x3f4d47c4, 0xa4477fe4, 0xca8ff1e7, + 0xfc0def13, 0x49b9fbad, 0xb8f4f39c, 0x5c7eed59, 0xc7c7879f, 0xc9747e9b, + 0x1cf0eb03, 0x1b51c0fc, 0xfa9c4fde, 0x404cbfe3, 0x9fb3da39, 0x59ef47db, + 0x73c1df63, 0x9919a98c, 0xe700ad1b, 0x869990f7, 0x11923d81, 0x9f1a1e98, + 0xa17f2e0a, 0xc2b9ca78, 0x8f086be3, 0xf008ff21, 0xe72e7490, 0xca7c11dc, + 0x1fc8f533, 0xca35f95f, 0xeffc2383, 0xfdfb18d9, 0xb23ad76d, 0xdf693e5b, + 0xe861ff6b, 0x2df75ce0, 0xdf65cf45, 0xf7cefe3b, 0xd1a1985d, 0x60f992fa, + 0xbe3f9d20, 0x75dff29a, 0xe7bd68fb, 0xff07ef48, 0xbf7de8d9, 0xfb91df44, + 0xe7ff7da4, 0x07bef9df, 0x75b3fbc7, 0xde2aef02, 0xf1fa6803, 0x9f7d685f, + 0xf47dce56, 0x86f74a0f, 0x458cff5d, 0xb4227e7b, 0x176162af, 0x9633161a, + 0x44ecf13f, 0xff267da8, 0x3bdd0f49, 0x31d73a4b, 0xdc9971d2, 0xf1229c3f, + 0x23ccabfb, 0xfb90bf09, 0x7d85c353, 0xbf157c31, 0xff3c3a6f, 0x544f7e4e, + 0xb9e1b6d1, 0x0b8533e4, 0x82c7747c, 0xc418bc95, 0xc8997abc, 0x6fcafd9b, + 0xf0974c4b, 0x95e1483d, 0xcd9ed1c7, 0xdec997cf, 0xdcec9485, 0x78aa32a7, + 0xe4cda379, 0xccd0ccf7, 0x377e107e, 0xf25fd128, 0x192af18b, 0x4ba57f5f, + 0x0e00448a, 0xbd3a0a53, 0x329d3718, 0x1ef0cada, 0x5c1634ef, 0x7e05fe8f, + 0x3c712887, 0xc4b56c05, 0x6bbe62b8, 0x51748285, 0x45e8f685, 0xcf227ed8, + 0x3a1487e7, 0xe8f610bf, 0x42856d74, 0xa27f35fa, 0xe25df082, 0x75f4b438, + 0x5bc6aa3c, 0xb18eb0a7, 0x87242c67, 0x7e47f81c, 0x76e31d61, 0x613f9428, + 0x3f10cb51, 0x07f97d57, 0x30cb5dbf, 0xf78bab6e, 0x7f1e0166, 0x1fc7f3ff, + 0xff8f2e4f, 0xfbfc2f7d, 0x1fc133c8, 0x8b1f7858, 0x169c01a6, 0x99942c29, + 0x89577185, 0x5dc5329d, 0xf9fc79cd, 0x9c7c4e4a, 0x183f6a4f, 0xe9de7efd, + 0x4e5f800f, 0x10ec668d, 0xc6ae74a6, 0xff8685e3, 0x0e61f176, 0xf19fa6af, + 0x9d81a4ef, 0x03be272b, 0xfb9327ba, 0xcdf83ffb, 0x6fd08bfe, 0x9f19e8aa, + 0x94b8f9c9, 0x6166ddff, 0x2d31f697, 0x3e42e7d3, 0xe749951e, 0x94e5c76f, + 0x487eb9df, 0x86ff73f8, 0xed201bf7, 0x72c2cdd9, 0x939f7d26, 0xdda188e2, + 0xc527b60e, 0x32db8afd, 0xc088b88d, 0xe5c8fc1b, 0x8b7377f1, 0x22666ba0, + 0xbf54cede, 0x88184cad, 0x9539fc07, 0xb7f21e70, 0x47fd17c2, 0xce43ef84, + 0x0a40b4d8, 0xe026df7e, 0x7f13d577, 0xf9dbb8a4, 0x905a7787, 0x6ddfcf7e, + 0x24477f31, 0x25c5f853, 0x75d704ac, 0xfa4e13d5, 0xc74d81fb, 0x57de1f65, + 0xbefc3a6c, 0x5ce2982d, 0x389e192a, 0x7f73c63e, 0xbc12a992, 0x5aed647e, + 0xd1fd7080, 0xf97dfcbb, 0x59785b21, 0xc57e75aa, 0x88b9d7c3, 0xa13cdd75, + 0xbe0fefe8, 0xe8ae3d15, 0x7673f414, 0x92c4ef1b, 0x1d118fe9, 0x1165edf7, + 0x17e8e394, 0xf65277d1, 0x0155eff1, 0x3f44ee48, 0xf2fdf80f, 0xd8c138c4, + 0x1bfc8f83, 0x0e9b9fea, 0x7fbe2a4b, 0xd98949be, 0x74d82e30, 0xbca323d0, + 0xf719a89f, 0x660bd539, 0x4fc5f025, 0xef821532, 0xe8fe9793, 0x83f79c7a, + 0x8d9dfc33, 0x066f54fe, 0x0e0f8bea, 0x307c445f, 0xdfbebed8, 0xadfa96ca, + 0xb8230e38, 0xf8c3d327, 0xfca6697d, 0x30e0e597, 0xecabafe4, 0x14be55b1, + 0x39546bf8, 0xbe59cefe, 0x931ffe45, 0xf21bcf6f, 0x7e27282d, 0xe554a767, + 0xbe4138fa, 0x6f92a6e5, 0x172d252b, 0xf1f2bee1, 0xd788b951, 0x5d3206ff, + 0x80009b66, 0x00008000, 0x00088b1f, 0x00000000, 0x7dddff00, 0xd554780b, + 0xb3dae8b9, 0xc999ecf7, 0x649324cc, 0x763c82f2, 0xe0283100, 0x540c0624, + 0x4521e6eb, 0xb680e91b, 0x84c07c07, 0xc4c9de60, 0x2f4a81e7, 0xe4bc8903, + 0x062368d4, 0x0284e81a, 0x28350b62, 0x8380c068, 0x57c78a58, 0xb68ad4fc, + 0x5e508307, 0x0be03086, 0xf5dcac7b, 0xcced6bff, 0xa2899d9e, 0x7ef7bd3d, + 0x9b7e7e37, 0xebdad7b5, 0xffd7bff1, 0x3dcd6bff, 0x7c5398af, 0x08b90923, + 0x9e47d77f, 0xa21116db, 0x7a790858, 0x679f1591, 0xf1269077, 0xe124fa2a, + 0x9090a469, 0xd92b0ec0, 0xbbffdb94, 0x9089976c, 0x79fe8431, 0x8228ef65, + 0x4258e27f, 0x143fc1e6, 0x9fa2ee42, 0x72d01426, 0xe2e28490, 0xf8a7b969, + 0x3e9a3494, 0x91f2049b, 0xc8bfb595, 0x3ca3e41e, 0x8ffb165e, 0x759f5df3, + 0x7465dfd0, 0x29eeb65d, 0xcdeb18de, 0xa4840977, 0xa5ed3210, 0xce85652f, + 0x11e7747b, 0x9f41cf93, 0xc9444c3b, 0xcf2bcc8b, 0xb71f74e5, 0x90147fd3, + 0xb4d79802, 0x42ce6c97, 0x41ff0f0a, 0xeba363d1, 0x290a77f3, 0x6ca1bab7, + 0x58b340f6, 0x33972570, 0xc613c2b8, 0xca7ce951, 0xff1c2e5d, 0x297b7305, + 0x3385f7c0, 0xf0a01256, 0x553725dd, 0xfbfd1d7b, 0x405129b9, 0xda45df38, + 0xfb9d1def, 0x279c1eff, 0x2684759c, 0xb3dc75d2, 0x382d0493, 0xa11342bf, + 0xd95bf3f3, 0xe011eefc, 0x22ee7d15, 0xdff4c5c1, 0x83a1ecf7, 0x8249e1bb, + 0x457fda04, 0xfacb1b7b, 0x1d79f683, 0xd02f7fdb, 0xc14ebafa, 0xebeda265, + 0xebed8224, 0x7f7bec42, 0x7713ee47, 0x540afed0, 0xdb4ac7b3, 0x6d442817, + 0x922370a7, 0xceadcc6b, 0x5dcafcc8, 0xff79c212, 0x876e17f8, 0x91e93ff1, + 0x3d4fcc09, 0xa6ef8e18, 0xbce93fed, 0xa0c4813a, 0x73b9ed0f, 0x6c9aa911, + 0xa207e426, 0x6467886f, 0x74f0fa7f, 0x5f9545c6, 0xeb627718, 0xaf2fc0b3, + 0xe8cb9e8b, 0x9132debc, 0xddfa768a, 0x144ee31b, 0x85ed7d02, 0x3e3c50f9, + 0x77afe9c6, 0x9ffb0051, 0x5f5b32f4, 0x682156ed, 0x10eef581, 0x8a377ad8, + 0x73fe8541, 0x652ff8ca, 0x1ee57f98, 0xf2d1a481, 0x6ad34b74, 0x4f27ad07, + 0x0126c99a, 0xd7ce2f87, 0xa2bcc3d1, 0xf14262ea, 0xdf8b60df, 0xcf1f2840, + 0x30758893, 0xc76a8fa5, 0x7d025394, 0xe2b45d5f, 0xfe4f089c, 0x00a37e9e, + 0x34e2effc, 0xf9935772, 0xdd1d6ea3, 0x7ddc7594, 0x967d3060, 0x9fbf44b7, + 0x9d786166, 0xd8215bf6, 0x195ae146, 0x2427ae8c, 0x7aa17288, 0x67fbf44b, + 0x8ba7faf9, 0xf22f08dd, 0x14d9e8a6, 0x359e7f83, 0x8720e9c2, 0x144b8513, + 0x4c42829c, 0x174c5138, 0xe046a7e7, 0xf77af952, 0xbf50c1d2, 0x4804f046, + 0x706b75ff, 0x835fae33, 0x108fed23, 0xef355fda, 0x4db3bcaf, 0x70fea626, + 0x846ce0d1, 0x0ddc1f47, 0x7209d8f0, 0x8ffa4ae6, 0xc5f5727c, 0x283748a1, + 0x49ff0267, 0xf1c742e1, 0x4d2cb84e, 0x705fb72f, 0x75707931, 0x194984d3, + 0xea48e004, 0x5acace81, 0x41903eee, 0x90e631e1, 0x8c394052, 0xc5bc60fc, + 0xf774a417, 0x728c2d94, 0xc4c3a350, 0xa717c644, 0x185f7c39, 0xe0113f54, + 0x5c10efe8, 0xfd1e298b, 0xd5c21b21, 0x46d1e94f, 0xf35fec9b, 0x570e14f9, + 0x4ff90597, 0x29fbbc40, 0xfdb44c1e, 0xa65e4e94, 0xbafe0078, 0xc5e193ba, + 0xa5e185bf, 0x000f8490, 0x045aebdc, 0xa7ae884f, 0x196ee3ae, 0x67c9a3d6, + 0xe3d0e7fa, 0x4afd0629, 0x7297e8b1, 0xc3394120, 0xdbcd57f1, 0xfd34b34d, + 0x7f1d3079, 0x368fe51a, 0xdffa4324, 0x11b7d037, 0x66f0fd7f, 0x224257c0, + 0x8036db83, 0x17e003ab, 0xf83e4196, 0x389f5443, 0x297ef523, 0x49d70510, + 0xfa302f6b, 0x162823db, 0xa0370745, 0x463f5a67, 0x33d01b83, 0x44b3a1e0, + 0x85197284, 0xff6e7277, 0x747a52f5, 0x72bef9e8, 0xffd611cf, 0x6243c13a, + 0xd33bfbac, 0xeba477f7, 0x313df881, 0xdfbe9a31, 0xbb5f85b0, 0x8f7be81a, + 0x3a4f7c80, 0xd0c90913, 0x6644e7e9, 0xa3653c57, 0x1fd7407c, 0xd9ecc57e, + 0x0f97f4a0, 0x9f9c3843, 0xf2e5fb02, 0xb011fbc8, 0xefda2490, 0xaa392b16, + 0x210863cd, 0x968c6c57, 0x246cdbdf, 0x81c2d6e5, 0xfef0f7fb, 0xb497b207, + 0x0f1828f2, 0x1d0768e4, 0x9e322f2f, 0x15d05f51, 0xcb7ef9b3, 0xfae3aeba, + 0x4baefbfe, 0x8b7aa71b, 0xee98e9ad, 0x627b6d7d, 0x91dfd954, 0x874c74d1, + 0x92e93f27, 0x7f8e50c9, 0x87028f8a, 0x6009d7ef, 0x24154ddf, 0x3e9aa3a0, + 0x3c730bba, 0x17fdd3ff, 0xee0652b9, 0xd15ba49f, 0xc5d7b88e, 0x3a20dede, + 0xedc28048, 0xfc8cd513, 0x778cad42, 0x31fd05af, 0xfa41ea91, 0x31b5e4f8, + 0xf581ddef, 0xf7e807a2, 0xd727af27, 0x9f9f0a12, 0xefa49080, 0xa02f927f, + 0x7416f0fd, 0xe7908e36, 0x5aa65da9, 0xbeb490f8, 0xe0c49ae8, 0xbf9f5a4a, + 0x429269b1, 0x4b60baf9, 0x9e9e01b0, 0x1bf76149, 0x2209af80, 0xa9757c01, + 0xff4093c9, 0x9237fbde, 0x27682a2f, 0x07053f60, 0x1bb40a49, 0x9010a6af, + 0x7c76e3bf, 0x742dcefa, 0x135ee37e, 0x376d0a3d, 0x01c3bf7d, 0x6ad7967c, + 0x5c1d3e22, 0x836093c6, 0xee338e8b, 0xc80b7a98, 0xf76a0a83, 0x6cf0b988, + 0x7287886b, 0xfbdf80ab, 0xf129be03, 0x5adb7e74, 0x12b94dce, 0x076d02e4, + 0x595bf8dd, 0xc146ff3b, 0x7d372543, 0x728ca8ff, 0x4040a363, 0x0a0b6fc4, + 0x0dfacac4, 0xdbbf695a, 0x85f7e95a, 0xf7e8bfa0, 0x73c6efd0, 0x7202dcef, + 0xbf13ce87, 0x79401adf, 0x53bf465d, 0xde364f80, 0xb655fd8d, 0xf69d240a, + 0xe995b157, 0xccd78aa7, 0xb1dfa81e, 0xddea0d6f, 0x465e3a62, 0xd0a3e82e, + 0xab932864, 0x1bec1705, 0x2847e388, 0x82c2ceb7, 0x1bae83e1, 0x78131c98, + 0x206e5a99, 0xeffb3477, 0xa410e262, 0x62cf32ff, 0xf3f69939, 0xae4a5146, + 0x9ce9e909, 0x31daf60c, 0x851f6f0a, 0xb5325bf7, 0xf6dc28af, 0xbb951d17, + 0x3331fa75, 0x3f7e2869, 0x14c263af, 0xe7f900e2, 0x9df00a5d, 0x9dd98e36, + 0x0b675e6f, 0x6f5e740a, 0xf099c39a, 0x1675ff7e, 0x8dbbdf7c, 0xacdee1c9, + 0x7f60c3ee, 0x9335689e, 0x43639d00, 0xe27288ab, 0x07b356c4, 0xceb8b6e4, + 0x7cbb728c, 0xf643b31b, 0x4f7eb2b7, 0xdbf6616c, 0x9d3f75a4, 0x7cb87a02, + 0x35ed8093, 0x49c65d39, 0x1955ccad, 0x728cdfa5, 0xb5c39356, 0x4d151e1c, + 0xd218ced4, 0x6ad6ee5f, 0x6f20d0fa, 0x73aac96b, 0x42943c62, 0xedb547c8, + 0xe27ef5d1, 0x806bec88, 0x225f421e, 0x66bdd77d, 0x11afb026, 0x814cf68e, + 0x7d029cf5, 0x75c7eb4f, 0x9693aa0a, 0x82590e2b, 0x4b078f68, 0xf41cfce6, + 0x2216fbcc, 0x01c7f6d0, 0x154e541f, 0xfd7fc259, 0xea7f7d15, 0x02592b2d, + 0x20960ceb, 0x3d49cbfc, 0x9370bfc2, 0x78a41bd9, 0x39ab7c2a, 0xfef40cb5, + 0x039464e4, 0xf1222de5, 0x29c6e4e9, 0x36e5bd41, 0x605c1fa6, 0x2d7868ff, + 0x40ca9b94, 0x624b4ecf, 0x44d95972, 0x210d70f1, 0x4d39719f, 0xd82a0bf7, + 0x1ebb953b, 0xf475954d, 0xd1e7b950, 0xc83a2a54, 0xd25bb052, 0xcf41dc28, + 0x652aefd2, 0x5ee54e36, 0x1ba6d5c1, 0xeb47eb47, 0xbec5de57, 0x3d87ba1b, + 0x12bfea07, 0xfceb87e6, 0x61b9064c, 0xf8dfa7ec, 0xf453f403, 0x816685f6, + 0x4de8abce, 0x69b4574a, 0xa1e2d1d1, 0x42fb18be, 0xe740f050, 0x1131df63, + 0xa2bf0755, 0x5511c6bf, 0x631def87, 0xfc53ff28, 0xecc1dcdd, 0x8e631db9, + 0x5885b5c8, 0xd7bf0176, 0x3d1db879, 0x42b419d9, 0x8d5bfe7d, 0x85c5ffc0, + 0x0903d202, 0x3764e4f8, 0x4aca6fda, 0x642f2e5a, 0xefd397df, 0xac772f81, + 0xe54a7c61, 0xa4f20285, 0x29d1f5ae, 0xa0a37ed8, 0xda3bff40, 0xa92ed04a, + 0xd6091228, 0x76823c6f, 0x11c74552, 0xe533f037, 0x07b066df, 0xb8b5aeea, + 0x7c6b1c40, 0x9bf9f1a9, 0xf7133266, 0xa8d75677, 0x073d285b, 0xa7841513, + 0xd7c5bf91, 0x195bb708, 0x188bfa5f, 0xcdb9bedf, 0x14bc2b0c, 0xd6be473e, + 0x3e0458f8, 0xf1f08c2e, 0x3249d6fe, 0x2089f5f0, 0x73e0132d, 0xfe57f633, + 0xb84f6b14, 0x7ca97b1d, 0x66766dfe, 0xd05fe52d, 0x6b9f1a97, 0xe7e46d7c, + 0x56fba92e, 0xd7bdc798, 0x931d70d9, 0xcfebb87e, 0x457932f7, 0x7e93de60, + 0xe41520b8, 0xfb351963, 0xe0d63ec1, 0xa4e50b5a, 0x5e6af318, 0xca5c672c, + 0xd8f30cfc, 0xdc79d9af, 0x6259f25f, 0x6067d222, 0xfee919a3, 0x1fb3f8db, + 0x7f225d9f, 0x7d5f2a5e, 0xe36a7f1b, 0xfba27b8b, 0x9bd38cf9, 0x0a5ebfb1, + 0xe38510c7, 0x56feb69f, 0x99c27f06, 0x06991ddf, 0x817ea878, 0xd7d039d2, + 0x81092756, 0xa882939c, 0x8876aab7, 0xa1cb106a, 0xf538b7b1, 0xecc0dc7c, + 0x489da7b5, 0x58cf554f, 0xfbf4c582, 0x8e8ee7aa, 0x77b2e306, 0xd13fdd09, + 0x71df81f7, 0x3dd0397b, 0x4aa0f81a, 0xf9627322, 0x98921ab7, 0xcbb3dcfd, + 0x27d6133e, 0x1b37d96c, 0x37ff6dfb, 0xd6a9d033, 0x6649e7ee, 0x53b6971c, + 0xe9403ea1, 0xcd8132f8, 0xfd28fa6f, 0xfeb316fc, 0xa272629e, 0xb41cc3aa, + 0x6cb6fcc1, 0xe50dddef, 0x7ff41643, 0x939cb7f9, 0xe935bfc1, 0x5fe86de9, + 0x248877f1, 0xaa976514, 0xe7e7410e, 0x43116ff1, 0x8fb0d196, 0xf1262daf, + 0xe5823e58, 0xce9187f6, 0xbd461dfd, 0x4a6c1818, 0x9836bd47, 0xafaff7a4, + 0x73cf7a7e, 0xeac20a01, 0x078c9f67, 0x6bba72f9, 0x9dc03c53, 0x27225bf6, + 0x242f71b0, 0x4557eac5, 0xabedab7d, 0xd82bedfc, 0x3e6e3bf8, 0xd35f7041, + 0xfd9d7b2d, 0xff0d3bbf, 0x2db28ca0, 0xaf09fb89, 0xdd00d721, 0x68c92d93, + 0x8e79d25f, 0x258a8ef5, 0xdf0c03b7, 0x1f5b3edb, 0xcf3df5a0, 0xe61ebc7c, + 0x27f5f35d, 0xbf041feb, 0xea1b5ece, 0xdeefff3d, 0xefba278d, 0xf6c494ff, + 0x3d4fbd05, 0xe52d79b9, 0x2df7de8b, 0x77ade81e, 0x856c89cf, 0xfb77b3ae, + 0xcfe0a997, 0x0dcf6fbc, 0xfbeeb069, 0x234a4e76, 0xf686f431, 0x5a0dfa04, + 0x8513ebfa, 0xe4e913f3, 0xf6de034f, 0x0d9fd8ef, 0xf1433cf3, 0x4fd0720e, + 0x002fcddf, 0xbca2d5bc, 0x0a42f283, 0xcbadbae7, 0x6df85f70, 0x71dbac78, + 0x03ae4fcb, 0xd983bff9, 0x46127e93, 0xaefc6e79, 0x50ef7f0f, 0x09755e7c, + 0xf6cadc78, 0x8a76fea5, 0xf181f8c7, 0x41fe0678, 0x80dc75f1, 0xdc76cfc7, + 0x50b59bf5, 0x6a3923b7, 0x5f87aa7f, 0x57e012e8, 0x9ffeb021, 0x25cf5249, + 0xf33d1f01, 0xdd6bcdfb, 0x0ac57f0c, 0xb2cfa3e8, 0x49d79d09, 0xe8367873, + 0x8b1ef09f, 0xa6fd036b, 0xc87bcf6a, 0xdf3bbd4f, 0xfd353f42, 0x7d740873, + 0xafefa4bd, 0x8166ed0b, 0x33a377af, 0xe08f8964, 0x7d382ea1, 0xef8f12aa, + 0x20fbe08f, 0x23806ba3, 0xe0ba81e8, 0x18855bbe, 0xcc9119f8, 0x4c126fec, + 0x6ed775c1, 0x740c8bfc, 0x509bc7a4, 0x823af804, 0x7c2077fa, 0x71707069, + 0xbf87dcb9, 0x8d1f8c8d, 0x3f14fded, 0x788cefa0, 0x9e827c03, 0x797cc3f2, + 0xfd00b339, 0x1891ef24, 0xcdb7a272, 0xffb40922, 0xf4376e5e, 0xb825bfe7, + 0x06c961be, 0x1debe5be, 0xbe345f88, 0x7c75b6fd, 0x93b93857, 0xd1ba2895, + 0x55f3d5e0, 0xa3fef96c, 0xbe072664, 0xdb5bfeeb, 0xe89a9377, 0x87dd36fd, + 0xeba6494f, 0x0471ddaa, 0xfb7d99fd, 0x1edebe6f, 0xf9ef7fee, 0x3884189d, + 0xfdf6d2c5, 0xf28ddf28, 0x6d45c283, 0x59df318f, 0x1d75be7c, 0x3cf47f4c, + 0x683a0ce3, 0xed2f3d3f, 0xdbaeba42, 0xd00e447a, 0x796c0efe, 0x1a71f716, + 0x08fe811f, 0xf3d3d6ea, 0x51a37d87, 0xefe6139e, 0x9e538e37, 0x9d6efdcc, + 0x6ff1c7b1, 0x4e35173d, 0x765da075, 0xbc7dbe39, 0x6ffa92d3, 0x2ee9dfd0, + 0x6e9e2766, 0x6306a717, 0xcd9269c5, 0xc4d61e3c, 0x828f549e, 0x94ea59bc, + 0x316be055, 0xceed0e3e, 0x87459cfb, 0x94f0dc12, 0x347f8815, 0x4a74a62c, + 0x85f869c7, 0xddf01d27, 0xc089bce0, 0xf8021f7c, 0x663ffcea, 0xbd808f97, + 0x16f74e6a, 0x28c1df82, 0x89b76477, 0xbef87504, 0x4d3539cf, 0x2848b8c1, + 0x3879f013, 0xfa1984ff, 0xbfe0d0fd, 0x4b2250fa, 0x3efce8d3, 0xc59e080c, + 0xd5f25fb4, 0xb3af2cd1, 0xd95aff7f, 0xf28c50b7, 0xc259d537, 0x42bf6187, + 0x3c61b45e, 0x0b6bdc42, 0xbd735fa0, 0x7fbbd70d, 0xd19b17e7, 0x858dfeee, + 0xdd10f8b0, 0x7c42a4d5, 0x6271f586, 0xffeb17e7, 0xf86aec1b, 0xbe5f8e98, + 0xfd87b69e, 0xee3b56c4, 0x933ece7f, 0xe7ed1a30, 0x069c1f17, 0xcedcad72, + 0xe9fcb1e8, 0xed0360b4, 0x2b0a78ef, 0x1596df1f, 0x3f54fc04, 0xfc810ce3, + 0xf9f3bfd8, 0xbd53d03a, 0xe809db4f, 0xb917dea9, 0x017bfffd, 0xeed44ee3, + 0xeb75ba55, 0xd29224a8, 0xc0b997c7, 0x2f56922f, 0x1632e45c, 0x08f906f8, + 0x091d58fc, 0xbfed8daa, 0x6339faa3, 0x41e03f0e, 0x320c0e3a, 0x181ca115, + 0xd8c0f204, 0xe76fab4e, 0xa16fd6f2, 0xed2239df, 0x8cb872fd, 0x31069b95, + 0xed85d279, 0xd27e70f7, 0xcbf7fbea, 0xfd00bfda, 0x61fbe8a6, 0x4859d7df, + 0x39fe2c7d, 0x7aa7f9c8, 0x372e3fcb, 0xefbf93cc, 0x7f7c7f37, 0x260240bf, + 0xdbb65bb0, 0xa9efe082, 0x93c34391, 0x939ffae8, 0x26abfc59, 0x113c343e, + 0x1e5ce4fc, 0x32d1c4d7, 0xcf883f7d, 0x9943da03, 0x00ffbb58, 0xde7daf78, + 0x7ed25646, 0xaa745f6a, 0xe7daef80, 0x6bfe38be, 0xa767befa, 0xb57afd1d, + 0xd23bfe2f, 0x3425ad41, 0xbc21f81b, 0x003642dd, 0x257f6f9f, 0xc7b5f81b, + 0xfa4eca1c, 0x6d5eb886, 0x6b03a53b, 0x5e9c75ff, 0x8c761c14, 0x226070b2, + 0xf3a7abc9, 0xce401aaa, 0x833e52e4, 0xd59267f6, 0x526e418f, 0x7dc2ecb5, + 0x4227f40f, 0x8f431d3f, 0x5f69165d, 0x8b96c4a5, 0xdfcd9317, 0x27db4fcb, + 0x6fcc1dc7, 0x17e393a6, 0x3d80c793, 0x0e0a95d3, 0x8f6a3ac8, 0xdaaf3c83, + 0xf8146e72, 0xa38c3e0f, 0x40f28014, 0xf47d0049, 0x051e1ca1, 0xecc3eff2, + 0x9ebd28f0, 0xaac8b939, 0xebf46648, 0xdb6cf3e0, 0xf441b2b9, 0x6c7bb3b3, + 0xbdc96333, 0xd71db744, 0x8ed0b551, 0x7d631bfb, 0x15d19bb6, 0x2dd01ef0, + 0xa1fc0b8c, 0x1ca1fb8d, 0xeadc3944, 0x993f5856, 0x57de1941, 0x5435d96f, + 0xa94a870f, 0x3e51db09, 0x92567845, 0x2750b966, 0x2af1b5bf, 0xe9143be7, + 0xfd2f786a, 0xc55e8fbd, 0x89d19e08, 0x7126e14c, 0x8b8d5298, 0x787be67e, + 0x7b325abc, 0x993f00ad, 0x08925d78, 0xfc84d2a4, 0xf1da471e, 0x1766a0e9, + 0x27a9093c, 0xf24f2720, 0xc1f83ef8, 0xd78119e0, 0x81fb9402, 0xa32e422c, + 0xaade79f4, 0xf074b824, 0x8f1dd2bb, 0xf548b1f3, 0x628bc984, 0x4223d817, + 0x522e47c0, 0xb4586a7a, 0x23d02865, 0x3a2553fd, 0xe961343f, 0x075de2fc, + 0x883b04be, 0x2bfa29d2, 0xc1243f02, 0x49620a06, 0x91326566, 0xe5921f20, + 0xff7e8887, 0x10f0d5e1, 0xcc7287d8, 0x617f2241, 0x0ab1065a, 0xe121b6f2, + 0xcf8822eb, 0x04245c39, 0x41dda1f6, 0x74fa7642, 0xeb4e948c, 0x90be3ff9, + 0xe9747596, 0xdeba36ba, 0xae5417c8, 0x476dc619, 0x3f7ed1f8, 0xa9fbf435, + 0xbf4fdfa1, 0x4e0d5fa9, 0xdcd0eb7e, 0xde835763, 0x6370e76c, 0xdc3959e3, + 0x24f27c28, 0x9c5341a0, 0x11cdc787, 0x367c71ae, 0xf14f6816, 0x2e772bfa, + 0x09c3d3d2, 0x420fc37b, 0xc085bb85, 0x6051b87e, 0x79fe9a7a, 0x88efba1d, + 0xb87c8acb, 0x2bf38f82, 0xcd46e70e, 0xbdafd56f, 0x7eafed0d, 0xb5036ded, + 0xdedd8b8f, 0xec7cd039, 0x3893e7b1, 0xf64dff40, 0x577ffd98, 0xe2f754b9, + 0x7c406f7b, 0xb93e4fb7, 0xeda3e828, 0xc1b95fcc, 0xfe3c4cce, 0x61be3775, + 0x3335a676, 0x4071df1a, 0xe2de94df, 0x37bf4586, 0xfa0c49d2, 0x75d06472, + 0xbbc7c6df, 0x3175616d, 0xd2109a63, 0xdf5f0941, 0x4e2c8de4, 0xcc7dc77e, + 0x8db7478f, 0xcedfd42a, 0x6168efeb, 0x0b1de3f6, 0xdec38c45, 0xaf6d115e, + 0x3f5ff91f, 0x77fc003e, 0xfca0bc27, 0x217ce776, 0xeeeda218, 0x03ee37ac, + 0xb4893bc8, 0x3e7c39df, 0xd747e673, 0x653288fb, 0x49779d39, 0x4877dfa0, + 0xbbfca597, 0xf5d1e5d2, 0xf71788f3, 0x6e38c649, 0xe4c5dbba, 0x9b9414a7, + 0x58f44646, 0xf74a51e0, 0xba527f60, 0x0897f887, 0x20f80272, 0x1f220e5e, + 0x25149adc, 0x29e7ceff, 0xc9afa009, 0x8bbdfccb, 0x9c67bfbd, 0x93a89692, + 0x2a05d2ef, 0x7e759231, 0x1d27b327, 0xc2f99be4, 0x7ca14495, 0x26485f28, + 0xda9eae8a, 0x66fcc8ad, 0x491b8317, 0x17208297, 0x94979725, 0xc89bdd83, + 0x2f6b59e8, 0xb3e8afbb, 0xffa4df33, 0x43c40abf, 0xbb9ef2f9, 0xa7183495, + 0x57fbc537, 0xabb018f7, 0x473e3c8b, 0x6c087a7f, 0x806eeb63, 0x5ff6e775, + 0xf1ec834f, 0x5e3dbda0, 0x2b1e8bd3, 0x28b44fcc, 0xbf3029ef, 0xfc04cd57, + 0xe3e1fd30, 0xf5a41939, 0x318383e7, 0x284c448f, 0xafe30e1e, 0xf2f576e2, + 0xb718e945, 0xc2e45c6d, 0x3ca2e372, 0xfc84af2c, 0xba5cfa3a, 0x06a7c148, + 0x49a7ab3f, 0xac3e2915, 0x56ff58c3, 0xdb8fc717, 0x43e3e1c4, 0x5e9acafb, + 0x9b45718f, 0x82643eab, 0xbd5265f9, 0x3576d302, 0x1764fc21, 0x6d267f41, + 0x940b658f, 0x32dcd3e9, 0xb920f112, 0xad3949ea, 0x93e2983f, 0x6d282853, + 0xe8a220ca, 0x3e92c7e8, 0x364710c4, 0xa7a353c0, 0xba8e4c35, 0xe1193d39, + 0x0f8996e3, 0xd1d1a8f0, 0x03587640, 0x3c0b4de8, 0x8e99fc5d, 0x45f1f3fa, + 0x281b3e2a, 0x3cfbd89c, 0x33e0f65e, 0x1b33ef85, 0xfd611516, 0x36ef5c13, + 0xcf8a9a2c, 0xbf2614ba, 0x7dfaa6dc, 0x12538066, 0x77537e61, 0x79d26480, + 0x48af9c8a, 0x5028807a, 0x1b90e2d6, 0x7443e9a3, 0xe5a3c749, 0xe004f28d, + 0xb315f9a9, 0xe2c4e209, 0xa3931ffc, 0x6716fa3a, 0x87e089aa, 0x013e1d13, + 0x80c3e7f4, 0x47bf3a67, 0x9c153ce9, 0x878fa31f, 0xe32c1d38, 0xe802b1f4, + 0x83ff3e85, 0x7423c9d3, 0xf06e509d, 0x560e9098, 0x7579654d, 0x95137cee, + 0x10f08070, 0x25ade7d1, 0x4c89da7a, 0xb43689d7, 0xf210cf82, 0xd20b21d7, + 0x51247d8f, 0xb43fa845, 0x256b8820, 0xbbd00cde, 0x25bedc89, 0xb3892ad7, + 0x243ef09c, 0x15067db1, 0xe96fb815, 0xae7f8132, 0x2f3cde1f, 0x3fff6159, + 0x4df67cd0, 0x78c08e7f, 0x7a215765, 0x3bcfb248, 0x765a2eeb, 0x9dfb50b4, + 0xbe3dd9fe, 0x7d010fb1, 0xe40938b7, 0xfce839c9, 0x627475cb, 0xf08fc01f, + 0xb78dca75, 0xbf7e50a5, 0xc8186c1d, 0x6a196ba3, 0x98533803, 0x792fe02b, + 0x00cdecdc, 0x6278f0b9, 0xe4cfbf6c, 0xc76f6614, 0x45115e17, 0x1566cde7, + 0x5b5d73bf, 0xcd0fc510, 0x4d251e5c, 0x5ef51f1e, 0x79a33f93, 0xbe29bd7f, + 0xd4a7e03a, 0xa109930b, 0x233dcf72, 0x306a3cb6, 0xc28101cb, 0x931461a4, + 0x9912817f, 0xe4fd69d9, 0xfc7f410b, 0x0df0df79, 0xe8d16fe0, 0xf261096c, + 0xfd98402c, 0x356bada2, 0x1dca3dd0, 0x237fd217, 0x8b2d03f0, 0x9fa464c3, + 0xb84c3bd4, 0xf9ca5ddf, 0xb3e7256d, 0x7ebf9c55, 0x9f45fc09, 0xf45fc04d, + 0xabe718f9, 0xfa43e066, 0x65c94d6c, 0x7457e376, 0x76236315, 0x816b12f3, + 0xe0dfe015, 0x927ca130, 0x1d04b7de, 0x1bee8760, 0x833f02e7, 0xf9742ce8, + 0x685f509c, 0x910e2155, 0xba02e858, 0x2f39dcf9, 0x2ef29be7, 0xa005fa29, + 0x40f7ba3b, 0xedcb97ff, 0xc48d1f25, 0x76d4c928, 0x08331fd4, 0x709f45f8, + 0xce00dbd7, 0x78b0a70f, 0x58c94b47, 0x47c53b84, 0x5e2e8a5b, 0x26f33693, + 0x6736390a, 0xde09fee8, 0x6ddc718f, 0xcc906e5c, 0x93a61900, 0xb7022d13, + 0xc900949b, 0x258bc9d3, 0xe0214d97, 0x272fea47, 0x9b9b9006, 0x106cdc98, + 0xe0323eb8, 0xe8ccc1bd, 0x129b934d, 0xfeeafde0, 0x87287cf3, 0xbd3eb9c9, + 0xb1bee5ca, 0x3b1481dd, 0xf12965c2, 0xff427d84, 0x03a70a7a, 0x937dba29, + 0x6fa9beec, 0x8c7d7c5f, 0xe3e51875, 0x209bd049, 0x3c5f2473, 0xb279cde8, + 0x9038c4f2, 0xf2c9ff3b, 0x2bb20671, 0x2fcaf1b4, 0x2a5ea254, 0xed0e30bb, + 0x1b968a85, 0x88121f51, 0xbe46a402, 0x7f7ad13b, 0x44f5e03c, 0xb6cf8f0b, + 0x1f90839a, 0xa1e5a273, 0xd9372c3a, 0x84c9c014, 0x8fc416c7, 0xeb79e5a7, + 0x9ed78c45, 0x63640b8c, 0x1757e17e, 0xfcba8a2f, 0xcb6dc58b, 0xe70e81b2, + 0x0d96586d, 0xa4993ef3, 0xcaeaf70e, 0x7b4150a4, 0x45873cf1, 0x2a2d6fd9, + 0xd1037bd8, 0x6c6b596b, 0xfc03427f, 0xe260ec13, 0x773b03c9, 0x70f8fc5f, + 0xe4ffe288, 0x3bb43663, 0x2f40e41b, 0xd8361b94, 0x90d20be1, 0xc625fcc4, + 0xdca60ffe, 0x1d3c0610, 0x84bf514c, 0x61247127, 0xfe60613c, 0x071fe361, + 0xf5c42e5f, 0xcecc8ad6, 0x1e9a78a3, 0x7163d7e5, 0x4fdce3bd, 0xd403ac43, + 0x657af1c7, 0x9678fa80, 0xb15c4387, 0x7fb7bfeb, 0xfdbf6463, 0xda54e0c3, + 0xc7cb6d5f, 0x37c7df4b, 0x53ea7ed1, 0x6f3bff7c, 0x24b83d83, 0x0f325d86, + 0x33c012ec, 0xf468c78f, 0xfecfaa78, 0xcdac7463, 0x25d286bf, 0xee81a3d2, + 0x21472785, 0xd0727f9d, 0x784dfa8c, 0xa034baf2, 0x360bbaa7, 0xa235ff94, + 0x4fc811e7, 0xc88a6f27, 0x32bef707, 0x3d71e306, 0xba5eb442, 0xf1f99539, + 0x85d967b4, 0xb97b28ea, 0x832a582c, 0xa176513d, 0xf809f18e, 0x40b1c1cf, + 0x413abc86, 0x1e3cf4e2, 0xf1fecfbe, 0xbcaeda12, 0xb913f19b, 0xfe875036, + 0x07bb36d1, 0xfa4668fc, 0x895539b8, 0x779497f2, 0x1cefb0d7, 0xe5d6e201, + 0x3133cc2f, 0xda9cae3b, 0x570708f1, 0x1f03a480, 0xa117f971, 0xfc94737f, + 0x7a3131eb, 0x7677ae30, 0xdaaf932a, 0x0fc2ecb3, 0x0fef5806, 0x7db97ad9, + 0xce3dde52, 0x8f5faeb0, 0xc8aeb58b, 0xf6c5ae7a, 0x2ff72235, 0xb5de189a, + 0xde1c65fa, 0xa2f8f3da, 0xf2a54499, 0xf4c2d2b4, 0x5ef0594d, 0x5948e419, + 0xa092626b, 0xcb79675b, 0x367951ed, 0x32252d65, 0xd6f2a5c8, 0x8eae7912, + 0x14f0fb6f, 0x4f0a2eb8, 0x211756cb, 0xf14ebe9e, 0x7c740bde, 0x03ed737c, + 0xcbf409bb, 0x0e5276f0, 0x3947ae8c, 0xac7c6f77, 0x8ccb3a73, 0x78e16b78, + 0x2320161b, 0xc34df275, 0xe3fbf197, 0x801faa9b, 0x35f1fd78, 0x0186b64e, + 0x7c6c59e5, 0x81b8e11a, 0x1e7b51e3, 0xef8476a7, 0x6578e092, 0x80d7be54, + 0xd7f8e470, 0xa7bda4e0, 0x53afe076, 0xf0825c71, 0x77196f28, 0x8c8bf049, + 0xaf6f2d7f, 0xf2035f0e, 0xe063ca91, 0x1f9b53d3, 0xeeffad1e, 0x2784ca60, + 0xe9a44f01, 0x9982e2d2, 0x6876bea9, 0x39e8981f, 0xc0c7fb08, 0x40d3d106, + 0xb0995dd7, 0xab8437b6, 0x0fa7d68d, 0x07983a2d, 0x4586e27e, 0x7334f85d, + 0x7d808efb, 0x87f68b97, 0x3ac63dba, 0x7ef0e6de, 0xf3175168, 0xc4035973, + 0xc24cfe05, 0xbc9c92f8, 0x927efd1a, 0x912eda23, 0xf8173ecd, 0x78816519, + 0x7c928ed1, 0x610b73cb, 0x0fceee5f, 0x56fbe0e8, 0x56a7b32a, 0x02e4bfa5, + 0xf685b1ff, 0x6b06fe0f, 0xca3e74a6, 0x34b2f14f, 0xcee949cf, 0x8e2ee9c6, + 0x8082abb4, 0x06f39b7e, 0xa8f9cdbf, 0xa2bbb879, 0xb846bafc, 0x8c78d648, + 0xfb8448f7, 0xe83c38eb, 0xcbc3941b, 0xe66e1cb8, 0xe0d5bf7e, 0x5bf0a3ef, + 0x7d478f62, 0xc4c734b7, 0xda5639f6, 0x92c5c29e, 0x09cbdac8, 0xf0361d6c, + 0xcfb08b17, 0x49d96108, 0x009cb1ba, 0xb0a1cfde, 0x2804522f, 0x52d09327, + 0x4ecf9bb0, 0xde007ee8, 0xfbec9c3f, 0x79fbf018, 0x0161d746, 0xdf5ebffc, + 0x16e700e5, 0xd0af9031, 0xc311bff6, 0x9b2ed0f9, 0x624a1d56, 0x0bc81ccf, + 0x4ae2e9f7, 0x911d7043, 0x9cbfd8b2, 0xc4325f33, 0x5cbabe59, 0x59267f5f, + 0xffd03bfd, 0x53851b3a, 0x83b33c02, 0x1f72e7e0, 0xadde5015, 0xccfa69b3, + 0x529be78b, 0x913e18d3, 0x0ebe803e, 0xbce07b32, 0x312424a4, 0x72f2a1ff, + 0xaadc9f94, 0x4f1bacbc, 0x8db1fbe2, 0x1e215e94, 0x30c9d1a0, 0x3d013549, + 0xdf44d65d, 0x8622e9eb, 0xe74497dd, 0x78806c33, 0x383f368a, 0x14f000df, + 0x3d414c2f, 0x178ba46a, 0x01affcfa, 0x4b3af011, 0x91a93c23, 0xf6891395, + 0xf794fb87, 0x8dfbfcfb, 0x2562ecac, 0x4f165cff, 0x0124a0fc, 0x79b4f2f3, + 0xd65ceacc, 0xacde7605, 0x88528cce, 0xb8aacd2f, 0x7cf06ffc, 0xc97e1cc1, + 0x7ee2720e, 0xdce3cf01, 0x66cbeef6, 0x7cee7d3b, 0xe4138367, 0xd31a7e45, + 0xd849b323, 0x11f7f80c, 0x03e2cc97, 0x973f7c41, 0xddb97878, 0x3beefb0c, + 0xde9fc142, 0xbe774b4c, 0xcc19bc1c, 0xc307d997, 0xf974047f, 0xd0535dda, + 0xd77daf07, 0xcac039e1, 0xf5bebbec, 0x4f5c564b, 0x5c56bd64, 0x3a3eb6bf, + 0x1f7f8453, 0x3e41087c, 0xb131e0d0, 0x967bad94, 0xc89bf6fd, 0xb3b5d837, + 0xc6fea3ac, 0x7cd89ff2, 0x14f9f08c, 0x2c5ca8aa, 0xd38b534a, 0x9e5e3d28, + 0xcf0cdea6, 0x5b386b1a, 0x32fc821a, 0xfee20d3d, 0x95272fa2, 0x964cffae, + 0x8014f2ef, 0x25f25743, 0x6d87afd9, 0x061c0e4c, 0x1de3a6fa, 0x1bf6d5ce, + 0xd74029dd, 0xeb8dc6a4, 0x6ce9c39a, 0xef13cee9, 0x4979035e, 0xf79888af, + 0x3f2a2b58, 0x78fd1079, 0x11e7d122, 0xf9879f1b, 0x8d2ab97e, 0xf5b4f5c5, + 0xbf1891ce, 0xc761d9cc, 0xe6730373, 0x48fb7d8b, 0xf339f3a0, 0x9120fe59, + 0x1adf46ba, 0x7236f765, 0x0fdfee7a, 0xfd8de7ec, 0x849fce94, 0x64e7bcfb, + 0xdfdc04d7, 0x567467af, 0x2115593a, 0x72fc7aef, 0xe39ee301, 0xdd1d298e, + 0x4c1a5cb4, 0x969b00f4, 0xe87b782e, 0xbaca0a31, 0x4be7e62e, 0xffceef13, + 0xfe3e7d05, 0x50bfd312, 0xe4e01bbe, 0xce871550, 0xae63ddff, 0x3d0177cf, + 0x4150e9df, 0xaadc940e, 0xd5780fbe, 0x1d9af7f6, 0xcbd53cf1, 0x72574790, + 0x74045287, 0x536ed252, 0x522569f1, 0x256b951c, 0x33c2b112, 0x0d92264d, + 0x0ac4719e, 0xe84bb1cf, 0xebd00ef8, 0xc79f51d3, 0x12e57917, 0x7ce92cfa, + 0xbef833f2, 0x13ed0a5c, 0xd2557474, 0x7897caf9, 0x62f5492e, 0x5b95e49e, + 0xd4fda8e4, 0xf2e8f6a8, 0xe5d11d55, 0xf97450fc, 0xe5d183ea, 0x458b900b, + 0xfade3af1, 0x1f1015f1, 0x858f697a, 0xf34f2198, 0xede60b69, 0x815d06ee, + 0x94368ff9, 0x3baa938b, 0xf95c42c7, 0x4d383fe3, 0xe17b77e0, 0x5c62cf1f, + 0x4ecdbc3a, 0xdf6b2f20, 0x0e247107, 0xb69f1ef2, 0x6afa806d, 0x19f827da, + 0xb5b69fab, 0x73c1fe41, 0x1a746857, 0xe791fcc4, 0x03e766be, 0x82594fc2, + 0x78fea710, 0x007f93d7, 0xa9f8fcba, 0xed1768c1, 0xe8260216, 0xe182b02f, + 0xa31c7c7d, 0x8c71f1fb, 0x44b7abee, 0x98ff2fef, 0x875bd9a6, 0x37bd00ae, + 0xfbc1893e, 0xac23a2f8, 0x9acac71c, 0x665e353d, 0xe7c51765, 0x78232347, + 0x537ce3ce, 0xab2b9c16, 0x71c5af88, 0x9ececf20, 0x7f80e792, 0x6896f2e5, + 0x3df46a38, 0xfefd1822, 0xe6ff2e0d, 0x5cfbdd12, 0x4b2bef88, 0xff7f41d3, + 0xdf3cc496, 0xfb972ef9, 0xac9dfbbf, 0x917883f1, 0xdd145d3b, 0xdc88b439, + 0x860df727, 0xd7c00bfc, 0x6afbc890, 0xff5ab8c3, 0xfe7e738f, 0xaff2cac4, + 0xa70e1cdd, 0xbb441d17, 0x5e2ecfa1, 0x7593aaa4, 0x7d96b2e5, 0xbf0825a9, + 0xf573a97d, 0xf6a7c1fb, 0x790edea7, 0xf0245b45, 0x599a92cc, 0xde397f9b, + 0x76c5ef0d, 0x03d42798, 0xffda7b1c, 0xa8ed0f18, 0xcfa05bdd, 0xb96f29d3, + 0xe3ac9d41, 0xe74aeffb, 0x5c6ade1a, 0x17cf2e0c, 0x19b96f79, 0xf455aee8, + 0xf6eab340, 0x1478fe9f, 0x8cd5bbc0, 0xb66b8fe7, 0x13c8099b, 0xd00fdb7f, + 0xf5bd525f, 0x479029ad, 0xe2535fec, 0x958d7981, 0x402c5788, 0xf0adc757, + 0x33b9d93c, 0xeabdec1e, 0x25966aff, 0x4d1be605, 0x118e9477, 0x1ad2d47e, + 0x10b6033b, 0x13cc62ea, 0xf11bded6, 0xfe8c195b, 0x9ca788de, 0x49cb8174, + 0xb7c7a792, 0x71725db1, 0xd68bcf00, 0x4ef2a7cc, 0x39ab0fe7, 0x897984d6, + 0x722071c6, 0x995f27df, 0xe01440dd, 0x3f2c6daf, 0xd609fe85, 0x777f3cb1, + 0x1e832b28, 0x82ba02a9, 0x26415ff5, 0x74de702b, 0x4f0a9906, 0x14f46e4d, + 0xf6868fb5, 0xcdee85bb, 0x9cfec6bf, 0xae3dafc8, 0x51d83c50, 0xdc39f883, + 0xcf95851e, 0x56affdf2, 0xc369d55f, 0xcf8f967c, 0x174728c8, 0xb41d1e43, + 0x64cd83ff, 0xc7dc76a2, 0x422793db, 0xfb4f667e, 0x3887e8ab, 0x513c9edd, + 0x6cfd06fe, 0xde9a0b94, 0xa4ff023c, 0xba7275fa, 0xe83a7d7a, 0xbf9646b3, + 0x9f5c969a, 0x4f031f5f, 0xb96e77da, 0x2df61f3e, 0x9e1d3be1, 0x40a7080d, + 0xe87e84ae, 0x9423f474, 0xbcc9bf70, 0xe862de41, 0xaadb49d7, 0x83a4fff4, + 0xafa006e2, 0x01e7a2a3, 0x7c48d0d7, 0x0fa15e72, 0x46912dcf, 0x952a7fb6, + 0x76a24848, 0x9be82971, 0xbd4658d1, 0x602ada58, 0x55bcd71e, 0x6b29ebd1, + 0xc9e944b6, 0xfd84d20a, 0x7c769156, 0xd746b456, 0xa15e8257, 0xb2b2aaf0, + 0x8daa857c, 0x79daf5d1, 0x17ad9aa8, 0xf6e0b12d, 0xa7d6d119, 0x84fac196, + 0xdf9c5619, 0xb0278fbd, 0x544c8bf8, 0xc7e19bd0, 0xabc7289d, 0x71e70f89, + 0xfedfd71b, 0x3cea2505, 0xbf3b3cfa, 0x0c979d54, 0x9e9991e7, 0xbe419643, + 0x54bf5014, 0x2ca1264f, 0xae81a7b8, 0x7567f41f, 0x051a10a7, 0xc4092b65, + 0x70f7b017, 0x5fac039f, 0x5b478e7f, 0xff5bac3f, 0xf0c3bc9e, 0x45e7055b, + 0x7d6eb644, 0x47870d7d, 0x944b56cd, 0x56fc62ff, 0x0abce021, 0xe37495ce, + 0x2e3b7577, 0xe5faa25a, 0x75ea99fa, 0x1b78a362, 0xc226d15f, 0x93ef1e62, + 0xb111c1c7, 0xe61c09ce, 0xa7fc7c70, 0xb7c01965, 0x3a9d808f, 0x88ba0388, + 0x3c209590, 0x588433c7, 0x577178e9, 0x7eb195f7, 0x6e5612ec, 0x3171f969, + 0xd593aadd, 0x67c61f66, 0x01ef454a, 0xd5f67f38, 0xe02b5f20, 0x66a4d4a7, + 0xeabfc84b, 0xce03f470, 0xa2787067, 0x7d447ea0, 0x86b37d8c, 0x3b42d5e7, + 0xbb034fc6, 0x1675be98, 0xf3facd86, 0xb971cf55, 0x3752f094, 0xef08bb9e, + 0xe7dcf014, 0x9e08e11a, 0xa3735c8b, 0x9f5f6042, 0x7204f14e, 0x1a408d73, + 0xc29f0a05, 0xfeefd31d, 0x30b9e023, 0xd97103ce, 0xc4131dda, 0x9fae075a, + 0xfaf663d9, 0xa4938836, 0x002bc9cd, 0x9eeba77a, 0xefbe8333, 0xbc70574c, + 0x7bc3070c, 0xee4092fa, 0x7c61233d, 0x047fddef, 0x87151c7e, 0x28d384e7, + 0xf8499cac, 0x56760e5c, 0x07dfc93a, 0x58bd3df2, 0xf35f0029, 0x9c6cf1e3, + 0x67389314, 0x0581d83a, 0x50b49cac, 0x11203750, 0x4feb8a3e, 0x30a990b3, + 0x760f785f, 0x0cfc15a3, 0x27be1d0e, 0xf8c3e7d5, 0xd3d94369, 0xa132872d, + 0xf0fad79f, 0xfbbb43ee, 0x7941173e, 0x1397df7d, 0xf77f60d2, 0x70dd0f5a, + 0x5af63953, 0x0cffb6a6, 0x1f4ed039, 0x73dac796, 0x7cbee37b, 0x9dc12e76, + 0xac49d9ad, 0x9ab359dd, 0xd5c83570, 0xfebd98b7, 0xff4543a9, 0xd8e40fec, + 0x39c7d079, 0xec17fc9e, 0x0bd3a824, 0xa39f99fe, 0x10bfe91d, 0x67bef51f, + 0x6d3e7451, 0x534bc54d, 0xe92d5da0, 0xdaecbcc2, 0xdffce8f6, 0x1ec5c41f, + 0xff73a357, 0x62049105, 0xbf472b8e, 0x024c90bf, 0xa5dab1c9, 0x20bfbf46, + 0xbe3b9744, 0x7c24ede0, 0xe3ba8a4f, 0x0c581f61, 0xcf9688fa, 0xf3014d06, + 0xf4bc1155, 0xf4a3baba, 0xcac2af50, 0x4bbc7967, 0xeffad7ab, 0xf3f3299d, + 0xa71c6149, 0x40151167, 0x3b6b3e14, 0xb61fa1cf, 0xc21f73a6, 0x088ba347, + 0xa024ec9c, 0x436a5383, 0x7944c857, 0x7fcd6b3c, 0xf7491aac, 0x712f299c, + 0xb23c0e7e, 0x9bfca54a, 0xf8a29a2a, 0xc7d85edb, 0x1e6e28ef, 0x5fdc8937, + 0xf26ab4da, 0x6f32bab5, 0xe07df7df, 0x94c9e2d1, 0xb2470ab6, 0xf35f2fef, + 0xd04b6bd8, 0xf3c4d1a9, 0x5ed9c3ad, 0x356caea7, 0x3cb41d94, 0x1976574a, + 0xfa86ddea, 0x93394374, 0x8671efb5, 0x210f45b2, 0x17566b05, 0xf4de544b, + 0xc3668464, 0xc4ab0b8d, 0xa993c535, 0xec2dabdc, 0xba8e7cc2, 0xe823c14e, + 0x879d68e4, 0x9e1ce9c5, 0x2474b96e, 0x00eba1c0, 0x0e9a83c8, 0x00fb05c1, + 0x10f6fb47, 0x453be196, 0xdb3b5df7, 0x1fb4d667, 0xec06efc1, 0xfc84cf3f, + 0x23ef32bc, 0x716df76c, 0x442c5217, 0x140e8fe5, 0xf8702987, 0x8148ca6e, + 0xea30fefc, 0xefed9e9f, 0xc9a63da1, 0x750cded3, 0xc353ca3f, 0xcc3f5d79, + 0x17e111c7, 0xf32b8e0d, 0xf4a5cbce, 0x75465ffd, 0x81e60bbe, 0x8b73befd, + 0xaffcdec1, 0xc06313da, 0x340bfafe, 0x3a72071d, 0xd2f40238, 0x011be25a, + 0x7b59dee3, 0x6d133ed9, 0xbddcd877, 0x58c2ae0e, 0x8419e6b0, 0x776761ff, + 0xd1654096, 0x587b1983, 0x6f1ba539, 0xb19438c0, 0xbab39597, 0xbcb44cb3, + 0x9587a328, 0x075eeb2f, 0xde3327e5, 0x38e89629, 0x67754787, 0x52d82e89, + 0xdbf88bbc, 0xf7cd8ae4, 0xdf6c19f5, 0x83efcda5, 0x06756ad1, 0xe986abac, + 0x6a0e381d, 0x767572a5, 0x9b6de9d5, 0xff663c28, 0x6ef28edc, 0x372dcf53, + 0xe039bb31, 0x34aebc85, 0x8bd46f0e, 0xb425df28, 0x17403227, 0xe9f04526, + 0x5052eecc, 0xbf515c6f, 0xb487ec1d, 0x6f5123d9, 0xbeae975c, 0xcf6ae30f, + 0x93e873fb, 0x0cfdebce, 0xa2ef9317, 0xd207f309, 0x5da2741e, 0xad8d88f5, + 0xd21df287, 0xe5e38387, 0x879ebe21, 0x693ed832, 0xd80dfa5e, 0xdedc6ddf, + 0x7c115e6d, 0xffe146ca, 0x7e3fb681, 0xb7cfd994, 0x93b951b7, 0x6a11f900, + 0xdb93c806, 0x323c9fc1, 0x03f6d652, 0xecb4f9cd, 0x9ad3ec88, 0xfa19aba7, + 0x1b736ff8, 0x55e4d7ab, 0x5efb2e73, 0x0d695bd3, 0x8f693e0c, 0xeb00d88c, + 0xf3044bb0, 0x399aef69, 0xb462c37c, 0x7ce06603, 0xc066aa89, 0xe558fd7e, + 0xa9d81310, 0x31fe7e1a, 0xc00dfd5a, 0x071e36e5, 0x8da4f0d2, 0x775f3eff, + 0x08ed48a9, 0x1f20e758, 0x8aed47f6, 0xcff82cd1, 0x21f78aec, 0x02263916, + 0x8f75225f, 0x1ffff781, 0xc465e9c1, 0xa7093ffb, 0x35e71def, 0x6f2a21c8, + 0xb5ff410e, 0x9f444ff3, 0x5f70e247, 0x69cc842d, 0x63fbba85, 0x8fd87be8, + 0x3efba5b6, 0x7de5d0cc, 0x16b07ecc, 0x3d6d4fed, 0x7e7f7ff6, 0xfe91bfea, + 0x0fb469fc, 0x5d607f0f, 0xb9477e85, 0xe1f1e51d, 0x8b9e089b, 0xf3efcc39, + 0xb1dbecd2, 0x0d7eaf3f, 0x14c573f6, 0x361f4031, 0xef041e8d, 0xdf0a32f6, + 0xc39d5415, 0x74c0fbb9, 0xe9a3e796, 0x9644e6eb, 0xe0bcd3df, 0x72af3c4a, + 0x3ee37496, 0x5044503d, 0xcfd5f67e, 0x94f58e1a, 0x9036024e, 0x41719513, + 0xe7353ff0, 0xd35f3c13, 0xac0aeb3c, 0xe62dfd87, 0xe2b2cd13, 0x19d3cd38, + 0x2657361d, 0xe411bfa1, 0x206dc02e, 0x606d4a3a, 0xa922117e, 0xfbf1f5a3, + 0xff3107cb, 0x7bb0bd8c, 0xd7607be7, 0x5da1b2ae, 0xb8c4280b, 0x8e1a534c, + 0x6121e947, 0x9b05f210, 0x32afe947, 0x5c712b82, 0x9609fa0f, 0x9412d539, + 0x2bb0bf73, 0x1b56ff30, 0x802d6e59, 0x446910ed, 0x43e7c979, 0x7a209e9a, + 0x1587ee7f, 0x87609de7, 0xf3ea0f64, 0x6fb0a813, 0xfd584b9f, 0x23f685dc, + 0xbb9abfb0, 0x8f73c450, 0x6a0df964, 0xce859c74, 0xf1fc1535, 0xec25affc, + 0xe0f83804, 0xffe878bb, 0x1f384eef, 0xcec85be5, 0xfd009321, 0x7df22f3e, + 0xf7c620fe, 0x7f3645b3, 0xe8aec8b2, 0x67b4aef3, 0x379e20fe, 0xaa84f4d4, + 0xc71b4f1f, 0x5fdd2fd8, 0x28bc0016, 0x0e7043dc, 0x110bfc2c, 0xaf9c6af1, + 0x87ff0e5b, 0x5ecfd68d, 0xa12e2624, 0x77cdf4f0, 0xf9b57ae2, 0x5f0b49ce, + 0x430bfe87, 0x75edc7ff, 0xaeffc163, 0x42c887ed, 0xe1107edd, 0x22ca4722, + 0xc6109fdc, 0xf7bf557d, 0xdc6d3f7c, 0xb5f21287, 0xefaedf45, 0x1822855c, + 0x4ae9cfe6, 0x9bc02411, 0xc80de78f, 0xe6367872, 0xade618e5, 0xe9c7d3c1, + 0x230ba34e, 0x3d1a7dbc, 0x96ede018, 0x5fa0b3bb, 0xc20b7cdf, 0xa6bfd8c9, + 0x91b09f57, 0x5b67ec00, 0xf1495820, 0x8ec0b2da, 0x2dacf27a, 0x9fcf19bc, + 0xe211fdee, 0x4e32b7bb, 0x6b10f381, 0x816fc665, 0xc7c64ebd, 0x8387bbc3, + 0x6ba5ebdc, 0x7a7e2956, 0xefd1175f, 0xed4126cb, 0x0dc5d7a4, 0xbbbdff40, + 0x2cfd646e, 0x3f39e3b6, 0xce18403f, 0x7bfe068d, 0x347ff811, 0xe7d1c2ff, + 0xfe69bdd8, 0x39fde88e, 0x28adf39c, 0xb38dc888, 0xe8f30150, 0x963f73b0, + 0xbbc712af, 0x3e408e3d, 0x50499d6a, 0xabab0ec1, 0x83cf02ba, 0xe5e93900, + 0xee899d6a, 0xfc220b53, 0x68fa675f, 0x59233df8, 0xbff3a49d, 0xc32f76d1, + 0xbac6b0fe, 0x91ef0baa, 0xcbe41171, 0xf9d7a82a, 0x7d56eb57, 0x47580ffc, + 0xbf830edd, 0xa867e0c1, 0x6e55d3d2, 0x1f705e84, 0x32647200, 0x9c077bc1, + 0xda9f6cbc, 0x3f4afe85, 0xbca4abf7, 0xacf78dd4, 0x09db0b39, 0x27fd63f8, + 0xbe331d99, 0xec3f6db3, 0x76a713cf, 0xfd72c165, 0x3c683fdc, 0xf3ae340f, + 0x685bf451, 0xbf6e8ff6, 0x28c6623b, 0x0b9d93fd, 0x8c33fd86, 0x80af0dd7, + 0x37a6247f, 0x49bd7357, 0xebca2bf5, 0x472e9abb, 0x0ffa0afd, 0xffb69ce4, + 0x7207b906, 0x1341abe6, 0x5f3e039f, 0xf6e27836, 0x34ae2c41, 0x811bf702, + 0x697f8b4b, 0xfe1f60ed, 0x063b7ecd, 0x049af0b7, 0x01244726, 0x9aaf65cb, + 0xfce256db, 0xe6ff7624, 0xcb945cba, 0x86a91f9a, 0x53efd104, 0x654efdc6, + 0x7e04efdc, 0x2c7e7d5f, 0xe5f557f8, 0xaa172e1a, 0x912f3ee1, 0xeaa321f9, + 0x13909327, 0xbf0129ee, 0x6f3b3c53, 0x945e7517, 0x1dfc23ef, 0xf9512d17, + 0xbd6ccde6, 0x13de3873, 0xf0450727, 0x31b1accb, 0x7fb693ff, 0xf990bf18, + 0xd40a12a1, 0x230a87dc, 0x8dfda8f7, 0xcf834be3, 0x5f1341bc, 0xc1c7b800, + 0x2dda11fe, 0x7d9da3b6, 0xedf1ea8c, 0xc3332fdc, 0xd598e781, 0xd3046661, + 0xee3119e8, 0xdbb9586b, 0xf3740156, 0xda4b9731, 0x3320e0fb, 0xe79bbfc2, + 0x6bdc41cf, 0xd55e4e86, 0x83e1ccfd, 0xfa6bceef, 0x16ffe281, 0x60366fdc, + 0x81938b59, 0x3fef481f, 0xdf4fb2ff, 0x4dedca3d, 0x2babf7c6, 0xaf50dae3, + 0x09a3d1f6, 0x47da49cf, 0x667f317a, 0x25139737, 0x1bb03fdc, 0x2f20c102, + 0x5bdfb9da, 0x4f9ecd72, 0x8e4fbbcb, 0x3e3dc0f4, 0x8fc9996e, 0x11c5b7dd, + 0x783b97c8, 0xbf0f77fa, 0x9fcfeb41, 0x427ef194, 0xb76e4f2d, 0x2f185440, + 0xfe82d3b0, 0xd9991acb, 0x477b3597, 0xf644fb31, 0xeefc81ad, 0xf46633c0, + 0x07c4d5a7, 0xf58cda9f, 0xe23e7819, 0xcfa33305, 0xfb3b2ec0, 0xfbf82e3e, + 0x773ec03f, 0xa0279a6f, 0x97d2fb80, 0xe3053836, 0x8b440945, 0x73910ad7, + 0x99051fa1, 0xad11fd1d, 0x81c67382, 0x67cb274e, 0x5dc66a24, 0x2ba39fb4, + 0x543d70d2, 0x74dda29e, 0x8c1697f4, 0x1beeadcb, 0x3f5df997, 0x5ef17b32, + 0xe6768fae, 0x948ee87b, 0x21caf59c, 0x1ffbaff0, 0xa95c7661, 0xf00f5949, + 0x9eed7b21, 0x2fec7da8, 0x16bdd9cb, 0x7da70b55, 0xe41cbc53, 0xdcafdeb7, + 0xb8d9c24b, 0xd218ad7f, 0xbd9e790e, 0x2c3c239d, 0x418e95bc, 0x6b173a97, + 0xe0cccc7b, 0x4663de1b, 0xfed4bdfe, 0x3f602e81, 0xc6057a09, 0x1ee3ebf1, + 0xe3a36728, 0x0ccbfd20, 0x69ddfe8f, 0xae8b5edc, 0x6ef9a60f, 0x3dd4bc04, + 0xf9e1c5f6, 0x46178c0a, 0x43e5a739, 0xb3ab331d, 0x27136e81, 0xb6f2a287, + 0x3e33064a, 0xbb70b529, 0x19e4848e, 0x63f5fece, 0x71989227, 0xc660df23, + 0xd71e4e2f, 0xc5af5fee, 0x80b16fe9, 0x24ae625e, 0x324e7242, 0x60c94aff, + 0x9389c985, 0xe433f421, 0x65c90c2c, 0x427c09fc, 0xfb821de1, 0x61ad8ef0, + 0xdeed7c7e, 0xc222b290, 0xb522a1e2, 0x876f214b, 0xf1fb78b0, 0x5f48899d, + 0x84adfc5a, 0x6a1676f0, 0xf4b952c7, 0x0210a37c, 0xc5a4bf3b, 0xc5ee01b2, + 0xc584bb19, 0x04ebc3ed, 0x8d254b94, 0xaccf3013, 0xc428c76a, 0xa3117c7f, + 0x2260aacb, 0x5cf1b9ea, 0x825a95de, 0xbfd5da32, 0x946f3017, 0x71f68ff6, + 0xa328fd0d, 0x8c1c3fa0, 0x8fa239f1, 0x677b5183, 0x93933b7c, 0x0e2e8b64, + 0xbf222432, 0xfe839ffb, 0x1f4d12da, 0xf0bf4d01, 0x06929fb8, 0xce4d7efe, + 0x5de41bce, 0x30f11835, 0x3bf00d2c, 0x575b2276, 0x7080bb78, 0xa8f525ad, + 0xdeb9341f, 0x0bd72e37, 0xd300c5c7, 0xf147963f, 0x973836d9, 0xf1e35f9d, + 0x0c4f4d1d, 0x836d0744, 0xd8a1bcb5, 0xd381b074, 0x1249cd41, 0x578e8eba, + 0x6a8490b3, 0x73a7b347, 0xa63bea34, 0xde3cacf7, 0x98f16562, 0x467fd36f, + 0x6fd4677d, 0x2696bd46, 0xc709f8f3, 0x0ecfdeb3, 0xc2fc7d7a, 0xd67e08a0, + 0xbeeae979, 0x3b11319c, 0x6ac87fc5, 0xb282ae55, 0x80710c97, 0x7e4267bf, + 0x259df82e, 0xa7658f96, 0x60736970, 0xb3da17be, 0xc20ab959, 0xf4665d2f, + 0x24bc966b, 0xe97801df, 0x386c7dc2, 0x1e80b885, 0x73ae7835, 0xe00aefd2, + 0x7d6fc63b, 0x63495bdf, 0x89fbee9c, 0x7fa86dbb, 0x64e5df3e, 0xbe499cf7, + 0x5fda449c, 0x682c5fea, 0x76eef677, 0xeed47ea2, 0x7e6b715b, 0xfb14b204, + 0x35e39b7b, 0x060e2640, 0x6e112e7f, 0x347f7bc2, 0x7136ab7b, 0xaf3b3f20, + 0x19faedcf, 0xee0b2ba3, 0xec4f3f1f, 0x74ca007e, 0xc71f783e, 0xfecf1cab, + 0xe1f2931d, 0xd7bf07be, 0xf7d061e1, 0x5abd03e5, 0x667efbc4, 0x4535f4a5, + 0x405e185c, 0xe59b51d7, 0x9b7e8170, 0x3fd7f39c, 0x53e5a2cf, 0x771e583b, + 0x3349a6e5, 0xe58190c9, 0x0fbd77ef, 0xcbcf78cd, 0xbefcc1f9, 0xe0788519, + 0xa58b5c1e, 0x9d1b64fe, 0x0b05e5af, 0x0d3fa3ea, 0x18317df6, 0xf0a6b8fc, + 0x25b38001, 0x51f307a7, 0xf0e79dfd, 0xb925993c, 0x0e45bcef, 0xb6e7f5f0, + 0x0c571c92, 0x47e045b8, 0x173cecac, 0x33d9beb5, 0xb7247eea, 0x47da9eac, + 0x23365fd7, 0xdf04b5ce, 0xc663c5a8, 0xd8487d82, 0x372d5cfd, 0xb473bde2, + 0xffe0255d, 0x4eda74f8, 0x4c1a7380, 0xae90d61f, 0x521b8c78, 0x3bee123b, + 0xd19329bb, 0x7863754f, 0x6e039c2c, 0x023a9a4e, 0x43fd29e6, 0x971f7bc2, + 0xbb3abf41, 0xf4d32737, 0x907fddcf, 0x946fcfd9, 0xf2029993, 0x409e5ba5, + 0x1ffebfc7, 0xe2bcb29f, 0x5f71fbf9, 0xc251d740, 0x029b64ec, 0xc17ca9f2, + 0xedaf7c3e, 0x39678ec3, 0x6b257dd8, 0x289cac2c, 0x3af8f963, 0x6f2c4fb6, + 0x0aa7f767, 0x4f242e33, 0xceb0bd00, 0xc7d762ec, 0x08d5c346, 0xefad13c7, + 0x09c55e61, 0xdfec3a04, 0xb98f6604, 0x439e31ea, 0xb078fa94, 0x3f2dfd3b, + 0xb1f2053a, 0x01e89d7c, 0x71ec817b, 0x7ca5bfa2, 0xee230ddd, 0x9f3f4072, + 0xbf004f24, 0x5c1bfacf, 0xbd17be22, 0xed4cff2c, 0x97be9eba, 0x00a35fd6, + 0x8ebcbe3f, 0xd13cbfcd, 0xe8e819ba, 0xc8887ffa, 0xf889925f, 0x966deec0, + 0xd7c011d5, 0xbc26eb4a, 0x74c4e897, 0xfb42d86a, 0x0171026d, 0xa7e7125c, + 0x4172fbc2, 0x8ae13cc2, 0xbd62ca96, 0x60e1f3dd, 0x2136f111, 0x9c2a6167, + 0xf57ca07b, 0xb5a7d033, 0xc11f28eb, 0xf83e33f8, 0x84772cf3, 0x2d1984af, + 0xbc0f20d3, 0x7f7649fc, 0xd33d9f6a, 0x9629f37a, 0xa5370607, 0x0ca13dc1, + 0x9f2cff5e, 0x9f1aec59, 0xb9070fd4, 0x7ea4be5a, 0x85defeb8, 0xcad27c7e, + 0x2bbc2dee, 0x827e6053, 0xca4ba4cc, 0xe8fcd6f7, 0x37510f56, 0xaaae3039, + 0x657afec2, 0x2bf584a6, 0x77966533, 0x5b3de5fb, 0x4aeba75e, 0x0bddf4c8, + 0x544399f4, 0xc25613cc, 0xacd489ae, 0x1da35005, 0xfc2d5a46, 0xfff30e9c, + 0x9b214ead, 0x961ce7f5, 0x9ca8fef2, 0xf4fd0858, 0x01d5ffbe, 0x765d6f80, + 0x17b068cf, 0xc53e17fc, 0x93a39db8, 0x1e1d75c5, 0xf1ba012f, 0xf3274e77, + 0xb2e44646, 0x86f4c3df, 0x676f5d71, 0x751c999a, 0xbd9fb187, 0x9b9f8c59, + 0xed629c79, 0xf7b438fc, 0x3683bad7, 0xe577f498, 0xaa7ecd5b, 0xeb3dfee4, + 0x8e3167c6, 0x0b828245, 0x6ee095f2, 0xd9f75850, 0xbf98d98a, 0xd0e36a7d, + 0x4c779600, 0xc7257cc0, 0x1f2edfc6, 0x60ea7002, 0x4f0e4df9, 0xefac3c77, + 0xf1a3c6d4, 0x8d8abeb0, 0x8ac57eec, 0xbbd4b9e0, 0x44e44646, 0xdbf7c38e, + 0x09f78c4c, 0xa279fd0e, 0x493f1b53, 0xfe60e79d, 0x85a7d400, 0x6cb2e1b1, + 0xf02d84f0, 0x643ff5fd, 0xcdbd3978, 0x4e8be782, 0xabcfa2db, 0xfd32769f, + 0xdb533bb7, 0x8367b5ef, 0x4b2be9fe, 0xe6e2a223, 0xcf1db96e, 0x442c7da7, + 0x5cb553f7, 0xe575b8c4, 0xa9048172, 0xd4fd3fcc, 0xff20d9f3, 0x3e7a6d4f, + 0x668f9f5b, 0xbe7b4efc, 0xfdc78dac, 0x54bf9a63, 0xf5cfe38b, 0x725f9858, + 0xd6a97f00, 0xbf30b49e, 0xb5ca59e7, 0x77da8740, 0x54e22b67, 0x12cf77b0, + 0x685c106b, 0xffb93b73, 0xb9875555, 0x09ee46c7, 0xcb6ff634, 0x7424f466, + 0xb01fe808, 0x7ca30c8f, 0xdff2defe, 0x93a9f14d, 0x0fcf14ff, 0xc61ff931, + 0x3880abdf, 0xae4dc02b, 0xafa04873, 0x7d181b52, 0xe137ef85, 0xf3cdcb3e, + 0xe941e52c, 0xd76f900e, 0x846b8f0f, 0xcf3705fc, 0x941accbb, 0xddf5df87, + 0xeeca92b3, 0xf520c959, 0xb8804e78, 0xb33edf98, 0xd256b888, 0x2e565e62, + 0xf13a4ff2, 0xdf2c88b4, 0x05b8c05b, 0x1fa68b87, 0x5e408e80, 0x48ac169e, + 0x80a74247, 0x6a68a8f6, 0x0efd0d9f, 0xace65744, 0x2beaba68, 0xaba21fff, + 0xe881ac84, 0xca7187ca, 0xd8d6e9b9, 0xc2fdc574, 0xa07edc97, 0x56fde938, + 0xf98e4fcd, 0xbfbcc57a, 0xef03ab62, 0x731e22fb, 0xdbdfde8f, 0xd862ed4a, + 0xd571693f, 0x0a250dc1, 0xeaebf7cb, 0xfd823f06, 0xcbea2b1a, 0xb95d4d87, + 0xe318c760, 0x89b314ac, 0xd74017a0, 0xfe673fa2, 0x23b32f24, 0x3c275c58, + 0x4e7dc65d, 0x5e0982dd, 0x454c4766, 0xb2aff17e, 0x780f7829, 0xcc62ee67, + 0xd8485cbf, 0x6d1d993d, 0x3fc0ca6b, 0x7f03ab7b, 0x178b46b7, 0x7cd1e591, + 0x716042b7, 0x2c8dc0a7, 0x3712366f, 0x790f5eea, 0x2395cdc3, 0xe7d26fd1, + 0x50461e0f, 0x5c6a5c6f, 0x1b2aee71, 0x078b5dc2, 0x0052759d, 0x617e855d, + 0xc1243e76, 0x7f50f4ca, 0xe4fe80f9, 0xfda222d4, 0x907940b5, 0x1bf1e656, + 0xf8b5ff8d, 0x37a47392, 0x9df22c17, 0xf5f0febf, 0x21df31b8, 0x7eec841f, + 0x41f31be4, 0xc85e8dc8, 0xb7faa107, 0x4da61eaf, 0x5656b2f5, 0x65eafee1, + 0x44bd48ce, 0x9c2b60ed, 0xbfefc3cf, 0x120dc9f8, 0xfcf269e6, 0x84bfdd92, + 0x6c47e7bc, 0xfd3c6a24, 0xff4324fc, 0x43bfda66, 0x707fdad1, 0x30c30df3, + 0x63cbcb2e, 0xf9d2a97e, 0xee8e623d, 0xbfca410f, 0xde368287, 0x8f8d828f, + 0x6236baac, 0x617b501f, 0x8898d641, 0x83ecb09d, 0xe8aba6e2, 0x27d77658, + 0xe9aaf798, 0x885bbf7b, 0x61fbfe79, 0x5bdfafce, 0xecfd2abe, 0x98b387eb, + 0x58053d7d, 0x504bee92, 0x7a17fb7e, 0xda966f31, 0x7cc08f25, 0x39efdf7b, + 0xf7d68fbe, 0x01fbf8ce, 0x3bf99ad8, 0xfb0d9eef, 0x6263c82a, 0xe2230bbf, + 0xfe56fbfd, 0x9f5427fb, 0x39877bb3, 0x38b954fd, 0x080624fd, 0xf79b2ff8, + 0xde806308, 0xfecfa909, 0xa7e5c529, 0x1c5aea59, 0x3dfb8067, 0x7e62cd9f, + 0xc4de7f01, 0xffa1c335, 0x33de028d, 0xa3ef32b1, 0x9fb879d4, 0x977a923a, + 0x8ecabbee, 0xf11e59c7, 0x384c7316, 0xecc59b3e, 0x3b5dbadd, 0xa71b9055, + 0x8c3c7883, 0x15c14854, 0x5456d760, 0x2422c098, 0x5992c185, 0x2998cf18, + 0x6b5f7de3, 0xdfe4fdb8, 0xf2004b72, 0x7ff4fdc4, 0xeb59ebc8, 0xb139432d, + 0x81d5a676, 0xb9bca171, 0x5c1c2377, 0x61c02a71, 0x0cc4de65, 0xfa6ea718, + 0x081dfc14, 0xa0e7b53f, 0x6dc16ebe, 0xe6d22fe8, 0x3cc3b2b5, 0xb19dec15, + 0x967baed4, 0xe92b3bce, 0xca1ea9a6, 0xedc583d7, 0x203af7f9, 0x8e5b1e4e, + 0xba30e717, 0x81bc1468, 0x7fa2149f, 0x4c7cea34, 0x1fb3074e, 0xa392cd5f, + 0x357ebdee, 0x5eb8424b, 0x049ae81b, 0xea57b2e4, 0xed5d83b6, 0xd839ea27, + 0x43af1357, 0x0872fbc1, 0x45ee5f93, 0xaccdfa0a, 0xaf87eeee, 0x256bfa82, + 0xa910cfdc, 0x6e3057fb, 0x67b70aef, 0x007ce125, 0xf12305e5, 0x67c637f7, + 0x7e010efb, 0xb57b72c7, 0xf28fd777, 0xd9a8bfc1, 0x39362b5f, 0x5d0f1083, + 0x9b1e54e1, 0x4bf2720a, 0x5801e589, 0x68935dc3, 0x9dff953f, 0xa666fd84, + 0xbd028efa, 0x5705b0ae, 0xda041d00, 0xb94cefd8, 0xf8435867, 0x9d9b06fb, + 0x9a67606d, 0xe8044ddd, 0xd05f6e98, 0x7b75628f, 0x2785c409, 0x3c244a05, + 0x6bb067e7, 0x5f9df526, 0x771fa371, 0xcb8fe722, 0xb71c1528, 0x5e342b22, + 0x39d88e4c, 0x55babf07, 0xfd9a9782, 0xbf32b263, 0x7199e4fb, 0xa5892eec, + 0x3bf003e1, 0x1777764a, 0xb6b87b01, 0x6a71c05d, 0xbcc19ef3, 0xc676eabc, + 0x54f97ddf, 0xa5e63752, 0xe765957d, 0xa32340f6, 0xf985d277, 0xc32b64a9, + 0xd9dd2127, 0x2e78f7d1, 0x79f1e766, 0x3f8f327f, 0x137f72d4, 0x6f581895, + 0x0fe2d6c9, 0x99f70c4b, 0x0b5771b2, 0x4c9f785d, 0xc4f05f20, 0x9d95573a, + 0xe12be8cd, 0xe014f0a5, 0x2d2ef0df, 0xc7e5967f, 0x857319ae, 0x7eb14c07, + 0xe71db3f9, 0x923de0a6, 0x6bf20953, 0xe5a5c75d, 0x70e30ecf, 0xcfe597fd, + 0x0375047a, 0x4ece8e7d, 0x2d3b7e64, 0xe0c3d67f, 0x8d13c5a8, 0x19bdb379, + 0xafe58921, 0x84dfaf75, 0xe60b7efb, 0xfc771477, 0xdfe810e9, 0xc7692b62, + 0x6ec1aaf8, 0x2dfa53f9, 0x71d364d7, 0xbe399ece, 0xd79821fe, 0xb0f39f4f, + 0x7b68bb7c, 0x321ffae4, 0x26f4fcfb, 0xe47602bb, 0xa9b72e06, 0x73eec8fd, + 0x93f6c6df, 0x5a723b46, 0xd91db476, 0xb71ffe57, 0x02fcd923, 0x84de589b, + 0xdfb5df26, 0x715b3c05, 0xd7f41e3e, 0x31f37d6d, 0xe46c77e4, 0xb19d1df9, + 0x6e0e3bf3, 0x33bde3b6, 0xe86ddbe7, 0xdc789497, 0xfc338ceb, 0x31a90000, + 0x40cfc0f1, 0x4eabfade, 0xf944c1ff, 0x71636a4f, 0x71e04924, 0xc24457a6, + 0x4baa62e2, 0x1293f71f, 0x1d83a4a7, 0x57f7dda0, 0x3546fdc3, 0x1615c349, + 0x7be6faef, 0xca26cf4d, 0x3bebc021, 0xb27bbec9, 0xbec5ae31, 0x145a2f27, + 0x2dab5c7d, 0xa3baecc8, 0x4c90a679, 0xf606d9d7, 0x156de001, 0xe5f56f8b, + 0xb4b5ec07, 0x60b9bde1, 0x6c7ec07c, 0xc9ca2e45, 0xb56e2d52, 0x4ae3f997, + 0xe8ea7c79, 0xb8dfb28c, 0xf5090840, 0xf67f6153, 0xe809caf9, 0xb1e07f47, + 0x5d2cf8e9, 0x0167386e, 0xfda1fa7e, 0xce4457cf, 0x88fc46ad, 0xb2942f70, + 0xfa089a5c, 0x96b89732, 0x0257fc80, 0xa525feec, 0x68c13e91, 0xd8024c17, + 0x770ad239, 0x5977e01c, 0x54f509a3, 0x42a4d1a0, 0xebce0d3b, 0x7d5e99b3, + 0x19e99b2e, 0x8c20aa8a, 0xcd1b3da3, 0xfbc0ee3c, 0x214c4c5b, 0xf6049a78, + 0x6292e65c, 0xf5acc3de, 0xb7ae68d7, 0x9c2e9f82, 0xf7bf4265, 0x133ab2e7, + 0xc349c6fd, 0x1b36f7f1, 0xa7cbf59d, 0x9de47ab2, 0x2f616dcf, 0x31275fd6, + 0x49289243, 0xb39b3f20, 0x00cb3c79, 0xa29abbb7, 0x8c78c6cb, 0x29525cf1, + 0x319e5df1, 0x9db9ffb4, 0x635f9066, 0x1cb94f00, 0x77cc1ede, 0x38bfd6d3, + 0x94cdc193, 0xb2439ec5, 0x3a04ce26, 0x63289218, 0x4490c63e, 0x2ba55fe6, + 0xb90ff9c1, 0x7d202dce, 0x08dbe618, 0xcf1b9b46, 0x7d7d2219, 0xe71bf9d7, + 0x953b37bd, 0x0e9aadf3, 0x9752cbf1, 0x4be8f18c, 0xd87c93f5, 0x1c9867a7, + 0xcfff2bea, 0x3ed967ef, 0xf3c88569, 0x87285c66, 0x5ad8bae6, 0xcd9e0a8e, + 0x71237f70, 0xd6013b50, 0x002c42b1, 0x2dd265bb, 0xdd475c0e, 0x758f765e, + 0x6ceec2ed, 0x1375e3d0, 0xdc4387bb, 0x985f08c6, 0x2fc9a4ad, 0x9bae6eda, + 0x44d0fde0, 0x5fe78edf, 0xd559c745, 0x3fde414f, 0xfdba3a6e, 0xb6afa04f, + 0xd15f50db, 0x80b3ed7f, 0x2e57659f, 0xa6f751da, 0x7902bef9, 0xad0b8fe2, + 0xec17327f, 0xd5376616, 0xc0da5a76, 0x68db9c2e, 0x2ab4ef38, 0x9647ee3a, + 0xa5dfb127, 0x6f7e8e68, 0x3fd5473c, 0x7884d80e, 0x46fb2d59, 0xbd53bf00, + 0x6707f983, 0x37984d2a, 0xca7a2a50, 0xb19ede40, 0x67e3db45, 0x83a4fdf8, + 0x7b3c3473, 0xfb9e0386, 0xecf0fdca, 0x2e780e19, 0x5233dc35, 0xf8a6780b, + 0x3e78e1ad, 0xe19af3b3, 0xed9ee780, 0x3c070cd7, 0xa93736af, 0x0d5f37c0, + 0x50e4e5f2, 0xc1bb1cf8, 0x9694f68b, 0xf4a97a97, 0xad139f98, 0xffcafb17, + 0x40caff22, 0xbebaf0fa, 0x43eb4479, 0x8264acb7, 0xb56b983c, 0x845ea37c, + 0x3c7e98bf, 0x1dfd05ab, 0xe4fabf7b, 0x0e419b97, 0x8f688a74, 0x95edfd68, + 0x1ec1437c, 0xdd287bda, 0xee061013, 0x6bec38ff, 0x309c60c6, 0x6d157e00, + 0x93d9a01f, 0x9d3c7946, 0x4722a7af, 0xfaec097d, 0xae37ebef, 0xc1acefe0, + 0xbb9d984f, 0xbf30f051, 0x0f3b3b71, 0x05c4a7b1, 0x4193e27e, 0xdbae37e6, + 0xe37e8f99, 0x10fee0ca, 0x4e9189e4, 0x8ffb05c1, 0xe2478dca, 0x77401f21, + 0x073ca1be, 0xdfbd1cf1, 0x1a3c193d, 0x7403f90f, 0x1f617bde, 0x65877761, + 0xba625dfc, 0xc0bc83df, 0x2efd893a, 0x609b9d4f, 0x47614b9e, 0x8b4ffef4, + 0xcaf5aef3, 0x76d77728, 0x53e77bb2, 0x266e5f65, 0x899235e8, 0x7c6b3df7, + 0xda8e7f76, 0xc488f30c, 0x877fd5d7, 0xdf96b078, 0x0126bdd5, 0x4cdbb7e9, + 0xb3c81754, 0xcf2e4e35, 0x9f6f9424, 0x2fdfb2b5, 0xfeda3fc4, 0x13b320b3, + 0x2f3cb52a, 0x8cb2fe7e, 0x7904bf9f, 0x7bc8321f, 0xdb8b597d, 0x43bf6b57, + 0x8209cfc5, 0x33b7d01e, 0x1e21f5c6, 0x610fd51e, 0x77fd4ae7, 0x1f303c38, + 0xd7478f88, 0x993ed807, 0x82fcc3f2, 0x786afd08, 0x8eb7e8d0, 0x15fda1fb, + 0xfa052d1f, 0x3373f3f5, 0xbf461e35, 0x05bf7435, 0x7e46b179, 0x79d1ed27, + 0xfff103a0, 0xc5393ef6, 0x80fb7ff8, 0xe35fea72, 0xf034ed5f, 0xcd7eb6bd, + 0xceb7df6f, 0xa5f1814e, 0x7dc65d61, 0xaedfd1aa, 0x552f33ed, 0x906dbe1e, + 0x5fff6f87, 0x0e1f8792, 0xe3a30f28, 0x1e59df19, 0x1ae38bfe, 0x44f3d9bf, + 0xc03bec3c, 0xca7d878e, 0xfe664df2, 0x546a713b, 0xe88a78bc, 0x54fc5950, + 0xe3a3ead4, 0x1e14caf0, 0xbd7c6787, 0x7888a77f, 0xe271e5ab, 0x0f4e3dda, + 0x9470ad34, 0x18d69c63, 0xdb22ad3f, 0xfeaa00a7, 0x21558e37, 0x008000f5, + 0x00000000, 0x00088b1f, 0x00000000, 0x7dcdff00, 0xc5547c0b, 0xbddcf0f5, + 0x6ec95f77, 0x803f79b2, 0x0920f370, 0x909b0849, 0x4ba8a8c4, 0xc5281808, + 0xa3e22225, 0xe101e4b8, 0x5ad14791, 0x859ff6b4, 0x83012f20, 0x748b4146, + 0xd5b03ea1, 0xd0445a1a, 0x11142ec4, 0x3e0bf5ad, 0x2ffa07fa, 0x5688805f, + 0x52c05921, 0x9dfadada, 0xb26e6673, 0xbf944977, 0xdf7dfff6, 0xdcc993fa, + 0xe6733b99, 0x9af399cc, 0xed177333, 0xb6ec9e30, 0x097dfa30, 0xdd662fff, + 0x58ce9626, 0x79febb7d, 0xde7d1ee3, 0x4f63daaa, 0x2a1fc387, 0xea12fd4b, + 0xbbb19497, 0xc32836dc, 0xfd8c0ddf, 0xc62176d6, 0x2f903793, 0x3532f3cb, + 0x16a5af28, 0x83a2cbc5, 0x06a8279e, 0x7de18ac6, 0xd12f6f13, 0x0a5b56c4, + 0x1ed87b19, 0x90f962ee, 0x9615b037, 0x1f3ec668, 0xe3524ee1, 0x60357de0, + 0x9fbd40f2, 0x1995bdee, 0xed8d4854, 0x63116a05, 0xf39b7ade, 0x9ec65499, + 0x35af3232, 0x1ffda07a, 0xfda8908c, 0x2e67ae1b, 0xa7d8cb16, 0xcb7d9a2f, + 0x56a7d1e1, 0x083dbb36, 0x90ed4f8e, 0x540b7687, 0x51c38c28, 0x18cca7b7, + 0x46579413, 0x633c581b, 0x070838f7, 0x9ed4d62c, 0x3ff786e2, 0x2cedf493, + 0xdf332d5c, 0xac16c638, 0x062f9896, 0x95fe7dda, 0x9fcbc414, 0xa525799f, + 0xa15f082a, 0xb5e969ef, 0x9bad7f5a, 0xafe8165c, 0xf9fd698a, 0x557f6387, + 0x2909f34e, 0x9ead9e02, 0x9f9feae4, 0x3367f834, 0xb824a6e0, 0x6059733e, + 0x1648efbc, 0x0bc072df, 0x6232b973, 0x9441bca1, 0x358ed50f, 0xa5fea545, + 0x0edf923d, 0x1c79e1e5, 0xf755d3df, 0xe2f09514, 0x2fdb77ca, 0x3df42f6f, + 0xd07032b6, 0x1786fd00, 0x30c94e05, 0x59976c3f, 0x8343051d, 0xd81e68ae, + 0xce1f24ba, 0x259c5317, 0x9cc66788, 0xeed09525, 0x6af3fc71, 0xf95acec6, + 0x3978687c, 0xaaf8e76b, 0x671f9fe9, 0x3357be26, 0x3338fce4, 0x06d55f11, + 0xa76e09e6, 0xe607e71e, 0x9f98b165, 0x955f2fb3, 0x6673f389, 0x389955e7, + 0xdd92c73f, 0x3d9c70f3, 0x4c995c13, 0x1d956c66, 0x037807e0, 0xedd59bcf, + 0x2b16d5d0, 0x122dcfa7, 0x14b64ba7, 0x7a22491a, 0x817971a2, 0x2e919ebe, + 0x4207aba7, 0xff81eae8, 0xfa02ba61, 0xa36ed861, 0x57dbb785, 0xd7023e77, + 0xaf956ae3, 0x3d419c07, 0xabe9e8bd, 0x9bf643aa, 0xf833a307, 0xdb25d305, + 0x60cb9aec, 0x669cfb7e, 0xc0ea6d75, 0x7f757dfb, 0x5f6d508f, 0xc6978ed5, + 0x45d6525f, 0x4a740b78, 0xc0ea7b6c, 0x98bb1a38, 0x3fef07cb, 0x9ed5e021, + 0xe79233df, 0x93d7547b, 0x8e674f38, 0x922c2c5a, 0x31a422b1, 0x6dc1a768, + 0x4ed049f3, 0x2199bb43, 0x300f0d5c, 0x34af049f, 0x3e5c1b64, 0x9ec35f18, + 0xb41e6c19, 0xf3dc391b, 0xeabfbe34, 0xc32bcd98, 0x2bb36bfb, 0xef3c3559, + 0x6ff3ca3d, 0xc0ecf30e, 0xba07c6f2, 0xa683ef4f, 0xcd3f2adb, 0x7c977c47, + 0x45656179, 0xd8ebc111, 0xb333788e, 0x7a79e0a6, 0xdc59f91f, 0x3fd5da40, + 0x0924aeef, 0x67533bde, 0xc6a78860, 0x02639758, 0x8af183ae, 0xe1241473, + 0xcb0b976a, 0x8449761b, 0x8f9912a3, 0x3868fd87, 0xaec353d1, 0x606f0509, + 0x305addbe, 0xf92dfa0a, 0xe385cda3, 0xb25f733b, 0x6bf2864f, 0x51bf3c52, + 0x22f62f01, 0xea0914df, 0x647e848d, 0x4a7ae915, 0xf1adc201, 0xb19fc7bf, + 0xdc7bff13, 0x89935bee, 0xec9b737c, 0xd526867c, 0xe420fa95, 0xcc373c17, + 0xc3b216b9, 0xb0873de3, 0x3ac5c7bd, 0x92d6b664, 0x7bac8319, 0xc827bd6d, + 0xe13f6a06, 0x45af8b0e, 0x8f07e01a, 0x92c7991b, 0x5e47c03e, 0xbf9a5552, + 0xf34658c6, 0x8331d8d1, 0xf206dad5, 0xf86a9136, 0xe9391bac, 0x25e38425, + 0x16f7a155, 0xf6b6b0ed, 0xa5c80f64, 0x5d28f6fa, 0x524f71be, 0xdc904f6b, + 0x247f845a, 0x0d92fc21, 0x5e62c3d7, 0x3cda46c4, 0x05bd6ed4, 0x9f019fe4, + 0x586e4c04, 0x1497e197, 0x87349ba2, 0xbec8e889, 0x019e519a, 0xfc828d1d, + 0xc4d740f8, 0x46671848, 0xe23c7f9b, 0x064bf5f7, 0xc665279a, 0xca193e3b, + 0x5fde2523, 0x35eebafa, 0xced8b159, 0x54e1d707, 0x328eadaa, 0x73ba432b, + 0xaa3e279f, 0x7f636534, 0xa91a1f65, 0xe19d8bfd, 0xdfbc333e, 0x6478b296, + 0x7bd7bc14, 0xf537e80c, 0xa5a0f972, 0x187cb65e, 0xf7f6852b, 0x80626fbc, + 0x492efb2f, 0xb52d3787, 0x1e68daa7, 0x935dbc1a, 0xc75eb82d, 0x557f12c7, + 0xb5e8ff3a, 0x1acabf40, 0x5b0f3905, 0xac197461, 0x3196bfc8, 0x6f5033e7, + 0x80c39b54, 0x661235f3, 0xefbbe91c, 0x63e47ff5, 0x82e5b19e, 0x5528f87f, + 0x872bdd8c, 0xbacb3b61, 0x7ce2f7af, 0x34328aec, 0x817b61e4, 0xb7971c06, + 0x9f219c33, 0x7d27b91f, 0x1f90b5f9, 0x24c1dab9, 0x2eaf47e4, 0xeef4891a, + 0x1a8e7185, 0x55179c64, 0x74adc123, 0x8e501b86, 0x13991b29, 0xe2a2557b, + 0xc7ee08cb, 0x04ed0f20, 0x648d3d04, 0x63d402ae, 0x9444dc00, 0x27aa3d4f, + 0xe50e352d, 0x4b47588f, 0x7f287cc3, 0x75a30aec, 0xec7a5f63, 0xdf9065c5, + 0x3875626a, 0xe7affdbe, 0x8bbd6256, 0xe709146b, 0xdcd462e1, 0x9e780e91, + 0xf1d7ca9f, 0x3fdff8e5, 0xfe02258c, 0xf2e7df3b, 0xf6c0600c, 0x17a72315, + 0x36ec4d65, 0x5d73b42f, 0x1520a7a2, 0xe15baeca, 0x5f2c9197, 0x5a3cf477, + 0x02372001, 0x885a5e7f, 0x97cb93fc, 0x3fc01d86, 0xbac6fde1, 0x8d9f2b93, + 0x1c963a45, 0x93afa788, 0xeaa6372b, 0xfe7f4ae5, 0x52be92ff, 0x2797aa99, + 0xe4d2fada, 0x079462c9, 0xee2dc7a0, 0x681cb890, 0xada03907, 0x327920d7, + 0x6f5e9ef0, 0xf81f7fe9, 0x72ff398c, 0xdeda13fe, 0x030bfa50, 0x94fd8c3e, + 0x7443f40d, 0xa6bb5bf1, 0xdda9791f, 0x665e5146, 0x8b32fde3, 0x11b8fdbe, + 0x04af1a0e, 0x7943b1e3, 0x4cba8b7c, 0x63f5f941, 0x107924e6, 0xc6cf9116, + 0x43e29a62, 0x065bd5fd, 0x373a41e3, 0x7e845f00, 0x84ab5912, 0xf98c3a74, + 0x03190925, 0x7ef866eb, 0xac732942, 0x4aeff785, 0x9ff6a34d, 0x32d5ce62, + 0x42554df1, 0x274badf8, 0x10627bba, 0xf313df6e, 0x6c5bbfb0, 0xbef59fd4, + 0xaa5cf409, 0x4e7ad0b4, 0x8f889b76, 0xb903ac4c, 0x4192f50c, 0x393e632e, + 0x75a5d383, 0x8167c9b6, 0xe0cf9f7c, 0x6c9c0235, 0xa5e1d335, 0x393be04c, + 0xf22a5e6b, 0xb3e5ab45, 0x8fa01e9c, 0x259cc3c7, 0x91ad0fa8, 0xf1c6bf40, + 0x7a23082c, 0xede28b6c, 0xf3482db6, 0x31f7bd21, 0x3066f79e, 0x424aee51, + 0xbff77f7d, 0xdbefd264, 0xe90f200a, 0xda9e826b, 0xa292b866, 0xb9e3976c, + 0xb7af1b6d, 0x04f3d126, 0x9964e3ae, 0x54b6d9cb, 0x37469ede, 0x7049f341, + 0xf5c9d93d, 0x133ab2fb, 0xc16fa38d, 0x879424d4, 0x0c0c0b7d, 0x0eb280f5, + 0x90c3a733, 0x6d9c9efe, 0x576c7e62, 0x9f9159f1, 0x75f0f46a, 0x6fcc2dfa, + 0xb9c01376, 0x7a4779bf, 0x03fdac0f, 0xf694edcd, 0x7976a559, 0x3981a62c, + 0x4b9eb9c8, 0x8056e93b, 0x03d9f6ef, 0xd0901229, 0xcf3ff49e, 0xe05c7ca0, + 0xbb7fe638, 0xf292a63d, 0x255b02a3, 0x6d347fa8, 0xda472f1b, 0xdbfa864c, + 0xcde19b1e, 0xeff216fb, 0xcb04a60b, 0xe79b42bf, 0x7aa5f200, 0x0bb2bdd6, + 0x5fe4d0fb, 0xac8fe711, 0x0ef24cdc, 0x3a45ef06, 0x4a949c3a, 0x3b2d817a, + 0x9617576d, 0x513b370f, 0xa272810f, 0x26a3c3ff, 0xcf9572f0, 0x276e1b3f, + 0xedf40b7e, 0x3876fe45, 0xaca1ca15, 0xe807d71e, 0x3c12b357, 0x67ff601f, + 0x717baea5, 0xf49e1c3d, 0xf3a43cc3, 0x947fbbb3, 0x46e7fc81, 0x83ede813, + 0xe96d9bf0, 0x19f5bf9c, 0x6825ab6d, 0xf3c13127, 0x48e76c27, 0x51c99cf8, + 0x98ecfed0, 0x8428a609, 0x8cbcfbdb, 0xf3138de3, 0xeb933517, 0x6ee55193, + 0x6dda16a9, 0xe23872b1, 0xf48b8a3c, 0xe94ccf1b, 0x8b7f1816, 0xa61df424, + 0x925d9246, 0x425646ad, 0xfbe978ba, 0x640eb8e9, 0xb165beb1, 0xee6bdfbe, + 0x814050ce, 0xa37dbabb, 0x7bbd983c, 0xa1fd8873, 0x7c6951a5, 0x3ab2951c, + 0xd623e906, 0x69aef7f8, 0xc9b2df30, 0xb77c43e9, 0x48abb08c, 0x25ecfbc7, + 0xaed0dd89, 0x45c7f234, 0xfe7c36dd, 0xa90622e3, 0x744ced1c, 0xd2a3e507, + 0x63967d38, 0x785fc43d, 0xf6c39153, 0x122f6c6f, 0xe6fbcbda, 0x63b7f5ed, + 0xb62d70e6, 0x58145204, 0x78c50f77, 0xfe60d2e2, 0x713dce2e, 0x7b97f22f, + 0x971f0f93, 0x9c8c1e90, 0x48477b3f, 0x6d644edc, 0xae802313, 0x1147a60e, + 0x8925919d, 0x1f54acf9, 0x2fe04dca, 0x5a303f54, 0x369da1f2, 0x75a3266d, + 0xb5d61dfa, 0x9fde1ba2, 0x4dede0ec, 0xfd254d2e, 0xdfe29a74, 0xf261fc87, + 0xce047711, 0x035be4e3, 0x50e1d20a, 0x898dd6fa, 0x683bb546, 0xf5514d9d, + 0xeb64eff9, 0xea75dff3, 0xfe9537f3, 0x7f382b33, 0x9855c636, 0x107c8716, + 0xcbf23ff8, 0xf48399ab, 0x8bc958f0, 0x2bee517a, 0x72d6dbc9, 0x3a424053, + 0xe3b0b9fe, 0x5465295e, 0xb2c3bf1e, 0x5fe582dd, 0xe033297c, 0xcf28b253, + 0x9196644d, 0x920f84d1, 0xa39001a3, 0xbb1c0f88, 0xfddffe11, 0x0be1077d, + 0x9da09aeb, 0x1f5573dd, 0x36f123da, 0xd71ebb03, 0xd685916d, 0x5a3eb6ad, + 0x80e740ac, 0x966192c7, 0x16fba430, 0xb63373a3, 0x55998725, 0x22139b94, + 0xfcb6d42c, 0x9dc90a1f, 0x73335665, 0xfaff7e40, 0x3d43ca30, 0x8bfb1fe2, + 0xed863e4d, 0x3f21790a, 0x5bb92062, 0x5cb730a2, 0xf8fcf548, 0x85927f7c, + 0x6690c1ea, 0x03a073e2, 0x28271eb1, 0x104c3c0a, 0x10eb6bb0, 0x9be7a47a, + 0xc5973ac4, 0x70003b7a, 0xc96fbf50, 0xad12ccdb, 0xfdb13be3, 0x462c96f3, + 0x89d2d67a, 0x7c38d4ec, 0x67603149, 0x27c10ed9, 0x48c9b63a, 0xd6badaaf, + 0xc5700cf8, 0x9c78d88c, 0x350f5e0c, 0xc30fcc40, 0xd607533f, 0xb20e6339, + 0xb45847bb, 0xdb0b8a7a, 0xb5ef124f, 0xa60aa5a5, 0xeb19b374, 0x52e78bc5, + 0x437f9bc7, 0xc1f8d47a, 0x87b5f356, 0x8e5c1f91, 0x501fecef, 0xc1ddaa7e, + 0x1c359df1, 0x961c9dd7, 0x56e51c35, 0x7553944b, 0xc1b3e507, 0x8d1d999c, + 0x907a80f8, 0x44e2b9bf, 0x1f241286, 0x179d70da, 0x0c573d53, 0x55bf7be0, + 0x73eb8e1d, 0x79eb7e90, 0xdeffe1bf, 0x5fa1137e, 0x0edfb7a8, 0xa7bd42fd, + 0x21bf66ad, 0x4bfeb062, 0xebefec55, 0x4fcc65fa, 0xe05533c4, 0x8bc0e815, + 0x76fda7fe, 0x54e3d103, 0x032fcd8b, 0xf1c7f79e, 0xf1b658fe, 0x901eb04c, + 0x40687401, 0x8f0d8fbd, 0x90cb9d3a, 0xff5a3125, 0x281596d2, 0x23593727, + 0xbddd23b6, 0x60e2e829, 0xa0647ff8, 0x9ce6f49e, 0x47c403cc, 0x40ad9722, + 0xdaca9922, 0x7c689f89, 0x89d262ee, 0xbf03cc12, 0xbbf235fb, 0xcf0ed37b, + 0x440fc6c1, 0xb920ca6d, 0x95dae317, 0xfc397c56, 0x7069fd1a, 0xbd221d23, + 0x0861d3f7, 0xb11d1afc, 0xb612ede9, 0x99e814ff, 0x277a6a98, 0xca124d63, + 0x188ea679, 0xf1101f18, 0x1f134b64, 0xc12f02c7, 0xa3d4637d, 0x640fe60a, + 0x3e42de78, 0xb9ec7b35, 0x272b0514, 0xfb42cdce, 0xfb7de00a, 0xa1bc25ff, + 0xea03767a, 0x1eb8e3c7, 0x866f7c48, 0xa4fe87c9, 0xc78fd406, 0xb58ebd0d, + 0x1dcaa5fe, 0x3a03cc4f, 0x73699c69, 0x1360e702, 0x53e2243b, 0x3740758d, + 0xa463d912, 0x8b3037c7, 0x35eef90f, 0x21be2f42, 0x01856c33, 0xe2557dda, + 0xcbef4e7e, 0x2099f566, 0xaa2dbafd, 0x488feb7b, 0x7a73ce3f, 0x2fa83f11, + 0x1807bd61, 0xf5fa5df9, 0xf4957ae7, 0xf6397ee7, 0xedf10303, 0xbbce02b6, + 0xe50fbedb, 0x5ccde912, 0x48cb9ebf, 0x10cdb62e, 0x2a0eb5e5, 0xe3049fc7, + 0x827fe04b, 0xfe88cd1e, 0x5469ecdb, 0x79732c9e, 0xf2e5aec3, 0xdb952da6, + 0x65b76d97, 0x61e3f952, 0xf788d1be, 0x0f39d96a, 0x6b24fd91, 0xe50fa425, + 0xd74f8d8f, 0xf3fb63fb, 0xec7f26ff, 0xa49ec917, 0x36af6874, 0x012295cf, + 0xb89b563d, 0x75e8165f, 0x5d34174b, 0xd0329ac1, 0x9ac29a4e, 0x13a4303e, + 0xfac48ebd, 0x5e8173b3, 0xaaf475d3, 0xbe7317a6, 0xf469708d, 0x21a74fda, + 0xa266f974, 0xd3b63467, 0xc7fed516, 0x3a2bb406, 0xa07f34cc, 0xff90a6cf, + 0x043f843b, 0x70a353c1, 0x99656278, 0x0c1829e0, 0x37592b9e, 0xc09a74c1, + 0x6a18faf8, 0xcc2824fd, 0x581c2f6b, 0x3c63673f, 0x7fb7ec2e, 0xf6e4ad1d, + 0xcb7065e4, 0x59a7a236, 0xce9cc9b7, 0x07dcb9c3, 0x4125a600, 0xff4433ff, + 0xcbb8d6b3, 0x0cdeb0a3, 0x0fc1e389, 0x95fc01ff, 0x47467ca2, 0x875c34fd, + 0x93c6e595, 0xc68e7ac1, 0x8840712f, 0xfea2d9f7, 0x46198ecd, 0x9ccff006, + 0x9a67dfa6, 0x3fe4e77d, 0xcd6678e3, 0x9b33b7d4, 0x47273bad, 0x22303f10, + 0xa9df66fe, 0xba5eff2f, 0x05c7163d, 0xfee1676d, 0x87e101d4, 0x827583e9, + 0xb88de8eb, 0x0fbe5bf9, 0x93f59e74, 0xdbf442bc, 0xf05f8a4d, 0x3fc846f4, + 0xe50e64f7, 0xe3bf88df, 0xbe58c39e, 0xe5f29335, 0x55d68906, 0x5843ae1f, + 0xb725d967, 0x408d4d4d, 0xfdda2279, 0x89e7a33e, 0x19b69e61, 0x3f312f50, + 0x8a05b0ad, 0xa15f85ca, 0x7f9796af, 0xf29dac67, 0xe4a97725, 0x0b0f2da7, + 0xf075c1cc, 0x167fc14e, 0x9e5a4156, 0xaf85f226, 0x80fe60e5, 0xca0e6e74, + 0x9b7adeb3, 0x90d0f382, 0xb9dbfdcc, 0x347f92d9, 0x5a3ca5e0, 0xc7cf5fb4, + 0xf9f0ad35, 0xe5275c64, 0x5c9dbc65, 0xe93584e7, 0x9e70cf58, 0x96c9bdf2, + 0xb6bfc408, 0x0ba7d6de, 0x1bd08d7f, 0xbc4f82dd, 0x22b13ae2, 0x5b75da06, + 0xd10e2724, 0xfc827a5d, 0x3926cc12, 0xbb73ced0, 0x8ff41552, 0x6449744f, + 0x96599547, 0x9c3f2125, 0xe11531ee, 0x82961cb8, 0x47c80e03, 0xc6284e96, + 0x61689df9, 0xff40bf34, 0xaffe891b, 0x8112973a, 0xd3d36744, 0x335f46bf, + 0xd72fba34, 0xdbac37d3, 0xbf6eb84d, 0xe8eb7f8e, 0xdf403adb, 0x00f3e943, + 0xd704d3d7, 0xd6b97ab5, 0xfac84fdf, 0x2877ed0c, 0x60bf81be, 0x5f003bfe, + 0xe1c3ad3b, 0xfa63bea0, 0xbe4bae14, 0x38465f4e, 0x152e864c, 0x9c948f9f, + 0xa7840e39, 0xb92169d4, 0x355eb217, 0xcfa046f8, 0xb872f0ba, 0x7a68a7f0, + 0xa2c5ff29, 0x28b8631f, 0x2c5cf787, 0xe82e007a, 0x8be20dff, 0x4f3c392b, + 0xcf9c4d49, 0xf343bb08, 0xe368347f, 0x6f1fa3dd, 0x5af31849, 0x00cf910b, + 0xa2cf69fe, 0xee1fa720, 0x6d07982b, 0x9e428d3c, 0xedb8b4cf, 0x2ddb1826, + 0x3f44d551, 0x8d4482b7, 0x4d4cbc02, 0x3c431cf0, 0x3b7837ed, 0x65ab9ed1, + 0x06b7da2e, 0x7a63f8fa, 0x697cc0dc, 0xa9e286f0, 0x1abe0861, 0xfc509e3a, + 0x575bcc0c, 0xa049a612, 0x3fda608f, 0x671c2bde, 0x6b12bea8, 0xa30dfbd2, + 0x7a2f7f85, 0x8d979fc0, 0x9858d3e5, 0x4e79fc93, 0x69b9ec89, 0x9f207fa0, + 0xc8c1569e, 0x336d12af, 0xd34f3f90, 0x275a8643, 0xf9cf5c37, 0x8cc5b4d6, + 0xf8da63fc, 0x8131e942, 0xd300ff75, 0x89f51669, 0x75ff5c1a, 0xd00fda36, + 0xc6cd31c6, 0x32e203f7, 0x776fbf34, 0xfefdca31, 0xbf7265fc, 0xd0f918bb, + 0x4fbf591c, 0xf712ed36, 0x925f473b, 0x3ce69d28, 0x3f728c51, 0x18bba2ba, + 0x4947d9f9, 0x680cf8ae, 0xfb81b8ef, 0x99f143e7, 0x7a106196, 0x69d195c7, + 0xf6d23ae8, 0x7825671f, 0x0dc46546, 0x4acea5f8, 0xb4e7e45d, 0xfb4438a6, + 0x67a4549e, 0xaa234ba0, 0xbf37c06a, 0x538d12fc, 0x36f01bfc, 0x1afbf62b, + 0x76c7cb9f, 0x39096766, 0xe4fce6ef, 0xd8d76491, 0x271fee0c, 0x78112cbc, + 0xeee42499, 0xd9322df9, 0xecaee525, 0xd335b84d, 0x7cc8c878, 0x245d8eb4, + 0x7189172f, 0xcb05079d, 0xb05ff58f, 0xff9dfc93, 0x5bed3556, 0x30366d65, + 0x8e7e4835, 0x353185f6, 0xeee62e48, 0xc7e5d688, 0xeaeb27b4, 0xa693dd8f, + 0xe7f02f2b, 0x1dc7cae8, 0x8be5d42a, 0xd5d1aebb, 0x9948eabf, 0xf7757f2e, + 0x67fd5d54, 0x5e03fe51, 0x52a4fdaf, 0x27b3fcf7, 0x7dc21f27, 0xb702ebe2, + 0x253fdeeb, 0xebcc0efc, 0xf186caea, 0x7bf468d7, 0x3ef74aa9, 0xa97e39a8, + 0xff00f904, 0x4f9bacd5, 0xc004c7fa, 0xb57b7058, 0x62fd7aad, 0xc41c0b12, + 0x9f06aafd, 0x7e43f4e4, 0xf97d66fe, 0x08db3d82, 0xfa7c0baf, 0xe2428be7, + 0xe762b266, 0x1a1e901a, 0x40ef4033, 0x62c31981, 0xb90ea240, 0xfe6ebffe, + 0x37c65933, 0xa2737f9a, 0xaaadfe7e, 0xb3c3fe7e, 0x776ff3f5, 0xb23fe7ea, + 0x51ff3f54, 0xc7fcfd2e, 0x3fe7e854, 0xff9fadce, 0xf9fad984, 0xe7e8f24f, + 0x7e9d587f, 0xe93447de, 0x52e47be7, 0x7aa6bcfd, 0x43caea17, 0x27a340e9, + 0xafa69f8d, 0x0fafa25e, 0xd1043148, 0x35674685, 0xe869baee, 0x7ad51ac7, + 0x50bfaebf, 0xfa42c8fa, 0xf4f6fd88, 0xd08652f1, 0xf459a347, 0x5de72497, + 0x977119ed, 0xdf1a17eb, 0xc1e7960a, 0xfc50f2f6, 0x253932ec, 0xe521e7ec, + 0xd6cfda14, 0x2879fb01, 0x40ca3d3a, 0xebe752be, 0x9b762fc8, 0x3fb1c383, + 0x17f1eb8c, 0xa86ae8b0, 0x014a7507, 0x1e38a3de, 0x5868ffe8, 0x6e3ff92e, + 0xec46ed67, 0x45d64ef7, 0xa0161ce9, 0x241cc3d4, 0x9398abaf, 0x36e61ad2, + 0x87c87f09, 0x5b171fc8, 0x8f904bba, 0xf87b9c5e, 0xbd8bed38, 0x866ae3c3, + 0xe25e4f5e, 0xdf7127cf, 0xa7631465, 0xc1e8df05, 0xf7c817fd, 0xd07f855a, + 0x20d8d4c5, 0xfe169e7c, 0x1289aacc, 0x872657c9, 0xd558dc51, 0xa7c912ad, + 0xb4f2bfaa, 0xb1db8337, 0x52cb69a1, 0x42adaf0d, 0x41fae02f, 0x71c92a3a, + 0xc7994728, 0xd3a87a46, 0xda1ffc81, 0x3f21fbe3, 0x9ebd9133, 0xbe70e168, + 0x14a53128, 0x8905efe6, 0xbfce3bcf, 0x1ce58d14, 0xcc8d17be, 0x65cdf882, + 0x1f0bd21e, 0xf1b58052, 0xbb787376, 0x4fd0d387, 0xc7f6b618, 0x1f30e595, + 0x19778a89, 0xc7bfe5f9, 0x3bf97ef4, 0xcbf2249b, 0x86e00f7f, 0x4ce1d134, + 0x9fdc7944, 0xff01b847, 0x9e0f58e5, 0x49362427, 0xb7fb17e8, 0x7eebb7b5, + 0xb61bfcfe, 0xe30edfd7, 0xe70fe170, 0x0ebbf353, 0x0336fa07, 0x3dfd3cbd, + 0x50c37e46, 0x1930ebff, 0x6bc60524, 0xe3179919, 0xcd9512b5, 0xe83e1edc, + 0x4bfce874, 0xda7518cc, 0x1c7af5f2, 0xb4ec3828, 0xa2650eb6, 0xf4c1a6a3, + 0xe3c99613, 0xbb9a5b1a, 0xc51e89b2, 0xcd83e77e, 0x2b2f2887, 0x34838a4e, + 0x15166e2a, 0x1629bef4, 0x88f883ca, 0x83f78362, 0xe6d19bf8, 0x95978866, + 0xcfb45dcd, 0x3eb85468, 0x12f86ab6, 0xafc82787, 0xd0947132, 0xe65e2c8f, + 0xa5426788, 0x1327df87, 0xec8fd219, 0xdb074e50, 0x1490eccf, 0x17ab788e, + 0x58b8e4eb, 0xe6dc1a3f, 0x082fe844, 0xae56e3ae, 0xba3bd6c7, 0xe38e384c, + 0xb45d1730, 0x471dda7f, 0xb1c5d87e, 0x12eedfc4, 0x25de60f3, 0xdf50adf9, + 0xa0dcc0ac, 0x3fbacb0d, 0xc5d60abc, 0x191bdfca, 0xbcae0bee, 0xc843c6ef, + 0x4dd14c47, 0xc7d03f4e, 0x75afbfdd, 0xabc10678, 0x95139a96, 0xf6fcc18b, + 0xbf04a37b, 0x855d8abd, 0x3c0832f3, 0x76ef7f24, 0xbeee77f0, 0xf47648cf, + 0x3e63dfdd, 0x14b623a4, 0x7803257e, 0xe24e638a, 0x402c51a7, 0xc335d70f, + 0x6c62cec2, 0x7985b36d, 0x596720cc, 0xf17fe913, 0xb4f445cc, 0x81c079ce, + 0xe8beb4e4, 0x6ba63703, 0x456e9fb3, 0xbca1f3b5, 0xda985d5d, 0x96206f70, + 0x0a7c9be2, 0x798ecf8c, 0x80a9438c, 0x261ff43c, 0x3c5cc3ca, 0xc3ca2e1f, + 0xd0fd794b, 0x67049e7d, 0x531134a5, 0xe9157bdb, 0x31a65fc8, 0x19c3238a, + 0xfb6a71c7, 0xf7b67121, 0xcf9113dc, 0x5fb13395, 0x131fcbcb, 0x6db18ce3, + 0xe5869d5f, 0x8fe5f5e3, 0xdb28f28a, 0x6c32d6f6, 0xbe5f433f, 0x691fb451, + 0x34a1d5fb, 0xf7d5efda, 0xb728b0ff, 0x45d57eda, 0xdfeac7ef, 0xcdca235f, + 0x053f1e36, 0x66fd8b7f, 0xf44abe5e, 0x81a77f1f, 0x34e88279, 0xf3186676, + 0xf47bcd04, 0xde5d68b4, 0x7f61ed88, 0xb1f68c89, 0xbac9e51c, 0x1ff6b5f7, + 0x8c47fd14, 0x6fbdd34f, 0xd7d1c8c9, 0x724d199f, 0xbbc08970, 0xaea17869, + 0xa7db57bc, 0x0ef1e28c, 0xdf5169ec, 0xb12bebc1, 0x3fdae8d7, 0x6246ad9f, + 0xe069c3bc, 0xc7385dd9, 0xeb82d38a, 0x2d3d8979, 0xd7d4e901, 0x084a8a5c, + 0xc9780df0, 0xa443a98c, 0x2ab9e289, 0xef22d9f2, 0xf85534a4, 0x2b9a5b55, + 0xe81dbf28, 0x369fd315, 0x0a7d28bb, 0xf7bc2af2, 0x85576813, 0x2ed013fc, + 0xbb4137e6, 0xed063e98, 0xb428fa62, 0xa11be58b, 0x0c3fcc5d, 0x3d7e60f0, + 0x87f983b4, 0xafcc7da0, 0x7e537669, 0x4a6cf355, 0x50f66c1f, 0x475cd2da, + 0x7146c7e5, 0xe38df979, 0xd1808a15, 0x15e2e896, 0xa38a8d8e, 0x5f130578, + 0x615e3ca4, 0xfb70699b, 0x419477b0, 0xf7b985c4, 0xe80a9fa1, 0x7bbfa19b, + 0x7df6bac4, 0xb8c74768, 0xad24fcf9, 0xa8f2a26b, 0xf68fde0a, 0xb2f58b1e, + 0xedc825e1, 0x495ebd79, 0x3c714e5d, 0x9edfb9a3, 0x8a997a25, 0xcee7c2e5, + 0x11c90094, 0x57cf5b25, 0x43e24353, 0xa22ff4b5, 0xc9a3391f, 0x94b1c385, + 0xcf18fdba, 0x187a736e, 0x9a5dddc5, 0x8b05368c, 0x533d74bc, 0xa69d8d21, + 0xcba3cbd7, 0xaf7a750b, 0xea81a97c, 0xaedf8659, 0xad8a67ab, 0x5aabd5d2, + 0x1132ba94, 0x8f8c31f1, 0x196ebcc3, 0x6b7e824b, 0x7ef236db, 0x23be8533, + 0x67da5ea9, 0xf1f129d8, 0x39f07d0a, 0x65af1887, 0xacd3f11d, 0x8ccd9e28, + 0x0f901af4, 0x2475f99e, 0x7f6787ad, 0xe77f206a, 0xe033e668, 0x7882e57c, + 0xac31f2c6, 0x9163f29b, 0x80be42ab, 0xc7e632a9, 0xcdd900b1, 0x64260fa0, + 0x641a5e02, 0xe8ad4fcf, 0x79e119df, 0xf949c78e, 0x8a649e49, 0xf4d4c8f9, + 0xa84acde2, 0x264470bf, 0x1dc3edd9, 0x71815e74, 0x9fba1d39, 0x925eccbd, + 0xef477a80, 0xe16d7110, 0xacdea789, 0xd2690719, 0xe7b54a09, 0x0a86a90f, + 0x1cf120df, 0x92df99a5, 0x5f0337de, 0x297bd3d2, 0xde6ce38e, 0x3f28f17b, + 0x6402321a, 0x3518b477, 0x3246a1be, 0x19de705b, 0xf1c682c9, 0x7491f36c, + 0x87b21885, 0x343b26f0, 0x95e3e63a, 0xc0e056ff, 0x114caaf8, 0x39a3b9df, + 0xd47ca329, 0x99b5fbc0, 0xcd939fdc, 0x7ca10fda, 0x38358ec8, 0x39752ec9, + 0x35ac7674, 0xc065d5a3, 0xe61cda7d, 0xd19fd8c4, 0xc53975ac, 0x264bfc9d, + 0x9fef247e, 0x37d054c2, 0xe63e1cc2, 0xcbb40db5, 0x8f7c3d84, 0xdb9fabe0, + 0x397e09ca, 0x2edb9345, 0x773e73d2, 0xbf181d38, 0x919b79f5, 0xea4f925e, + 0xce1db3cb, 0xd3a01e23, 0x9dc2bb79, 0x76585e08, 0x0be281ab, 0xb86c4ab6, + 0xf8f07044, 0x7fae68cc, 0x3097371b, 0xad67cc2f, 0xc25df3cd, 0xdbbab76f, + 0xa87d09a0, 0xda631f57, 0x5910f18e, 0xe21b1788, 0x728cb6e5, 0x9b233aec, + 0xc62b58f0, 0xef98bf7d, 0xfe1a1196, 0xe5cc3c05, 0x99da0dba, 0xf1d9a6d7, + 0x943e71fa, 0x96137657, 0x2992e8af, 0x9f143b3e, 0x10fe2367, 0x5e130111, + 0x50fdcb95, 0xb8fde700, 0x3b84141e, 0xf7cbf106, 0x4c3be6eb, 0xce2a7f3e, + 0xc9057b67, 0x8a06319f, 0xcba50db3, 0x350f4265, 0x0d283a66, 0xf44d3c4f, + 0x79ef903c, 0xec8626b3, 0xecc72e11, 0x2e63970a, 0x3fec1a97, 0x65f9ab5c, + 0x3082b9c4, 0x0317af01, 0xe44f90f0, 0x1b46f8f0, 0xf18cdaeb, 0x49d9433b, + 0x4553329b, 0x2766a37c, 0xfd20d4c1, 0xde285b14, 0x7f16ad65, 0x29561ea5, + 0x3c521cde, 0x74116217, 0xeececaba, 0xf9d10772, 0xcf5c99ab, 0x47cc557d, + 0x0b8b459f, 0x082b4d71, 0xd550a73a, 0xbff64d51, 0x27d5dfb6, 0x617d2efc, + 0x05a9fdfa, 0x0efa1482, 0xe18596b4, 0xdf2b4b3e, 0xf1d05aef, 0x1fa33f9d, + 0xa3e77e61, 0xda957e25, 0xaa1e9154, 0xd5eafd45, 0x76bffb7a, 0x6bd68787, + 0xd4217fa8, 0x3398009f, 0xea1e3ea1, 0x5325784f, 0xb272b79c, 0x3acfdc02, + 0x60fd2eb5, 0x4a6dc018, 0x9ba40e65, 0x0aaff261, 0xb410ee30, 0xc809d6d1, + 0xe214f3cf, 0x7ff3a1d3, 0x7844cb3e, 0xefcda1d9, 0x83ad1b28, 0x0f9cc51d, + 0x7e77d8ec, 0xa76828fa, 0xc5d2472d, 0x18e5b739, 0x20ce9e69, 0x9db485c3, + 0xe2c18ab1, 0xfc0a8ed8, 0x37be637f, 0x1a63eb9e, 0xd3dfabdf, 0x255c307d, + 0xe90477fe, 0xdfe0efbe, 0x1d68f223, 0xbe504a05, 0x7872e6c6, 0x5f3c6e10, + 0x6e70d3b2, 0x9c3d304e, 0x9e0854c9, 0xae16df33, 0x675c3d72, 0x9f883ef3, + 0x0cfae1ca, 0x9ff5eae1, 0x373e0f8c, 0x33b5c1a0, 0x969c5ce4, 0xc2dbebfe, + 0x0f97aa53, 0x27fa7841, 0xf0a1b1f2, 0x3834d3b4, 0x9c59313c, 0x00e2fc2f, + 0xe441b3c8, 0xf4964c5f, 0xb45bceed, 0xfb3de1e9, 0x642cd742, 0x4c6f00db, + 0xb12fe216, 0xd6f69e27, 0x8bdafe04, 0x09167d04, 0x5b24e3fe, 0xbb1e3589, + 0xdad5e28a, 0x0d331615, 0xce3525f3, 0x054e3065, 0x6f802fe3, 0x743c1a35, + 0x331d808e, 0xa6ffca0f, 0xdeba7167, 0x8a0d2c99, 0x9c622987, 0x1aa9defb, + 0xa1e67289, 0x7c866623, 0x3b888561, 0x6ed1c87b, 0xe00db029, 0x9085f311, + 0xf3029a36, 0xfa2f989c, 0x06daa2dc, 0xfbc0cfe9, 0xdd64387b, 0xe969fd68, + 0x6e6cacc4, 0x64074ba7, 0xf0f04f3c, 0x26ba0ff8, 0x2e1e78c2, 0x7ef78852, + 0x0baffc63, 0x83ffbfc1, 0x5e9ce9f8, 0x1bfe2226, 0x6e228fa4, 0x14a37c82, + 0xf70f3778, 0x1a1e4dfd, 0x71e0237f, 0x9e39749b, 0xfd38b3f2, 0xc6d3e36a, + 0xbf6dc1af, 0xc1e686ae, 0x424cd47e, 0x2fa08a63, 0x0a445e4d, 0x22e387f9, + 0xe15e3179, 0x158a31e7, 0x4b87f79a, 0x33f3a1af, 0x7bbec53b, 0xed136ae0, + 0x71c2876f, 0x43dbc09f, 0x42efde97, 0x61dbd3bb, 0x14fee074, 0x3789f9d8, + 0xfe351d03, 0x7ea3715e, 0xb154f406, 0x7af386d3, 0xbcf5023e, 0x048cb37b, + 0x1f82bdf7, 0x2b925df6, 0x3bcb5ce8, 0x20e43b9f, 0x9661fffa, 0xae93f42c, + 0xb2af3c2e, 0xe5c790a1, 0x603e84db, 0x0ea7a77b, 0xde95b7e1, 0xe882966f, + 0x99967e6d, 0x0a60dbde, 0xbda13bc4, 0xf9994ec6, 0x7b002f49, 0x878036c5, + 0x43c70746, 0x8601d143, 0xc3ad8efa, 0x3fe9fb48, 0x2e0952cc, 0x3c377b84, + 0xb9fd1b0f, 0x8bcb1aa3, 0x81b4bfa0, 0x3e0eedf7, 0x30c5619f, 0x97a43cce, + 0x79351cf7, 0x8dc8ee74, 0xe3179df0, 0x991ae0d4, 0xbda1e7cb, 0xf50baba8, + 0xa143af38, 0xff769fb8, 0xfbea0b12, 0x30f8bada, 0x56f7a657, 0x58bf5c29, + 0xc3ed9a55, 0x1d1a31f3, 0x1e7b6627, 0x00d9ba42, 0xa457e2eb, 0x27b9757f, + 0x051c7e12, 0xa2fb8f18, 0xd69b35d4, 0x81c9b16f, 0x60db30eb, 0xffb7add0, + 0xa5a6f312, 0xef49fe20, 0x5da081f9, 0xdbcbee4d, 0xdfcf0c2c, 0x8cd2e5fd, + 0xe54fd448, 0xe7be9a11, 0xff1e2074, 0x7a499b62, 0xd86fc7e2, 0x35c705d6, + 0x6047e968, 0x82b3fae7, 0x7ba758f4, 0xc79fd632, 0x2f512b3c, 0xf306d79d, + 0x3e5eb412, 0xf6bceb16, 0x07f33852, 0xa5b5f9e9, 0xaab9d3b7, 0xf4114bda, + 0xff1163fc, 0x7b88b1f4, 0xf1c62bda, 0x870f5886, 0xfea5beb3, 0x37910cef, + 0xb3e7fd4f, 0xee5f9c55, 0x4bd7bc45, 0xa7b426dd, 0x77f35c36, 0x11f2cf3a, + 0xf37eefd8, 0x86338d57, 0xedfa83f9, 0xcac977af, 0xf3c131fc, 0x0638d2a2, + 0xf2a36bc6, 0xbf139a8f, 0x74c38f06, 0x3f681c78, 0xcbc7875d, 0xf2a4cfdb, + 0xbfb39a8f, 0x21dcfda6, 0xc1d54fda, 0x066ed03f, 0x5fddef3d, 0xac385cf5, + 0xe5fefd97, 0xf186be4f, 0x1d9baf7b, 0x7b0fe466, 0x9ce8cbda, 0xce8c8bdd, + 0xfafbde5f, 0x5c638edf, 0x4ddbbdde, 0xcfa3ec4e, 0x1ce39818, 0x30643e44, + 0x3a50d787, 0x4aca9e90, 0x3e84f1a7, 0x073e28b7, 0xb259d9c6, 0x27ca0715, + 0x2df2eb0b, 0xc8a3bb47, 0xf349fc42, 0xfeed6bf3, 0xf1d65326, 0xd6313ac7, + 0xe87d8b3f, 0xbf9ef1e1, 0x39ffbce1, 0xb0abdb8c, 0x1fa036b2, 0x64cfc16d, + 0x8f7f8f07, 0xf3447b22, 0xe7682b73, 0xc86ba3a5, 0xca5cf0cd, 0xcb0f1cc2, + 0x09fc7a06, 0x7bf403b0, 0xf69e63cb, 0x7ad27c60, 0xb7adff61, 0x833a2576, + 0xb6545ef8, 0xb7e8edf2, 0x8b7e8435, 0x9facf0ff, 0x84289bcb, 0xfaee5ea3, + 0x9e2a5565, 0x0df7e2af, 0xf7a4d000, 0x3c1d1556, 0x358de742, 0xe8757e7b, + 0x2888fdbe, 0xbf3583d4, 0x57c6047c, 0x60dfbca1, 0x3aa13d27, 0x7fabe79c, + 0xfd714317, 0xe784c760, 0x29da1f21, 0xb682dc53, 0xc05e701f, 0x90d967dc, + 0x13edf882, 0xf1df3e78, 0x1471865b, 0x228f57e7, 0xcdfea83a, 0xbe23a68f, + 0x38f22f81, 0xc93b4eab, 0xb3b36aa1, 0x3e1e4964, 0xbb66fae7, 0x0c288fe2, + 0x0d573fd2, 0x7afe232f, 0x0328f566, 0x5e1ae7ea, 0x9f39b20b, 0xb1c5a0d8, + 0x3c12812b, 0xc8a6724f, 0xc1c92eff, 0xe386565d, 0x5bfeec30, 0xbf51c209, + 0xc80ff401, 0xfd1eed97, 0xaf286cf8, 0x3c5034cf, 0x95b761aa, 0xd6bb39e0, + 0xbe0b764a, 0x7ebaf28b, 0x486db0f7, 0x01e1d5cf, 0x0fab1b8a, 0x3ee26673, + 0x6beef549, 0x9c5d7133, 0x053a3f5a, 0x38c9e6f9, 0x69f90535, 0x3a407adf, + 0x6764fb8c, 0xe6be7f16, 0x69d73a2a, 0x19ee10df, 0xc9a1afcc, 0x66d5ea93, + 0x79b4c232, 0xd05c99df, 0x33f107bb, 0x0edce2da, 0x0f115af9, 0xf48c8c0b, + 0x8143eab9, 0xb8e3154a, 0x6d557d85, 0xb89ff4fb, 0x76dd505f, 0xcf4e4ee2, + 0xb3407f7c, 0xadfb42cf, 0xa7677216, 0x12a73029, 0x8116ead2, 0x738f137f, + 0x641436ab, 0x5fe05e52, 0xfef6afc3, 0x8fce6c82, 0x3bd4f4b5, 0x4f94df8a, + 0xee0a40fa, 0xdd7a9d27, 0x6a76f44c, 0xeb9d2e43, 0x06abfad6, 0x9d6038dc, + 0xf3568c9e, 0xb29b7e71, 0x6eaaff39, 0xf6a776e1, 0xb1b0dabc, 0xd03be702, + 0x4efc5329, 0x8110239f, 0x3d5a20fb, 0x9e3fdf2d, 0x226fd90e, 0xf347daba, + 0x90c5740e, 0xb1bf0cae, 0xfc6dbc93, 0xce3b798d, 0xe62299eb, 0x3dfa470d, + 0x6d3b2662, 0xf499a77f, 0xfca3bee0, 0x3ce8707c, 0xc5205b30, 0x37ee7c80, + 0xf5af88c3, 0xe56c088d, 0xd195b37a, 0x9ec3bc79, 0x59bec4ab, 0x13112192, + 0x6bea1257, 0x7ead3b17, 0xa520d7d4, 0x7b2f0ffd, 0xbf9e913a, 0x9fd0ce1e, + 0xc39d2903, 0x44aed260, 0x0b0c673c, 0x45dfbc5c, 0xe29bdfef, 0x7d3e42c9, + 0x6fb43a6f, 0xa87bf7c3, 0xcf34c5de, 0x2fc3cc58, 0x4c97f459, 0x8cf08eed, + 0xe7d2e7a4, 0x27b40fd4, 0xbca8bbca, 0x8ab9ecd1, 0x3b47f1c6, 0x38c836db, + 0xf9f55b6b, 0xf9f59bf9, 0x7e7d3e05, 0xbe7d0ed1, 0xe6863b39, 0xf01b8351, + 0x285ffa4c, 0xe6cc5e5e, 0x8f8692fa, 0x9fecba50, 0x0f81afcf, 0xbe7429fd, + 0xe3cf93b9, 0xce26d1da, 0x92e4d64f, 0x9b374b9e, 0x2d49c504, 0xe898fceb, + 0xdae8cfb2, 0x70297284, 0x13b6c8d8, 0x00cd02ff, 0xbca50cfd, 0x5f38755e, + 0x9f1c1a4f, 0x05e9f88a, 0xd51c786b, 0x9c7fcfa7, 0xe786d732, 0x9dd63f77, + 0x7efcd5df, 0xfa0448d0, 0x354e6c55, 0xeb8f2aa2, 0x65c132db, 0x0dd578a7, + 0x8fddb546, 0x347eb7f4, 0x994e13f9, 0xaf48ddd4, 0x318ed6a7, 0x71ad3d20, + 0x6de3de72, 0xc05ae3e5, 0x5f8fe47c, 0xd7c4fcc4, 0x2672f143, 0x7acbcb9b, + 0x192bb9e6, 0x6a649dea, 0x5364d8bc, 0x0ea1ce31, 0xd79402ff, 0x565c1865, + 0x724bdf1e, 0x198b6ea1, 0x7403699d, 0x79034cce, 0xfcbffff9, 0xc68cd1f9, + 0x8de9c6b9, 0x89fab940, 0x747ddb83, 0xbbe51d4a, 0x3a89c7cc, 0x854bca1c, + 0x2ecf3fb9, 0x83e272a6, 0x3cbc489f, 0x7e34ce94, 0x903e1977, 0x7c5db06e, + 0x8d36da0f, 0x2476e54e, 0xb1abfe2e, 0x7184d782, 0x6abc9a79, 0x9e031494, + 0x5289ef37, 0x7b2e9023, 0x2f47a4d6, 0x2887b8c3, 0x8830be35, 0x300f1a4e, + 0xe2ad673a, 0x60ab87f9, 0x3e57319d, 0x4676f3fa, 0xa108fdeb, 0x426afcf0, + 0x72e09cf7, 0x77ce68c7, 0xf5f34653, 0x89f88154, 0x9c8f0c1b, 0x3a0be60e, + 0x5cf4e358, 0x4865764f, 0x239bf9bd, 0x3c847d05, 0x87ed7d6f, 0x25b2ff14, + 0x6f40ee88, 0xfbfa2138, 0x2bc990e4, 0x8c34c58d, 0x36eb99e2, 0xf7577e72, + 0xfbccb4d6, 0x23ee9e78, 0xc1edb098, 0x6b13b478, 0x64ca4fb6, 0xbcd17f9c, + 0x9359f468, 0xfd44cae2, 0xec84f02e, 0xb75275c0, 0xd6782659, 0x2796ad28, + 0xcde9f9e0, 0xeafbd246, 0x87a73c04, 0xde68227b, 0x0098a614, 0x4f15a7ef, + 0x4fb5e904, 0x869f64c8, 0x7dea038e, 0x820e14a0, 0x679f0b1f, 0x20fa4fc2, + 0x40d87074, 0xc61354f3, 0xde9e5d68, 0x9239d126, 0x773c23d3, 0xec07be61, + 0xb53f3c79, 0xdd0175a6, 0xef8a12ff, 0xd10f16d3, 0x1e317ceb, 0xfda19f0d, + 0x43ecf868, 0x74fea27c, 0x7f9249e8, 0x48c98f8d, 0xc75f6cc1, 0x27b3b205, + 0x7e3a4e74, 0x08df3e2d, 0xf28a8c7a, 0x3bdded36, 0x9f01de50, 0xaaa63d42, + 0x859e3d33, 0x27b46dc8, 0x333f7eab, 0x2f2410c2, 0xb4c9b4d7, 0xa326b2cf, + 0xea96a232, 0xf48e9f9f, 0xc6755275, 0x5bd50617, 0x3f7fba30, 0xd55f3741, + 0x8111ff1b, 0x33add4fd, 0x79b4b8d2, 0x889803e9, 0xfb86b70f, 0x86fbfe90, + 0x6d5da807, 0x1be9fa9e, 0x27a341e7, 0xb471b7a8, 0xf72fd043, 0x7aa4f6d7, + 0xd0839c4a, 0xa147bcc9, 0xb36f6c5f, 0x0ef185dd, 0x86afda57, 0x16f9fe8f, + 0x38f29aeb, 0xc9535b8f, 0xac386e3f, 0xc9f97050, 0x70531bd6, 0x7e83571d, + 0x6a887e80, 0xf51c7029, 0x78abc841, 0xe37aa78e, 0xbfb0bba2, 0x0366a3ea, + 0x7ebcf796, 0x15c13e63, 0xa780af32, 0xbde8c194, 0xe290352f, 0xe81fc20c, + 0xb5beb415, 0x4dc104f1, 0x459d8070, 0xa5f4f7f7, 0xf1067cc2, 0x3f315681, + 0x2261df50, 0x47f7e6fa, 0x11d78ff5, 0xc8475e32, 0x44603f78, 0xa1e9ccdf, + 0x331cd4f1, 0xcd79f01b, 0x44c9df23, 0xdacf5bbf, 0x9eae3489, 0xae3e5768, + 0x68149eaf, 0x597e107f, 0x338c08f3, 0xd9c62bef, 0x1af9a56a, 0x81d19c72, + 0xc62becad, 0x77e0a2f9, 0x523f38da, 0x673c08d4, 0x6657b8d5, 0x1c6947e8, + 0x2d70dee1, 0x43963bcf, 0x6e228dd7, 0x386371a0, 0xedeabb9d, 0x561f9230, + 0xdfd003e3, 0x8183d215, 0x4ca7a1e8, 0xe914bc7d, 0xc0ecbd6b, 0xb59e8afd, + 0x11fddee3, 0xc8367be4, 0x7a1bd40e, 0x80fe38ca, 0xef1c901f, 0xa74f7149, + 0x0746ebfc, 0x6a9d63c6, 0xe81fc7fd, 0xa34e849e, 0xee7c68ca, 0x0f31b30d, + 0x035f22f0, 0x7ae2ccbc, 0xbfc691ab, 0xab63f566, 0x79bbdcb1, 0xb90f9d2c, + 0xf1eb5e5c, 0xd64eb75c, 0xa8a643ad, 0x23e35fd4, 0x13dee8c3, 0x61c0cf0d, + 0xd23ed133, 0x99f981f0, 0xd2f00663, 0x4005ee28, 0x1bdf813d, 0xe219f826, + 0x09cb8d27, 0x7c83273c, 0x0cebcf0c, 0xf942af25, 0xfddca84f, 0xe8af9fa4, + 0xe082f1f9, 0x21d9da3c, 0x7c2145f9, 0x79487163, 0xc839487d, 0xf983e9e7, + 0xfd8b67a5, 0x558f0d18, 0x7f9a8f02, 0x3f3d6fb4, 0xa8a55ee7, 0x7e83b426, + 0xe7cb8135, 0xae59856a, 0xcfc975a7, 0x6c2954ff, 0x9f10b985, 0xf6c14d3b, + 0xc2b7b412, 0x30f90d1c, 0x5ea087ce, 0xaf282985, 0x9e0d5bf1, 0x968f0178, + 0xc13f637e, 0x31f721b4, 0xd90673e2, 0xd39428c7, 0xda0efd7e, 0xb2657b59, + 0xe2df1b33, 0x717d87f2, 0xe017f1e1, 0xe9ebc379, 0x8da63f14, 0x7d8f143f, + 0xa4442e7b, 0x43def3c1, 0x5ebf3a26, 0x465311d5, 0x60745876, 0x89e7bc50, + 0xf5ed69f1, 0x3311dd2a, 0xd668f582, 0x4419511d, 0x2e7b552f, 0x0b5da334, + 0x41caf3f8, 0x6754fc7c, 0x97da195c, 0x97276fd5, 0x9be279e1, 0x5fa0bb44, + 0xae1d6cff, 0xf266bd9b, 0x35bef44f, 0xf7ef80db, 0xd22755be, 0xc3dee97b, + 0xa54e8fde, 0x0611ff60, 0xe5183dfd, 0xaa9f5c39, 0x7ad89c36, 0x57fff21d, + 0x825b5213, 0x86d5d0fc, 0x5f8bb242, 0x20e60630, 0xaff7a0dc, 0xad52b8c6, + 0x54729b9d, 0xf7b1df1e, 0x1fc8ade3, 0x51186d4e, 0x77a56c88, 0xc1d9166f, + 0x65c747bd, 0xdeae39e2, 0xe44e49f5, 0xd5182f0b, 0x62ddb97b, 0x1d4f6e77, + 0xc1fb0f68, 0xbddec7fd, 0xffa09557, 0x8728f7a0, 0x4fe4f217, 0x8c5e7a80, + 0x8ddad4bb, 0x630fa830, 0xdb7b3b7c, 0x92c57648, 0x6027a67f, 0x6984541c, + 0xd031fbf0, 0x75c7d08e, 0x6b71a72f, 0x76a1c3f1, 0x1c4f1686, 0x03cd876a, + 0x43cf813e, 0xd63ac5ed, 0x9ce312ba, 0x5046ed43, 0x78de2dcc, 0xafdad75c, + 0xa2fde49d, 0x759a5f1d, 0xb1fc44f5, 0x15450f76, 0xe4b5c7ac, 0xdf91f27f, + 0x1e46bbcf, 0x7d763f74, 0x37d3d70e, 0x4e6bff85, 0x9ebcd077, 0x11253034, + 0xc4d27af0, 0x8385892c, 0x53178fd9, 0x0def88aa, 0x0756376e, 0x2ec7afdf, + 0x964f23b7, 0x00cb5af9, 0x656b93ae, 0x7020cb67, 0xc8ed77fd, 0x1201f7d0, + 0x61cae7ee, 0x631b2e3c, 0xcabfa36d, 0xabc3d67e, 0xe78ad3e1, 0x87a10684, + 0x67dd0467, 0x2e6653ff, 0x469df75c, 0xbe14c73a, 0xefc7f3ed, 0x30ecfa40, + 0xda55523a, 0x7dd17177, 0x8a657b93, 0x38ebec27, 0xe510b115, 0x7471decc, + 0xcedfaeac, 0xfed32bd9, 0x0b9eef49, 0x02cfb8f1, 0x727ed0ed, 0x4e63e763, + 0xe0a1dfa4, 0xfe472578, 0x15cffc76, 0xf6272fb2, 0x9db77b95, 0x0efe44ce, + 0x1c95f07c, 0xfccd1fdc, 0xd74bdc42, 0x07f4825d, 0xdefe91f0, 0xfa48bbe7, + 0x1e43a5a5, 0xb7b7bef4, 0x0edf4c72, 0x1fbd0abe, 0x0b79e017, 0x6ce0d1e1, + 0x94260350, 0x67175fb3, 0x76b7be51, 0x84c7de39, 0x076813f1, 0x24c874d4, + 0xc8b66ab7, 0xa5e6153e, 0xfd81eb3c, 0xf55cdf78, 0x37f91263, 0xffe3cb27, + 0xf9cefe80, 0xefca65eb, 0x1fef76db, 0xbe92bef0, 0x55f6462d, 0x71031a71, + 0x8f9d3219, 0xdd8cff99, 0x8b2fcf89, 0xa03fc0c7, 0x12cddabd, 0xc684cdc5, + 0x7b16f465, 0x79089f05, 0xe5656dbe, 0x154c58fe, 0xe34313b2, 0x2077f034, + 0xb0dee07e, 0x25d6a31d, 0x5af4fce3, 0xc98fe3fb, 0x7e7e61de, 0xef77bc6e, + 0x8f382947, 0x35feaf8d, 0x7f320d93, 0x83a9ebfd, 0x15fc7fc7, 0x0697c6e4, + 0xd30bfba4, 0x7fd483dd, 0xec15c453, 0x51937a30, 0xedbfdd8f, 0xed23f722, + 0x21b6fee5, 0x2b5e67db, 0xadf97bf7, 0x6a2b8fe4, 0x75c54c77, 0xee20fa02, + 0x5f6e342f, 0xf21db959, 0x788cd7d6, 0x1c6b2583, 0x82f5a365, 0xa836a3eb, + 0xec9d6d5d, 0x5a77fb10, 0x229bc95c, 0x2b8b471e, 0x424ce2d1, 0x4ce2d0e1, + 0x267114de, 0xf1dc730b, 0x198690b9, 0x4fb411bc, 0x34871210, 0xe8515c54, + 0x7dd08bb9, 0x1bf64183, 0xdabb7175, 0xe409a3be, 0x1f64be3b, 0x48f0f953, + 0x207e3728, 0xd434fd93, 0x8e36a43e, 0x5154ef7d, 0xcbfd561c, 0xcfeff932, + 0xfd8a32ee, 0x4fed00df, 0xdcf9df19, 0xa97c8a94, 0x2fa86243, 0x9f1e4237, + 0x5c578e37, 0x6bf77ec1, 0x723e3972, 0xed293372, 0x30875c55, 0x51d7a1ee, + 0xdebd4265, 0x054d4ef8, 0x62631bca, 0xdae10995, 0x25994ef7, 0x4a2de715, + 0xb2b375a1, 0xcbb7eb43, 0x1b67ed81, 0x467ba3de, 0x430ac503, 0xdf7429fd, + 0xeb9725b4, 0x9bed97b9, 0x66fccd16, 0x9589a6fb, 0xea6fb95f, 0xb0f4e5c9, + 0x734ba458, 0x4df6c7ff, 0xb471b93d, 0x22793a6f, 0xf132b174, 0xa6fbe0fc, + 0xcaf38d97, 0x725b4df6, 0xd9afbe55, 0xf621de3f, 0xff6b2f4d, 0x2f4df6ca, + 0x7d887f6f, 0xbfdacbd3, 0xfed37dc2, 0xe9bef976, 0xc3033c8a, 0x1c56b5fb, + 0xbfbf7331, 0xb329cb85, 0xfc2b7758, 0x1738bae5, 0x72b2f52d, 0xc57487ba, + 0x39afee2e, 0xe072a8eb, 0x7146373a, 0xe8d994bf, 0xd7bb40aa, 0x831d151c, + 0x373abbf4, 0x62fbe69d, 0xf1d11354, 0xbd3f5045, 0x726f0fe4, 0xf0c57e63, + 0x66d6991a, 0xf6c5fdc8, 0xfbef994e, 0x72116d5d, 0xde077dfd, 0xed989047, + 0x28372a79, 0x7c5ec1de, 0xd998e280, 0xe448cf1e, 0x5a1cab03, 0xf937667c, + 0xe7924c83, 0x629fe8a7, 0x0f14cd47, 0xc9ead17e, 0xe3ad0472, 0x424d7317, + 0xfdd3f3af, 0x46d65e9e, 0x0b9ee369, 0x2fcd6784, 0xb23795aa, 0xd71de100, + 0x4ffa1d35, 0xdf2a5452, 0x73a2c9e3, 0x7e8e0245, 0x9b4de3bd, 0xcfeb00d7, + 0xba4ff9dc, 0x094fb91f, 0x523f474c, 0x1e1c877b, 0x6203df8c, 0xf88d965d, + 0x6afd1f3c, 0x245ef80d, 0xca2f5bee, 0x60d3fe42, 0xdc23e40e, 0x47ff5ffb, + 0x8bfbf23e, 0xe2468b9d, 0x9f501df3, 0xa05304f4, 0x3b3f7821, 0x53babf74, + 0xf3e843cc, 0xc92d9d1d, 0xe80bc708, 0x7bc6889f, 0x8e977e75, 0xe6165671, + 0x0cf9147a, 0x7642fe03, 0x659b9ecb, 0x1f0d2be4, 0x30c5dde2, 0x7cb97b35, + 0x7cc11a2f, 0xd0dcffb8, 0xba6ce1f9, 0xe4d8b97f, 0xac359340, 0x8787ef80, + 0x5ee85b15, 0xf264dfd3, 0xcf284dfe, 0x49fdf1d3, 0xe76f3831, 0x15bfb681, + 0xc212d83f, 0x35effc0f, 0xfee2a0bc, 0xe474f773, 0x4e17c003, 0xf8697ca1, + 0x0aefe7fd, 0xe71e333b, 0x0bf60567, 0xed17dfcf, 0x3e79e5c4, 0x4b1e7ac1, + 0xa0abfaf7, 0x92b32dde, 0xb9d45ee8, 0xd3628ec2, 0x5d9fb862, 0x7f418f71, + 0x95f2e5c5, 0x49af2bdb, 0x97ed0f1e, 0x289c5924, 0x31877267, 0x7f9e124b, + 0x61a5f44a, 0x455feb5c, 0xe7130e7c, 0x98c473d8, 0x5f6e4c5e, 0xccf24512, + 0xf4748d17, 0xce57eddf, 0xd70bfd73, 0xc3ff5685, 0xf18c7759, 0x357eb20c, + 0x6a64dbbd, 0x19c23eff, 0x9d91b7a8, 0x7c376e87, 0xccb367ef, 0x4577bc7e, + 0x247ab73b, 0x38c1ce7c, 0xb45dee95, 0xb37bc1e5, 0x12b29d6f, 0x18fed2f3, + 0xf3d20975, 0x9eed6edc, 0x2f96072b, 0xc64678b6, 0x3f8e281b, 0xb185122b, + 0x865c463b, 0x1ee31ee6, 0xcf0e7e14, 0x3ff7895c, 0xf5b5d0d7, 0xe9ce892a, + 0x3ee1e727, 0xae48f2d2, 0xe45d2a77, 0xe22b601f, 0x78b3bda8, 0xf1d0640e, + 0xf7687c71, 0xb233efca, 0x38c12feb, 0x748c6df7, 0x35dc00b6, 0xd39d6eab, + 0xc1ad6908, 0x7597ef1d, 0x7f6367f0, 0x4773bd8b, 0x02b9e126, 0xdc5f80a3, + 0x4714cef7, 0x0ebaf066, 0xd345bf85, 0xddac7e2f, 0xaff3c85f, 0xbee8a378, + 0xc2e1b33d, 0x5ca33707, 0xbf20631e, 0x583096c6, 0xfdf76063, 0x53e7012f, + 0x9e036e22, 0x89f37dd3, 0xc4fdfc61, 0x67140dc7, 0x4bdb2eed, 0x06b3f5f3, + 0x94f7139b, 0xf69532e6, 0xbdc5aae1, 0xf84d1f18, 0x8c376747, 0x679e726b, + 0x5dc3ce02, 0x0f948631, 0x2e4f0e08, 0x8f8f55c5, 0xb5f3a2b9, 0xe461cc95, + 0xfcfc75fb, 0x0f83a547, 0x63ec56a5, 0x745cccdd, 0xe616f7be, 0xf5ef7aa1, + 0xffa85c9a, 0x4bb687bf, 0x41dfdd21, 0x3e636fcf, 0x7e60ef4a, 0xd63dffaa, + 0xdf0d794d, 0xc5772740, 0x38f93a72, 0xcffc2641, 0x870fb846, 0x0a588fe7, + 0x29b198e3, 0x43d9146b, 0x9f84716d, 0x867b83af, 0xc7581fa0, 0x3ac4f373, + 0x54ed099e, 0xc7590d4e, 0x7cda71e5, 0xf5aafa8e, 0xdfbe75d4, 0x0125b1de, + 0x53146e1e, 0x116ba37a, 0x9e783bd9, 0xd3f30bdf, 0x95c79e35, 0x8b2d721f, + 0x4f29958d, 0x29cbab72, 0x737d5c93, 0x5de3b319, 0x18166ff5, 0x7b34fe89, + 0x6f68ba66, 0x81cf25d2, 0x5d3e7848, 0x1445617e, 0xeb862be4, 0x129a39ef, + 0xfb4153bb, 0xfe866a6b, 0xbd3cb4f9, 0xd65df25d, 0xa66ae74a, 0xedebe917, + 0x5d00bc43, 0xf389e4b5, 0x472c3992, 0x7e91c3ec, 0xe368937c, 0x260bb4fc, + 0x2d78b3dc, 0xe716b3cf, 0x3f77c961, 0x8871439a, 0x38fdfb0a, 0xcaeffbe4, + 0x093b77e4, 0x0b2ba37a, 0x84835dcf, 0x34e16500, 0xff9857e8, 0x4c20f404, + 0x29566d3f, 0x0b7a033d, 0x3b36f796, 0xf3bfff29, 0xbb628fdc, 0x29cfab55, + 0xc4ab1f38, 0xe255d379, 0x7b5d695c, 0xed0c64eb, 0xfda7b859, 0x7e35a620, + 0xb31464f7, 0x1d350ef3, 0xbf5574c4, 0x1164d57d, 0xf9fd7d7e, 0x77e57b4e, + 0xef9e00c6, 0xa7f7cbde, 0x79511eee, 0x316377f3, 0x50fca46f, 0x497f53f4, + 0xbc189e62, 0x2cf5da17, 0x38eae7c2, 0xc6063071, 0x297371f9, 0x66e7ffc1, + 0x59ffc117, 0x97a50573, 0x502fdcf2, 0xf48e763d, 0x70beefcb, 0xf5061942, + 0x8a24b927, 0xc5deb8eb, 0x87a03e7c, 0x072e46cd, 0xc01c8336, 0x4c613bf5, + 0x30f753e5, 0xdd9ed3e4, 0x532dfef8, 0x7ec24c17, 0x55ce97a6, 0x5faddeb0, + 0x3a931630, 0x475f9f40, 0xebf8daef, 0x7d9dfcc5, 0x9e7c225d, 0xa137a835, + 0x5b7de3be, 0x5e7db926, 0xfe7e7fdc, 0x3bed0e48, 0x3d39792c, 0x2586f501, + 0x38213546, 0x9833e55e, 0x27a41657, 0x0fe2f67f, 0xe3cf8313, 0x7edd167e, + 0xaff218f1, 0x05fe713f, 0x27e9cc1a, 0x4f0dbf91, 0x7b59fba4, 0x6cedeffb, + 0xd739470a, 0xc7eed260, 0xfe62e4f4, 0x5fee30b3, 0xb0e5f92d, 0xd83f5c32, + 0xd41b9e1f, 0x2fe653f8, 0x48fda537, 0x476fe81d, 0x27b1ed7b, 0x67d67f21, + 0x0e411af0, 0xbded659d, 0x9eb8e2af, 0x2d9f91b6, 0x96c2525b, 0xf7155ca2, + 0xaa4b67d2, 0xcfddfb82, 0xe4a9f2ff, 0x6f7e309f, 0x7fb79e1e, 0xf138636d, + 0xce8cd7a7, 0xfdf14be3, 0xcffbf8a7, 0xe4efb86d, 0xd7d74c1e, 0x6907de17, + 0xf09a2f20, 0x82c8f35a, 0xc8371c1c, 0xed04966d, 0x7e15e2fd, 0xdb4c798e, + 0x6e78e5be, 0x1396ec6e, 0x0b486486, 0x305a969e, 0x71511dcd, 0x45e5e508, + 0x8e002e54, 0xcaa42f71, 0x273d5678, 0x06ec77d9, 0x2745de7e, 0xcedaf3e7, + 0x01b32595, 0xb5239f79, 0x83fb8a7f, 0xa1fc46ab, 0xbc58f490, 0x79da0f7f, + 0xf7e6e3b9, 0x8071a0ef, 0xcf708126, 0x05bdd135, 0x46dde7cc, 0x6c9e6171, + 0x6ecde927, 0xbf3813ef, 0x4ef13d67, 0xc1bb3394, 0xeb06be8e, 0x43e7e71f, + 0x70fa795e, 0x2255fa04, 0xe2b53ec1, 0x6041447e, 0x1fafd632, 0x404de2a1, + 0x1bd6c46c, 0x0d3f102b, 0x46de5ebb, 0x38b62ced, 0x7bacced1, 0x8bdd02f9, + 0x73f0a6c1, 0xf17767be, 0x2ee543fc, 0xd5bbc627, 0xcf0bfb6d, 0xef29b977, + 0xee9ead06, 0x7ae6a857, 0xcf2126cf, 0x0b3e7758, 0x9b5997be, 0x18a087af, + 0x7aa737cb, 0xacafd093, 0x5f9041c9, 0x09706349, 0x5dfbf898, 0x10a47765, + 0x7e50ae5e, 0xd21c8499, 0xe264dbda, 0xeed207df, 0xe262d85b, 0xe019f772, + 0x9a2f481b, 0x477e85dc, 0xd3efe18f, 0x64c31b3d, 0xc02ecc69, 0x664db0c7, + 0xb0afb7ce, 0x2b91d9ff, 0xde870e49, 0x583e8573, 0xc134bf7c, 0x68fd8c53, + 0x453159f7, 0x22bd43cd, 0x3255c12b, 0x1fdf8e26, 0x7900638a, 0x1be60d78, + 0xd2a7d064, 0x5b29f483, 0xc3c915f4, 0xd72e09a9, 0xaf2bb898, 0x01ee265f, + 0xf1e70b2c, 0xfde165a7, 0x836d0ce7, 0x17b4dbf3, 0xddc70cf0, 0xbf39998f, + 0xbe238fb5, 0xb4338da2, 0x7ac2df9f, 0x6ff473c7, 0x587a79e0, 0x136d13f7, + 0x03d79a14, 0x4b07c586, 0xea1e9ef0, 0xc15a0901, 0xef21077b, 0xcb1e03b2, + 0xfceeb26d, 0x30bb6875, 0x40319e6f, 0xc363934f, 0xc526f575, 0x1d709946, + 0x43f8e95f, 0xc396f9ef, 0xc6a37934, 0x90f2fd8a, 0xdef1f3f1, 0x73a62d6d, + 0x95d265dc, 0xa4747b8d, 0x979c1efb, 0x9202b689, 0x336d1383, 0x8d187b8e, + 0x1e7c7ee3, 0x71d0de3a, 0xe995cb31, 0x98903f43, 0x40fae317, 0xabbf914c, + 0x8bfdd8c3, 0x1daf0097, 0xddd25ee2, 0xda2a6f78, 0x9cfc9529, 0x88ea0764, + 0xce23bf50, 0xaf24f141, 0xef6afd89, 0xf17de26d, 0xdb8e8a5d, 0xa2bdf992, + 0x85e74666, 0xafdf0b59, 0xfd3630e8, 0xc76fe50e, 0x804e61b2, 0x3e22c980, + 0xf38f88f4, 0x7fc916ef, 0x7a97dd07, 0x76e744ce, 0xab7ca2da, 0xdb473cf1, + 0x9e09d38f, 0x375f6023, 0x61757f62, 0x2bd49ee2, 0x76808efb, 0xfdf6902f, + 0x06efd080, 0xfaf2331c, 0xc7dc87b7, 0xa9d05476, 0xcf30fdf6, 0x7fba70f4, + 0x5531edf1, 0x7d90c7bb, 0xf3dfbfc6, 0xf228cd64, 0x70bede1d, 0x93d12a4a, + 0x16cc53f0, 0xfef6fcfc, 0xf7f9a97b, 0x8fe16e30, 0xcfb56dd9, 0x6fbe9158, + 0x77d2b3a9, 0x2dd48e09, 0x7e9da3b7, 0x1f7c478b, 0x7bfea669, 0x718f6f04, + 0x346b7ef1, 0x8d5fcf7b, 0x603d7df8, 0xc64f38a1, 0xed82e3fc, 0xb59e6d27, + 0xf6faf1f8, 0xdb068f09, 0x9ccc0bcb, 0xe4f168ff, 0x6f3de3c3, 0x7b8dfb60, + 0x6c1a3ca6, 0xfb56df47, 0x43ad0460, 0x6699efd1, 0x7f74a3d7, 0xa5057349, + 0x7f5abf5a, 0x17169515, 0xdf9fe3ee, 0xe97ba665, 0xdf7412ee, 0x42cff668, + 0x18bbf67e, 0xcfd47bcf, 0x71f34fc2, 0x6656c73d, 0xc11c5247, 0xc2c5325b, + 0x80f4171d, 0x77ed19f6, 0x6eb8f135, 0x1f9ef226, 0x24bd90c5, 0x6f483f41, + 0x29db96a7, 0x7263d64e, 0x3d22d525, 0x7da7092f, 0x0eb8e3d4, 0xc5f1fea1, + 0x778f4451, 0x1de8bc3e, 0x6ee3d79c, 0xbc79771e, 0xffdfeb83, 0xe1c794b5, + 0x7a5e56f6, 0xebde133c, 0xc954e07d, 0x97bb4866, 0x82ec91ff, 0x7bf3973b, + 0xf85cef4c, 0x0f81c500, 0x5ceeaeb5, 0x986fb21c, 0xe3833aef, 0x74bcad8c, + 0x27f1cf10, 0x04fc5a2f, 0xf9a839ee, 0xbcf8739e, 0x80ddd4c1, 0xed7868f8, + 0xcf68294f, 0x6e7dedf4, 0x474841e7, 0x42fe7a26, 0x8df97d7c, 0x3b620fa9, + 0xf113204a, 0x7cc0a0db, 0x79091d21, 0x68e828d9, 0x1fe7be53, 0xe5e2ded8, + 0x1e3e926f, 0xf9c5d79e, 0xc65703da, 0x78ed3e07, 0xef04b766, 0x68eb0a2d, + 0xe5f654a0, 0x499f5c23, 0xf38c08fe, 0x8af888f3, 0x047f0e33, 0x11e34bde, + 0xc6844af7, 0xf1a812d3, 0xef02efc2, 0x45976a2d, 0xe28f9e7c, 0x2feb43bf, + 0xf4d138c2, 0x90be7f2b, 0x51e7f3b5, 0x8b5c367b, 0x3f30aef4, 0xfa7cefee, + 0x9f3a28fc, 0xe7e5f67d, 0x25f78332, 0xe1cbd343, 0xe33fe3e5, 0x9f32f7e3, + 0xa4462781, 0x3acc17b7, 0xf9f7bcfb, 0xba37a224, 0xc1f701f8, 0x7da2cf9f, + 0xfeddad5d, 0x3b675a38, 0xab9d6eff, 0xa75bbe9d, 0x696619f1, 0x3afb27cf, + 0xed1f3dbb, 0x313f8d49, 0x3d267b77, 0x6267b5f7, 0xee06ddfd, 0x5dfad0af, + 0xfc618bf8, 0xf00b7fbe, 0xe7cc22e9, 0xb27cc76e, 0x11fdf83c, 0xdacbe3a1, + 0x47e5d26c, 0xb2f9f4fb, 0xff67ee7c, 0xe3fbcff9, 0xf7616451, 0xff6e4461, + 0x27a8733d, 0x9a8e5e13, 0x33dcbc34, 0x22d8f80c, 0xdbb35f11, 0xfef5e1c0, + 0x7635fb9c, 0x21867817, 0xf715ed9f, 0x828eee34, 0x29ea1e7c, 0xaf2d6e1c, + 0xee1421e1, 0x0de747e5, 0x5366ff43, 0x0d83f73e, 0x8b434f75, 0x7fd5c791, + 0xee887cda, 0x70f0d23d, 0x02e5d9ba, 0x9f9fdc96, 0x82c0b9b7, 0x96fe61eb, + 0x7d304b02, 0x7718ecb4, 0x3b372408, 0xe27143b3, 0xdf145a10, 0x5b8bd406, + 0x5eedc876, 0x1716e546, 0xdb633fd4, 0x9bd62eff, 0x30aa25b7, 0xfcc71cf8, + 0x355c93cd, 0xeee77041, 0x4c77e3d0, 0x763f3ebb, 0x3f7f3e8f, 0xfdc53cc6, + 0xf02bdff7, 0x0ee3f3eb, 0x7f1ff3e9, 0x242ccf70, 0xbbd93ac3, 0xebcae301, + 0xee9938fe, 0xf764fa51, 0x5f38112b, 0x7354fe8b, 0xd08fed10, 0x479807f8, + 0xef73f509, 0x8f7efcb3, 0x8620e2cb, 0x3edac758, 0x3078523f, 0xde642cdd, + 0x516f7883, 0x58cffd68, 0xe0bc2cfb, 0x8a7efb44, 0xedd5eed6, 0xe45ce91b, + 0xf7edc5d7, 0x1736b7db, 0x5b9fb79d, 0xd1aecbca, 0xeeb0dfbe, 0xc7a464f0, + 0x24490fb9, 0x3afee797, 0xcdd200eb, 0x4db79d89, 0x055674a5, 0x8bf343e1, + 0x6ddf17cd, 0xfeb29472, 0x778c60fd, 0x12115aab, 0x242eb82f, 0x5f4da48e, + 0xbecf7f3e, 0x73bee1bf, 0xed2b659d, 0xff1e5fd3, 0xda2dfbe6, 0x613f0b43, + 0xf85927e4, 0x7d6697f4, 0xad571f39, 0xb7a68718, 0x14f5ef30, 0xaf0d75ef, + 0x1ff07aca, 0xc935ebe0, 0xe3f3579e, 0x6b95f406, 0x2a77f8da, 0x5ee799ea, + 0xec0a78bc, 0xc0387f7e, 0x30f40f33, 0x2e4067b4, 0x6c2ef8d3, 0xd47f248e, + 0xaab3bc3c, 0xebefef10, 0x7d79412a, 0xc9dd9761, 0x4aba5df7, 0xf31d7bf0, + 0x78714f21, 0xb4f095ac, 0x23f5c458, 0xf582b8dd, 0xcf3e9f08, 0xb41db95a, + 0x12a7bf18, 0xefc0f481, 0x0c79c1e7, 0xc618b7ae, 0xf51a2475, 0x99f79092, + 0x1a09f693, 0x5dfe266d, 0x9a5f3d8e, 0x7b35cb83, 0x3513b34c, 0x174fe93f, + 0xf4861ede, 0x657a146d, 0xcedf1adb, 0x079e3083, 0x46ebbf35, 0xdba7f12b, + 0xf0f769b7, 0x9c7132bb, 0xd3471b6d, 0xf8976fb8, 0x0cd90ef7, 0xbf0f768b, + 0xda11e317, 0x08bf7016, 0xfc853f7e, 0xc499b7e1, 0x7eedfc3d, 0x1edb9fd4, + 0xb67d254b, 0xf5fe1eff, 0xab9dfe56, 0x695f5c19, 0xef4098db, 0x9390431f, + 0x7e7dfee8, 0x31faff3f, 0x19e347a4, 0x1393d208, 0xa9fdfdc4, 0x104b4cae, + 0xf9fe9a5c, 0x52e7b245, 0xdb78d07e, 0x3a7602a2, 0x731753c7, 0x19fe7245, + 0x8002bf21, 0xf7e7f407, 0x5efa6e48, 0x3acf5695, 0x952fef96, 0x159eb994, + 0x5fefc8f5, 0xf6b19863, 0x78d38c06, 0xa4b6a0dc, 0xe5dfe106, 0xf7f1c4ca, + 0xe216b46c, 0xffdf693c, 0xf9c05e3d, 0x0a377e3a, 0x45a203e3, 0x0d63d1bb, + 0x8c3134ba, 0x33d7bfdf, 0xed7ffb89, 0x97f26e45, 0xbba6ee81, 0x534b43cf, + 0x26353b44, 0x0dd7dbf7, 0x17868f02, 0x59fdce56, 0xb697df3d, 0x145cb873, + 0x88f256bf, 0x3d6cfc95, 0xf368ee42, 0x4c547401, 0xb1f05872, 0xd9fa10a8, + 0xf4817488, 0x06a17483, 0x3e9e8fd3, 0xfdb8976e, 0x72e36ec3, 0x0e3bffb2, + 0xbffb9e62, 0xa1f400e3, 0xefe1c77d, 0xfe24fef8, 0xbb50879d, 0x50f71b45, + 0xc3d00b76, 0x838b6335, 0x03d085ea, 0x5fc57c53, 0x49311fb5, 0x977dd1b6, + 0x4e614b77, 0x16efd3d4, 0x5aeee4eb, 0x630cf046, 0x1bbbe24d, 0x8dddf17e, + 0x77b62b2e, 0x1f70005d, 0xb86f1eb4, 0x72c16164, 0xd28b0270, 0x925a27e5, + 0x3927f574, 0x37e57552, 0x95d68e26, 0x740b514f, 0x5f64eff9, 0x5dffabad, + 0xfe5d04e7, 0xba29d2a6, 0x335c33fa, 0x73177974, 0x3a4bf7d0, 0x5ed8f7c4, + 0x8681f717, 0x79bc65e2, 0x2755afff, 0xbd2f29e8, 0x677e2b7c, 0xfee47c6d, + 0x7f2153bb, 0xf2af4bef, 0x17fdb0fc, 0x2d8c1d52, 0x9e35e97d, 0x217fddcf, + 0xbff7f20d, 0xd7f3c1d4, 0xdb2efa32, 0xde752f03, 0x3f23cdea, 0x7e718fee, + 0x7a6a5d66, 0xf617d403, 0xdacab2e1, 0x9aed1954, 0x08f02319, 0x67ae4f54, + 0xf3f458c9, 0x883d57c6, 0xe1bd08df, 0xea23268b, 0xe58e4f29, 0xe39df5ef, + 0x1cefbffc, 0x2678efe7, 0x9bede707, 0x597ddaa6, 0xac351c65, 0xa2d7cf0c, + 0x9e316e7e, 0x0027dfe9, 0x60b929fe, 0x2f88d18c, 0x8851e798, 0xfea50b2f, + 0xfba50766, 0x3d29139b, 0x1ab2acd0, 0xe6c1e7c0, 0x350f4a6c, 0xdbf9e93b, + 0xbe94a5cd, 0xf4a2ecd3, 0x4a0ae6dd, 0x94dd9abb, 0xdd4ca04a, 0x59e3fc89, + 0xf2236ae7, 0x8df2af3e, 0x1b3cd9ee, 0x963cdae3, 0xbdfd0ef4, 0xc0c67d5e, + 0xf457ba56, 0xe8af769c, 0x9fd4541f, 0x442d8a5b, 0x4ba052e7, 0xbe3afe45, + 0xce5be788, 0x9718a975, 0x738a798f, 0x402f6a8f, 0x6f52d0b9, 0x9939e273, + 0x24fe7396, 0x9be3275c, 0x17b44e4c, 0x398103cb, 0xdbc7aeb8, 0xc51df44c, + 0xbf83f67d, 0x9c51fd15, 0xf8e7d3cf, 0xd67da3bd, 0xfa21d52e, 0xdfa076c1, + 0xe3079454, 0xfdd0b1ef, 0x9ae72ded, 0xfc6ebf68, 0x7efeb69d, 0x2d7e90a5, + 0x44efdd5f, 0x8cdfa829, 0x53be8cf3, 0xbaaafd84, 0xe932fd7e, 0xa4fce7cb, + 0x8945f41f, 0xbe4554fb, 0xc8f3cb1c, 0x66724b1f, 0x3197eabc, 0x99b8617e, + 0x5004d3f3, 0xf241ad2f, 0x3edbf356, 0xb38f9e7d, 0x10bfd9b7, 0xd0b953d7, + 0x2c4dca57, 0x6327be9b, 0xef3f2308, 0xba0bf924, 0x5ec97b5f, 0x476300a9, + 0x2deecdca, 0x9c2af764, 0xab58b0df, 0xd777eef8, 0xdea0e782, 0x7be2f17b, + 0x59bb89c3, 0x49e1f006, 0x2879158d, 0xf113dfd7, 0x9e49e15d, 0x37ef3863, + 0x327f01e7, 0x7dc66208, 0xe2708ad0, 0x599d7df7, 0xa57c6f74, 0xcf197d59, + 0x29789dd2, 0x32b3eb40, 0xefc62d52, 0xe9789e2a, 0xa827cf22, 0x1577e32f, + 0xadc0de1d, 0x26df49e5, 0xfd0a5d7e, 0x8459e28e, 0xace2beaf, 0xe7c23bee, + 0x0eb4aac7, 0xde03f6e3, 0xe14ebe50, 0x6213c8e7, 0x3e300a9a, 0xc5a9e59b, + 0x18c52f58, 0x7d6173a0, 0xfc15285f, 0x6220585c, 0x675f9066, 0xe83c876b, + 0x3b2f737d, 0xcc6c7cb9, 0x0d5cf1e0, 0xa50b1689, 0x9326e71d, 0x6771527f, + 0x32e9fda0, 0xffebe5e9, 0xcd759b01, 0x008000c3, 0x00000000, 0x00088b1f, + 0x00000000, 0x7dd5ff00, 0xd5547c79, 0x73b9f8bd, 0xc9332667, 0xb2164c24, + 0xb2130810, 0xc9c42010, 0x019612ca, 0x35161892, 0x18285a80, 0xcb211026, + 0x5f6c0164, 0x3066d2da, 0xa1a8a080, 0x9d82a2a2, 0xda282020, 0x0b060341, + 0x5c50883a, 0x5f45b11b, 0x2e25e55f, 0x0c49096c, 0x9efe8fea, 0xdfbefe7d, + 0x333739ef, 0xf5889277, 0x1bf1febd, 0xdce1ed3f, 0xbe59ee7b, 0xbe7bf7fb, + 0xefbbe4e7, 0xb19d37e0, 0xc61aad67, 0xdf8b19b2, 0x186c67a4, 0x598d9fc3, + 0x9902ffe0, 0x89b27752, 0x1cfd358c, 0xefe64c1e, 0xfa7ff0cd, 0x47a88d24, + 0xaad3c8ec, 0xbdb0dbda, 0x19b33df7, 0x04fbf798, 0x06c761ab, 0x0b2f18ad, + 0xae64ac5e, 0x58b18924, 0x99312b56, 0x91e668b1, 0xd5630258, 0x2f3461e9, + 0xb63045fa, 0x74d8c22b, 0x944bb43f, 0x4198d399, 0x19433325, 0xc1e3041b, + 0x8dd7d8fb, 0xc67886ae, 0x3de118f6, 0xe1a89a7c, 0x6f0d1ee5, 0x4e640faf, + 0x4047d403, 0x60f9419d, 0xfa6a7dba, 0x43c7ea50, 0xd287c8fd, 0xc58c4d6b, + 0x1f8d3730, 0x1f349cc5, 0xd670dda5, 0xd33ac46a, 0x8d1724f6, 0xac8a6c67, + 0xca945659, 0x8e0277d8, 0x759ef94a, 0x6856cdc6, 0x64ef55df, 0x9f79245f, + 0xd4850577, 0x7ade4cb9, 0xf26f7e35, 0x7d266efd, 0x555f7ca7, 0x117d8b37, + 0xe8f78b8e, 0x44aabc71, 0x8a95cd8d, 0xa537b1df, 0xaade7c0c, 0x7ef60a2f, + 0x90beae77, 0xbd73fbc6, 0xeb8fca8d, 0x3a17d88b, 0xbf5afec6, 0xd5bfca88, + 0xf9f9e9db, 0xdb2a32fa, 0xf9e96bea, 0x5475f5a7, 0x3824b9de, 0xd7fd0ecb, + 0x5f67acb4, 0xbfd83818, 0xb955ff83, 0x9f36f675, 0x6c19b9fa, 0x095775c0, + 0x3f173a3a, 0xca4dfbf0, 0x9f1c69fb, 0xd73377dd, 0x4d97c06e, 0xc39836cf, + 0xd61fe3fa, 0x75f5c467, 0x6e45b307, 0x2cfed380, 0xb3ac3e40, 0x57d7863b, + 0xb7547559, 0xfc0ed869, 0x9e967f7e, 0x534a3ff7, 0x616def86, 0xc973dfbc, + 0xdcf98750, 0xddc6713a, 0x245b2708, 0xd6f0cf3c, 0xefe58dcf, 0x73f8c36d, + 0xfbcabe65, 0x1a66e9a9, 0xb77bc147, 0x254fc60e, 0x95fea77a, 0x48e59ff6, + 0x7b7fbe34, 0xd0a6a257, 0xde3c0035, 0x10f5f2b6, 0x9c3c005f, 0x3ef107c8, + 0x216d517c, 0x50e850be, 0x74eabfa1, 0x18977d0d, 0x083ce820, 0xf88c20f8, + 0x8d8bbe80, 0x08903e02, 0xeb06362e, 0x7e0923d9, 0x2807e7f1, 0x7e5e190d, + 0xa140f850, 0x33e058f7, 0x8ebbcc29, 0xaaf47ea9, 0xf95b0f94, 0x83235bba, + 0x3d78467f, 0x093333a6, 0x712203db, 0xf7de9a5e, 0x467f2097, 0xa01a5b06, + 0x4cfbfcbb, 0xfa01aeb5, 0xe7e8a3f9, 0x9143c347, 0xa3c0830b, 0xbcf41c1f, + 0x40e167fc, 0xedfa0e72, 0x401dfa41, 0x155b356e, 0xf7e9c5b9, 0x45edab3d, + 0xc96ea3a4, 0x408695a8, 0xe3f4e469, 0x59fdfebf, 0x1d0a1d7c, 0x2a33a755, + 0x099d7163, 0xb29ee5fd, 0xae75be9e, 0x12ff2462, 0x7f73f903, 0xf2eb2b3c, + 0x5a6f7f91, 0x64f0bdb3, 0x866e9dcc, 0x4c3b867e, 0x91e3fbd6, 0xdf9c2d8e, + 0xde2c5e86, 0xbfebbcc6, 0x79a16acd, 0x8991a53d, 0x28b6981e, 0x73ef8171, + 0x3f365e49, 0xf81cfbd5, 0x9f01999b, 0x8803c73d, 0x561a3ddf, 0xb77c12f6, + 0xe49cfb17, 0xe046bf5d, 0xb65177b1, 0xd9e60ea6, 0xc9c98df5, 0x5872826e, + 0xbe0979cf, 0x63a1daef, 0x275278ce, 0xc648a4f3, 0x831d06ee, 0x1eb3aa7a, + 0x63005384, 0x3ea1ea57, 0xbfb9da1a, 0x3ac12f3c, 0x99909e6a, 0x3f294001, + 0x489df5f1, 0xeb8f2b4f, 0x7df001cc, 0xce478ec3, 0x685e3d20, 0x19f02c96, + 0xe5866aeb, 0xedaafb43, 0xb4232ec1, 0xb63a802f, 0x765fb55f, 0xceae2459, + 0x10e78c18, 0xac617de3, 0x18d2c51e, 0xcfc4f59b, 0x95f708b4, 0x828b124d, + 0x58ee4f7e, 0xea063a7b, 0xd64a7617, 0x60d76800, 0xf38dd90c, 0xeab7902f, + 0x8af3c187, 0x61dcfe26, 0x852cb82a, 0xb300fd40, 0x8a9c607a, 0x2756c143, + 0xbaedc1aa, 0xbc52db4f, 0xa76cb672, 0xdcce5eba, 0x8a83a47a, 0x8ee7ea3d, + 0x91f75083, 0x06b0ffcf, 0x9a405c47, 0xbfd2c318, 0x0f6ebc43, 0x27d6a543, + 0x0ee9fddf, 0xd1c93bd5, 0x336e5c35, 0x02e455f6, 0xf8f95ba0, 0x9a9f71d7, + 0xa8be7d78, 0xeafd43b7, 0x0a2f1cd7, 0xd8c5aa5c, 0x96586357, 0x7d59d61b, + 0xc27668dc, 0x7e8fab3a, 0xff00c216, 0xb76d8135, 0x2abeff12, 0x9c02f79b, + 0x4ec8b4b6, 0x31d56f84, 0x801a33e3, 0x0fe1f56f, 0x846096f4, 0x0602eafb, + 0x9cccdffd, 0x48a9cc9b, 0x4ad61a27, 0xc7aad474, 0xb3d6cce7, 0x3ae9fb12, + 0x1da3346a, 0x47eafd50, 0xfd6097a7, 0x888cc4b0, 0x446d11c7, 0x409f2b27, + 0xcd29a586, 0x74bc7293, 0x115e2322, 0xae21eecf, 0x2ae7f800, 0x19e23bc4, + 0x47896ef0, 0xde11d13a, 0xe9901e57, 0x068ec37d, 0xe0bfb63d, 0xf055f8e2, + 0x23af205e, 0xe2ec573c, 0xc4f59cf8, 0x9102c7de, 0x18e80e0e, 0xbe12777e, + 0x53bfc61b, 0x38fe81d1, 0xaf6bbfef, 0xec3a42e4, 0x01a383a3, 0xf380747d, + 0x001d11bc, 0xbfde929f, 0x687c1d11, 0x7cd78465, 0x4f0bdbf9, 0x04d67cc1, + 0xef48adeb, 0x69218111, 0xc0889f38, 0x67ae1738, 0x53b9e568, 0x526e3011, + 0x312ccbf4, 0xb0e2b193, 0xd0d5aa8e, 0xfd8c416e, 0xe77f9466, 0x11b7bf67, + 0xce7677d1, 0x3f48e9f3, 0xbdb6ba0d, 0x6703c38f, 0x79159068, 0xfe7e3bb8, + 0x3d6057ce, 0x8f7f6179, 0xa8eb043b, 0x8cc02d79, 0x5d30b764, 0x19bf67d3, + 0x18aa4e80, 0xbde003c7, 0x755dd71d, 0x0013c02c, 0x7ce6b3e3, 0x47bcdf5b, + 0x74e77ea1, 0x29efaf9e, 0x31fd0d5e, 0x91c70fe8, 0x80eadc80, 0xfd8f2b94, + 0xbe0963f1, 0x6c112c93, 0x260dd629, 0x1cfd8c8f, 0xc1f675d4, 0xcc91fa03, + 0x473b51ef, 0x438228fa, 0x0b54d442, 0x2c352983, 0x84c0f666, 0x8c17d3ef, + 0x9d2ec5f4, 0xd98313d0, 0x0de88393, 0xce648ec5, 0x87c8a1e1, 0x67ce0b08, + 0x9aad6e5c, 0xea78e7c8, 0xc36b6fe7, 0x3deebc61, 0xfca5e112, 0x582bc818, + 0xa74bb96f, 0xa2d53b92, 0x3fa445fd, 0x6725db80, 0xec8d11ed, 0x96fe5f2b, + 0x0e38fd87, 0x91aa7ef0, 0xcc1e10ae, 0xf42058f3, 0x31d6e9d7, 0x260a97e4, + 0xb04b4de4, 0x401963d5, 0xda69ecbe, 0x3fbbe684, 0x9d82555d, 0xa7f08b89, + 0x7566eaaf, 0x20e9adbb, 0xdc91c677, 0xc01dff19, 0x4c09a9f7, 0xe829dfe0, + 0x1b487530, 0xb32f4fd0, 0xeefe410c, 0xb71287d3, 0x347914e7, 0xbcb0077a, + 0x5c63bf4f, 0x19f5a606, 0xb37edc77, 0x1dde3eaa, 0x537f6aad, 0x3ef5458b, + 0x7aa293dd, 0xaac6799f, 0x4eb767aa, 0xf09fb554, 0x9f554db1, 0x6aa856d4, + 0x48a97b9f, 0x854def55, 0xcf600cf5, 0xd1cde528, 0x6cfdaa92, 0xffd5518b, + 0x555094dc, 0xe024d7bd, 0xc54cec23, 0x9d357dfe, 0xa5fe8bdb, 0xac5bdf02, + 0xf2c071ea, 0x36dff824, 0x7cde3d51, 0x1fbc7a9b, 0xa07d978a, 0xc220b55f, + 0xc5be83f6, 0xc07ab9f2, 0x0711f803, 0xfea9a3eb, 0x4a85bd62, 0x3d0a7d77, + 0x4adea97f, 0x89fae6f5, 0x7e023f54, 0xc05bd609, 0x55f2c14f, 0xf9f04ff0, + 0x5a77e08d, 0x8c467b8c, 0xf718b6fb, 0x5de9c2c7, 0xa2fbdfd1, 0x4fec56bf, + 0x555f7de7, 0x0eb9ad98, 0xec233c7c, 0xfd0dbeb2, 0x056d3588, 0xbdef68b1, + 0xc0ddb325, 0x3aeecc37, 0xfa811f53, 0x9da19c2d, 0xde7a8ac4, 0x70fd60d1, + 0x0b7ef982, 0xdf0fb7ea, 0xcd5df7c7, 0xfce505b2, 0x859f2d1b, 0xd79d3f60, + 0x0b841841, 0xc77508bd, 0xdfaa25df, 0x502def0f, 0x04087d9f, 0x373be908, + 0x44cebbe9, 0x33d2eea5, 0x1e0e8b28, 0x2a9e23d2, 0xf7a21ff7, 0xab5f016f, + 0x526fefde, 0x7b6337bd, 0xaeb52b28, 0x95ef8410, 0x0f3fa516, 0x4a2477b5, + 0xafc3b436, 0x29b93fec, 0xa1f1f517, 0xe6197092, 0x83f0795f, 0x83df15c8, + 0x9e47ab8f, 0x503d454f, 0x33fa1475, 0x3aabfb79, 0x3e7513aa, 0xa1e2477f, + 0x1c543082, 0xe8062507, 0x91ac9d62, 0xd9575da1, 0x7281d7b2, 0x896532b6, + 0xba7c018e, 0x8ba172dd, 0xce900cec, 0x19996768, 0xd7dcebb7, 0xbf405642, + 0xdd4fbbaf, 0x1efc436a, 0xe382193b, 0x2acb3776, 0xc192ca7f, 0xe0c96bf1, + 0xf3675ffe, 0xbc0b10c9, 0xc93ee2df, 0xd0f5aee1, 0xf510dffa, 0xde09286e, + 0xbfad322d, 0x784cbafc, 0x971bfa50, 0xb37f5321, 0x7182925b, 0x7cdd675d, + 0x0b0cecbc, 0xb13b3ff5, 0xffe714a4, 0x6ce2f476, 0x1051ec99, 0xc7c728d4, + 0x728bddce, 0xdb2dd2b6, 0x6ef7f206, 0xd69efd16, 0x2b7d3a71, 0xc3d3e5f1, + 0x176fee00, 0x8e93a786, 0x67a6ed10, 0xa059bd70, 0x1ea227b7, 0x04b26b39, + 0x5bdf9d23, 0xf88c1098, 0x7c4b037d, 0xde8cf85e, 0x3345650e, 0xb9acef1f, + 0xeee90435, 0x8ca6736c, 0xdfd28ff6, 0x1f6e3124, 0xcde1f77d, 0x732a7849, + 0x1fb09935, 0xf3f8fe2f, 0xcd330cec, 0x07d76de3, 0x759da277, 0xec882536, + 0x467ad393, 0x41e575fe, 0x3d9f276e, 0x7084db16, 0xcecbc650, 0x774bfee0, + 0xdaf0868a, 0xed13a2d5, 0xaa65ec96, 0xef7fdc76, 0x8f9ea3dc, 0x10fed5d9, + 0x5d8ee7da, 0xccf59a32, 0xc48daba1, 0xa9dc5ff5, 0x80995f9e, 0x89e743b3, + 0x57a1f48c, 0xbe3ed1c7, 0x1f9d1131, 0x42c4f855, 0x78f054f8, 0xf3e64536, + 0xa1700e8a, 0xb438eabf, 0x7fbae897, 0x1e35a97c, 0x7fd889fd, 0xbe295833, + 0x5a7f0374, 0xfc7c1bb1, 0xa3fe862d, 0x5b2130ae, 0x1f6bca33, 0xadb7489c, + 0x3f46c8ce, 0xccfc88ac, 0x5bec0cb3, 0xed0ab318, 0x972821eb, 0x8e18f6ff, + 0x760cdbdb, 0x655b8c25, 0x39f15a38, 0x15af69d0, 0xdde60518, 0x12e753bb, + 0xed0990fe, 0xcec295dc, 0xe7b168bd, 0xab7fa0c8, 0x7d686bd6, 0xcbb2838e, + 0x28f18f18, 0x1eaef72e, 0xe90dbf8a, 0x364671d5, 0xcb347fa3, 0x94f0ff1d, + 0x64efd22c, 0xb9bb56af, 0x5fbd5c9d, 0xb158bb22, 0x1d84aa43, 0xc1d84172, + 0x70f7d617, 0xc4b8f8fb, 0x0f76811e, 0x023d8204, 0x9d4aaef3, 0x956d7643, + 0x2c5375bc, 0x876ab7f4, 0x3f286eda, 0x46cf4276, 0x7aa39d91, 0x5d5fb95e, + 0xebab72af, 0x44f8bf8a, 0x337f9f46, 0x7c9bfd06, 0xf2144a79, 0x57888bc3, + 0xefe173a4, 0x8d6f1dac, 0xa2dfbe42, 0xe251ccb5, 0x9aaf0812, 0xe3972fe3, + 0x408e5dbc, 0x751ff92b, 0x76b8207f, 0x9afdc57f, 0xeb4668ee, 0xbe1c66ef, + 0xce9c2ddd, 0xcb92746b, 0xaea3df80, 0x920cfec0, 0xeabc3d6b, 0x9086f676, + 0x10ac627c, 0x62cd62f9, 0x00dabfee, 0xae1768fc, 0x5fc9f215, 0xb6d34eaf, + 0x723ea1c9, 0xb70664e2, 0xccf4f353, 0x6d6cfa8e, 0xdbf495b0, 0xd7b70348, + 0xbdb81a47, 0xb3db523e, 0x607fc71e, 0x17b96498, 0x06913eba, 0xd5eb0e1a, + 0x89d22b26, 0x45a25d14, 0xac303c78, 0x3ef48b44, 0x414eecd2, 0xe7a94ebf, + 0xaf54fbe1, 0xb260507d, 0x3d9c716b, 0x93479231, 0xcc4f8de6, 0xa1759ad7, + 0xb195fa3e, 0x995ed4f5, 0xaa24481f, 0x67e7cbff, 0xbc99f986, 0x0f7c03f3, + 0x65afefc1, 0x886ec959, 0x9c3a0f9b, 0xc92d42e4, 0x9d9e0505, 0x8079ef40, + 0x21198c2b, 0x9e7638dd, 0x8ab2ff20, 0xefc26eb5, 0x3af8420a, 0x583d700a, + 0x45e5e40f, 0x3252bf21, 0x6596de39, 0x7d87edaa, 0xc84bb699, 0x8b331bb7, + 0x97ccb03a, 0xeb09cc4d, 0x4c9ef35b, 0xdcbf9d7e, 0x4f44e787, 0x510f80d7, + 0x2b55ddfe, 0x76551399, 0x1aafe71a, 0x8f8fa8fe, 0x867bdf2a, 0x6d3984f8, + 0xbef029ad, 0x5efe718c, 0x27346756, 0x0d45f0fa, 0xfbda1bf2, 0x0e5ff045, + 0xaff809c6, 0x0f3e5ccc, 0x5d7b05fd, 0xbafd19a4, 0x8f53b91a, 0xcb3fcffe, + 0xea2d3577, 0xe9c8c7ba, 0x912c13df, 0xa994149f, 0xc138c7e6, 0xc9764d1f, + 0xe9a87a85, 0xe78f2d5b, 0x7e28952d, 0x443c0777, 0xd87e8e3f, 0x0b866cae, + 0x501de6f5, 0x6d8e7f45, 0xa5fe208f, 0xdb9eb097, 0xd0efbac5, 0x5ca04e7a, + 0xc773a539, 0x54e93c63, 0xfd8ac195, 0x0860662f, 0xca5bbc81, 0x173ca95a, + 0x43d87d54, 0x20473b9d, 0x0f647ddd, 0xd35678a0, 0x28c1dd86, 0x06d8d3df, + 0x341485f3, 0xeffed836, 0x73b70732, 0x05d8a080, 0x1f144f05, 0x00ba246b, + 0xe90a397b, 0x363ff013, 0x0097ea13, 0xfd19d137, 0xcbfcafbf, 0x5fc410e1, + 0xdf2f3dc7, 0xfe8613f9, 0x51f90f57, 0x75ebb515, 0x53903838, 0x178e4a6b, + 0x15de0aaf, 0xd5e1f5bc, 0xe2f9ff02, 0x1c34d615, 0xce7724e1, 0x3bf4b927, + 0xbdfea199, 0xb8155e11, 0x59f8174f, 0x2fcb9475, 0x782b7c7f, 0x117309f8, + 0xeeef413c, 0x00b13c24, 0xf4fe9792, 0x017c2370, 0x57c52e61, 0xc80222b3, + 0x70d58d0f, 0x52bb1a79, 0x12e578a2, 0x06de3f66, 0x7f419de5, 0x0bbd11d3, + 0x78152dbc, 0x6eb988fb, 0xdfff8949, 0xccbedbc3, 0x4399e5a2, 0x3fadf3fb, + 0x97c60e9f, 0x4ff58b0e, 0x3174be8a, 0x7e3f47e4, 0x3ed7e3f6, 0x3fe15a3c, + 0xebda3c1f, 0xfb2f8842, 0xfc1f2df0, 0xff117a61, 0x16ac7181, 0xff89e5c9, + 0xc12afc01, 0x4e9f0042, 0xf0553e3f, 0xb065c0a6, 0xcc27e0b8, 0xd12cca73, + 0xe3e70abe, 0xf6b8079f, 0x157dde4a, 0x25c4ff65, 0xf97fa4e4, 0xb84bd809, + 0xca7f755f, 0x6768a1d9, 0xfd2bd39e, 0x0f185d18, 0xeb7d64fc, 0xfdf0d588, + 0x79783327, 0x9f4bed0e, 0xc7902dba, 0x09893f25, 0x3e9c2270, 0x44ccc691, + 0xf489f33d, 0x7af2b76f, 0xf582de94, 0xcd3351c5, 0x53a73f50, 0x8af798e2, + 0xca8b83f8, 0xc84f164f, 0x7b1276a3, 0x9161e113, 0x238d1158, 0x30856149, + 0x967e4f9f, 0x13fb8194, 0x991afb7d, 0x507f0edc, 0xee2fa3ac, 0xe2890bff, + 0x3550cbfe, 0xccc4fee1, 0xc1470bc7, 0x4cbff3f3, 0xd37da748, 0x51f1ea35, + 0xbc53c7ef, 0x33f51b74, 0xae8f7aed, 0xf5bf47c4, 0x2fbcdbe9, 0x6cd2f3f9, + 0x9949d20d, 0x6c2da1c0, 0x5dcff70c, 0x7f504309, 0xf7acfa29, 0xdf26cbcc, + 0x1165ee78, 0x8fabeeff, 0x57ce3079, 0xf7d89e1f, 0x53f63240, 0x59a677a6, + 0xa6a5f9e1, 0x6ed0e2a7, 0x5f77db29, 0xfbd3d932, 0x5fa324b6, 0x81fbb654, + 0x83d51b64, 0x6997e4ec, 0x5e3bbaf9, 0xfdccf498, 0xbc0dfa3e, 0x52ff9a1f, + 0xd47c89c3, 0x5dc673db, 0x07fb88dd, 0x2894bf49, 0x6b1777fe, 0xb67a88dd, + 0x15f38538, 0xf9206edb, 0x7ed1fd0f, 0xb731deed, 0xf07941ec, 0xba67ca76, + 0x21776852, 0x15fd4b53, 0x28d6d733, 0x966dfb8c, 0x6de7ee28, 0x7ff6823f, + 0xfa48364b, 0xa3d408e8, 0xafe8e9a1, 0x250cc85e, 0x9cdf2eb8, 0x179f1a7e, + 0xe7cfe3af, 0xcf9ab804, 0xeb8f3f62, 0x242d7bad, 0xfee14687, 0x0bff3285, + 0xdfae7a99, 0x47e44ab7, 0x3d24e328, 0xbbe4d916, 0xdc990bce, 0x3fee601e, + 0x4db83c91, 0xbade65e0, 0x868cde0f, 0xec43ad7e, 0xde4f289d, 0xa242f47f, + 0xf41c6187, 0x79d22a72, 0x64fede92, 0x777bae39, 0xb349c500, 0x28e562d2, + 0xcf719f68, 0x5cb0478c, 0xc9e4aeb6, 0x3bc39472, 0x29ffe40c, 0x59235bf3, + 0x4fa72835, 0x3964fd36, 0xa3d2edc2, 0xd7ffb206, 0x628e8d34, 0x52a9f003, + 0xc7f80b3e, 0xf5038d0d, 0xaf9f2a06, 0xd00b3337, 0xd1f50bc3, 0xbd7dff54, + 0x88b64a85, 0x331ad7d3, 0xf5834f97, 0x883d7997, 0xce2ec059, 0x16646cda, + 0x86775390, 0x60b202da, 0xab63499d, 0xeb116f76, 0xd3ef824a, 0x10b3f19d, + 0x565b590e, 0xf9d3469f, 0xe08ea65a, 0xcdd9cef5, 0x57ac2871, 0xba7f6bad, + 0xcb4fde1c, 0xc167322a, 0x2fcec373, 0xf2714e29, 0x08c57de8, 0x01ddb2ef, + 0xdd627d7c, 0x8e4d1e97, 0xcbe3127a, 0x6e28e96f, 0xfdb3b350, 0xae502de9, + 0xef5abad8, 0x743fef4b, 0x7c5921bd, 0xabe2373e, 0xcff0e0c1, 0x7103d5f3, + 0x81bb3fc4, 0x3c7f52af, 0x5bacd55f, 0xcd2bf04f, 0x70809a2a, 0xc673a4bb, + 0x1a5d3f21, 0xdce89533, 0xf8225c79, 0xcfbc722b, 0x7ee2ceaf, 0xbdc6a575, + 0x57bc4a75, 0xb2cd7f8e, 0x8e27be08, 0xfb464c5e, 0xc596ebf9, 0x23eebbdf, + 0x68cf6eb0, 0xa819d78c, 0xa39f7ff4, 0x615827b7, 0x6e1a397d, 0x5fbffb37, + 0xffc4a596, 0xfe029e79, 0x10edfe30, 0x98f40ffa, 0xc7cc0873, 0x04f24c71, + 0xbb3ea1a6, 0xfd16b2f9, 0x3f3ff046, 0xe02fb5f5, 0x3e8fa9f7, 0x37be6c1f, + 0x9fb1ab2a, 0x9ddcaf24, 0x7986b1f0, 0xa4f6f47c, 0xf1e640b6, 0xcfcfb719, + 0xda7a6781, 0xb9218a77, 0x62d37880, 0x98e8ef7c, 0xacbf58dd, 0x3aec78e7, + 0x8f14f602, 0xc7393107, 0x47cbcebb, 0xce50d23b, 0xfab7affa, 0x0fa20ed5, + 0x5f7dcb47, 0xd9feb44a, 0x3769b597, 0x7d89ff5e, 0xbf88691d, 0x1cb6bacb, + 0xf4badbf4, 0x8788696d, 0x79703fea, 0x41c2cffe, 0x19be5e79, 0x5e7c0216, + 0x4e88192d, 0x8a4ee5f2, 0xe19d743f, 0xa3ea87f1, 0xed3c90cf, 0x40e3c63d, + 0x82d69a35, 0xd49b8c28, 0x79469fb6, 0xfdcd1bd6, 0x86dfe831, 0x20929b70, + 0x27b6a0f4, 0xb5c83e6e, 0x03d1f5df, 0x212f23f7, 0x7ec68eff, 0x03940edc, + 0xa1882d2c, 0xf905715d, 0xd7179e19, 0x3a426fc5, 0x8a1ae4bf, 0x4ef62c11, + 0x53557fda, 0x20f5f0dc, 0x0f764cb3, 0x5fc1f53c, 0x325c3adf, 0x8a62384f, + 0x6cc414fd, 0xf46aed3e, 0x6ec8db96, 0x13ef9b7e, 0xfce58cd6, 0xfce55ec4, + 0x84e1b554, 0xbfa7da3e, 0x293f0407, 0xd79ce476, 0xf2f88bff, 0x01db74a1, + 0x28418794, 0xe8bfb10b, 0x12492e21, 0xfbbc72ed, 0x2263a6a2, 0xd328507e, + 0x99169afb, 0x8b21fee1, 0x86fca60e, 0x45a8d642, 0x730e7b3b, 0x45f9e14f, + 0xc2e50f6d, 0xcbafb9fb, 0xf233f799, 0xbd9f68b7, 0xb89ed020, 0x8d23ed06, + 0xceeae024, 0xcfa3ef9a, 0x3d71662e, 0x48964535, 0x04c4f58f, 0x7b329d91, + 0x9c52d551, 0x916ed2af, 0x7e83b789, 0xae62cec8, 0xdfdc349e, 0x349e9e65, + 0xda55f7dc, 0x507af9dd, 0xe645e92d, 0x67d3bace, 0xcf22eb9c, 0xd3ee1ae6, + 0x88d49d03, 0xf97ce0fd, 0x6ed0c7db, 0xef9c735f, 0xc4d39e83, 0x3941a47f, + 0xbc46700e, 0x6d5e0076, 0xccec7fa8, 0x19fe4366, 0xfc85d43f, 0xc482f353, + 0x3a6f18b4, 0xe31bb01a, 0xb6bad551, 0x2de7a448, 0x23d17f2d, 0xfee0d73d, + 0x9efc78f0, 0x81bd3889, 0x998d78e4, 0x96c4fdf1, 0xbc611fd1, 0xd70ceab0, + 0x0fda55a2, 0x72800e28, 0x6cabc71b, 0xbf7e443e, 0xefc87983, 0xd3541c77, + 0xdf346f4d, 0x93e7f047, 0xc21659eb, 0xbd9f52bb, 0x9dc7f383, 0x7945ab32, + 0x77dc44c7, 0xd9147476, 0x84efde25, 0x6c7728bd, 0x7ba63b44, 0xa0956494, + 0xe740eeab, 0x9c8fb406, 0xe9aedcc9, 0xacf9ed7e, 0x5c5f2495, 0xaf310b59, + 0xb3bdd848, 0xcad36f37, 0x7d99f33e, 0xbb39c78c, 0x11d95903, 0x387dbbc2, + 0xf4b3e3e2, 0xf48bffa2, 0x79efadd7, 0x50e3173f, 0xf5971e1a, 0x110ac75f, + 0xe31b78cf, 0x79dea953, 0xe58d8dcf, 0x88b98cf2, 0xf86b4e8e, 0x90de4af8, + 0xb6517df2, 0x91dfeca4, 0x3a7a009f, 0x6bf6fbea, 0x54a89f70, 0x8a9513ec, + 0xb152a27d, 0xf62a544f, 0x3ec54a89, 0x27d8a951, 0x44fb152a, 0xa89f62a5, + 0x9513ec54, 0x7c227d8a, 0x954e36fe, 0xfb7f09f2, 0xd3d1ea24, 0xbcc36bc8, + 0x7e6173f5, 0xf6ea61f5, 0x7524c2e7, 0xed44987d, 0xf6ff6547, 0xe309a749, + 0x9f2166b0, 0x8768c12c, 0x727dc65d, 0x4786f7f0, 0xb3b253da, 0xa2e71eb1, + 0x47c2d7fd, 0xe53f208e, 0xbf262d85, 0x5afc17b6, 0xb2cb4794, 0x036537ed, + 0x999cce9c, 0xe48db895, 0xa9e291a4, 0x6e3a7ee7, 0xdf13c508, 0x861d3f02, + 0xb992919c, 0x33ea0b21, 0x242d0f90, 0x522a6e2f, 0x67e84cfc, 0x2c92b1d6, + 0x660f972d, 0x65f397b4, 0xb38e2947, 0x8998c626, 0x0ca3f872, 0x1f6ce4fb, + 0xb6182cba, 0xa2ed112a, 0x47cb3ad3, 0xbe761718, 0x57e863a7, 0xa543f129, + 0x198caedd, 0xd98eb885, 0x321b0929, 0x36607fb0, 0x3d367794, 0xb3f3883b, + 0x06a48269, 0x2d165f92, 0x814283ca, 0x6e1699f7, 0x16f47b1f, 0x7dc6186d, + 0x60446702, 0x8169c77e, 0xcf0233e7, 0xe33c0b6f, 0x125e5afe, 0x12c35fdf, + 0xf4b0d7f7, 0xc86b8bcf, 0x4d905a2a, 0xce27b572, 0x0e6eaf37, 0x3b9717f2, + 0xd4376871, 0x3ea9f88a, 0x979dcb9b, 0xf3168b33, 0x4fd4dcef, 0x75df88a5, + 0x95fbd4e8, 0xefde77ca, 0xe0bf7d19, 0x7dc4e626, 0xf70af676, 0xb070d93f, + 0xe0bea04b, 0x47922895, 0xec63a1b2, 0x0be7c0e7, 0xc03fb932, 0xede00e5e, + 0xc8d92da2, 0x7e220d27, 0x38d2e5db, 0x551f4075, 0x61c9ad61, 0x7f0587a8, + 0xff23f529, 0xaaa3f3cd, 0xe50ea032, 0xbebe241f, 0xc9ad05aa, 0x64bdf8a1, + 0x7cbc50d4, 0x567f7f37, 0x28d55ff0, 0x0f589fd1, 0x10e3b833, 0x5fc7dd1f, + 0xf50e5b89, 0x959e4dfb, 0x927bfe5c, 0x4f336e49, 0x7559e632, 0xccf3ee48, + 0x91e3f60a, 0x31b44b71, 0xd3f70f08, 0xc8ebbf58, 0x49da25f8, 0x79d0fef8, + 0xa1fbefb3, 0x8cc938ee, 0x7efe54f5, 0x43a7a1e8, 0xdd753ead, 0xbdf1e74b, + 0x4bf1defe, 0xdcfda0f2, 0x7a99d700, 0x73df9ba4, 0x70be32fa, 0xadc202f8, + 0xdfb728f2, 0xb870be67, 0xcfd425f3, 0x0f298387, 0x78ecf1e1, 0xd1c37b82, + 0xbd22b767, 0xfbe21d75, 0xfc1ff70b, 0xa2bfd3cb, 0xedb80176, 0xb3bafd02, + 0xfcb38c18, 0xc53f3bc8, 0xb906e771, 0xdafac2bf, 0x8f34899c, 0xaf9ce1b9, + 0x977272eb, 0x872e1138, 0xf239f85f, 0x6021dcdf, 0x9e7ce2d8, 0xa23c5237, + 0x7931e5e2, 0x0ae81718, 0xfec62d6e, 0xb00b9fab, 0xbc569d22, 0xf913351c, + 0x8f364f76, 0x6d8f97af, 0xab7d438c, 0xbec0f579, 0x3b60455f, 0xd533ed23, + 0xaf7b7184, 0x59ca6e42, 0x667bf84d, 0x74cde61f, 0xbed2301d, 0xb2c6396f, + 0x2fbe5ea0, 0xfe05f689, 0x8acf8ff0, 0xf2f90f11, 0xfcf87dce, 0x0d463dab, + 0xdeace1c2, 0xf22a6436, 0xf91d59e1, 0x5ea2e59d, 0xcf9c2e7e, 0x80ada827, + 0x18d117f0, 0x22b6fa87, 0xe2b717fc, 0x8dcae7bc, 0xc3dfa34f, 0xbda00d9e, + 0x0007cb8e, 0xe5ddf06e, 0xc40cbabd, 0x6081d772, 0x874bd22d, 0x24fc58d4, + 0xb797bff6, 0x123630eb, 0x477b9d3c, 0xda0f1c33, 0x1dc7d431, 0xf3d536d2, + 0x4d9f7bcb, 0xcaf4bf43, 0x3fc97373, 0xe157e855, 0x013d8a97, 0x9248bd2a, + 0x46f29220, 0x64eccff8, 0xd5f89f26, 0x744f2395, 0xdfbcc93d, 0xf3a8395f, + 0xe54601e8, 0xe6036c01, 0x50fc2b59, 0x21737b11, 0xd342afae, 0x4bf68c94, + 0x315b6679, 0x2365c5f2, 0xbb434433, 0xaade8477, 0x1f3f5e68, 0xe6c1e0ed, + 0xa3c85573, 0xfeb9a3af, 0xe8c5bafa, 0xf4e7ddf2, 0xcf56ff2f, 0x7926efcc, + 0x06d577eb, 0xf4af2d90, 0xedde8ef7, 0x3aad7f40, 0xf38fcb8c, 0xc820fed0, + 0xce310eb1, 0xfb753ab2, 0x7a30ecb6, 0x4b6fad5e, 0xf4a7fd46, 0x22b649ff, + 0x5192dad7, 0x377ff95e, 0x9412cd17, 0x244bcf23, 0xa59a2a47, 0x80443976, + 0xcf0bd234, 0x85d3830a, 0xe1034c79, 0xe0473a21, 0x45fafa01, 0x8aabe70e, + 0x119b4683, 0x6c0ca9fa, 0xc97b410b, 0x8216dc11, 0xabd75076, 0xd02ddb32, + 0x3ff4a117, 0x129e3bca, 0xeb772c97, 0xc681c66c, 0x9c60e583, 0x1bfe1563, + 0xce50f140, 0x659b9228, 0x1e34412d, 0x20e5b733, 0x54ed96dd, 0x34eb877f, + 0x5763f0fb, 0xbe9133cb, 0xce187afe, 0xed61e29b, 0xffdd37c4, 0xe90e34f8, + 0x36c342a0, 0x15e8fee0, 0x4df706f8, 0xbc0ccea1, 0x15aafb4e, 0x910298df, + 0xed7cae7e, 0x92ee3e20, 0x79ce48da, 0xf926cc8e, 0x236ba5d0, 0xe7387739, + 0x6d0f5e36, 0xe5b9462b, 0x7af3b1c9, 0x05b15b4c, 0xf58d3fde, 0x6413cc18, + 0x7fbc0764, 0xd412e564, 0x9e6573fb, 0xd19ec1bf, 0x889c7999, 0x80957bc3, + 0xcf9b6313, 0xa21f93d5, 0xf87ea0b3, 0x1fb28e53, 0x5faef7a4, 0x1753f2f6, + 0x8cd0bcb3, 0xa26659fc, 0x57d80fb8, 0x3b425f07, 0x15a47170, 0xe1fc43f3, + 0x466beca6, 0x257dfd84, 0x6515c9e2, 0x1433909f, 0xc8db51f7, 0x276a00cf, + 0x5afd543d, 0xdd9bf900, 0x287d9eba, 0xd946d6bf, 0x9e007373, 0x26eb7d0e, + 0x753b3934, 0xb431a76d, 0x8de9073e, 0xb7a708e4, 0x6867d4ae, 0x17d947df, + 0xc0f02b9d, 0x4269c9c0, 0x9e3890fa, 0xfcbcb64f, 0xae9bca2e, 0xd39204d6, + 0xb974fcfe, 0x941091e5, 0x7e831f1b, 0x03c4fa77, 0x96792e3e, 0x611610f2, + 0xcb9409fe, 0xd7d7a837, 0xf242edfb, 0x9f56d90b, 0xdb8f48e7, 0xb87f75d5, + 0x547a5d20, 0xb824e07c, 0x837e426f, 0x6cce57f9, 0xf43846ad, 0x5d4017d5, + 0xe1bfa9f6, 0xcf6bf757, 0xb0fdb88a, 0xfd0dff09, 0xce78463a, 0x02ff1f91, + 0x006e33cf, 0xc3f546bd, 0xaa0f9441, 0x56f40179, 0xa85bd704, 0x5a432a2f, + 0x75d57e29, 0x95f68038, 0x317a3def, 0xf40fd70e, 0xca9a7148, 0xa244afa3, + 0xb678ff7f, 0xfd03c685, 0x38f94918, 0xa2468f87, 0x773ca23f, 0xe2c9dc68, + 0xca1a43bc, 0x9579e50f, 0xf9c649ec, 0x69ad4a57, 0x3171fef8, 0xea06876f, + 0xbcc5d632, 0xecf7ce25, 0xde724ca8, 0x8bf76f1f, 0x0f90727c, 0xf2479469, + 0x281f8f2a, 0xc85ca0f2, 0x79f03795, 0xb37fe72a, 0x9f052fb2, 0x0fdf2396, + 0x390c2720, 0x96ac8e02, 0x729b3be2, 0xef95bcf8, 0x7f1e5fa9, 0x7fd5f7a2, + 0x951b48e8, 0xfa59df8a, 0xe4fb42f2, 0xbe578251, 0x26881ca0, 0x2eaf7039, + 0xf155d612, 0x806d64b4, 0xae97ca4f, 0x6ce6802f, 0x01757695, 0x4f30d5c5, + 0x5e7fd4d8, 0x0f1474fe, 0x2af1c173, 0xc553bec4, 0x74efbe3e, 0xedf7c745, + 0x39d0de40, 0xeb795585, 0xeeff900b, 0xfbd2a88e, 0xea37cbfa, 0x7576e57f, + 0xfaed557d, 0xf801a882, 0xdb6ea2bc, 0x7faca1e9, 0xa6f6e57f, 0xff4b4882, + 0xafbccae7, 0xce799518, 0x85f50dd4, 0x05f5a2c7, 0x655ca143, 0xe0f0b1f8, + 0x3472beeb, 0x177a83c0, 0x4ffb4be0, 0xaad7aed3, 0xea37ace2, 0x68b99caf, + 0xf9b0641f, 0xc90e97fb, 0x4ae30e73, 0x2f6bf80c, 0x8df019f1, 0x736378cf, + 0x6513e2fc, 0xeed12325, 0x9192f666, 0xff09f1be, 0x68f04f12, 0x49c54728, + 0xb161f025, 0x28780075, 0xe1ca3fed, 0x82b1d671, 0xadcd878e, 0x4625e27c, + 0x51cf9d71, 0xde760eae, 0xff90aae5, 0xcbbcf83f, 0xeede20ac, 0xf18cd1b8, + 0x7fe3ee9f, 0xf770f8a7, 0xbe22d346, 0x316260ef, 0xf474fef0, 0x71beddf8, + 0x702607e0, 0x71650438, 0x4526a77b, 0xa5f1fdf7, 0xf8bee0d4, 0xa91bd912, + 0xd2dfb441, 0xf48d72d5, 0x6cb1f75b, 0x748bee33, 0xc84cbab5, 0xf8ff356f, + 0x87a8913f, 0x417d8ebb, 0xdf5d70f9, 0xb93ca45e, 0xf15f222d, 0x6791168d, + 0xc6096ad6, 0x9f85dde7, 0xfbbb6015, 0x2f8de945, 0x5298f8f0, 0x12b37e2a, + 0x66fc5047, 0x2743a3f0, 0xe6bdfbc0, 0x68610f2d, 0x731a1985, 0x1f802e50, + 0xc3fa861d, 0x44b05f1b, 0xf18f140d, 0x26242f8d, 0x9602f8f1, 0xd4485f18, + 0xd602f8f1, 0x2580be31, 0x39f017c6, 0x8eb017c6, 0x63ac05f1, 0x18eb017c, + 0xe312c05f, 0x2bfcf80b, 0x1ba4ee71, 0xff1e378c, 0x5ffc9134, 0x0fef97bb, + 0xf7ce3daf, 0x4936d6b1, 0xe7862f94, 0xf60f504e, 0x166a1bcb, 0x6dee4379, + 0x73582fb4, 0xaa22b658, 0x338a7cf0, 0x7a87f300, 0xa85c614e, 0x5d6490e6, + 0x8be7c16f, 0x8e5b1e68, 0x14b47f65, 0x59d5ef9f, 0xd7c41635, 0xf71891d7, + 0x97b638aa, 0x517957e2, 0xe784f5c7, 0xb8c31283, 0xdc019deb, 0xe192ae4f, + 0xabed0669, 0x155d1d92, 0x4bfe4ad0, 0x5cc97ee5, 0x3c2fbbea, 0x13924bf1, + 0x9578de4a, 0x1d2e68db, 0xc9450f20, 0xb1f657d3, 0xac26f257, 0x472bc94a, + 0x3ec7c47b, 0xd7fb895a, 0x96fe5cf8, 0x8154c3ce, 0x0d2e1ba3, 0xb7e5f790, + 0xec715daf, 0xd658a6d0, 0xefbb7f7f, 0xbedfa3bc, 0x2209a2f6, 0x9f9d3cbf, + 0xb47c296b, 0x30c385f4, 0x00636f5e, 0xb2cb2bd9, 0xbe90cbed, 0x146ce94e, + 0xdc75397f, 0xe7d6fe48, 0xe2ab46db, 0x70f2f92f, 0xd1ac7f8a, 0x3fc7a449, + 0x3ddfb0ca, 0x566cf801, 0xbb8a0ae1, 0x260e8acc, 0x70e8567e, 0x2ad14657, + 0xbc66bf7c, 0xf95ee285, 0xd467ec01, 0x8327c89f, 0xbf2df892, 0xa0697241, + 0x74acc25e, 0x8019617e, 0x6749e893, 0x5f798cda, 0xabcf18cb, 0xcd6ae850, + 0x0aec8936, 0xe244400a, 0xe78727be, 0xfc7f63b2, 0xac4de63b, 0x7076e008, + 0x97ef86ac, 0xf3cfdec7, 0x7666ee6d, 0x055923ca, 0xd04b157a, 0xc1b5afb3, + 0xf0d07b73, 0x5be76e38, 0x92ffb0a2, 0x9f9475b7, 0x4b751f9c, 0x7df49db2, + 0x484fe51e, 0x77f2259e, 0x8e4fbee3, 0x4e27f3aa, 0x01fcb8e9, 0x75bf9278, + 0xe295e91a, 0xdf2a763e, 0x72a32fae, 0xef973a6a, 0xba2ae7fe, 0x0872bf8f, + 0x31afcfbf, 0x83fe1159, 0xfc0c4b9e, 0xb578f3fe, 0x562fbf22, 0x82d33673, + 0x64c6f8f0, 0x47e47845, 0x6b73a71d, 0x87ffa209, 0x21768bd2, 0x9842d81d, + 0xfdc7c713, 0x6f80469a, 0xc2482e01, 0x86dbba78, 0x8e7a7ee7, 0xe7ca664b, + 0xb74f27ee, 0xa2fcc46d, 0x8cc9449a, 0xc082db71, 0xe848fcc6, 0xbc5460bf, + 0x4d79e515, 0x76c78f0b, 0x20e9c941, 0xfc4b25d7, 0xc6246d5b, 0x3f1e39f1, + 0x27bbb74b, 0xcf9f7b64, 0x7dd47c15, 0x63cf1aec, 0x76bc71be, 0x64eff60f, + 0xd15eeb46, 0xdcc1d23f, 0x6e282371, 0xef51d0ab, 0x48dda8c1, 0xe04e6f47, + 0xd2e9697a, 0x4f68740f, 0x7f699cbc, 0x5c50e11d, 0x48c6e5fa, 0xf1c0e75a, + 0xdfff2532, 0xc8a65e3f, 0xde557ff1, 0xb5f5bbff, 0x5f5fbe54, 0xbd6b6547, + 0x9e83de93, 0x87e13738, 0x993f5bc5, 0x95bc4030, 0x48432c19, 0xf3bf02df, + 0x7c5fb6f8, 0xe35cf815, 0x8eb3e7c3, 0x8cdf2e85, 0xbd76c8f6, 0x7941a615, + 0x244d6bd7, 0x3ce22e17, 0x1559c7fa, 0x2e2899b8, 0x198ccbdb, 0x2999ff08, + 0xbc0d5a09, 0x41e052ff, 0xbf227389, 0x5f90fae0, 0xd17e44b0, 0x65f97926, + 0x3a581e97, 0x4e07db8b, 0x848c0fb2, 0x41eb4dd7, 0x057d409e, 0x49e4ab33, + 0x013c9fa7, 0x74a7e647, 0xcf18ed6e, 0x4ef252af, 0x3d714267, 0xe2f90063, + 0x4465f2e6, 0x8e00fba0, 0x903aa233, 0xcf819af2, 0x6d4ebe89, 0xa57b79e1, + 0x1dc688ac, 0x2084ce40, 0xf784563e, 0xda0a7f9c, 0x44c078af, 0x98a6ce76, + 0x13ff3995, 0xce29d339, 0xef5e3d0b, 0xe61cf8a9, 0xa9ce2792, 0x0a59e9e5, + 0x8135c3c5, 0xf2f907c4, 0x63f70956, 0xd2c5dcd7, 0x0179df11, 0xbce93b45, + 0xf939f03e, 0xae2211bd, 0x7f2d6dab, 0x2367ea16, 0x8fb8ad63, 0x08fa3c36, + 0xafcb6f9d, 0x39454c29, 0xd2359679, 0x18a0dd79, 0x1844d27b, 0xac2a6177, + 0xb3e5e35a, 0xdda0c2a8, 0x463e13f7, 0x17de2367, 0x630e5804, 0x6275219c, + 0x2b8c52e4, 0xc962182c, 0xea4338c6, 0x1ebce1c4, 0x592c3965, 0x5c89fdd1, + 0xf509379a, 0x73f1b19a, 0xe55afd1f, 0x6bd5550e, 0x3f1a625a, 0xc4a7ddf7, + 0xdd1e607f, 0x7ccb493c, 0x4c33c9f6, 0x311389f6, 0x9578501e, 0x87acf1fb, + 0x89d4e3f4, 0x7d0e1e5c, 0x9e907983, 0xd307667b, 0x78545f7e, 0xd9c63a6d, + 0x1b25aa58, 0x3b3d81db, 0x9ef7d70d, 0xfb1d36d5, 0xf6eb1589, 0xb6fd473f, + 0xad3c87d8, 0xb2c52fb1, 0xa5a9c420, 0x16571ae7, 0xdc68ef96, 0xe073e0f7, + 0x4fd8398b, 0x63e923c1, 0x1b1ea053, 0xf67ca6e0, 0xb9b6195d, 0x7489ce38, + 0xdf7c3cdb, 0xd62fde2f, 0xc229f307, 0x63f9fef7, 0x9aac5d0a, 0x4ca7f9c8, + 0x061a5394, 0x6ca04fbe, 0xdfde86a2, 0x5f30de68, 0x994bce3b, 0xc92c6b3f, + 0x7cc0f9c2, 0x301e704b, 0x3258e5df, 0x3cea9853, 0x757a7f72, 0x3a71798a, + 0xf958b905, 0x548b9739, 0xa15d6b26, 0xfb0c2f68, 0xe7142bb5, 0xc7a9ac3b, + 0x7e50e788, 0xa231ece7, 0x75bbf0dd, 0xfe7c463d, 0x13cf1b3b, 0xb9ffeff7, + 0x469cfc89, 0xfa1e94f2, 0x18fa247e, 0x84f41fe4, 0x5c96dda2, 0x39dea6f6, + 0x55c7ce8a, 0xdbb2ae7e, 0x8d7f4852, 0xf234b414, 0xf4861ad7, 0x4609f230, + 0x8bcb2a76, 0x0615f7a0, 0xbf15ffce, 0x748347be, 0xf305c634, 0xd1bfa1f6, + 0xeabdb43b, 0xfa1ea673, 0x0dc852ae, 0xef54d3b0, 0x27cf18ab, 0x11e4261d, + 0x414b8dda, 0xbd9554de, 0x67ca77f9, 0xfafceb70, 0xfa17bba3, 0x0dab29f2, + 0x2cdad7f6, 0x6aa8af94, 0xafc972b7, 0x5b5fa136, 0x9e9b74b6, 0x43d2e2fc, + 0x3874b09b, 0x3147d03e, 0xed552bb2, 0xd554aec1, 0x6fd3cdfb, 0x7cf7d51e, + 0x806a29b9, 0x9e0e8171, 0xe8513a41, 0x3dce94e0, 0x53d4fd06, 0x7e568155, + 0x1abdc2ce, 0x716ecbe5, 0xdf99fe3e, 0xe7e2ccce, 0xc05d39e6, 0x30ffcff7, + 0xf6a06a3a, 0x052c99ce, 0x6546e6f9, 0x24c3ca17, 0x52743c95, 0x304e72bc, + 0xe11ab9c9, 0x9a9755ff, 0xf8510ec9, 0x6eeb5aba, 0x22ed84df, 0x9bfe7982, + 0x0468e416, 0xb30d33ee, 0x4f63efde, 0x40939d9c, 0x0d91d7f9, 0xdbf60f6e, + 0xc5648b73, 0x105e71f8, 0x9af9ab97, 0x68b3c722, 0xfdf8685f, 0x7e50bb06, + 0xc14798c8, 0x9a983def, 0xd1c3e3ce, 0xe50a6f78, 0xe9b2582f, 0x47d8b8fc, + 0x75c5bedb, 0x7cfd19a8, 0x4ac4f5c9, 0x61de8b8c, 0xbb74f9a2, 0xac1d4e34, + 0x23287b67, 0x717dbdb9, 0x6e9de932, 0x3574b456, 0x028b3dda, 0x3dba7e29, + 0xee20f2d4, 0x1f2f6e97, 0x91fcf64b, 0xbefae6ff, 0x8ac1be67, 0x74f6dbf6, + 0xd75c7acb, 0xe85b5ff6, 0xde241ffd, 0x0e41f39f, 0xf9f3ed9f, 0x8797b73a, + 0xe0a65f91, 0x2d937b61, 0xb6ddf706, 0x473fdb44, 0xfb130fbc, 0xe1e3db8e, + 0x498f9439, 0xc6ef8b45, 0xf9f3c67e, 0x9c21f72a, 0xc1f63c5a, 0x1e9e1c7d, + 0x99aaffdc, 0xfb7e4c13, 0x39a189f2, 0xac55f012, 0xe03cdc16, 0xc3abdc03, + 0x45be7c79, 0xde17baeb, 0xfb8ad70f, 0xcec2b467, 0x3303ae85, 0x0f4dbda8, + 0x564792f5, 0xedda1b31, 0x412accb1, 0xcf0344fb, 0x18ef8217, 0x96b61896, + 0x3c601fd1, 0x84325e4e, 0xc5125ff7, 0x42ce785c, 0xc95faa8f, 0x4dbe07ab, + 0xff1472c4, 0xbe83243e, 0xf7f86a77, 0x23942d36, 0xdf489701, 0x48031b3d, + 0x37dc946f, 0x7984fc82, 0x76f2d533, 0xb79e24d1, 0x272794a3, 0xdbfc4459, + 0x74728d1a, 0x943186f9, 0x2c60d16f, 0xcc7f42aa, 0xc11042f9, 0x5dd364ab, + 0xfce364b7, 0x9bc70c5e, 0x5b95d83d, 0xfd20e50f, 0xf8b0df2c, 0xe7817f67, + 0x7a46fdf6, 0x1ec936de, 0xc6286931, 0x87c52cfd, 0x3bf2c1e1, 0x9f31ea4e, + 0x7f9eeed0, 0x6f2855f5, 0x7f7a1e75, 0xd6f9c032, 0x7f6a65db, 0xf37f732b, + 0x0deba457, 0x9c5b9c7c, 0xa1a36a5f, 0x48a65bbf, 0x8ddaee24, 0x7ff438e6, + 0x2d3e044b, 0xdd3db893, 0xf08b6460, 0x4d9289de, 0x0e319223, 0x29e60b79, + 0xef87200d, 0x90cfda52, 0x3bfda276, 0xbfcf1672, 0x8837da51, 0x9315dd7c, + 0x2719feb8, 0x323ea54a, 0xdd2fb781, 0x109ed01c, 0x33cea582, 0x7387ca1a, + 0xeb84de67, 0x158a379c, 0xffb840ec, 0xb4d3ef82, 0x22d0411b, 0x4f1def3d, + 0x9eb3b078, 0x7d70fbf6, 0xfad1c67b, 0xe39867da, 0x3e379f48, 0xdddc764e, + 0xdb8f2e66, 0xce71f067, 0x9182db9b, 0x1abc515e, 0xe45ed072, 0x1aea2fbf, + 0xed009a1e, 0xd033ac56, 0x1fbbfb79, 0x9e71485d, 0x7e65db15, 0xbe6b7eee, + 0x3cbcf7cd, 0x4f37ddd8, 0x7bb3b8c2, 0x3b6a23c6, 0xbe23f665, 0x0469027a, + 0xab74a6e9, 0xb2377444, 0x7cc7aac1, 0xe06d9ea6, 0x52fbc14f, 0xfd112793, + 0xd1ab52a7, 0x49c52f7a, 0xfca08f6c, 0xa42faaea, 0x700b7d92, 0x458e7986, + 0x8879e164, 0x11dbf6c9, 0x258d252e, 0x211c62ef, 0xfb4ed528, 0xefc12309, + 0x51f13f43, 0x00f36f41, 0x91ef74bc, 0xe3062db6, 0x1cf80146, 0xcc2f3be6, + 0x3a226c9c, 0x5fbc3236, 0x4e675da4, 0x6fb5f9c6, 0x3fd06a34, 0xa72f779c, + 0x8333e067, 0x83cf0336, 0xfbe440b1, 0xd2efd144, 0x26a2daf5, 0xf7070fa8, + 0xe90c3826, 0xf9e89d29, 0x38fb5cc3, 0x5fa5c784, 0x772889b3, 0xc6dd6c57, + 0x01e825e7, 0x773a4bec, 0x7c6f697f, 0x0a97da06, 0x3b987cfd, 0xf5df81d3, + 0x12edc1d1, 0x73d61fe1, 0x87f2ed06, 0xc1af9773, 0x13f3c2f5, 0x66f31f48, + 0x2baf287a, 0xcc30765f, 0x668dea8b, 0x97aa4e74, 0xddeefe71, 0xa8b925ac, + 0x7e4515c8, 0xf0d83d00, 0xdf05055e, 0x4d3f2aff, 0x1f004f91, 0x9c8a4392, + 0x4291e451, 0xf25c8a5f, 0x0062aba7, 0xfa0cb4f3, 0x229fe49e, 0x9a1d70f7, + 0x523caf0c, 0x3cdbacf0, 0x0513ec83, 0xe772f9cf, 0x1c20af0b, 0xdfe44cca, + 0x64c5c1f5, 0xe9c4b820, 0xf8048b59, 0x6b6d5869, 0xbe47cfbf, 0x9f53292f, + 0x56abbf87, 0x597e0e7d, 0xfc1cfa9d, 0x4f0fbad2, 0x20b05da1, 0xf10fbec6, + 0x1737fe77, 0xcf047d76, 0x2b9bf77f, 0xd93e3c49, 0xf45ef749, 0xf3140bae, + 0x5af3e368, 0x33bd27a7, 0xf8cbf852, 0x672cbc43, 0xe24b4f9c, 0xfd47df43, + 0x4fc457f9, 0x731bee12, 0xf8179cfc, 0x03f08e59, 0xc8d92fba, 0x4eedb6e3, + 0xcbb8e289, 0xdd3e0837, 0xe31fbeac, 0x16d618d3, 0x0fbde094, 0x275fd3e3, + 0x2b5f21c7, 0x37d861f7, 0xea31fb8b, 0x679f90ce, 0x7031fbc7, 0xeba9d6df, + 0xaa47edf4, 0x58ed4d3b, 0x8a9efa9b, 0x9e9b2ca0, 0xc78cbce2, 0xbca7969f, + 0x1b15f3c1, 0x0be63325, 0xa5e78a95, 0x39d5259b, 0x7126f7e7, 0x927035fb, + 0x6055ca96, 0x4de5f503, 0x9025c8fa, 0xbaee741b, 0xbf5d31b4, 0x2efe47d2, + 0xa457cf17, 0x9e54a868, 0x79e24e07, 0x6990ab3f, 0xc91cf1b2, 0x24ddfd28, + 0xafb42cef, 0x9e5fb4a4, 0xe309b192, 0xceb7cbad, 0xfc3e6088, 0x9f38eff8, + 0xccc7ec6c, 0xbd0063e7, 0xd5fe4c15, 0x2fbff280, 0x39ff153f, 0xfe4fe689, + 0xcf8bc556, 0xee2af8bf, 0x0047fcbf, 0x9b8aa1e9, 0xaa529e44, 0xe521672b, + 0xb873f0e1, 0x79ef02d5, 0x82127fcf, 0x669a9571, 0x950863c0, 0xaf5658ed, + 0x6978a32b, 0x22f815b5, 0x9d79ffac, 0x8ffc5f37, 0xe73fbe10, 0x4c60d58c, + 0x71627999, 0xf9bab6af, 0xa2df8a33, 0xa2ccecfd, 0x8ffce8fe, 0xd235f7ff, + 0x0e3c21b7, 0xc9f046d8, 0x2475fe3f, 0x35f0e3cd, 0x39ac77da, 0x3ed231be, + 0x9dfbbac0, 0x60f112eb, 0x61af5ec5, 0xfcc4bf5b, 0x85759a84, 0xb7885917, + 0x82efff7f, 0x46738b27, 0x3a04d813, 0xfc65a467, 0x3ff081bc, 0xdf495d7a, + 0xb35e779b, 0xefc79f83, 0x60865ad5, 0x1b37435e, 0x305a5fd8, 0xabe9eb99, + 0xc81857c0, 0xd3283eed, 0x41f7793e, 0x7d520fbe, 0x78d391f0, 0x1ef541af, + 0xcad9c289, 0x66eacfb9, 0xf57c1999, 0x8675e61b, 0xcacf3e0f, 0xbee983e7, + 0x64b772b2, 0xe9f30bdb, 0x0c865835, 0x4dcf99f5, 0x557d3993, 0xb073b806, + 0x49fe657f, 0xfcea2d93, 0xd08f63ea, 0xaed0093d, 0xdf97ec8b, 0x6f9e3107, + 0xce3ef3d0, 0x266763b3, 0xbb9407e5, 0xfed3550f, 0xca20c1cd, 0x53a2bbff, + 0x2b9617df, 0xcc9dcbc6, 0xcc0eb1ed, 0x5fefc73f, 0xc5bec994, 0x5e5f2279, + 0x63bfbbf1, 0x97ce64c6, 0xbf732633, 0x4fe082fa, 0xbbb97da5, 0xda11243d, + 0x90f96c5f, 0x7da2b9ca, 0x0d35a9b9, 0xe6c5e7f5, 0xe107ba20, 0x0553f362, + 0xaef1807f, 0x484467ba, 0x3c567c3e, 0xafed4759, 0x39f714ee, 0xb9c5c2b8, + 0xa7ad3740, 0x84ac60e3, 0xc8957276, 0x7e68eda3, 0x7c434439, 0x15e7e4ec, + 0x64bc6c7e, 0xc978bf51, 0x5e31d313, 0xc5536862, 0xfab7fe4b, 0x33cf16af, + 0x9c62454c, 0xafc8bd1e, 0xaa2bfba1, 0xb29dbccc, 0x937c559f, 0x7f7827e5, + 0xc7477b02, 0xf2dc3df1, 0xc559fa38, 0x78a70a7f, 0x259d1add, 0xbd5feb0a, + 0x8a0ef3cb, 0x895c8533, 0xc37ca36e, 0x476e78f6, 0xcc4b3638, 0x04ab7006, + 0x680272fa, 0xd9992e1d, 0x3279bea1, 0x803abff7, 0x9137f5fe, 0xc07ca0bc, + 0xe227e0f3, 0x97ce66bd, 0x638e3e78, 0xcf192794, 0xbc887773, 0x2798472c, + 0xedfa1c39, 0x58e27414, 0x44bca1e0, 0xdd8e9f05, 0xec4bca1e, 0xf8c97914, + 0x8e1be31e, 0x3daede0c, 0xe745dcde, 0x33070ee1, 0xaf355bb4, 0x561d1304, + 0xeddc6b3d, 0xd1fa0e7b, 0xee2edcc9, 0xe715bf44, 0xa7cf8fb3, 0xfa91a43c, + 0x5df414e9, 0xf348d81e, 0x97ee2f3b, 0x7af3d728, 0xd0d98ebb, 0xc039eacf, + 0x12bb8fef, 0xc7047ad3, 0x0c6072b9, 0xc7b7efe5, 0xd0b656bb, 0x57a79e7b, + 0x07805cf1, 0x40f975e7, 0x2ce39d30, 0xca0ecdfc, 0x13dde8d3, 0xf69c6120, + 0xe74650f2, 0x1def2ec7, 0xb2fb7a4a, 0xa1fda164, 0x53856fcb, 0x75f5157f, + 0x02b0ae74, 0x9fda04c4, 0xdda21650, 0x13ef7976, 0x50bfc871, 0x3b758cdf, + 0x25fe2c6b, 0x7e7ee9f2, 0xe795d60f, 0xef8c6bfe, 0xfa52b9be, 0xf82b3fef, + 0x161fde54, 0xe0b0ec72, 0xcd93a3e7, 0xc823ff3c, 0x5a28d8fd, 0x806fe71f, + 0xc007f933, 0xdb3f744f, 0x48d1f779, 0x78a9fa09, 0x7a86d825, 0x49e75dbe, + 0x10e08a7e, 0xfe3bfe44, 0xbcbc9fd0, 0x7bfc9c2f, 0x3f60e70c, 0xa78df797, + 0x5f25573c, 0x6cda1e6f, 0x04f1c784, 0x67797cdf, 0xdafbc21a, 0x67ca209e, + 0x826fb8ac, 0x64f7f286, 0xbc577f6e, 0xa89e62b8, 0xbbbf70db, 0x52bf97e2, + 0x39fb45e0, 0x43be7e4a, 0xfbaad1c8, 0x79e08772, 0x9927f606, 0x69af8df2, + 0x3fb8fe79, 0x42b9f45c, 0x45d91e8e, 0x3a00eb7c, 0x7ed387b7, 0xf2afcd05, + 0xae971e39, 0x38fb94dc, 0x75f7c7c9, 0x744fcf0c, 0xf1091fba, 0x908f7b85, + 0xadefde5b, 0xda12bed4, 0x09dfeff3, 0xd3ecf9a1, 0x7f0f79d1, 0xefe0fd7c, + 0xd47f939f, 0xb06e15f7, 0xa7c80603, 0x7f5ac6b9, 0x07281ffe, 0x4ead1a0e, + 0x9ff3ca7a, 0x95ee743b, 0x91989cfc, 0x284743e4, 0xf58bd7e7, 0x72ab0f3c, + 0x2987dcd3, 0x21767dee, 0xe55d0d9d, 0xe1df381a, 0x48cf946b, 0x21d6e157, + 0x805587c8, 0xf00fec0f, 0xb081f743, 0x7be8e93f, 0x287cf5ff, 0x1f1f7ae4, + 0x95cfc0be, 0x78e30c74, 0x347178e9, 0x50f69de9, 0x5f30d74e, 0x423b57f2, + 0x66894979, 0x73347f18, 0xe198e87a, 0x43bcff26, 0xbb65443a, 0x51577f8e, + 0xa424edc7, 0x73bfcc53, 0xe026cd20, 0x5b5b6efd, 0x7940eed1, 0xa541939c, + 0xe50c2027, 0x12cf3ab9, 0xbcfc98e8, 0xbea5725b, 0xc794243c, 0x8f0fd895, + 0x9e51e9df, 0xe7dd85da, 0x9efea838, 0x5cf8117e, 0xa91cf3a2, 0x471f62b9, + 0x725651e4, 0x9d2acf09, 0x5543e512, 0x8e5d586e, 0xbb595f74, 0x83f2096d, + 0x2d4a8eb2, 0xa97f442b, 0x3e69925d, 0x5b2fdfe0, 0x3c7fda90, 0xbc13be05, + 0x143e50e3, 0xb5e019e9, 0xa70b5cdc, 0x4236a823, 0xd20d8e7f, 0x5e271a56, + 0xfaf93ff1, 0xbee13814, 0x2b83e639, 0xd6c18171, 0xb073ccaf, 0xcb96dcf9, + 0xbc7b75e5, 0x8829e1e5, 0x9264f7ef, 0xcdbed727, 0x3df6121c, 0x767a1b76, + 0x60aee77d, 0x19734bfe, 0x9ae4878f, 0xf9877eb9, 0x77933ce1, 0xa6e355ea, + 0xc7d751ec, 0x53d7541e, 0xb4f5d59b, 0xf5baea63, 0x4f3d754d, 0x09c0ab8c, + 0x4f3c62fd, 0x2b9c5fb6, 0xcf18bf43, 0x8c5fa285, 0xb18bf475, 0x9f18bf44, + 0x758c5fa3, 0x8eb18bf4, 0x3465b17e, 0x44b18bf7, 0x3f9f18bf, 0xb5e5cb98, + 0x31c789a3, 0x87180f11, 0x7eb94764, 0x4bf11f83, 0x2e48e2f7, 0x5fdcb57f, + 0x254f2eec, 0xc8ddaf3b, 0x1c4a3ce3, 0x711fd953, 0x2dffd945, 0xb9e62877, + 0xa18a6eb6, 0x64b6ac7d, 0x5e6a0fb4, 0x3f606635, 0x09a30c8e, 0x1b6d11e3, + 0xf3426e2f, 0x7d946d64, 0xf257b61d, 0x4eeaab42, 0xd23da316, 0xa7f2deb6, + 0x147f1ce9, 0xd2e25117, 0x50d7a825, 0xc35f836e, 0x4356d7e3, 0x955e4f91, + 0x8fe6fe7f, 0xa9b4dbc9, 0xe091aaf8, 0x4f5d3bf4, 0xcffdca0c, 0xe2b6180e, + 0x71133ffc, 0x40c8b634, 0x77629376, 0x3c47e5f7, 0xf6bed128, 0xfa30dcae, + 0xd80cf7be, 0x57e803e3, 0x3d715ca5, 0xd78f7553, 0x8692ad8a, 0xb201a5ee, + 0x4e717d24, 0xb42978e6, 0x2b5a7e91, 0x877a38e6, 0x31ff3546, 0x3d1540ae, + 0xa61fdb8d, 0x0f778faa, 0xa9bfb553, 0x7dea9465, 0xeaac67ba, 0xebede97d, + 0xbdffa04f, 0xaaa66b70, 0xdfe435dd, 0x51b3d42c, 0x8b4b3f24, 0xbef2fd72, + 0xfccd3cc5, 0xd01d5ad9, 0x7b5fb40b, 0x43f48638, 0x5b17e829, 0x049fc8b8, + 0x392718b9, 0x6f1c9137, 0xf718ac92, 0x0ff4215e, 0xe3eb53ab, 0x8bcf2d32, + 0x47c61cf8, 0x3871d0fb, 0x5101ee8a, 0xccccafe8, 0x7819a16c, 0x0d35a24e, + 0xb7f2cbfd, 0x7a41c99e, 0xe29b92aa, 0xf75f40cc, 0x787dae48, 0xd84affc0, + 0xf049c8a1, 0xfed8233e, 0xa7e02e5e, 0xfbf64cf3, 0x9dce0113, 0x1f3a6507, + 0x44f3a71a, 0x74bc9866, 0x0733a717, 0x1a9bfe22, 0x186a7df9, 0xbcc392cf, + 0x18d4d1f4, 0xf268981e, 0x87a15bae, 0xf0cf7a91, 0x97aeb8b5, 0x8167648c, + 0xeafa4d5d, 0xec9919da, 0x9219b2b9, 0xb15eec93, 0xbb5ce54e, 0x85cf9eb2, + 0xb76ec87f, 0x23dd9d11, 0x398e77de, 0x75816691, 0xe25bea38, 0x9aeb9464, + 0xa062fb83, 0x7ecc297c, 0xaca9f909, 0xbc23e929, 0x2fe2a3e7, 0xb9bcc332, + 0x0acfb62f, 0xe7768499, 0x3ceb3a0b, 0xf8d7dfa8, 0xaf639d0c, 0xe8f4bad0, + 0x681d96a7, 0x378af3a2, 0x56f87b8b, 0x7f212fee, 0x25ab157d, 0x7292f3bf, + 0xa3c0479e, 0xd3b4a66c, 0x9a2ef30c, 0x996de5c2, 0x5f287fb8, 0x022a729e, + 0x4a5fb7d7, 0x1d1769a7, 0x73c097d2, 0x6f2e14cd, 0xf7a5f9fc, 0x43f985dd, + 0x96e50e31, 0x9e77dfac, 0x18cf0eff, 0xd7858fe2, 0xfdbca9e3, 0xc3f238fa, + 0x3bc0c2fe, 0xea91fd42, 0xcbbeffe7, 0x8f7addf3, 0xca50fbf1, 0x85889ef4, + 0x74d78788, 0xa02a8784, 0x7c19899f, 0x06726fdf, 0xae7d43ae, 0x482f26b2, + 0x988bef45, 0x7f411f0f, 0x1ea1e277, 0xf3edfa9f, 0x7fed5412, 0x3f38fb72, + 0xbef0c87e, 0x5935b927, 0xb55f7f95, 0xf7e169ce, 0x3f54cccd, 0xd11d7287, + 0xf7d51cd9, 0xb7816c55, 0x9ef9d21d, 0x78ce080f, 0xa7fd1d5e, 0x0f3f0d32, + 0x2edec8b4, 0x73d1b79e, 0x2f8a8858, 0x3f582647, 0xc7527ae2, 0xf8885dcf, + 0x77fc22f6, 0x127a40c2, 0x1dc62d10, 0x8478f322, 0xb4876d5d, 0x55e1e6fa, + 0x55517889, 0x55178f0a, 0xb8f55b39, 0xd7f0082f, 0xaa4802c6, 0x2c3ef91b, + 0x86c437b4, 0x8cbafaf1, 0x62b3f7fe, 0xfdf1d77f, 0xf904b919, 0xb57dffc5, + 0x1ab5e7b8, 0xa7143ce3, 0x7148bc2a, 0xd11c652a, 0xfea742bf, 0xfdfe7df9, + 0xc2c5363d, 0x3feca9cf, 0x2e1cf744, 0x72f7e22c, 0xf9f3dc38, 0xf47e273d, + 0x6bfdc8a6, 0x8bca1a65, 0x24f77deb, 0x996f5bd1, 0x61cfcad6, 0xaa5c3f7c, + 0xea1e3c6d, 0x612b874f, 0x6fde785d, 0x7564b365, 0xc21dbc49, 0xa7d21867, + 0x07627c1f, 0xaf029b80, 0xbdf9f83e, 0x98483ca7, 0x1f712ae7, 0xf8b83f4f, + 0xb38c53c3, 0x7df8ced2, 0x8b92cdd3, 0x2fd7e5e6, 0x8fcfe89b, 0xb3ff296b, + 0xccc4a777, 0xb1e18dd2, 0xb38f3ae0, 0xebe04c8c, 0x592c39ef, 0xf3bf6ed1, + 0xf79e96ba, 0xcf114fd1, 0x9e7dba2b, 0xe8fb5f9a, 0xcff388a9, 0xf923d71d, + 0x22ff00fd, 0x3d11baba, 0x8a29fb29, 0xd3f2f75c, 0x771724bd, 0xa1f9114e, + 0xe49b2cd9, 0xe7cc0fc3, 0xe1f22918, 0x998ef4fa, 0x32e313c3, 0xec507f18, + 0x683c3e85, 0xef7c432d, 0x3d012bed, 0xe4a4f78b, 0x7ce9c3cb, 0xffc45d87, + 0x176d3914, 0x90da6dfd, 0xb773caa0, 0x3c51d46f, 0x387d6e36, 0x33462595, + 0x592f7b9d, 0x7ea1172f, 0x544b74fc, 0xaba044e4, 0x22ea374f, 0x9f1741e6, + 0x0e2b22fe, 0x74ff53ef, 0x9f953e63, 0xe4580b6d, 0xca57271b, 0x549f4293, + 0xd263e6fd, 0xef35576b, 0xbe422c86, 0x043878db, 0x372a5753, 0x0663987e, + 0x64ce7e7d, 0xf6853b3f, 0x9f489b5d, 0x1a537333, 0x7b14c9c6, 0x7e6362a2, + 0xc77dea14, 0x1a7c9f7f, 0xbd7dbef5, 0xd0ed122e, 0x79e67fcb, 0xc8cfa0b4, + 0xee24b88e, 0x37b4bb83, 0x5c55ce88, 0xf70d9892, 0x13e5ca81, 0x7e956669, + 0x8e27763d, 0x8ca61ddf, 0x8d17daeb, 0x949d5ae3, 0x9f5f641f, 0xf8a06434, + 0xecd65289, 0x3eddf6e0, 0xe22bde25, 0xfdc5fbc2, 0xe3d768ff, 0xd7682d3d, + 0x7aed1d63, 0xc7aed12c, 0x9a2657e7, 0x7a1bbe39, 0xc94a3f28, 0x43b900af, + 0xa56b1179, 0x9dca2b40, 0x1dbe78b5, 0x50e7fef1, 0xfe0567ae, 0xb533e7fc, + 0x1f306c07, 0xdd7e9cfa, 0xadf37cc0, 0x5550b067, 0x4621967d, 0x1cdf3ed5, + 0x737f7aaf, 0xfbd518f4, 0x557496d9, 0x24ca6e7d, 0xac5bfb55, 0xdbf55433, + 0xb556ce26, 0xaf9b6f9f, 0x5c2c2faa, 0x477f6aac, 0xfdea8951, 0xab95164f, + 0xafb62fde, 0x9497d556, 0xfed542fd, 0xaaf5daae, 0xa66636f7, 0xf563ac3c, + 0xd79e5efc, 0x6b3cbdc4, 0xdd524bdf, 0x96653553, 0x78a076a6, 0x4e54cc7e, + 0xd9a76bb7, 0xf366a622, 0x0e91537b, 0x30be6047, 0xa9e8d3d0, 0x30f7f116, + 0x87dfca3c, 0xf1ba4189, 0x7effe76f, 0xd71bd04a, 0xdfc3802c, 0x8c5fdd4e, + 0x4ca6ffe7, 0x01332378, 0xde3b7fea, 0x6fb9ebc3, 0xea0a3cbc, 0x2c66a617, + 0x29be3cc3, 0x0d71bd37, 0xed7cafdf, 0x2faa629b, 0x7c6a6464, 0x6291fc75, + 0x653c7f3c, 0x56ada8fa, 0x3b212f1e, 0x457a3068, 0x7879e038, 0x1e960384, + 0x0dfe3e71, 0xca0107bc, 0x083dc537, 0x041ef1a7, 0x5a87e61d, 0xe2073df9, + 0xf177841e, 0xcc24841e, 0xb2a42d8f, 0x7083dc55, 0x95117eb6, 0xd3b7ae7f, + 0xcbeae777, 0xbeb8fca8, 0xb5ff9e96, 0xbfca8ebe, 0xf9e93bd5, 0x7c4aa9ac, + 0x9cf3c3c1, 0x6ae7a719, 0x16fcdee5, 0x6df37bbf, 0xfb2a8f5c, 0xacb50d89, + 0xb4f9082d, 0xc17a1b4d, 0x1c27dde0, 0xf3aaae5c, 0xdb86af3a, 0xe34a9d6e, + 0xbed3370f, 0x9e7e7890, 0x01911c2d, 0x9c7cfa78, 0xf7c476fd, 0x362b191d, + 0x31f9010e, 0x1d5adbfd, 0x065fcbd2, 0x3d1e8fc9, 0x73c1db95, 0x6316d9a7, + 0xfdc4d3bf, 0xfdc4d3a3, 0x6db4d3a3, 0x1a8f280d, 0xcc1666be, 0xac1139bb, + 0xb0d4f927, 0x38e74b45, 0xd518afa4, 0xaa3046a7, 0x2add7c37, 0x669dfca3, + 0x7e9346b6, 0xff257511, 0x1dbf6fa6, 0x35793e7f, 0x92b7feca, 0x55f79357, + 0x03b42cdb, 0x96f49aa6, 0x7afdbf00, 0x113ee7dc, 0x17994e7c, 0xf657979d, + 0xcd7cf7d5, 0x65535ee8, 0xa19a7cff, 0x06e31e35, 0x5831ef53, 0x9486f37d, + 0xabe9727d, 0x8cf51956, 0x8ca41792, 0x583bcca3, 0x7865fd0b, 0x99a67ef3, + 0x0f98e9dd, 0xa26550d1, 0x564f30fe, 0x6ced419f, 0x4ee77d32, 0xa98d7cc7, + 0x4995930e, 0x28f9fdde, 0x2d60eeb1, 0x57de675f, 0x984fca76, 0xb013f22a, + 0xef7f031f, 0x46a67ec4, 0x4f306278, 0x9ead6a77, 0x25dce5ee, 0x7c95fbf2, + 0xe41f6c01, 0x4f38c7c3, 0x1bf137ec, 0xedda2f98, 0x77c11b36, 0x27d399a1, + 0xd0ba88b3, 0x19e3ecbb, 0xbd459754, 0x09fcc028, 0x95df83ee, 0x7489df6a, + 0x484a5670, 0x25a917e2, 0x9fbe450c, 0xeff7ec2f, 0xa4269fa1, 0xfd39ffbb, + 0x87de38d8, 0xf9b38a33, 0x1f8291d3, 0xbc149e85, 0x0a57460f, 0x7be4f81d, + 0xf2fbde11, 0xfe7f44b7, 0x9d1836f4, 0xcd35f429, 0xf100e9c0, 0x0a39798c, + 0xb95f495d, 0x0e3d689b, 0x853fe903, 0xa2e9fcae, 0x3a715d3f, 0x8199f86d, + 0x574febfa, 0xb8407a5e, 0x6aba78fc, 0xce1ce995, 0xcb4f493f, 0x10c1587a, + 0xdd725578, 0xa1cb1a72, 0x11a3ede3, 0x8cd82bdf, 0x66312402, 0x79d3c796, + 0x7176bf7d, 0xff686ed8, 0xe7f4fe76, 0xbf7e5dff, 0x7d5213fe, 0x74259bbf, + 0x7777ffa5, 0x932f1bf7, 0x31de13f2, 0xd624f92a, 0x727da09f, 0x8effc2c6, + 0xa419e607, 0x8e427f63, 0xa4b5619f, 0x759cc177, 0x827938e2, 0xaea566a4, + 0xcf207f22, 0xbebef034, 0xe0a54e72, 0x380da2db, 0xb508828f, 0xd8473dbd, + 0xfc8b37eb, 0x7ee1c2ea, 0x266f53ef, 0xa24e7e3b, 0x34f079fa, 0xb3c78761, + 0x79f39478, 0xc7e7cacc, 0x9d1d92b6, 0x563bf827, 0x45824bd0, 0x6f005366, + 0x794eccf9, 0xe9766fdb, 0xcdefd86d, 0xcf71e78c, 0xe72a2e66, 0x73f50f32, + 0xac22280b, 0xdd18c6df, 0xf430eb4f, 0xa295e1c4, 0x3ffdb2d5, 0x3abd4ed1, + 0xfd1a3ec2, 0xedc207ea, 0x5c01a723, 0xbadd064f, 0x9bc606b4, 0x912b3995, + 0xf1e739ce, 0x186f5d73, 0x44dec812, 0x7985d47e, 0xe25bc3e5, 0x7ac9e11c, + 0x14f0ce7e, 0x3d04339e, 0x673c47fa, 0x2939f508, 0x577e19eb, 0x17e75160, + 0x35cfdf29, 0xf0da62cf, 0xdce3f5c1, 0x31c3a3b4, 0xd09de2ff, 0x7fb879d1, + 0x04e84ef0, 0x9de4b7ba, 0x2f0d28d0, 0x8e54f403, 0x2071257f, 0x77a1587b, + 0x340578ef, 0x567060de, 0x4f0feae0, 0x023fce05, 0x820673ae, 0x8ca9e8eb, + 0xc32efdff, 0x4718d5cb, 0x72e20aab, 0x304af6d5, 0x35d6fdc3, 0xca39f987, + 0x18c538cb, 0xe9c39fec, 0xa65cbaee, 0x2cfda4cd, 0x6579c227, 0xee7a24dd, + 0x7f63af1f, 0x9ff5419e, 0x08ae5a09, 0x79c52fb3, 0x92786674, 0x1763e2c1, + 0x60843677, 0x17d5e89e, 0x4bfa2b65, 0xd5b2d90e, 0x77df718a, 0xfcff9e64, + 0x6fba49ed, 0x1f09ed85, 0x18742fd0, 0xbf151c38, 0x117c6d30, 0x8fc2a5f1, + 0x458f4f0c, 0xe1a7ed7a, 0xf4027db8, 0x1919db4b, 0x3953db83, 0x41b1efe2, + 0x0ab7927b, 0xae3be0fe, 0x1c9fa1d7, 0x0fb19390, 0xf4ff9207, 0x7bb661db, + 0x2f9c61a6, 0x8ffca98f, 0x115ef3be, 0x58d38e1c, 0x9f18e3f2, 0x63a33bcc, + 0x8bdf782e, 0xa3ef8f8c, 0xef693ef9, 0x9d326b99, 0x58960c4b, 0xfb9d3c78, + 0x10127924, 0x1f1661ad, 0x04b46079, 0x1d0f8b32, 0xa984a507, 0x61d6c1ea, + 0x2643f6aa, 0x0fbd528e, 0xbd558db5, 0x50cc2f0f, 0x4d1687d5, 0x5a8fb556, + 0x8f555334, 0xb551cfb1, 0xa05b2d8f, 0x2af22baa, 0x23623f96, 0xfaaa7f6a, + 0x72dd647e, 0x6778fb55, 0x2cbdea85, 0xce566dee, 0x7e8a16b3, 0x51af3612, + 0x3dcdc3b5, 0x09f20e4d, 0x52153dff, 0xe3f30678, 0xe92b4d0a, 0xc6a4e67e, + 0x29e7aa5f, 0x4286d3cf, 0x2d45b379, 0xd5a3f2ff, 0x13a659f5, 0x9668ae74, + 0x63872d59, 0x7aaab56b, 0x379134f3, 0x28d2c695, 0xfc23717e, 0xf0aac7db, + 0xa0270fef, 0xdb07ab07, 0xe276fe83, 0xa15adebc, 0xf702fb45, 0x81d77c3b, + 0x70be1dfb, 0xdf0efdc0, 0xf877ee3a, 0x0efdc7b6, 0xdfb8f7df, 0xf33efbe1, + 0xd9ff1a8c, 0x4ffc6aad, 0x7f8d58f8, 0xc3072e85, 0x3536a4d3, 0x64bb307d, + 0x4f07be97, 0xf4d497b9, 0xe99f8fe3, 0x46854e60, 0xfa243e20, 0x163f583b, + 0x3d14575f, 0xf805f027, 0xde96fca1, 0x3f1cc1e1, 0x5bef7e1e, 0xb99919fe, + 0x7fcbbea0, 0x5fec439d, 0xd1ff9f21, 0xf28d1192, 0xfbe33a6b, 0x8d0e05ad, + 0xbfaf03d5, 0x3787a3f1, 0xc77fed13, 0xafc28bf6, 0x3e91e9c5, 0xd1a3ec7a, + 0x72108dce, 0x753fc957, 0xfcfc64ce, 0x3a652fc3, 0xc35e7c2f, 0xc5046bcf, + 0x57cc25d8, 0x4b5a965a, 0x45668beb, 0xbe625687, 0x7401ebd1, 0x48f14ccf, + 0x6a61af71, 0x9f7cf65b, 0x58e2c0fd, 0x9c648f9e, 0x2b48fc2e, 0x4d324bcf, + 0xb07afee7, 0xd2f94cd5, 0xb94ca925, 0x78ae3947, 0x5de3c23c, 0xc78468e3, + 0x07dd0d76, 0xe7e3a6d6, 0xf16f9d32, 0xbed120fb, 0x84727b45, 0xfe1ae7b0, + 0xf9c060dd, 0xf7f6ffff, 0xcf5962bf, 0x91df0813, 0xe43b8f12, 0xf7c51f4d, + 0xdf7c2c69, 0xd0bef8b1, 0xf1b76e26, 0xbf628478, 0x76dbf92b, 0x7efec741, + 0xf8371e81, 0xcdfa7e01, 0x4a0bd25a, 0x2fddb5fe, 0x13f15adf, 0x387fcefa, + 0x0dfaf2fd, 0xf151ff6a, 0xbc7b1413, 0x837aef2f, 0x38baef3a, 0xa7180d80, + 0xf73a6db9, 0xafe7fc9f, 0xfc7fcbcc, 0x5bbc9547, 0xc35eefd1, 0x96f9e7c0, + 0x297afa0a, 0xe98ee8ad, 0x3ad3ffd0, 0xe2abc7eb, 0x1a71f9ff, 0xb189bf82, + 0x9f1dde53, 0x868d52ff, 0xde291efe, 0xcf92f7db, 0x79d395b8, 0x19e2c89e, + 0x1907ae82, 0xd88878a7, 0x9e95fe3f, 0x641d2b9f, 0xdb3d68dc, 0xbcc07680, + 0xa5476099, 0x2adbdfe3, 0x7604da7a, 0x5a75d3c6, 0x4cd51f8a, 0x3399757f, + 0x648e7bd1, 0x882bf824, 0xd055b46f, 0x936cb9cf, 0x4f0f3e69, 0x4dbee267, + 0x3f73de45, 0x79f197b3, 0xf9e9d6f4, 0x4fe9fddf, 0xca57443f, 0xe755ffbc, + 0xf43a1401, 0x9fe28387, 0x3e77da3e, 0x44afeb88, 0xce56fa3f, 0xeb565863, + 0xe89b768a, 0xe621475c, 0xf9782995, 0x95cb8d87, 0xd80e0213, 0x60cae50e, + 0x7efffced, 0xf77660dd, 0x047cf0bf, 0xf3b07dc1, 0xf9f1835d, 0xfcbbe760, + 0x0e5fdbf9, 0x7e9dc3f8, 0x97bce03f, 0x4e451782, 0x62db58e8, 0xdfca5794, + 0x582fbea7, 0x855797cd, 0xf0547f7c, 0x1cc5bb65, 0x74bd91a9, 0xfca3f779, + 0xaa5ea4ef, 0x4142145b, 0xa5f82741, 0x669ceb3e, 0x0c9c8a2b, 0xd76f96ed, + 0xae0b26b1, 0x73f48cab, 0x1fdfd389, 0xb53b21ed, 0x7e64ab74, 0x3616f312, + 0x2aafec0f, 0xe2948df7, 0xef3017fd, 0xedd51bbb, 0xd57f0956, 0x3fe91f7f, + 0x6a3d0ba7, 0xabb25665, 0x72809e44, 0xfd1f7c0f, 0xd1e07b88, 0x847e452f, + 0x14ccf292, 0x5f705878, 0x075bd327, 0xa0a605b8, 0x1da0dd9e, 0x81500f30, + 0x067cff5b, 0x8ec1c79e, 0x512fc918, 0x313a19f2, 0xabf1019f, 0xf6891bec, + 0xfe994e9d, 0x73676d4e, 0x5fc3ed00, 0xe77bbcd5, 0x3ecf8b28, 0x29fdbf53, + 0x18798216, 0x7e7907bd, 0xf0fc60eb, 0xfdec00ff, 0x8000fdbe, 0x00008000, + 0x00088b1f, 0x00000000, 0x5ab5ff00, 0xf55c540b, 0x9deeff99, 0x181997b9, + 0x1e1085c2, 0x01032646, 0x43886683, 0x7d49361e, 0xda595e5c, 0x3cd41da2, + 0xc0ef0488, 0x11079090, 0xdd8b3c68, 0x121132ec, 0xa92b2631, 0x754d8944, + 0x7bab3548, 0x351a0ba2, 0x131dacb5, 0x58dd39a3, 0x9ebab5b3, 0xd8c4e2c6, + 0x3376e8f8, 0x744f76e2, 0xf7dfbabb, 0xcccdeffd, 0xcf6d3920, 0xce1ce59e, + 0xfcffef9f, 0xffefdfde, 0x1b5118bf, 0xaf8074c0, 0xaf86e7e8, 0xe7b6c6b7, + 0x802e19a6, 0xfcd94f4d, 0xc7b52f61, 0xf15d8a72, 0x03b74571, 0xdb78022c, + 0x6c74b865, 0x6ec36ddb, 0x86c0366d, 0xa8f3c22f, 0x6e83b3ad, 0xab000f9b, + 0xe0e4321c, 0xdbfc0e7e, 0xc3635003, 0x4c02164d, 0x53852b5c, 0xc8436c24, + 0xb5b63647, 0x010a1852, 0x29b6e166, 0xf02deeb8, 0x53ee0197, 0x6a6c910f, + 0xfae0f60f, 0x7fa7dc14, 0x8002c009, 0x4c1c7a27, 0x584b2207, 0xebbde58e, + 0x129c5494, 0x26b5b7dd, 0xc7f9cf15, 0x0e600d1e, 0x6ab005d2, 0xd43ff904, + 0x9ff3c793, 0x3b70f1ee, 0xe3ca53d2, 0xe7285cb7, 0xf0bd6efd, 0xae67de4d, + 0x40cc4c8e, 0x7776fa3e, 0xae00f34a, 0xd214027a, 0xfb115443, 0x0fd3d64c, + 0x1fe79975, 0x4b5b81d1, 0x286daebe, 0x85d56e1f, 0x5bbd3232, 0xe812870a, + 0xba4c06cf, 0xdbdfd046, 0xe2a8e82e, 0x843297ea, 0x4225c5bc, 0x9e496a4e, + 0x41c84562, 0x2d41c934, 0xcffd41c9, 0x3e98f8f4, 0xe998b3dc, 0xa6747be7, + 0x72d4f48f, 0x9f8f62fb, 0xefc19bfb, 0x5f95472e, 0x26a80317, 0x57cfe09b, + 0x05c37bf8, 0xc6975407, 0x4cc80ae9, 0xf91caba2, 0xb46bf349, 0xbff1a4c2, + 0x6932bbca, 0xf29e5bfc, 0xa53bfa24, 0xdfe6924b, 0xa248abe8, 0x5bf8bbbf, + 0xf5ebf349, 0x96fa24fa, 0xf9a486da, 0xa481fdcb, 0xd6ab95f1, 0x18378d27, + 0x6df4499d, 0xcd25776d, 0x2db1d35f, 0x6ef6fc69, 0x34898209, 0x5df92ae8, + 0xf674d0cb, 0x7f5e658f, 0x7bf9f91b, 0xa9de5f69, 0xc79d9114, 0x76df93d6, + 0x84faa7b5, 0x856a079d, 0x761065dd, 0x9db0358e, 0xae82aab7, 0xae6ae5f1, + 0x18cffbaf, 0xed1ab9da, 0x99da12f2, 0x99da08da, 0x6768a3da, 0x3b415f6a, + 0x5efda357, 0x7b533b45, 0xfd4ced02, 0x533b473f, 0x4ced127b, 0xced02fed, + 0x3b429ed4, 0x9ecbfb53, 0xaafedc55, 0x6f75e0c7, 0xfb71b4f7, 0xf7074f4e, + 0x9ba7baff, 0x427b77db, 0x7c8e3fdc, 0x5f389504, 0xffd08673, 0x6575f412, + 0x4130fd18, 0xd09f733f, 0x91b2e892, 0x57f9a4bc, 0x8d24f11f, 0x934a4797, + 0xf09c17c6, 0x4e8bd125, 0xff9a4e2d, 0x24f4778d, 0x3c1bc9fa, 0xa24b5f1c, + 0xbeeb49b5, 0x893f91f9, 0x1d081b2e, 0x6bfc98ff, 0x42bc7fff, 0x7a5d346d, + 0x7d70d244, 0xf3d86fc4, 0xee4a7691, 0x2fe61f4c, 0x8d518569, 0x016171b4, + 0x883cfdc7, 0x036f64c9, 0x8cdd92e7, 0x600f8408, 0x9e7d96ac, 0x2c9fe3cf, + 0xfe7cf8d6, 0x1f97bb41, 0x129de186, 0xacbe0bf5, 0x6cd03ef5, 0xe3f35ad4, + 0x26f3d4f4, 0xe3cd6f9f, 0x07c0997c, 0x41dcac40, 0xcd756ee7, 0x74fe89df, + 0xf76e9650, 0xbc1d3fa3, 0x79bf6e1b, 0x1bf4bc8a, 0x688b4bca, 0x54d1e8de, + 0x480b175c, 0xf5b803be, 0xa1387615, 0x753d27cc, 0xe3f407cc, 0x29a67ae3, + 0x9bd2c757, 0xdf7ce2cb, 0x883b5108, 0xf187a13c, 0xa0636b9c, 0xeb9cf106, + 0x56d413fe, 0xb854eba4, 0xeb15efdd, 0xdcdd71ea, 0x481fa490, 0x7437eff0, + 0x4237cf89, 0xd8834b9d, 0xc750f73f, 0x5f9c56d2, 0xfdd62a97, 0x58d3a3c3, + 0x49f5378f, 0xcf286c07, 0x1f4087b5, 0x98ef79c6, 0xa43dcf7c, 0x573e41a9, + 0xe4135b53, 0xab77ec0b, 0x400fec1e, 0x9b2f3ab4, 0xe3c12474, 0xca1bd710, + 0x77c90af7, 0x928a8605, 0x09f1b005, 0x0907c0e7, 0x923ed47e, 0x71df4499, + 0x83e07f24, 0x48d9ff04, 0xa1c9a07f, 0xb754ec14, 0xdf269936, 0x77cff66c, + 0x80ddf7f9, 0x623bb4e7, 0xbaefe92a, 0xd9359985, 0x03182768, 0xddf9095f, + 0x19f6c0c2, 0xd61197c8, 0xe90f367d, 0xd338e3ab, 0x6699f98f, 0xf986b9f7, + 0x27387ae3, 0x50d24524, 0x86853715, 0x6fa46ce5, 0x72536d0c, 0xf021fe68, + 0x44a85aa1, 0xe3f3f5c1, 0x94e17972, 0x5fc894ec, 0x04f4d8e0, 0x71ccc3ff, + 0xb94bf92b, 0x8ff2014f, 0x50a6bb7a, 0xc6a599be, 0xfc43dcce, 0x3df4ef3d, + 0x82a3e7ce, 0x0d2efcf1, 0x5dec7acc, 0x84ea79c9, 0x0c7aa762, 0x0f1e0edd, + 0xcfd78268, 0x21b014fa, 0x52e7813f, 0xb5e340c2, 0x9eb37ae6, 0xe06c8607, + 0xb09dff41, 0x75422f83, 0x7c77f0fc, 0xd4da1c21, 0x1a35d6f9, 0xc293e7ea, + 0xf24cc1f0, 0x15d1a2eb, 0x632f918b, 0x8a7ce248, 0x057a61b8, 0xfdb039da, + 0xed0334f8, 0xcb3d0d1b, 0xbeb3e378, 0x6640d3bd, 0x78e55d3e, 0x13d4d04e, + 0x21219218, 0x23da6add, 0x8eadb5b8, 0xe63ef094, 0xd70e7d2d, 0xcd9c88dd, + 0x68ae32fc, 0x8fde501d, 0x6715d826, 0xa373d901, 0x6f681fb5, 0xdbf38b5f, + 0x489dbe50, 0xd815dbad, 0x50ed4791, 0xb08dbaf2, 0xda1b53eb, 0x129f7d67, + 0xf9c6af50, 0xb0bae610, 0xde693c3e, 0x890fdad6, 0x244f8d9f, 0x915d5ff7, + 0x0d2e7d9e, 0x5f7de028, 0xf19bb8d9, 0x39ccf7d0, 0x2d8fd781, 0x81d3fc67, + 0xd3f517c9, 0x21e04db8, 0x89708518, 0xec957444, 0x39f1ba44, 0xe14d27dd, + 0xb8986f3f, 0x64ea2ea8, 0x485fd6bd, 0xf3727ce3, 0xaf4c9985, 0xedcf90b8, + 0x8a570bca, 0x5e70177e, 0xe148d689, 0x37ff71bb, 0xfcb43c4d, 0x9f1e5cc2, + 0x3fb2e508, 0xd33fa04f, 0x3cccf311, 0x1d2e9575, 0x53a861c3, 0x7033ed8c, + 0x7c186ebc, 0xc257f221, 0x2affb84d, 0x29d351c2, 0x686b0a1e, 0xa095a87f, + 0xa1e290a4, 0x8c7ff4d3, 0xa1fce007, 0xaeab5e73, 0xfcf0db0f, 0x4ca8c655, + 0xc0e2b776, 0x13b19d08, 0x5248637d, 0x0617e83d, 0x15c46e1a, 0xf1c9f3f7, + 0x1d0694d0, 0xe8ae0e34, 0x5643ca22, 0x6622689e, 0xa3049297, 0x34fb8e86, + 0xcb82a621, 0xdd40474c, 0xf8c57ba7, 0xa3518afa, 0x1eff18af, 0xe4774878, + 0x63fc79f0, 0x919c756c, 0xd5081f90, 0x5f2b51e8, 0x5def3fa0, 0xb37889a2, + 0xe9fdf347, 0x66591768, 0xef10c57b, 0x8580a01d, 0x14b93553, 0xf9a4bb2f, + 0x7e713d3b, 0x07caaaf4, 0xedc5172a, 0x17c66cdf, 0x146e5fc6, 0xb7bae979, + 0xc0a61724, 0x82db5607, 0x6b38a67a, 0x29de88ca, 0x54f665a1, 0x0e8d5e80, + 0x9c9600db, 0x059cc110, 0x67fa4dab, 0x7ed1e315, 0xe987eb17, 0xccff2fdd, + 0x0fff7908, 0xb251b0f9, 0xf95bdc53, 0xb8cbbe70, 0x60f382af, 0x35d91974, + 0xc9531bcd, 0xb3f5936e, 0xeec8d766, 0xc7e21e39, 0x51bd79c3, 0xe380501d, + 0xc220ac20, 0xa8af1687, 0xb8f7602f, 0xa7674b6f, 0xd8253776, 0xddc27df1, + 0x85e5e853, 0x09bb810a, 0x08e67b27, 0xe12d4c9c, 0xc08a4f64, 0x4e1344c9, + 0x327096a6, 0x264e13f5, 0xd132709a, 0x26899384, 0xe12d4c9c, 0x507fea64, + 0x83dccfd6, 0x0e587cf6, 0x7e80be8f, 0xe32ce77a, 0x0f57ca49, 0xfe0800c3, + 0xfd0f960d, 0xc5caf386, 0x76a6853c, 0xa3f7135c, 0xcfb3eee6, 0x7f7145c9, + 0xba7ff60a, 0x8ff471ef, 0x1485c466, 0x14bf46cf, 0x69779949, 0x43747b3f, + 0xa3cbc72a, 0xff3957df, 0x8ea7aa36, 0xfae30a3b, 0x03fddd3c, 0x48cbe445, + 0x5df70789, 0x51f4e1dd, 0xfcabd7fe, 0x69bf112f, 0xe5db1f5e, 0xf9e04a81, + 0x471be657, 0x70cd6ec9, 0x9c3cd5ea, 0xaf37f4d7, 0x8efc69bb, 0xf29542b1, + 0xf948e070, 0xad0f3c8e, 0x79a35e37, 0x12a69701, 0x97dcd8ce, 0x29b775c9, + 0xeb8de317, 0x737dcc7e, 0xef1edc7a, 0xbf7a8855, 0x739c4aa7, 0xa12fbcde, + 0xa4fa9482, 0x4fbea279, 0x3b02b78e, 0xe78c6484, 0xfdd2d899, 0xf517d2cf, + 0xab8eb13b, 0x117f58f0, 0x06cd41ea, 0xebe7af5f, 0xa76cc2fa, 0x00aeb8ab, + 0xe9165b69, 0x950be44f, 0x42565e0a, 0x996e12bc, 0x4ab49fc2, 0x5f75bfc1, + 0x5f78bd6d, 0x25cb2ef5, 0xd247bf5c, 0xe8202dd0, 0x825cacf2, 0x0284f074, + 0x975d2377, 0x91f351e5, 0x692bdd8e, 0x5bdec807, 0x356f39ca, 0x9f904d92, + 0x8e12d0e0, 0xdb1860db, 0xef8e9705, 0x2b1cf6db, 0x15c909f8, 0x33e255d1, + 0x566ae9a8, 0x1969ee02, 0x264e3890, 0x136950d3, 0x08d78571, 0x2d9adfd2, + 0x8bb36a85, 0x974a13e8, 0x7e12e497, 0x79c3ad62, 0x57579a11, 0x5f92af04, + 0xca2e50c5, 0xfcde745b, 0x699bfd84, 0x71f384ff, 0xd4b6e33e, 0x6bd674ca, + 0x0bb94340, 0x4f98d5a9, 0x29eb03d4, 0xf3f71bb6, 0xf7ac39f0, 0xf1584896, + 0x3c763f11, 0x5ad5e917, 0x9a73a158, 0xca55cafb, 0x712ec677, 0xa99fd18e, + 0xb3ae1196, 0x22416a6b, 0x23bf43de, 0xcba46cbf, 0xcbf3367d, 0x7a883878, + 0x9a1c22ca, 0xf5d7f885, 0x4c057d75, 0x990383fe, 0x6071f8c9, 0x69f6428f, + 0x64caeb30, 0xfa6f5c3b, 0x855f7341, 0xaedeb40a, 0xcfe23eab, 0x3b6ff7d4, + 0x6b013b9d, 0x43e0c349, 0xf3d2214a, 0xba1e452a, 0x5d73d4de, 0x2244a451, + 0x7d3a743d, 0x368367c4, 0xd45ef2c0, 0x0fd45ef7, 0xcfcd13e1, 0x093f46fa, + 0x3825ea01, 0x38df6c98, 0x6fbce93f, 0xf1c03070, 0xa86ed6b7, 0x431f225a, + 0xa848972f, 0x7b8c0697, 0x668fea89, 0xce7fc9b8, 0x66e95ded, 0xd24f9139, + 0xb3cfba73, 0xfb216f2c, 0xe5b5fb0d, 0x440b4d3f, 0x2de75b3c, 0x3cb3b4af, + 0xfeb94dcb, 0xee0d38d2, 0xfc8e800a, 0x4f81e4b4, 0x9c74fe92, 0xc569f15a, + 0x1b44036b, 0xabbddef8, 0x7c848c1e, 0xe3bbf583, 0xf3f42999, 0x6ae7c980, + 0xcfa89ed3, 0xd69f4857, 0x3d92dff8, 0x28b1bc71, 0x3f69ee39, 0x358377da, + 0xe929195e, 0x5be7c6f4, 0x896636e7, 0xe4ffe475, 0xf3cc1b67, 0xcf177e68, + 0xe664f537, 0x798b968d, 0x1cf6d0e3, 0x92a31bca, 0xd746f28f, 0xbaeb816e, + 0x77e74a9e, 0xbd75dfae, 0x38158bf0, 0x870793ef, 0x8b5e489b, 0xe44460af, + 0x53c45689, 0x9ad63794, 0xc4ba3f75, 0x2132abb8, 0x3c0f838e, 0xc5c50575, + 0x73f291ea, 0x3b9606bf, 0xdde6f942, 0xd6fa7ea7, 0xbebc4f52, 0xf734725a, + 0x7012abff, 0xc84dea25, 0x19b4b3b9, 0x5ec285f4, 0xe96b0f74, 0x9fc67493, + 0x4fe32add, 0xfd93decb, 0xdbf18020, 0x81fb8ae2, 0xe14bff65, 0x96cecb26, + 0x5b7b2dfd, 0xdbd9607e, 0x9d5013b2, 0x16ffc04d, 0xbe4dfbdf, 0xfbfe9b57, + 0x67d8a568, 0xbaa15b75, 0x50bde396, 0x37bf216d, 0xc9821bc7, 0xa4ed17fd, + 0x3befcc5d, 0x46262e28, 0x76269d84, 0xf23de229, 0xe4ecd7d0, 0xf16fbaa6, + 0x777cceb1, 0x0fdf356c, 0x18389ad7, 0xa274f4ed, 0x2a3dd69d, 0xf4f2d4ec, + 0xd179bfeb, 0x3c89f2c3, 0xf1853bb6, 0x28c8f362, 0x7fa1abdb, 0xf388528f, + 0x4c2caa5e, 0x1d2dd7ca, 0x3ea01ae5, 0x2b0ff757, 0x592fff14, 0x77f24ef2, + 0x8848756c, 0x523faa23, 0xe6b3dd42, 0xc51bde53, 0x3a74b673, 0xf1d5c1a7, + 0xfd343e73, 0x3323a5b8, 0xe96bce8b, 0xdd3dfc08, 0x3fbcac67, 0x3aceee39, + 0xe3343c45, 0x6797147e, 0x2eee7c2b, 0x94f27bae, 0xb4dc75f5, 0xbd510fdb, + 0x691fca4e, 0x1e924f23, 0xea91de66, 0xe2a1c5eb, 0xce9868e2, 0xbe263f25, + 0x0e8bcc55, 0x29bc579c, 0x81f129fa, 0xeb443d10, 0xe2cf4da8, 0x3e907216, + 0xc62f6c80, 0x5a26c8b6, 0x1f90957b, 0x0e3423c7, 0x2445d1d9, 0x75bce4ff, + 0xf9615c29, 0xe4cfb5a7, 0xf929753c, 0xca67f8fe, 0x7cd0b677, 0xb9f52937, + 0xd36e781d, 0xf47c73fd, 0xe4a7f48e, 0x1f515354, 0xa2f20959, 0x9ace2eb3, + 0x7162de42, 0xbcb4ba0f, 0x53393583, 0x4e593bc8, 0xe6824e2b, 0x24e3005d, + 0x1329ee83, 0xa833b303, 0xb0959c9e, 0xb3bae16e, 0xf8994e9d, 0xdeb2e4b6, + 0x79f7ade9, 0x52fe1deb, 0xaa9eefef, 0x20bb812c, 0xb2784e9a, 0xff8cd531, + 0xbfa9a088, 0xaadfa13e, 0x345ae3f7, 0x3f212b3d, 0xd661d07f, 0xa6ee8843, + 0xd9ee8678, 0xe31def40, 0x65d36703, 0xe0a7f92f, 0x45b75acf, 0x53778df1, + 0xe29edb9e, 0xc423f7a3, 0x3de83b4d, 0xc99435a9, 0xba6b34ef, 0xc21b9c17, + 0xcdf4d67d, 0x37ae31f4, 0x335afe71, 0x096da5ff, 0xcd06f8ec, 0x08d42a1f, + 0xfcbab7c7, 0xa5c3bd2a, 0x45abd60d, 0x3dc57b8c, 0xbf999d60, 0xa7e048b6, + 0xf9475bf8, 0x7e4ae291, 0xcdea98b9, 0xff8121ba, 0x97e864eb, 0x7ab39f50, + 0x29f2cbfd, 0x7c93ec3f, 0x3f612784, 0x3eeb51e6, 0xc363b986, 0x2ad2ff52, + 0x447f37aa, 0xaffdc3bf, 0x236b1aa2, 0xba744679, 0x0be20277, 0x21f88792, + 0xe268bcbd, 0x33c1f192, 0x5c6f1ee9, 0x3054b39f, 0xe93cdef8, 0xf14ba83d, + 0xbcd266e4, 0x133cef49, 0x66464f76, 0x336cfe42, 0xf7a56a79, 0x1fe4059f, + 0x1fe4398d, 0x0f29a441, 0x62ac18ee, 0x96f875ba, 0x5e97f21c, 0xc8f78c9a, + 0x079a9ee0, 0x6e9fe843, 0xf6c11f53, 0x17089baa, 0xc9481db5, 0x5b8d7ba4, + 0x7113b909, 0x1ef87068, 0x8ffce037, 0x28ab9d86, 0xf56b579f, 0xe72899d5, + 0xe599fdda, 0xd0ba84b6, 0x6fe22556, 0x2e557b43, 0xfa6dcbbd, 0xf423d8f2, + 0xf715aa1d, 0x3fff70d4, 0x4385a48c, 0xcf536538, 0x630db711, 0xa32c99e8, + 0x51b8f485, 0x29415b1e, 0x7c2913f3, 0x7be79f30, 0xb7a77ca6, 0xdf7473da, + 0xff6dff44, 0x9f7877bb, 0x6f27cbdf, 0x9bf5c06a, 0x469d9fda, 0xfbdc6cfb, + 0xcc9a35e6, 0x54775bef, 0x877da22d, 0x5f746a0f, 0x479e1a1c, 0x6f75b8f5, + 0x45318649, 0x26bf253e, 0x223b6cff, 0xfeacc7de, 0xc60ce135, 0x540446a1, + 0xd3efcbcd, 0xb23f738c, 0x75d53741, 0xfd58970b, 0x7e04aadb, 0xc06328fd, + 0x7f5ff64d, 0xd53721f0, 0x05d38f8d, 0xe57078dd, 0x190f29cf, 0xfc08a58f, + 0xb7c6076d, 0x9781212d, 0xb8f185c1, 0x73e58c84, 0xbefc3dd0, 0x6fde34aa, + 0xa482d0fd, 0x2f8885ef, 0x3b63ffb8, 0xb31f12d4, 0xe4e5637a, 0x91eda7cf, + 0x69e7b256, 0xddf4a3c4, 0x4fcccda3, 0xcb6c07a7, 0x81843fa8, 0xf4e2b840, + 0xf4e9b3c0, 0x61c2d13d, 0x7577b635, 0xe7a5e11b, 0xc3aa72a4, 0x7c53de69, + 0xbdf3018f, 0xfc26b364, 0xca27ebad, 0x8cd999b2, 0x9367b8ab, 0x654ea23d, + 0x6e260daf, 0x1e1f48ba, 0xa6d97be5, 0x6c170243, 0xb8c3391a, 0xed19c2c0, + 0x3c6e9c66, 0x82718674, 0x61f36eb5, 0xc3f697a1, 0x2a503fa2, 0xba2def5b, + 0x65f74c54, 0x2f93e989, 0x5b605bff, 0x6076fd12, 0x93e9421b, 0x1ef99a15, + 0xbe5c6312, 0x7c97f4b3, 0x33ef699f, 0x495a45f7, 0x9c846f38, 0x9fe88672, + 0x42f5a2ed, 0xfb78d67f, 0x8a1f7161, 0x53f6a7b4, 0xbb37d6fd, 0xb6f6d4ec, + 0xef9eb8bb, 0xed4b90ef, 0x54b9890b, 0xa96373c6, 0x5e51e6d3, 0x6df1b19c, + 0xe413bd27, 0x8c98ec43, 0xc6f969fd, 0x172a3a31, 0x546c2a30, 0xe1122207, + 0xfcfff3d0, 0xffda02e1, 0xcfd159fa, 0x24efa340, 0x9df40367, 0x4caa5fe4, + 0x05d1bc39, 0x8e33c7e4, 0x23fbbc8a, 0x5ea9fa05, 0xf40fdd81, 0x164c60fd, + 0x45f426f8, 0xca71f86a, 0xe73ac54d, 0x99a72ecd, 0xeb3a3d38, 0x1fccc27b, + 0x687bf311, 0xfc3973e8, 0x452bf138, 0xb3889c7e, 0x3f85aa52, 0x77c453fb, + 0x4a4aefd1, 0x92e13fc1, 0x9a71af32, 0x645fcbe2, 0xbe472b2b, 0xe6cc4e27, + 0x7e6f3ab8, 0x6af0b53f, 0x816c79a5, 0x2f52cf79, 0xff9173cb, 0x5e853af7, + 0x6e875d24, 0xef6effe4, 0xfbe216d1, 0xe80398be, 0x2c655e7b, 0x2e6bdc55, + 0xd6fae5ab, 0xfd7374eb, 0x68763c96, 0xbd47f9c4, 0xf34ec472, 0x79dfc1c1, + 0xef0931c1, 0xd69d4eca, 0x7daf6349, 0xa67ef94e, 0x1963d3ed, 0xbfcce728, + 0x0b947c96, 0xfdce269b, 0x1b6c0de8, 0x25181c2f, 0x37ce6e79, 0x18f640fe, + 0x633da89f, 0xd3efc9a0, 0x513e1c46, 0x8e512047, 0x9f3ebbb1, 0xf9c72596, + 0xf73b1f3b, 0xa90b0bd4, 0x70fbf075, 0xbc4d98e5, 0xe7e24d27, 0x3e321e7c, + 0x7db1e79b, 0x30e4bbce, 0xc72acfdd, 0xfc43bd8e, 0x115c3a55, 0x8706e77a, + 0xf589eff2, 0x99053c06, 0x278ae6e7, 0xc666afaf, 0xab0ef1e3, 0xdf998c2e, + 0x7e2e63ef, 0x9de9ca9f, 0x4de57dfa, 0xef5805c2, 0xbe48cfaf, 0x16a8ce6f, + 0x4c3341ef, 0xf994f73b, 0x5e39aa0b, 0xbefc05c2, 0xe5d1d666, 0x1d56fca6, + 0x2fe799b6, 0xdcb0f537, 0x6fb90b25, 0xe9b7249d, 0x1ded930f, 0x613667b7, + 0x82768b88, 0x9e3a9fef, 0x29f6c851, 0xa5d85fbb, 0xe7ea9ab4, 0x63b727e7, + 0xff65c178, 0xcfb66dfd, 0x225d83ff, 0xc0bfc2f2, 0xed92a72e, 0x711bd392, + 0xb0dc21ce, 0x40dc6657, 0xb8164e78, 0x52b9e04e, 0x64d0bce0, 0x41f7e54b, + 0xd5c2f283, 0x538e0f9c, 0xc0f2b03e, 0x1968daac, 0x8071cfd5, 0xa8af8847, + 0xebfdc23c, 0xfe388baa, 0xf953872f, 0x8af78fd4, 0x6ccf8445, 0xf55ddf8e, + 0xc1869601, 0x2fa3c37b, 0x52bd3ee0, 0x8a5adf78, 0xfe2ee5ff, 0x2c3e74de, + 0x673c1487, 0x1de61330, 0xd707f3c1, 0x0ddfc55f, 0xf71983ce, 0x7b8e54ab, + 0xd377771c, 0x7f188378, 0xbbb3cbfe, 0x4ac55f09, 0x2c19e580, 0x90862b87, + 0xe52fac1e, 0x795a9ff1, 0x58ba7763, 0xcef22f5f, 0xfe2cfae0, 0x1f878a3f, + 0x75495f0e, 0xcf587061, 0x7ba277a7, 0xd9008cf3, 0xf09b32f1, 0xec42c1bf, + 0xc941f6c7, 0xfb4ad0df, 0xa37e0994, 0x1f4fa90d, 0xc59cadc4, 0x7fb09a98, + 0xbf9d3bbc, 0x6afe5a4f, 0x0acecbbd, 0x7a47d99d, 0x6942550a, 0x9effee07, + 0xde9667e9, 0xdd734c25, 0x536cf7a8, 0x2c1d96cf, 0x454ecb7f, 0xb0fca3ff, + 0xa85df855, 0x336794d2, 0x70bee984, 0x8692b239, 0xf14a6e7a, 0xbfdf4879, + 0xa2ee37cd, 0x44ede8b8, 0x0e48d8fb, 0x19718761, 0xbffaa6da, 0xd96abe94, + 0x512d5efa, 0x888134bc, 0x27f22697, 0xf46ec3f2, 0x843f04a7, 0xf499e5e8, + 0x09fd8a9d, 0x35c8afd7, 0xb57d21ee, 0xff98baa7, 0x5e6f4bdf, 0xff278343, + 0xffe536c7, 0x0b540cc1, 0xdd33d5fc, 0xf7e39fb8, 0x279c1557, 0xb2795c2c, + 0xca02c3fc, 0xbd77e3cf, 0xc3b53976, 0xd01ffe79, 0xfc360ffe, 0x192a32d7, + 0x1547e5ef, 0x86bde792, 0x9df80a2f, 0xec6beb79, 0xbf2e7fff, 0xd69b0bff, + 0x24d00f22, 0x000024d0 }; #endif /*__BNX2X_INIT_VALUES_H__*/ diff --git a/drivers/net/bnx2x_link.c b/drivers/net/bnx2x_link.c new file mode 100644 index 00000000..203e6b27 --- /dev/null +++ b/drivers/net/bnx2x_link.c @@ -0,0 +1,5821 @@ +/* Copyright 2008 Broadcom Corporation + * + * Unless you and Broadcom execute a separate written software license + * agreement governing use of this software, this software is licensed to you + * under the terms of the GNU General Public License version 2, available + * at http://www.gnu.org/licenses/old-licenses/gpl-2.0.html (the "GPL"). + * + * Notwithstanding the above, under no circumstances may you combine this + * software in any way with any other Broadcom software provided under a + * license other than the GPL, without Broadcom's express prior written + * consent. + * + * Written by Yaniv Rosner + * + */ + +#include +#include +#include +#include +#include +#include +#ifdef __LINUX_MUTEX_H /* BNX2X_UPSTREAM */ +#include +#endif +#include + +#include "bnx2x.h" + + +/********************************************************/ +#define ETH_HLEN 14 +#define ETH_OVREHEAD (ETH_HLEN + 8)/* 8 for CRC + VLAN*/ +#define ETH_MIN_PACKET_SIZE 60 +#define ETH_MAX_PACKET_SIZE 1500 +#define ETH_MAX_JUMBO_PACKET_SIZE 9600 +#define MDIO_ACCESS_TIMEOUT 1000 +#define BMAC_CONTROL_RX_ENABLE 2 + +/***********************************************************/ +/* Shortcut definitions */ +/***********************************************************/ + +#define NIG_STATUS_XGXS0_LINK10G \ + NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_XGXS0_LINK10G +#define NIG_STATUS_XGXS0_LINK_STATUS \ + NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_XGXS0_LINK_STATUS +#define NIG_STATUS_XGXS0_LINK_STATUS_SIZE \ + NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_XGXS0_LINK_STATUS_SIZE +#define NIG_STATUS_SERDES0_LINK_STATUS \ + NIG_STATUS_INTERRUPT_PORT0_REG_STATUS_SERDES0_LINK_STATUS +#define NIG_MASK_MI_INT \ + NIG_MASK_INTERRUPT_PORT0_REG_MASK_EMAC0_MISC_MI_INT +#define NIG_MASK_XGXS0_LINK10G \ + NIG_MASK_INTERRUPT_PORT0_REG_MASK_XGXS0_LINK10G +#define NIG_MASK_XGXS0_LINK_STATUS \ + NIG_MASK_INTERRUPT_PORT0_REG_MASK_XGXS0_LINK_STATUS +#define NIG_MASK_SERDES0_LINK_STATUS \ + NIG_MASK_INTERRUPT_PORT0_REG_MASK_SERDES0_LINK_STATUS + +#define MDIO_AN_CL73_OR_37_COMPLETE \ + (MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_AUTONEG_COMPLETE | \ + MDIO_GP_STATUS_TOP_AN_STATUS1_CL37_AUTONEG_COMPLETE) + +#define XGXS_RESET_BITS \ + (MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_RSTB_HW | \ + MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_IDDQ | \ + MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_PWRDWN | \ + MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_PWRDWN_SD | \ + MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_XGXS0_TXD_FIFO_RSTB) + +#define SERDES_RESET_BITS \ + (MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_RSTB_HW | \ + MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_IDDQ | \ + MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_PWRDWN | \ + MISC_REGISTERS_RESET_REG_3_MISC_NIG_MUX_SERDES0_PWRDWN_SD) + +#define AUTONEG_CL37 SHARED_HW_CFG_AN_ENABLE_CL37 +#define AUTONEG_CL73 SHARED_HW_CFG_AN_ENABLE_CL73 +#define AUTONEG_BAM SHARED_HW_CFG_AN_ENABLE_BAM +#define AUTONEG_PARALLEL \ + SHARED_HW_CFG_AN_ENABLE_PARALLEL_DETECTION +#define AUTONEG_SGMII_FIBER_AUTODET \ + SHARED_HW_CFG_AN_EN_SGMII_FIBER_AUTO_DETECT +#define AUTONEG_REMOTE_PHY SHARED_HW_CFG_AN_ENABLE_REMOTE_PHY + +#define GP_STATUS_PAUSE_RSOLUTION_TXSIDE \ + MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_TXSIDE +#define GP_STATUS_PAUSE_RSOLUTION_RXSIDE \ + MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_RXSIDE +#define GP_STATUS_SPEED_MASK \ + MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_MASK +#define GP_STATUS_10M MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10M +#define GP_STATUS_100M MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_100M +#define GP_STATUS_1G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G +#define GP_STATUS_2_5G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_2_5G +#define GP_STATUS_5G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_5G +#define GP_STATUS_6G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_6G +#define GP_STATUS_10G_HIG \ + MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_HIG +#define GP_STATUS_10G_CX4 \ + MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_CX4 +#define GP_STATUS_12G_HIG \ + MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_12G_HIG +#define GP_STATUS_12_5G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_12_5G +#define GP_STATUS_13G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_13G +#define GP_STATUS_15G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_15G +#define GP_STATUS_16G MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_16G +#define GP_STATUS_1G_KX MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G_KX +#define GP_STATUS_10G_KX4 \ + MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_KX4 + +#define LINK_10THD LINK_STATUS_SPEED_AND_DUPLEX_10THD +#define LINK_10TFD LINK_STATUS_SPEED_AND_DUPLEX_10TFD +#define LINK_100TXHD LINK_STATUS_SPEED_AND_DUPLEX_100TXHD +#define LINK_100T4 LINK_STATUS_SPEED_AND_DUPLEX_100T4 +#define LINK_100TXFD LINK_STATUS_SPEED_AND_DUPLEX_100TXFD +#define LINK_1000THD LINK_STATUS_SPEED_AND_DUPLEX_1000THD +#define LINK_1000TFD LINK_STATUS_SPEED_AND_DUPLEX_1000TFD +#define LINK_1000XFD LINK_STATUS_SPEED_AND_DUPLEX_1000XFD +#define LINK_2500THD LINK_STATUS_SPEED_AND_DUPLEX_2500THD +#define LINK_2500TFD LINK_STATUS_SPEED_AND_DUPLEX_2500TFD +#define LINK_2500XFD LINK_STATUS_SPEED_AND_DUPLEX_2500XFD +#define LINK_10GTFD LINK_STATUS_SPEED_AND_DUPLEX_10GTFD +#define LINK_10GXFD LINK_STATUS_SPEED_AND_DUPLEX_10GXFD +#define LINK_12GTFD LINK_STATUS_SPEED_AND_DUPLEX_12GTFD +#define LINK_12GXFD LINK_STATUS_SPEED_AND_DUPLEX_12GXFD +#define LINK_12_5GTFD LINK_STATUS_SPEED_AND_DUPLEX_12_5GTFD +#define LINK_12_5GXFD LINK_STATUS_SPEED_AND_DUPLEX_12_5GXFD +#define LINK_13GTFD LINK_STATUS_SPEED_AND_DUPLEX_13GTFD +#define LINK_13GXFD LINK_STATUS_SPEED_AND_DUPLEX_13GXFD +#define LINK_15GTFD LINK_STATUS_SPEED_AND_DUPLEX_15GTFD +#define LINK_15GXFD LINK_STATUS_SPEED_AND_DUPLEX_15GXFD +#define LINK_16GTFD LINK_STATUS_SPEED_AND_DUPLEX_16GTFD +#define LINK_16GXFD LINK_STATUS_SPEED_AND_DUPLEX_16GXFD + +#define PHY_XGXS_FLAG 0x1 +#define PHY_SGMII_FLAG 0x2 +#define PHY_SERDES_FLAG 0x4 + +/* */ +#define SFP_EEPROM_CON_TYPE_ADDR 0x2 + #define SFP_EEPROM_CON_TYPE_VAL_LC 0x7 + #define SFP_EEPROM_CON_TYPE_VAL_COPPER 0x21 + +#define SFP_EEPROM_FC_TX_TECH_ADDR 0x8 + #define SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_ACTIVE 0x8 +#define SFP_EEPROM_VENDOR_NAME_ADDR 0x14 +#define SFP_EEPROM_VENDOR_NAME_SIZE 16 +#define SFP_EEPROM_OPTIONS_ADDR 0xa0 + #define SFP_EEPROM_OPTIONS_LINEAR_RX_OUT_MASK 0x1 +#define SFP_EEPROM_OPTIONS_SIZE 2 + +/**********************************************************/ +/* 8073 Download definitions */ +/**********************************************************/ +/* spi Parameters.*/ +#define SPI_CTRL_1_L 0xC000 +#define SPI_CTRL_1_H 0xC002 +#define SPI_CTRL_2_L 0xC400 +#define SPI_CTRL_2_H 0xC402 +#define SPI_TXFIFO 0xD000 +#define SPI_RXFIFO 0xD400 + +/* Input Command Messages.*/ +#define WR_CPU_CTRL_REGS 0x11 /* Write CPU/SPI Control Regs, followed + by Count And CPU/SPI Controller Reg add/data pairs.*/ +#define RD_CPU_CTRL_REGS 0xEE /* Read CPU/SPI Control Regs, followed +by Count and CPU/SPI Controller Register Add.*/ +#define WR_CPU_CTRL_FIFO 0x66 /* Write CPU/SPI Control Regs +Continously, followed by Count and CPU/SPI Controller Reg addr and data's.*/ +/* Output Command Messages.*/ +#define DONE 0x4321 + +/* SPI Controller Commands (known As messages).*/ +#define MSGTYPE_HWR 0x40 +#define MSGTYPE_HRD 0x80 +#define WR_OPCODE 0x02 +#define RD_OPCODE 0x03 +#define WRDI_OPCODE 0x04 +#define RDSR_OPCODE 0x05 +#define WREN_OPCODE 0x06 +#define WR_BLOCK_SIZE 0x40 /* Maximum 64 Bytes Writes.*/ + +#define BUF_SIZE_8073 0x4000 /* Code Size is 16k bytes.*/ +#define UPGRADE_TIMEOUT_8073 1000 +/**********************************************************/ +/* INTERFACE */ +/**********************************************************/ +#define CL45_WR_OVER_CL22(_bp, _port, _phy_addr, _bank, _addr, _val) \ + bnx2x_cl45_write(_bp, _port, 0, _phy_addr, \ + DEFAULT_PHY_DEV_ADDR, \ + (_bank + (_addr & 0xf)), \ + _val) + +#define CL45_RD_OVER_CL22(_bp, _port, _phy_addr, _bank, _addr, _val) \ + bnx2x_cl45_read(_bp, _port, 0, _phy_addr, \ + DEFAULT_PHY_DEV_ADDR, \ + (_bank + (_addr & 0xf)), \ + _val) + +static void bnx2x_set_phy_mdio(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + REG_WR(bp, NIG_REG_XGXS0_CTRL_MD_ST + + params->port*0x18, 0); + REG_WR(bp, NIG_REG_XGXS0_CTRL_MD_DEVAD + params->port*0x18, + DEFAULT_PHY_DEV_ADDR); +} + +static u32 bnx2x_bits_en(struct bnx2x *bp, u32 reg, u32 bits) +{ + u32 val = REG_RD(bp, reg); + + val |= bits; + REG_WR(bp, reg, val); + return val; +} + +static u32 bnx2x_bits_dis(struct bnx2x *bp, u32 reg, u32 bits) +{ + u32 val = REG_RD(bp, reg); + + val &= ~bits; + REG_WR(bp, reg, val); + return val; +} + +static void bnx2x_emac_init(struct link_params *params, + struct link_vars *vars) +{ + /* reset and unreset the emac core */ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; + u32 val; + u16 timeout; + + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, + (MISC_REGISTERS_RESET_REG_2_RST_EMAC0_HARD_CORE << port)); + udelay(5); + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, + (MISC_REGISTERS_RESET_REG_2_RST_EMAC0_HARD_CORE << port)); + + /* init emac - use read-modify-write */ + /* self clear reset */ + val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); + EMAC_WR(bp, EMAC_REG_EMAC_MODE, (val | EMAC_MODE_RESET)); + + timeout = 200; + do { + val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); + DP(NETIF_MSG_LINK, "EMAC reset reg is %u\n", val); + if (!timeout) { + DP(NETIF_MSG_LINK, "EMAC timeout!\n"); + return; + } + timeout--; + } while (val & EMAC_MODE_RESET); + + /* Set mac address */ + val = ((params->mac_addr[0] << 8) | + params->mac_addr[1]); + EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH, val); + + val = ((params->mac_addr[2] << 24) | + (params->mac_addr[3] << 16) | + (params->mac_addr[4] << 8) | + params->mac_addr[5]); + EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH + 4, val); +} + +static u8 bnx2x_emac_enable(struct link_params *params, + struct link_vars *vars, u8 lb) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; + u32 val; + + DP(NETIF_MSG_LINK, "enabling EMAC\n"); + + /* enable emac and not bmac */ + REG_WR(bp, NIG_REG_EGRESS_EMAC0_PORT + port*4, 1); + + /* for paladium */ + if (CHIP_REV_IS_EMUL(bp)) { + /* Use lane 1 (of lanes 0-3) */ + REG_WR(bp, NIG_REG_XGXS_LANE_SEL_P0 + port*4, 1); + REG_WR(bp, NIG_REG_XGXS_SERDES0_MODE_SEL + + port*4, 1); + } + /* for fpga */ + else + + if (CHIP_REV_IS_FPGA(bp)) { + /* Use lane 1 (of lanes 0-3) */ + DP(NETIF_MSG_LINK, "bnx2x_emac_enable: Setting FPGA\n"); + + REG_WR(bp, NIG_REG_XGXS_LANE_SEL_P0 + port*4, 1); + REG_WR(bp, NIG_REG_XGXS_SERDES0_MODE_SEL + port*4, + 0); + } else + /* ASIC */ + if (vars->phy_flags & PHY_XGXS_FLAG) { + u32 ser_lane = ((params->lane_config & + PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK) >> + PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT); + + DP(NETIF_MSG_LINK, "XGXS\n"); + /* select the master lanes (out of 0-3) */ + REG_WR(bp, NIG_REG_XGXS_LANE_SEL_P0 + + port*4, ser_lane); + /* select XGXS */ + REG_WR(bp, NIG_REG_XGXS_SERDES0_MODE_SEL + + port*4, 1); + + } else { /* SerDes */ + DP(NETIF_MSG_LINK, "SerDes\n"); + /* select SerDes */ + REG_WR(bp, NIG_REG_XGXS_SERDES0_MODE_SEL + + port*4, 0); + } + + if (CHIP_REV_IS_SLOW(bp)) { + /* config GMII mode */ + val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); + EMAC_WR(bp, EMAC_REG_EMAC_MODE, + (val | EMAC_MODE_PORT_GMII)); + } else { /* ASIC */ + /* pause enable/disable */ + bnx2x_bits_dis(bp, emac_base + EMAC_REG_EMAC_RX_MODE, + EMAC_RX_MODE_FLOW_EN); + if (vars->flow_ctrl & FLOW_CTRL_RX) + bnx2x_bits_en(bp, emac_base + + EMAC_REG_EMAC_RX_MODE, + EMAC_RX_MODE_FLOW_EN); + + bnx2x_bits_dis(bp, emac_base + EMAC_REG_EMAC_TX_MODE, + (EMAC_TX_MODE_EXT_PAUSE_EN | + EMAC_TX_MODE_FLOW_EN)); + if (vars->flow_ctrl & FLOW_CTRL_TX) + bnx2x_bits_en(bp, emac_base + + EMAC_REG_EMAC_TX_MODE, + (EMAC_TX_MODE_EXT_PAUSE_EN | + EMAC_TX_MODE_FLOW_EN)); + } + + /* KEEP_VLAN_TAG, promiscuous */ + val = REG_RD(bp, emac_base + EMAC_REG_EMAC_RX_MODE); + val |= EMAC_RX_MODE_KEEP_VLAN_TAG | EMAC_RX_MODE_PROMISCUOUS; + EMAC_WR(bp, EMAC_REG_EMAC_RX_MODE, val); + + /* Set Loopback */ + val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); + if (lb) + val |= 0x810; + else + val &= ~0x810; + EMAC_WR(bp, EMAC_REG_EMAC_MODE, val); + + bnx2x_bits_en(bp, emac_base + EMAC_REG_EMAC_RX_MODE, + EMAC_RX_MODE_RESET); + bnx2x_bits_en(bp, emac_base + EMAC_REG_EMAC_TX_MODE, + EMAC_TX_MODE_RESET); + + /* enable emac */ + REG_WR(bp, NIG_REG_NIG_EMAC0_EN + port*4, 1); + + /* enable emac for jumbo packets */ + EMAC_WR(bp, EMAC_REG_EMAC_RX_MTU_SIZE, + (EMAC_RX_MTU_SIZE_JUMBO_ENA | + (ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD))); + + /* strip CRC */ + REG_WR(bp, NIG_REG_NIG_INGRESS_EMAC0_NO_CRC + port*4, 0x1); + + /* disable the NIG in/out to the bmac */ + REG_WR(bp, NIG_REG_BMAC0_IN_EN + port*4, 0x0); + REG_WR(bp, NIG_REG_BMAC0_PAUSE_OUT_EN + port*4, 0x0); + REG_WR(bp, NIG_REG_BMAC0_OUT_EN + port*4, 0x0); + + /* enable the NIG in/out to the emac */ + REG_WR(bp, NIG_REG_EMAC0_IN_EN + port*4, 0x1); + val = 0; + if (vars->flow_ctrl & FLOW_CTRL_TX) + val = 1; + + REG_WR(bp, NIG_REG_EMAC0_PAUSE_OUT_EN + port*4, val); + REG_WR(bp, NIG_REG_EGRESS_EMAC0_OUT_EN + port*4, 0x1); + + if (CHIP_REV_IS_EMUL(bp)) { + /* take the BigMac out of reset */ + REG_WR(bp, + GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, + (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); + + /* enable access for bmac registers */ + REG_WR(bp, NIG_REG_BMAC0_REGS_OUT_EN + port*4, 0x1); + } + + vars->mac_type = MAC_TYPE_EMAC; + return 0; +} + + + +static u8 bnx2x_bmac_enable(struct link_params *params, struct link_vars *vars, + u8 is_lb) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u32 bmac_addr = port ? NIG_REG_INGRESS_BMAC1_MEM : + NIG_REG_INGRESS_BMAC0_MEM; + u32 wb_data[2]; + u32 val; + + DP(NETIF_MSG_LINK, "Enabling BigMAC\n"); + /* reset and unreset the BigMac */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, + (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); + msleep(1); + + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, + (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); + + /* enable access for bmac registers */ + REG_WR(bp, NIG_REG_BMAC0_REGS_OUT_EN + port*4, 0x1); + + /* XGXS control */ + wb_data[0] = 0x3c; + wb_data[1] = 0; + REG_WR_DMAE(bp, bmac_addr + + BIGMAC_REGISTER_BMAC_XGXS_CONTROL, + wb_data, 2); + + /* tx MAC SA */ + wb_data[0] = ((params->mac_addr[2] << 24) | + (params->mac_addr[3] << 16) | + (params->mac_addr[4] << 8) | + params->mac_addr[5]); + wb_data[1] = ((params->mac_addr[0] << 8) | + params->mac_addr[1]); + REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_TX_SOURCE_ADDR, + wb_data, 2); + + /* tx control */ + val = 0xc0; + if (vars->flow_ctrl & FLOW_CTRL_TX) + val |= 0x800000; + wb_data[0] = val; + wb_data[1] = 0; + REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_TX_CONTROL, + wb_data, 2); + + /* mac control */ + val = 0x3; + if (is_lb) { + val |= 0x4; + DP(NETIF_MSG_LINK, "enable bmac loopback\n"); + } + wb_data[0] = val; + wb_data[1] = 0; + REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_BMAC_CONTROL, + wb_data, 2); + + + /* set rx mtu */ + wb_data[0] = ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD; + wb_data[1] = 0; + REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_RX_MAX_SIZE, + wb_data, 2); + + /* rx control set to don't strip crc */ + val = 0x14; + if (vars->flow_ctrl & FLOW_CTRL_RX) + val |= 0x20; + wb_data[0] = val; + wb_data[1] = 0; + REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_RX_CONTROL, + wb_data, 2); + + /* set tx mtu */ + wb_data[0] = ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD; + wb_data[1] = 0; + REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_TX_MAX_SIZE, + wb_data, 2); + + /* set cnt max size */ + wb_data[0] = ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD; + wb_data[1] = 0; + REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_CNT_MAX_SIZE, + wb_data, 2); + + /* configure safc */ + wb_data[0] = 0x1000200; + wb_data[1] = 0; + REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_RX_LLFC_MSG_FLDS, + wb_data, 2); + /* fix for emulation */ + if (CHIP_REV_IS_EMUL(bp)) { + wb_data[0] = 0xf000; + wb_data[1] = 0; + REG_WR_DMAE(bp, + bmac_addr + BIGMAC_REGISTER_TX_PAUSE_THRESHOLD, + wb_data, 2); + } + + REG_WR(bp, NIG_REG_XGXS_SERDES0_MODE_SEL + port*4, 0x1); + REG_WR(bp, NIG_REG_XGXS_LANE_SEL_P0 + port*4, 0x0); + REG_WR(bp, NIG_REG_EGRESS_EMAC0_PORT + port*4, 0x0); + val = 0; + if (vars->flow_ctrl & FLOW_CTRL_TX) + val = 1; + REG_WR(bp, NIG_REG_BMAC0_PAUSE_OUT_EN + port*4, val); + REG_WR(bp, NIG_REG_EGRESS_EMAC0_OUT_EN + port*4, 0x0); + REG_WR(bp, NIG_REG_EMAC0_IN_EN + port*4, 0x0); + REG_WR(bp, NIG_REG_EMAC0_PAUSE_OUT_EN + port*4, 0x0); + REG_WR(bp, NIG_REG_BMAC0_IN_EN + port*4, 0x1); + REG_WR(bp, NIG_REG_BMAC0_OUT_EN + port*4, 0x1); + + vars->mac_type = MAC_TYPE_BMAC; + return 0; +} + +static void bnx2x_phy_deassert(struct link_params *params, u8 phy_flags) +{ + struct bnx2x *bp = params->bp; + u32 val; + + if (phy_flags & PHY_XGXS_FLAG) { + DP(NETIF_MSG_LINK, "bnx2x_phy_deassert:XGXS\n"); + val = XGXS_RESET_BITS; + + } else { /* SerDes */ + DP(NETIF_MSG_LINK, "bnx2x_phy_deassert:SerDes\n"); + val = SERDES_RESET_BITS; + } + + val = val << (params->port*16); + + /* reset and unreset the SerDes/XGXS */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_3_CLEAR, + val); + udelay(500); + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_3_SET, + val); + bnx2x_set_phy_mdio(params); +} + +void bnx2x_link_status_update(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u8 link_10g; + u8 port = params->port; + + if (params->switch_cfg == SWITCH_CFG_1G) + vars->phy_flags = PHY_SERDES_FLAG; + else + vars->phy_flags = PHY_XGXS_FLAG; + vars->link_status = REG_RD(bp, params->shmem_base + + offsetof(struct shmem_region, + port_mb[port].link_status)); + + vars->link_up = (vars->link_status & LINK_STATUS_LINK_UP); + + if (vars->link_up) { + DP(NETIF_MSG_LINK, "phy link up\n"); + + vars->phy_link_up = 1; + vars->duplex = DUPLEX_FULL; + switch (vars->link_status & + LINK_STATUS_SPEED_AND_DUPLEX_MASK) { + case LINK_10THD: + vars->duplex = DUPLEX_HALF; + /* fall thru */ + case LINK_10TFD: + vars->line_speed = SPEED_10; + break; + + case LINK_100TXHD: + vars->duplex = DUPLEX_HALF; + /* fall thru */ + case LINK_100T4: + case LINK_100TXFD: + vars->line_speed = SPEED_100; + break; + + case LINK_1000THD: + vars->duplex = DUPLEX_HALF; + /* fall thru */ + case LINK_1000TFD: + vars->line_speed = SPEED_1000; + break; + + case LINK_2500THD: + vars->duplex = DUPLEX_HALF; + /* fall thru */ + case LINK_2500TFD: + vars->line_speed = SPEED_2500; + break; + + case LINK_10GTFD: + vars->line_speed = SPEED_10000; + break; + + case LINK_12GTFD: + vars->line_speed = SPEED_12000; + break; + + case LINK_12_5GTFD: + vars->line_speed = SPEED_12500; + break; + + case LINK_13GTFD: + vars->line_speed = SPEED_13000; + break; + + case LINK_15GTFD: + vars->line_speed = SPEED_15000; + break; + + case LINK_16GTFD: + vars->line_speed = SPEED_16000; + break; + + default: + break; + } + + if (vars->link_status & LINK_STATUS_TX_FLOW_CONTROL_ENABLED) + vars->flow_ctrl |= FLOW_CTRL_TX; + else + vars->flow_ctrl &= ~FLOW_CTRL_TX; + + if (vars->link_status & LINK_STATUS_RX_FLOW_CONTROL_ENABLED) + vars->flow_ctrl |= FLOW_CTRL_RX; + else + vars->flow_ctrl &= ~FLOW_CTRL_RX; + + if (vars->phy_flags & PHY_XGXS_FLAG) { + if (vars->line_speed && + ((vars->line_speed == SPEED_10) || + (vars->line_speed == SPEED_100))) { + vars->phy_flags |= PHY_SGMII_FLAG; + } else { + vars->phy_flags &= ~PHY_SGMII_FLAG; + } + } + + /* anything 10 and over uses the bmac */ + link_10g = ((vars->line_speed == SPEED_10000) || + (vars->line_speed == SPEED_12000) || + (vars->line_speed == SPEED_12500) || + (vars->line_speed == SPEED_13000) || + (vars->line_speed == SPEED_15000) || + (vars->line_speed == SPEED_16000)); + if (link_10g) + vars->mac_type = MAC_TYPE_BMAC; + else + vars->mac_type = MAC_TYPE_EMAC; + + } else { /* link down */ + DP(NETIF_MSG_LINK, "phy link down\n"); + + vars->phy_link_up = 0; + + vars->line_speed = 0; + vars->duplex = DUPLEX_FULL; + vars->flow_ctrl = FLOW_CTRL_NONE; + + /* indicate no mac active */ + vars->mac_type = MAC_TYPE_NONE; + } + + DP(NETIF_MSG_LINK, "link_status 0x%x phy_link_up %x\n", + vars->link_status, vars->phy_link_up); + DP(NETIF_MSG_LINK, "line_speed %x duplex %x flow_ctrl 0x%x\n", + vars->line_speed, vars->duplex, vars->flow_ctrl); +} + +static void bnx2x_update_mng(struct link_params *params, u32 link_status) +{ + struct bnx2x *bp = params->bp; + REG_WR(bp, params->shmem_base + + offsetof(struct shmem_region, + port_mb[params->port].link_status), + link_status); +} + +static void bnx2x_bmac_rx_disable(struct bnx2x *bp, u8 port) +{ + u32 bmac_addr = port ? NIG_REG_INGRESS_BMAC1_MEM : + NIG_REG_INGRESS_BMAC0_MEM; + u32 wb_data[2]; + u32 nig_bmac_enable = REG_RD(bp, NIG_REG_BMAC0_REGS_OUT_EN + + port*4); + + /* Only if the bmac is out of reset */ + if (REG_RD(bp, MISC_REG_RESET_REG_2) & + (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port) && + nig_bmac_enable) { + + /* Clear Rx Enable bit in BMAC_CONTROL register */ + REG_RD_DMAE(bp, bmac_addr + BIGMAC_REGISTER_BMAC_CONTROL, + wb_data, 2); + wb_data[0] &= ~BMAC_CONTROL_RX_ENABLE; + REG_WR_DMAE(bp, bmac_addr + BIGMAC_REGISTER_BMAC_CONTROL, + wb_data, 2); + + msleep(1); + } +} + +static u8 bnx2x_pbf_update(struct link_params *params, u32 flow_ctrl, + u32 line_speed) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u32 init_crd, crd; + u32 count = 1000; + + /* disable port */ + REG_WR(bp, PBF_REG_DISABLE_NEW_TASK_PROC_P0 + port*4, 0x1); + + /* wait for init credit */ + init_crd = REG_RD(bp, PBF_REG_P0_INIT_CRD + port*4); + crd = REG_RD(bp, PBF_REG_P0_CREDIT + port*8); + DP(NETIF_MSG_LINK, "init_crd 0x%x crd 0x%x\n", init_crd, crd); + + while ((init_crd != crd) && count) { + msleep(5); + + crd = REG_RD(bp, PBF_REG_P0_CREDIT + port*8); + count--; + } + crd = REG_RD(bp, PBF_REG_P0_CREDIT + port*8); + if (init_crd != crd) { + DP(NETIF_MSG_LINK, "BUG! init_crd 0x%x != crd 0x%x\n", + init_crd, crd); + return -EINVAL; + } + + if (flow_ctrl & FLOW_CTRL_RX || + line_speed == SPEED_10 || + line_speed == SPEED_100 || + line_speed == SPEED_1000 || + line_speed == SPEED_2500) { + REG_WR(bp, PBF_REG_P0_PAUSE_ENABLE + port*4, 1); + /* update threshold */ + REG_WR(bp, PBF_REG_P0_ARB_THRSH + port*4, 0); + /* update init credit */ + init_crd = 778; /* (800-18-4) */ + + } else { + u32 thresh = (ETH_MAX_JUMBO_PACKET_SIZE + + ETH_OVREHEAD)/16; + REG_WR(bp, PBF_REG_P0_PAUSE_ENABLE + port*4, 0); + /* update threshold */ + REG_WR(bp, PBF_REG_P0_ARB_THRSH + port*4, thresh); + /* update init credit */ + switch (line_speed) { + case SPEED_10000: + init_crd = thresh + 553 - 22; + break; + + case SPEED_12000: + init_crd = thresh + 664 - 22; + break; + + case SPEED_13000: + init_crd = thresh + 742 - 22; + break; + + case SPEED_16000: + init_crd = thresh + 778 - 22; + break; + default: + DP(NETIF_MSG_LINK, "Invalid line_speed 0x%x\n", + line_speed); + return -EINVAL; + break; + } + } + REG_WR(bp, PBF_REG_P0_INIT_CRD + port*4, init_crd); + DP(NETIF_MSG_LINK, "PBF updated to speed %d credit %d\n", + line_speed, init_crd); + + /* probe the credit changes */ + REG_WR(bp, PBF_REG_INIT_P0 + port*4, 0x1); + msleep(5); + REG_WR(bp, PBF_REG_INIT_P0 + port*4, 0x0); + + /* enable port */ + REG_WR(bp, PBF_REG_DISABLE_NEW_TASK_PROC_P0 + port*4, 0x0); + return 0; +} + +static u32 bnx2x_get_emac_base(u32 ext_phy_type, u8 port) +{ + u32 emac_base; + switch (ext_phy_type) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726: + emac_base = GRCBASE_EMAC0; + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: + emac_base = (port) ? GRCBASE_EMAC0 : GRCBASE_EMAC1; + break; + default: + emac_base = (port) ? GRCBASE_EMAC1 : GRCBASE_EMAC0; + break; + } + return emac_base; + +} + +u8 bnx2x_cl45_write(struct bnx2x *bp, u8 port, u32 ext_phy_type, + u8 phy_addr, u8 devad, u16 reg, u16 val) +{ + u32 tmp, saved_mode; + u8 i, rc = 0; + u32 mdio_ctrl = bnx2x_get_emac_base(ext_phy_type, port); + + /* set clause 45 mode, slow down the MDIO clock to 2.5MHz + * (a value of 49==0x31) and make sure that the AUTO poll is off + */ + saved_mode = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE); + tmp = saved_mode & ~(EMAC_MDIO_MODE_AUTO_POLL | + EMAC_MDIO_MODE_CLOCK_CNT); + tmp |= (EMAC_MDIO_MODE_CLAUSE_45 | + (49 << EMAC_MDIO_MODE_CLOCK_CNT_BITSHIFT)); + REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE, tmp); + REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE); + udelay(40); + + /* address */ + + tmp = ((phy_addr << 21) | (devad << 16) | reg | + EMAC_MDIO_COMM_COMMAND_ADDRESS | + EMAC_MDIO_COMM_START_BUSY); + REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM, tmp); + + for (i = 0; i < 50; i++) { + udelay(10); + + tmp = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM); + if (!(tmp & EMAC_MDIO_COMM_START_BUSY)) { + udelay(5); + break; + } + } + if (tmp & EMAC_MDIO_COMM_START_BUSY) { + DP(NETIF_MSG_LINK, "write phy register failed\n"); + rc = -EFAULT; + } else { + /* data */ + tmp = ((phy_addr << 21) | (devad << 16) | val | + EMAC_MDIO_COMM_COMMAND_WRITE_45 | + EMAC_MDIO_COMM_START_BUSY); + REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM, tmp); + + for (i = 0; i < 50; i++) { + udelay(10); + + tmp = REG_RD(bp, mdio_ctrl + + EMAC_REG_EMAC_MDIO_COMM); + if (!(tmp & EMAC_MDIO_COMM_START_BUSY)) { + udelay(5); + break; + } + } + if (tmp & EMAC_MDIO_COMM_START_BUSY) { + DP(NETIF_MSG_LINK, "write phy register failed\n"); + rc = -EFAULT; + } + } + + /* Restore the saved mode */ + REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE, saved_mode); + + return rc; +} + +u8 bnx2x_cl45_read(struct bnx2x *bp, u8 port, u32 ext_phy_type, + u8 phy_addr, u8 devad, u16 reg, u16 *ret_val) +{ + u32 val, saved_mode; + u16 i; + u8 rc = 0; + + u32 mdio_ctrl = bnx2x_get_emac_base(ext_phy_type, port); + /* set clause 45 mode, slow down the MDIO clock to 2.5MHz + * (a value of 49==0x31) and make sure that the AUTO poll is off + */ + saved_mode = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE); + val = saved_mode & ((EMAC_MDIO_MODE_AUTO_POLL | + EMAC_MDIO_MODE_CLOCK_CNT)); + val |= (EMAC_MDIO_MODE_CLAUSE_45 | + (49 << EMAC_MDIO_MODE_CLOCK_CNT_BITSHIFT)); + REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE, val); + REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE); + udelay(40); + + /* address */ + val = ((phy_addr << 21) | (devad << 16) | reg | + EMAC_MDIO_COMM_COMMAND_ADDRESS | + EMAC_MDIO_COMM_START_BUSY); + REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM, val); + + for (i = 0; i < 50; i++) { + udelay(10); + + val = REG_RD(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM); + if (!(val & EMAC_MDIO_COMM_START_BUSY)) { + udelay(5); + break; + } + } + if (val & EMAC_MDIO_COMM_START_BUSY) { + DP(NETIF_MSG_LINK, "read phy register failed\n"); + + *ret_val = 0; + rc = -EFAULT; + + } else { + /* data */ + val = ((phy_addr << 21) | (devad << 16) | + EMAC_MDIO_COMM_COMMAND_READ_45 | + EMAC_MDIO_COMM_START_BUSY); + REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_COMM, val); + + for (i = 0; i < 50; i++) { + udelay(10); + + val = REG_RD(bp, mdio_ctrl + + EMAC_REG_EMAC_MDIO_COMM); + if (!(val & EMAC_MDIO_COMM_START_BUSY)) { + *ret_val = (u16)(val & EMAC_MDIO_COMM_DATA); + break; + } + } + if (val & EMAC_MDIO_COMM_START_BUSY) { + DP(NETIF_MSG_LINK, "read phy register failed\n"); + + *ret_val = 0; + rc = -EFAULT; + } + } + + /* Restore the saved mode */ + REG_WR(bp, mdio_ctrl + EMAC_REG_EMAC_MDIO_MODE, saved_mode); + + return rc; +} + +static void bnx2x_set_aer_mmd(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u32 ser_lane; + u16 offset; + + ser_lane = ((params->lane_config & + PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK) >> + PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT); + + offset = (vars->phy_flags & PHY_XGXS_FLAG) ? + (params->phy_addr + ser_lane) : 0; + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_AER_BLOCK, + MDIO_AER_BLOCK_AER_REG, 0x3800 + offset); +} + +static void bnx2x_set_master_ln(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u16 new_master_ln, ser_lane; + ser_lane = ((params->lane_config & + PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK) >> + PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT); + + /* set the master_ln for AN */ + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_XGXS_BLOCK2, + MDIO_XGXS_BLOCK2_TEST_MODE_LANE, + &new_master_ln); + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_XGXS_BLOCK2 , + MDIO_XGXS_BLOCK2_TEST_MODE_LANE, + (new_master_ln | ser_lane)); +} + +static u8 bnx2x_reset_unicore(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u16 mii_control; + u16 i; + + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, &mii_control); + + /* reset the unicore */ + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, + (mii_control | + MDIO_COMBO_IEEO_MII_CONTROL_RESET)); + + /* wait for the reset to self clear */ + for (i = 0; i < MDIO_ACCESS_TIMEOUT; i++) { + udelay(5); + + /* the reset erased the previous bank value */ + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, + &mii_control); + + if (!(mii_control & MDIO_COMBO_IEEO_MII_CONTROL_RESET)) { + udelay(5); + return 0; + } + } + + DP(NETIF_MSG_LINK, "BUG! XGXS is still in reset!\n"); + return -EINVAL; + +} + +static void bnx2x_set_swap_lanes(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + /* Each two bits represents a lane number: + No swap is 0123 => 0x1b no need to enable the swap */ + u16 ser_lane, rx_lane_swap, tx_lane_swap; + + ser_lane = ((params->lane_config & + PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK) >> + PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT); + rx_lane_swap = ((params->lane_config & + PORT_HW_CFG_LANE_SWAP_CFG_RX_MASK) >> + PORT_HW_CFG_LANE_SWAP_CFG_RX_SHIFT); + tx_lane_swap = ((params->lane_config & + PORT_HW_CFG_LANE_SWAP_CFG_TX_MASK) >> + PORT_HW_CFG_LANE_SWAP_CFG_TX_SHIFT); + + if (rx_lane_swap != 0x1b) { + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_XGXS_BLOCK2, + MDIO_XGXS_BLOCK2_RX_LN_SWAP, + (rx_lane_swap | + MDIO_XGXS_BLOCK2_RX_LN_SWAP_ENABLE | + MDIO_XGXS_BLOCK2_RX_LN_SWAP_FORCE_ENABLE)); + } else { + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_XGXS_BLOCK2, + MDIO_XGXS_BLOCK2_RX_LN_SWAP, 0); + } + + if (tx_lane_swap != 0x1b) { + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_XGXS_BLOCK2, + MDIO_XGXS_BLOCK2_TX_LN_SWAP, + (tx_lane_swap | + MDIO_XGXS_BLOCK2_TX_LN_SWAP_ENABLE)); + } else { + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_XGXS_BLOCK2, + MDIO_XGXS_BLOCK2_TX_LN_SWAP, 0); + } +} + +static void bnx2x_set_parallel_detection(struct link_params *params, + u8 phy_flags) +{ + struct bnx2x *bp = params->bp; + u16 control2; + + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_SERDES_DIGITAL, + MDIO_SERDES_DIGITAL_A_1000X_CONTROL2, + &control2); + + + control2 |= MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN; + + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_SERDES_DIGITAL, + MDIO_SERDES_DIGITAL_A_1000X_CONTROL2, + control2); + + if (phy_flags & PHY_XGXS_FLAG) { + DP(NETIF_MSG_LINK, "XGXS\n"); + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_10G_PARALLEL_DETECT, + MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK, + MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK_CNT); + + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_10G_PARALLEL_DETECT, + MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL, + &control2); + + + control2 |= + MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL_PARDET10G_EN; + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_10G_PARALLEL_DETECT, + MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL, + control2); + + /* Disable parallel detection of HiG */ + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_XGXS_BLOCK2, + MDIO_XGXS_BLOCK2_UNICORE_MODE_10G, + MDIO_XGXS_BLOCK2_UNICORE_MODE_10G_CX4_XGXS | + MDIO_XGXS_BLOCK2_UNICORE_MODE_10G_HIGIG_XGXS); + } +} + +static void bnx2x_set_autoneg(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u16 reg_val; + + /* CL37 Autoneg */ + + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, ®_val); + + /* CL37 Autoneg Enabled */ + if (vars->line_speed == SPEED_AUTO_NEG) + reg_val |= MDIO_COMBO_IEEO_MII_CONTROL_AN_EN; + else /* CL37 Autoneg Disabled */ + reg_val &= ~(MDIO_COMBO_IEEO_MII_CONTROL_AN_EN | + MDIO_COMBO_IEEO_MII_CONTROL_RESTART_AN); + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, reg_val); + + /* Enable/Disable Autodetection */ + + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_SERDES_DIGITAL, + MDIO_SERDES_DIGITAL_A_1000X_CONTROL1, ®_val); + reg_val &= ~MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_SIGNAL_DETECT_EN; + if (vars->line_speed == SPEED_AUTO_NEG) + reg_val |= MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET; + else + reg_val &= ~MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET; + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_SERDES_DIGITAL, + MDIO_SERDES_DIGITAL_A_1000X_CONTROL1, reg_val); + + /* Enable TetonII and BAM autoneg */ + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_BAM_NEXT_PAGE, + MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL, + ®_val); + if (vars->line_speed == SPEED_AUTO_NEG) { + /* Enable BAM aneg Mode and TetonII aneg Mode */ + reg_val |= (MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_BAM_MODE | + MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_TETON_AN); + } else { + /* TetonII and BAM Autoneg Disabled */ + reg_val &= ~(MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_BAM_MODE | + MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_TETON_AN); + } + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_BAM_NEXT_PAGE, + MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL, + reg_val); + + /* CL73 Autoneg Disabled */ + reg_val = 0; + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_CL73_IEEEB0, + MDIO_CL73_IEEEB0_CL73_AN_CONTROL, reg_val); +} + +/* program SerDes, forced speed */ +static void bnx2x_program_serdes(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u16 reg_val; + + /* program duplex, disable autoneg */ + + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, ®_val); + reg_val &= ~(MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX | + MDIO_COMBO_IEEO_MII_CONTROL_AN_EN); + if (params->req_duplex == DUPLEX_FULL) + reg_val |= MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX; + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, reg_val); + + /* program speed + - needed only if the speed is greater than 1G (2.5G or 10G) */ + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_SERDES_DIGITAL, + MDIO_SERDES_DIGITAL_MISC1, ®_val); + /* clearing the speed value before setting the right speed */ + DP(NETIF_MSG_LINK, "MDIO_REG_BANK_SERDES_DIGITAL = 0x%x\n", reg_val); + + reg_val &= ~(MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_MASK | + MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_SEL); + + if (!((vars->line_speed == SPEED_1000) || + (vars->line_speed == SPEED_100) || + (vars->line_speed == SPEED_10))) { + + reg_val |= (MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_156_25M | + MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_SEL); + if (vars->line_speed == SPEED_10000) + reg_val |= + MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_10G_CX4; + if (vars->line_speed == SPEED_13000) + reg_val |= + MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_13G; + } + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_SERDES_DIGITAL, + MDIO_SERDES_DIGITAL_MISC1, reg_val); + +} + +static void bnx2x_set_brcm_cl37_advertisment(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u16 val = 0; + + /* configure the 48 bits for BAM AN */ + + /* set extended capabilities */ + if (params->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G) + val |= MDIO_OVER_1G_UP1_2_5G; + if (params->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_10G) + val |= MDIO_OVER_1G_UP1_10G; + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_OVER_1G, + MDIO_OVER_1G_UP1, val); + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_OVER_1G, + MDIO_OVER_1G_UP3, 0); +} + +static void bnx2x_calc_ieee_aneg_adv(struct link_params *params, u32 *ieee_fc) +{ + *ieee_fc = MDIO_COMBO_IEEE0_AUTO_NEG_ADV_FULL_DUPLEX; + /* resolve pause mode and advertisement + * Please refer to Table 28B-3 of the 802.3ab-1999 spec */ + + switch (params->req_flow_ctrl) { + case FLOW_CTRL_AUTO: + if (params->req_fc_auto_adv == FLOW_CTRL_BOTH) { + *ieee_fc |= + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH; + } else { + *ieee_fc |= + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC; + } + break; + case FLOW_CTRL_TX: + *ieee_fc |= + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC; + break; + + case FLOW_CTRL_RX: + case FLOW_CTRL_BOTH: + *ieee_fc |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH; + break; + + case FLOW_CTRL_NONE: + default: + *ieee_fc |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE; + break; + } +} + +static void bnx2x_set_ieee_aneg_advertisment(struct link_params *params, + u32 ieee_fc) +{ + struct bnx2x *bp = params->bp; + /* for AN, we are always publishing full duplex */ + + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_AUTO_NEG_ADV, (u16)ieee_fc); +} + +static void bnx2x_restart_autoneg(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u16 mii_control; + DP(NETIF_MSG_LINK, "bnx2x_restart_autoneg\n"); + /* Enable and restart BAM/CL37 aneg */ + + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, + &mii_control); + DP(NETIF_MSG_LINK, + "bnx2x_restart_autoneg mii_control before = 0x%x\n", + mii_control); + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, + (mii_control | + MDIO_COMBO_IEEO_MII_CONTROL_AN_EN | + MDIO_COMBO_IEEO_MII_CONTROL_RESTART_AN)); +} + +static void bnx2x_initialize_sgmii_process(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u16 control1; + + /* in SGMII mode, the unicore is always slave */ + + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_SERDES_DIGITAL, + MDIO_SERDES_DIGITAL_A_1000X_CONTROL1, + &control1); + control1 |= MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_INVERT_SIGNAL_DETECT; + /* set sgmii mode (and not fiber) */ + control1 &= ~(MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_FIBER_MODE | + MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET | + MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_MSTR_MODE); + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_SERDES_DIGITAL, + MDIO_SERDES_DIGITAL_A_1000X_CONTROL1, + control1); + + /* if forced speed */ + if (!(vars->line_speed == SPEED_AUTO_NEG)) { + /* set speed, disable autoneg */ + u16 mii_control; + + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, + &mii_control); + mii_control &= ~(MDIO_COMBO_IEEO_MII_CONTROL_AN_EN | + MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_MASK| + MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX); + + switch (vars->line_speed) { + case SPEED_100: + mii_control |= + MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_100; + break; + case SPEED_1000: + mii_control |= + MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_1000; + break; + case SPEED_10: + /* there is nothing to set for 10M */ + break; + default: + /* invalid speed for SGMII */ + DP(NETIF_MSG_LINK, "Invalid line_speed 0x%x\n", + vars->line_speed); + break; + } + + /* setting the full duplex */ + if (params->req_duplex == DUPLEX_FULL) + mii_control |= + MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX; + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, + mii_control); + + } else { /* AN mode */ + /* enable and restart AN */ + bnx2x_restart_autoneg(params); + } +} + + +/* + * link management + */ + +static void bnx2x_pause_resolve(struct link_vars *vars, u32 pause_result) +{ /* LD LP */ + switch (pause_result) { /* ASYM P ASYM P */ + case 0xb: /* 1 0 1 1 */ + vars->flow_ctrl = FLOW_CTRL_TX; + break; + + case 0xe: /* 1 1 1 0 */ + vars->flow_ctrl = FLOW_CTRL_RX; + break; + + case 0x5: /* 0 1 0 1 */ + case 0x7: /* 0 1 1 1 */ + case 0xd: /* 1 1 0 1 */ + case 0xf: /* 1 1 1 1 */ + vars->flow_ctrl = FLOW_CTRL_BOTH; + break; + + default: + break; + } +} + +static u8 bnx2x_ext_phy_resove_fc(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u8 ext_phy_addr; + u16 ld_pause; /* local */ + u16 lp_pause; /* link partner */ + u16 an_complete; /* AN complete */ + u16 pause_result; + u8 ret = 0; + u32 ext_phy_type; + u8 port = params->port; + ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + + ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + /* read twice */ + + bnx2x_cl45_read(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_STATUS, &an_complete); + bnx2x_cl45_read(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_STATUS, &an_complete); + + if (an_complete & MDIO_AN_REG_STATUS_AN_COMPLETE) { + ret = 1; + bnx2x_cl45_read(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_ADV_PAUSE, &ld_pause); + bnx2x_cl45_read(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_LP_AUTO_NEG, &lp_pause); + pause_result = (ld_pause & + MDIO_AN_REG_ADV_PAUSE_MASK) >> 8; + pause_result |= (lp_pause & + MDIO_AN_REG_ADV_PAUSE_MASK) >> 10; + DP(NETIF_MSG_LINK, "Ext PHY pause result 0x%x \n", + pause_result); + bnx2x_pause_resolve(vars, pause_result); + if (vars->flow_ctrl == FLOW_CTRL_NONE && + ext_phy_type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073) { + bnx2x_cl45_read(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CL37_FC_LD, &ld_pause); + + bnx2x_cl45_read(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CL37_FC_LP, &lp_pause); + pause_result = (ld_pause & + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) >> 5; + pause_result |= (lp_pause & + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) >> 7; + + bnx2x_pause_resolve(vars, pause_result); + DP(NETIF_MSG_LINK, "Ext PHY CL37 pause result 0x%x \n", + pause_result); + } + } + return ret; +} + + +static void bnx2x_flow_ctrl_resolve(struct link_params *params, + struct link_vars *vars, + u32 gp_status) +{ + struct bnx2x *bp = params->bp; + u16 ld_pause; /* local driver */ + u16 lp_pause; /* link partner */ + u16 pause_result; + + vars->flow_ctrl = FLOW_CTRL_NONE; + + /* resolve from gp_status in case of AN complete and not sgmii */ + if ((params->req_flow_ctrl == FLOW_CTRL_AUTO) && + (gp_status & MDIO_AN_CL73_OR_37_COMPLETE) && + (!(vars->phy_flags & PHY_SGMII_FLAG)) && + (XGXS_EXT_PHY_TYPE(params->ext_phy_config) == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT)) { + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_AUTO_NEG_ADV, + &ld_pause); + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1, + &lp_pause); + pause_result = (ld_pause & + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK)>>5; + pause_result |= (lp_pause & + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK)>>7; + DP(NETIF_MSG_LINK, "pause_result 0x%x\n", pause_result); + bnx2x_pause_resolve(vars, pause_result); + } else if ((params->req_flow_ctrl == FLOW_CTRL_AUTO) && + (bnx2x_ext_phy_resove_fc(params, vars))) { + return; + } else { + if (params->req_flow_ctrl == FLOW_CTRL_AUTO) + vars->flow_ctrl = params->req_fc_auto_adv; + else + vars->flow_ctrl = params->req_flow_ctrl; + } + DP(NETIF_MSG_LINK, "flow_ctrl 0x%x\n", vars->flow_ctrl); +} + + +static u8 bnx2x_link_settings_status(struct link_params *params, + struct link_vars *vars, + u32 gp_status) +{ + struct bnx2x *bp = params->bp; + u16 new_line_speed; + u8 rc = 0; + vars->link_status = 0; + + + if (gp_status & MDIO_GP_STATUS_TOP_AN_STATUS1_LINK_STATUS) { + DP(NETIF_MSG_LINK, "phy link up gp_status=0x%x\n", + gp_status); + + vars->phy_link_up = 1; + vars->link_status |= LINK_STATUS_LINK_UP; + + if (gp_status & MDIO_GP_STATUS_TOP_AN_STATUS1_DUPLEX_STATUS) + vars->duplex = DUPLEX_FULL; + else + vars->duplex = DUPLEX_HALF; + + bnx2x_flow_ctrl_resolve(params, vars, gp_status); + + switch (gp_status & GP_STATUS_SPEED_MASK) { + case GP_STATUS_10M: + new_line_speed = SPEED_10; + if (vars->duplex == DUPLEX_FULL) + vars->link_status |= LINK_10TFD; + else + vars->link_status |= LINK_10THD; + break; + + case GP_STATUS_100M: + new_line_speed = SPEED_100; + if (vars->duplex == DUPLEX_FULL) + vars->link_status |= LINK_100TXFD; + else + vars->link_status |= LINK_100TXHD; + break; + + case GP_STATUS_1G: + case GP_STATUS_1G_KX: + new_line_speed = SPEED_1000; + if (vars->duplex == DUPLEX_FULL) + vars->link_status |= LINK_1000TFD; + else + vars->link_status |= LINK_1000THD; + break; + + case GP_STATUS_2_5G: + new_line_speed = SPEED_2500; + if (vars->duplex == DUPLEX_FULL) + vars->link_status |= LINK_2500TFD; + else + vars->link_status |= LINK_2500THD; + break; + + case GP_STATUS_5G: + case GP_STATUS_6G: + DP(NETIF_MSG_LINK, + "link speed unsupported gp_status 0x%x\n", + gp_status); + return -EINVAL; + break; + case GP_STATUS_10G_KX4: + case GP_STATUS_10G_HIG: + case GP_STATUS_10G_CX4: + new_line_speed = SPEED_10000; + vars->link_status |= LINK_10GTFD; + break; + + case GP_STATUS_12G_HIG: + new_line_speed = SPEED_12000; + vars->link_status |= LINK_12GTFD; + break; + + case GP_STATUS_12_5G: + new_line_speed = SPEED_12500; + vars->link_status |= LINK_12_5GTFD; + break; + + case GP_STATUS_13G: + new_line_speed = SPEED_13000; + vars->link_status |= LINK_13GTFD; + break; + + case GP_STATUS_15G: + new_line_speed = SPEED_15000; + vars->link_status |= LINK_15GTFD; + break; + + case GP_STATUS_16G: + new_line_speed = SPEED_16000; + vars->link_status |= LINK_16GTFD; + break; + + default: + DP(NETIF_MSG_LINK, + "link speed unsupported gp_status 0x%x\n", + gp_status); + return -EINVAL; + break; + } + + /* Upon link speed change set the NIG into drain mode. + Comes to deals with possible FIFO glitch due to clk change + when speed is decreased without link down indicator */ + if (new_line_speed != vars->line_speed) { + REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + + params->port*4, 0); + } + vars->line_speed = new_line_speed; + vars->link_status |= LINK_STATUS_SERDES_LINK; + + if ((params->req_line_speed == SPEED_AUTO_NEG) && + ((XGXS_EXT_PHY_TYPE(params->ext_phy_config) == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) || + (XGXS_EXT_PHY_TYPE(params->ext_phy_config) == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705) || + (XGXS_EXT_PHY_TYPE(params->ext_phy_config) == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726))) { + vars->autoneg = AUTO_NEG_ENABLED; + + if (gp_status & MDIO_AN_CL73_OR_37_COMPLETE) { + vars->autoneg |= AUTO_NEG_COMPLETE; + vars->link_status |= + LINK_STATUS_AUTO_NEGOTIATE_COMPLETE; + } + + vars->autoneg |= AUTO_NEG_PARALLEL_DETECTION_USED; + vars->link_status |= + LINK_STATUS_PARALLEL_DETECTION_USED; + + } + if (vars->flow_ctrl & FLOW_CTRL_TX) + vars->link_status |= + LINK_STATUS_TX_FLOW_CONTROL_ENABLED; + + if (vars->flow_ctrl & FLOW_CTRL_RX) + vars->link_status |= + LINK_STATUS_RX_FLOW_CONTROL_ENABLED; + + } else { /* link_down */ + DP(NETIF_MSG_LINK, "phy link down\n"); + + vars->phy_link_up = 0; + + vars->duplex = DUPLEX_FULL; + vars->flow_ctrl = FLOW_CTRL_NONE; + vars->autoneg = AUTO_NEG_DISABLED; + vars->mac_type = MAC_TYPE_NONE; + } + + DP(NETIF_MSG_LINK, "gp_status 0x%x phy_link_up %x line_speed %x \n", + gp_status, vars->phy_link_up, vars->line_speed); + DP(NETIF_MSG_LINK, "duplex %x flow_ctrl 0x%x" + " autoneg 0x%x\n", + vars->duplex, + vars->flow_ctrl, vars->autoneg); + DP(NETIF_MSG_LINK, "link_status 0x%x\n", vars->link_status); + + return rc; +} + +static void bnx2x_set_gmii_tx_driver(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u16 lp_up2; + u16 tx_driver; + u16 bank; + + /* read precomp */ + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_OVER_1G, + MDIO_OVER_1G_LP_UP2, &lp_up2); + + /* bits [10:7] at lp_up2, positioned at [15:12] */ + lp_up2 = (((lp_up2 & MDIO_OVER_1G_LP_UP2_PREEMPHASIS_MASK) >> + MDIO_OVER_1G_LP_UP2_PREEMPHASIS_SHIFT) << + MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT); + + if (lp_up2 == 0) + return; + + for (bank = MDIO_REG_BANK_TX0; bank <= MDIO_REG_BANK_TX3; + bank += (MDIO_REG_BANK_TX1 - MDIO_REG_BANK_TX0)) { + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + bank, + MDIO_TX0_TX_DRIVER, &tx_driver); + + /* replace tx_driver bits [15:12] */ + if (lp_up2 != + (tx_driver & MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK)) { + tx_driver &= ~MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK; + tx_driver |= lp_up2; + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + bank, + MDIO_TX0_TX_DRIVER, tx_driver); + } + } +} + +static u8 bnx2x_emac_program(struct link_params *params, + u32 line_speed, u32 duplex) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u16 mode = 0; + + DP(NETIF_MSG_LINK, "setting link speed & duplex\n"); + bnx2x_bits_dis(bp, GRCBASE_EMAC0 + port*0x400 + + EMAC_REG_EMAC_MODE, + (EMAC_MODE_25G_MODE | + EMAC_MODE_PORT_MII_10M | + EMAC_MODE_HALF_DUPLEX)); + switch (line_speed) { + case SPEED_10: + mode |= EMAC_MODE_PORT_MII_10M; + break; + + case SPEED_100: + mode |= EMAC_MODE_PORT_MII; + break; + + case SPEED_1000: + mode |= EMAC_MODE_PORT_GMII; + break; + + case SPEED_2500: + mode |= (EMAC_MODE_25G_MODE | EMAC_MODE_PORT_GMII); + break; + + default: + /* 10G not valid for EMAC */ + DP(NETIF_MSG_LINK, "Invalid line_speed 0x%x\n", line_speed); + return -EINVAL; + } + + if (duplex == DUPLEX_HALF) + mode |= EMAC_MODE_HALF_DUPLEX; + bnx2x_bits_en(bp, + GRCBASE_EMAC0 + port*0x400 + EMAC_REG_EMAC_MODE, + mode); + + bnx2x_set_led(bp, params->port, LED_MODE_OPER, + line_speed, params->hw_led_mode, params->chip_id); + return 0; +} + +/*****************************************************************************/ +/* External Phy section */ +/*****************************************************************************/ +static void bnx2x_hw_reset(struct bnx2x *bp, u8 port) +{ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, + MISC_REGISTERS_GPIO_OUTPUT_LOW, port); + msleep(1); + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, + MISC_REGISTERS_GPIO_OUTPUT_HIGH, port); +} + +static void bnx2x_ext_phy_reset(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u32 ext_phy_type; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + DP(NETIF_MSG_LINK, "Port %x: bnx2x_ext_phy_reset\n", params->port); + ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + /* The PHY reset is controled by GPIO 1 + * Give it 1ms of reset pulse + */ + if (vars->phy_flags & PHY_XGXS_FLAG) { + + switch (ext_phy_type) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: + DP(NETIF_MSG_LINK, "XGXS Direct\n"); + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: + DP(NETIF_MSG_LINK, "XGXS 8705/8706\n"); + + /* Restore normal power mode*/ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_OUTPUT_HIGH, + params->port); + + /* HW reset */ + bnx2x_hw_reset(bp, params->port); + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_CTRL, 0xa040); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726: + + /* Restore normal power mode*/ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_OUTPUT_HIGH, + params->port); + + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, + MISC_REGISTERS_GPIO_OUTPUT_HIGH, + params->port); + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_CTRL, + 1<<15); + + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: + /* Unset Low Power Mode and SW reset */ + /* Restore normal power mode*/ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_OUTPUT_HIGH, + params->port); + + DP(NETIF_MSG_LINK, "XGXS 8072\n"); + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_CTRL, + 1<<15); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: + { + + /* Restore normal power mode*/ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_OUTPUT_HIGH, + params->port); + + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, + MISC_REGISTERS_GPIO_OUTPUT_HIGH, + params->port); + + DP(NETIF_MSG_LINK, "XGXS 8073\n"); + } + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + DP(NETIF_MSG_LINK, "XGXS SFX7101\n"); + + /* Restore normal power mode*/ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_OUTPUT_HIGH, + params->port); + + /* HW reset */ + bnx2x_hw_reset(bp, params->port); + + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE: + DP(NETIF_MSG_LINK, "XGXS PHY Failure detected\n"); + break; + + default: + DP(NETIF_MSG_LINK, "BAD XGXS ext_phy_config 0x%x\n", + params->ext_phy_config); + break; + } + + } else { /* SerDes */ + ext_phy_type = SERDES_EXT_PHY_TYPE(params->ext_phy_config); + switch (ext_phy_type) { + case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT: + DP(NETIF_MSG_LINK, "SerDes Direct\n"); + break; + + case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482: + DP(NETIF_MSG_LINK, "SerDes 5482\n"); + bnx2x_hw_reset(bp, params->port); + break; + + default: + DP(NETIF_MSG_LINK, + "BAD SerDes ext_phy_config 0x%x\n", + params->ext_phy_config); + break; + } + } +} + +static void bnx2x_bcm8072_external_rom_boot(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + u16 fw_ver1, fw_ver2; + + /* Need to wait 200ms after reset */ + msleep(200); + /* Boot port from external ROM + * Set ser_boot_ctl bit in the MISC_CTRL1 register + */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL1, 0x0001); + + /* Reset internal microprocessor */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_GEN_CTRL, + MDIO_PMA_REG_GEN_CTRL_ROM_RESET_INTERNAL_MP); + /* set micro reset = 0 */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_GEN_CTRL, + MDIO_PMA_REG_GEN_CTRL_ROM_MICRO_RESET); + /* Reset internal microprocessor */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_GEN_CTRL, + MDIO_PMA_REG_GEN_CTRL_ROM_RESET_INTERNAL_MP); + /* wait for 100ms for code download via SPI port */ + msleep(100); + + /* Clear ser_boot_ctl bit */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL1, 0x0000); + /* Wait 100ms */ + msleep(100); + + /* Print the PHY FW version */ + bnx2x_cl45_read(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER1, &fw_ver1); + bnx2x_cl45_read(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER2, &fw_ver2); + DP(NETIF_MSG_LINK, "8072 FW version 0x%x:0x%x\n", fw_ver1, fw_ver2); +} + +static u8 bnx2x_8073_is_snr_needed(struct link_params *params) +{ + /* This is only required for 8073A1, version 102 only */ + + struct bnx2x *bp = params->bp; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + u16 val; + + /* Read 8073 HW revision*/ + bnx2x_cl45_read(bp, params->port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + 0xc801, &val); + + if (val != 1) { + /* No need to workaround in 8073 A1 */ + return 0; + } + + bnx2x_cl45_read(bp, params->port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER2, &val); + + /* SNR should be applied only for version 0x102 */ + if (val != 0x102) + return 0; + + return 1; +} + +static u8 bnx2x_bcm8073_xaui_wa(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + u16 val, cnt, cnt1 ; + + bnx2x_cl45_read(bp, params->port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + 0xc801, &val); + + if (val > 0) { + /* No need to workaround in 8073 A1 */ + return 0; + } + /* XAUI workaround in 8073 A0: */ + + /* After loading the boot ROM and restarting Autoneg, + poll Dev1, Reg $C820: */ + + for (cnt = 0; cnt < 1000; cnt++) { + bnx2x_cl45_read(bp, params->port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + 0xc820, &val); + /* If bit [14] = 0 or bit [13] = 0, continue on with + system initialization (XAUI work-around not required, + as these bits indicate 2.5G or 1G link up). */ + if (!(val & (1<<14)) || !(val & (1<<13))) { + DP(NETIF_MSG_LINK, "XAUI work-around not required\n"); + return 0; + } else if (!(val & (1<<15))) { + DP(NETIF_MSG_LINK, "clc bit 15 went off\n"); + /* If bit 15 is 0, then poll Dev1, Reg $C841 until + it's MSB (bit 15) goes to 1 (indicating that the + XAUI workaround has completed), + then continue on with system initialization.*/ + for (cnt1 = 0; cnt1 < 1000; cnt1++) { + bnx2x_cl45_read(bp, params->port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + 0xc841, &val); + if (val & (1<<15)) { + DP(NETIF_MSG_LINK, + "XAUI workaround has completed\n"); + return 0; + } + msleep(3); + } + break; + } + msleep(3); + } + DP(NETIF_MSG_LINK, "Warning: XAUI work-around timeout !!!\n"); + return -EINVAL; + +} + +static void bnx2x_bcm8073_external_rom_boot(struct bnx2x *bp, u8 port, + u8 ext_phy_addr) +{ + u16 fw_ver1, fw_ver2; + /* Boot port from external ROM */ + /* EDC grst */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_GEN_CTRL, + 0x0001); + + /* ucode reboot and rst */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_GEN_CTRL, + 0x008c); + + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL1, 0x0001); + + /* Reset internal microprocessor */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_GEN_CTRL, + MDIO_PMA_REG_GEN_CTRL_ROM_MICRO_RESET); + + /* Release srst bit */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_GEN_CTRL, + MDIO_PMA_REG_GEN_CTRL_ROM_RESET_INTERNAL_MP); + + /* wait for 100ms for code download via SPI port */ + msleep(100); + + /* Clear ser_boot_ctl bit */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL1, 0x0000); + + bnx2x_cl45_read(bp, port, PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER1, &fw_ver1); + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER2, &fw_ver2); + DP(NETIF_MSG_LINK, "8073 FW version 0x%x:0x%x\n", fw_ver1, fw_ver2); + +} + +static void bnx2x_bcm8726_external_rom_boot(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + u16 fw_ver1, fw_ver2; + + /* Need to wait 100ms after reset */ + msleep(100); + + /* Set serial boot control for external load */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL1, 0x0001); + + /* Micro controller re-boot */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_GEN_CTRL, + MDIO_PMA_REG_GEN_CTRL_ROM_RESET_INTERNAL_MP); + + /* Set soft reset */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_GEN_CTRL, + MDIO_PMA_REG_GEN_CTRL_ROM_MICRO_RESET); + + /* Clear soft reset. + Will automatically reset micro-controller re-boot */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_GEN_CTRL, + MDIO_PMA_REG_GEN_CTRL_ROM_RESET_INTERNAL_MP); + + /* wait for 100ms for microcode load */ + msleep(100); + + /* Disable serial boot control, tristates pins SS_N, SCK, MOSI, MISO */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL1, 0x0000); + + msleep(200); + /* Print the PHY FW version */ + bnx2x_cl45_read(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER1, &fw_ver1); + bnx2x_cl45_read(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER2, &fw_ver2); + DP(NETIF_MSG_LINK, "8726 FW version 0x%x:0x%x\n", fw_ver1, fw_ver2); +} + +static void bnx2x_bcm8726_set_transmitter(struct link_params *params, u8 tx_en) +{ + struct bnx2x *bp = params->bp; + u16 val; + u8 port = params->port; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + DP(NETIF_MSG_LINK, "bnx2x_bcm8726_set_transmitter port %x tx_en:%x\n", + port, tx_en); + /* Disable transmitter */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_PHY_IDENTIFIER, + &val); + + if (tx_en) + val &= ~(1<<15); + else + val |= (1<<15); + + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_PHY_IDENTIFIER, + val); +} + + +static u8 bnx2x_read_sfp_module_eeprom(struct link_params *params, u16 addr, + u8 byte_cnt, u8 *o_buf) { + struct bnx2x *bp = params->bp; + u16 val, i; + u8 port = params->port; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + if (byte_cnt > 16) { + DP(NETIF_MSG_LINK, "bnx2x_bcm8726_read_eeprom: byte count" + " is limited to 0xf\n"); + return -EINVAL; + } + /* Set the read command byte count */ + bnx2x_cl45_write(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_8726_TWO_WIRE_BYTE_CNT, + (byte_cnt | 0xa000)); + + /* Set the read command address */ + bnx2x_cl45_write(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_8726_TWO_WIRE_MEM_ADDR, + addr); + + /* Activate read command */ + bnx2x_cl45_write(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_8726_TWO_WIRE_CTRL, + 0x2c0f); + + /* Wait up to 500us for command complete status */ + for (i = 0; i < 100; i++) { + bnx2x_cl45_read(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_8726_TWO_WIRE_CTRL, &val); + if ((val & MDIO_PMA_REG_8726_TWO_WIRE_CTRL_STATUS_MASK) == + MDIO_PMA_REG_8726_TWO_WIRE_STATUS_COMPLETE) + break; + udelay(5); + } + + if ((val & MDIO_PMA_REG_8726_TWO_WIRE_CTRL_STATUS_MASK) != + MDIO_PMA_REG_8726_TWO_WIRE_STATUS_COMPLETE) { + DP(NETIF_MSG_LINK, "bnx2x_bcm8726_read_eeprom: Bad status: 0x%x\n", + (val & MDIO_PMA_REG_8726_TWO_WIRE_CTRL_STATUS_MASK)); + return -EINVAL; + } + + /* Read the buffer */ + for (i = 0; i < byte_cnt; i++) { + bnx2x_cl45_read(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_8726_TWO_WIRE_DATA_BUF + i, &val); + o_buf[i] = (u8)(val & MDIO_PMA_REG_8726_TWO_WIRE_DATA_MASK); + } + + for (i = 0; i < 100; i++) { + bnx2x_cl45_read(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_8726_TWO_WIRE_CTRL, &val); + if ((val & MDIO_PMA_REG_8726_TWO_WIRE_CTRL_STATUS_MASK) == + MDIO_PMA_REG_8726_TWO_WIRE_STATUS_IDLE) + return 0;; + msleep(1); + } + return -EINVAL; +} + +/* This function read the relevant field from the module ( SFP+ ), + and verify it is compliant with this board */ +static u8 bnx2x_verify_sfp_module(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u8 *str_p, *tmp_buf; + u16 i; +#define COMPLIANCE_STR_CNT 5 + u8 *compliance_str[] = {"Broadcom", "JDSU", "Molex Inc", "PICOLIGHT", + "FINISAR CORP. "}; + u8 buf[SFP_EEPROM_VENDOR_NAME_SIZE]; + /* Passive Copper cables are allowed to participate, + since the module is hardwired to the copper cable */ + + /* First check for copper cable */ + if (bnx2x_read_sfp_module_eeprom(params, + SFP_EEPROM_CON_TYPE_ADDR, + 1, + buf) != 0) { + DP(NETIF_MSG_LINK, "bnx2x_verify_sfp_module: Failed to read " + "from module\n"); + return -EINVAL; + } + if (buf[0] == SFP_EEPROM_CON_TYPE_VAL_COPPER) { + /* Check if its active cable( includes SFP+ module) + of passive cable*/ + if (bnx2x_read_sfp_module_eeprom(params, + SFP_EEPROM_FC_TX_TECH_ADDR, + 1, + buf) != 0) { + DP(NETIF_MSG_LINK, "bnx2x_verify_sfp_module: Failed to read " + "from module\n"); + return -EINVAL; + } + if (buf[0] & SFP_EEPROM_FC_TX_TECH_BITMASK_COPPER_ACTIVE) { + DP(NETIF_MSG_LINK, "bnx2x_verify_sfp_module:" + " Active Copper cable Detected." + "Proceed verification...\n"); + } else { + DP(NETIF_MSG_LINK, "bnx2x_verify_sfp_module:" + " Passive Copper cable verified\n"); + return 0; + } + } + /* In case of non copper cable or Active copper cable, + verify that the SFP+ module is compliant with this board*/ + if (bnx2x_read_sfp_module_eeprom(params, + SFP_EEPROM_VENDOR_NAME_ADDR, + SFP_EEPROM_VENDOR_NAME_SIZE, + buf) != 0) { + DP(NETIF_MSG_LINK, "bnx2x_verify_sfp_module:" + " Failed to read from module"); + return -EINVAL; + } + for (i = 0; i < COMPLIANCE_STR_CNT; i++) { + str_p = compliance_str[i]; + tmp_buf = buf; + while (*str_p) { + if ((u8)(*tmp_buf) != (u8)(*str_p)) + break; + str_p++; + tmp_buf++; + } + + if (!(*str_p)) { + DP(NETIF_MSG_LINK, "bnx2x_verify_sfp_module: " + "Module verified, index=%x.\n", i); + return 0; + } + } + DP(NETIF_MSG_LINK, "bnx2x_verify_sfp_module: Incompliant module. " + "Disable module !!!\n"); + return -EINVAL; +} + +static u8 bnx2x_bcm8726_set_limiting_mode(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u8 options[SFP_EEPROM_OPTIONS_SIZE]; + u8 limiting_mode; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + + if (bnx2x_read_sfp_module_eeprom(params, + SFP_EEPROM_OPTIONS_ADDR, + SFP_EEPROM_OPTIONS_SIZE, + options) != 0) { + DP(NETIF_MSG_LINK, "bnx2x_bcm8726_set_limiting_mode:" + " Failed to read from module"); + return -EINVAL; + } + limiting_mode = !(options[0] & + SFP_EEPROM_OPTIONS_LINEAR_RX_OUT_MASK); + if (limiting_mode) { + DP(NETIF_MSG_LINK, "Module options = 0x%x.Setting LIMITING MODE\n", + options[0]); + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER2, + 0x0044); + } else { /* LRM mode ( default )*/ + DP(NETIF_MSG_LINK, "Module options = 0x%x.Setting LRM MODE\n", + options[0]); + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LRM_MODE, + 0); + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER2, + 0x123); + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL0, + 0x4008); + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LRM_MODE, + 0xaaaa); + } + return 0; +} + +static void bnx2x_bcm807x_force_10G(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + + /* Force KR or KX */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_CTRL, + 0x2040); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_10G_CTRL2, + 0x000b); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_BCM_CTRL, + 0x0000); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CTRL, + 0x0000); +} +static void bnx2x_bcm8073_set_xaui_low_power_mode(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u16 val; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + + bnx2x_cl45_read(bp, params->port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + 0xc801, &val); + + if (val == 0) { + /* Mustn't set low power mode in 8073 A0 */ + return; + } + + /* Disable PLL sequencer (use read-modify-write to clear bit 13) */ + bnx2x_cl45_read(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, + MDIO_XS_PLL_SEQUENCER, &val); + val &= ~(1<<13); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, MDIO_XS_PLL_SEQUENCER, val); + + /* PLL controls */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x805E, 0x1077); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x805D, 0x0000); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x805C, 0x030B); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x805B, 0x1240); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x805A, 0x2490); + + /* Tx Controls */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x80A7, 0x0C74); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x80A6, 0x9041); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x80A5, 0x4640); + + /* Rx Controls */ + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x80FE, 0x01C4); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x80FD, 0x9249); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, 0x80FC, 0x2015); + + /* Enable PLL sequencer (use read-modify-write to set bit 13) */ + bnx2x_cl45_read(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, + MDIO_XS_PLL_SEQUENCER, &val); + val |= (1<<13); + bnx2x_cl45_write(bp, port, ext_phy_type, ext_phy_addr, + MDIO_XS_DEVAD, MDIO_XS_PLL_SEQUENCER, val); +} + +static void bnx2x_8073_set_pause_cl37(struct link_params *params, + struct link_vars *vars) +{ + + struct bnx2x *bp = params->bp; + u16 cl37_val; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CL37_FC_LD, &cl37_val); + + cl37_val &= ~MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH; + /* Please refer to Table 28B-3 of 802.3ab-1999 spec. */ + + if ((vars->ieee_fc & + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_SYMMETRIC) == + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_SYMMETRIC) { + cl37_val |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_SYMMETRIC; + } + if ((vars->ieee_fc & + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC) == + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC) { + cl37_val |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC; + } + if ((vars->ieee_fc & + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) == + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) { + cl37_val |= MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH; + } + DP(NETIF_MSG_LINK, + "Ext phy AN advertize cl37 0x%x\n", cl37_val); + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CL37_FC_LD, cl37_val); + msleep(500); +} + +static void bnx2x_ext_phy_set_pause(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u16 val; + u8 ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + + /* read modify write pause advertizing */ + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_ADV_PAUSE, &val); + + val &= ~MDIO_AN_REG_ADV_PAUSE_BOTH; + + /* Please refer to Table 28B-3 of 802.3ab-1999 spec. */ + + if ((vars->ieee_fc & + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC) == + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC) { + val |= MDIO_AN_REG_ADV_PAUSE_ASYMMETRIC; + } + if ((vars->ieee_fc & + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) == + MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH) { + val |= + MDIO_AN_REG_ADV_PAUSE_PAUSE; + } + DP(NETIF_MSG_LINK, + "Ext phy AN advertize 0x%x\n", val); + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_ADV_PAUSE, val); +} +static void bnx2x_set_preemphasis(struct link_params *params) +{ + u16 bank, i = 0; + struct bnx2x *bp = params->bp; + + for (bank = MDIO_REG_BANK_RX0, i = 0; bank <= MDIO_REG_BANK_RX3; + bank += (MDIO_REG_BANK_RX1-MDIO_REG_BANK_RX0), i++) { + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + bank, + MDIO_RX0_RX_EQ_BOOST, + params->xgxs_config_rx[i]); + } + + for (bank = MDIO_REG_BANK_TX0, i = 0; bank <= MDIO_REG_BANK_TX3; + bank += (MDIO_REG_BANK_TX1 - MDIO_REG_BANK_TX0), i++) { + CL45_WR_OVER_CL22(bp, params->port, + params->phy_addr, + bank, + MDIO_TX0_TX_DRIVER, + params->xgxs_config_tx[i]); + } +} + +static void bnx2x_init_internal_phy(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + if (!(vars->phy_flags & PHY_SGMII_FLAG)) { + if ((params->feature_config_flags & + FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED)) + bnx2x_set_preemphasis(params); + + /* forced speed requested? */ + if (vars->line_speed != SPEED_AUTO_NEG) { + DP(NETIF_MSG_LINK, "not SGMII, no AN\n"); + + /* disable autoneg */ + bnx2x_set_autoneg(params, vars); + + /* program speed and duplex */ + bnx2x_program_serdes(params, vars); + + } else { /* AN_mode */ + DP(NETIF_MSG_LINK, "not SGMII, AN\n"); + + /* AN enabled */ + bnx2x_set_brcm_cl37_advertisment(params); + + /* program duplex & pause advertisement (for aneg) */ + bnx2x_set_ieee_aneg_advertisment(params, + vars->ieee_fc); + + /* enable autoneg */ + bnx2x_set_autoneg(params, vars); + + /* enable and restart AN */ + bnx2x_restart_autoneg(params); + } + + } else { /* SGMII mode */ + DP(NETIF_MSG_LINK, "SGMII\n"); + + bnx2x_initialize_sgmii_process(params, vars); + } +} + +static u8 bnx2x_ext_phy_init(struct link_params *params, struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u32 ext_phy_type; + u8 ext_phy_addr; + u16 cnt; + u16 ctrl = 0; + u16 val = 0; + u8 rc = 0; + if (vars->phy_flags & PHY_XGXS_FLAG) { + ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + + ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + /* Make sure that the soft reset is off (expect for the 8072: + * due to the lock, it will be done inside the specific + * handling) + */ + if ((ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) && + (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE) && + (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN) && + (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072) && + (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073)) { + /* Wait for soft reset to get cleared upto 1 sec */ + for (cnt = 0; cnt < 1000; cnt++) { + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_CTRL, &ctrl); + if (!(ctrl & (1<<15))) + break; + msleep(1); + } + DP(NETIF_MSG_LINK, "control reg 0x%x (after %d ms)\n", + ctrl, cnt); + } + + switch (ext_phy_type) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: + DP(NETIF_MSG_LINK, "XGXS 8705\n"); + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL, + 0x8288); + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_PHY_IDENTIFIER, + 0x7fbf); + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_CMU_PLL_BYPASS, + 0x0100); + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_WIS_DEVAD, + MDIO_WIS_REG_LASI_CNTL, 0x1); + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: + DP(NETIF_MSG_LINK, "XGXS 8706\n"); + + msleep(10); + /* Force speed */ + /* First enable LASI */ + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_ALARM_CTRL, + 0x0400); + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_CTRL, 0x0004); + + if (params->req_line_speed == SPEED_10000) { + DP(NETIF_MSG_LINK, "XGXS 8706 force 10Gbps\n"); + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_DIGITAL_CTRL, + 0x400); + } else { + /* Force 1Gbps using autoneg with 1G + advertisment */ + + /* Allow CL37 through CL73 */ + DP(NETIF_MSG_LINK, "XGXS 8706 AutoNeg\n"); + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CL37_CL73, + 0x040c); + + /* Enable Full-Duplex advertisment on CL37 */ + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CL37_FC_LP, + 0x0020); + /* Enable CL37 AN */ + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CL37_AN, + 0x1000); + /* 1G support */ + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_ADV, (1<<5)); + + /* Enable clause 73 AN */ + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CTRL, + 0x1200); + + } + + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726: + DP(NETIF_MSG_LINK, "Initializing BCM8726\n"); + bnx2x_bcm8726_external_rom_boot(params); + /* Enable LASI */ + bnx2x_bcm8726_set_transmitter(params, 1); + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_CTRL, 1); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: + { + u16 tmp1; + u16 rx_alarm_ctrl_val; + u16 lasi_ctrl_val; + if (ext_phy_type == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072) { + rx_alarm_ctrl_val = 0x400; + lasi_ctrl_val = 0x0004; + } else { + rx_alarm_ctrl_val = (1<<2); + lasi_ctrl_val = 0x0004; + } + + /* enable LASI */ + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_ALARM_CTRL, + rx_alarm_ctrl_val); + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_CTRL, + lasi_ctrl_val); + + bnx2x_8073_set_pause_cl37(params, vars); + + if (ext_phy_type == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072){ + bnx2x_bcm8072_external_rom_boot(params); + } else { + + /* In case of 8073 with long xaui lines, + don't set the 8073 xaui low power*/ + bnx2x_bcm8073_set_xaui_low_power_mode(params); + } + + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + 0xca13, + &tmp1); + + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_ALARM, &tmp1); + + DP(NETIF_MSG_LINK, "Before rom RX_ALARM(port1):" + "0x%x\n", tmp1); + + /* If this is forced speed, set to KR or KX + * (all other are not supported) + */ + if (params->loopback_mode == LOOPBACK_EXT) { + bnx2x_bcm807x_force_10G(params); + DP(NETIF_MSG_LINK, + "Forced speed 10G on 807X\n"); + break; + } else { + bnx2x_cl45_write(bp, params->port, + ext_phy_type, ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_BCM_CTRL, + 0x0002); + } + if (params->req_line_speed != SPEED_AUTO_NEG) { + if (params->req_line_speed == SPEED_10000) { + val = (1<<7); + } else if (params->req_line_speed == + SPEED_2500) { + val = (1<<5); + /* Note that 2.5G works only + when used with 1G advertisment */ + } else + val = (1<<5); + } else { + + val = 0; + if (params->speed_cap_mask & + PORT_HW_CFG_SPEED_CAPABILITY_D0_10G) + val |= (1<<7); + + /* Note that 2.5G works only when + used with 1G advertisment */ + if (params->speed_cap_mask & + (PORT_HW_CFG_SPEED_CAPABILITY_D0_1G | + PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G)) + val |= (1<<5); + DP(NETIF_MSG_LINK, + "807x autoneg val = 0x%x\n", val); + } + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_ADV, val); + + if (ext_phy_type == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073) { + + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + 0x8329, &tmp1); + + if (((params->speed_cap_mask & + PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G) && + (params->req_line_speed == + SPEED_AUTO_NEG)) || + (params->req_line_speed == + SPEED_2500)) { + u16 phy_ver; + /* Allow 2.5G for A1 and above */ + bnx2x_cl45_read(bp, params->port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + 0xc801, &phy_ver); + DP(NETIF_MSG_LINK, "Add 2.5G\n"); + if (phy_ver > 0) + tmp1 |= 1; + else + tmp1 &= 0xfffe; + } else { + DP(NETIF_MSG_LINK, "Disable 2.5G\n"); + tmp1 &= 0xfffe; + } + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + 0x8329, tmp1); + } + + /* Add support for CL37 (passive mode) II */ + + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CL37_FC_LD, + &tmp1); + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CL37_FC_LD, (tmp1 | + ((params->req_duplex == DUPLEX_FULL) ? + 0x20 : 0x40))); + + /* Add support for CL37 (passive mode) III */ + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CL37_AN, 0x1000); + + if (ext_phy_type == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073) { + /* The SNR will improve about 2db by changing + BW and FEE main tap. Rest commands are executed + after link is up*/ + /*Change FFE main cursor to 5 in EDC register*/ + if (bnx2x_8073_is_snr_needed(params)) + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_EDC_FFE_MAIN, + 0xFB0C); + + /* Enable FEC (Forware Error Correction) + Request in the AN */ + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_ADV2, &tmp1); + + tmp1 |= (1<<15); + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_ADV2, tmp1); + + } + + bnx2x_ext_phy_set_pause(params, vars); + + /* Restart autoneg */ + msleep(500); + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CTRL, 0x1200); + DP(NETIF_MSG_LINK, "807x Autoneg Restart: " + "Advertise 1G=%x, 10G=%x\n", + ((val & (1<<5)) > 0), + ((val & (1<<7)) > 0)); + break; + } + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + DP(NETIF_MSG_LINK, + "Setting the SFX7101 LASI indication\n"); + + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_CTRL, 0x1); + DP(NETIF_MSG_LINK, + "Setting the SFX7101 LED to blink on traffic\n"); + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_7107_LED_CNTL, (1<<3)); + + bnx2x_ext_phy_set_pause(params, vars); + /* Restart autoneg */ + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CTRL, &val); + val |= 0x200; + bnx2x_cl45_write(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CTRL, val); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE: + DP(NETIF_MSG_LINK, + "XGXS PHY Failure detected 0x%x\n", + params->ext_phy_config); + rc = -EINVAL; + break; + default: + DP(NETIF_MSG_LINK, "BAD XGXS ext_phy_config 0x%x\n", + params->ext_phy_config); + rc = -EINVAL; + break; + } + + } else { /* SerDes */ + + ext_phy_type = SERDES_EXT_PHY_TYPE(params->ext_phy_config); + switch (ext_phy_type) { + case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT: + DP(NETIF_MSG_LINK, "SerDes Direct\n"); + break; + + case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482: + DP(NETIF_MSG_LINK, "SerDes 5482\n"); + break; + + default: + DP(NETIF_MSG_LINK, "BAD SerDes ext_phy_config 0x%x\n", + params->ext_phy_config); + break; + } + } + return rc; +} + + +static u8 bnx2x_ext_phy_is_link_up(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u32 ext_phy_type; + u8 ext_phy_addr; + u16 val1 = 0, val2; + u16 rx_sd, pcs_status; + u8 ext_phy_link_up = 0; + u8 port = params->port; + if (vars->phy_flags & PHY_XGXS_FLAG) { + ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + + ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + switch (ext_phy_type) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: + DP(NETIF_MSG_LINK, "XGXS Direct\n"); + ext_phy_link_up = 1; + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: + DP(NETIF_MSG_LINK, "XGXS 8705\n"); + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_WIS_DEVAD, + MDIO_WIS_REG_LASI_STATUS, &val1); + DP(NETIF_MSG_LINK, "8705 LASI status 0x%x\n", val1); + + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_WIS_DEVAD, + MDIO_WIS_REG_LASI_STATUS, &val1); + DP(NETIF_MSG_LINK, "8705 LASI status 0x%x\n", val1); + + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_SD, &rx_sd); + DP(NETIF_MSG_LINK, "8705 rx_sd 0x%x\n", rx_sd); + ext_phy_link_up = (rx_sd & 0x1); + if (ext_phy_link_up) + vars->line_speed = SPEED_10000; + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: + DP(NETIF_MSG_LINK, "XGXS 8706\n"); + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_STATUS, &val1); + DP(NETIF_MSG_LINK, "8706 LASI status 0x%x\n", val1); + + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_STATUS, &val1); + DP(NETIF_MSG_LINK, "8706 LASI status 0x%x\n", val1); + + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_SD, &rx_sd); + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_STATUS, &pcs_status); + + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_LINK_STATUS, &val2); + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_LINK_STATUS, &val2); + + DP(NETIF_MSG_LINK, "8706 rx_sd 0x%x" + " pcs_status 0x%x 1Gbps link_status 0x%x\n", + rx_sd, pcs_status, val2); + /* link is up if both bit 0 of pmd_rx_sd and + * bit 0 of pcs_status are set, or if the autoneg bit + 1 is set + */ + ext_phy_link_up = ((rx_sd & pcs_status & 0x1) || + (val2 & (1<<1))); + if (ext_phy_link_up) { + if (val2 & (1<<1)) + vars->line_speed = SPEED_1000; + else + vars->line_speed = SPEED_10000; + } + + /* clear LASI indication*/ + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_ALARM, &val2); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726: + DP(NETIF_MSG_LINK, "XGXS 8726\n"); + /* clear LASI indication*/ + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_STATUS, &val1); + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_STATUS, &val2); + DP(NETIF_MSG_LINK, "8726 LASI status 0x%x-->0x%x\n", + val1, val2); + if (bnx2x_verify_sfp_module(params) != + 0) { + bnx2x_bcm8726_set_transmitter(params, 0); + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_0, + MISC_REGISTERS_GPIO_HIGH, + params->port); + return 0; + } + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_0, + MISC_REGISTERS_GPIO_LOW, + params->port); + /* Check and set limiting mode / LRM mode */ + if (bnx2x_bcm8726_set_limiting_mode(params) != + 0) { + return 0; + } + bnx2x_bcm8726_set_transmitter(params, 1); + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_STATUS, &val1); + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_STATUS, &val2); + ext_phy_link_up = ((val2 & (1<<2)) == (1<<2)); + DP(NETIF_MSG_LINK, "8726 LINK status 0x%x-->0x%x\n", + val1, val2); + if (ext_phy_link_up) + vars->line_speed = SPEED_10000; + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: + { + u16 link_status = 0; + u16 an1000_status = 0; + if (ext_phy_type == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072) { + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_LASI_STATUS, &val1); + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_LASI_STATUS, &val2); + DP(NETIF_MSG_LINK, + "870x LASI status 0x%x->0x%x\n", + val1, val2); + + } else { + /* In 8073, port1 is directed through emac0 and + * port0 is directed through emac1 + */ + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_STATUS, &val1); + + DP(NETIF_MSG_LINK, + "8703 LASI status 0x%x\n", + val1); + } + + /* clear the interrupt LASI status register */ + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_STATUS, &val2); + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_STATUS, &val1); + DP(NETIF_MSG_LINK, "807x PCS status 0x%x->0x%x\n", + val2, val1); + /* Clear MSG-OUT */ + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + 0xca13, + &val1); + + /* Check the LASI */ + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_ALARM, &val2); + + DP(NETIF_MSG_LINK, "KR 0x9003 0x%x\n", val2); + + /* Check the link status */ + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_STATUS, &val2); + DP(NETIF_MSG_LINK, "KR PCS status 0x%x\n", val2); + + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_STATUS, &val2); + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_STATUS, &val1); + ext_phy_link_up = ((val1 & 4) == 4); + DP(NETIF_MSG_LINK, "PMA_REG_STATUS=0x%x\n", val1); + if (ext_phy_type == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073) { + + if (ext_phy_link_up && + ((params->req_line_speed != + SPEED_10000))) { + if (bnx2x_bcm8073_xaui_wa(params) + != 0) { + ext_phy_link_up = 0; + break; + } + } + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + 0x8304, + &an1000_status); + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + 0x8304, + &an1000_status); + + /* Check the link status on 1.1.2 */ + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_STATUS, &val2); + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_STATUS, &val1); + DP(NETIF_MSG_LINK, "KR PMA status 0x%x->0x%x," + "an_link_status=0x%x\n", + val2, val1, an1000_status); + + ext_phy_link_up = (((val1 & 4) == 4) || + (an1000_status & (1<<1))); + if (ext_phy_link_up && + bnx2x_8073_is_snr_needed(params)) { + /* The SNR will improve about 2dbby + changing the BW and FEE main tap.*/ + + /* The 1st write to change FFE main + tap is set before restart AN */ + /* Change PLL Bandwidth in EDC + register */ + bnx2x_cl45_write(bp, port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_PLL_BANDWIDTH, + 0x26BC); + + /* Change CDR Bandwidth in EDC + register */ + bnx2x_cl45_write(bp, port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_CDR_BANDWIDTH, + 0x0333); + + + } + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + 0xc820, + &link_status); + + /* Bits 0..2 --> speed detected, + bits 13..15--> link is down */ + if ((link_status & (1<<2)) && + (!(link_status & (1<<15)))) { + ext_phy_link_up = 1; + vars->line_speed = SPEED_10000; + DP(NETIF_MSG_LINK, + "port %x: External link" + " up in 10G\n", params->port); + } else if ((link_status & (1<<1)) && + (!(link_status & (1<<14)))) { + ext_phy_link_up = 1; + vars->line_speed = SPEED_2500; + DP(NETIF_MSG_LINK, + "port %x: External link" + " up in 2.5G\n", params->port); + } else if ((link_status & (1<<0)) && + (!(link_status & (1<<13)))) { + ext_phy_link_up = 1; + vars->line_speed = SPEED_1000; + DP(NETIF_MSG_LINK, + "port %x: External link" + " up in 1G\n", params->port); + } else { + ext_phy_link_up = 0; + DP(NETIF_MSG_LINK, + "port %x: External link" + " is down\n", params->port); + } + } else { + /* See if 1G link is up for the 8072 */ + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + 0x8304, + &an1000_status); + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + 0x8304, + &an1000_status); + if (an1000_status & (1<<1)) { + ext_phy_link_up = 1; + vars->line_speed = SPEED_1000; + DP(NETIF_MSG_LINK, + "port %x: External link" + " up in 1G\n", params->port); + } else if (ext_phy_link_up) { + ext_phy_link_up = 1; + vars->line_speed = SPEED_10000; + DP(NETIF_MSG_LINK, + "port %x: External link" + " up in 10G\n", params->port); + } + } + + + break; + } + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_STATUS, &val2); + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_STATUS, &val1); + DP(NETIF_MSG_LINK, + "10G-base-T LASI status 0x%x->0x%x\n", + val2, val1); + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_STATUS, &val2); + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_STATUS, &val1); + DP(NETIF_MSG_LINK, + "10G-base-T PMA status 0x%x->0x%x\n", + val2, val1); + ext_phy_link_up = ((val1 & 4) == 4); + /* if link is up + * print the AN outcome of the SFX7101 PHY + */ + if (ext_phy_link_up) { + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_MASTER_STATUS, + &val2); + vars->line_speed = SPEED_10000; + DP(NETIF_MSG_LINK, + "SFX7101 AN status 0x%x->Master=%x\n", + val2, + (val2 & (1<<14))); + } + break; + + default: + DP(NETIF_MSG_LINK, "BAD XGXS ext_phy_config 0x%x\n", + params->ext_phy_config); + ext_phy_link_up = 0; + break; + } + + } else { /* SerDes */ + ext_phy_type = SERDES_EXT_PHY_TYPE(params->ext_phy_config); + switch (ext_phy_type) { + case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT: + DP(NETIF_MSG_LINK, "SerDes Direct\n"); + ext_phy_link_up = 1; + break; + + case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482: + DP(NETIF_MSG_LINK, "SerDes 5482\n"); + ext_phy_link_up = 1; + break; + + default: + DP(NETIF_MSG_LINK, + "BAD SerDes ext_phy_config 0x%x\n", + params->ext_phy_config); + ext_phy_link_up = 0; + break; + } + } + + return ext_phy_link_up; +} + +static void bnx2x_link_int_enable(struct link_params *params) +{ + u8 port = params->port; + u32 ext_phy_type; + u32 mask; + struct bnx2x *bp = params->bp; + /* setting the status to report on link up + for either XGXS or SerDes */ + + if (params->switch_cfg == SWITCH_CFG_10G) { + mask = (NIG_MASK_XGXS0_LINK10G | + NIG_MASK_XGXS0_LINK_STATUS); + DP(NETIF_MSG_LINK, "enabled XGXS interrupt\n"); + ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + if ((ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) && + (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE) && + (ext_phy_type != + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN)) { + mask |= NIG_MASK_MI_INT; + DP(NETIF_MSG_LINK, "enabled external phy int\n"); + } + + } else { /* SerDes */ + mask = NIG_MASK_SERDES0_LINK_STATUS; + DP(NETIF_MSG_LINK, "enabled SerDes interrupt\n"); + ext_phy_type = SERDES_EXT_PHY_TYPE(params->ext_phy_config); + if ((ext_phy_type != + PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT) && + (ext_phy_type != + PORT_HW_CFG_SERDES_EXT_PHY_TYPE_NOT_CONN)) { + mask |= NIG_MASK_MI_INT; + DP(NETIF_MSG_LINK, "enabled external phy int\n"); + } + } + bnx2x_bits_en(bp, + NIG_REG_MASK_INTERRUPT_PORT0 + port*4, + mask); + DP(NETIF_MSG_LINK, "port %x, is_xgxs=%x, int_status 0x%x\n", port, + (params->switch_cfg == SWITCH_CFG_10G), + REG_RD(bp, NIG_REG_STATUS_INTERRUPT_PORT0 + port*4)); + + DP(NETIF_MSG_LINK, " int_mask 0x%x, MI_INT %x, SERDES_LINK %x\n", + REG_RD(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4), + REG_RD(bp, NIG_REG_EMAC0_STATUS_MISC_MI_INT + port*0x18), + REG_RD(bp, NIG_REG_SERDES0_STATUS_LINK_STATUS+port*0x3c)); + DP(NETIF_MSG_LINK, " 10G %x, XGXS_LINK %x\n", + REG_RD(bp, NIG_REG_XGXS0_STATUS_LINK10G + port*0x68), + REG_RD(bp, NIG_REG_XGXS0_STATUS_LINK_STATUS + port*0x68)); +} + + +/* + * link management + */ +static void bnx2x_link_int_ack(struct link_params *params, + struct link_vars *vars, u8 is_10g) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + + /* first reset all status + * we assume only one line will be change at a time */ + bnx2x_bits_dis(bp, NIG_REG_STATUS_INTERRUPT_PORT0 + port*4, + (NIG_STATUS_XGXS0_LINK10G | + NIG_STATUS_XGXS0_LINK_STATUS | + NIG_STATUS_SERDES0_LINK_STATUS)); + if (vars->phy_link_up) { + if (is_10g) { + /* Disable the 10G link interrupt + * by writing 1 to the status register + */ + DP(NETIF_MSG_LINK, "10G XGXS phy link up\n"); + bnx2x_bits_en(bp, + NIG_REG_STATUS_INTERRUPT_PORT0 + port*4, + NIG_STATUS_XGXS0_LINK10G); + + } else if (params->switch_cfg == SWITCH_CFG_10G) { + /* Disable the link interrupt + * by writing 1 to the relevant lane + * in the status register + */ + u32 ser_lane = ((params->lane_config & + PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK) >> + PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT); + + DP(NETIF_MSG_LINK, "1G XGXS phy link up\n"); + bnx2x_bits_en(bp, + NIG_REG_STATUS_INTERRUPT_PORT0 + port*4, + ((1 << ser_lane) << + NIG_STATUS_XGXS0_LINK_STATUS_SIZE)); + + } else { /* SerDes */ + DP(NETIF_MSG_LINK, "SerDes phy link up\n"); + /* Disable the link interrupt + * by writing 1 to the status register + */ + bnx2x_bits_en(bp, + NIG_REG_STATUS_INTERRUPT_PORT0 + port*4, + NIG_STATUS_SERDES0_LINK_STATUS); + } + + } else { /* link_down */ + } +} + +static u8 bnx2x_format_ver(u32 num, u8 *str, u16 len) +{ + u8 *str_ptr = str; + u32 mask = 0xf0000000; + u8 shift = 8*4; + u8 digit; + if (len < 10) { + /* Need more then 10chars for this format */ + *str_ptr = '\0'; + return -EINVAL; + } + while (shift > 0) { + + shift -= 4; + digit = ((num & mask) >> shift); + if (digit < 0xa) + *str_ptr = digit + '0'; + else + *str_ptr = digit - 0xa + 'a'; + str_ptr++; + mask = mask >> 4; + if (shift == 4*4) { + *str_ptr = ':'; + str_ptr++; + } + } + *str_ptr = '\0'; + return 0; +} + + +static void bnx2x_turn_on_ef(struct bnx2x *bp, u8 port, u8 ext_phy_addr, + u32 ext_phy_type) +{ + u32 cnt = 0; + u16 ctrl = 0; + /* Enable EMAC0 in to enable MDIO */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, + (MISC_REGISTERS_RESET_REG_2_RST_EMAC0_HARD_CORE << port)); + msleep(5); + + /* take ext phy out of reset */ + bnx2x_set_gpio(bp, + MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_HIGH, + port); + + bnx2x_set_gpio(bp, + MISC_REGISTERS_GPIO_1, + MISC_REGISTERS_GPIO_HIGH, + port); + + /* wait for 5ms */ + msleep(5); + + for (cnt = 0; cnt < 1000; cnt++) { + msleep(1); + bnx2x_cl45_read(bp, port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_CTRL, + &ctrl); + if (!(ctrl & (1<<15))) { + DP(NETIF_MSG_LINK, "Reset completed\n\n"); + break; + } + } +} + +static void bnx2x_turn_off_sf(struct bnx2x *bp, u8 port) +{ + /* put sf to reset */ + bnx2x_set_gpio(bp, + MISC_REGISTERS_GPIO_1, + MISC_REGISTERS_GPIO_LOW, + port); + bnx2x_set_gpio(bp, + MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_LOW, + port); +} + +u8 bnx2x_get_ext_phy_fw_version(struct link_params *params, u8 driver_loaded, + u8 *version, u16 len) +{ + struct bnx2x *bp = params->bp; + u32 ext_phy_type = 0; + u16 val = 0; + u8 ext_phy_addr = 0 ; + u8 status = 0 ; + u32 ver_num; + + if (version == NULL || params == NULL) + return -EINVAL; + + /* reset the returned value to zero */ + ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + + switch (ext_phy_type) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + + if (len < 5) + return -EINVAL; + + /* Take ext phy out of reset */ + if (!driver_loaded) + bnx2x_turn_on_ef(bp, params->port, ext_phy_addr, + ext_phy_type); + + /* wait for 1ms */ + msleep(1); + + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_7101_VER1, &val); + version[2] = (val & 0xFF); + version[3] = ((val & 0xFF00)>>8); + + bnx2x_cl45_read(bp, params->port, + ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, MDIO_PMA_REG_7101_VER2, + &val); + version[0] = (val & 0xFF); + version[1] = ((val & 0xFF00)>>8); + version[4] = '\0'; + + if (!driver_loaded) + bnx2x_turn_off_sf(bp, params->port); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726: + { + /* Take ext phy out of reset */ + if (!driver_loaded) + bnx2x_turn_on_ef(bp, params->port, ext_phy_addr, + ext_phy_type); + + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER1, &val); + ver_num = val<<16; + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER2, &val); + ver_num |= val; + status = bnx2x_format_ver(ver_num, version, len); + break; + } + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: + + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER1, &val); + ver_num = val<<16; + bnx2x_cl45_read(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER2, &val); + ver_num |= val; + status = bnx2x_format_ver(ver_num, version, len); + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE: + DP(NETIF_MSG_LINK, "bnx2x_get_ext_phy_fw_version:" + " type is FAILURE!\n"); + status = -EINVAL; + break; + + default: + break; + } + return status; +} + +static void bnx2x_set_xgxs_loopback(struct link_params *params, + struct link_vars *vars, + u8 is_10g) +{ + u8 port = params->port; + struct bnx2x *bp = params->bp; + + if (is_10g) { + u32 md_devad; + + DP(NETIF_MSG_LINK, "XGXS 10G loopback enable\n"); + + /* change the uni_phy_addr in the nig */ + md_devad = REG_RD(bp, (NIG_REG_XGXS0_CTRL_MD_DEVAD + + port*0x18)); + + REG_WR(bp, NIG_REG_XGXS0_CTRL_MD_DEVAD + port*0x18, 0x5); + + bnx2x_cl45_write(bp, port, 0, + params->phy_addr, + 5, + (MDIO_REG_BANK_AER_BLOCK + + (MDIO_AER_BLOCK_AER_REG & 0xf)), + 0x2800); + + bnx2x_cl45_write(bp, port, 0, + params->phy_addr, + 5, + (MDIO_REG_BANK_CL73_IEEEB0 + + (MDIO_CL73_IEEEB0_CL73_AN_CONTROL & 0xf)), + 0x6041); + + /* set aer mmd back */ + bnx2x_set_aer_mmd(params, vars); + + /* and md_devad */ + REG_WR(bp, NIG_REG_XGXS0_CTRL_MD_DEVAD + port*0x18, + md_devad); + + } else { + u16 mii_control; + + DP(NETIF_MSG_LINK, "XGXS 1G loopback enable\n"); + + CL45_RD_OVER_CL22(bp, port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, + &mii_control); + + CL45_WR_OVER_CL22(bp, port, + params->phy_addr, + MDIO_REG_BANK_COMBO_IEEE0, + MDIO_COMBO_IEEE0_MII_CONTROL, + (mii_control | + MDIO_COMBO_IEEO_MII_CONTROL_LOOPBACK)); + } +} + + +static void bnx2x_ext_phy_loopback(struct link_params *params) +{ + struct bnx2x *bp = params->bp; + u8 ext_phy_addr; + u32 ext_phy_type; + + if (params->switch_cfg == SWITCH_CFG_10G) { + ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + /* CL37 Autoneg Enabled */ + ext_phy_addr = ((params->ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + switch (ext_phy_type) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN: + DP(NETIF_MSG_LINK, + "ext_phy_loopback: We should not get here\n"); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: + DP(NETIF_MSG_LINK, "ext_phy_loopback: 8705\n"); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: + DP(NETIF_MSG_LINK, "ext_phy_loopback: 8706\n"); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726: + DP(NETIF_MSG_LINK, "PMA/PMD ext_phy_loopback: 8726\n"); + bnx2x_cl45_write(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_CTRL, + 0x0001); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + /* SFX7101_XGXS_TEST1 */ + bnx2x_cl45_write(bp, params->port, ext_phy_type, + ext_phy_addr, + MDIO_XS_DEVAD, + MDIO_XS_SFX7101_XGXS_TEST1, + 0x100); + DP(NETIF_MSG_LINK, + "ext_phy_loopback: set ext phy loopback\n"); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: + + break; + } /* switch external PHY type */ + } else { + /* serdes */ + ext_phy_type = SERDES_EXT_PHY_TYPE(params->ext_phy_config); + ext_phy_addr = (params->ext_phy_config & + PORT_HW_CFG_SERDES_EXT_PHY_ADDR_MASK) + >> PORT_HW_CFG_SERDES_EXT_PHY_ADDR_SHIFT; + } +} + + +/* + *------------------------------------------------------------------------ + * bnx2x_override_led_value - + * + * Override the led value of the requsted led + * + *------------------------------------------------------------------------ + */ +u8 bnx2x_override_led_value(struct bnx2x *bp, u8 port, + u32 led_idx, u32 value) +{ + u32 reg_val; + + /* If port 0 then use EMAC0, else use EMAC1*/ + u32 emac_base = (port) ? GRCBASE_EMAC1 : GRCBASE_EMAC0; + + DP(NETIF_MSG_LINK, + "bnx2x_override_led_value() port %x led_idx %d value %d\n", + port, led_idx, value); + + switch (led_idx) { + case 0: /* 10MB led */ + /* Read the current value of the LED register in + the EMAC block */ + reg_val = REG_RD(bp, emac_base + EMAC_REG_EMAC_LED); + /* Set the OVERRIDE bit to 1 */ + reg_val |= EMAC_LED_OVERRIDE; + /* If value is 1, set the 10M_OVERRIDE bit, + otherwise reset it.*/ + reg_val = (value == 1) ? (reg_val | EMAC_LED_10MB_OVERRIDE) : + (reg_val & ~EMAC_LED_10MB_OVERRIDE); + REG_WR(bp, emac_base + EMAC_REG_EMAC_LED, reg_val); + break; + case 1: /*100MB led */ + /*Read the current value of the LED register in + the EMAC block */ + reg_val = REG_RD(bp, emac_base + EMAC_REG_EMAC_LED); + /* Set the OVERRIDE bit to 1 */ + reg_val |= EMAC_LED_OVERRIDE; + /* If value is 1, set the 100M_OVERRIDE bit, + otherwise reset it.*/ + reg_val = (value == 1) ? (reg_val | EMAC_LED_100MB_OVERRIDE) : + (reg_val & ~EMAC_LED_100MB_OVERRIDE); + REG_WR(bp, emac_base + EMAC_REG_EMAC_LED, reg_val); + break; + case 2: /* 1000MB led */ + /* Read the current value of the LED register in the + EMAC block */ + reg_val = REG_RD(bp, emac_base + EMAC_REG_EMAC_LED); + /* Set the OVERRIDE bit to 1 */ + reg_val |= EMAC_LED_OVERRIDE; + /* If value is 1, set the 1000M_OVERRIDE bit, otherwise + reset it. */ + reg_val = (value == 1) ? (reg_val | EMAC_LED_1000MB_OVERRIDE) : + (reg_val & ~EMAC_LED_1000MB_OVERRIDE); + REG_WR(bp, emac_base + EMAC_REG_EMAC_LED, reg_val); + break; + case 3: /* 2500MB led */ + /* Read the current value of the LED register in the + EMAC block*/ + reg_val = REG_RD(bp, emac_base + EMAC_REG_EMAC_LED); + /* Set the OVERRIDE bit to 1 */ + reg_val |= EMAC_LED_OVERRIDE; + /* If value is 1, set the 2500M_OVERRIDE bit, otherwise + reset it.*/ + reg_val = (value == 1) ? (reg_val | EMAC_LED_2500MB_OVERRIDE) : + (reg_val & ~EMAC_LED_2500MB_OVERRIDE); + REG_WR(bp, emac_base + EMAC_REG_EMAC_LED, reg_val); + break; + case 4: /*10G led */ + if (port == 0) { + REG_WR(bp, NIG_REG_LED_10G_P0, + value); + } else { + REG_WR(bp, NIG_REG_LED_10G_P1, + value); + } + break; + case 5: /* TRAFFIC led */ + /* Find if the traffic control is via BMAC or EMAC */ + if (port == 0) + reg_val = REG_RD(bp, NIG_REG_NIG_EMAC0_EN); + else + reg_val = REG_RD(bp, NIG_REG_NIG_EMAC1_EN); + + /* Override the traffic led in the EMAC:*/ + if (reg_val == 1) { + /* Read the current value of the LED register in + the EMAC block */ + reg_val = REG_RD(bp, emac_base + + EMAC_REG_EMAC_LED); + /* Set the TRAFFIC_OVERRIDE bit to 1 */ + reg_val |= EMAC_LED_OVERRIDE; + /* If value is 1, set the TRAFFIC bit, otherwise + reset it.*/ + reg_val = (value == 1) ? (reg_val | EMAC_LED_TRAFFIC) : + (reg_val & ~EMAC_LED_TRAFFIC); + REG_WR(bp, emac_base + EMAC_REG_EMAC_LED, reg_val); + } else { /* Override the traffic led in the BMAC: */ + REG_WR(bp, NIG_REG_LED_CONTROL_OVERRIDE_TRAFFIC_P0 + + port*4, 1); + REG_WR(bp, NIG_REG_LED_CONTROL_TRAFFIC_P0 + port*4, + value); + } + break; + default: + DP(NETIF_MSG_LINK, + "bnx2x_override_led_value() unknown led index %d " + "(should be 0-5)\n", led_idx); + return -EINVAL; + } + + return 0; +} + + +u8 bnx2x_set_led(struct bnx2x *bp, u8 port, u8 mode, u32 speed, + u16 hw_led_mode, u32 chip_id) +{ + u8 rc = 0; + u32 tmp; + u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; + DP(NETIF_MSG_LINK, "bnx2x_set_led: port %x, mode %d\n", port, mode); + DP(NETIF_MSG_LINK, "speed 0x%x, hw_led_mode 0x%x\n", + speed, hw_led_mode); + switch (mode) { + case LED_MODE_OFF: + REG_WR(bp, NIG_REG_LED_10G_P0 + port*4, 0); + REG_WR(bp, NIG_REG_LED_MODE_P0 + port*4, + SHARED_HW_CFG_LED_MAC1); + + tmp = EMAC_RD(bp, EMAC_REG_EMAC_LED); + EMAC_WR(bp, EMAC_REG_EMAC_LED, (tmp | EMAC_LED_OVERRIDE)); + break; + + case LED_MODE_OPER: + REG_WR(bp, NIG_REG_LED_MODE_P0 + port*4, hw_led_mode); + REG_WR(bp, NIG_REG_LED_CONTROL_OVERRIDE_TRAFFIC_P0 + + port*4, 0); + /* Set blinking rate to ~15.9Hz */ + REG_WR(bp, NIG_REG_LED_CONTROL_BLINK_RATE_P0 + port*4, + LED_BLINK_RATE_VAL); + REG_WR(bp, NIG_REG_LED_CONTROL_BLINK_RATE_ENA_P0 + + port*4, 1); + tmp = EMAC_RD(bp, EMAC_REG_EMAC_LED); + EMAC_WR(bp, EMAC_REG_EMAC_LED, + (tmp & (~EMAC_LED_OVERRIDE))); + + if (!CHIP_IS_E1H(bp) && + ((speed == SPEED_2500) || + (speed == SPEED_1000) || + (speed == SPEED_100) || + (speed == SPEED_10))) { + /* On Everest 1 Ax chip versions for speeds less than + 10G LED scheme is different */ + REG_WR(bp, NIG_REG_LED_CONTROL_OVERRIDE_TRAFFIC_P0 + + port*4, 1); + REG_WR(bp, NIG_REG_LED_CONTROL_TRAFFIC_P0 + + port*4, 0); + REG_WR(bp, NIG_REG_LED_CONTROL_BLINK_TRAFFIC_P0 + + port*4, 1); + } + break; + + default: + rc = -EINVAL; + DP(NETIF_MSG_LINK, "bnx2x_set_led: Invalid led mode %d\n", + mode); + break; + } + return rc; + +} + +u8 bnx2x_test_link(struct link_params *params, struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u16 gp_status = 0; + + CL45_RD_OVER_CL22(bp, params->port, + params->phy_addr, + MDIO_REG_BANK_GP_STATUS, + MDIO_GP_STATUS_TOP_AN_STATUS1, + &gp_status); + /* link is up only if both local phy and external phy are up */ + if ((gp_status & MDIO_GP_STATUS_TOP_AN_STATUS1_LINK_STATUS) && + bnx2x_ext_phy_is_link_up(params, vars)) + return 0; + + return -ESRCH; +} + +static u8 bnx2x_link_initialize(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u8 rc = 0; + u8 non_ext_phy; + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + /* Activate the external PHY */ + bnx2x_ext_phy_reset(params, vars); + + bnx2x_set_aer_mmd(params, vars); + + if (vars->phy_flags & PHY_XGXS_FLAG) + bnx2x_set_master_ln(params); + + rc = bnx2x_reset_unicore(params); + /* reset the SerDes and wait for reset bit return low */ + if (rc != 0) + return rc; + + bnx2x_set_aer_mmd(params, vars); + + /* setting the masterLn_def again after the reset */ + if (vars->phy_flags & PHY_XGXS_FLAG) { + bnx2x_set_master_ln(params); + bnx2x_set_swap_lanes(params); + } + + if (vars->phy_flags & PHY_XGXS_FLAG) { + if (params->req_line_speed && + ((params->req_line_speed == SPEED_100) || + (params->req_line_speed == SPEED_10))) { + vars->phy_flags |= PHY_SGMII_FLAG; + } else { + vars->phy_flags &= ~PHY_SGMII_FLAG; + } + } + /* In case of external phy existance, the line speed would be the + line speed linked up by the external phy. In case it is direct only, + then the line_speed during initialization will be equal to the + req_line_speed*/ + vars->line_speed = params->req_line_speed; + + bnx2x_calc_ieee_aneg_adv(params, &vars->ieee_fc); + + /* init ext phy and enable link state int */ + non_ext_phy = ((ext_phy_type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) || + (params->loopback_mode == LOOPBACK_XGXS_10) || + (params->loopback_mode == LOOPBACK_EXT_PHY)); + + if (non_ext_phy || + (ext_phy_type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705) || + (ext_phy_type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726)) { + if (params->req_line_speed == SPEED_AUTO_NEG) + bnx2x_set_parallel_detection(params, vars->phy_flags); + bnx2x_init_internal_phy(params, vars); + } + + if (!non_ext_phy) + rc |= bnx2x_ext_phy_init(params, vars); + + bnx2x_bits_dis(bp, NIG_REG_STATUS_INTERRUPT_PORT0 + port*4, + (NIG_STATUS_XGXS0_LINK10G | + NIG_STATUS_XGXS0_LINK_STATUS | + NIG_STATUS_SERDES0_LINK_STATUS)); + + return rc; + +} + + +u8 bnx2x_phy_init(struct link_params *params, struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + + u32 val; + DP(NETIF_MSG_LINK, "Phy Initialization started \n"); + DP(NETIF_MSG_LINK, "req_speed = %d, req_flowctrl=%d\n", + params->req_line_speed, params->req_flow_ctrl); + vars->link_status = 0; + vars->phy_link_up = 0; + vars->link_up = 0; + vars->line_speed = 0; + vars->duplex = DUPLEX_FULL; + vars->flow_ctrl = FLOW_CTRL_NONE; + vars->mac_type = MAC_TYPE_NONE; + + if (params->switch_cfg == SWITCH_CFG_1G) + vars->phy_flags = PHY_SERDES_FLAG; + else + vars->phy_flags = PHY_XGXS_FLAG; + + + /* disable attentions */ + bnx2x_bits_dis(bp, NIG_REG_MASK_INTERRUPT_PORT0 + params->port*4, + (NIG_MASK_XGXS0_LINK_STATUS | + NIG_MASK_XGXS0_LINK10G | + NIG_MASK_SERDES0_LINK_STATUS | + NIG_MASK_MI_INT)); + + bnx2x_emac_init(params, vars); + + if (CHIP_REV_IS_FPGA(bp)) { + vars->link_up = 1; + vars->line_speed = SPEED_10000; + vars->duplex = DUPLEX_FULL; + vars->flow_ctrl = FLOW_CTRL_NONE; + vars->link_status = (LINK_STATUS_LINK_UP | LINK_10GTFD); + /* enable on E1.5 FPGA */ + if (CHIP_IS_E1H(bp)) { + vars->flow_ctrl |= + (FLOW_CTRL_TX | FLOW_CTRL_RX); + vars->link_status |= + (LINK_STATUS_TX_FLOW_CONTROL_ENABLED | + LINK_STATUS_RX_FLOW_CONTROL_ENABLED); + } + + bnx2x_emac_enable(params, vars, 0); + bnx2x_pbf_update(params, vars->flow_ctrl, vars->line_speed); + /* disable drain */ + REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + + params->port*4, 0); + + /* update shared memory */ + bnx2x_update_mng(params, vars->link_status); + + return 0; + + } else + if (CHIP_REV_IS_EMUL(bp)) { + + vars->link_up = 1; + vars->line_speed = SPEED_10000; + vars->duplex = DUPLEX_FULL; + vars->flow_ctrl = FLOW_CTRL_NONE; + vars->link_status = (LINK_STATUS_LINK_UP | LINK_10GTFD); + + bnx2x_bmac_enable(params, vars, 0); + + bnx2x_pbf_update(params, vars->flow_ctrl, vars->line_speed); + /* Disable drain */ + REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + + params->port*4, 0); + + /* update shared memory */ + bnx2x_update_mng(params, vars->link_status); + + return 0; + + } else + if (params->loopback_mode == LOOPBACK_BMAC) { + vars->link_up = 1; + vars->line_speed = SPEED_10000; + vars->duplex = DUPLEX_FULL; + vars->flow_ctrl = FLOW_CTRL_NONE; + vars->mac_type = MAC_TYPE_BMAC; + + vars->phy_flags = PHY_XGXS_FLAG; + + bnx2x_phy_deassert(params, vars->phy_flags); + /* set bmac loopback */ + bnx2x_bmac_enable(params, vars, 1); + + REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + + params->port*4, 0); + } else if (params->loopback_mode == LOOPBACK_EMAC) { + vars->link_up = 1; + vars->line_speed = SPEED_1000; + vars->duplex = DUPLEX_FULL; + vars->flow_ctrl = FLOW_CTRL_NONE; + vars->mac_type = MAC_TYPE_EMAC; + + vars->phy_flags = PHY_XGXS_FLAG; + + bnx2x_phy_deassert(params, vars->phy_flags); + /* set bmac loopback */ + bnx2x_emac_enable(params, vars, 1); + bnx2x_emac_program(params, vars->line_speed, + vars->duplex); + REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + + params->port*4, 0); + } else if ((params->loopback_mode == LOOPBACK_XGXS_10) || + (params->loopback_mode == LOOPBACK_EXT_PHY)) { + vars->link_up = 1; + vars->line_speed = SPEED_10000; + vars->duplex = DUPLEX_FULL; + vars->flow_ctrl = FLOW_CTRL_NONE; + + vars->phy_flags = PHY_XGXS_FLAG; + + val = REG_RD(bp, + NIG_REG_XGXS0_CTRL_PHY_ADDR+ + params->port*0x18); + params->phy_addr = (u8)val; + + bnx2x_phy_deassert(params, vars->phy_flags); + bnx2x_link_initialize(params, vars); + + vars->mac_type = MAC_TYPE_BMAC; + + bnx2x_bmac_enable(params, vars, 0); + + if (params->loopback_mode == LOOPBACK_XGXS_10) { + /* set 10G XGXS loopback */ + bnx2x_set_xgxs_loopback(params, vars, 1); + } else { + /* set external phy loopback */ + bnx2x_ext_phy_loopback(params); + } + REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + + params->port*4, 0); + } else + /* No loopback */ + { + + bnx2x_phy_deassert(params, vars->phy_flags); + switch (params->switch_cfg) { + case SWITCH_CFG_1G: + vars->phy_flags |= PHY_SERDES_FLAG; + if ((params->ext_phy_config & + PORT_HW_CFG_SERDES_EXT_PHY_TYPE_MASK) == + PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482) { + vars->phy_flags |= + PHY_SGMII_FLAG; + } + + val = REG_RD(bp, + NIG_REG_SERDES0_CTRL_PHY_ADDR+ + params->port*0x10); + + params->phy_addr = (u8)val; + + break; + case SWITCH_CFG_10G: + vars->phy_flags |= PHY_XGXS_FLAG; + val = REG_RD(bp, + NIG_REG_XGXS0_CTRL_PHY_ADDR+ + params->port*0x18); + params->phy_addr = (u8)val; + + break; + default: + DP(NETIF_MSG_LINK, "Invalid switch_cfg\n"); + return -EINVAL; + break; + } + + bnx2x_link_initialize(params, vars); + msleep(30); + bnx2x_link_int_enable(params); + } + return 0; +} + +u8 bnx2x_link_reset(struct link_params *params, struct link_vars *vars) +{ + + struct bnx2x *bp = params->bp; + u32 ext_phy_config = params->ext_phy_config; + u16 hw_led_mode = params->hw_led_mode; + u32 chip_id = params->chip_id; + u8 port = params->port; + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(ext_phy_config); + /* disable attentions */ + + vars->link_status = 0; + bnx2x_update_mng(params, vars->link_status); + bnx2x_bits_dis(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, + (NIG_MASK_XGXS0_LINK_STATUS | + NIG_MASK_XGXS0_LINK10G | + NIG_MASK_SERDES0_LINK_STATUS | + NIG_MASK_MI_INT)); + + /* activate nig drain */ + REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + port*4, 1); + + /* disable nig egress interface */ + REG_WR(bp, NIG_REG_BMAC0_OUT_EN + port*4, 0); + REG_WR(bp, NIG_REG_EGRESS_EMAC0_OUT_EN + port*4, 0); + + /* Stop BigMac rx */ + bnx2x_bmac_rx_disable(bp, port); + + /* disable emac */ + REG_WR(bp, NIG_REG_NIG_EMAC0_EN + port*4, 0); + + msleep(10); + /* The PHY reset is controled by GPIO 1 + * Hold it as vars low + */ + /* clear link led */ + bnx2x_set_led(bp, port, LED_MODE_OFF, 0, hw_led_mode, chip_id); + if (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) { + if ((ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072) && + (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073) && + (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726)) { + /* HW reset */ + + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, + MISC_REGISTERS_GPIO_OUTPUT_LOW, + port); + + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_OUTPUT_LOW, + port); + + DP(NETIF_MSG_LINK, "reset external PHY\n"); + } else if (ext_phy_type == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073) { + DP(NETIF_MSG_LINK, "Setting 8073 port %d into " + "low power mode\n", + port); + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_OUTPUT_LOW, + port); + } + } + /* reset the SerDes/XGXS */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_3_CLEAR, + (0x1ff << (port*16))); + + /* reset BigMac */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, + (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); + + /* disable nig ingress interface */ + REG_WR(bp, NIG_REG_BMAC0_IN_EN + port*4, 0); + REG_WR(bp, NIG_REG_EMAC0_IN_EN + port*4, 0); + REG_WR(bp, NIG_REG_BMAC0_OUT_EN + port*4, 0); + REG_WR(bp, NIG_REG_EGRESS_EMAC0_OUT_EN + port*4, 0); + vars->link_up = 0; + return 0; +} + +static u8 bnx2x_update_link_down(struct link_params *params, + struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + DP(NETIF_MSG_LINK, "Port %x: Link is down\n", port); + bnx2x_set_led(bp, port, LED_MODE_OFF, + 0, params->hw_led_mode, + params->chip_id); + + /* indicate no mac active */ + vars->mac_type = MAC_TYPE_NONE; + + /* update shared memory */ + vars->link_status = 0; + vars->line_speed = 0; + bnx2x_update_mng(params, vars->link_status); + + /* activate nig drain */ + REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + port*4, 1); + + /* disable emac */ + REG_WR(bp, NIG_REG_NIG_EMAC0_EN + port*4, 0); + + /* reset BigMac */ + bnx2x_bmac_rx_disable(bp, params->port); + REG_WR(bp, GRCBASE_MISC + + MISC_REGISTERS_RESET_REG_2_CLEAR, + (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); + return 0; +} + +static u8 bnx2x_update_link_up(struct link_params *params, + struct link_vars *vars, + u8 link_10g, u32 gp_status) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u8 rc = 0; + vars->link_status |= LINK_STATUS_LINK_UP; + if (link_10g) { + bnx2x_bmac_enable(params, vars, 0); + bnx2x_set_led(bp, port, LED_MODE_OPER, + SPEED_10000, params->hw_led_mode, + params->chip_id); + + } else { + bnx2x_emac_enable(params, vars, 0); + rc = bnx2x_emac_program(params, vars->line_speed, + vars->duplex); + + /* AN complete? */ + if (gp_status & MDIO_AN_CL73_OR_37_COMPLETE) { + if (!(vars->phy_flags & + PHY_SGMII_FLAG)) + bnx2x_set_gmii_tx_driver(params); + } + } + + /* PBF - link up */ + rc |= bnx2x_pbf_update(params, vars->flow_ctrl, + vars->line_speed); + + /* disable drain */ + REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + port*4, 0); + + /* update shared memory */ + bnx2x_update_mng(params, vars->link_status); + msleep(20); + return rc; +} +/* This function should called upon link interrupt */ +/* In case vars->link_up, driver needs to + 1. Update the pbf + 2. Disable drain + 3. Update the shared memory + 4. Indicate link up + 5. Set LEDs + Otherwise, + 1. Update shared memory + 2. Reset BigMac + 3. Report link down + 4. Unset LEDs +*/ +u8 bnx2x_link_update(struct link_params *params, struct link_vars *vars) +{ + struct bnx2x *bp = params->bp; + u8 port = params->port; + u16 gp_status; + u8 link_10g; + u8 ext_phy_link_up, rc = 0; + u32 ext_phy_type; + + DP(NETIF_MSG_LINK, "port %x, XGXS?%x, int_status 0x%x\n", + port, + (vars->phy_flags & PHY_XGXS_FLAG), + REG_RD(bp, NIG_REG_STATUS_INTERRUPT_PORT0 + port*4)); + + DP(NETIF_MSG_LINK, "int_mask 0x%x MI_INT %x, SERDES_LINK %x\n", + REG_RD(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4), + REG_RD(bp, NIG_REG_EMAC0_STATUS_MISC_MI_INT + port*0x18), + REG_RD(bp, NIG_REG_SERDES0_STATUS_LINK_STATUS + port*0x3c)); + + DP(NETIF_MSG_LINK, " 10G %x, XGXS_LINK %x\n", + REG_RD(bp, NIG_REG_XGXS0_STATUS_LINK10G + port*0x68), + REG_RD(bp, NIG_REG_XGXS0_STATUS_LINK_STATUS + port*0x68)); + + /* disable emac */ + REG_WR(bp, NIG_REG_NIG_EMAC0_EN + port*4, 0); + + ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); + + /* Check external link change only for non-direct */ + ext_phy_link_up = bnx2x_ext_phy_is_link_up(params, vars); + + /* Read gp_status */ + CL45_RD_OVER_CL22(bp, port, params->phy_addr, + MDIO_REG_BANK_GP_STATUS, + MDIO_GP_STATUS_TOP_AN_STATUS1, + &gp_status); + + rc = bnx2x_link_settings_status(params, vars, gp_status); + if (rc != 0) + return rc; + + /* anything 10 and over uses the bmac */ + link_10g = ((vars->line_speed == SPEED_10000) || + (vars->line_speed == SPEED_12000) || + (vars->line_speed == SPEED_12500) || + (vars->line_speed == SPEED_13000) || + (vars->line_speed == SPEED_15000) || + (vars->line_speed == SPEED_16000)); + + bnx2x_link_int_ack(params, vars, link_10g); + + /* In case external phy link is up, and internal link is down + ( not initialized yet probably after link initialization, it needs + to be initialized. + Note that after link down-up as result of cable plug, + the xgxs link would probably become up again without the need to + initialize it*/ + + if ((ext_phy_type != PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT) && + (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705) && + (ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726) && + (ext_phy_link_up && !vars->phy_link_up)) + bnx2x_init_internal_phy(params, vars); + + /* link is up only if both local phy and external phy are up */ + vars->link_up = (ext_phy_link_up && vars->phy_link_up); + + if (vars->link_up) + rc = bnx2x_update_link_up(params, vars, link_10g, gp_status); + else + rc = bnx2x_update_link_down(params, vars); + + return rc; +} + +static u8 bnx2x_8073_common_init_phy(struct bnx2x *bp, u32 shmem_base) +{ + u8 ext_phy_addr[PORT_MAX]; + u16 val; + s8 port; + + /* PART1 - Reset both phys */ + for (port = PORT_MAX - 1; port >= PORT_0; port--) { + /* Extract the ext phy address for the port */ + u32 ext_phy_config = REG_RD(bp, shmem_base + + offsetof(struct shmem_region, + dev_info.port_hw_config[port].external_phy_config)); + + /* disable attentions */ + bnx2x_bits_dis(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, + (NIG_MASK_XGXS0_LINK_STATUS | + NIG_MASK_XGXS0_LINK10G | + NIG_MASK_SERDES0_LINK_STATUS | + NIG_MASK_MI_INT)); + + ext_phy_addr[port] = + ((ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + + /* Need to take the phy out of low power mode in order + to write to access its registers */ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_OUTPUT_HIGH, port); + + /* Reset the phy */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr[port], + MDIO_PMA_DEVAD, + MDIO_PMA_REG_CTRL, + 1<<15); + } + + /* Add delay of 150ms after reset */ + msleep(150); + + /* PART2 - Download firmware to both phys */ + for (port = PORT_MAX - 1; port >= PORT_0; port--) { + u16 fw_ver1; + + bnx2x_bcm8073_external_rom_boot(bp, port, + ext_phy_addr[port]); + + bnx2x_cl45_read(bp, port, PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr[port], + MDIO_PMA_DEVAD, + MDIO_PMA_REG_ROM_VER1, &fw_ver1); + if (fw_ver1 == 0 || fw_ver1 == 0x4321) { + DP(NETIF_MSG_LINK, + "bnx2x_8073_common_init_phy port %x:" + "Download failed. fw version = 0x%x\n", + port, fw_ver1); + return -EINVAL; + } + + /* Only set bit 10 = 1 (Tx power down) */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr[port], + MDIO_PMA_DEVAD, + MDIO_PMA_REG_TX_POWER_DOWN, &val); + + /* Phase1 of TX_POWER_DOWN reset */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr[port], + MDIO_PMA_DEVAD, + MDIO_PMA_REG_TX_POWER_DOWN, + (val | 1<<10)); + } + + /* Toggle Transmitter: Power down and then up with 600ms + delay between */ + msleep(600); + + /* PART3 - complete TX_POWER_DOWN process, and set GPIO2 back to low */ + for (port = PORT_MAX - 1; port >= PORT_0; port--) { + /* Phase2 of POWER_DOWN_RESET */ + /* Release bit 10 (Release Tx power down) */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr[port], + MDIO_PMA_DEVAD, + MDIO_PMA_REG_TX_POWER_DOWN, &val); + + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr[port], + MDIO_PMA_DEVAD, + MDIO_PMA_REG_TX_POWER_DOWN, (val & (~(1<<10)))); + msleep(15); + + /* Read modify write the SPI-ROM version select register */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr[port], + MDIO_PMA_DEVAD, + MDIO_PMA_REG_EDC_FFE_MAIN, &val); + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr[port], + MDIO_PMA_DEVAD, + MDIO_PMA_REG_EDC_FFE_MAIN, (val | (1<<12))); + + /* set GPIO2 back to LOW */ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_OUTPUT_LOW, port); + } + return 0; + +} + +u8 bnx2x_common_init_phy(struct bnx2x *bp, u32 shmem_base) +{ + u8 rc = 0; + u32 ext_phy_type; + + DP(NETIF_MSG_LINK, "bnx2x_common_init_phy\n"); + + /* Read the ext_phy_type for arbitrary port(0) */ + ext_phy_type = XGXS_EXT_PHY_TYPE( + REG_RD(bp, shmem_base + + offsetof(struct shmem_region, + dev_info.port_hw_config[0].external_phy_config))); + + switch (ext_phy_type) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: + { + rc = bnx2x_8073_common_init_phy(bp, shmem_base); + break; + } + default: + DP(NETIF_MSG_LINK, + "bnx2x_common_init_phy: ext_phy 0x%x not required\n", + ext_phy_type); + break; + } + + return rc; +} + + + +static void bnx2x_sfx7101_sp_sw_reset(struct bnx2x *bp, u8 port, u8 phy_addr) +{ + u16 val, cnt; + + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_7101_RESET, &val); + + for (cnt = 0; cnt < 10; cnt++) { + msleep(50); + /* Writes a self-clearing reset */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_7101_RESET, + (val | (1<<15))); + /* Wait for clear */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_7101_RESET, &val); + + if ((val & (1<<15)) == 0) + break; + } +} +#define RESERVED_SIZE 256 +/* max application is 160K bytes - data at end of RAM */ +#define MAX_APP_SIZE (160*1024 - RESERVED_SIZE) + +/* Header is 14 bytes */ +#define HEADER_SIZE 14 +#define DATA_OFFSET HEADER_SIZE + +#define SPI_START_TRANSFER(bp, port, ext_phy_addr) \ + bnx2x_cl45_write(bp, port, PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, \ + ext_phy_addr, \ + MDIO_PCS_DEVAD, \ + MDIO_PCS_REG_7101_SPI_CTRL_ADDR, 1) + +/************************************************************************/ +/* Function: bnx2x_8073_flash_download */ +/* Description : Load SPI EEPROM through BCM8073. */ +/* */ +/************************************************************************/ + +#define WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wrdata, rddata) \ + {if (write_message_8073(bp, port, ext_phy_addr, wrdata, rddata) \ + != 0) \ + return -EINVAL; } + +static u8 write_message_8073(struct bnx2x *bp, u8 port, + u8 ext_phy_addr, + u16 wrdata, u16 *rddata) +{ + u16 tmp_data = 0; + u16 i = 0; + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_M8051_MSGOUT_REG, &tmp_data); + + /* Write SPI Control Register Write Command.*/ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_M8051_MSGIN_REG, wrdata); + + /* Wait For LASI To be asserted when M8051 writes Next Parameter To + MSG_OUT Register TBD wait (xlasi_ch1 === 1'b0); + Above wait can also be done by polling 9005, bit 2 As bellow. */ + + for (i = 0; i < UPGRADE_TIMEOUT_8073; i++) { + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_STATUS, &tmp_data); + if ((tmp_data & (1<<2)) != 0) {/* bit 2 is Rx Alarm for LASI.*/ + break; + } + msleep(60); + } + + if (i == UPGRADE_TIMEOUT_8073) { + DP(NETIF_MSG_LINK, "Failed to get LASI indication. Aborting\n"); + return -EINVAL; + } + + /* Read Message out register. 1.CA13 */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_M8051_MSGOUT_REG, &tmp_data); + *rddata = tmp_data; + + /* Clear LASI Message Out Status. 1.9003*/ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_ALARM, &tmp_data); + return 0; +} + +/* Programs an image to DSP's flash via the SPI port*/ +static u8 bnx2x_8073_flash_download(struct bnx2x *bp, u8 port, + u8 ext_phy_addr, + char *code_ptr, u32 size) { + + u16 tmp, rd_data, wr_data; + u8 count, spi_ready, rc = 0; + u32 i, data_index; + u16 misc_ctrl; + u16 retry_count1, retry_count2, retry_count3; + + /* disable attentions */ + REG_WR(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, 0); + + /* activate nig drain */ + REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + port*4, 1); + + /* disable nig egress interface */ + REG_WR(bp, NIG_REG_BMAC0_OUT_EN + port*4, 0); + REG_WR(bp, NIG_REG_EGRESS_EMAC0_OUT_EN + port*4, 0); + + /* Stop BigMac rx */ + bnx2x_bmac_rx_disable(bp, port); + + /* disable emac */ + REG_WR(bp, NIG_REG_NIG_EMAC0_EN + port*4, 0); + + msleep(10); + /* The PHY reset is controled by GPIO 1 + * Hold it as vars low + */ + + /* reset the SerDes/XGXS */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_3_CLEAR, + (0x1ff << (port*16))); + + /* reset BigMac */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, + (MISC_REGISTERS_RESET_REG_2_RST_BMAC0 << port)); + + /* disable nig ingress interface */ + REG_WR(bp, NIG_REG_BMAC0_IN_EN + port*4, 0); + REG_WR(bp, NIG_REG_EMAC0_IN_EN + port*4, 0); + REG_WR(bp, NIG_REG_BMAC0_OUT_EN + port*4, 0); + REG_WR(bp, NIG_REG_EGRESS_EMAC0_OUT_EN + port*4, 0); + + DP(NETIF_MSG_LINK, "bnx2x_8073_flash_download: size=0x%x\n", size); + + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_AN_DEVAD, + MDIO_AN_REG_CTRL, 0); + + /* Enable the LASI For Message out */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL1, &misc_ctrl); + + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL1, (misc_ctrl | (1<<0))); + + /* Read LASI Status registers To clear initial Failure status. */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_ALARM, &tmp); + + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_TX_ALARM, &tmp); + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_STATUS, &tmp); + + /* Enable the LASI For Message out */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_ALARM_CTRL, 0x4); + + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_LASI_CTRL, 0x4); + + + /* Read Any Residual Message out register.1.CA13*/ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_M8051_MSGOUT_REG, &rd_data); + + /* Clear LASI Message Out Status. 1.9003 */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_RX_ALARM, &rd_data); + + for (data_index = 0; data_index < BUF_SIZE_8073; + data_index += WR_BLOCK_SIZE) { + /* Setup SPI Controller + Write SPI Control Register Write Command. */ + + count = 2; /* Write to C400, C401, C402, C403 Registers.*/ + wr_data = ((WR_CPU_CTRL_FIFO*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -2 Register Address.*/ + wr_data = SPI_CTRL_2_L; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -2 Register Word-1 */ + /* C400 = 0 for 0 Fill Byte. C401 = 02 for SPI Clcok to + be divide by 2 and little endian fifo.*/ + wr_data = 0x8200; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -2 Register Word-2.*/ + /* C402 = 0, clear all status. C403 = 1, + to enable Done Status.*/ + wr_data = 0x0100; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Fill-up SPI Transmit Fifo.*/ + /* Write SPI Control Register Write Command. */ + /* Write To Transmit Fifo D000-onwards.*/ + count = 4 + (WR_BLOCK_SIZE/2); + wr_data = ((WR_CPU_CTRL_FIFO*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write Tx Fifo Register Address.*/ + wr_data = SPI_TXFIFO; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Tx Fifo Control Word-1.*/ + /* {8'h1, MSGTYPE_HWR}; // D000 = Only 1 byte Message + ( 1byte to transmit for WREN opcode).*/ + wr_data = ((1*0x0100) | MSGTYPE_HWR); + /* D001 = Write Message And Higher byte of Transfer Size */ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + /* Write SPI Tx Fifo Control Word-2.*/ + /* D002 = WREN Opcode For transmit.*/ + wr_data = ((MSGTYPE_HWR*0x0100) | WREN_OPCODE); + /* D003 = Total byte To be transmited + (64 + 3 For command, And address).*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Tx Fifo Control Word-3.*/ + /* D004 = Second Message is also WRITE Message.*/ + wr_data = ((WR_OPCODE*0x0100) | (0x3 + WR_BLOCK_SIZE)); + /* D005 = Write Opcode.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Tx Fifo Control Word-4. */ + /* D006 = SPI EEPROM Dest Addr (higher byte sent out first).*/ + /* D007 = SPI EEPROM Dest Addr (lower byte sent out later).*/ + wr_data = (((data_index & 0x00FF)*0x0100) | + ((data_index & 0xFF00)/0x0100)); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + for (i = 0; i < WR_BLOCK_SIZE; i += 2) { + /* Write SPI Tx Fifo Data Word-4.*/ + /* D008 = Low Byte. D009 = High Byte.*/ + wr_data = (u16)((code_ptr[i+data_index+1]*0x0100) | + (code_ptr[i+data_index] & 0x00FF)); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, + &rd_data); + } + + DP(NETIF_MSG_LINK, " 64bytes filled in SPIfifo is done 0x%x\n", + data_index); + + /* Let the user know something's going on every 1024 bytes.*/ + if ((data_index % 1024) == 0) + DP(NETIF_MSG_LINK, "Download %d%%\n", data_index/size); + + /* Set-up SPI Controller To Transmit.*/ + /* Write SPI Control Register Write Command.*/ + /* Write to SPI Control Register C000 onwards.*/ + count = 2; + /* {CLC_WR_CPU_CTRL_FIFO, count};*/ + wr_data = ((WR_CPU_CTRL_FIFO*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -1 Register Address.*/ + wr_data = SPI_CTRL_1_L; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -1 Register Word-1.*/ + /* C000 = 1 to clear CMD Done Status. C001 = 1 to clear CMD Done + INT Status.*/ + wr_data = 0x0501; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -1 Register Word-2.*/ + /* C002 = 3, Start Immidiate Command. C003 = 0, No Prepend byte + for Write.*/ + wr_data = 0x0003; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Wait For 64 bytes To be written.*/ + rd_data = 0; + retry_count1 = UPGRADE_TIMEOUT_8073; + while (((rd_data & 0x0100) == 0) && (retry_count1 > 0)) { + /* Write SPI Control Register Read Command.*/ + retry_count1--; + count = 1;/* Read from SPI Controller register C000.*/ + wr_data = ((RD_CPU_CTRL_REGS*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, + &rd_data); + + /* Write SPI Control -1 Register Address.*/ + wr_data = SPI_CTRL_1_L; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, + &rd_data); + msleep(50); + DP(NETIF_MSG_LINK, "INFO -- Status Register = 0x%x\n", + rd_data); + } + if (retry_count1 == 0) { + DP(NETIF_MSG_LINK, + "Error: Too many retries writing of SPI" + "Controller\n"); + return -EINVAL; + } + spi_ready = 1; + retry_count2 = UPGRADE_TIMEOUT_8073; + while ((spi_ready == 1) && (retry_count2 > 0)) { + retry_count2--; + /* Set-up SPI Controller To Receive SPI EEPROM Status.*/ + /* Write SPI Control Register Write Command. */ + /* Write to SPI Control Register C000 onwards.*/ + count = 1; + wr_data = ((WR_CPU_CTRL_REGS*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control -2 Register Address.*/ + wr_data = SPI_CTRL_2_H; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control -2 Register Word-2.*/ + /* C402 = 0, clear all status. C403 = 1, to + wr_data = 0x0100 ; + enable Done Status.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Fill-up SPI Transmit Fifo To check SPI Status.*/ + /* Write SPI Control Register Write Command.*/ + count = 2; /* Write to Transmit Fifo D000-onwards.*/ + wr_data = ((WR_CPU_CTRL_FIFO*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write Tx Fifo Register Address.*/ + wr_data = SPI_TXFIFO; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Tx Fifo Control Word-1.*/ + /* D000 = Only 1 byte + wr_data = ((1*0x0100) | MSGTYPE_HRD); + Message ( 1byte to transmit for RDSR opcode).*/ + + /* D001 = Write Message And Higher byte + of Transfer Size.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Tx Fifo Control Word-2.*/ + /* D002 = RDSR Opcode for transmit*/ + wr_data = RDSR_OPCODE; + + /* D003 = NOP */ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control Register Write Command.*/ + /* Write to SPI Control Register C000 onwards.*/ + count = 2; + wr_data = ((WR_CPU_CTRL_FIFO*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control -1 Register Address.*/ + wr_data = SPI_CTRL_1_L; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control -1 Register Word-1.*/ + wr_data = 0x0101; /* C000 = 1 to clear CMD Done Status. + C001 = 1 to clear CMD Done INT Status.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control -1 Register Word-2.*/ + wr_data = 0x0100;/* C002 = 0, No Command. C003 = 1, 1 + byte prepend for Read.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control Register Write Command.*/ + /* Write to SPI Control Register C000 onwards.*/ + count = 1; + wr_data = ((WR_CPU_CTRL_REGS*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control -1 Register Address.*/ + wr_data = SPI_CTRL_1_H; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control -1 Register Word-2.*/ + wr_data = 0x0103; /* C002 = 3, Start Immidiate Command. + C003 = 1, 1 byte prepend for Read.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + DP(NETIF_MSG_LINK, + "***Wait for 64 bytes to be written 0x%x\n", + data_index); + + /* Wait For 64 bytes To be written. */ + rd_data = 0x0000; + retry_count3 = UPGRADE_TIMEOUT_8073; + while (((rd_data & 0x0100) == 0) && + (retry_count3 > 0)) { + retry_count3--; + /* Write SPI Control Register Read Command.*/ + /*Read from SPI Controller register C000.*/ + count = 1; + wr_data = ((RD_CPU_CTRL_REGS*0x0100) | + count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control -1 Register Address.*/ + wr_data = SPI_CTRL_1_L; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + msleep(50); + DP(NETIF_MSG_LINK, + "INFO -- Status Register = 0x%x\n", + rd_data); + } + if (retry_count3 == 0) { + DP(NETIF_MSG_LINK, + "Too many retries waiting for 64 bytes" + " to be written\n"); + return -EINVAL; + } + DP(NETIF_MSG_LINK, + "Write SPI CTRl Read command 0x%x\n", + data_index); + /* Write SPI Control Register Read Command.*/ + /* Read from SPI Controller register C000.*/ + count = 1; + wr_data = ((RD_CPU_CTRL_REGS*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + /* Write SPI Control -1 Register Address. */ + wr_data = SPI_RXFIFO; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, + wr_data, &rd_data); + + DP(NETIF_MSG_LINK, + "INFO -- SPI Status Register = 0x%x\n", + rd_data); + + if ((rd_data & 0x1) == 0) + spi_ready = 0; + + msleep(50); + } /* spi_ready*/ + if (retry_count2 == 0) { + DP(NETIF_MSG_LINK, "ERROR: Too many retries to get" + "spi_ready\n"); + return -EINVAL; + } + + } /* SPI_WRITE */ + + DP(NETIF_MSG_LINK, "*** SPI_READ and WRITE COMPLETE 0x%x\n", + data_index); + + /* Disable SPI EEPROM.*/ + /* Write SPI Control Register Write Command.*/ + count = 2; /* Write to C400, C401, C402, C403 Registers.*/ + wr_data = ((WR_CPU_CTRL_FIFO*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -2 Register Address.*/ + wr_data = SPI_CTRL_2_L; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -2 Register Word-1.*/ + wr_data = 0x8200; /* C400 = 0 for 0 Fill Byte. C401 = 02 for + SPI Clcok to be divide by 2 and little endian fifo.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -2 Register Word-2.*/ + wr_data = 0x0100; /* C402 = 0, clear all status. C403 = 1, to + enable Done Status.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Fill-up SPI Transmit Fifo With SPI EEPROM Messages.*/ + /* Write SPI Control Register Write Command.*/ + count = 2; /* Write to Transmit Fifo D000-onwards.*/ + wr_data = ((WR_CPU_CTRL_FIFO*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /*Write Tx Fifo Register Address.*/ + wr_data = SPI_TXFIFO; /* D000.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Tx Fifo Control Word-1.*/ + wr_data = ((0x1*0x0100) | MSGTYPE_HWR); /* D000 = Only 1 + byte Message ( 1byte to transmit for WRDI opcode).*/ + + /* D001 = Write Message And Higher byte of Transfer Size.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Tx Fifo Control Word-2.*/ + wr_data = WRDI_OPCODE; /* D002 = WRDI Opcode for transmit.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /*Write SPI Control Register Write Command.*/ + count = 2; /* Write to SPI Control Register C000 onwards.*/ + wr_data = ((WR_CPU_CTRL_FIFO*0x0100) | count); + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + /* Write SPI Control -1 Register Address.*/ + wr_data = SPI_CTRL_1_L; + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -1 Register Word-1.*/ + wr_data = 0x0101; /* C000 = 1 to clear CMD Done Status. + C001 = 1 to clear CMD Done INT Status.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + + /* Write SPI Control -1 Register Word-2.*/ + wr_data = 0x0003; /* C002 = 3, Start Immidiate Command. + C003 = 0, No Prepend byte for Write.*/ + WRITE_MESSAGE_8073(bp, port, ext_phy_addr, wr_data, &rd_data); + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_MISC_CTRL1, (misc_ctrl & ~(1<<0))); + DP(NETIF_MSG_LINK, "Download %d%%\n", data_index/size); + return rc; +} + +/* Programs an image to DSP's flash via the SPI port*/ +static u8 bnx2x_sfx7101_flash_download(struct bnx2x *bp, u8 port, + u8 ext_phy_addr, + char data[], u32 size) +{ + const u16 num_trans = size/4; /* 4 bytes can be sent at a time */ + /* Doesn't include last trans!*/ + const u16 last_trans_size = size%4; /* Num bytes on last trans */ + u16 trans_cnt, byte_cnt; + u32 data_index; + u16 tmp; + u16 code_started = 0; + u16 image_revision1, image_revision2; + u16 cnt; + + DP(NETIF_MSG_LINK, "bnx2x_sfx7101_flash_download file_size=%d\n", size); + /* Going to flash*/ + if ((size-HEADER_SIZE) > MAX_APP_SIZE) { + /* This very often will be the case, because the image is built + with 160Kbytes size whereas the total image size must actually + be 160Kbytes-RESERVED_SIZE */ + DP(NETIF_MSG_LINK, "Warning, file size was %d bytes " + "truncated to %d bytes\n", size, MAX_APP_SIZE); + size = MAX_APP_SIZE+HEADER_SIZE; + } + DP(NETIF_MSG_LINK, "File version is %c%c\n", data[0x14e], data[0x14f]); + DP(NETIF_MSG_LINK, " %c%c\n", data[0x150], data[0x151]); + /* Put the DSP in download mode by setting FLASH_CFG[2] to 1 + and issuing a reset.*/ + + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_0, + MISC_REGISTERS_GPIO_HIGH, port); + + bnx2x_sfx7101_sp_sw_reset(bp, port, ext_phy_addr); + + /* wait 0.5 sec */ + for (cnt = 0; cnt < 100; cnt++) + msleep(5); + + /* Make sure we can access the DSP + And it's in the correct mode (waiting for download) */ + + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_DSP_ACCESS, &tmp); + + if (tmp != 0x000A) { + DP(NETIF_MSG_LINK, "DSP is not in waiting on download mode. " + "Expected 0x000A, read 0x%04X\n", tmp); + DP(NETIF_MSG_LINK, "Download failed\n"); + return -EINVAL; + } + + /* Mux the SPI interface away from the internal processor */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_MUX, 1); + + /* Reset the SPI port */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_CTRL_ADDR, 0); + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_CTRL_ADDR, + (1<>16)); + /* Bits 15-8 of address */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR, + (data_index>>8)); + + /* Bits 7-0 of address */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR, + ((u16)data_index)); + + byte_cnt = 0; + while (byte_cnt < 4 && data_index < size) { + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR, + data[data_index++]); + byte_cnt++; + } + + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_BYTES_TO_TRANSFER_ADDR, + byte_cnt+4); + + SPI_START_TRANSFER(bp, port, ext_phy_addr); + msleep(5); /* Wait 5 ms minimum between transs */ + + /* Let the user know something's going on.*/ + /* a pacifier ever 4K */ + if ((data_index % 1023) == 0) + DP(NETIF_MSG_LINK, "Download %d%%\n", data_index/size); + } + + DP(NETIF_MSG_LINK, "\n"); + /* Transfer the last block if there is data remaining */ + if (last_trans_size) { + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR_WRITE_ENABLE_CMD); + + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_BYTES_TO_TRANSFER_ADDR, + 1); + + SPI_START_TRANSFER(bp, port, ext_phy_addr); + + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR_PAGE_PROGRAM_CMD); + + /* Bits 23-16 of address */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR, + (data_index>>16)); + /* Bits 15-8 of address */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR, + (data_index>>8)); + + /* Bits 7-0 of address */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR, + ((u16)data_index)); + + byte_cnt = 0; + while (byte_cnt < last_trans_size && data_index < size) { + /* Bits 7-0 of address */ + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_FIFO_ADDR, + data[data_index++]); + byte_cnt++; + } + + bnx2x_cl45_write(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_SPI_BYTES_TO_TRANSFER_ADDR, + byte_cnt+4); + + SPI_START_TRANSFER(bp, port, ext_phy_addr); + } + + /* DSP Remove Download Mode */ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_0, + MISC_REGISTERS_GPIO_LOW, port); + + bnx2x_sfx7101_sp_sw_reset(bp, port, ext_phy_addr); + + /* wait 0.5 sec to allow it to run */ + for (cnt = 0; cnt < 100; cnt++) + msleep(5); + + bnx2x_hw_reset(bp, port); + + for (cnt = 0; cnt < 100; cnt++) + msleep(5); + + /* Check that the code is started. In case the download + checksum failed, the code won't be started. */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PCS_DEVAD, + MDIO_PCS_REG_7101_DSP_ACCESS, + &tmp); + + code_started = (tmp & (1<<4)); + if (!code_started) { + DP(NETIF_MSG_LINK, "Download failed. Please check file.\n"); + return -EINVAL; + } + + /* Verify that the file revision is now equal to the image + revision within the DSP */ + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_7101_VER1, + &image_revision1); + + bnx2x_cl45_read(bp, port, + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101, + ext_phy_addr, + MDIO_PMA_DEVAD, + MDIO_PMA_REG_7101_VER2, + &image_revision2); + + if (data[0x14e] != (image_revision2&0xFF) || + data[0x14f] != ((image_revision2&0xFF00)>>8) || + data[0x150] != (image_revision1&0xFF) || + data[0x151] != ((image_revision1&0xFF00)>>8)) { + DP(NETIF_MSG_LINK, "Download failed.\n"); + return -EINVAL; + } + DP(NETIF_MSG_LINK, "Download %d%%\n", data_index/size); + return 0; +} + +u8 bnx2x_flash_download(struct bnx2x *bp, u8 port, u32 ext_phy_config, + u8 driver_loaded, char data[], u32 size) +{ + u8 rc = 0; + u32 ext_phy_type; + u8 ext_phy_addr; + ext_phy_addr = ((ext_phy_config & + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK) >> + PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT); + + ext_phy_type = XGXS_EXT_PHY_TYPE(ext_phy_config); + + switch (ext_phy_type) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: + DP(NETIF_MSG_LINK, + "Flash download not supported for this ext phy\n"); + rc = -EINVAL; + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: + if (!driver_loaded) + bnx2x_turn_on_ef(bp, port, ext_phy_addr, ext_phy_type); + + rc = bnx2x_8073_flash_download(bp, port, ext_phy_addr, + data, size); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + /* Take ext phy out of reset */ + if (!driver_loaded) + bnx2x_turn_on_ef(bp, port, ext_phy_addr, ext_phy_type); + rc = bnx2x_sfx7101_flash_download(bp, port, ext_phy_addr, + data, size); + if (!driver_loaded) + bnx2x_turn_off_sf(bp, port); + break; + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN: + default: + DP(NETIF_MSG_LINK, "Invalid ext phy type\n"); + rc = -EINVAL; + break; + } + return rc; +} + diff --git a/drivers/net/bnx2x_link.h b/drivers/net/bnx2x_link.h new file mode 100644 index 00000000..ad3ca27f --- /dev/null +++ b/drivers/net/bnx2x_link.h @@ -0,0 +1,175 @@ +/* Copyright 2008 Broadcom Corporation + * + * Unless you and Broadcom execute a separate written software license + * agreement governing use of this software, this software is licensed to you + * under the terms of the GNU General Public License version 2, available + * at http://www.gnu.org/licenses/old-licenses/gpl-2.0.html (the "GPL"). + * + * Notwithstanding the above, under no circumstances may you combine this + * software in any way with any other Broadcom software provided under a + * license other than the GPL, without Broadcom's express prior written + * consent. + * + * Written by Yaniv Rosner + * + */ + +#ifndef BNX2X_LINK_H +#define BNX2X_LINK_H + + + +/***********************************************************/ +/* Defines */ +/***********************************************************/ +#define DEFAULT_PHY_DEV_ADDR 3 + + + +#define FLOW_CTRL_AUTO PORT_FEATURE_FLOW_CONTROL_AUTO +#define FLOW_CTRL_TX PORT_FEATURE_FLOW_CONTROL_TX +#define FLOW_CTRL_RX PORT_FEATURE_FLOW_CONTROL_RX +#define FLOW_CTRL_BOTH PORT_FEATURE_FLOW_CONTROL_BOTH +#define FLOW_CTRL_NONE PORT_FEATURE_FLOW_CONTROL_NONE + +#define SPEED_AUTO_NEG 0 +#define SPEED_12000 12000 +#define SPEED_12500 12500 +#define SPEED_13000 13000 +#define SPEED_15000 15000 +#define SPEED_16000 16000 + + +/***********************************************************/ +/* Structs */ +/***********************************************************/ +/* Inputs parameters to the CLC */ +struct link_params { + + u8 port; + + /* Default / User Configuration */ + u8 loopback_mode; +#define LOOPBACK_NONE 0 +#define LOOPBACK_EMAC 1 +#define LOOPBACK_BMAC 2 +#define LOOPBACK_XGXS_10 3 +#define LOOPBACK_EXT_PHY 4 +#define LOOPBACK_EXT 5 + + u16 req_duplex; + u16 req_flow_ctrl; + u16 req_fc_auto_adv; /* Should be set to TX / BOTH when + req_flow_ctrl is set to AUTO */ + u16 req_line_speed; /* Also determine AutoNeg */ + + /* Device parameters */ + u8 mac_addr[6]; + + /* shmem parameters */ + u32 shmem_base; + u32 speed_cap_mask; + u32 switch_cfg; +#define SWITCH_CFG_1G PORT_FEATURE_CON_SWITCH_1G_SWITCH +#define SWITCH_CFG_10G PORT_FEATURE_CON_SWITCH_10G_SWITCH +#define SWITCH_CFG_AUTO_DETECT PORT_FEATURE_CON_SWITCH_AUTO_DETECT + + u16 hw_led_mode; /* part of the hw_config read from the shmem */ + u32 lane_config; + u32 ext_phy_config; +#define XGXS_EXT_PHY_TYPE(ext_phy_config) (ext_phy_config & \ + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_MASK) +#define SERDES_EXT_PHY_TYPE(ext_phy_config) (ext_phy_config & \ + PORT_HW_CFG_SERDES_EXT_PHY_TYPE_MASK) + /* Phy register parameter */ + u32 chip_id; + + /* phy_addr populated by the CLC */ + u8 phy_addr; + u16 xgxs_config_rx[4]; /* preemphasis values for the rx side */ + + u16 xgxs_config_tx[4]; /* preemphasis values for the tx side */ + u32 feature_config_flags; +#define FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED (1<<0) + /* Device pointer passed to all callback functions */ + struct bnx2x *bp; +}; + +/* Output parameters */ +struct link_vars { + u8 phy_link_up; /* internal phy link indication */ + u8 link_up; + u16 duplex; + u16 flow_ctrl; + u32 ieee_fc; + u8 mac_type; + +#define MAC_TYPE_NONE 0 +#define MAC_TYPE_EMAC 1 +#define MAC_TYPE_BMAC 2 + u16 line_speed; + u32 autoneg; +#define AUTO_NEG_DISABLED 0x0 +#define AUTO_NEG_ENABLED 0x1 +#define AUTO_NEG_COMPLETE 0x2 +#define AUTO_NEG_PARALLEL_DETECTION_USED 0x3 + + u8 phy_flags; + + /* The same definitions as the shmem parameter */ + u32 link_status; +}; + +/***********************************************************/ +/* Functions */ +/***********************************************************/ + +/* Initialize the phy */ +u8 bnx2x_phy_init(struct link_params *input, struct link_vars *output); + +/* Reset the link. Should be called when driver or interface goes down */ +u8 bnx2x_link_reset(struct link_params *params, struct link_vars *vars); + +/* bnx2x_link_update should be called upon link interrupt */ +u8 bnx2x_link_update(struct link_params *input, struct link_vars *output); + +/* use the following cl45 functions to read/write from external_phy + In order to use it to read/write internal phy registers, use + DEFAULT_PHY_DEV_ADDR as devad, and (_bank + (_addr & 0xf)) as + Use ext_phy_type of 0 in case of cl22 over cl45 + the register */ +u8 bnx2x_cl45_read(struct bnx2x *bp, u8 port, u32 ext_phy_type, + u8 phy_addr, u8 devad, u16 reg, u16 *ret_val); + +u8 bnx2x_cl45_write(struct bnx2x *bp, u8 port, u32 ext_phy_type, + u8 phy_addr, u8 devad, u16 reg, u16 val); + +/* Reads the link_status from the shmem, + and update the link vars accordingly */ +void bnx2x_link_status_update(struct link_params *input, + struct link_vars *output); +/* returns string representing the fw_version of the external phy */ +u8 bnx2x_get_ext_phy_fw_version(struct link_params *params, u8 driver_loaded, + u8 *version, u16 len); + +/* Set/Unset the led + Basically, the CLC takes care of the led for the link, but in case one needs + to set/unset the led unnaturally, set the "mode" to LED_MODE_OPER to + blink the led, and LED_MODE_OFF to set the led off.*/ +u8 bnx2x_set_led(struct bnx2x *bp, u8 port, u8 mode, u32 speed, + u16 hw_led_mode, u32 chip_id); +#define LED_MODE_OFF 0 +#define LED_MODE_OPER 2 + +u8 bnx2x_override_led_value(struct bnx2x *bp, u8 port, u32 led_idx, u32 value); + +u8 bnx2x_flash_download(struct bnx2x *bp, u8 port, u32 ext_phy_config, + u8 driver_loaded, char data[], u32 size); +/* Get the actual link status. In case it returns 0, link is up, + otherwise link is down*/ +u8 bnx2x_test_link(struct link_params *input, struct link_vars *vars); + +/* One-time initialization for external phy after power up */ +u8 bnx2x_common_init_phy(struct bnx2x *bp, u32 shmem_base); + +#endif /* BNX2X_LINK_H */ diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c new file mode 100644 index 00000000..12344a85 --- /dev/null +++ b/drivers/net/bnx2x_main.c @@ -0,0 +1,11704 @@ +/* bnx2x_main.c: Broadcom Everest network driver. + * + * Copyright (c) 2007-2008 Broadcom Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation. + * + * Maintained by: Eilon Greenstein + * Written by: Eliezer Tamir + * Based on code from Michael Chan's bnx2 driver + * UDP CSUM errata workaround by Arik Gendelman + * Slowpath rework by Vladislav Zolotarov + * Statistics and Link management by Yitchak Gertner + * + */ + +#include +#include +#if (LINUX_VERSION_CODE >= 0x020600) /* BNX2X_UPSTREAM */ +#include +#endif +#include +#if (LINUX_VERSION_CODE >= 0x020600) /* BNX2X_UPSTREAM */ +#include /* for dev_info() */ +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if (LINUX_VERSION_CODE >= 0x020600) /* BNX2X_UPSTREAM */ +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#ifdef NETIF_F_HW_VLAN_TX + #include +#endif +#include +#if (LINUX_VERSION_CODE < 0x020600) /* ! BNX2X_UPSTREAM */ +#include +#endif +#include +#include +#if (LINUX_VERSION_CODE > 0x020607) /* BNX2X_UPSTREAM */ +#include +#endif +#if (LINUX_VERSION_CODE >= 0x020600) /* BNX2X_UPSTREAM */ +#include +#endif +#include +#if (LINUX_VERSION_CODE > 0x020605) && (!defined(BNX2X_DRIVER_DISK)) /* BNX2X_UPSTREAM */ +#if !defined(__VMKLNX__) +#include +#endif +#endif +#include +#include +#if (LINUX_VERSION_CODE >= 0x020618) /* BNX2X_UPSTREAM */ +#include +#else +#include +#endif + +#if defined(__VMKLNX__) /* ! BNX2X_UPSTREAM */ +#define __NO_TPA__ 1 +#define KERN_CONT KERN_INFO +#endif /* defined(__VMKLNX__) */ +#if (LINUX_VERSION_CODE < 0x020600) /* ! BNX2X_UPSTREAM */ +#define __NO_TPA__ 1 +#endif + +#include "bnx2x.h" +#include "bnx2x_init.h" +#ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */ +#include "bnx2x_self_test.h" +#endif + +#define DRV_MODULE_VERSION "1.46.8" +#define DRV_MODULE_RELDATE "$DateTime: 2008/10/07 10:26:45 $" +#define BNX2X_BC_VER 0x040200 + +/* Time in jiffies before concluding the transmitter is hung */ +#define TX_TIMEOUT (5*HZ) + +static char version[] __devinitdata = + "Broadcom NetXtreme II 5771x 10Gigabit Ethernet Driver " + DRV_MODULE_NAME " " DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; + +MODULE_AUTHOR("Eliezer Tamir"); +MODULE_DESCRIPTION("Broadcom NetXtreme II BCM57710/57711/57711E Driver"); +MODULE_LICENSE("GPL"); +MODULE_VERSION(DRV_MODULE_VERSION); +#ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */ +#if (LINUX_VERSION_CODE >= 0x020600) /* ! BNX2X_UPSTREAM */ +MODULE_INFO(cvs_version, "$Revision: #125 $"); +#endif +#endif + +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ +static int multi_mode = 1; +module_param(multi_mode, int, 0); +MODULE_PARM_DESC(multi_mode, + " Multi queue mode (1 per-CPU; 2 VLAN PRI; 4 IP DSCP)"); + +static int pri_map; +module_param(pri_map, int, 0); +MODULE_PARM_DESC(pri_map, " Priority to HW queue mapping"); +#else +static int multi_mode; +static int pri_map; +#endif + +#if defined(__NO_TPA__) +static int disable_tpa = 1; +#else +static int disable_tpa; +module_param(disable_tpa, int, 0); +MODULE_PARM_DESC(disable_tpa, " Disable the TPA (LRO) feature"); +#endif + +static int int_mode; +#if (LINUX_VERSION_CODE >= 0x020600) /* BNX2X_UPSTREAM */ +module_param(int_mode, int, 0); +MODULE_PARM_DESC(int_mode, " Force interrupt mode (1 INT#x; 2 MSI)"); +#endif + +static int poll; +#if (LINUX_VERSION_CODE >= 0x020600) /* BNX2X_UPSTREAM */ +module_param(poll, int, 0); +MODULE_PARM_DESC(poll, " Use polling (for debug)"); +#endif + +static int debug; +#if (LINUX_VERSION_CODE >= 0x020600) /* BNX2X_UPSTREAM */ +module_param(debug, int, 0); +MODULE_PARM_DESC(debug, " Default debug msglevel"); +#endif + +static int load_count[3]; /* 0-common, 1-port0, 2-port1 */ + +enum bnx2x_board_type { + BCM57710 = 0, + BCM57711 = 1, + BCM57711E = 2, +}; + +/* indexed by board_type, above */ +static struct { + char *name; +} board_info[] __devinitdata = { + { "Broadcom NetXtreme II BCM57710 XGb" }, + { "Broadcom NetXtreme II BCM57711 XGb" }, + { "Broadcom NetXtreme II BCM57711E XGb" } +}; + +#ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */ +#ifndef PCI_DEVICE_ID_NX2_57710 +#define PCI_DEVICE_ID_NX2_57710 0x164e +#endif +#ifndef PCI_DEVICE_ID_NX2_57711 +#define PCI_DEVICE_ID_NX2_57711 0x164f +#endif +#ifndef PCI_DEVICE_ID_NX2_57711E +#define PCI_DEVICE_ID_NX2_57711E 0x1650 +#endif +#endif + +static const struct pci_device_id bnx2x_pci_tbl[] = { + { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57710, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM57710 }, + { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57711, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM57711 }, + { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_57711E, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM57711E }, + { 0 } +}; + +MODULE_DEVICE_TABLE(pci, bnx2x_pci_tbl); + +/**************************************************************************** +* General service functions +****************************************************************************/ + +/* used only at init + * locking is done by mcp + */ +static void bnx2x_reg_wr_ind(struct bnx2x *bp, u32 addr, u32 val) +{ + pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, addr); + pci_write_config_dword(bp->pdev, PCICFG_GRC_DATA, val); + pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, + PCICFG_VENDOR_ID_OFFSET); +} + +static u32 bnx2x_reg_rd_ind(struct bnx2x *bp, u32 addr) +{ + u32 val; + + pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, addr); + pci_read_config_dword(bp->pdev, PCICFG_GRC_DATA, &val); + pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, + PCICFG_VENDOR_ID_OFFSET); + + return val; +} + +static const u32 dmae_reg_go_c[] = { + DMAE_REG_GO_C0, DMAE_REG_GO_C1, DMAE_REG_GO_C2, DMAE_REG_GO_C3, + DMAE_REG_GO_C4, DMAE_REG_GO_C5, DMAE_REG_GO_C6, DMAE_REG_GO_C7, + DMAE_REG_GO_C8, DMAE_REG_GO_C9, DMAE_REG_GO_C10, DMAE_REG_GO_C11, + DMAE_REG_GO_C12, DMAE_REG_GO_C13, DMAE_REG_GO_C14, DMAE_REG_GO_C15 +}; + +/* copy command into DMAE command memory and set DMAE command go */ +static void bnx2x_post_dmae(struct bnx2x *bp, struct dmae_command *dmae, + int idx) +{ + u32 cmd_offset; + int i; + + cmd_offset = (DMAE_REG_CMD_MEM + sizeof(struct dmae_command) * idx); + for (i = 0; i < (sizeof(struct dmae_command)/4); i++) { + REG_WR(bp, cmd_offset + i*4, *(((u32 *)dmae) + i)); + + DP(BNX2X_MSG_OFF, "DMAE cmd[%d].%d (0x%08x) : 0x%08x\n", + idx, i, cmd_offset + i*4, *(((u32 *)dmae) + i)); + } + REG_WR(bp, dmae_reg_go_c[idx], 1); +} + +void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr, u32 dst_addr, + u32 len32) +{ + struct dmae_command *dmae = &bp->init_dmae; + u32 *wb_comp = bnx2x_sp(bp, wb_comp); + int cnt = 200; + + if (!bp->dmae_ready) { + u32 *data = bnx2x_sp(bp, wb_data[0]); + + DP(BNX2X_MSG_OFF, "DMAE is not ready (dst_addr %08x len32 %d)" + " using indirect\n", dst_addr, len32); + bnx2x_init_ind_wr(bp, dst_addr, data, len32); + return; + } + + mutex_lock(&bp->dmae_mutex); + + memset(dmae, 0, sizeof(struct dmae_command)); + + dmae->opcode = (DMAE_CMD_SRC_PCI | DMAE_CMD_DST_GRC | + DMAE_CMD_C_DST_PCI | DMAE_CMD_C_ENABLE | + DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | +#ifdef __BIG_ENDIAN + DMAE_CMD_ENDIANITY_B_DW_SWAP | +#else + DMAE_CMD_ENDIANITY_DW_SWAP | +#endif + (BP_PORT(bp) ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0) | + (BP_E1HVN(bp) << DMAE_CMD_E1HVN_SHIFT)); + dmae->src_addr_lo = U64_LO(dma_addr); + dmae->src_addr_hi = U64_HI(dma_addr); + dmae->dst_addr_lo = dst_addr >> 2; + dmae->dst_addr_hi = 0; + dmae->len = len32; + dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, wb_comp)); + dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, wb_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + DP(BNX2X_MSG_OFF, "dmae: opcode 0x%08x\n" + DP_LEVEL "src_addr [%x:%08x] len [%d *4] " + "dst_addr [%x:%08x (%08x)]\n" + DP_LEVEL "comp_addr [%x:%08x] comp_val 0x%08x\n", + dmae->opcode, dmae->src_addr_hi, dmae->src_addr_lo, + dmae->len, dmae->dst_addr_hi, dmae->dst_addr_lo, dst_addr, + dmae->comp_addr_hi, dmae->comp_addr_lo, dmae->comp_val); + DP(BNX2X_MSG_OFF, "data [0x%08x 0x%08x 0x%08x 0x%08x]\n", + bp->slowpath->wb_data[0], bp->slowpath->wb_data[1], + bp->slowpath->wb_data[2], bp->slowpath->wb_data[3]); + + *wb_comp = 0; + + bnx2x_post_dmae(bp, dmae, INIT_DMAE_C(bp)); + + udelay(5); + + while (*wb_comp != DMAE_COMP_VAL) { + DP(BNX2X_MSG_OFF, "wb_comp 0x%08x\n", *wb_comp); + + if (!cnt) { + BNX2X_ERR("dmae timeout!\n"); + break; + } + cnt--; + /* adjust delay for emulation/FPGA */ + if (CHIP_REV_IS_SLOW(bp)) + msleep(100); + else + udelay(5); + } + + mutex_unlock(&bp->dmae_mutex); +} + +void bnx2x_read_dmae(struct bnx2x *bp, u32 src_addr, u32 len32) +{ + struct dmae_command *dmae = &bp->init_dmae; + u32 *wb_comp = bnx2x_sp(bp, wb_comp); + int cnt = 200; + + if (!bp->dmae_ready) { + u32 *data = bnx2x_sp(bp, wb_data[0]); + int i; + + DP(BNX2X_MSG_OFF, "DMAE is not ready (src_addr %08x len32 %d)" + " using indirect\n", src_addr, len32); + for (i = 0; i < len32; i++) + data[i] = bnx2x_reg_rd_ind(bp, src_addr + i*4); + return; + } + + mutex_lock(&bp->dmae_mutex); + + memset(bnx2x_sp(bp, wb_data[0]), 0, sizeof(u32) * 4); + memset(dmae, 0, sizeof(struct dmae_command)); + + dmae->opcode = (DMAE_CMD_SRC_GRC | DMAE_CMD_DST_PCI | + DMAE_CMD_C_DST_PCI | DMAE_CMD_C_ENABLE | + DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | +#ifdef __BIG_ENDIAN + DMAE_CMD_ENDIANITY_B_DW_SWAP | +#else + DMAE_CMD_ENDIANITY_DW_SWAP | +#endif + (BP_PORT(bp) ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0) | + (BP_E1HVN(bp) << DMAE_CMD_E1HVN_SHIFT)); + dmae->src_addr_lo = src_addr >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, wb_data)); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, wb_data)); + dmae->len = len32; + dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, wb_comp)); + dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, wb_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + DP(BNX2X_MSG_OFF, "dmae: opcode 0x%08x\n" + DP_LEVEL "src_addr [%x:%08x] len [%d *4] " + "dst_addr [%x:%08x (%08x)]\n" + DP_LEVEL "comp_addr [%x:%08x] comp_val 0x%08x\n", + dmae->opcode, dmae->src_addr_hi, dmae->src_addr_lo, + dmae->len, dmae->dst_addr_hi, dmae->dst_addr_lo, src_addr, + dmae->comp_addr_hi, dmae->comp_addr_lo, dmae->comp_val); + + *wb_comp = 0; + + bnx2x_post_dmae(bp, dmae, INIT_DMAE_C(bp)); + + udelay(5); + + while (*wb_comp != DMAE_COMP_VAL) { + + if (!cnt) { + BNX2X_ERR("dmae timeout!\n"); + break; + } + cnt--; + /* adjust delay for emulation/FPGA */ + if (CHIP_REV_IS_SLOW(bp)) + msleep(100); + else + udelay(5); + } + DP(BNX2X_MSG_OFF, "data [0x%08x 0x%08x 0x%08x 0x%08x]\n", + bp->slowpath->wb_data[0], bp->slowpath->wb_data[1], + bp->slowpath->wb_data[2], bp->slowpath->wb_data[3]); + + mutex_unlock(&bp->dmae_mutex); +} + +/* used only for slowpath so not inlined */ +static void bnx2x_wb_wr(struct bnx2x *bp, int reg, u32 val_hi, u32 val_lo) +{ + u32 wb_write[2]; + + wb_write[0] = val_hi; + wb_write[1] = val_lo; + REG_WR_DMAE(bp, reg, wb_write, 2); +} + +#ifdef USE_WB_RD +static u64 bnx2x_wb_rd(struct bnx2x *bp, int reg) +{ + u32 wb_data[2]; + + REG_RD_DMAE(bp, reg, wb_data, 2); + + return HILO_U64(wb_data[0], wb_data[1]); +} +#endif + +static int bnx2x_mc_assert(struct bnx2x *bp) +{ + char last_idx; + int i, rc = 0; + u32 row0, row1, row2, row3; + + /* XSTORM */ + last_idx = REG_RD8(bp, BAR_XSTRORM_INTMEM + + XSTORM_ASSERT_LIST_INDEX_OFFSET); + if (last_idx) + BNX2X_ERR("XSTORM_ASSERT_LIST_INDEX 0x%x\n", last_idx); + + /* print the asserts */ + for (i = 0; i < STROM_ASSERT_ARRAY_SIZE; i++) { + + row0 = REG_RD(bp, BAR_XSTRORM_INTMEM + + XSTORM_ASSERT_LIST_OFFSET(i)); + row1 = REG_RD(bp, BAR_XSTRORM_INTMEM + + XSTORM_ASSERT_LIST_OFFSET(i) + 4); + row2 = REG_RD(bp, BAR_XSTRORM_INTMEM + + XSTORM_ASSERT_LIST_OFFSET(i) + 8); + row3 = REG_RD(bp, BAR_XSTRORM_INTMEM + + XSTORM_ASSERT_LIST_OFFSET(i) + 12); + + if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) { + BNX2X_ERR("XSTORM_ASSERT_INDEX 0x%x = 0x%08x" + " 0x%08x 0x%08x 0x%08x\n", + i, row3, row2, row1, row0); + rc++; + } else { + break; + } + } + + /* TSTORM */ + last_idx = REG_RD8(bp, BAR_TSTRORM_INTMEM + + TSTORM_ASSERT_LIST_INDEX_OFFSET); + if (last_idx) + BNX2X_ERR("TSTORM_ASSERT_LIST_INDEX 0x%x\n", last_idx); + + /* print the asserts */ + for (i = 0; i < STROM_ASSERT_ARRAY_SIZE; i++) { + + row0 = REG_RD(bp, BAR_TSTRORM_INTMEM + + TSTORM_ASSERT_LIST_OFFSET(i)); + row1 = REG_RD(bp, BAR_TSTRORM_INTMEM + + TSTORM_ASSERT_LIST_OFFSET(i) + 4); + row2 = REG_RD(bp, BAR_TSTRORM_INTMEM + + TSTORM_ASSERT_LIST_OFFSET(i) + 8); + row3 = REG_RD(bp, BAR_TSTRORM_INTMEM + + TSTORM_ASSERT_LIST_OFFSET(i) + 12); + + if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) { + BNX2X_ERR("TSTORM_ASSERT_INDEX 0x%x = 0x%08x" + " 0x%08x 0x%08x 0x%08x\n", + i, row3, row2, row1, row0); + rc++; + } else { + break; + } + } + + /* CSTORM */ + last_idx = REG_RD8(bp, BAR_CSTRORM_INTMEM + + CSTORM_ASSERT_LIST_INDEX_OFFSET); + if (last_idx) + BNX2X_ERR("CSTORM_ASSERT_LIST_INDEX 0x%x\n", last_idx); + + /* print the asserts */ + for (i = 0; i < STROM_ASSERT_ARRAY_SIZE; i++) { + + row0 = REG_RD(bp, BAR_CSTRORM_INTMEM + + CSTORM_ASSERT_LIST_OFFSET(i)); + row1 = REG_RD(bp, BAR_CSTRORM_INTMEM + + CSTORM_ASSERT_LIST_OFFSET(i) + 4); + row2 = REG_RD(bp, BAR_CSTRORM_INTMEM + + CSTORM_ASSERT_LIST_OFFSET(i) + 8); + row3 = REG_RD(bp, BAR_CSTRORM_INTMEM + + CSTORM_ASSERT_LIST_OFFSET(i) + 12); + + if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) { + BNX2X_ERR("CSTORM_ASSERT_INDEX 0x%x = 0x%08x" + " 0x%08x 0x%08x 0x%08x\n", + i, row3, row2, row1, row0); + rc++; + } else { + break; + } + } + + /* USTORM */ + last_idx = REG_RD8(bp, BAR_USTRORM_INTMEM + + USTORM_ASSERT_LIST_INDEX_OFFSET); + if (last_idx) + BNX2X_ERR("USTORM_ASSERT_LIST_INDEX 0x%x\n", last_idx); + + /* print the asserts */ + for (i = 0; i < STROM_ASSERT_ARRAY_SIZE; i++) { + + row0 = REG_RD(bp, BAR_USTRORM_INTMEM + + USTORM_ASSERT_LIST_OFFSET(i)); + row1 = REG_RD(bp, BAR_USTRORM_INTMEM + + USTORM_ASSERT_LIST_OFFSET(i) + 4); + row2 = REG_RD(bp, BAR_USTRORM_INTMEM + + USTORM_ASSERT_LIST_OFFSET(i) + 8); + row3 = REG_RD(bp, BAR_USTRORM_INTMEM + + USTORM_ASSERT_LIST_OFFSET(i) + 12); + + if (row0 != COMMON_ASM_INVALID_ASSERT_OPCODE) { + BNX2X_ERR("USTORM_ASSERT_INDEX 0x%x = 0x%08x" + " 0x%08x 0x%08x 0x%08x\n", + i, row3, row2, row1, row0); + rc++; + } else { + break; + } + } + + return rc; +} + +static void bnx2x_fw_dump(struct bnx2x *bp) +{ + u32 mark, offset; + u32 data[9]; + int word; + + mark = REG_RD(bp, MCP_REG_MCPR_SCRATCH + 0xf104); + mark = ((mark + 0x3) & ~0x3); + printk(KERN_ERR PFX "begin fw dump (mark 0x%x)\n" KERN_ERR, mark); + + for (offset = mark - 0x08000000; offset <= 0xF900; offset += 0x8*4) { + for (word = 0; word < 8; word++) + data[word] = htonl(REG_RD(bp, MCP_REG_MCPR_SCRATCH + + offset + 4*word)); + data[8] = 0x0; + printk(KERN_CONT "%s", (char *)data); + } + for (offset = 0xF108; offset <= mark - 0x08000000; offset += 0x8*4) { + for (word = 0; word < 8; word++) + data[word] = htonl(REG_RD(bp, MCP_REG_MCPR_SCRATCH + + offset + 4*word)); + data[8] = 0x0; + printk(KERN_CONT "%s", (char *)data); + } + printk("\n" KERN_ERR PFX "end of fw dump\n"); +} + +static void bnx2x_panic_dump(struct bnx2x *bp) +{ + int i; + u16 j, start, end; + + bp->stats_state = STATS_STATE_DISABLED; + DP(BNX2X_MSG_STATS, "stats_state - DISABLED\n"); + + BNX2X_ERR("begin crash dump -----------------\n"); + + for_each_queue(bp, i) { + struct bnx2x_fastpath *fp = &bp->fp[i]; + struct eth_tx_db_data *hw_prods = fp->hw_tx_prods; + + BNX2X_ERR("queue[%d]: tx_pkt_prod(%x) tx_pkt_cons(%x)" + " tx_bd_prod(%x) tx_bd_cons(%x) *tx_cons_sb(%x)\n", + i, fp->tx_pkt_prod, fp->tx_pkt_cons, fp->tx_bd_prod, + fp->tx_bd_cons, le16_to_cpu(*fp->tx_cons_sb)); + BNX2X_ERR(" rx_bd_prod(%x) rx_bd_cons(%x)" + " *rx_bd_cons_sb(%x) rx_comp_prod(%x)" + " rx_comp_cons(%x) *rx_cons_sb(%x)\n", + fp->rx_bd_prod, fp->rx_bd_cons, + le16_to_cpu(*fp->rx_bd_cons_sb), fp->rx_comp_prod, + fp->rx_comp_cons, le16_to_cpu(*fp->rx_cons_sb)); + BNX2X_ERR(" rx_sge_prod(%x) last_max_sge(%x)" + " fp_c_idx(%x) *sb_c_idx(%x) fp_u_idx(%x)" + " *sb_u_idx(%x) bd data(%x,%x)\n", + fp->rx_sge_prod, fp->last_max_sge, fp->fp_c_idx, + fp->status_blk->c_status_block.status_block_index, + fp->fp_u_idx, + fp->status_blk->u_status_block.status_block_index, + hw_prods->packets_prod, hw_prods->bds_prod); + + start = TX_BD(le16_to_cpu(*fp->tx_cons_sb) - 10); + end = TX_BD(le16_to_cpu(*fp->tx_cons_sb) + 245); + for (j = start; j < end; j++) { + struct sw_tx_bd *sw_bd = &fp->tx_buf_ring[j]; + + BNX2X_ERR("packet[%x]=[%p,%x]\n", j, + sw_bd->skb, sw_bd->first_bd); + } + + start = TX_BD(fp->tx_bd_cons - 10); + end = TX_BD(fp->tx_bd_cons + 254); + for (j = start; j < end; j++) { + u32 *tx_bd = (u32 *)&fp->tx_desc_ring[j]; + + BNX2X_ERR("tx_bd[%x]=[%x:%x:%x:%x]\n", + j, tx_bd[0], tx_bd[1], tx_bd[2], tx_bd[3]); + } + + start = RX_BD(le16_to_cpu(*fp->rx_cons_sb) - 10); + end = RX_BD(le16_to_cpu(*fp->rx_cons_sb) + 503); + for (j = start; j < end; j++) { + u32 *rx_bd = (u32 *)&fp->rx_desc_ring[j]; + struct sw_rx_bd *sw_bd = &fp->rx_buf_ring[j]; + + BNX2X_ERR("rx_bd[%x]=[%x:%x] sw_bd=[%p]\n", + j, rx_bd[1], rx_bd[0], sw_bd->skb); + } + + start = RX_SGE(fp->rx_sge_prod); + end = RX_SGE(fp->last_max_sge); + for (j = start; j < end; j++) { + u32 *rx_sge = (u32 *)&fp->rx_sge_ring[j]; + struct sw_rx_page *sw_page = &fp->rx_page_ring[j]; + + BNX2X_ERR("rx_sge[%x]=[%x:%x] sw_page=[%p]\n", + j, rx_sge[1], rx_sge[0], sw_page->page); + } + + start = RCQ_BD(fp->rx_comp_cons - 10); + end = RCQ_BD(fp->rx_comp_cons + 503); + for (j = start; j < end; j++) { + u32 *cqe = (u32 *)&fp->rx_comp_ring[j]; + + BNX2X_ERR("cqe[%x]=[%x:%x:%x:%x]\n", + j, cqe[0], cqe[1], cqe[2], cqe[3]); + } + } + + BNX2X_ERR("def_c_idx(%u) def_u_idx(%u) def_x_idx(%u)" + " def_t_idx(%u) def_att_idx(%u) attn_state(%u)" + " spq_prod_idx(%u)\n", + bp->def_c_idx, bp->def_u_idx, bp->def_x_idx, bp->def_t_idx, + bp->def_att_idx, bp->attn_state, bp->spq_prod_idx); + + bnx2x_fw_dump(bp); +#ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */ + bp->msglevel |= NETIF_MSG_PROBE; + BNX2X_ERR("Idle check (1st round) ----------\n"); + bnx2x_idle_chk(bp); + BNX2X_ERR("Idle check (2nd round) ----------\n"); + bnx2x_idle_chk(bp); +#endif + bnx2x_mc_assert(bp); + BNX2X_ERR("end crash dump -----------------\n"); +} + +static void bnx2x_int_enable(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + u32 addr = port ? HC_REG_CONFIG_1 : HC_REG_CONFIG_0; + u32 val = REG_RD(bp, addr); + int msix = (bp->flags & USING_MSIX_FLAG) ? 1 : 0; + int msi = (bp->flags & USING_MSI_FLAG) ? 1 : 0; + + if (msix) { + val &= ~(HC_CONFIG_0_REG_SINGLE_ISR_EN_0 | + HC_CONFIG_0_REG_INT_LINE_EN_0); + val |= (HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 | + HC_CONFIG_0_REG_ATTN_BIT_EN_0); + } else if (msi) { + val &= ~HC_CONFIG_0_REG_INT_LINE_EN_0; + val |= (HC_CONFIG_0_REG_SINGLE_ISR_EN_0 | + HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 | + HC_CONFIG_0_REG_ATTN_BIT_EN_0); + } else { + val |= (HC_CONFIG_0_REG_SINGLE_ISR_EN_0 | + HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 | + HC_CONFIG_0_REG_INT_LINE_EN_0 | + HC_CONFIG_0_REG_ATTN_BIT_EN_0); + + DP(NETIF_MSG_INTR, "write %x to HC %d (addr 0x%x)\n", + val, port, addr); + + REG_WR(bp, addr, val); + + val &= ~HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0; + } + + DP(NETIF_MSG_INTR, "write %x to HC %d (addr 0x%x) mode %s\n", + val, port, addr, (msix ? "MSI-X" : (msi ? "MSI" : "INTx"))); + + REG_WR(bp, addr, val); + + if (CHIP_IS_E1H(bp)) { + /* init leading/trailing edge */ + if (IS_E1HMF(bp)) { + val = (0xfe0f | (1 << (BP_E1HVN(bp) + 4))); + if (bp->port.pmf) + /* enable nig attention */ + val |= 0x0100; + } else + val = 0xffff; + + REG_WR(bp, HC_REG_TRAILING_EDGE_0 + port*8, val); + REG_WR(bp, HC_REG_LEADING_EDGE_0 + port*8, val); + } +} + +static void bnx2x_int_disable(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + u32 addr = port ? HC_REG_CONFIG_1 : HC_REG_CONFIG_0; + u32 val = REG_RD(bp, addr); + + val &= ~(HC_CONFIG_0_REG_SINGLE_ISR_EN_0 | + HC_CONFIG_0_REG_MSI_MSIX_INT_EN_0 | + HC_CONFIG_0_REG_INT_LINE_EN_0 | + HC_CONFIG_0_REG_ATTN_BIT_EN_0); + + DP(NETIF_MSG_INTR, "write %x to HC %d (addr 0x%x)\n", + val, port, addr); + + REG_WR(bp, addr, val); + if (REG_RD(bp, addr) != val) + BNX2X_ERR("BUG! proper val not read from IGU!\n"); +} + +static void bnx2x_int_disable_sync(struct bnx2x *bp, int disable_hw) +{ +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ + int msix = (bp->flags & USING_MSIX_FLAG) ? 1 : 0; + int i, offset; +#endif +#if (LINUX_VERSION_CODE < 0x020618) /* ! BNX2X_UPSTREAM */ + int j; +#endif + + /* disable interrupt handling */ + atomic_inc(&bp->intr_sem); + if (disable_hw) + /* prevent the HW from sending interrupts */ + bnx2x_int_disable(bp); + + /* make sure all ISRs are done */ +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ + if (msix) { + synchronize_irq(bp->msix_table[0].vector); + offset = 1; +#ifdef BCM_CNIC + offset++; +#endif + for_each_queue(bp, i) + synchronize_irq(bp->msix_table[i + offset].vector); + } else +#endif + synchronize_irq(bp->pdev->irq); + + /* make sure sp_task is not running */ +#if (LINUX_VERSION_CODE >= 0x020618) /* BNX2X_UPSTREAM */ + cancel_work_sync(&bp->sp_task); +#else + j = 0; + smp_mb(); /* sp_running is set by sp_task */ + while (bp->sp_running) { + if (!(++j % 1000)) + BNX2X_ERR("sp_running (j %d)\n", j); + msleep(1); + smp_mb(); + } +#endif +} + +/* fast path */ + +/* + * General service functions + */ + +static inline void bnx2x_ack_sb(struct bnx2x *bp, u8 sb_id, + u8 storm, u16 index, u8 op, u8 update) +{ + u32 hc_addr = (HC_REG_COMMAND_REG + BP_PORT(bp)*32 + + COMMAND_REG_INT_ACK); + struct igu_ack_register igu_ack; + + igu_ack.status_block_index = index; + igu_ack.sb_id_and_flags = + ((sb_id << IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT) | + (storm << IGU_ACK_REGISTER_STORM_ID_SHIFT) | + (update << IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT) | + (op << IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT)); + +#if (LINUX_VERSION_CODE < 0x020600) /* ! BNX2X_UPSTREAM */ + /* x86's writel() in 2.4.x does not have barrier(). */ + barrier(); +#endif + + DP(BNX2X_MSG_OFF, "write 0x%08x to HC addr 0x%x\n", + (*(u32 *)&igu_ack), hc_addr); + REG_WR(bp, hc_addr, (*(u32 *)&igu_ack)); +} + +static inline u16 bnx2x_update_fpsb_idx(struct bnx2x_fastpath *fp) +{ + struct host_status_block *fpsb = fp->status_blk; + u16 rc = 0; + + barrier(); /* status block is written to by the chip */ + if (fp->fp_c_idx != fpsb->c_status_block.status_block_index) { + fp->fp_c_idx = fpsb->c_status_block.status_block_index; + rc |= 1; + } + if (fp->fp_u_idx != fpsb->u_status_block.status_block_index) { + fp->fp_u_idx = fpsb->u_status_block.status_block_index; + rc |= 2; + } + return rc; +} + +static u16 bnx2x_ack_int(struct bnx2x *bp) +{ + u32 hc_addr = (HC_REG_COMMAND_REG + BP_PORT(bp)*32 + + COMMAND_REG_SIMD_MASK); + u32 result = REG_RD(bp, hc_addr); + + DP(BNX2X_MSG_OFF, "read 0x%08x from HC addr 0x%x\n", + result, hc_addr); + + return result; +} + + +/* + * fast path service functions + */ + +/* free skb in the packet ring at pos idx + * return idx of last bd freed + */ +static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fastpath *fp, + u16 idx) +{ + struct sw_tx_bd *tx_buf = &fp->tx_buf_ring[idx]; + struct eth_tx_bd *tx_bd; + struct sk_buff *skb = tx_buf->skb; + u16 bd_idx = TX_BD(tx_buf->first_bd), new_cons; + int nbd; + + DP(BNX2X_MSG_OFF, "pkt_idx %d buff @(%p)->skb %p\n", + idx, tx_buf, skb); + + /* unmap first bd */ + DP(BNX2X_MSG_OFF, "free bd_idx %d\n", bd_idx); + tx_bd = &fp->tx_desc_ring[bd_idx]; + pci_unmap_single(bp->pdev, BD_UNMAP_ADDR(tx_bd), + BD_UNMAP_LEN(tx_bd), PCI_DMA_TODEVICE); + + nbd = le16_to_cpu(tx_bd->nbd) - 1; + new_cons = nbd + tx_buf->first_bd; +#ifdef BNX2X_STOP_ON_ERROR + if (nbd > (MAX_SKB_FRAGS + 2)) { + BNX2X_ERR("BAD nbd!\n"); + bnx2x_panic(); + } +#endif + + /* Skip a parse bd and the TSO split header bd + since they have no mapping */ + if (nbd) + bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); + + if (tx_bd->bd_flags.as_bitfield & (ETH_TX_BD_FLAGS_IP_CSUM | + ETH_TX_BD_FLAGS_TCP_CSUM | + ETH_TX_BD_FLAGS_SW_LSO)) { + if (--nbd) + bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); + tx_bd = &fp->tx_desc_ring[bd_idx]; + /* is this a TSO split header bd? */ + if (tx_bd->bd_flags.as_bitfield & ETH_TX_BD_FLAGS_SW_LSO) { + if (--nbd) + bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); + } + } + + /* now free frags */ + while (nbd > 0) { + + DP(BNX2X_MSG_OFF, "free frag bd_idx %d\n", bd_idx); + tx_bd = &fp->tx_desc_ring[bd_idx]; + pci_unmap_page(bp->pdev, BD_UNMAP_ADDR(tx_bd), + BD_UNMAP_LEN(tx_bd), PCI_DMA_TODEVICE); + if (--nbd) + bd_idx = TX_BD(NEXT_TX_IDX(bd_idx)); + } + + /* release skb */ + WARN_ON(!skb); + dev_kfree_skb(skb); + tx_buf->first_bd = 0; + tx_buf->skb = NULL; + + return new_cons; +} + +static inline u16 bnx2x_tx_avail(struct bnx2x_fastpath *fp) +{ + s16 used; + u16 prod; + u16 cons; + + barrier(); /* Tell compiler that prod and cons can change */ + prod = fp->tx_bd_prod; + cons = fp->tx_bd_cons; + + /* NUM_TX_RINGS = number of "next-page" entries + It will be used as a threshold */ + used = SUB_S16(prod, cons) + (s16)NUM_TX_RINGS; + +#ifdef BNX2X_STOP_ON_ERROR + WARN_ON(used < 0); + WARN_ON(used > fp->bp->tx_ring_size); + WARN_ON((fp->bp->tx_ring_size - used) > MAX_TX_AVAIL); +#endif + + return (s16)(fp->bp->tx_ring_size) - used; +} + +static void bnx2x_tx_int(struct bnx2x_fastpath *fp, int work) +{ + struct bnx2x *bp = fp->bp; + u16 hw_cons, sw_cons, bd_cons = fp->tx_bd_cons; + int done = 0; + +#ifdef BNX2X_STOP_ON_ERROR + if (unlikely(bp->panic)) + return; +#endif + + hw_cons = le16_to_cpu(*fp->tx_cons_sb); + sw_cons = fp->tx_pkt_cons; + + while (sw_cons != hw_cons) { + u16 pkt_cons; + + pkt_cons = TX_BD(sw_cons); + + /* prefetch(bp->tx_buf_ring[pkt_cons].skb); */ + + DP(NETIF_MSG_TX_DONE, "hw_cons %u sw_cons %u pkt_cons %u\n", + hw_cons, sw_cons, pkt_cons); + +/* if (NEXT_TX_IDX(sw_cons) != hw_cons) { + rmb(); + prefetch(fp->tx_buf_ring[NEXT_TX_IDX(sw_cons)].skb); + } +*/ + bd_cons = bnx2x_free_tx_pkt(bp, fp, pkt_cons); + sw_cons++; + done++; + + if (done == work) + break; + } + + fp->tx_pkt_cons = sw_cons; + fp->tx_bd_cons = bd_cons; + + /* Need to make the tx_bd_cons update visible to start_xmit() + * before checking for netif_queue_stopped(). Without the + * memory barrier, there is a small possibility that start_xmit() + * will miss it and cause the queue to be stopped forever. + */ + smp_mb(); + + /* TBD need a thresh? */ + if (unlikely(netif_queue_stopped(bp->dev))) { + + netif_tx_lock(bp->dev); + + if (netif_queue_stopped(bp->dev) && + (bp->state == BNX2X_STATE_OPEN) && + (bnx2x_tx_avail(fp) >= MAX_SKB_FRAGS + 3)) + netif_wake_queue(bp->dev); + + netif_tx_unlock(bp->dev); + } +} + +#ifdef BCM_CNIC +static void bnx2x_cnic_cfc_comp(struct bnx2x *bp, int cid); +#endif + +static void bnx2x_sp_event(struct bnx2x_fastpath *fp, + union eth_rx_cqe *rr_cqe) +{ + struct bnx2x *bp = fp->bp; + int cid = SW_CID(rr_cqe->ramrod_cqe.conn_and_cmd_data); + int command = CQE_CMD(rr_cqe->ramrod_cqe.conn_and_cmd_data); + + DP(BNX2X_MSG_SP, + "fp %d cid %d got ramrod #%d state is %x type is %d\n", + FP_IDX(fp), cid, command, bp->state, + rr_cqe->ramrod_cqe.ramrod_type); + + bp->spq_left++; + + if (FP_IDX(fp)) { + switch (command | fp->state) { + case (RAMROD_CMD_ID_ETH_CLIENT_SETUP | + BNX2X_FP_STATE_OPENING): + DP(NETIF_MSG_IFUP, "got MULTI[%d] setup ramrod\n", + cid); + fp->state = BNX2X_FP_STATE_OPEN; + break; + + case (RAMROD_CMD_ID_ETH_HALT | BNX2X_FP_STATE_HALTING): + DP(NETIF_MSG_IFDOWN, "got MULTI[%d] halt ramrod\n", + cid); + fp->state = BNX2X_FP_STATE_HALTED; + break; + + default: + BNX2X_ERR("unexpected MC reply (%d) " + "fp->state is %x\n", command, fp->state); + break; + } + mb(); /* force bnx2x_wait_ramrod() to see the change */ + return; + } + + switch (command | bp->state) { + case (RAMROD_CMD_ID_ETH_PORT_SETUP | BNX2X_STATE_OPENING_WAIT4_PORT): + DP(NETIF_MSG_IFUP, "got setup ramrod\n"); + bp->state = BNX2X_STATE_OPEN; + break; + + case (RAMROD_CMD_ID_ETH_HALT | BNX2X_STATE_CLOSING_WAIT4_HALT): + DP(NETIF_MSG_IFDOWN, "got halt ramrod\n"); + bp->state = BNX2X_STATE_CLOSING_WAIT4_DELETE; + fp->state = BNX2X_FP_STATE_HALTED; + break; + + case (RAMROD_CMD_ID_ETH_CFC_DEL | BNX2X_STATE_CLOSING_WAIT4_HALT): + DP(NETIF_MSG_IFDOWN, "got delete ramrod for MULTI[%d]\n", cid); + bnx2x_fp(bp, cid, state) = BNX2X_FP_STATE_CLOSED; + break; + +#ifdef BCM_CNIC + case (RAMROD_CMD_ID_ETH_CFC_DEL | BNX2X_STATE_OPEN): + DP(NETIF_MSG_IFDOWN, "got delete ramrod for CID %d\n", cid); + bnx2x_cnic_cfc_comp(bp, cid); + break; +#endif + + case (RAMROD_CMD_ID_ETH_SET_MAC | BNX2X_STATE_OPEN): + case (RAMROD_CMD_ID_ETH_SET_MAC | BNX2X_STATE_DIAG): + DP(NETIF_MSG_IFUP, "got set mac ramrod\n"); + bp->set_mac_pending = 0; + break; + + case (RAMROD_CMD_ID_ETH_SET_MAC | BNX2X_STATE_CLOSING_WAIT4_HALT): + DP(NETIF_MSG_IFDOWN, "got (un)set mac ramrod\n"); + break; + + default: + BNX2X_ERR("unexpected MC reply (%d) bp->state is %x\n", + command, bp->state); + break; + } + mb(); /* force bnx2x_wait_ramrod() to see the change */ +} + +static inline void bnx2x_free_rx_sge(struct bnx2x *bp, + struct bnx2x_fastpath *fp, u16 index) +{ + struct sw_rx_page *sw_buf = &fp->rx_page_ring[index]; + struct page *page = sw_buf->page; + struct eth_rx_sge *sge = &fp->rx_sge_ring[index]; + + /* Skip "next page" elements */ + if (!page) + return; + + pci_unmap_page(bp->pdev, pci_unmap_addr(sw_buf, mapping), + BCM_PAGE_SIZE*PAGES_PER_SGE, PCI_DMA_FROMDEVICE); + __free_pages(page, PAGES_PER_SGE_SHIFT); + + sw_buf->page = NULL; + sge->addr_hi = 0; + sge->addr_lo = 0; +} + +static inline void bnx2x_free_rx_sge_range(struct bnx2x *bp, + struct bnx2x_fastpath *fp, int last) +{ + int i; + + for (i = 0; i < last; i++) + bnx2x_free_rx_sge(bp, fp, i); +} + +static inline int bnx2x_alloc_rx_sge(struct bnx2x *bp, + struct bnx2x_fastpath *fp, u16 index) +{ + struct page *page = alloc_pages(GFP_ATOMIC, PAGES_PER_SGE_SHIFT); + struct sw_rx_page *sw_buf = &fp->rx_page_ring[index]; + struct eth_rx_sge *sge = &fp->rx_sge_ring[index]; + dma_addr_t mapping; + + if (unlikely(page == NULL)) + return -ENOMEM; + + mapping = pci_map_page(bp->pdev, page, 0, BCM_PAGE_SIZE*PAGES_PER_SGE, + PCI_DMA_FROMDEVICE); +#if (LINUX_VERSION_CODE >= 0x02061a) /* BNX2X_UPSTREAM */ + if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { +#else + if (unlikely(dma_mapping_error(mapping))) { +#endif + __free_pages(page, PAGES_PER_SGE_SHIFT); + return -ENOMEM; + } + + sw_buf->page = page; + pci_unmap_addr_set(sw_buf, mapping, mapping); + + sge->addr_hi = cpu_to_le32(U64_HI(mapping)); + sge->addr_lo = cpu_to_le32(U64_LO(mapping)); + + return 0; +} + +static inline int bnx2x_alloc_rx_skb(struct bnx2x *bp, + struct bnx2x_fastpath *fp, u16 index) +{ + struct sk_buff *skb; + struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[index]; + struct eth_rx_bd *rx_bd = &fp->rx_desc_ring[index]; + dma_addr_t mapping; + + skb = netdev_alloc_skb(bp->dev, bp->rx_buf_size); + if (unlikely(skb == NULL)) + return -ENOMEM; + + mapping = pci_map_single(bp->pdev, skb->data, bp->rx_buf_size, + PCI_DMA_FROMDEVICE); +#if (LINUX_VERSION_CODE >= 0x02061a) /* BNX2X_UPSTREAM */ + if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) { +#else + if (unlikely(dma_mapping_error(mapping))) { +#endif + dev_kfree_skb(skb); + return -ENOMEM; + } + + rx_buf->skb = skb; + pci_unmap_addr_set(rx_buf, mapping, mapping); + + rx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); + rx_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); + + return 0; +} + +/* note that we are not allocating a new skb, + * we are just moving one from cons to prod + * we are not creating a new mapping, + * so there is no need to check for dma_mapping_error(). + */ +static void bnx2x_reuse_rx_skb(struct bnx2x_fastpath *fp, + struct sk_buff *skb, u16 cons, u16 prod) +{ + struct bnx2x *bp = fp->bp; + struct sw_rx_bd *cons_rx_buf = &fp->rx_buf_ring[cons]; + struct sw_rx_bd *prod_rx_buf = &fp->rx_buf_ring[prod]; + struct eth_rx_bd *cons_bd = &fp->rx_desc_ring[cons]; + struct eth_rx_bd *prod_bd = &fp->rx_desc_ring[prod]; + + pci_dma_sync_single_for_device(bp->pdev, + pci_unmap_addr(cons_rx_buf, mapping), + RX_COPY_THRESH, PCI_DMA_FROMDEVICE); + + prod_rx_buf->skb = cons_rx_buf->skb; + pci_unmap_addr_set(prod_rx_buf, mapping, + pci_unmap_addr(cons_rx_buf, mapping)); + *prod_bd = *cons_bd; +} + +#if !defined(__NO_TPA__) +static inline void bnx2x_update_last_max_sge(struct bnx2x_fastpath *fp, + u16 idx) +{ + u16 last_max = fp->last_max_sge; + + if (SUB_S16(idx, last_max) > 0) + fp->last_max_sge = idx; +} + +static void bnx2x_clear_sge_mask_next_elems(struct bnx2x_fastpath *fp) +{ + int i, j; + + for (i = 1; i <= NUM_RX_SGE_PAGES; i++) { + int idx = RX_SGE_CNT * i - 1; + + for (j = 0; j < 2; j++) { + SGE_MASK_CLEAR_BIT(fp, idx); + idx--; + } + } +} + +static void bnx2x_update_sge_prod(struct bnx2x_fastpath *fp, + struct eth_fast_path_rx_cqe *fp_cqe) +{ + struct bnx2x *bp = fp->bp; + u16 sge_len = BCM_PAGE_ALIGN(le16_to_cpu(fp_cqe->pkt_len) - + le16_to_cpu(fp_cqe->len_on_bd)) >> + BCM_PAGE_SHIFT; + u16 last_max, last_elem, first_elem; + u16 delta = 0; + u16 i; + + if (!sge_len) + return; + + /* First mark all used pages */ + for (i = 0; i < sge_len; i++) + SGE_MASK_CLEAR_BIT(fp, RX_SGE(le16_to_cpu(fp_cqe->sgl[i]))); + + DP(NETIF_MSG_RX_STATUS, "fp_cqe->sgl[%d] = %d\n", + sge_len - 1, le16_to_cpu(fp_cqe->sgl[sge_len - 1])); + + /* Here we assume that the last SGE index is the biggest */ + prefetch((void *)(fp->sge_mask)); + bnx2x_update_last_max_sge(fp, le16_to_cpu(fp_cqe->sgl[sge_len - 1])); + + last_max = RX_SGE(fp->last_max_sge); + last_elem = last_max >> RX_SGE_MASK_ELEM_SHIFT; + first_elem = RX_SGE(fp->rx_sge_prod) >> RX_SGE_MASK_ELEM_SHIFT; + + /* If ring is not full */ + if (last_elem + 1 != first_elem) + last_elem++; + + /* Now update the prod */ + for (i = first_elem; i != last_elem; i = NEXT_SGE_MASK_ELEM(i)) { + if (likely(fp->sge_mask[i])) + break; + + fp->sge_mask[i] = RX_SGE_MASK_ELEM_ONE_MASK; + delta += RX_SGE_MASK_ELEM_SZ; + } + + if (delta > 0) { + fp->rx_sge_prod += delta; + /* clear page-end entries */ + bnx2x_clear_sge_mask_next_elems(fp); + } + + DP(NETIF_MSG_RX_STATUS, + "fp->last_max_sge = %d fp->rx_sge_prod = %d\n", + fp->last_max_sge, fp->rx_sge_prod); +} + +static inline void bnx2x_init_sge_ring_bit_mask(struct bnx2x_fastpath *fp) +{ + /* Set the mask to all 1-s: it's faster to compare to 0 than to 0xf-s */ + memset(fp->sge_mask, 0xff, + (NUM_RX_SGE >> RX_SGE_MASK_ELEM_SHIFT)*sizeof(u64)); + + /* Clear the two last indices in the page to 1: + these are the indices that correspond to the "next" element, + hence will never be indicated and should be removed from + the calculations. */ + bnx2x_clear_sge_mask_next_elems(fp); +} + +static void bnx2x_tpa_start(struct bnx2x_fastpath *fp, u16 queue, + struct sk_buff *skb, u16 cons, u16 prod) +{ + struct bnx2x *bp = fp->bp; + struct sw_rx_bd *cons_rx_buf = &fp->rx_buf_ring[cons]; + struct sw_rx_bd *prod_rx_buf = &fp->rx_buf_ring[prod]; + struct eth_rx_bd *prod_bd = &fp->rx_desc_ring[prod]; + dma_addr_t mapping; + + /* move empty skb from pool to prod and map it */ + prod_rx_buf->skb = fp->tpa_pool[queue].skb; + mapping = pci_map_single(bp->pdev, fp->tpa_pool[queue].skb->data, + bp->rx_buf_size, PCI_DMA_FROMDEVICE); + pci_unmap_addr_set(prod_rx_buf, mapping, mapping); + + /* move partial skb from cons to pool (don't unmap yet) */ + fp->tpa_pool[queue] = *cons_rx_buf; + + /* mark bin state as start - print error if current state != stop */ + if (fp->tpa_state[queue] != BNX2X_TPA_STOP) + BNX2X_ERR("start of bin not in stop [%d]\n", queue); + + fp->tpa_state[queue] = BNX2X_TPA_START; + + /* point prod_bd to new skb */ + prod_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); + prod_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); + +#ifdef BNX2X_STOP_ON_ERROR + fp->tpa_queue_used |= (1 << queue); +#ifdef __powerpc64__ + DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%lx\n", +#else + DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%llx\n", +#endif + fp->tpa_queue_used); +#endif +} + +static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct bnx2x_fastpath *fp, + struct sk_buff *skb, + struct eth_fast_path_rx_cqe *fp_cqe, + u16 cqe_idx) +{ + struct sw_rx_page *rx_pg, old_rx_pg; + struct page *sge; + u16 len_on_bd = le16_to_cpu(fp_cqe->len_on_bd); + u32 i, frag_len, frag_size, pages; + int err; + int j; + + frag_size = le16_to_cpu(fp_cqe->pkt_len) - len_on_bd; + pages = BCM_PAGE_ALIGN(frag_size) >> BCM_PAGE_SHIFT; + + /* This is needed in order to enable forwarding support */ + if (frag_size) + skb_shinfo(skb)->gso_size = min((u32)BCM_PAGE_SIZE, + max(frag_size, (u32)len_on_bd)); + +#ifdef BNX2X_STOP_ON_ERROR + if (pages > 8*PAGES_PER_SGE) { + BNX2X_ERR("SGL length is too long: %d. CQE index is %d\n", + pages, cqe_idx); + BNX2X_ERR("fp_cqe->pkt_len = %d fp_cqe->len_on_bd = %d\n", + fp_cqe->pkt_len, len_on_bd); + bnx2x_panic(); + return -EINVAL; + } +#endif + + /* Run through the SGL and compose the fragmented skb */ + for (i = 0, j = 0; i < pages; i += PAGES_PER_SGE, j++) { + u16 sge_idx = RX_SGE(le16_to_cpu(fp_cqe->sgl[j])); + + /* FW gives the indices of the SGE as if the ring is an array + (meaning that "next" element will consume 2 indices) */ + frag_len = min(frag_size, (u32)(BCM_PAGE_SIZE*PAGES_PER_SGE)); + rx_pg = &fp->rx_page_ring[sge_idx]; + sge = rx_pg->page; + old_rx_pg = *rx_pg; + + /* If we fail to allocate a substitute page, we simply stop + where we are and drop the whole packet */ + err = bnx2x_alloc_rx_sge(bp, fp, sge_idx); + if (unlikely(err)) { + bp->eth_stats.rx_skb_alloc_failed++; + return err; + } + + /* Unmap the page as we r going to pass it to the stack */ + pci_unmap_page(bp->pdev, pci_unmap_addr(&old_rx_pg, mapping), + BCM_PAGE_SIZE*PAGES_PER_SGE, PCI_DMA_FROMDEVICE); + + /* Add one frag and update the appropriate fields in the skb */ + skb_fill_page_desc(skb, j, old_rx_pg.page, 0, frag_len); + + skb->data_len += frag_len; + skb->truesize += frag_len; + skb->len += frag_len; + + frag_size -= frag_len; + } + + return 0; +} + +static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp, + u16 queue, int pad, int len, union eth_rx_cqe *cqe, + u16 cqe_idx) +{ + struct sw_rx_bd *rx_buf = &fp->tpa_pool[queue]; + struct sk_buff *skb = rx_buf->skb; + /* alloc new skb */ + struct sk_buff *new_skb = netdev_alloc_skb(bp->dev, bp->rx_buf_size); + + /* Unmap skb in the pool anyway, as we are going to change + pool entry status to BNX2X_TPA_STOP even if new skb allocation + fails. */ + pci_unmap_single(bp->pdev, pci_unmap_addr(rx_buf, mapping), + bp->rx_buf_size, PCI_DMA_FROMDEVICE); + + if (likely(new_skb)) { + /* fix ip xsum and give it to the stack */ + /* (no need to map the new skb) */ + + prefetch(skb); + prefetch(((char *)(skb)) + 128); + +#ifdef BNX2X_STOP_ON_ERROR + if (pad + len > bp->rx_buf_size) { + BNX2X_ERR("skb_put is about to fail... " + "pad %d len %d rx_buf_size %d\n", + pad, len, bp->rx_buf_size); + bnx2x_panic(); + return; + } +#endif + + skb_reserve(skb, pad); + skb_put(skb, len); + + skb->protocol = eth_type_trans(skb, bp->dev); + skb->ip_summed = CHECKSUM_UNNECESSARY; + + { + struct iphdr *iph; + + iph = (struct iphdr *)skb->data; + iph->check = 0; + iph->check = ip_fast_csum((u8 *)iph, iph->ihl); + } + + if (!bnx2x_fill_frag_skb(bp, fp, skb, + &cqe->fast_path_cqe, cqe_idx)) { +#ifdef BCM_VLAN + if ((bp->vlgrp != NULL) && + (le16_to_cpu(cqe->fast_path_cqe.pars_flags.flags) & + PARSING_FLAGS_VLAN)) + vlan_hwaccel_receive_skb(skb, bp->vlgrp, + le16_to_cpu(cqe->fast_path_cqe. + vlan_tag)); + else +#endif + netif_receive_skb(skb); + } else { + DP(NETIF_MSG_RX_STATUS, "Failed to allocate new pages" + " - dropping packet!\n"); + dev_kfree_skb(skb); + } + + bp->dev->last_rx = jiffies; + + /* put new skb in bin */ + fp->tpa_pool[queue].skb = new_skb; + + } else { + /* else drop the packet and keep the buffer in the bin */ + DP(NETIF_MSG_RX_STATUS, + "Failed to allocate new skb - dropping packet!\n"); + bp->eth_stats.rx_skb_alloc_failed++; + } + + fp->tpa_state[queue] = BNX2X_TPA_STOP; +} +#endif + +static inline void bnx2x_update_rx_prod(struct bnx2x *bp, + struct bnx2x_fastpath *fp, + u16 bd_prod, u16 rx_comp_prod, + u16 rx_sge_prod) +{ + struct ustorm_eth_rx_producers rx_prods = {0}; + int i; + + /* Update producers */ + rx_prods.bd_prod = bd_prod; + rx_prods.cqe_prod = rx_comp_prod; + rx_prods.sge_prod = rx_sge_prod; + + for (i = 0; i < sizeof(struct ustorm_eth_rx_producers)/4; i++) + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_RX_PRODS_OFFSET(BP_PORT(bp), FP_CL_ID(fp)) + i*4, + ((u32 *)&rx_prods)[i]); + + DP(NETIF_MSG_RX_STATUS, + "Wrote: bd_prod %u cqe_prod %u sge_prod %u\n", + bd_prod, rx_comp_prod, rx_sge_prod); +} + +static int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget) +{ + struct bnx2x *bp = fp->bp; + u16 bd_cons, bd_prod, bd_prod_fw, comp_ring_cons; + u16 hw_comp_cons, sw_comp_cons, sw_comp_prod; + int rx_pkt = 0; + +#ifdef BNX2X_STOP_ON_ERROR + if (unlikely(bp->panic)) + return 0; +#endif + + /* CQ "next element" is of the size of the regular element, + that's why it's ok here */ + hw_comp_cons = le16_to_cpu(*fp->rx_cons_sb); + if ((hw_comp_cons & MAX_RCQ_DESC_CNT) == MAX_RCQ_DESC_CNT) + hw_comp_cons++; + + bd_cons = fp->rx_bd_cons; + bd_prod = fp->rx_bd_prod; + bd_prod_fw = bd_prod; + sw_comp_cons = fp->rx_comp_cons; + sw_comp_prod = fp->rx_comp_prod; + + /* Memory barrier necessary as speculative reads of the rx + * buffer can be ahead of the index in the status block + */ + rmb(); + + DP(NETIF_MSG_RX_STATUS, + "queue[%d]: hw_comp_cons %u sw_comp_cons %u\n", + FP_IDX(fp), hw_comp_cons, sw_comp_cons); + + while (sw_comp_cons != hw_comp_cons) { + struct sw_rx_bd *rx_buf = NULL; + struct sk_buff *skb; + union eth_rx_cqe *cqe; + u8 cqe_fp_flags; + u16 len, pad; + + comp_ring_cons = RCQ_BD(sw_comp_cons); + bd_prod = RX_BD(bd_prod); + bd_cons = RX_BD(bd_cons); + + cqe = &fp->rx_comp_ring[comp_ring_cons]; + cqe_fp_flags = cqe->fast_path_cqe.type_error_flags; + + DP(NETIF_MSG_RX_STATUS, "CQE type %x err %x status %x" + " queue %x vlan %x len %u\n", CQE_TYPE(cqe_fp_flags), + cqe_fp_flags, cqe->fast_path_cqe.status_flags, + cqe->fast_path_cqe.rss_hash_result, + le16_to_cpu(cqe->fast_path_cqe.vlan_tag), + le16_to_cpu(cqe->fast_path_cqe.pkt_len)); + + /* is this a slowpath msg? */ + if (unlikely(CQE_TYPE(cqe_fp_flags))) { + bnx2x_sp_event(fp, cqe); + goto next_cqe; + + /* this is an rx packet */ + } else { + rx_buf = &fp->rx_buf_ring[bd_cons]; + skb = rx_buf->skb; + len = le16_to_cpu(cqe->fast_path_cqe.pkt_len); + pad = cqe->fast_path_cqe.placement_offset; + +#if !defined(__NO_TPA__) + /* If CQE is marked both TPA_START and TPA_END + it is a non-TPA CQE */ + if ((!fp->disable_tpa) && + (TPA_TYPE(cqe_fp_flags) != + (TPA_TYPE_START | TPA_TYPE_END))) { + u16 queue = cqe->fast_path_cqe.queue_index; + + if (TPA_TYPE(cqe_fp_flags) == TPA_TYPE_START) { + DP(NETIF_MSG_RX_STATUS, + "calling tpa_start on queue %d\n", + queue); + + bnx2x_tpa_start(fp, queue, skb, + bd_cons, bd_prod); + goto next_rx; + } + + if (TPA_TYPE(cqe_fp_flags) == TPA_TYPE_END) { + DP(NETIF_MSG_RX_STATUS, + "calling tpa_stop on queue %d\n", + queue); + + if (!BNX2X_RX_SUM_FIX(cqe)) + BNX2X_ERR("STOP on none TCP " + "data\n"); + + /* This is a size of the linear data + on this skb */ + len = le16_to_cpu(cqe->fast_path_cqe. + len_on_bd); + bnx2x_tpa_stop(bp, fp, queue, pad, + len, cqe, comp_ring_cons); +#ifdef BNX2X_STOP_ON_ERROR + if (bp->panic) + return -EINVAL; +#endif + + bnx2x_update_sge_prod(fp, + &cqe->fast_path_cqe); + goto next_cqe; + } + } +#endif + + pci_dma_sync_single_for_device(bp->pdev, + pci_unmap_addr(rx_buf, mapping), + pad + RX_COPY_THRESH, + PCI_DMA_FROMDEVICE); + prefetch(skb); + prefetch(((char *)(skb)) + 128); + + /* is this an error packet? */ + if (unlikely(cqe_fp_flags & ETH_RX_ERROR_FALGS)) { + DP(NETIF_MSG_RX_ERR, + "ERROR flags %x rx packet %u\n", + cqe_fp_flags, sw_comp_cons); + bp->eth_stats.rx_err_discard_pkt++; + goto reuse_rx; + } + + /* Since we don't have a jumbo ring + * copy small packets if mtu > 1500 + */ + if ((bp->dev->mtu > ETH_MAX_PACKET_SIZE) && + (len <= RX_COPY_THRESH)) { + struct sk_buff *new_skb; + + new_skb = netdev_alloc_skb(bp->dev, + len + pad); + if (new_skb == NULL) { + DP(NETIF_MSG_RX_ERR, + "ERROR packet dropped " + "because of alloc failure\n"); + bp->eth_stats.rx_skb_alloc_failed++; + goto reuse_rx; + } + + /* aligned copy */ + skb_copy_from_linear_data_offset(skb, pad, + new_skb->data + pad, len); + skb_reserve(new_skb, pad); + skb_put(new_skb, len); + + bnx2x_reuse_rx_skb(fp, skb, bd_cons, bd_prod); + + skb = new_skb; + + } else if (bnx2x_alloc_rx_skb(bp, fp, bd_prod) == 0) { + pci_unmap_single(bp->pdev, + pci_unmap_addr(rx_buf, mapping), + bp->rx_buf_size, + PCI_DMA_FROMDEVICE); + skb_reserve(skb, pad); + skb_put(skb, len); + + } else { + DP(NETIF_MSG_RX_ERR, + "ERROR packet dropped because " + "of alloc failure\n"); + bp->eth_stats.rx_skb_alloc_failed++; +reuse_rx: + bnx2x_reuse_rx_skb(fp, skb, bd_cons, bd_prod); + goto next_rx; + } + + skb->protocol = eth_type_trans(skb, bp->dev); + + skb->ip_summed = CHECKSUM_NONE; + if (bp->rx_csum) { + if (likely(BNX2X_RX_CSUM_OK(cqe))) + skb->ip_summed = CHECKSUM_UNNECESSARY; + else + bp->eth_stats.hw_csum_err++; + } + } + +#ifdef BCM_VLAN + if ((bp->vlgrp != NULL) && + (le16_to_cpu(cqe->fast_path_cqe.pars_flags.flags) & + PARSING_FLAGS_VLAN)) + vlan_hwaccel_receive_skb(skb, bp->vlgrp, + le16_to_cpu(cqe->fast_path_cqe.vlan_tag)); + else +#endif + netif_receive_skb(skb); + + bp->dev->last_rx = jiffies; + +next_rx: + rx_buf->skb = NULL; + + bd_cons = NEXT_RX_IDX(bd_cons); + bd_prod = NEXT_RX_IDX(bd_prod); + bd_prod_fw = NEXT_RX_IDX(bd_prod_fw); + rx_pkt++; +next_cqe: + sw_comp_prod = NEXT_RCQ_IDX(sw_comp_prod); + sw_comp_cons = NEXT_RCQ_IDX(sw_comp_cons); + + if (rx_pkt == budget) + break; + } /* while */ + + fp->rx_bd_cons = bd_cons; + fp->rx_bd_prod = bd_prod_fw; + fp->rx_comp_cons = sw_comp_cons; + fp->rx_comp_prod = sw_comp_prod; + + /* Update producers */ + bnx2x_update_rx_prod(bp, fp, bd_prod_fw, sw_comp_prod, + fp->rx_sge_prod); + mmiowb(); /* keep prod updates ordered */ + + fp->rx_pkt += rx_pkt; + fp->rx_calls++; + + return rx_pkt; +} + +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ +#if (LINUX_VERSION_CODE < 0x20613) +static irqreturn_t bnx2x_msix_fp_int(int irq, void *fp_cookie, + struct pt_regs *regs) +#else /* BNX2X_UPSTREAM */ +static irqreturn_t bnx2x_msix_fp_int(int irq, void *fp_cookie) +#endif +{ + struct bnx2x_fastpath *fp = fp_cookie; + struct bnx2x *bp = fp->bp; + struct net_device *dev = bp->dev; + int index = FP_IDX(fp); + + /* Return here if interrupt is disabled */ + if (unlikely(atomic_read(&bp->intr_sem) != 0)) { + DP(NETIF_MSG_INTR, "called but intr_sem not 0, returning\n"); + return IRQ_HANDLED; + } + + DP(BNX2X_MSG_FP, "got an MSI-X interrupt on IDX:SB [%d:%d]\n", + index, FP_SB_ID(fp)); + bnx2x_ack_sb(bp, FP_SB_ID(fp), USTORM_ID, 0, IGU_INT_DISABLE, 0); + +#ifdef BNX2X_STOP_ON_ERROR + if (unlikely(bp->panic)) + return IRQ_HANDLED; +#endif + + prefetch(fp->rx_cons_sb); + prefetch(fp->tx_cons_sb); + prefetch(&fp->status_blk->c_status_block.status_block_index); + prefetch(&fp->status_blk->u_status_block.status_block_index); + + netif_rx_schedule(dev, &bnx2x_fp(bp, index, napi)); + + return IRQ_HANDLED; +} +#endif + +#if (LINUX_VERSION_CODE < 0x20613) +static irqreturn_t bnx2x_interrupt(int irq, void *dev_instance, + struct pt_regs *regs) +#else /* BNX2X_UPSTREAM */ +static irqreturn_t bnx2x_interrupt(int irq, void *dev_instance) +#endif +{ + struct net_device *dev = dev_instance; + struct bnx2x *bp = netdev_priv(dev); + u16 status = bnx2x_ack_int(bp); + u16 mask; + + /* Return here if interrupt is shared and it's not for us */ + if (unlikely(status == 0)) { + DP(NETIF_MSG_INTR, "not our interrupt!\n"); + return IRQ_NONE; + } + DP(NETIF_MSG_INTR, "got an interrupt status 0x%x\n", status); + + /* Return here if interrupt is disabled */ + if (unlikely(atomic_read(&bp->intr_sem) != 0)) { + DP(NETIF_MSG_INTR, "called but intr_sem not 0, returning\n"); + return IRQ_HANDLED; + } + +#ifdef BNX2X_STOP_ON_ERROR + if (unlikely(bp->panic)) + return IRQ_HANDLED; +#endif + + mask = 0x2 << bp->fp[0].sb_id; + if (status & mask) { + struct bnx2x_fastpath *fp = &bp->fp[0]; + + prefetch(fp->rx_cons_sb); + prefetch(fp->tx_cons_sb); + prefetch(&fp->status_blk->c_status_block.status_block_index); + prefetch(&fp->status_blk->u_status_block.status_block_index); + + netif_rx_schedule(dev, &bnx2x_fp(bp, 0, napi)); + + status &= ~mask; + } + +#ifdef BCM_CNIC + mask = 0x2 << CNIC_SB_ID; + if (status & mask) { + struct cnic_ops *c_ops = NULL; + + rcu_read_lock(); + c_ops = rcu_dereference(bp->cnic_ops); + if (c_ops) + c_ops->cnic_handler(bp->cnic_data, NULL); + rcu_read_unlock(); + + status &= ~mask; + } +#endif + + if (unlikely(status & 0x1)) { + schedule_work(&bp->sp_task); + + status &= ~0x1; + if (!status) + return IRQ_HANDLED; + } + + if (status) + DP(NETIF_MSG_INTR, "got an unknown interrupt! (status %u)\n", + status); + + return IRQ_HANDLED; +} + +/* end of fast path */ + +static void bnx2x_stats_handle(struct bnx2x *bp, enum bnx2x_stats_event event); + +/* Link */ + +/* + * General service functions + */ + +static int bnx2x_acquire_hw_lock(struct bnx2x *bp, u32 resource) +{ + u32 lock_status; + u32 resource_bit = (1 << resource); + int func = BP_FUNC(bp); + u32 hw_lock_control_reg; + int cnt; + + /* Validating that the resource is within range */ + if (resource > HW_LOCK_MAX_RESOURCE_VALUE) { + DP(NETIF_MSG_HW, + "resource(0x%x) > HW_LOCK_MAX_RESOURCE_VALUE(0x%x)\n", + resource, HW_LOCK_MAX_RESOURCE_VALUE); + return -EINVAL; + } + + if (func <= 5) { + hw_lock_control_reg = (MISC_REG_DRIVER_CONTROL_1 + func*8); + } else { + hw_lock_control_reg = + (MISC_REG_DRIVER_CONTROL_7 + (func - 6)*8); + } + + /* Validating that the resource is not already taken */ + lock_status = REG_RD(bp, hw_lock_control_reg); + if (lock_status & resource_bit) { + DP(NETIF_MSG_HW, "lock_status 0x%x resource_bit 0x%x\n", + lock_status, resource_bit); + return -EEXIST; + } + + /* Try for 5 second every 5ms */ + for (cnt = 0; cnt < 1000; cnt++) { + /* Try to acquire the lock */ + REG_WR(bp, hw_lock_control_reg + 4, resource_bit); + lock_status = REG_RD(bp, hw_lock_control_reg); + if (lock_status & resource_bit) + return 0; + + msleep(5); + } + DP(NETIF_MSG_HW, "Timeout\n"); + return -EAGAIN; +} + +static int bnx2x_release_hw_lock(struct bnx2x *bp, u32 resource) +{ + u32 lock_status; + u32 resource_bit = (1 << resource); + int func = BP_FUNC(bp); + u32 hw_lock_control_reg; + + /* Validating that the resource is within range */ + if (resource > HW_LOCK_MAX_RESOURCE_VALUE) { + DP(NETIF_MSG_HW, + "resource(0x%x) > HW_LOCK_MAX_RESOURCE_VALUE(0x%x)\n", + resource, HW_LOCK_MAX_RESOURCE_VALUE); + return -EINVAL; + } + + if (func <= 5) { + hw_lock_control_reg = (MISC_REG_DRIVER_CONTROL_1 + func*8); + } else { + hw_lock_control_reg = + (MISC_REG_DRIVER_CONTROL_7 + (func - 6)*8); + } + + /* Validating that the resource is currently taken */ + lock_status = REG_RD(bp, hw_lock_control_reg); + if (!(lock_status & resource_bit)) { + DP(NETIF_MSG_HW, "lock_status 0x%x resource_bit 0x%x\n", + lock_status, resource_bit); + return -EFAULT; + } + + REG_WR(bp, hw_lock_control_reg, resource_bit); + return 0; +} + +/* HW Lock for shared dual port PHYs */ +static void bnx2x_acquire_phy_lock(struct bnx2x *bp) +{ + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(bp->link_params.ext_phy_config); + + mutex_lock(&bp->port.phy_mutex); + + if ((ext_phy_type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072) || + (ext_phy_type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073)) + bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_8072_MDIO); +} + +static void bnx2x_release_phy_lock(struct bnx2x *bp) +{ + u32 ext_phy_type = XGXS_EXT_PHY_TYPE(bp->link_params.ext_phy_config); + + if ((ext_phy_type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072) || + (ext_phy_type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073)) + bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_8072_MDIO); + + mutex_unlock(&bp->port.phy_mutex); +} + +int bnx2x_set_gpio(struct bnx2x *bp, int gpio_num, u32 mode, u8 port) +{ + /* The GPIO should be swapped if swap register is set and active */ + int gpio_port = (REG_RD(bp, NIG_REG_PORT_SWAP) && + REG_RD(bp, NIG_REG_STRAP_OVERRIDE)) ^ port; + int gpio_shift = gpio_num + + (gpio_port ? MISC_REGISTERS_GPIO_PORT_SHIFT : 0); + u32 gpio_mask = (1 << gpio_shift); + u32 gpio_reg; + + if (gpio_num > MISC_REGISTERS_GPIO_3) { + BNX2X_ERR("Invalid GPIO %d\n", gpio_num); + return -EINVAL; + } + + bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_GPIO); + /* read GPIO and mask except the float bits */ + gpio_reg = (REG_RD(bp, MISC_REG_GPIO) & MISC_REGISTERS_GPIO_FLOAT); + + switch (mode) { + case MISC_REGISTERS_GPIO_OUTPUT_LOW: + DP(NETIF_MSG_LINK, "Set GPIO %d (shift %d) -> output low\n", + gpio_num, gpio_shift); + /* clear FLOAT and set CLR */ + gpio_reg &= ~(gpio_mask << MISC_REGISTERS_GPIO_FLOAT_POS); + gpio_reg |= (gpio_mask << MISC_REGISTERS_GPIO_CLR_POS); + break; + + case MISC_REGISTERS_GPIO_OUTPUT_HIGH: + DP(NETIF_MSG_LINK, "Set GPIO %d (shift %d) -> output high\n", + gpio_num, gpio_shift); + /* clear FLOAT and set SET */ + gpio_reg &= ~(gpio_mask << MISC_REGISTERS_GPIO_FLOAT_POS); + gpio_reg |= (gpio_mask << MISC_REGISTERS_GPIO_SET_POS); + break; + + case MISC_REGISTERS_GPIO_INPUT_HI_Z: + DP(NETIF_MSG_LINK, "Set GPIO %d (shift %d) -> input\n", + gpio_num, gpio_shift); + /* set FLOAT */ + gpio_reg |= (gpio_mask << MISC_REGISTERS_GPIO_FLOAT_POS); + break; + + default: + break; + } + + REG_WR(bp, MISC_REG_GPIO, gpio_reg); + bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_GPIO); + + return 0; +} + +static int bnx2x_set_spio(struct bnx2x *bp, int spio_num, u32 mode) +{ + u32 spio_mask = (1 << spio_num); + u32 spio_reg; + + if ((spio_num < MISC_REGISTERS_SPIO_4) || + (spio_num > MISC_REGISTERS_SPIO_7)) { + BNX2X_ERR("Invalid SPIO %d\n", spio_num); + return -EINVAL; + } + + bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_SPIO); + /* read SPIO and mask except the float bits */ + spio_reg = (REG_RD(bp, MISC_REG_SPIO) & MISC_REGISTERS_SPIO_FLOAT); + + switch (mode) { + case MISC_REGISTERS_SPIO_OUTPUT_LOW: + DP(NETIF_MSG_LINK, "Set SPIO %d -> output low\n", spio_num); + /* clear FLOAT and set CLR */ + spio_reg &= ~(spio_mask << MISC_REGISTERS_SPIO_FLOAT_POS); + spio_reg |= (spio_mask << MISC_REGISTERS_SPIO_CLR_POS); + break; + + case MISC_REGISTERS_SPIO_OUTPUT_HIGH: + DP(NETIF_MSG_LINK, "Set SPIO %d -> output high\n", spio_num); + /* clear FLOAT and set SET */ + spio_reg &= ~(spio_mask << MISC_REGISTERS_SPIO_FLOAT_POS); + spio_reg |= (spio_mask << MISC_REGISTERS_SPIO_SET_POS); + break; + + case MISC_REGISTERS_SPIO_INPUT_HI_Z: + DP(NETIF_MSG_LINK, "Set SPIO %d -> input\n", spio_num); + /* set FLOAT */ + spio_reg |= (spio_mask << MISC_REGISTERS_SPIO_FLOAT_POS); + break; + + default: + break; + } + + REG_WR(bp, MISC_REG_SPIO, spio_reg); + bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_SPIO); + + return 0; +} + +static void bnx2x_calc_fc_adv(struct bnx2x *bp) +{ + switch (bp->link_vars.ieee_fc) { + case MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE: + bp->port.advertising &= ~(ADVERTISED_Asym_Pause | + ADVERTISED_Pause); + break; + case MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH: + bp->port.advertising |= (ADVERTISED_Asym_Pause | + ADVERTISED_Pause); + break; + case MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC: + bp->port.advertising |= ADVERTISED_Asym_Pause; + break; + default: + bp->port.advertising &= ~(ADVERTISED_Asym_Pause | + ADVERTISED_Pause); + break; + } +} + +static void bnx2x_link_report(struct bnx2x *bp) +{ + if (bp->link_vars.link_up) { + if (bp->state == BNX2X_STATE_OPEN) + netif_carrier_on(bp->dev); + printk(KERN_INFO PFX "%s NIC Link is Up, ", bp->dev->name); + + printk("%d Mbps ", bp->link_vars.line_speed); + + if (bp->link_vars.duplex == DUPLEX_FULL) + printk("full duplex"); + else + printk("half duplex"); + + if (bp->link_vars.flow_ctrl != FLOW_CTRL_NONE) { + if (bp->link_vars.flow_ctrl & FLOW_CTRL_RX) { + printk(", receive "); + if (bp->link_vars.flow_ctrl & FLOW_CTRL_TX) + printk("& transmit "); + } else { + printk(", transmit "); + } + printk("flow control ON"); + } + printk("\n"); + + } else { /* link_down */ + netif_carrier_off(bp->dev); + printk(KERN_ERR PFX "%s NIC Link is Down\n", bp->dev->name); + } +} + +static u8 bnx2x_initial_phy_init(struct bnx2x *bp) +{ + if (!BP_NOMCP(bp)) { + u8 rc; + + /* Initialize link parameters structure variables */ + /* It is recommended to turn off RX FC for jumbo frames + for better performance */ + if (IS_E1HMF(bp)) + bp->link_params.req_fc_auto_adv = FLOW_CTRL_BOTH; + else if (bp->dev->mtu > 5000) + bp->link_params.req_fc_auto_adv = FLOW_CTRL_TX; + else + bp->link_params.req_fc_auto_adv = FLOW_CTRL_BOTH; + + bnx2x_acquire_phy_lock(bp); + rc = bnx2x_phy_init(&bp->link_params, &bp->link_vars); + bnx2x_release_phy_lock(bp); + + if (bp->link_vars.link_up) + bnx2x_link_report(bp); + + bnx2x_calc_fc_adv(bp); + + return rc; + } + BNX2X_ERR("Bootcode is missing -not initializing link\n"); + return -EINVAL; +} + +static void bnx2x_link_set(struct bnx2x *bp) +{ + if (!BP_NOMCP(bp)) { + bnx2x_acquire_phy_lock(bp); + bnx2x_phy_init(&bp->link_params, &bp->link_vars); + bnx2x_release_phy_lock(bp); + + bnx2x_calc_fc_adv(bp); + } else + BNX2X_ERR("Bootcode is missing -not setting link\n"); +} + +static void bnx2x__link_reset(struct bnx2x *bp) +{ + if (!BP_NOMCP(bp)) { + bnx2x_acquire_phy_lock(bp); + bnx2x_link_reset(&bp->link_params, &bp->link_vars); + bnx2x_release_phy_lock(bp); + } else + BNX2X_ERR("Bootcode is missing -not resetting link\n"); +} + +static u8 bnx2x_link_test(struct bnx2x *bp) +{ + u8 rc; + + bnx2x_acquire_phy_lock(bp); + rc = bnx2x_test_link(&bp->link_params, &bp->link_vars); + bnx2x_release_phy_lock(bp); + + return rc; +} + +static void bnx2x_init_port_minmax(struct bnx2x *bp) +{ + u32 r_param = bp->link_vars.line_speed / 8; + u32 fair_periodic_timeout_usec; + u32 t_fair; + + memset(&(bp->cmng.rs_vars), 0, + sizeof(struct rate_shaping_vars_per_port)); + memset(&(bp->cmng.fair_vars), 0, sizeof(struct fairness_vars_per_port)); + + /* 100 usec in SDM ticks = 25 since each tick is 4 usec */ + bp->cmng.rs_vars.rs_periodic_timeout = RS_PERIODIC_TIMEOUT_USEC / 4; + + /* this is the threshold below which no timer arming will occur + 1.25 coefficient is for the threshold to be a little bigger + than the real time, to compensate for timer in-accuracy */ + bp->cmng.rs_vars.rs_threshold = + (RS_PERIODIC_TIMEOUT_USEC * r_param * 5) / 4; + + /* resolution of fairness timer */ + fair_periodic_timeout_usec = QM_ARB_BYTES / r_param; + /* for 10G it is 1000usec. for 1G it is 10000usec. */ + t_fair = T_FAIR_COEF / bp->link_vars.line_speed; + + /* this is the threshold below which we won't arm the timer anymore */ + bp->cmng.fair_vars.fair_threshold = QM_ARB_BYTES; + + /* we multiply by 1e3/8 to get bytes/msec. + We don't want the credits to pass a credit + of the T_FAIR*FAIR_MEM (algorithm resolution) */ + bp->cmng.fair_vars.upper_bound = r_param * t_fair * FAIR_MEM; + /* since each tick is 4 usec */ + bp->cmng.fair_vars.fairness_timeout = fair_periodic_timeout_usec / 4; +} + +static void bnx2x_init_vn_minmax(struct bnx2x *bp, int func) +{ + struct rate_shaping_vars_per_vn m_rs_vn; + struct fairness_vars_per_vn m_fair_vn; + u32 vn_cfg = SHMEM_RD(bp, mf_cfg.func_mf_config[func].config); + u16 vn_min_rate, vn_max_rate; + int i; + + /* If function is hidden - set min and max to zeroes */ + if (vn_cfg & FUNC_MF_CFG_FUNC_HIDE) { + vn_min_rate = 0; + vn_max_rate = 0; + + } else { + vn_min_rate = ((vn_cfg & FUNC_MF_CFG_MIN_BW_MASK) >> + FUNC_MF_CFG_MIN_BW_SHIFT) * 100; + /* If FAIRNESS is enabled (not all min rates are zeroes) and + if current min rate is zero - set it to 1. + This is a requirement of the algorithm. */ + if (bp->wsum && (vn_min_rate == 0)) + vn_min_rate = DEF_MIN_RATE; + vn_max_rate = ((vn_cfg & FUNC_MF_CFG_MAX_BW_MASK) >> + FUNC_MF_CFG_MAX_BW_SHIFT) * 100; + } + + DP(NETIF_MSG_IFUP, "func %d: vn_min_rate=%d vn_max_rate=%d " + "wsum=%d\n", func, vn_min_rate, vn_max_rate, bp->wsum); + + memset(&m_rs_vn, 0, sizeof(struct rate_shaping_vars_per_vn)); + memset(&m_fair_vn, 0, sizeof(struct fairness_vars_per_vn)); + + /* global vn counter - maximal Mbps for this vn */ + m_rs_vn.vn_counter.rate = vn_max_rate; + + /* quota - number of bytes transmitted in this period */ + m_rs_vn.vn_counter.quota = + (vn_max_rate * RS_PERIODIC_TIMEOUT_USEC) / 8; + +#ifdef BNX2X_PER_PROT_QOS + /* per protocol counter */ + for (protocol = 0; protocol < NUM_OF_PROTOCOLS; protocol++) { + /* maximal Mbps for this protocol */ + m_rs_vn.protocol_counters[protocol].rate = + protocol_max_rate[protocol]; + /* the quota in each timer period - + number of bytes transmitted in this period */ + m_rs_vn.protocol_counters[protocol].quota = + (u32)(rs_periodic_timeout_usec * + ((double)m_rs_vn. + protocol_counters[protocol].rate/8)); + } +#endif + + if (bp->wsum) { + /* credit for each period of the fairness algorithm: + number of bytes in T_FAIR (the vn share the port rate). + wsum should not be larger than 10000, thus + T_FAIR_COEF / (8 * wsum) will always be grater than zero */ + m_fair_vn.vn_credit_delta = + max((u32)(vn_min_rate * (T_FAIR_COEF / (8 * bp->wsum))), + (u32)(bp->cmng.fair_vars.fair_threshold * 2)); + DP(NETIF_MSG_IFUP, "m_fair_vn.vn_credit_delta=%d\n", + m_fair_vn.vn_credit_delta); + } + +#ifdef BNX2X_PER_PROT_QOS + do { + u32 protocolWeightSum = 0; + + for (protocol = 0; protocol < NUM_OF_PROTOCOLS; protocol++) + protocolWeightSum += + drvInit.protocol_min_rate[protocol]; + /* per protocol counter - + NOT NEEDED IF NO PER-PROTOCOL CONGESTION MANAGEMENT */ + if (protocolWeightSum > 0) { + for (protocol = 0; + protocol < NUM_OF_PROTOCOLS; protocol++) + /* credit for each period of the + fairness algorithm - number of bytes in + T_FAIR (the protocol share the vn rate) */ + m_fair_vn.protocol_credit_delta[protocol] = + (u32)((vn_min_rate / 8) * t_fair * + protocol_min_rate / protocolWeightSum); + } + } while (0); +#endif + + /* Store it to internal memory */ + for (i = 0; i < sizeof(struct rate_shaping_vars_per_vn)/4; i++) + REG_WR(bp, BAR_XSTRORM_INTMEM + + XSTORM_RATE_SHAPING_PER_VN_VARS_OFFSET(func) + i * 4, + ((u32 *)(&m_rs_vn))[i]); + + for (i = 0; i < sizeof(struct fairness_vars_per_vn)/4; i++) + REG_WR(bp, BAR_XSTRORM_INTMEM + + XSTORM_FAIRNESS_PER_VN_VARS_OFFSET(func) + i * 4, + ((u32 *)(&m_fair_vn))[i]); +} + +/* This function is called upon link interrupt */ +static void bnx2x_link_attn(struct bnx2x *bp) +{ + /* Make sure that we are synced with the current statistics */ + bnx2x_stats_handle(bp, STATS_EVENT_STOP); + + bnx2x_link_update(&bp->link_params, &bp->link_vars); + + if (bp->link_vars.link_up) { + + if (bp->link_vars.mac_type == MAC_TYPE_BMAC) { + struct host_port_stats *pstats; + + pstats = bnx2x_sp(bp, port_stats); + /* reset old bmac stats */ + memset(&(pstats->mac_stx[0]), 0, + sizeof(struct mac_stx)); + } + if ((bp->state == BNX2X_STATE_OPEN) || + (bp->state == BNX2X_STATE_DISABLED)) + bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP); + } + + /* indicate link status */ + bnx2x_link_report(bp); + + if (IS_E1HMF(bp)) { + int port = BP_PORT(bp); + int func; + int vn; + + for (vn = VN_0; vn < E1HVN_MAX; vn++) { + if (vn == BP_E1HVN(bp)) + continue; + + func = ((vn << 1) | port); + + /* Set the attention towards other drivers + on the same port */ + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_0 + + (LINK_SYNC_ATTENTION_BIT_FUNC_0 + func)*4, 1); + } + + if (bp->link_vars.link_up) { + int i; + + /* Init RATE SHAPING and FAIRNESS contexts */ + bnx2x_init_port_minmax(bp); + + for (vn = VN_0; vn < E1HVN_MAX; vn++) + bnx2x_init_vn_minmax(bp, 2*vn + port); + + /* Store it to internal memory */ + for (i = 0; + i < sizeof(struct cmng_struct_per_port) / 4; i++) + REG_WR(bp, BAR_XSTRORM_INTMEM + + XSTORM_CMNG_PER_PORT_VARS_OFFSET(port) + i*4, + ((u32 *)(&bp->cmng))[i]); + } + } +} + +static void bnx2x__link_status_update(struct bnx2x *bp) +{ + if (bp->state != BNX2X_STATE_OPEN) + return; + + bnx2x_link_status_update(&bp->link_params, &bp->link_vars); + + if (bp->link_vars.link_up) + bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP); + else + bnx2x_stats_handle(bp, STATS_EVENT_STOP); + + /* indicate link status */ + bnx2x_link_report(bp); +} + +static void bnx2x_pmf_update(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + u32 val; + + bp->port.pmf = 1; + DP(NETIF_MSG_LINK, "pmf %d\n", bp->port.pmf); + + /* enable nig attention */ + val = (0xff0f | (1 << (BP_E1HVN(bp) + 4))); + REG_WR(bp, HC_REG_TRAILING_EDGE_0 + port*8, val); + REG_WR(bp, HC_REG_LEADING_EDGE_0 + port*8, val); + + bnx2x_stats_handle(bp, STATS_EVENT_PMF); +} + +/* end of Link */ + +/* slow path */ + +/* + * General service functions + */ + +/* the slow path queue is odd since completions arrive on the fastpath ring */ +static int bnx2x_sp_post(struct bnx2x *bp, int command, int cid, + u32 data_hi, u32 data_lo, int common) +{ + int func = BP_FUNC(bp); + + DP(BNX2X_MSG_SP/*NETIF_MSG_TIMER*/, + "SPQE (%x:%x) command %d hw_cid %x data (%x:%x) left %x\n", + (u32)U64_HI(bp->spq_mapping), (u32)(U64_LO(bp->spq_mapping) + + (void *)bp->spq_prod_bd - (void *)bp->spq), command, + HW_CID(bp, cid), data_hi, data_lo, bp->spq_left); + +#ifdef BNX2X_STOP_ON_ERROR + if (unlikely(bp->panic)) + return -EIO; +#endif + + spin_lock_bh(&bp->spq_lock); + + if (!bp->spq_left) { + BNX2X_ERR("BUG! SPQ ring full!\n"); + spin_unlock_bh(&bp->spq_lock); + bnx2x_panic(); + return -EBUSY; + } + + /* CID needs port number to be encoded int it */ + bp->spq_prod_bd->hdr.conn_and_cmd_data = + cpu_to_le32(((command << SPE_HDR_CMD_ID_SHIFT) | + HW_CID(bp, cid))); + bp->spq_prod_bd->hdr.type = cpu_to_le16(ETH_CONNECTION_TYPE); + if (common) + bp->spq_prod_bd->hdr.type |= + cpu_to_le16((1 << SPE_HDR_COMMON_RAMROD_SHIFT)); + + bp->spq_prod_bd->data.mac_config_addr.hi = cpu_to_le32(data_hi); + bp->spq_prod_bd->data.mac_config_addr.lo = cpu_to_le32(data_lo); + + bp->spq_left--; + + if (bp->spq_prod_bd == bp->spq_last_bd) { + bp->spq_prod_bd = bp->spq; + bp->spq_prod_idx = 0; + DP(NETIF_MSG_TIMER, "end of spq\n"); + + } else { + bp->spq_prod_bd++; + bp->spq_prod_idx++; + } + + REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_SPQ_PROD_OFFSET(func), + bp->spq_prod_idx); + + spin_unlock_bh(&bp->spq_lock); + return 0; +} + +/* acquire split MCP access lock register */ +static int bnx2x_acquire_alr(struct bnx2x *bp) +{ + u32 i, j, val; + int rc = 0; + + might_sleep(); + i = 100; + for (j = 0; j < i*10; j++) { + val = (1UL << 31); + REG_WR(bp, GRCBASE_MCP + 0x9c, val); + val = REG_RD(bp, GRCBASE_MCP + 0x9c); + if (val & (1L << 31)) + break; + + msleep(5); + } + if (!(val & (1L << 31))) { + BNX2X_ERR("Cannot acquire MCP access lock register\n"); + rc = -EBUSY; + } + + return rc; +} + +/* release split MCP access lock register */ +static void bnx2x_release_alr(struct bnx2x *bp) +{ + u32 val = 0; + + REG_WR(bp, GRCBASE_MCP + 0x9c, val); +} + +static inline u16 bnx2x_update_dsb_idx(struct bnx2x *bp) +{ + struct host_def_status_block *def_sb = bp->def_status_blk; + u16 rc = 0; + + barrier(); /* status block is written to by the chip */ + if (bp->def_att_idx != le16_to_cpu(def_sb->atten_status_block. + attn_bits_index)) { + bp->def_att_idx = le16_to_cpu(def_sb->atten_status_block. + attn_bits_index); + rc |= 1; + } + if (bp->def_c_idx != def_sb->c_def_status_block.status_block_index) { + bp->def_c_idx = def_sb->c_def_status_block.status_block_index; + rc |= 2; + } + if (bp->def_u_idx != def_sb->u_def_status_block.status_block_index) { + bp->def_u_idx = def_sb->u_def_status_block.status_block_index; + rc |= 4; + } + if (bp->def_x_idx != def_sb->x_def_status_block.status_block_index) { + bp->def_x_idx = def_sb->x_def_status_block.status_block_index; + rc |= 8; + } + if (bp->def_t_idx != def_sb->t_def_status_block.status_block_index) { + bp->def_t_idx = def_sb->t_def_status_block.status_block_index; + rc |= 16; + } + return rc; +} + +/* + * slow path service functions + */ + +static void bnx2x_attn_int_asserted(struct bnx2x *bp, u32 asserted) +{ + int port = BP_PORT(bp); + u32 hc_addr = (HC_REG_COMMAND_REG + port*32 + + COMMAND_REG_ATTN_BITS_SET); + u32 aeu_addr = port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 : + MISC_REG_AEU_MASK_ATTN_FUNC_0; + u32 nig_int_mask_addr = port ? NIG_REG_MASK_INTERRUPT_PORT1 : + NIG_REG_MASK_INTERRUPT_PORT0; + u32 aeu_mask; + u32 nig_mask = 0; + + if (bp->attn_state & asserted) + BNX2X_ERR("IGU ERROR\n"); + + bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_PORT0_ATT_MASK + port); + aeu_mask = REG_RD(bp, aeu_addr); + + DP(NETIF_MSG_HW, "aeu_mask %x newly asserted %x\n", + aeu_mask, asserted); + aeu_mask &= ~(asserted & 0xff); + DP(NETIF_MSG_HW, "new mask %x\n", aeu_mask); + + REG_WR(bp, aeu_addr, aeu_mask); + bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_PORT0_ATT_MASK + port); + + DP(NETIF_MSG_HW, "attn_state %x\n", bp->attn_state); + bp->attn_state |= asserted; + DP(NETIF_MSG_HW, "new state %x\n", bp->attn_state); + + if (asserted & ATTN_HARD_WIRED_MASK) { + if (asserted & ATTN_NIG_FOR_FUNC) { + + bnx2x_acquire_phy_lock(bp); + + /* save nig interrupt mask */ + nig_mask = REG_RD(bp, nig_int_mask_addr); + REG_WR(bp, nig_int_mask_addr, 0); + + bnx2x_link_attn(bp); + + /* handle unicore attn? */ + } + if (asserted & ATTN_SW_TIMER_4_FUNC) + DP(NETIF_MSG_HW, "ATTN_SW_TIMER_4_FUNC!\n"); + + if (asserted & GPIO_2_FUNC) + DP(NETIF_MSG_HW, "GPIO_2_FUNC!\n"); + + if (asserted & GPIO_3_FUNC) + DP(NETIF_MSG_HW, "GPIO_3_FUNC!\n"); + + if (asserted & GPIO_4_FUNC) + DP(NETIF_MSG_HW, "GPIO_4_FUNC!\n"); + + if (port == 0) { + if (asserted & ATTN_GENERAL_ATTN_1) { + DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_1!\n"); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_1, 0x0); + } + if (asserted & ATTN_GENERAL_ATTN_2) { + DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_2!\n"); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_2, 0x0); + } + if (asserted & ATTN_GENERAL_ATTN_3) { + DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_3!\n"); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_3, 0x0); + } + } else { + if (asserted & ATTN_GENERAL_ATTN_4) { + DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_4!\n"); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_4, 0x0); + } + if (asserted & ATTN_GENERAL_ATTN_5) { + DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_5!\n"); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_5, 0x0); + } + if (asserted & ATTN_GENERAL_ATTN_6) { + DP(NETIF_MSG_HW, "ATTN_GENERAL_ATTN_6!\n"); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_6, 0x0); + } + } + + } /* if hardwired */ + + DP(NETIF_MSG_HW, "about to mask 0x%08x at HC addr 0x%x\n", + asserted, hc_addr); + REG_WR(bp, hc_addr, asserted); + + /* now set back the mask */ + if (asserted & ATTN_NIG_FOR_FUNC) { + REG_WR(bp, nig_int_mask_addr, nig_mask); + bnx2x_release_phy_lock(bp); + } +} + +static inline void bnx2x_attn_int_deasserted0(struct bnx2x *bp, u32 attn) +{ + int port = BP_PORT(bp); + int reg_offset; + u32 val; + + reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 : + MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); + + if (attn & AEU_INPUTS_ATTN_BITS_SPIO5) { + + val = REG_RD(bp, reg_offset); + val &= ~AEU_INPUTS_ATTN_BITS_SPIO5; + REG_WR(bp, reg_offset, val); + + BNX2X_ERR("SPIO5 hw attention\n"); + + switch (XGXS_EXT_PHY_TYPE(bp->link_params.ext_phy_config)) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + /* Fan failure attention */ + + /* The PHY reset is controlled by GPIO 1 */ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, + MISC_REGISTERS_GPIO_OUTPUT_LOW, port); + /* Low power mode is controlled by GPIO 2 */ + bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, + MISC_REGISTERS_GPIO_OUTPUT_LOW, port); + /* mark the failure */ + bp->link_params.ext_phy_config &= + ~PORT_HW_CFG_XGXS_EXT_PHY_TYPE_MASK; + bp->link_params.ext_phy_config |= + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE; + SHMEM_WR(bp, + dev_info.port_hw_config[port]. + external_phy_config, + bp->link_params.ext_phy_config); + /* log the failure */ + printk(KERN_ERR PFX "Fan Failure on Network" + " Controller %s has caused the driver to" + " shutdown the card to prevent permanent" + " damage. Please contact Dell Support for" + " assistance\n", bp->dev->name); + break; + + default: + break; + } + } + + if (attn & HW_INTERRUT_ASSERT_SET_0) { + + val = REG_RD(bp, reg_offset); + val &= ~(attn & HW_INTERRUT_ASSERT_SET_0); + REG_WR(bp, reg_offset, val); + + BNX2X_ERR("FATAL HW block attention set0 0x%x\n", + (attn & HW_INTERRUT_ASSERT_SET_0)); + bnx2x_panic(); + } +} + +static inline void bnx2x_attn_int_deasserted1(struct bnx2x *bp, u32 attn) +{ + u32 val; + + if (attn & AEU_INPUTS_ATTN_BITS_DOORBELLQ_HW_INTERRUPT) { + + val = REG_RD(bp, DORQ_REG_DORQ_INT_STS_CLR); + BNX2X_ERR("DB hw attention 0x%x\n", val); + /* DORQ discard attention */ + if (val & 0x2) + BNX2X_ERR("FATAL error from DORQ\n"); + } + + if (attn & HW_INTERRUT_ASSERT_SET_1) { + + int port = BP_PORT(bp); + int reg_offset; + + reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_1 : + MISC_REG_AEU_ENABLE1_FUNC_0_OUT_1); + + val = REG_RD(bp, reg_offset); + val &= ~(attn & HW_INTERRUT_ASSERT_SET_1); + REG_WR(bp, reg_offset, val); + + BNX2X_ERR("FATAL HW block attention set1 0x%x\n", + (attn & HW_INTERRUT_ASSERT_SET_1)); + bnx2x_panic(); + } +} + +static inline void bnx2x_attn_int_deasserted2(struct bnx2x *bp, u32 attn) +{ + u32 val; + + if (attn & AEU_INPUTS_ATTN_BITS_CFC_HW_INTERRUPT) { + + val = REG_RD(bp, CFC_REG_CFC_INT_STS_CLR); + BNX2X_ERR("CFC hw attention 0x%x\n", val); + /* CFC error attention */ + if (val & 0x2) + BNX2X_ERR("FATAL error from CFC\n"); + } + + if (attn & AEU_INPUTS_ATTN_BITS_PXP_HW_INTERRUPT) { + + val = REG_RD(bp, PXP_REG_PXP_INT_STS_CLR_0); + BNX2X_ERR("PXP hw attention 0x%x\n", val); + /* RQ_USDMDP_FIFO_OVERFLOW */ + if (val & 0x18000) + BNX2X_ERR("FATAL error from PXP\n"); + } + + if (attn & HW_INTERRUT_ASSERT_SET_2) { + + int port = BP_PORT(bp); + int reg_offset; + + reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_2 : + MISC_REG_AEU_ENABLE1_FUNC_0_OUT_2); + + val = REG_RD(bp, reg_offset); + val &= ~(attn & HW_INTERRUT_ASSERT_SET_2); + REG_WR(bp, reg_offset, val); + + BNX2X_ERR("FATAL HW block attention set2 0x%x\n", + (attn & HW_INTERRUT_ASSERT_SET_2)); + bnx2x_panic(); + } +} + +static inline void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn) +{ + u32 val; + + if (attn & EVEREST_GEN_ATTN_IN_USE_MASK) { + + if (attn & BNX2X_PMF_LINK_ASSERT) { + int func = BP_FUNC(bp); + + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_12 + func*4, 0); + bnx2x__link_status_update(bp); + if (SHMEM_RD(bp, func_mb[func].drv_status) & + DRV_STATUS_PMF) + bnx2x_pmf_update(bp); + + } else if (attn & BNX2X_MC_ASSERT_BITS) { + + BNX2X_ERR("MC assert!\n"); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_10, 0); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_9, 0); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_8, 0); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_7, 0); + bnx2x_panic(); + + } else if (attn & BNX2X_MCP_ASSERT) { + + BNX2X_ERR("MCP assert!\n"); + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_11, 0); + bnx2x_fw_dump(bp); + + } else + BNX2X_ERR("Unknown HW assert! (attn 0x%x)\n", attn); + } + + if (attn & EVEREST_LATCHED_ATTN_IN_USE_MASK) { + BNX2X_ERR("LATCHED attention 0x%08x (masked)\n", attn); + if (attn & BNX2X_GRC_TIMEOUT) { + val = CHIP_IS_E1H(bp) ? + REG_RD(bp, MISC_REG_GRC_TIMEOUT_ATTN) : 0; + BNX2X_ERR("GRC time-out 0x%08x\n", val); + } + if (attn & BNX2X_GRC_RSV) { + val = CHIP_IS_E1H(bp) ? + REG_RD(bp, MISC_REG_GRC_RSV_ATTN) : 0; + BNX2X_ERR("GRC reserved 0x%08x\n", val); + } + REG_WR(bp, MISC_REG_AEU_CLR_LATCH_SIGNAL, 0x7ff); + } +} + +static void bnx2x_attn_int_deasserted(struct bnx2x *bp, u32 deasserted) +{ + struct attn_route attn; + struct attn_route group_mask; + int port = BP_PORT(bp); + int index; + u32 reg_addr; + u32 val; + u32 aeu_mask; + + /* need to take HW lock because MCP or other port might also + try to handle this event */ + bnx2x_acquire_alr(bp); + + attn.sig[0] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_1_FUNC_0 + port*4); + attn.sig[1] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_2_FUNC_0 + port*4); + attn.sig[2] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_3_FUNC_0 + port*4); + attn.sig[3] = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_4_FUNC_0 + port*4); + DP(NETIF_MSG_HW, "attn: %08x %08x %08x %08x\n", + attn.sig[0], attn.sig[1], attn.sig[2], attn.sig[3]); + + for (index = 0; index < MAX_DYNAMIC_ATTN_GRPS; index++) { + if (deasserted & (1 << index)) { + group_mask = bp->attn_group[index]; + + DP(NETIF_MSG_HW, "group[%d]: %08x %08x %08x %08x\n", + index, group_mask.sig[0], group_mask.sig[1], + group_mask.sig[2], group_mask.sig[3]); + + bnx2x_attn_int_deasserted3(bp, + attn.sig[3] & group_mask.sig[3]); + bnx2x_attn_int_deasserted1(bp, + attn.sig[1] & group_mask.sig[1]); + bnx2x_attn_int_deasserted2(bp, + attn.sig[2] & group_mask.sig[2]); + bnx2x_attn_int_deasserted0(bp, + attn.sig[0] & group_mask.sig[0]); + + if ((attn.sig[0] & group_mask.sig[0] & + HW_PRTY_ASSERT_SET_0) || + (attn.sig[1] & group_mask.sig[1] & + HW_PRTY_ASSERT_SET_1) || + (attn.sig[2] & group_mask.sig[2] & + HW_PRTY_ASSERT_SET_2)) + BNX2X_ERR("FATAL HW block parity attention\n"); + } + } + + bnx2x_release_alr(bp); + + reg_addr = (HC_REG_COMMAND_REG + port*32 + COMMAND_REG_ATTN_BITS_CLR); + + val = ~deasserted; + DP(NETIF_MSG_HW, "about to mask 0x%08x at HC addr 0x%x\n", + val, reg_addr); + REG_WR(bp, reg_addr, val); + + if (~bp->attn_state & deasserted) + BNX2X_ERR("IGU ERROR\n"); + + reg_addr = port ? MISC_REG_AEU_MASK_ATTN_FUNC_1 : + MISC_REG_AEU_MASK_ATTN_FUNC_0; + + bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_PORT0_ATT_MASK + port); + aeu_mask = REG_RD(bp, reg_addr); + + DP(NETIF_MSG_HW, "aeu_mask %x newly deasserted %x\n", + aeu_mask, deasserted); + aeu_mask |= (deasserted & 0xff); + DP(NETIF_MSG_HW, "new mask %x\n", aeu_mask); + + REG_WR(bp, reg_addr, aeu_mask); + bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_PORT0_ATT_MASK + port); + + DP(NETIF_MSG_HW, "attn_state %x\n", bp->attn_state); + bp->attn_state &= ~deasserted; + DP(NETIF_MSG_HW, "new state %x\n", bp->attn_state); +} + +static void bnx2x_attn_int(struct bnx2x *bp) +{ + /* read local copy of bits */ + u32 attn_bits = le32_to_cpu(bp->def_status_blk->atten_status_block. + attn_bits); + u32 attn_ack = le32_to_cpu(bp->def_status_blk->atten_status_block. + attn_bits_ack); + u32 attn_state = bp->attn_state; + + /* look for changed bits */ + u32 asserted = attn_bits & ~attn_ack & ~attn_state; + u32 deasserted = ~attn_bits & attn_ack & attn_state; + + DP(NETIF_MSG_HW, + "attn_bits %x attn_ack %x asserted %x deasserted %x\n", + attn_bits, attn_ack, asserted, deasserted); + + if (~(attn_bits ^ attn_ack) & (attn_bits ^ attn_state)) + BNX2X_ERR("BAD attention state\n"); + + /* handle bits that were raised */ + if (asserted) + bnx2x_attn_int_asserted(bp, asserted); + + if (deasserted) + bnx2x_attn_int_deasserted(bp, deasserted); +} + +#if defined(INIT_DELAYED_WORK_DEFERRABLE) || defined(INIT_WORK_NAR) /* BNX2X_UPSTREAM */ +static void bnx2x_sp_task(struct work_struct *work) +{ + struct bnx2x *bp = container_of(work, struct bnx2x, sp_task); +#else +static void bnx2x_sp_task(void *data) +{ + struct bnx2x *bp = (struct bnx2x *)data; +#endif + u16 status; + +#if (LINUX_VERSION_CODE < 0x020618) /* ! BNX2X_UPSTREAM */ + bp->sp_running = 1; + smp_mb(); /* make sure close can see this */ +#endif + + /* Return here if interrupt is disabled */ + if (unlikely(atomic_read(&bp->intr_sem) != 0)) { + DP(NETIF_MSG_INTR, "called but intr_sem not 0, returning\n"); +#if (LINUX_VERSION_CODE >= 0x020618) /* BNX2X_UPSTREAM */ + return; +#else + goto sp_task_exit; +#endif + } + + status = bnx2x_update_dsb_idx(bp); +/* if (status == 0) */ +/* BNX2X_ERR("spurious slowpath interrupt!\n"); */ + + DP(NETIF_MSG_INTR, "got a slowpath interrupt (updated %x)\n", status); + + /* HW attentions */ + if (status & 0x1) + bnx2x_attn_int(bp); + + /* CStorm events: query_stats, port delete ramrod */ + if (status & 0x2) + bp->stats_pending = 0; + + bnx2x_ack_sb(bp, DEF_SB_ID, ATTENTION_ID, bp->def_att_idx, + IGU_INT_NOP, 1); + bnx2x_ack_sb(bp, DEF_SB_ID, USTORM_ID, le16_to_cpu(bp->def_u_idx), + IGU_INT_NOP, 1); + bnx2x_ack_sb(bp, DEF_SB_ID, CSTORM_ID, le16_to_cpu(bp->def_c_idx), + IGU_INT_NOP, 1); + bnx2x_ack_sb(bp, DEF_SB_ID, XSTORM_ID, le16_to_cpu(bp->def_x_idx), + IGU_INT_NOP, 1); + bnx2x_ack_sb(bp, DEF_SB_ID, TSTORM_ID, le16_to_cpu(bp->def_t_idx), + IGU_INT_ENABLE, 1); + +#if (LINUX_VERSION_CODE < 0x020618) /* ! BNX2X_UPSTREAM */ +sp_task_exit: + bp->sp_running = 0; + smp_mb(); /* make sure close can see this */ +#endif +} + +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ +#if (LINUX_VERSION_CODE < 0x20613) +static irqreturn_t bnx2x_msix_sp_int(int irq, void *dev_instance, + struct pt_regs *regs) +#else /* BNX2X_UPSTREAM */ +static irqreturn_t bnx2x_msix_sp_int(int irq, void *dev_instance) +#endif +{ + struct net_device *dev = dev_instance; + struct bnx2x *bp = netdev_priv(dev); + + /* Return here if interrupt is disabled */ + if (unlikely(atomic_read(&bp->intr_sem) != 0)) { + DP(NETIF_MSG_INTR, "called but intr_sem not 0, returning\n"); + return IRQ_HANDLED; + } + + bnx2x_ack_sb(bp, DEF_SB_ID, TSTORM_ID, 0, IGU_INT_DISABLE, 0); + +#ifdef BNX2X_STOP_ON_ERROR + if (unlikely(bp->panic)) + return IRQ_HANDLED; +#endif + + schedule_work(&bp->sp_task); + + return IRQ_HANDLED; +} +#endif + +/* end of slow path */ + +/* Statistics */ + +/**************************************************************************** +* Macros +****************************************************************************/ + +/* sum[hi:lo] += add[hi:lo] */ +#define ADD_64(s_hi, a_hi, s_lo, a_lo) \ + do { \ + s_lo += a_lo; \ + s_hi += a_hi + (s_lo < a_lo) ? 1 : 0; \ + } while (0) + +/* difference = minuend - subtrahend */ +#define DIFF_64(d_hi, m_hi, s_hi, d_lo, m_lo, s_lo) \ + do { \ + if (m_lo < s_lo) { \ + /* underflow */ \ + d_hi = m_hi - s_hi; \ + if (d_hi > 0) { \ + /* we can 'loan' 1 */ \ + d_hi--; \ + d_lo = m_lo + (UINT_MAX - s_lo) + 1; \ + } else { \ + /* m_hi <= s_hi */ \ + d_hi = 0; \ + d_lo = 0; \ + } \ + } else { \ + /* m_lo >= s_lo */ \ + if (m_hi < s_hi) { \ + d_hi = 0; \ + d_lo = 0; \ + } else { \ + /* m_hi >= s_hi */ \ + d_hi = m_hi - s_hi; \ + d_lo = m_lo - s_lo; \ + } \ + } \ + } while (0) + +#define UPDATE_STAT64(s, t) \ + do { \ + DIFF_64(diff.hi, new->s##_hi, pstats->mac_stx[0].t##_hi, \ + diff.lo, new->s##_lo, pstats->mac_stx[0].t##_lo); \ + pstats->mac_stx[0].t##_hi = new->s##_hi; \ + pstats->mac_stx[0].t##_lo = new->s##_lo; \ + ADD_64(pstats->mac_stx[1].t##_hi, diff.hi, \ + pstats->mac_stx[1].t##_lo, diff.lo); \ + } while (0) + +#define UPDATE_STAT64_NIG(s, t) \ + do { \ + DIFF_64(diff.hi, new->s##_hi, old->s##_hi, \ + diff.lo, new->s##_lo, old->s##_lo); \ + ADD_64(estats->t##_hi, diff.hi, \ + estats->t##_lo, diff.lo); \ + } while (0) + +/* sum[hi:lo] += add */ +#define ADD_EXTEND_64(s_hi, s_lo, a) \ + do { \ + s_lo += a; \ + s_hi += (s_lo < a) ? 1 : 0; \ + } while (0) + +#define UPDATE_EXTEND_STAT(s) \ + do { \ + ADD_EXTEND_64(pstats->mac_stx[1].s##_hi, \ + pstats->mac_stx[1].s##_lo, \ + new->s); \ + } while (0) + +#define UPDATE_EXTEND_TSTAT(s, t) \ + do { \ + diff = le32_to_cpu(tclient->s) - old_tclient->s; \ + old_tclient->s = le32_to_cpu(tclient->s); \ + ADD_EXTEND_64(fstats->t##_hi, fstats->t##_lo, diff); \ + } while (0) + +#define UPDATE_EXTEND_XSTAT(s, t) \ + do { \ + diff = le32_to_cpu(xclient->s) - old_xclient->s; \ + old_xclient->s = le32_to_cpu(xclient->s); \ + ADD_EXTEND_64(fstats->t##_hi, fstats->t##_lo, diff); \ + } while (0) + +/* + * General service functions + */ + +static inline long bnx2x_hilo(u32 *hiref) +{ + u32 lo = *(hiref + 1); +#if (BITS_PER_LONG == 64) + u32 hi = *hiref; + + return HILO_U64(hi, lo); +#else + return lo; +#endif +} + +/* + * Init service functions + */ + +static void bnx2x_storm_stats_post(struct bnx2x *bp) +{ + if (!bp->stats_pending) { + struct eth_query_ramrod_data ramrod_data = {0}; + int rc; + + ramrod_data.drv_counter = bp->stats_counter++; + ramrod_data.collect_port = bp->port.pmf ? 1 : 0; + ramrod_data.ctr_id_vector = (1 << BP_CL_ID(bp)); + + rc = bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_STAT_QUERY, 0, + ((u32 *)&ramrod_data)[1], + ((u32 *)&ramrod_data)[0], 0); + if (rc == 0) { + /* stats ramrod has it's own slot on the spq */ + bp->spq_left++; + bp->stats_pending = 1; + } + } +} + +static void bnx2x_stats_init(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + + bp->executer_idx = 0; + bp->stats_counter = 0; + + /* port stats */ + if (!BP_NOMCP(bp)) + bp->port.port_stx = SHMEM_RD(bp, port_mb[port].port_stx); + else + bp->port.port_stx = 0; + DP(BNX2X_MSG_STATS, "port_stx 0x%x\n", bp->port.port_stx); + + memset(&(bp->port.old_nig_stats), 0, sizeof(struct nig_stats)); + bp->port.old_nig_stats.brb_discard = + REG_RD(bp, NIG_REG_STAT0_BRB_DISCARD + port*0x38); + bp->port.old_nig_stats.brb_truncate = + REG_RD(bp, NIG_REG_STAT0_BRB_TRUNCATE + port*0x38); + REG_RD_DMAE(bp, NIG_REG_STAT0_EGRESS_MAC_PKT0 + port*0x50, + &(bp->port.old_nig_stats.egress_mac_pkt0_lo), 2); + REG_RD_DMAE(bp, NIG_REG_STAT0_EGRESS_MAC_PKT1 + port*0x50, + &(bp->port.old_nig_stats.egress_mac_pkt1_lo), 2); + + /* function stats */ +#if (LINUX_VERSION_CODE >= 0x20618) /* BNX2X_UPSTREAM */ + memset(&bp->dev->stats, 0, sizeof(struct net_device_stats)); +#else + memset(&bp->net_stats, 0, sizeof(struct net_device_stats)); +#endif + memset(&bp->old_tclient, 0, sizeof(struct tstorm_per_client_stats)); + memset(&bp->old_xclient, 0, sizeof(struct xstorm_per_client_stats)); + memset(&bp->eth_stats, 0, sizeof(struct bnx2x_eth_stats)); + + bp->stats_state = STATS_STATE_DISABLED; + if (IS_E1HMF(bp) && bp->port.pmf && bp->port.port_stx) + bnx2x_stats_handle(bp, STATS_EVENT_PMF); +} + +static void bnx2x_hw_stats_post(struct bnx2x *bp) +{ + struct dmae_command *dmae = &bp->stats_dmae; + u32 *stats_comp = bnx2x_sp(bp, stats_comp); + + *stats_comp = DMAE_COMP_VAL; + + /* loader */ + if (bp->executer_idx) { + int loader_idx = PMF_DMAE_C(bp); + + memset(dmae, 0, sizeof(struct dmae_command)); + + dmae->opcode = (DMAE_CMD_SRC_PCI | DMAE_CMD_DST_GRC | + DMAE_CMD_C_DST_GRC | DMAE_CMD_C_ENABLE | + DMAE_CMD_DST_RESET | +#ifdef __BIG_ENDIAN + DMAE_CMD_ENDIANITY_B_DW_SWAP | +#else + DMAE_CMD_ENDIANITY_DW_SWAP | +#endif + (BP_PORT(bp) ? DMAE_CMD_PORT_1 : + DMAE_CMD_PORT_0) | + (BP_E1HVN(bp) << DMAE_CMD_E1HVN_SHIFT)); + dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, dmae[0])); + dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, dmae[0])); + dmae->dst_addr_lo = (DMAE_REG_CMD_MEM + + sizeof(struct dmae_command) * + (loader_idx + 1)) >> 2; + dmae->dst_addr_hi = 0; + dmae->len = sizeof(struct dmae_command) >> 2; + if (CHIP_IS_E1(bp)) + dmae->len--; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx + 1] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + *stats_comp = 0; + bnx2x_post_dmae(bp, dmae, loader_idx); + + } else if (bp->func_stx) { + *stats_comp = 0; + bnx2x_post_dmae(bp, dmae, INIT_DMAE_C(bp)); + } +} + +static int bnx2x_stats_comp(struct bnx2x *bp) +{ + u32 *stats_comp = bnx2x_sp(bp, stats_comp); + int cnt = 10; + + might_sleep(); + while (*stats_comp != DMAE_COMP_VAL) { + if (!cnt) { + BNX2X_ERR("timeout waiting for stats finished\n"); + break; + } + cnt--; + msleep(1); + } + return 1; +} + +/* + * Statistics service functions + */ + +static void bnx2x_stats_pmf_update(struct bnx2x *bp) +{ + struct dmae_command *dmae; + u32 opcode; + int loader_idx = PMF_DMAE_C(bp); + u32 *stats_comp = bnx2x_sp(bp, stats_comp); + + /* sanity */ + if (!IS_E1HMF(bp) || !bp->port.pmf || !bp->port.port_stx) { + BNX2X_ERR("BUG!\n"); + return; + } + + bp->executer_idx = 0; + + opcode = (DMAE_CMD_SRC_GRC | DMAE_CMD_DST_PCI | + DMAE_CMD_C_ENABLE | + DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | +#ifdef __BIG_ENDIAN + DMAE_CMD_ENDIANITY_B_DW_SWAP | +#else + DMAE_CMD_ENDIANITY_DW_SWAP | +#endif + (BP_PORT(bp) ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0) | + (BP_E1HVN(bp) << DMAE_CMD_E1HVN_SHIFT)); + + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = (opcode | DMAE_CMD_C_DST_GRC); + dmae->src_addr_lo = bp->port.port_stx >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, port_stats)); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, port_stats)); + dmae->len = DMAE_LEN32_RD_MAX; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = (opcode | DMAE_CMD_C_DST_PCI); + dmae->src_addr_lo = (bp->port.port_stx >> 2) + DMAE_LEN32_RD_MAX; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, port_stats) + + DMAE_LEN32_RD_MAX * 4); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, port_stats) + + DMAE_LEN32_RD_MAX * 4); + dmae->len = (sizeof(struct host_port_stats) >> 2) - DMAE_LEN32_RD_MAX; + dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, stats_comp)); + dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, stats_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + *stats_comp = 0; + bnx2x_hw_stats_post(bp); + bnx2x_stats_comp(bp); +} + +static void bnx2x_port_stats_init(struct bnx2x *bp) +{ + struct dmae_command *dmae; + int port = BP_PORT(bp); + int vn = BP_E1HVN(bp); + u32 opcode; + int loader_idx = PMF_DMAE_C(bp); + u32 mac_addr; + u32 *stats_comp = bnx2x_sp(bp, stats_comp); + + /* sanity */ + if (!bp->link_vars.link_up || !bp->port.pmf) { + BNX2X_ERR("BUG!\n"); + return; + } + + bp->executer_idx = 0; + + /* MCP */ + opcode = (DMAE_CMD_SRC_PCI | DMAE_CMD_DST_GRC | + DMAE_CMD_C_DST_GRC | DMAE_CMD_C_ENABLE | + DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | +#ifdef __BIG_ENDIAN + DMAE_CMD_ENDIANITY_B_DW_SWAP | +#else + DMAE_CMD_ENDIANITY_DW_SWAP | +#endif + (port ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0) | + (vn << DMAE_CMD_E1HVN_SHIFT)); + + if (bp->port.port_stx) { + + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, port_stats)); + dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, port_stats)); + dmae->dst_addr_lo = bp->port.port_stx >> 2; + dmae->dst_addr_hi = 0; + dmae->len = sizeof(struct host_port_stats) >> 2; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + } + + if (bp->func_stx) { + + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, func_stats)); + dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, func_stats)); + dmae->dst_addr_lo = bp->func_stx >> 2; + dmae->dst_addr_hi = 0; + dmae->len = sizeof(struct host_func_stats) >> 2; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + } + + /* MAC */ + opcode = (DMAE_CMD_SRC_GRC | DMAE_CMD_DST_PCI | + DMAE_CMD_C_DST_GRC | DMAE_CMD_C_ENABLE | + DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | +#ifdef __BIG_ENDIAN + DMAE_CMD_ENDIANITY_B_DW_SWAP | +#else + DMAE_CMD_ENDIANITY_DW_SWAP | +#endif + (port ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0) | + (vn << DMAE_CMD_E1HVN_SHIFT)); + + if (bp->link_vars.mac_type == MAC_TYPE_BMAC) { + + mac_addr = (port ? NIG_REG_INGRESS_BMAC1_MEM : + NIG_REG_INGRESS_BMAC0_MEM); + + /* BIGMAC_REGISTER_TX_STAT_GTPKT .. + BIGMAC_REGISTER_TX_STAT_GTBYT */ + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = (mac_addr + + BIGMAC_REGISTER_TX_STAT_GTPKT) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats)); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats)); + dmae->len = (8 + BIGMAC_REGISTER_TX_STAT_GTBYT - + BIGMAC_REGISTER_TX_STAT_GTPKT) >> 2; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + /* BIGMAC_REGISTER_RX_STAT_GR64 .. + BIGMAC_REGISTER_RX_STAT_GRIPJ */ + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = (mac_addr + + BIGMAC_REGISTER_RX_STAT_GR64) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats) + + offsetof(struct bmac_stats, rx_stat_gr64_lo)); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats) + + offsetof(struct bmac_stats, rx_stat_gr64_lo)); + dmae->len = (8 + BIGMAC_REGISTER_RX_STAT_GRIPJ - + BIGMAC_REGISTER_RX_STAT_GR64) >> 2; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + } else if (bp->link_vars.mac_type == MAC_TYPE_EMAC) { + + mac_addr = (port ? GRCBASE_EMAC1 : GRCBASE_EMAC0); + + /* EMAC_REG_EMAC_RX_STAT_AC (EMAC_REG_EMAC_RX_STAT_AC_COUNT)*/ + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = (mac_addr + + EMAC_REG_EMAC_RX_STAT_AC) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats)); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats)); + dmae->len = EMAC_REG_EMAC_RX_STAT_AC_COUNT; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + /* EMAC_REG_EMAC_RX_STAT_AC_28 */ + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = (mac_addr + + EMAC_REG_EMAC_RX_STAT_AC_28) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats) + + offsetof(struct emac_stats, rx_stat_falsecarriererrors)); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats) + + offsetof(struct emac_stats, rx_stat_falsecarriererrors)); + dmae->len = 1; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + /* EMAC_REG_EMAC_TX_STAT_AC (EMAC_REG_EMAC_TX_STAT_AC_COUNT)*/ + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = (mac_addr + + EMAC_REG_EMAC_TX_STAT_AC) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, mac_stats) + + offsetof(struct emac_stats, tx_stat_ifhcoutoctets)); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, mac_stats) + + offsetof(struct emac_stats, tx_stat_ifhcoutoctets)); + dmae->len = EMAC_REG_EMAC_TX_STAT_AC_COUNT; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + } + + /* NIG */ + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = (port ? NIG_REG_STAT1_BRB_DISCARD : + NIG_REG_STAT0_BRB_DISCARD) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, nig_stats)); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, nig_stats)); + dmae->len = (sizeof(struct nig_stats) - 4*sizeof(u32)) >> 2; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = opcode; + dmae->src_addr_lo = (port ? NIG_REG_STAT1_EGRESS_MAC_PKT0 : + NIG_REG_STAT0_EGRESS_MAC_PKT0) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, nig_stats) + + offsetof(struct nig_stats, egress_mac_pkt0_lo)); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, nig_stats) + + offsetof(struct nig_stats, egress_mac_pkt0_lo)); + dmae->len = (2*sizeof(u32)) >> 2; + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = (DMAE_CMD_SRC_GRC | DMAE_CMD_DST_PCI | + DMAE_CMD_C_DST_PCI | DMAE_CMD_C_ENABLE | + DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | +#ifdef __BIG_ENDIAN + DMAE_CMD_ENDIANITY_B_DW_SWAP | +#else + DMAE_CMD_ENDIANITY_DW_SWAP | +#endif + (port ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0) | + (vn << DMAE_CMD_E1HVN_SHIFT)); + dmae->src_addr_lo = (port ? NIG_REG_STAT1_EGRESS_MAC_PKT1 : + NIG_REG_STAT0_EGRESS_MAC_PKT1) >> 2; + dmae->src_addr_hi = 0; + dmae->dst_addr_lo = U64_LO(bnx2x_sp_mapping(bp, nig_stats) + + offsetof(struct nig_stats, egress_mac_pkt1_lo)); + dmae->dst_addr_hi = U64_HI(bnx2x_sp_mapping(bp, nig_stats) + + offsetof(struct nig_stats, egress_mac_pkt1_lo)); + dmae->len = (2*sizeof(u32)) >> 2; + dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, stats_comp)); + dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, stats_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + *stats_comp = 0; +} + +static void bnx2x_func_stats_init(struct bnx2x *bp) +{ + struct dmae_command *dmae = &bp->stats_dmae; + u32 *stats_comp = bnx2x_sp(bp, stats_comp); + + /* sanity */ + if (!bp->func_stx) { + BNX2X_ERR("BUG!\n"); + return; + } + + bp->executer_idx = 0; + memset(dmae, 0, sizeof(struct dmae_command)); + + dmae->opcode = (DMAE_CMD_SRC_PCI | DMAE_CMD_DST_GRC | + DMAE_CMD_C_DST_PCI | DMAE_CMD_C_ENABLE | + DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | +#ifdef __BIG_ENDIAN + DMAE_CMD_ENDIANITY_B_DW_SWAP | +#else + DMAE_CMD_ENDIANITY_DW_SWAP | +#endif + (BP_PORT(bp) ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0) | + (BP_E1HVN(bp) << DMAE_CMD_E1HVN_SHIFT)); + dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, func_stats)); + dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, func_stats)); + dmae->dst_addr_lo = bp->func_stx >> 2; + dmae->dst_addr_hi = 0; + dmae->len = sizeof(struct host_func_stats) >> 2; + dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, stats_comp)); + dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, stats_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + *stats_comp = 0; +} + +static void bnx2x_stats_start(struct bnx2x *bp) +{ + if (bp->port.pmf) + bnx2x_port_stats_init(bp); + + else if (bp->func_stx) + bnx2x_func_stats_init(bp); + + bnx2x_hw_stats_post(bp); + bnx2x_storm_stats_post(bp); +} + +static void bnx2x_stats_pmf_start(struct bnx2x *bp) +{ + bnx2x_stats_comp(bp); + bnx2x_stats_pmf_update(bp); + bnx2x_stats_start(bp); +} + +static void bnx2x_stats_restart(struct bnx2x *bp) +{ + bnx2x_stats_comp(bp); + bnx2x_stats_start(bp); +} + +static void bnx2x_bmac_stats_update(struct bnx2x *bp) +{ + struct bmac_stats *new = bnx2x_sp(bp, mac_stats.bmac_stats); + struct host_port_stats *pstats = bnx2x_sp(bp, port_stats); + struct regpair diff; + + UPDATE_STAT64(rx_stat_grerb, rx_stat_ifhcinbadoctets); + UPDATE_STAT64(rx_stat_grfcs, rx_stat_dot3statsfcserrors); + UPDATE_STAT64(rx_stat_grund, rx_stat_etherstatsundersizepkts); + UPDATE_STAT64(rx_stat_grovr, rx_stat_dot3statsframestoolong); + UPDATE_STAT64(rx_stat_grfrg, rx_stat_etherstatsfragments); + UPDATE_STAT64(rx_stat_grjbr, rx_stat_etherstatsjabbers); + UPDATE_STAT64(rx_stat_grxcf, rx_stat_maccontrolframesreceived); + UPDATE_STAT64(rx_stat_grxpf, rx_stat_xoffstateentered); + UPDATE_STAT64(rx_stat_grxpf, rx_stat_xoffpauseframesreceived); + UPDATE_STAT64(tx_stat_gtxpf, tx_stat_outxoffsent); + UPDATE_STAT64(tx_stat_gtxpf, tx_stat_flowcontroldone); + UPDATE_STAT64(tx_stat_gt64, tx_stat_etherstatspkts64octets); + UPDATE_STAT64(tx_stat_gt127, + tx_stat_etherstatspkts65octetsto127octets); + UPDATE_STAT64(tx_stat_gt255, + tx_stat_etherstatspkts128octetsto255octets); + UPDATE_STAT64(tx_stat_gt511, + tx_stat_etherstatspkts256octetsto511octets); + UPDATE_STAT64(tx_stat_gt1023, + tx_stat_etherstatspkts512octetsto1023octets); + UPDATE_STAT64(tx_stat_gt1518, + tx_stat_etherstatspkts1024octetsto1522octets); + UPDATE_STAT64(tx_stat_gt2047, tx_stat_bmac_2047); + UPDATE_STAT64(tx_stat_gt4095, tx_stat_bmac_4095); + UPDATE_STAT64(tx_stat_gt9216, tx_stat_bmac_9216); + UPDATE_STAT64(tx_stat_gt16383, tx_stat_bmac_16383); + UPDATE_STAT64(tx_stat_gterr, + tx_stat_dot3statsinternalmactransmiterrors); + UPDATE_STAT64(tx_stat_gtufl, tx_stat_bmac_ufl); +} + +static void bnx2x_emac_stats_update(struct bnx2x *bp) +{ + struct emac_stats *new = bnx2x_sp(bp, mac_stats.emac_stats); + struct host_port_stats *pstats = bnx2x_sp(bp, port_stats); + + UPDATE_EXTEND_STAT(rx_stat_ifhcinbadoctets); + UPDATE_EXTEND_STAT(tx_stat_ifhcoutbadoctets); + UPDATE_EXTEND_STAT(rx_stat_dot3statsfcserrors); + UPDATE_EXTEND_STAT(rx_stat_dot3statsalignmenterrors); + UPDATE_EXTEND_STAT(rx_stat_dot3statscarriersenseerrors); + UPDATE_EXTEND_STAT(rx_stat_falsecarriererrors); + UPDATE_EXTEND_STAT(rx_stat_etherstatsundersizepkts); + UPDATE_EXTEND_STAT(rx_stat_dot3statsframestoolong); + UPDATE_EXTEND_STAT(rx_stat_etherstatsfragments); + UPDATE_EXTEND_STAT(rx_stat_etherstatsjabbers); + UPDATE_EXTEND_STAT(rx_stat_maccontrolframesreceived); + UPDATE_EXTEND_STAT(rx_stat_xoffstateentered); + UPDATE_EXTEND_STAT(rx_stat_xonpauseframesreceived); + UPDATE_EXTEND_STAT(rx_stat_xoffpauseframesreceived); + UPDATE_EXTEND_STAT(tx_stat_outxonsent); + UPDATE_EXTEND_STAT(tx_stat_outxoffsent); + UPDATE_EXTEND_STAT(tx_stat_flowcontroldone); + UPDATE_EXTEND_STAT(tx_stat_etherstatscollisions); + UPDATE_EXTEND_STAT(tx_stat_dot3statssinglecollisionframes); + UPDATE_EXTEND_STAT(tx_stat_dot3statsmultiplecollisionframes); + UPDATE_EXTEND_STAT(tx_stat_dot3statsdeferredtransmissions); + UPDATE_EXTEND_STAT(tx_stat_dot3statsexcessivecollisions); + UPDATE_EXTEND_STAT(tx_stat_dot3statslatecollisions); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts64octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts65octetsto127octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts128octetsto255octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts256octetsto511octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts512octetsto1023octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspkts1024octetsto1522octets); + UPDATE_EXTEND_STAT(tx_stat_etherstatspktsover1522octets); + UPDATE_EXTEND_STAT(tx_stat_dot3statsinternalmactransmiterrors); +} + +static int bnx2x_hw_stats_update(struct bnx2x *bp) +{ + struct nig_stats *new = bnx2x_sp(bp, nig_stats); + struct nig_stats *old = &(bp->port.old_nig_stats); + struct host_port_stats *pstats = bnx2x_sp(bp, port_stats); + struct bnx2x_eth_stats *estats = &bp->eth_stats; + struct regpair diff; + u32 nig_timer_max; + + if (bp->link_vars.mac_type == MAC_TYPE_BMAC) + bnx2x_bmac_stats_update(bp); + + else if (bp->link_vars.mac_type == MAC_TYPE_EMAC) + bnx2x_emac_stats_update(bp); + + else { /* unreached */ + BNX2X_ERR("stats updated by dmae but no MAC active\n"); + return -1; + } + + ADD_EXTEND_64(pstats->brb_drop_hi, pstats->brb_drop_lo, + new->brb_discard - old->brb_discard); + ADD_EXTEND_64(estats->brb_truncate_hi, estats->brb_truncate_lo, + new->brb_truncate - old->brb_truncate); + + UPDATE_STAT64_NIG(egress_mac_pkt0, + etherstatspkts1024octetsto1522octets); + UPDATE_STAT64_NIG(egress_mac_pkt1, etherstatspktsover1522octets); + + memcpy(old, new, sizeof(struct nig_stats)); + + memcpy(&(estats->rx_stat_ifhcinbadoctets_hi), &(pstats->mac_stx[1]), + sizeof(struct mac_stx)); + estats->brb_drop_hi = pstats->brb_drop_hi; + estats->brb_drop_lo = pstats->brb_drop_lo; + + pstats->host_port_stats_start = ++pstats->host_port_stats_end; + + nig_timer_max = SHMEM_RD(bp, port_mb[BP_PORT(bp)].stat_nig_timer); + if (nig_timer_max != estats->nig_timer_max) { + estats->nig_timer_max = nig_timer_max; + BNX2X_ERR("NIG timer max (%u)\n", estats->nig_timer_max); + } + + return 0; +} + +static int bnx2x_storm_stats_update(struct bnx2x *bp) +{ + struct eth_stats_query *stats = bnx2x_sp(bp, fw_stats); + int cl_id = BP_CL_ID(bp); + struct tstorm_per_port_stats *tport = + &stats->tstorm_common.port_statistics; + struct tstorm_per_client_stats *tclient = + &stats->tstorm_common.client_statistics[cl_id]; + struct tstorm_per_client_stats *old_tclient = &bp->old_tclient; + struct ustorm_per_client_stats *uclient = + &stats->ustorm_common.client_statistics[cl_id]; + struct xstorm_per_client_stats *xclient = + &stats->xstorm_common.client_statistics[cl_id]; + struct xstorm_per_client_stats *old_xclient = &bp->old_xclient; + struct host_func_stats *fstats = bnx2x_sp(bp, func_stats); + struct bnx2x_eth_stats *estats = &bp->eth_stats; + u32 diff; + + /* are storm stats valid? */ + if ((u16)(le16_to_cpu(tclient->stats_counter) + 1) != + bp->stats_counter) { + DP(BNX2X_MSG_STATS, "stats not updated by tstorm" + " tstorm counter (%d) != stats_counter (%d)\n", + tclient->stats_counter, bp->stats_counter); + return -1; + } + if ((u16)(le16_to_cpu(uclient->stats_counter) + 1) != + bp->stats_counter) { + DP(BNX2X_MSG_STATS, "stats not updated by ustorm" + " ustorm counter (%d) != stats_counter (%d)\n", + uclient->stats_counter, bp->stats_counter); + return -2; + } + if ((u16)(le16_to_cpu(xclient->stats_counter) + 1) != + bp->stats_counter) { + DP(BNX2X_MSG_STATS, "stats not updated by xstorm" + " xstorm counter (%d) != stats_counter (%d)\n", + xclient->stats_counter, bp->stats_counter); + return -4; + } + + fstats->total_bytes_received_hi = + fstats->valid_bytes_received_hi = + le32_to_cpu(tclient->total_rcv_bytes.hi); + fstats->total_bytes_received_lo = + fstats->valid_bytes_received_lo = + le32_to_cpu(tclient->total_rcv_bytes.lo); + + estats->error_bytes_received_hi = + le32_to_cpu(tclient->rcv_error_bytes.hi); + estats->error_bytes_received_lo = + le32_to_cpu(tclient->rcv_error_bytes.lo); + ADD_64(estats->error_bytes_received_hi, + estats->rx_stat_ifhcinbadoctets_hi, + estats->error_bytes_received_lo, + estats->rx_stat_ifhcinbadoctets_lo); + + ADD_64(fstats->total_bytes_received_hi, + estats->error_bytes_received_hi, + fstats->total_bytes_received_lo, + estats->error_bytes_received_lo); + + UPDATE_EXTEND_TSTAT(rcv_unicast_pkts, total_unicast_packets_received); + UPDATE_EXTEND_TSTAT(rcv_multicast_pkts, + total_multicast_packets_received); + UPDATE_EXTEND_TSTAT(rcv_broadcast_pkts, + total_broadcast_packets_received); + + fstats->total_bytes_transmitted_hi = + le32_to_cpu(xclient->total_sent_bytes.hi); + fstats->total_bytes_transmitted_lo = + le32_to_cpu(xclient->total_sent_bytes.lo); + + UPDATE_EXTEND_XSTAT(unicast_pkts_sent, + total_unicast_packets_transmitted); + UPDATE_EXTEND_XSTAT(multicast_pkts_sent, + total_multicast_packets_transmitted); + UPDATE_EXTEND_XSTAT(broadcast_pkts_sent, + total_broadcast_packets_transmitted); + + memcpy(estats, &(fstats->total_bytes_received_hi), + sizeof(struct host_func_stats) - 2*sizeof(u32)); + + estats->mac_filter_discard = le32_to_cpu(tport->mac_filter_discard); + estats->xxoverflow_discard = le32_to_cpu(tport->xxoverflow_discard); + estats->brb_truncate_discard = + le32_to_cpu(tport->brb_truncate_discard); + estats->mac_discard = le32_to_cpu(tport->mac_discard); + + old_tclient->rcv_unicast_bytes.hi = + le32_to_cpu(tclient->rcv_unicast_bytes.hi); + old_tclient->rcv_unicast_bytes.lo = + le32_to_cpu(tclient->rcv_unicast_bytes.lo); + old_tclient->rcv_broadcast_bytes.hi = + le32_to_cpu(tclient->rcv_broadcast_bytes.hi); + old_tclient->rcv_broadcast_bytes.lo = + le32_to_cpu(tclient->rcv_broadcast_bytes.lo); + old_tclient->rcv_multicast_bytes.hi = + le32_to_cpu(tclient->rcv_multicast_bytes.hi); + old_tclient->rcv_multicast_bytes.lo = + le32_to_cpu(tclient->rcv_multicast_bytes.lo); + old_tclient->total_rcv_pkts = le32_to_cpu(tclient->total_rcv_pkts); + + old_tclient->checksum_discard = le32_to_cpu(tclient->checksum_discard); + old_tclient->packets_too_big_discard = + le32_to_cpu(tclient->packets_too_big_discard); + old_tclient->no_buff_discard = le32_to_cpu(tclient->no_buff_discard); + old_tclient->ttl0_discard = le32_to_cpu(tclient->ttl0_discard); + + estats->no_buff_discard = old_tclient->no_buff_discard + + le32_to_cpu(uclient->no_buff_discard); + + old_xclient->total_sent_pkts = le32_to_cpu(xclient->total_sent_pkts); + old_xclient->unicast_bytes_sent.hi = + le32_to_cpu(xclient->unicast_bytes_sent.hi); + old_xclient->unicast_bytes_sent.lo = + le32_to_cpu(xclient->unicast_bytes_sent.lo); + old_xclient->multicast_bytes_sent.hi = + le32_to_cpu(xclient->multicast_bytes_sent.hi); + old_xclient->multicast_bytes_sent.lo = + le32_to_cpu(xclient->multicast_bytes_sent.lo); + old_xclient->broadcast_bytes_sent.hi = + le32_to_cpu(xclient->broadcast_bytes_sent.hi); + old_xclient->broadcast_bytes_sent.lo = + le32_to_cpu(xclient->broadcast_bytes_sent.lo); + + fstats->host_func_stats_start = ++fstats->host_func_stats_end; + + return 0; +} + +static void bnx2x_net_stats_update(struct bnx2x *bp) +{ + struct tstorm_per_client_stats *old_tclient = &bp->old_tclient; + struct bnx2x_eth_stats *estats = &bp->eth_stats; +#if (LINUX_VERSION_CODE >= 0x20618) /* BNX2X_UPSTREAM */ + struct net_device_stats *nstats = &bp->dev->stats; +#else + struct net_device_stats *nstats = &bp->net_stats; +#endif + + nstats->rx_packets = + bnx2x_hilo(&estats->total_unicast_packets_received_hi) + + bnx2x_hilo(&estats->total_multicast_packets_received_hi) + + bnx2x_hilo(&estats->total_broadcast_packets_received_hi); + + nstats->tx_packets = + bnx2x_hilo(&estats->total_unicast_packets_transmitted_hi) + + bnx2x_hilo(&estats->total_multicast_packets_transmitted_hi) + + bnx2x_hilo(&estats->total_broadcast_packets_transmitted_hi); + + nstats->rx_bytes = bnx2x_hilo(&estats->valid_bytes_received_hi); + + nstats->tx_bytes = bnx2x_hilo(&estats->total_bytes_transmitted_hi); + + nstats->rx_dropped = old_tclient->checksum_discard + + estats->mac_discard; + nstats->tx_dropped = 0; + + nstats->multicast = + bnx2x_hilo(&estats->total_multicast_packets_transmitted_hi); + + nstats->collisions = + estats->tx_stat_dot3statssinglecollisionframes_lo + + estats->tx_stat_dot3statsmultiplecollisionframes_lo + + estats->tx_stat_dot3statslatecollisions_lo + + estats->tx_stat_dot3statsexcessivecollisions_lo; + + estats->jabber_packets_received = + old_tclient->packets_too_big_discard + + estats->rx_stat_dot3statsframestoolong_lo; + + nstats->rx_length_errors = + estats->rx_stat_etherstatsundersizepkts_lo + + estats->jabber_packets_received; + nstats->rx_over_errors = estats->brb_drop_lo + estats->brb_truncate_lo; + nstats->rx_crc_errors = estats->rx_stat_dot3statsfcserrors_lo; + nstats->rx_frame_errors = estats->rx_stat_dot3statsalignmenterrors_lo; + nstats->rx_fifo_errors = estats->no_buff_discard; + nstats->rx_missed_errors = estats->xxoverflow_discard; + + nstats->rx_errors = nstats->rx_length_errors + + nstats->rx_over_errors + + nstats->rx_crc_errors + + nstats->rx_frame_errors + + nstats->rx_fifo_errors + + nstats->rx_missed_errors; + + nstats->tx_aborted_errors = + estats->tx_stat_dot3statslatecollisions_lo + + estats->tx_stat_dot3statsexcessivecollisions_lo; + nstats->tx_carrier_errors = estats->rx_stat_falsecarriererrors_lo; + nstats->tx_fifo_errors = 0; + nstats->tx_heartbeat_errors = 0; + nstats->tx_window_errors = 0; + + nstats->tx_errors = nstats->tx_aborted_errors + + nstats->tx_carrier_errors; +} + +static void bnx2x_stats_update(struct bnx2x *bp) +{ + u32 *stats_comp = bnx2x_sp(bp, stats_comp); + int update = 0; + + if (*stats_comp != DMAE_COMP_VAL) + return; + + if (bp->port.pmf) + update = (bnx2x_hw_stats_update(bp) == 0); + + update |= (bnx2x_storm_stats_update(bp) == 0); + + if (update) + bnx2x_net_stats_update(bp); + + else { + if (bp->stats_pending) { + bp->stats_pending++; + if (bp->stats_pending == 3) { + BNX2X_ERR("stats not updated for 3 times\n"); + bnx2x_panic(); + return; + } + } + } + + if (bp->msglevel & NETIF_MSG_TIMER) { + struct tstorm_per_client_stats *old_tclient = &bp->old_tclient; + struct bnx2x_eth_stats *estats = &bp->eth_stats; +#if (LINUX_VERSION_CODE >= 0x20618) /* BNX2X_UPSTREAM */ + struct net_device_stats *nstats = &bp->dev->stats; +#else + struct net_device_stats *nstats = &bp->net_stats; +#endif + int i; + + printk(KERN_DEBUG "%s:\n", bp->dev->name); + printk(KERN_DEBUG " tx avail (%4x) tx hc idx (%x)" + " tx pkt (%lx)\n", + bnx2x_tx_avail(bp->fp), + le16_to_cpu(*bp->fp->tx_cons_sb), nstats->tx_packets); + printk(KERN_DEBUG " rx usage (%4x) rx hc idx (%x)" + " rx pkt (%lx)\n", + (u16)(le16_to_cpu(*bp->fp->rx_cons_sb) - + bp->fp->rx_comp_cons), + le16_to_cpu(*bp->fp->rx_cons_sb), nstats->rx_packets); + printk(KERN_DEBUG " %s (Xoff events %u) brb drops %u\n", + netif_queue_stopped(bp->dev) ? "Xoff" : "Xon", + estats->driver_xoff, estats->brb_drop_lo); + printk(KERN_DEBUG "tstats: checksum_discard %u " + "packets_too_big_discard %u no_buff_discard %u " + "mac_discard %u mac_filter_discard %u " + "xxovrflow_discard %u brb_truncate_discard %u " + "ttl0_discard %u\n", + old_tclient->checksum_discard, + old_tclient->packets_too_big_discard, + estats->no_buff_discard, estats->mac_discard, + estats->mac_filter_discard, estats->xxoverflow_discard, + estats->brb_truncate_discard, + old_tclient->ttl0_discard); + + for_each_queue(bp, i) { + printk(KERN_DEBUG "[%d]: %lu\t%lu\t%lu\n", i, + bnx2x_fp(bp, i, tx_pkt), + bnx2x_fp(bp, i, rx_pkt), + bnx2x_fp(bp, i, rx_calls)); + } + } + + bnx2x_hw_stats_post(bp); + bnx2x_storm_stats_post(bp); +} + +static void bnx2x_port_stats_stop(struct bnx2x *bp) +{ + struct dmae_command *dmae; + u32 opcode; + int loader_idx = PMF_DMAE_C(bp); + u32 *stats_comp = bnx2x_sp(bp, stats_comp); + + bp->executer_idx = 0; + + opcode = (DMAE_CMD_SRC_PCI | DMAE_CMD_DST_GRC | + DMAE_CMD_C_ENABLE | + DMAE_CMD_SRC_RESET | DMAE_CMD_DST_RESET | +#ifdef __BIG_ENDIAN + DMAE_CMD_ENDIANITY_B_DW_SWAP | +#else + DMAE_CMD_ENDIANITY_DW_SWAP | +#endif + (BP_PORT(bp) ? DMAE_CMD_PORT_1 : DMAE_CMD_PORT_0) | + (BP_E1HVN(bp) << DMAE_CMD_E1HVN_SHIFT)); + + if (bp->port.port_stx) { + + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + if (bp->func_stx) + dmae->opcode = (opcode | DMAE_CMD_C_DST_GRC); + else + dmae->opcode = (opcode | DMAE_CMD_C_DST_PCI); + dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, port_stats)); + dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, port_stats)); + dmae->dst_addr_lo = bp->port.port_stx >> 2; + dmae->dst_addr_hi = 0; + dmae->len = sizeof(struct host_port_stats) >> 2; + if (bp->func_stx) { + dmae->comp_addr_lo = dmae_reg_go_c[loader_idx] >> 2; + dmae->comp_addr_hi = 0; + dmae->comp_val = 1; + } else { + dmae->comp_addr_lo = + U64_LO(bnx2x_sp_mapping(bp, stats_comp)); + dmae->comp_addr_hi = + U64_HI(bnx2x_sp_mapping(bp, stats_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + *stats_comp = 0; + } + } + + if (bp->func_stx) { + + dmae = bnx2x_sp(bp, dmae[bp->executer_idx++]); + dmae->opcode = (opcode | DMAE_CMD_C_DST_PCI); + dmae->src_addr_lo = U64_LO(bnx2x_sp_mapping(bp, func_stats)); + dmae->src_addr_hi = U64_HI(bnx2x_sp_mapping(bp, func_stats)); + dmae->dst_addr_lo = bp->func_stx >> 2; + dmae->dst_addr_hi = 0; + dmae->len = sizeof(struct host_func_stats) >> 2; + dmae->comp_addr_lo = U64_LO(bnx2x_sp_mapping(bp, stats_comp)); + dmae->comp_addr_hi = U64_HI(bnx2x_sp_mapping(bp, stats_comp)); + dmae->comp_val = DMAE_COMP_VAL; + + *stats_comp = 0; + } +} + +static void bnx2x_stats_stop(struct bnx2x *bp) +{ + int update = 0; + + bnx2x_stats_comp(bp); + + if (bp->port.pmf) + update = (bnx2x_hw_stats_update(bp) == 0); + + update |= (bnx2x_storm_stats_update(bp) == 0); + + if (update) { + bnx2x_net_stats_update(bp); + + if (bp->port.pmf) + bnx2x_port_stats_stop(bp); + + bnx2x_hw_stats_post(bp); + bnx2x_stats_comp(bp); + } +} + +static void bnx2x_stats_do_nothing(struct bnx2x *bp) +{ +} + +static const struct { + void (*action)(struct bnx2x *bp); + enum bnx2x_stats_state next_state; +} bnx2x_stats_stm[STATS_STATE_MAX][STATS_EVENT_MAX] = { +/* state event */ +{ +/* DISABLED PMF */ {bnx2x_stats_pmf_update, STATS_STATE_DISABLED}, +/* LINK_UP */ {bnx2x_stats_start, STATS_STATE_ENABLED}, +/* UPDATE */ {bnx2x_stats_do_nothing, STATS_STATE_DISABLED}, +/* STOP */ {bnx2x_stats_do_nothing, STATS_STATE_DISABLED} +}, +{ +/* ENABLED PMF */ {bnx2x_stats_pmf_start, STATS_STATE_ENABLED}, +/* LINK_UP */ {bnx2x_stats_restart, STATS_STATE_ENABLED}, +/* UPDATE */ {bnx2x_stats_update, STATS_STATE_ENABLED}, +/* STOP */ {bnx2x_stats_stop, STATS_STATE_DISABLED} +} +}; + +static void bnx2x_stats_handle(struct bnx2x *bp, enum bnx2x_stats_event event) +{ + enum bnx2x_stats_state state = bp->stats_state; + + bnx2x_stats_stm[state][event].action(bp); + bp->stats_state = bnx2x_stats_stm[state][event].next_state; + + if ((event != STATS_EVENT_UPDATE) || (bp->msglevel & NETIF_MSG_TIMER)) + DP(BNX2X_MSG_STATS, "state %d -> event %d -> state %d\n", + state, event, bp->stats_state); +} + +static void bnx2x_timer(unsigned long data) +{ + struct bnx2x *bp = (struct bnx2x *) data; + + if (!netif_running(bp->dev)) + return; + + if (atomic_read(&bp->intr_sem) != 0) + goto timer_restart; + + if (poll) { + struct bnx2x_fastpath *fp = &bp->fp[0]; + int rc; + + bnx2x_tx_int(fp, 1000); + rc = bnx2x_rx_int(fp, 1000); + } + + if (!BP_NOMCP(bp)) { + int func = BP_FUNC(bp); + u32 drv_pulse; + u32 mcp_pulse; + + ++bp->fw_drv_pulse_wr_seq; + bp->fw_drv_pulse_wr_seq &= DRV_PULSE_SEQ_MASK; + /* TBD - add SYSTEM_TIME */ + drv_pulse = bp->fw_drv_pulse_wr_seq; + SHMEM_WR(bp, func_mb[func].drv_pulse_mb, drv_pulse); + + mcp_pulse = (SHMEM_RD(bp, func_mb[func].mcp_pulse_mb) & + MCP_PULSE_SEQ_MASK); + /* The delta between driver pulse and mcp response + * should be 1 (before mcp response) or 0 (after mcp response) + */ + if ((drv_pulse != mcp_pulse) && + (drv_pulse != ((mcp_pulse + 1) & MCP_PULSE_SEQ_MASK))) { + /* someone lost a heartbeat... */ + BNX2X_ERR("drv_pulse (0x%x) != mcp_pulse (0x%x)\n", + drv_pulse, mcp_pulse); + } + } + + if ((bp->state == BNX2X_STATE_OPEN) || + (bp->state == BNX2X_STATE_DISABLED)) + bnx2x_stats_handle(bp, STATS_EVENT_UPDATE); + +timer_restart: + mod_timer(&bp->timer, jiffies + bp->current_interval); +} + +/* end of Statistics */ + +/* nic init */ + +/* + * nic init service functions + */ + +static void bnx2x_zero_sb(struct bnx2x *bp, int sb_id) +{ + int port = BP_PORT(bp); + + bnx2x_init_fill(bp, BAR_USTRORM_INTMEM + + USTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, sb_id), 0, + sizeof(struct ustorm_status_block)/4); + bnx2x_init_fill(bp, BAR_CSTRORM_INTMEM + + CSTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, sb_id), 0, + sizeof(struct cstorm_status_block)/4); +} + +static void bnx2x_init_sb(struct bnx2x *bp, struct host_status_block *sb, + dma_addr_t mapping, int sb_id) +{ + int port = BP_PORT(bp); + int func = BP_FUNC(bp); + int index; + u64 section; + + /* USTORM */ + section = ((u64)mapping) + offsetof(struct host_status_block, + u_status_block); + sb->u_status_block.status_block_id = sb_id; + + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_SB_HOST_SB_ADDR_OFFSET(port, sb_id), U64_LO(section)); + REG_WR(bp, BAR_USTRORM_INTMEM + + ((USTORM_SB_HOST_SB_ADDR_OFFSET(port, sb_id)) + 4), + U64_HI(section)); + REG_WR8(bp, BAR_USTRORM_INTMEM + FP_USB_FUNC_OFF + + USTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, sb_id), func); + + for (index = 0; index < HC_USTORM_SB_NUM_INDICES; index++) + REG_WR16(bp, BAR_USTRORM_INTMEM + + USTORM_SB_HC_DISABLE_OFFSET(port, sb_id, index), 1); + + /* CSTORM */ + section = ((u64)mapping) + offsetof(struct host_status_block, + c_status_block); + sb->c_status_block.status_block_id = sb_id; + + REG_WR(bp, BAR_CSTRORM_INTMEM + + CSTORM_SB_HOST_SB_ADDR_OFFSET(port, sb_id), U64_LO(section)); + REG_WR(bp, BAR_CSTRORM_INTMEM + + ((CSTORM_SB_HOST_SB_ADDR_OFFSET(port, sb_id)) + 4), + U64_HI(section)); + REG_WR8(bp, BAR_CSTRORM_INTMEM + FP_CSB_FUNC_OFF + + CSTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, sb_id), func); + + for (index = 0; index < HC_CSTORM_SB_NUM_INDICES; index++) + REG_WR16(bp, BAR_CSTRORM_INTMEM + + CSTORM_SB_HC_DISABLE_OFFSET(port, sb_id, index), 1); + + bnx2x_ack_sb(bp, sb_id, CSTORM_ID, 0, IGU_INT_ENABLE, 0); +} + +static void bnx2x_zero_def_sb(struct bnx2x *bp) +{ + int func = BP_FUNC(bp); + + bnx2x_init_fill(bp, BAR_USTRORM_INTMEM + + USTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), 0, + sizeof(struct ustorm_def_status_block)/4); + bnx2x_init_fill(bp, BAR_CSTRORM_INTMEM + + CSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), 0, + sizeof(struct cstorm_def_status_block)/4); + bnx2x_init_fill(bp, BAR_XSTRORM_INTMEM + + XSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), 0, + sizeof(struct xstorm_def_status_block)/4); + bnx2x_init_fill(bp, BAR_TSTRORM_INTMEM + + TSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), 0, + sizeof(struct tstorm_def_status_block)/4); +} + +static void bnx2x_init_def_sb(struct bnx2x *bp, + struct host_def_status_block *def_sb, + dma_addr_t mapping, int sb_id) +{ + int port = BP_PORT(bp); + int func = BP_FUNC(bp); + int index, val, reg_offset; + u64 section; + + /* ATTN */ + section = ((u64)mapping) + offsetof(struct host_def_status_block, + atten_status_block); + def_sb->atten_status_block.status_block_id = sb_id; + + bp->attn_state = 0; + + reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 : + MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); + + for (index = 0; index < MAX_DYNAMIC_ATTN_GRPS; index++) { + bp->attn_group[index].sig[0] = REG_RD(bp, + reg_offset + 0x10*index); + bp->attn_group[index].sig[1] = REG_RD(bp, + reg_offset + 0x4 + 0x10*index); + bp->attn_group[index].sig[2] = REG_RD(bp, + reg_offset + 0x8 + 0x10*index); + bp->attn_group[index].sig[3] = REG_RD(bp, + reg_offset + 0xc + 0x10*index); + } + + reg_offset = (port ? HC_REG_ATTN_MSG1_ADDR_L : + HC_REG_ATTN_MSG0_ADDR_L); + + REG_WR(bp, reg_offset, U64_LO(section)); + REG_WR(bp, reg_offset + 4, U64_HI(section)); + + reg_offset = (port ? HC_REG_ATTN_NUM_P1 : HC_REG_ATTN_NUM_P0); + + val = REG_RD(bp, reg_offset); + val |= sb_id; + REG_WR(bp, reg_offset, val); + + /* USTORM */ + section = ((u64)mapping) + offsetof(struct host_def_status_block, + u_def_status_block); + def_sb->u_def_status_block.status_block_id = sb_id; + + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_DEF_SB_HOST_SB_ADDR_OFFSET(func), U64_LO(section)); + REG_WR(bp, BAR_USTRORM_INTMEM + + ((USTORM_DEF_SB_HOST_SB_ADDR_OFFSET(func)) + 4), + U64_HI(section)); + REG_WR8(bp, BAR_USTRORM_INTMEM + DEF_USB_FUNC_OFF + + USTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), func); + + for (index = 0; index < HC_USTORM_DEF_SB_NUM_INDICES; index++) + REG_WR16(bp, BAR_USTRORM_INTMEM + + USTORM_DEF_SB_HC_DISABLE_OFFSET(func, index), 1); + + /* CSTORM */ + section = ((u64)mapping) + offsetof(struct host_def_status_block, + c_def_status_block); + def_sb->c_def_status_block.status_block_id = sb_id; + + REG_WR(bp, BAR_CSTRORM_INTMEM + + CSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(func), U64_LO(section)); + REG_WR(bp, BAR_CSTRORM_INTMEM + + ((CSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(func)) + 4), + U64_HI(section)); + REG_WR8(bp, BAR_CSTRORM_INTMEM + DEF_CSB_FUNC_OFF + + CSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), func); + + for (index = 0; index < HC_CSTORM_DEF_SB_NUM_INDICES; index++) + REG_WR16(bp, BAR_CSTRORM_INTMEM + + CSTORM_DEF_SB_HC_DISABLE_OFFSET(func, index), 1); + + /* TSTORM */ + section = ((u64)mapping) + offsetof(struct host_def_status_block, + t_def_status_block); + def_sb->t_def_status_block.status_block_id = sb_id; + + REG_WR(bp, BAR_TSTRORM_INTMEM + + TSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(func), U64_LO(section)); + REG_WR(bp, BAR_TSTRORM_INTMEM + + ((TSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(func)) + 4), + U64_HI(section)); + REG_WR8(bp, BAR_TSTRORM_INTMEM + DEF_TSB_FUNC_OFF + + TSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), func); + + for (index = 0; index < HC_TSTORM_DEF_SB_NUM_INDICES; index++) + REG_WR16(bp, BAR_TSTRORM_INTMEM + + TSTORM_DEF_SB_HC_DISABLE_OFFSET(func, index), 1); + + /* XSTORM */ + section = ((u64)mapping) + offsetof(struct host_def_status_block, + x_def_status_block); + def_sb->x_def_status_block.status_block_id = sb_id; + + REG_WR(bp, BAR_XSTRORM_INTMEM + + XSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(func), U64_LO(section)); + REG_WR(bp, BAR_XSTRORM_INTMEM + + ((XSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(func)) + 4), + U64_HI(section)); + REG_WR8(bp, BAR_XSTRORM_INTMEM + DEF_XSB_FUNC_OFF + + XSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), func); + + for (index = 0; index < HC_XSTORM_DEF_SB_NUM_INDICES; index++) + REG_WR16(bp, BAR_XSTRORM_INTMEM + + XSTORM_DEF_SB_HC_DISABLE_OFFSET(func, index), 1); + + bp->stats_pending = 0; + bp->set_mac_pending = 0; + + bnx2x_ack_sb(bp, sb_id, CSTORM_ID, 0, IGU_INT_ENABLE, 0); +} + +static void bnx2x_update_coalesce(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + int i; + + for_each_queue(bp, i) { + int sb_id = bp->fp[i].sb_id; + + /* HC_INDEX_U_ETH_RX_CQ_CONS */ + REG_WR8(bp, BAR_USTRORM_INTMEM + + USTORM_SB_HC_TIMEOUT_OFFSET(port, sb_id, + U_SB_ETH_RX_CQ_INDEX), + bp->rx_ticks/12); + REG_WR16(bp, BAR_USTRORM_INTMEM + + USTORM_SB_HC_DISABLE_OFFSET(port, sb_id, + U_SB_ETH_RX_CQ_INDEX), + bp->rx_ticks ? 0 : 1); + + /* HC_INDEX_C_ETH_TX_CQ_CONS */ + REG_WR8(bp, BAR_CSTRORM_INTMEM + + CSTORM_SB_HC_TIMEOUT_OFFSET(port, sb_id, + C_SB_ETH_TX_CQ_INDEX), + bp->tx_ticks/12); + REG_WR16(bp, BAR_CSTRORM_INTMEM + + CSTORM_SB_HC_DISABLE_OFFSET(port, sb_id, + C_SB_ETH_TX_CQ_INDEX), + bp->tx_ticks ? 0 : 1); + } +} + +static inline void bnx2x_free_tpa_pool(struct bnx2x *bp, + struct bnx2x_fastpath *fp, int last) +{ + int i; + + for (i = 0; i < last; i++) { + struct sw_rx_bd *rx_buf = &(fp->tpa_pool[i]); + struct sk_buff *skb = rx_buf->skb; + + if (skb == NULL) { + DP(NETIF_MSG_IFDOWN, "tpa bin %d empty on free\n", i); + continue; + } + + if (fp->tpa_state[i] == BNX2X_TPA_START) + pci_unmap_single(bp->pdev, + pci_unmap_addr(rx_buf, mapping), + bp->rx_buf_size, PCI_DMA_FROMDEVICE); + + dev_kfree_skb(skb); + rx_buf->skb = NULL; + } +} + +static void bnx2x_init_rx_rings(struct bnx2x *bp) +{ + int func = BP_FUNC(bp); + int max_agg_queues = CHIP_IS_E1(bp) ? ETH_MAX_AGGREGATION_QUEUES_E1 : + ETH_MAX_AGGREGATION_QUEUES_E1H; + u16 ring_prod, cqe_ring_prod; + int i, j; + + bp->rx_buf_size = bp->dev->mtu + ETH_OVREHEAD + BNX2X_RX_ALIGN; + DP(NETIF_MSG_IFUP, + "mtu %d rx_buf_size %d\n", bp->dev->mtu, bp->rx_buf_size); + + if (bp->flags & TPA_ENABLE_FLAG) { + + for_each_queue(bp, j) { + struct bnx2x_fastpath *fp = &bp->fp[j]; + + for (i = 0; i < max_agg_queues; i++) { + fp->tpa_pool[i].skb = + netdev_alloc_skb(bp->dev, bp->rx_buf_size); + if (!fp->tpa_pool[i].skb) { + BNX2X_ERR("Failed to allocate TPA " + "skb pool for queue[%d] - " + "disabling TPA on this " + "queue!\n", j); + bnx2x_free_tpa_pool(bp, fp, i); + fp->disable_tpa = 1; + break; + } + pci_unmap_addr_set((struct sw_rx_bd *) + &bp->fp->tpa_pool[i], + mapping, 0); + fp->tpa_state[i] = BNX2X_TPA_STOP; + } + } + } + + for_each_queue(bp, j) { + struct bnx2x_fastpath *fp = &bp->fp[j]; + + fp->rx_bd_cons = 0; + fp->rx_cons_sb = BNX2X_RX_SB_INDEX; + fp->rx_bd_cons_sb = BNX2X_RX_SB_BD_INDEX; + +#if defined(__NO_TPA__) + fp->disable_tpa = 1; +#else + /* "next page" elements initialization */ + /* SGE ring */ + for (i = 1; i <= NUM_RX_SGE_PAGES; i++) { + struct eth_rx_sge *sge; + + sge = &fp->rx_sge_ring[RX_SGE_CNT * i - 2]; + sge->addr_hi = + cpu_to_le32(U64_HI(fp->rx_sge_mapping + + BCM_PAGE_SIZE*(i % NUM_RX_SGE_PAGES))); + sge->addr_lo = + cpu_to_le32(U64_LO(fp->rx_sge_mapping + + BCM_PAGE_SIZE*(i % NUM_RX_SGE_PAGES))); + } + + bnx2x_init_sge_ring_bit_mask(fp); +#endif + + /* RX BD ring */ + for (i = 1; i <= NUM_RX_RINGS; i++) { + struct eth_rx_bd *rx_bd; + + rx_bd = &fp->rx_desc_ring[RX_DESC_CNT * i - 2]; + rx_bd->addr_hi = + cpu_to_le32(U64_HI(fp->rx_desc_mapping + + BCM_PAGE_SIZE*(i % NUM_RX_RINGS))); + rx_bd->addr_lo = + cpu_to_le32(U64_LO(fp->rx_desc_mapping + + BCM_PAGE_SIZE*(i % NUM_RX_RINGS))); + } + + /* CQ ring */ + for (i = 1; i <= NUM_RCQ_RINGS; i++) { + struct eth_rx_cqe_next_page *nextpg; + + nextpg = (struct eth_rx_cqe_next_page *) + &fp->rx_comp_ring[RCQ_DESC_CNT * i - 1]; + nextpg->addr_hi = + cpu_to_le32(U64_HI(fp->rx_comp_mapping + + BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS))); + nextpg->addr_lo = + cpu_to_le32(U64_LO(fp->rx_comp_mapping + + BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS))); + } + +#if !defined(__NO_TPA__) + /* Allocate SGEs and initialize the ring elements */ + for (i = 0, ring_prod = 0; + i < MAX_RX_SGE_CNT*NUM_RX_SGE_PAGES; i++) { + + if (bnx2x_alloc_rx_sge(bp, fp, ring_prod) < 0) { + BNX2X_ERR("was only able to allocate " + "%d rx sges\n", i); + BNX2X_ERR("disabling TPA for queue[%d]\n", j); + /* Cleanup already allocated elements */ + bnx2x_free_rx_sge_range(bp, fp, ring_prod); + bnx2x_free_tpa_pool(bp, fp, max_agg_queues); + fp->disable_tpa = 1; + ring_prod = 0; + break; + } + ring_prod = NEXT_SGE_IDX(ring_prod); + } + fp->rx_sge_prod = ring_prod; +#endif + + /* Allocate BDs and initialize BD ring */ + fp->rx_comp_cons = 0; + cqe_ring_prod = ring_prod = 0; + for (i = 0; i < bp->rx_ring_size; i++) { + if (bnx2x_alloc_rx_skb(bp, fp, ring_prod) < 0) { + BNX2X_ERR("was only able to allocate " + "%d rx skbs\n", i); + bp->eth_stats.rx_skb_alloc_failed++; + break; + } + ring_prod = NEXT_RX_IDX(ring_prod); + cqe_ring_prod = NEXT_RCQ_IDX(cqe_ring_prod); + WARN_ON(ring_prod <= i); + } + + fp->rx_bd_prod = ring_prod; + /* must not have more available CQEs than BDs */ + fp->rx_comp_prod = min((u16)(NUM_RCQ_RINGS*RCQ_DESC_CNT), + cqe_ring_prod); + fp->rx_pkt = fp->rx_calls = 0; + + /* Warning! + * this will generate an interrupt (to the TSTORM) + * must only be done after chip is initialized + */ + bnx2x_update_rx_prod(bp, fp, ring_prod, fp->rx_comp_prod, + fp->rx_sge_prod); + if (j != 0) + continue; + + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func), + U64_LO(fp->rx_comp_mapping)); + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func) + 4, + U64_HI(fp->rx_comp_mapping)); + } +} + +static void bnx2x_init_tx_ring(struct bnx2x *bp) +{ + int i, j; + + for_each_queue(bp, j) { + struct bnx2x_fastpath *fp = &bp->fp[j]; + + for (i = 1; i <= NUM_TX_RINGS; i++) { + struct eth_tx_bd *tx_bd = + &fp->tx_desc_ring[TX_DESC_CNT * i - 1]; + + tx_bd->addr_hi = + cpu_to_le32(U64_HI(fp->tx_desc_mapping + + BCM_PAGE_SIZE*(i % NUM_TX_RINGS))); + tx_bd->addr_lo = + cpu_to_le32(U64_LO(fp->tx_desc_mapping + + BCM_PAGE_SIZE*(i % NUM_TX_RINGS))); + } + + fp->tx_pkt_prod = 0; + fp->tx_pkt_cons = 0; + fp->tx_bd_prod = 0; + fp->tx_bd_cons = 0; + fp->tx_cons_sb = BNX2X_TX_SB_INDEX; + fp->tx_pkt = 0; + } +} + +static void bnx2x_init_sp_ring(struct bnx2x *bp) +{ + int func = BP_FUNC(bp); + + spin_lock_init(&bp->spq_lock); + + bp->spq_left = MAX_SPQ_PENDING; + bp->spq_prod_idx = 0; + bp->dsb_sp_prod = BNX2X_SP_DSB_INDEX; + bp->spq_prod_bd = bp->spq; + bp->spq_last_bd = bp->spq_prod_bd + MAX_SP_DESC_CNT; + + REG_WR(bp, XSEM_REG_FAST_MEMORY + XSTORM_SPQ_PAGE_BASE_OFFSET(func), + U64_LO(bp->spq_mapping)); + REG_WR(bp, + XSEM_REG_FAST_MEMORY + XSTORM_SPQ_PAGE_BASE_OFFSET(func) + 4, + U64_HI(bp->spq_mapping)); + + REG_WR(bp, XSEM_REG_FAST_MEMORY + XSTORM_SPQ_PROD_OFFSET(func), + bp->spq_prod_idx); +} + +static void bnx2x_init_context(struct bnx2x *bp) +{ + int i; + + for_each_queue(bp, i) { + struct eth_context *context = bnx2x_sp(bp, context[i].eth); + struct bnx2x_fastpath *fp = &bp->fp[i]; + u8 sb_id = FP_SB_ID(fp); + + context->xstorm_st_context.tx_bd_page_base_hi = + U64_HI(fp->tx_desc_mapping); + context->xstorm_st_context.tx_bd_page_base_lo = + U64_LO(fp->tx_desc_mapping); + context->xstorm_st_context.db_data_addr_hi = + U64_HI(fp->tx_prods_mapping); + context->xstorm_st_context.db_data_addr_lo = + U64_LO(fp->tx_prods_mapping); + context->xstorm_st_context.statistics_data = (BP_CL_ID(bp) | + XSTORM_ETH_ST_CONTEXT_STATISTICS_ENABLE); + switch (bp->multi_mode) { + case ETH_RSS_MODE_DISABLED: + case ETH_RSS_MODE_REGULAR: + break; + case ETH_RSS_MODE_VLAN_PRI: + case ETH_RSS_MODE_E1HOV_PRI: + case ETH_RSS_MODE_IP_DSCP: + context->xstorm_st_context.safc_group_en = 1; + context->xstorm_st_context.safc_group_num = i; + break; + default: + break; + } + + context->ustorm_st_context.common.sb_index_numbers = + BNX2X_RX_SB_INDEX_NUM; + context->ustorm_st_context.common.clientId = FP_CL_ID(fp); + context->ustorm_st_context.common.status_block_id = sb_id; + context->ustorm_st_context.common.flags = + (USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_MC_ALIGNMENT | + USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_STATISTICS); + context->ustorm_st_context.common.statistics_counter_id = + BP_CL_ID(bp); + context->ustorm_st_context.common.mc_alignment_log_size = + BNX2X_RX_ALIGN_SHIFT; + context->ustorm_st_context.common.bd_buff_size = + bp->rx_buf_size; + context->ustorm_st_context.common.bd_page_base_hi = + U64_HI(fp->rx_desc_mapping); + context->ustorm_st_context.common.bd_page_base_lo = + U64_LO(fp->rx_desc_mapping); + if (!fp->disable_tpa) { + context->ustorm_st_context.common.flags |= + (USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_TPA | + USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING); + context->ustorm_st_context.common.sge_buff_size = + (u16)(BCM_PAGE_SIZE*PAGES_PER_SGE); + context->ustorm_st_context.common.sge_page_base_hi = + U64_HI(fp->rx_sge_mapping); + context->ustorm_st_context.common.sge_page_base_lo = + U64_LO(fp->rx_sge_mapping); + } + + context->cstorm_st_context.sb_index_number = + C_SB_ETH_TX_CQ_INDEX; + context->cstorm_st_context.status_block_id = sb_id; + + context->xstorm_ag_context.cdu_reserved = + CDU_RSRVD_VALUE_TYPE_A(HW_CID(bp, i), + CDU_REGION_NUMBER_XCM_AG, + ETH_CONNECTION_TYPE); + context->ustorm_ag_context.cdu_usage = + CDU_RSRVD_VALUE_TYPE_A(HW_CID(bp, i), + CDU_REGION_NUMBER_UCM_AG, + ETH_CONNECTION_TYPE); + } +} + +static void bnx2x_init_ind_table(struct bnx2x *bp) +{ + int func = BP_FUNC(bp); + int i; + + switch (bp->multi_mode) { + case ETH_RSS_MODE_DISABLED: + return; + case ETH_RSS_MODE_REGULAR: + for (i = 0; i < TSTORM_INDIRECTION_TABLE_SIZE; i++) + REG_WR8(bp, BAR_TSTRORM_INTMEM + + TSTORM_INDIRECTION_TABLE_OFFSET(func) + i, + i % bp->num_queues); + break; + case ETH_RSS_MODE_VLAN_PRI: + case ETH_RSS_MODE_E1HOV_PRI: + case ETH_RSS_MODE_IP_DSCP: + for (i = 0; i < TSTORM_INDIRECTION_TABLE_SIZE; i++) + REG_WR8(bp, BAR_TSTRORM_INTMEM + + TSTORM_INDIRECTION_TABLE_OFFSET(func) + i, + bp->pri_map[i / BNX2X_MAX_ENTRIES_PER_PRI]); + break; + default: + return; + } + DP(NETIF_MSG_IFUP, + "Initializing indirection table multi_mode %d\n", bp->multi_mode); + + REG_WR(bp, PRS_REG_A_PRSU_20, + ((PRS_A_PRSU_20_REG_HASH_TCP_IPV4_PORT_0 | + PRS_A_PRSU_20_REG_HASH_TCP_IPV6_PORT_0) << BP_PORT(bp))); +} + +static void bnx2x_set_client_config(struct bnx2x *bp) +{ + struct tstorm_eth_client_config tstorm_client = {0}; + int port = BP_PORT(bp); + int i; + + tstorm_client.mtu = bp->dev->mtu; + tstorm_client.statistics_counter_id = BP_CL_ID(bp); + tstorm_client.config_flags = + (TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE | + TSTORM_ETH_CLIENT_CONFIG_E1HOV_REMOVAL_ENABLE); +#ifdef BCM_VLAN + if (bp->rx_mode && bp->vlgrp) { + tstorm_client.config_flags |= + TSTORM_ETH_CLIENT_CONFIG_VLAN_REMOVAL_ENABLE; + DP(NETIF_MSG_IFUP, "vlan removal enabled\n"); + } +#endif + + if (bp->flags & TPA_ENABLE_FLAG) { + tstorm_client.max_sges_for_packet = + BCM_PAGE_ALIGN(tstorm_client.mtu) >> BCM_PAGE_SHIFT; + tstorm_client.max_sges_for_packet = + ((tstorm_client.max_sges_for_packet + + PAGES_PER_SGE - 1) & (~(PAGES_PER_SGE - 1))) >> + PAGES_PER_SGE_SHIFT; + + tstorm_client.config_flags |= + TSTORM_ETH_CLIENT_CONFIG_ENABLE_SGE_RING; + } + + for_each_queue(bp, i) { + REG_WR(bp, BAR_TSTRORM_INTMEM + + TSTORM_CLIENT_CONFIG_OFFSET(port, bp->fp[i].cl_id), + ((u32 *)&tstorm_client)[0]); + REG_WR(bp, BAR_TSTRORM_INTMEM + + TSTORM_CLIENT_CONFIG_OFFSET(port, bp->fp[i].cl_id) + 4, + ((u32 *)&tstorm_client)[1]); + } + + DP(BNX2X_MSG_OFF, "tstorm_client: 0x%08x 0x%08x\n", + ((u32 *)&tstorm_client)[0], ((u32 *)&tstorm_client)[1]); +} + +static void bnx2x_set_storm_rx_mode(struct bnx2x *bp) +{ + struct tstorm_eth_mac_filter_config tstorm_mac_filter = {0}; + int mode = bp->rx_mode; + int mask = (1 << BP_L_ID(bp)); + int func = BP_FUNC(bp); + int i; + + DP(NETIF_MSG_IFUP, "rx mode %d mask 0x%x\n", mode, mask); + + switch (mode) { + case BNX2X_RX_MODE_NONE: /* no Rx */ + tstorm_mac_filter.ucast_drop_all = mask; + tstorm_mac_filter.mcast_drop_all = mask; + tstorm_mac_filter.bcast_drop_all = mask; + break; + case BNX2X_RX_MODE_NORMAL: + tstorm_mac_filter.bcast_accept_all = mask; + break; + case BNX2X_RX_MODE_ALLMULTI: + tstorm_mac_filter.mcast_accept_all = mask; + tstorm_mac_filter.bcast_accept_all = mask; + break; + case BNX2X_RX_MODE_PROMISC: + tstorm_mac_filter.ucast_accept_all = mask; + tstorm_mac_filter.mcast_accept_all = mask; + tstorm_mac_filter.bcast_accept_all = mask; + break; + default: + BNX2X_ERR("BAD rx mode (%d)\n", mode); + break; + } + + for (i = 0; i < sizeof(struct tstorm_eth_mac_filter_config)/4; i++) { + REG_WR(bp, BAR_TSTRORM_INTMEM + + TSTORM_MAC_FILTER_CONFIG_OFFSET(func) + i * 4, + ((u32 *)&tstorm_mac_filter)[i]); + +/* DP(NETIF_MSG_IFUP, "tstorm_mac_filter[%d]: 0x%08x\n", i, + ((u32 *)&tstorm_mac_filter)[i]); */ + } + + if (mode != BNX2X_RX_MODE_NONE) + bnx2x_set_client_config(bp); +} + +static void bnx2x_init_internal_common(struct bnx2x *bp) +{ + int i; + + if (bp->flags & TPA_ENABLE_FLAG) { + struct tstorm_eth_tpa_exist tpa = {0}; + + tpa.tpa_exist = 1; + + REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_TPA_EXIST_OFFSET, + ((u32 *)&tpa)[0]); + REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_TPA_EXIST_OFFSET + 4, + ((u32 *)&tpa)[1]); + } + + /* Zero this manually as its initialization is + currently missing in the initTool */ + for (i = 0; i < (USTORM_AGG_DATA_SIZE >> 2); i++) + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_AGG_DATA_OFFSET + i * 4, 0); +} + +static void bnx2x_init_internal_port(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + + REG_WR(bp, BAR_USTRORM_INTMEM + USTORM_HC_BTR_OFFSET(port), BNX2X_BTR); + REG_WR(bp, BAR_CSTRORM_INTMEM + CSTORM_HC_BTR_OFFSET(port), BNX2X_BTR); + REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_HC_BTR_OFFSET(port), BNX2X_BTR); + REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_HC_BTR_OFFSET(port), BNX2X_BTR); +} + +/* Calculates the sum of vn_min_rates. + It's needed for further normalizing of the min_rates. + Returns: + sum of vn_min_rates. + or + 0 - if all the min_rates are 0. + In the later case fainess algorithm should be deactivated. + If not all min_rates are zero then those that are zeroes will be set to 1. + */ +static void bnx2x_calc_vn_wsum(struct bnx2x *bp) +{ + int all_zero = 1; + int port = BP_PORT(bp); + int vn; + + bp->wsum = 0; + for (vn = VN_0; vn < E1HVN_MAX; vn++) { + int func = 2*vn + port; + u32 vn_cfg = + SHMEM_RD(bp, mf_cfg.func_mf_config[func].config); + u32 vn_min_rate = ((vn_cfg & FUNC_MF_CFG_MIN_BW_MASK) >> + FUNC_MF_CFG_MIN_BW_SHIFT) * 100; + + /* Skip hidden vns */ + if (vn_cfg & FUNC_MF_CFG_FUNC_HIDE) + continue; + + /* If min rate is zero - set it to 1 */ + if (!vn_min_rate) + vn_min_rate = DEF_MIN_RATE; + else + all_zero = 0; + + bp->wsum += vn_min_rate; + } + + /* ... only if all min rates are zeros - disable FAIRNESS */ + if (all_zero) + bp->wsum = 0; +} + +static void bnx2x_init_internal_func(struct bnx2x *bp) +{ + struct tstorm_eth_function_common_config tstorm_config = {0}; + struct stats_indication_flags stats_flags = {0}; + int port = BP_PORT(bp); + int func = BP_FUNC(bp); + int i; + u16 max_agg_size; + + if (is_multi(bp)) { + tstorm_config.config_flags = MULTI_FLAGS(bp); + tstorm_config.rss_result_mask = MULTI_MASK; + } + + tstorm_config.leading_client_id = BP_L_ID(bp); + + REG_WR(bp, BAR_TSTRORM_INTMEM + + TSTORM_FUNCTION_COMMON_CONFIG_OFFSET(func), + (*(u32 *)&tstorm_config)); + + bp->rx_mode = BNX2X_RX_MODE_NONE; /* no rx until link is up */ + bnx2x_set_storm_rx_mode(bp); + + /* reset xstorm per client statistics */ + for (i = 0; i < sizeof(struct xstorm_per_client_stats) / 4; i++) { + REG_WR(bp, BAR_XSTRORM_INTMEM + + XSTORM_PER_COUNTER_ID_STATS_OFFSET(port, BP_CL_ID(bp)) + + i*4, 0); + } + /* reset tstorm per client statistics */ + for (i = 0; i < sizeof(struct tstorm_per_client_stats) / 4; i++) { + REG_WR(bp, BAR_TSTRORM_INTMEM + + TSTORM_PER_COUNTER_ID_STATS_OFFSET(port, BP_CL_ID(bp)) + + i*4, 0); + } + /* reset ustorm per client statistics */ + for (i = 0; i < sizeof(struct ustorm_per_client_stats) / 4; i++) { + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_PER_COUNTER_ID_STATS_OFFSET(port, BP_CL_ID(bp)) + + i*4, 0); + } + + /* Init statistics related context */ + stats_flags.collect_eth = 1; + + REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_STATS_FLAGS_OFFSET(func), + ((u32 *)&stats_flags)[0]); + REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_STATS_FLAGS_OFFSET(func) + 4, + ((u32 *)&stats_flags)[1]); + + REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_STATS_FLAGS_OFFSET(func), + ((u32 *)&stats_flags)[0]); + REG_WR(bp, BAR_TSTRORM_INTMEM + TSTORM_STATS_FLAGS_OFFSET(func) + 4, + ((u32 *)&stats_flags)[1]); + + REG_WR(bp, BAR_USTRORM_INTMEM + USTORM_STATS_FLAGS_OFFSET(func), + ((u32 *)&stats_flags)[0]); + REG_WR(bp, BAR_USTRORM_INTMEM + USTORM_STATS_FLAGS_OFFSET(func) + 4, + ((u32 *)&stats_flags)[1]); + + REG_WR(bp, BAR_CSTRORM_INTMEM + CSTORM_STATS_FLAGS_OFFSET(func), + ((u32 *)&stats_flags)[0]); + REG_WR(bp, BAR_CSTRORM_INTMEM + CSTORM_STATS_FLAGS_OFFSET(func) + 4, + ((u32 *)&stats_flags)[1]); + + REG_WR(bp, BAR_XSTRORM_INTMEM + + XSTORM_ETH_STATS_QUERY_ADDR_OFFSET(func), + U64_LO(bnx2x_sp_mapping(bp, fw_stats))); + REG_WR(bp, BAR_XSTRORM_INTMEM + + XSTORM_ETH_STATS_QUERY_ADDR_OFFSET(func) + 4, + U64_HI(bnx2x_sp_mapping(bp, fw_stats))); + + REG_WR(bp, BAR_TSTRORM_INTMEM + + TSTORM_ETH_STATS_QUERY_ADDR_OFFSET(func), + U64_LO(bnx2x_sp_mapping(bp, fw_stats))); + REG_WR(bp, BAR_TSTRORM_INTMEM + + TSTORM_ETH_STATS_QUERY_ADDR_OFFSET(func) + 4, + U64_HI(bnx2x_sp_mapping(bp, fw_stats))); + + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_ETH_STATS_QUERY_ADDR_OFFSET(func), + U64_LO(bnx2x_sp_mapping(bp, fw_stats))); + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_ETH_STATS_QUERY_ADDR_OFFSET(func) + 4, + U64_HI(bnx2x_sp_mapping(bp, fw_stats))); + + if (CHIP_IS_E1H(bp)) { + REG_WR8(bp, BAR_XSTRORM_INTMEM + XSTORM_FUNCTION_MODE_OFFSET, + IS_E1HMF(bp)); + REG_WR8(bp, BAR_TSTRORM_INTMEM + TSTORM_FUNCTION_MODE_OFFSET, + IS_E1HMF(bp)); + REG_WR8(bp, BAR_CSTRORM_INTMEM + CSTORM_FUNCTION_MODE_OFFSET, + IS_E1HMF(bp)); + REG_WR8(bp, BAR_USTRORM_INTMEM + USTORM_FUNCTION_MODE_OFFSET, + IS_E1HMF(bp)); + + REG_WR16(bp, BAR_XSTRORM_INTMEM + XSTORM_E1HOV_OFFSET(func), + bp->e1hov); + } + + /* Init CQ ring mapping and aggregation size */ + max_agg_size = min((u32)(bp->rx_buf_size + + 8*BCM_PAGE_SIZE*PAGES_PER_SGE), + (u32)0xffff); + for_each_queue(bp, i) { + struct bnx2x_fastpath *fp = &bp->fp[i]; + + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_CQE_PAGE_BASE_OFFSET(port, FP_CL_ID(fp)), + U64_LO(fp->rx_comp_mapping)); + REG_WR(bp, BAR_USTRORM_INTMEM + + USTORM_CQE_PAGE_BASE_OFFSET(port, FP_CL_ID(fp)) + 4, + U64_HI(fp->rx_comp_mapping)); + + REG_WR16(bp, BAR_USTRORM_INTMEM + + USTORM_MAX_AGG_SIZE_OFFSET(port, FP_CL_ID(fp)), + max_agg_size); + } + + memset(&(bp->cmng), 0, sizeof(struct cmng_struct_per_port)); + + if (IS_E1HMF(bp)) { + int vn; + + /* Init RATE SHAPING and FAIRNESS contexts */ + bnx2x_calc_vn_wsum(bp); + + /* Enable rate shaping and fairness */ + bp->cmng.flags.cmng_vn_enable = 1; + bp->cmng.flags.rate_shaping_enable = 1; + bp->cmng.flags.fairness_enable = bp->wsum ? 1 : 0; + + if (!bp->wsum) + DP(NETIF_MSG_IFUP, "All MIN values are zeroes" + " fairness will be disabled\n"); + + /* During init there is no active link + Until link is up, set link rate to 10Gbps */ + bp->link_vars.line_speed = SPEED_10000; + bnx2x_init_port_minmax(bp); + + for (vn = VN_0; vn < E1HVN_MAX; vn++) + bnx2x_init_vn_minmax(bp, 2*vn + port); + + } else { + /* rate shaping and fairness is disabled */ + DP(NETIF_MSG_IFUP, + "single function mode minmax will be disabled\n"); + } + + switch (bp->multi_mode) { + case ETH_RSS_MODE_DISABLED: + case ETH_RSS_MODE_REGULAR: + break; + case ETH_RSS_MODE_VLAN_PRI: + case ETH_RSS_MODE_E1HOV_PRI: + case ETH_RSS_MODE_IP_DSCP: + bp->cmng.safc_vars.safc_timeout_usec = 50; + for_each_queue(bp, i) + bp->cmng.safc_vars.cos_to_pause_mask[i] = (1 << i); + break; + default: + break; + } + + /* Store it to internal memory */ + if (bp->port.pmf) + for (i = 0; i < sizeof(struct cmng_struct_per_port) / 4; i++) + REG_WR(bp, BAR_XSTRORM_INTMEM + + XSTORM_CMNG_PER_PORT_VARS_OFFSET(port) + i * 4, + ((u32 *)(&bp->cmng))[i]); +} + +static void bnx2x_init_internal(struct bnx2x *bp, u32 load_code) +{ + switch (load_code) { + case FW_MSG_CODE_DRV_LOAD_COMMON: + bnx2x_init_internal_common(bp); + /* no break */ + + case FW_MSG_CODE_DRV_LOAD_PORT: + bnx2x_init_internal_port(bp); + /* no break */ + + case FW_MSG_CODE_DRV_LOAD_FUNCTION: + bnx2x_init_internal_func(bp); + break; + + default: + BNX2X_ERR("Unknown load_code (0x%x) from MCP\n", load_code); + break; + } +} + +static void bnx2x_nic_init(struct bnx2x *bp, u32 load_code) +{ + int i; + + for_each_queue(bp, i) { + struct bnx2x_fastpath *fp = &bp->fp[i]; + + fp->bp = bp; + fp->state = BNX2X_FP_STATE_CLOSED; + fp->index = i; + fp->cl_id = BP_L_ID(bp) + i; +#ifdef BCM_CNIC + fp->sb_id = fp->cl_id + 1; +#else + fp->sb_id = fp->cl_id; +#endif + DP(NETIF_MSG_IFUP, + "bnx2x_init_sb(%p,%p) index %d cl_id %d sb %d\n", + bp, fp->status_blk, i, FP_CL_ID(fp), FP_SB_ID(fp)); + bnx2x_init_sb(bp, fp->status_blk, fp->status_blk_mapping, + FP_SB_ID(fp)); + bnx2x_update_fpsb_idx(fp); + } + + bnx2x_init_def_sb(bp, bp->def_status_blk, bp->def_status_blk_mapping, + DEF_SB_ID); + bnx2x_update_dsb_idx(bp); + bnx2x_update_coalesce(bp); + bnx2x_init_rx_rings(bp); + bnx2x_init_tx_ring(bp); + bnx2x_init_sp_ring(bp); + bnx2x_init_context(bp); + bnx2x_init_internal(bp, load_code); + bnx2x_init_ind_table(bp); + bnx2x_int_enable(bp); +} + +/* end of nic init */ + +/* + * gzip service functions + */ + +static int bnx2x_gunzip_init(struct bnx2x *bp) +{ + bp->gunzip_buf = pci_alloc_consistent(bp->pdev, FW_BUF_SIZE, + &bp->gunzip_mapping); + if (bp->gunzip_buf == NULL) + goto gunzip_nomem1; + + bp->strm = kmalloc(sizeof(*bp->strm), GFP_KERNEL); + if (bp->strm == NULL) + goto gunzip_nomem2; + + bp->strm->workspace = kmalloc(zlib_inflate_workspacesize(), + GFP_KERNEL); + if (bp->strm->workspace == NULL) + goto gunzip_nomem3; + + return 0; + +gunzip_nomem3: + kfree(bp->strm); + bp->strm = NULL; + +gunzip_nomem2: + pci_free_consistent(bp->pdev, FW_BUF_SIZE, bp->gunzip_buf, + bp->gunzip_mapping); + bp->gunzip_buf = NULL; + +gunzip_nomem1: + printk(KERN_ERR PFX "%s: Cannot allocate firmware buffer for" + " un-compression\n", bp->dev->name); + return -ENOMEM; +} + +static void bnx2x_gunzip_end(struct bnx2x *bp) +{ + kfree(bp->strm->workspace); + + kfree(bp->strm); + bp->strm = NULL; + + if (bp->gunzip_buf) { + pci_free_consistent(bp->pdev, FW_BUF_SIZE, bp->gunzip_buf, + bp->gunzip_mapping); + bp->gunzip_buf = NULL; + } +} + +static int bnx2x_gunzip(struct bnx2x *bp, u8 *zbuf, int len) +{ + int n, rc; + + /* check gzip header */ + if ((zbuf[0] != 0x1f) || (zbuf[1] != 0x8b) || (zbuf[2] != Z_DEFLATED)) + return -EINVAL; + + n = 10; + +#define FNAME 0x8 + + if (zbuf[3] & FNAME) + while ((zbuf[n++] != 0) && (n < len)); + + bp->strm->next_in = zbuf + n; + bp->strm->avail_in = len - n; + bp->strm->next_out = bp->gunzip_buf; + bp->strm->avail_out = FW_BUF_SIZE; + + rc = zlib_inflateInit2(bp->strm, -MAX_WBITS); + if (rc != Z_OK) + return rc; + + rc = zlib_inflate(bp->strm, Z_FINISH); + if ((rc != Z_OK) && (rc != Z_STREAM_END)) + printk(KERN_ERR PFX "%s: Firmware decompression error: %s\n", + bp->dev->name, bp->strm->msg); + + bp->gunzip_outlen = (FW_BUF_SIZE - bp->strm->avail_out); + if (bp->gunzip_outlen & 0x3) + printk(KERN_ERR PFX "%s: Firmware decompression error:" + " gunzip_outlen (%d) not aligned\n", + bp->dev->name, bp->gunzip_outlen); + bp->gunzip_outlen >>= 2; + + zlib_inflateEnd(bp->strm); + + if (rc == Z_STREAM_END) + return 0; + + return rc; +} + +/* nic load/unload */ + +/* + * General service functions + */ + +/* send a NIG loopback debug packet */ +static void bnx2x_lb_pckt(struct bnx2x *bp) +{ + u32 wb_write[3]; + + /* Ethernet source and destination addresses */ + wb_write[0] = 0x55555555; + wb_write[1] = 0x55555555; + wb_write[2] = 0x20; /* SOP */ + REG_WR_DMAE(bp, NIG_REG_DEBUG_PACKET_LB, wb_write, 3); + + /* NON-IP protocol */ + wb_write[0] = 0x09000000; + wb_write[1] = 0x55555555; + wb_write[2] = 0x10; /* EOP, eop_bvalid = 0 */ + REG_WR_DMAE(bp, NIG_REG_DEBUG_PACKET_LB, wb_write, 3); +} + +/* some of the internal memories + * are not directly readable from the driver + * to test them we send debug packets + */ +static int bnx2x_int_mem_test(struct bnx2x *bp) +{ + int factor; + int count, i; + u32 val = 0; + + if (CHIP_REV_IS_FPGA(bp)) + factor = 120; + else if (CHIP_REV_IS_EMUL(bp)) + factor = 200; + else + factor = 1; + + DP(NETIF_MSG_HW, "start part1\n"); + + /* Disable inputs of parser neighbor blocks */ + REG_WR(bp, TSDM_REG_ENABLE_IN1, 0x0); + REG_WR(bp, TCM_REG_PRS_IFEN, 0x0); + REG_WR(bp, CFC_REG_DEBUG0, 0x1); + REG_WR(bp, NIG_REG_PRS_REQ_IN_EN, 0x0); + + /* Write 0 to parser credits for CFC search request */ + REG_WR(bp, PRS_REG_CFC_SEARCH_INITIAL_CREDIT, 0x0); + + /* send Ethernet packet */ + bnx2x_lb_pckt(bp); + + /* TODO do i reset NIG statistic? */ + /* Wait until NIG register shows 1 packet of size 0x10 */ + count = 1000 * factor; + while (count) { + + bnx2x_read_dmae(bp, NIG_REG_STAT2_BRB_OCTET, 2); + val = *bnx2x_sp(bp, wb_data[0]); + if (val == 0x10) + break; + + msleep(10); + count--; + } + if (val != 0x10) { + BNX2X_ERR("NIG timeout val = 0x%x\n", val); + return -1; + } + + /* Wait until PRS register shows 1 packet */ + count = 1000 * factor; + while (count) { + val = REG_RD(bp, PRS_REG_NUM_OF_PACKETS); + if (val == 1) + break; + + msleep(10); + count--; + } + if (val != 0x1) { + BNX2X_ERR("PRS timeout val = 0x%x\n", val); + return -2; + } + + /* Reset and init BRB, PRS */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, 0x03); + msleep(50); + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0x03); + msleep(50); + bnx2x_init_block(bp, BRB1_COMMON_START, BRB1_COMMON_END); + bnx2x_init_block(bp, PRS_COMMON_START, PRS_COMMON_END); + + DP(NETIF_MSG_HW, "part2\n"); + + /* Disable inputs of parser neighbor blocks */ + REG_WR(bp, TSDM_REG_ENABLE_IN1, 0x0); + REG_WR(bp, TCM_REG_PRS_IFEN, 0x0); + REG_WR(bp, CFC_REG_DEBUG0, 0x1); + REG_WR(bp, NIG_REG_PRS_REQ_IN_EN, 0x0); + + /* Write 0 to parser credits for CFC search request */ + REG_WR(bp, PRS_REG_CFC_SEARCH_INITIAL_CREDIT, 0x0); + + /* send 10 Ethernet packets */ + for (i = 0; i < 10; i++) + bnx2x_lb_pckt(bp); + + /* Wait until NIG register shows 10 + 1 + packets of size 11*0x10 = 0xb0 */ + count = 1000 * factor; + while (count) { + + bnx2x_read_dmae(bp, NIG_REG_STAT2_BRB_OCTET, 2); + val = *bnx2x_sp(bp, wb_data[0]); + if (val == 0xb0) + break; + + msleep(10); + count--; + } + if (val != 0xb0) { + BNX2X_ERR("NIG timeout val = 0x%x\n", val); + return -3; + } + + /* Wait until PRS register shows 2 packets */ + val = REG_RD(bp, PRS_REG_NUM_OF_PACKETS); + if (val != 2) + BNX2X_ERR("PRS timeout val = 0x%x\n", val); + + /* Write 1 to parser credits for CFC search request */ + REG_WR(bp, PRS_REG_CFC_SEARCH_INITIAL_CREDIT, 0x1); + + /* Wait until PRS register shows 3 packets */ + msleep(10 * factor); + /* Wait until NIG register shows 1 packet of size 0x10 */ + val = REG_RD(bp, PRS_REG_NUM_OF_PACKETS); + if (val != 3) + BNX2X_ERR("PRS timeout val = 0x%x\n", val); + + /* clear NIG EOP FIFO */ + for (i = 0; i < 11; i++) + REG_RD(bp, NIG_REG_INGRESS_EOP_LB_FIFO); + val = REG_RD(bp, NIG_REG_INGRESS_EOP_LB_EMPTY); + if (val != 1) { + BNX2X_ERR("clear of NIG failed\n"); + return -4; + } + + /* Reset and init BRB, PRS, NIG */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, 0x03); + msleep(50); + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0x03); + msleep(50); + bnx2x_init_block(bp, BRB1_COMMON_START, BRB1_COMMON_END); + bnx2x_init_block(bp, PRS_COMMON_START, PRS_COMMON_END); +#ifndef BCM_CNIC + /* set NIC mode */ + REG_WR(bp, PRS_REG_NIC_MODE, 1); +#endif + + /* Enable inputs of parser neighbor blocks */ + REG_WR(bp, TSDM_REG_ENABLE_IN1, 0x7fffffff); + REG_WR(bp, TCM_REG_PRS_IFEN, 0x1); + REG_WR(bp, CFC_REG_DEBUG0, 0x0); + REG_WR(bp, NIG_REG_PRS_REQ_IN_EN, 0x1); + + DP(NETIF_MSG_HW, "done\n"); + + return 0; /* OK */ +} + +static void enable_blocks_attention(struct bnx2x *bp) +{ + REG_WR(bp, PXP_REG_PXP_INT_MASK_0, 0); + REG_WR(bp, PXP_REG_PXP_INT_MASK_1, 0); + REG_WR(bp, DORQ_REG_DORQ_INT_MASK, 0); + REG_WR(bp, CFC_REG_CFC_INT_MASK, 0); + REG_WR(bp, QM_REG_QM_INT_MASK, 0); + REG_WR(bp, TM_REG_TM_INT_MASK, 0); + REG_WR(bp, XSDM_REG_XSDM_INT_MASK_0, 0); + REG_WR(bp, XSDM_REG_XSDM_INT_MASK_1, 0); + REG_WR(bp, XCM_REG_XCM_INT_MASK, 0); +/* REG_WR(bp, XSEM_REG_XSEM_INT_MASK_0, 0); */ +/* REG_WR(bp, XSEM_REG_XSEM_INT_MASK_1, 0); */ + REG_WR(bp, USDM_REG_USDM_INT_MASK_0, 0); + REG_WR(bp, USDM_REG_USDM_INT_MASK_1, 0); + REG_WR(bp, UCM_REG_UCM_INT_MASK, 0); +/* REG_WR(bp, USEM_REG_USEM_INT_MASK_0, 0); */ +/* REG_WR(bp, USEM_REG_USEM_INT_MASK_1, 0); */ + REG_WR(bp, GRCBASE_UPB + PB_REG_PB_INT_MASK, 0); + REG_WR(bp, CSDM_REG_CSDM_INT_MASK_0, 0); + REG_WR(bp, CSDM_REG_CSDM_INT_MASK_1, 0); + REG_WR(bp, CCM_REG_CCM_INT_MASK, 0); +/* REG_WR(bp, CSEM_REG_CSEM_INT_MASK_0, 0); */ +/* REG_WR(bp, CSEM_REG_CSEM_INT_MASK_1, 0); */ + if (CHIP_REV_IS_FPGA(bp)) + REG_WR(bp, PXP2_REG_PXP2_INT_MASK_0, 0x580000); + else + REG_WR(bp, PXP2_REG_PXP2_INT_MASK_0, 0x480000); + REG_WR(bp, TSDM_REG_TSDM_INT_MASK_0, 0); + REG_WR(bp, TSDM_REG_TSDM_INT_MASK_1, 0); + REG_WR(bp, TCM_REG_TCM_INT_MASK, 0); +/* REG_WR(bp, TSEM_REG_TSEM_INT_MASK_0, 0); */ +/* REG_WR(bp, TSEM_REG_TSEM_INT_MASK_1, 0); */ + REG_WR(bp, CDU_REG_CDU_INT_MASK, 0); + REG_WR(bp, DMAE_REG_DMAE_INT_MASK, 0); +/* REG_WR(bp, MISC_REG_MISC_INT_MASK, 0); */ + REG_WR(bp, PBF_REG_PBF_INT_MASK, 0X18); /* bit 3,4 masked */ +} + +#ifdef BNX2X_EXTRA_DEBUG /* ! BNX2X_UPSTREAM */ +static void enable_blocks_parity(struct bnx2x *bp) +{ + REG_WR(bp, PXP_REG_PXP_PRTY_MASK, 0x80000); /* bit 19 masked */ + REG_WR(bp, PXP2_REG_PXP2_PRTY_MASK_0, 0xfff40020);/* bit 5,18,20-31 */ + REG_WR(bp, PXP2_REG_PXP2_PRTY_MASK_1, 0x20); /* bit 5 */ + REG_WR(bp, QM_REG_QM_PRTY_MASK, 0x0); + REG_WR(bp, DORQ_REG_DORQ_PRTY_MASK, 0x0); + REG_WR(bp, GRCBASE_UPB + PB_REG_PB_PRTY_MASK, 0x0); + REG_WR(bp, GRCBASE_XPB + PB_REG_PB_PRTY_MASK, 0x0); + REG_WR(bp, SRC_REG_SRC_PRTY_MASK, 0x4); /* bit 2 */ + REG_WR(bp, CDU_REG_CDU_PRTY_MASK, 0x0); + REG_WR(bp, CFC_REG_CFC_PRTY_MASK, 0x0); + REG_WR(bp, HC_REG_HC_PRTY_MASK, 0x0); + REG_WR(bp, MISC_REG_MISC_PRTY_MASK, 0x0); + REG_WR(bp, DBG_REG_DBG_PRTY_MASK, 0x0); + REG_WR(bp, DMAE_REG_DMAE_PRTY_MASK, 0x0); + REG_WR(bp, BRB1_REG_BRB1_PRTY_MASK, 0x0); + REG_WR(bp, PRS_REG_PRS_PRTY_MASK, 0x0); + REG_WR(bp, TSDM_REG_TSDM_PRTY_MASK, 0x8); /* bit 3 */ + REG_WR(bp, CSDM_REG_CSDM_PRTY_MASK, 0x8); /* bit 3 */ + REG_WR(bp, USDM_REG_USDM_PRTY_MASK, 0x28); /* bit 3,5 */ + REG_WR(bp, XSDM_REG_XSDM_PRTY_MASK, 0x8); /* bit 3 */ + REG_WR(bp, TSEM_REG_TSEM_PRTY_MASK_0, 0x0); + REG_WR(bp, TSEM_REG_TSEM_PRTY_MASK_1, 0x0); + REG_WR(bp, USEM_REG_USEM_PRTY_MASK_0, 0x0); + REG_WR(bp, USEM_REG_USEM_PRTY_MASK_1, 0x0); + REG_WR(bp, CSEM_REG_CSEM_PRTY_MASK_0, 0x0); + REG_WR(bp, CSEM_REG_CSEM_PRTY_MASK_1, 0x0); + REG_WR(bp, XSEM_REG_XSEM_PRTY_MASK_0, 0x0); + REG_WR(bp, XSEM_REG_XSEM_PRTY_MASK_1, 0x0); +} +#endif + +static int bnx2x_init_common(struct bnx2x *bp) +{ + u32 val, i; +#ifdef BCM_CNIC + u32 wb_write[2]; +#endif + + DP(BNX2X_MSG_MCP, "starting common init func %d\n", BP_FUNC(bp)); + + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0xffffffff); + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, 0xfffc); + + bnx2x_init_block(bp, MISC_COMMON_START, MISC_COMMON_END); + if (CHIP_IS_E1H(bp)) + REG_WR(bp, MISC_REG_E1HMF_MODE, IS_E1HMF(bp)); + + REG_WR(bp, MISC_REG_LCPLL_CTRL_REG_2, 0x100); + msleep(30); + REG_WR(bp, MISC_REG_LCPLL_CTRL_REG_2, 0x0); + + bnx2x_init_block(bp, PXP_COMMON_START, PXP_COMMON_END); + if (CHIP_IS_E1(bp)) { + /* enable HW interrupt from PXP on USDM overflow + bit 16 on INT_MASK_0 */ + REG_WR(bp, PXP_REG_PXP_INT_MASK_0, 0); + } + + bnx2x_init_block(bp, PXP2_COMMON_START, PXP2_COMMON_END); + bnx2x_init_pxp(bp); + +#ifdef __BIG_ENDIAN + REG_WR(bp, PXP2_REG_RQ_QM_ENDIAN_M, 1); + REG_WR(bp, PXP2_REG_RQ_TM_ENDIAN_M, 1); + REG_WR(bp, PXP2_REG_RQ_SRC_ENDIAN_M, 1); + REG_WR(bp, PXP2_REG_RQ_CDU_ENDIAN_M, 1); + REG_WR(bp, PXP2_REG_RQ_DBG_ENDIAN_M, 1); + +/* REG_WR(bp, PXP2_REG_RD_PBF_SWAP_MODE, 1); */ + REG_WR(bp, PXP2_REG_RD_QM_SWAP_MODE, 1); + REG_WR(bp, PXP2_REG_RD_TM_SWAP_MODE, 1); + REG_WR(bp, PXP2_REG_RD_SRC_SWAP_MODE, 1); + REG_WR(bp, PXP2_REG_RD_CDURD_SWAP_MODE, 1); +#endif + + REG_WR(bp, PXP2_REG_RQ_CDU_P_SIZE, 2); +#ifdef BCM_CNIC + REG_WR(bp, PXP2_REG_RQ_TM_P_SIZE, 5); + REG_WR(bp, PXP2_REG_RQ_QM_P_SIZE, 5); + REG_WR(bp, PXP2_REG_RQ_SRC_P_SIZE, 5); +#endif + + if (CHIP_REV_IS_FPGA(bp) && CHIP_IS_E1H(bp)) + REG_WR(bp, PXP2_REG_PGL_TAGS_LIMIT, 0x1); + + /* let the HW do it's magic ... */ + msleep(100); + /* finish PXP init */ + val = REG_RD(bp, PXP2_REG_RQ_CFG_DONE); + if (val != 1) { + BNX2X_ERR("PXP2 CFG failed\n"); + return -EBUSY; + } + val = REG_RD(bp, PXP2_REG_RD_INIT_DONE); + if (val != 1) { + BNX2X_ERR("PXP2 RD_INIT failed\n"); + return -EBUSY; + } + + REG_WR(bp, PXP2_REG_RQ_DISABLE_INPUTS, 0); + REG_WR(bp, PXP2_REG_RD_DISABLE_INPUTS, 0); + + bnx2x_init_block(bp, DMAE_COMMON_START, DMAE_COMMON_END); + + /* clean the DMAE memory */ + bp->dmae_ready = 1; + bnx2x_init_fill(bp, TSEM_REG_PRAM, 0, 8); + + bnx2x_init_block(bp, TCM_COMMON_START, TCM_COMMON_END); + bnx2x_init_block(bp, UCM_COMMON_START, UCM_COMMON_END); + bnx2x_init_block(bp, CCM_COMMON_START, CCM_COMMON_END); + bnx2x_init_block(bp, XCM_COMMON_START, XCM_COMMON_END); + + bnx2x_read_dmae(bp, XSEM_REG_PASSIVE_BUFFER, 3); + bnx2x_read_dmae(bp, CSEM_REG_PASSIVE_BUFFER, 3); + bnx2x_read_dmae(bp, TSEM_REG_PASSIVE_BUFFER, 3); + bnx2x_read_dmae(bp, USEM_REG_PASSIVE_BUFFER, 3); + + bnx2x_init_block(bp, QM_COMMON_START, QM_COMMON_END); + switch (bp->multi_mode) { + case ETH_RSS_MODE_DISABLED: + case ETH_RSS_MODE_REGULAR: + break; + case ETH_RSS_MODE_VLAN_PRI: + case ETH_RSS_MODE_E1HOV_PRI: + case ETH_RSS_MODE_IP_DSCP: + REG_WR(bp, QM_REG_BYTECRDINITVAL, 0x5dc0); + break; + default: + break; + } +#ifdef BCM_CNIC + wb_write[0] = 0; + wb_write[1] = 0; + for (i = 0; i < 64; i++) { + REG_WR(bp, QM_REG_BASEADDR + i*4, 1024 * 4 * (i%32)); + bnx2x_init_ind_wr(bp, QM_REG_PTRTBL + i*8, wb_write, 2); + + if (CHIP_IS_E1H(bp)) + bnx2x_init_ind_wr(bp, QM_REG_PTRTBL_EXT_A + i*8, + wb_write, 2); + } +#endif + /* soft reset pulse */ + REG_WR(bp, QM_REG_SOFT_RESET, 1); + REG_WR(bp, QM_REG_SOFT_RESET, 0); + +#ifdef BCM_CNIC + bnx2x_init_block(bp, TIMERS_COMMON_START, TIMERS_COMMON_END); +#endif + + bnx2x_init_block(bp, DQ_COMMON_START, DQ_COMMON_END); + REG_WR(bp, DORQ_REG_DPM_CID_OFST, BCM_PAGE_SHIFT); + if (!CHIP_REV_IS_SLOW(bp)) { + /* enable hw interrupt from doorbell Q */ + REG_WR(bp, DORQ_REG_DORQ_INT_MASK, 0); + } + + bnx2x_init_block(bp, BRB1_COMMON_START, BRB1_COMMON_END); + bnx2x_init_block(bp, PRS_COMMON_START, PRS_COMMON_END); +#ifndef BCM_CNIC + /* set NIC mode */ + REG_WR(bp, PRS_REG_NIC_MODE, 1); +#endif + if (CHIP_IS_E1H(bp)) + REG_WR(bp, PRS_REG_E1HOV_MODE, IS_E1HMF(bp)); + + bnx2x_init_block(bp, TSDM_COMMON_START, TSDM_COMMON_END); + bnx2x_init_block(bp, CSDM_COMMON_START, CSDM_COMMON_END); + bnx2x_init_block(bp, USDM_COMMON_START, USDM_COMMON_END); + bnx2x_init_block(bp, XSDM_COMMON_START, XSDM_COMMON_END); + + if (CHIP_IS_E1H(bp)) { + bnx2x_init_fill(bp, TSTORM_INTMEM_ADDR, 0, + STORM_INTMEM_SIZE_E1H/2); + bnx2x_init_fill(bp, + TSTORM_INTMEM_ADDR + STORM_INTMEM_SIZE_E1H/2, + 0, STORM_INTMEM_SIZE_E1H/2); + bnx2x_init_fill(bp, CSTORM_INTMEM_ADDR, 0, + STORM_INTMEM_SIZE_E1H/2); + bnx2x_init_fill(bp, + CSTORM_INTMEM_ADDR + STORM_INTMEM_SIZE_E1H/2, + 0, STORM_INTMEM_SIZE_E1H/2); + bnx2x_init_fill(bp, XSTORM_INTMEM_ADDR, 0, + STORM_INTMEM_SIZE_E1H/2); + bnx2x_init_fill(bp, + XSTORM_INTMEM_ADDR + STORM_INTMEM_SIZE_E1H/2, + 0, STORM_INTMEM_SIZE_E1H/2); + bnx2x_init_fill(bp, USTORM_INTMEM_ADDR, 0, + STORM_INTMEM_SIZE_E1H/2); + bnx2x_init_fill(bp, + USTORM_INTMEM_ADDR + STORM_INTMEM_SIZE_E1H/2, + 0, STORM_INTMEM_SIZE_E1H/2); + } else { /* E1 */ + bnx2x_init_fill(bp, TSTORM_INTMEM_ADDR, 0, + STORM_INTMEM_SIZE_E1); + bnx2x_init_fill(bp, CSTORM_INTMEM_ADDR, 0, + STORM_INTMEM_SIZE_E1); + bnx2x_init_fill(bp, XSTORM_INTMEM_ADDR, 0, + STORM_INTMEM_SIZE_E1); + bnx2x_init_fill(bp, USTORM_INTMEM_ADDR, 0, + STORM_INTMEM_SIZE_E1); + } + + bnx2x_init_block(bp, TSEM_COMMON_START, TSEM_COMMON_END); + bnx2x_init_block(bp, USEM_COMMON_START, USEM_COMMON_END); + bnx2x_init_block(bp, CSEM_COMMON_START, CSEM_COMMON_END); + bnx2x_init_block(bp, XSEM_COMMON_START, XSEM_COMMON_END); + + /* sync semi rtc */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, + 0x80000000); + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, + 0x80000000); + + bnx2x_init_block(bp, UPB_COMMON_START, UPB_COMMON_END); + bnx2x_init_block(bp, XPB_COMMON_START, XPB_COMMON_END); + bnx2x_init_block(bp, PBF_COMMON_START, PBF_COMMON_END); + + REG_WR(bp, SRC_REG_SOFT_RST, 1); + for (i = SRC_REG_KEYRSS0_0; i <= SRC_REG_KEYRSS1_9; i += 4) { + REG_WR(bp, i, 0xc0cac01a); + /* TODO: replace with something meaningful */ + } + bnx2x_init_block(bp, SRCH_COMMON_START, SRCH_COMMON_END); +#ifdef BCM_CNIC + REG_WR(bp, SRC_REG_KEYSEARCH_0, 0x63285672); + REG_WR(bp, SRC_REG_KEYSEARCH_1, 0x24b8f2cc); + REG_WR(bp, SRC_REG_KEYSEARCH_2, 0x223aef9b); + REG_WR(bp, SRC_REG_KEYSEARCH_3, 0x26001e3a); + REG_WR(bp, SRC_REG_KEYSEARCH_4, 0x7ae91116); + REG_WR(bp, SRC_REG_KEYSEARCH_5, 0x5ce5230b); + REG_WR(bp, SRC_REG_KEYSEARCH_6, 0x298d8adf); + REG_WR(bp, SRC_REG_KEYSEARCH_7, 0x6eb0ff09); + REG_WR(bp, SRC_REG_KEYSEARCH_8, 0x1830f82f); + REG_WR(bp, SRC_REG_KEYSEARCH_9, 0x01e46be7); +#endif + REG_WR(bp, SRC_REG_SOFT_RST, 0); + + if (sizeof(union cdu_context) != 1024) + /* we currently assume that a context is 1024 bytes */ + printk(KERN_ALERT PFX "please adjust the size of" + " cdu_context(%ld)\n", (long)sizeof(union cdu_context)); + + bnx2x_init_block(bp, CDU_COMMON_START, CDU_COMMON_END); + val = (4 << 24) + (0 << 12) + 1024; + REG_WR(bp, CDU_REG_CDU_GLOBAL_PARAMS, val); + if (CHIP_IS_E1(bp)) { + /* !!! fix pxp client crdit until excel update */ + REG_WR(bp, CDU_REG_CDU_DEBUG, 0x264); + REG_WR(bp, CDU_REG_CDU_DEBUG, 0); + } + + bnx2x_init_block(bp, CFC_COMMON_START, CFC_COMMON_END); + REG_WR(bp, CFC_REG_INIT_REG, 0x7FF); + /* enable context validation interrupt from CFC */ + REG_WR(bp, CFC_REG_CFC_INT_MASK, 0); + + /* !!! workaround for CFC/CDU race until excel update */ + REG_WR(bp, CFC_REG_DEBUG0, 0x20020000); + REG_WR(bp, CFC_REG_INTERFACES, 0x280000); + REG_WR(bp, CFC_REG_INTERFACES, 0); + + bnx2x_init_block(bp, HC_COMMON_START, HC_COMMON_END); + bnx2x_init_block(bp, MISC_AEU_COMMON_START, MISC_AEU_COMMON_END); + + /* PXPCS COMMON comes here */ + /* Reset PCIE errors for debug */ + REG_WR(bp, 0x2814, 0xffffffff); + REG_WR(bp, 0x3820, 0xffffffff); + + /* EMAC0 COMMON comes here */ + /* EMAC1 COMMON comes here */ + /* DBU COMMON comes here */ + /* DBG COMMON comes here */ + + bnx2x_init_block(bp, NIG_COMMON_START, NIG_COMMON_END); + if (CHIP_IS_E1H(bp)) { + REG_WR(bp, NIG_REG_LLH_MF_MODE, IS_E1HMF(bp)); + REG_WR(bp, NIG_REG_LLH_E1HOV_MODE, IS_E1HMF(bp)); + } + + if (CHIP_REV_IS_SLOW(bp)) + msleep(200); + + /* finish CFC init */ + val = reg_poll(bp, CFC_REG_LL_INIT_DONE, 1, 100, 10); + if (val != 1) { + BNX2X_ERR("CFC LL_INIT failed\n"); + return -EBUSY; + } + val = reg_poll(bp, CFC_REG_AC_INIT_DONE, 1, 100, 10); + if (val != 1) { + BNX2X_ERR("CFC AC_INIT failed\n"); + return -EBUSY; + } + val = reg_poll(bp, CFC_REG_CAM_INIT_DONE, 1, 100, 10); + if (val != 1) { + BNX2X_ERR("CFC CAM_INIT failed\n"); + return -EBUSY; + } + REG_WR(bp, CFC_REG_DEBUG0, 0); + + /* read NIG statistic + to see if this is our first up since powerup */ + bnx2x_read_dmae(bp, NIG_REG_STAT2_BRB_OCTET, 2); + val = *bnx2x_sp(bp, wb_data[0]); + + /* do internal memory self test */ + if ((CHIP_IS_E1(bp)) && (val == 0) && bnx2x_int_mem_test(bp)) { + BNX2X_ERR("internal mem self test failed\n"); + return -EBUSY; + } + + switch (XGXS_EXT_PHY_TYPE(bp->link_params.ext_phy_config)) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + /* Fan failure is indicated by SPIO 5 */ + bnx2x_set_spio(bp, MISC_REGISTERS_SPIO_5, + MISC_REGISTERS_SPIO_INPUT_HI_Z); + + /* set to active low mode */ + val = REG_RD(bp, MISC_REG_SPIO_INT); + val |= ((1 << MISC_REGISTERS_SPIO_5) << + MISC_REGISTERS_SPIO_INT_OLD_SET_POS); + REG_WR(bp, MISC_REG_SPIO_INT, val); + + /* enable interrupt to signal the IGU */ + val = REG_RD(bp, MISC_REG_SPIO_EVENT_EN); + val |= (1 << MISC_REGISTERS_SPIO_5); + REG_WR(bp, MISC_REG_SPIO_EVENT_EN, val); + break; + + default: + break; + } + + /* clear PXP2 attentions */ + REG_RD(bp, PXP2_REG_PXP2_INT_STS_CLR_0); + + enable_blocks_attention(bp); +#ifdef BNX2X_EXTRA_DEBUG /* ! BNX2X_UPSTREAM */ + enable_blocks_parity(bp); +#endif + + if (!BP_NOMCP(bp)) { + bnx2x_acquire_phy_lock(bp); + bnx2x_common_init_phy(bp, bp->common.shmem_base); + bnx2x_release_phy_lock(bp); + } else + BNX2X_ERR("Bootcode is missing - can not initialize link\n"); + + return 0; +} + +static int bnx2x_init_port(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + u32 low, high; + u32 val; + + DP(BNX2X_MSG_MCP, "starting port init port %x\n", port); + + REG_WR(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, 0); + + /* Port PXP comes here */ + /* Port PXP2 comes here */ + /* Port CMs come here */ + +#ifdef BCM_CNIC + REG_WR(bp, QM_REG_CONNNUM_0 + port*4, 1024/16 - 1); + + bnx2x_init_block(bp, port ? TIMERS_PORT1_START : TIMERS_PORT0_START, + port ? TIMERS_PORT1_END : TIMERS_PORT0_END); + REG_WR(bp, TM_REG_LIN0_SCAN_TIME + port*4, 20); + REG_WR(bp, TM_REG_LIN0_MAX_ACTIVE_CID + port*4, 31); +#endif + + /* Port DQ comes here */ + + if (CHIP_REV_IS_SLOW(bp) && !CHIP_IS_E1H(bp)) { + /* no pause for emulation and FPGA */ + low = 0; + high = 513; + } else { + if (IS_E1HMF(bp)) + low = (bp->flags & ONE_PORT_FLAG) ? 160 : 246; + else if (bp->dev->mtu > 4096) { + if (bp->flags & ONE_PORT_FLAG) + low = 160; + else { + val = bp->dev->mtu; + /* (24*1024 + val*4)/256 */ + low = 96 + (val/64) + ((val % 64) ? 1 : 0); + } + } else + low = (bp->flags & ONE_PORT_FLAG) ? 80 : 160; + high = low + 56; /* 14*1024/256 */ + } + REG_WR(bp, BRB1_REG_PAUSE_LOW_THRESHOLD_0 + port*4, low); + REG_WR(bp, BRB1_REG_PAUSE_HIGH_THRESHOLD_0 + port*4, high); + + /* Port PRS comes here */ + /* Port TSDM comes here */ + /* Port CSDM comes here */ + /* Port USDM comes here */ + /* Port XSDM comes here */ + + bnx2x_init_block(bp, port ? TSEM_PORT1_START : TSEM_PORT0_START, + port ? TSEM_PORT1_END : TSEM_PORT0_END); + bnx2x_init_block(bp, port ? USEM_PORT1_START : USEM_PORT0_START, + port ? USEM_PORT1_END : USEM_PORT0_END); + bnx2x_init_block(bp, port ? CSEM_PORT1_START : CSEM_PORT0_START, + port ? CSEM_PORT1_END : CSEM_PORT0_END); + bnx2x_init_block(bp, port ? XSEM_PORT1_START : XSEM_PORT0_START, + port ? XSEM_PORT1_END : XSEM_PORT0_END); + + /* Port UPB comes here */ + /* Port XPB comes here */ + + bnx2x_init_block(bp, port ? PBF_PORT1_START : PBF_PORT0_START, + port ? PBF_PORT1_END : PBF_PORT0_END); + + /* configure PBF to work without PAUSE mtu 9000 */ + REG_WR(bp, PBF_REG_P0_PAUSE_ENABLE + port*4, 0); + + /* update threshold */ + REG_WR(bp, PBF_REG_P0_ARB_THRSH + port*4, (9040/16)); + /* update init credit */ + REG_WR(bp, PBF_REG_P0_INIT_CRD + port*4, (9040/16) + 553 - 22); + + /* probe changes */ + REG_WR(bp, PBF_REG_INIT_P0 + port*4, 1); + msleep(5); + REG_WR(bp, PBF_REG_INIT_P0 + port*4, 0); + +#ifdef BCM_CNIC + /* Port SRCH comes here */ +#endif + /* Port CDU comes here */ + /* Port CFC comes here */ + + if (CHIP_IS_E1(bp)) { + REG_WR(bp, HC_REG_LEADING_EDGE_0 + port*8, 0); + REG_WR(bp, HC_REG_TRAILING_EDGE_0 + port*8, 0); + } + bnx2x_init_block(bp, port ? HC_PORT1_START : HC_PORT0_START, + port ? HC_PORT1_END : HC_PORT0_END); + + bnx2x_init_block(bp, port ? MISC_AEU_PORT1_START : + MISC_AEU_PORT0_START, + port ? MISC_AEU_PORT1_END : MISC_AEU_PORT0_END); + /* init aeu_mask_attn_func_0/1: + * - SF mode: bits 3-7 are masked. only bits 0-2 are in use + * - MF mode: bit 3 is masked. bits 0-2 are in use as in SF + * bits 4-7 are used for "per vn group attention" */ + REG_WR(bp, MISC_REG_AEU_MASK_ATTN_FUNC_0 + port*4, + (IS_E1HMF(bp) ? 0xF7 : 0x7)); + + /* Port PXPCS comes here */ + /* Port EMAC0 comes here */ + /* Port EMAC1 comes here */ + /* Port DBU comes here */ + /* Port DBG comes here */ + + bnx2x_init_block(bp, port ? NIG_PORT1_START : NIG_PORT0_START, + port ? NIG_PORT1_END : NIG_PORT0_END); + + REG_WR(bp, NIG_REG_XGXS_SERDES0_MODE_SEL + port*4, 1); + + if (CHIP_IS_E1H(bp)) + /* 0x2 disable e1hov, 0x1 enable */ + REG_WR(bp, NIG_REG_LLH0_BRB1_DRV_MASK_MF + port*4, + (IS_E1HMF(bp) ? 0x1 : 0x2)); + + /* Port MCP comes here */ + /* Port DMAE comes here */ + + switch (XGXS_EXT_PHY_TYPE(bp->link_params.ext_phy_config)) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + /* add SPIO 5 to group 0 */ + val = REG_RD(bp, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); + val |= AEU_INPUTS_ATTN_BITS_SPIO5; + REG_WR(bp, MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0, val); + break; + + default: + break; + } + + bnx2x__link_reset(bp); + + return 0; +} + +#define ILT_PER_FUNC (768/2) +#define FUNC_ILT_BASE(func) (func * ILT_PER_FUNC) +/* the phys address is shifted right 12 bits and has an added + 1=valid bit added to the 53rd bit + then since this is a wide register(TM) + we split it into two 32 bit writes + */ +#define ONCHIP_ADDR1(x) ((u32)(((u64)x >> 12) & 0xFFFFFFFF)) +#define ONCHIP_ADDR2(x) ((u32)((1 << 20) | ((u64)x >> 44))) +#define PXP_ONE_ILT(x) (((x) << 10) | x) +#define PXP_ILT_RANGE(f, l) (((l) << 10) | f) + +#ifdef BCM_CNIC +#define CNIC_ILT_LINES 127 +#define CNIC_CTX_PER_ILT 16 +#else +#define CNIC_ILT_LINES 0 +#endif + +static void bnx2x_ilt_wr(struct bnx2x *bp, u32 index, dma_addr_t addr) +{ + int reg; + + if (CHIP_IS_E1H(bp)) + reg = PXP2_REG_RQ_ONCHIP_AT_B0 + index*8; + else /* E1 */ + reg = PXP2_REG_RQ_ONCHIP_AT + index*8; + + bnx2x_wb_wr(bp, reg, ONCHIP_ADDR1(addr), ONCHIP_ADDR2(addr)); +} + +static int bnx2x_init_func(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + int func = BP_FUNC(bp); + int i; + + DP(BNX2X_MSG_MCP, "starting func init func %x\n", func); + + i = FUNC_ILT_BASE(func); + + bnx2x_ilt_wr(bp, i, bnx2x_sp_mapping(bp, context)); + if (CHIP_IS_E1H(bp)) { + REG_WR(bp, PXP2_REG_RQ_CDU_FIRST_ILT, i); + REG_WR(bp, PXP2_REG_RQ_CDU_LAST_ILT, i + CNIC_ILT_LINES); + } else /* E1 */ + REG_WR(bp, PXP2_REG_PSWRQ_CDU0_L2P + func*4, + PXP_ILT_RANGE(i, i + CNIC_ILT_LINES)); + +#ifdef BCM_CNIC + i += 1 + CNIC_ILT_LINES; + bnx2x_ilt_wr(bp, i, bp->timers_mapping); + if (CHIP_IS_E1H(bp)) { + REG_WR(bp, PXP2_REG_RQ_TM_FIRST_ILT, i); + REG_WR(bp, PXP2_REG_RQ_TM_LAST_ILT, i); + } else /* E1 */ + REG_WR(bp, PXP2_REG_PSWRQ_TM0_L2P + func*4, PXP_ONE_ILT(i)); + + i++; + bnx2x_ilt_wr(bp, i, bp->qm_mapping); + if (CHIP_IS_E1H(bp)) { + REG_WR(bp, PXP2_REG_RQ_QM_FIRST_ILT, i); + REG_WR(bp, PXP2_REG_RQ_QM_LAST_ILT, i); + } else /* E1 */ + REG_WR(bp, PXP2_REG_PSWRQ_QM0_L2P + func*4, PXP_ONE_ILT(i)); + + i++; + bnx2x_ilt_wr(bp, i, bp->t1_mapping); + if (CHIP_IS_E1H(bp)) { + REG_WR(bp, PXP2_REG_RQ_SRC_FIRST_ILT, i); + REG_WR(bp, PXP2_REG_RQ_SRC_LAST_ILT, i); + } else /* E1 */ + REG_WR(bp, PXP2_REG_PSWRQ_SRC0_L2P + func*4, PXP_ONE_ILT(i)); + + /* tell the searcher where the T2 table is */ + REG_WR(bp, SRC_REG_COUNTFREE0 + func*4, 16*1024/64); + + bnx2x_wb_wr(bp, SRC_REG_FIRSTFREE0 + func*16, + U64_LO(bp->t2_mapping), U64_HI(bp->t2_mapping)); + + bnx2x_wb_wr(bp, SRC_REG_LASTFREE0 + func*16, + U64_LO((u64)bp->t2_mapping + 16*1024 - 64), + U64_HI((u64)bp->t2_mapping + 16*1024 - 64)); + + REG_WR(bp, SRC_REG_NUMBER_HASH_BITS0 + func*4, 10); +#endif + + if (CHIP_IS_E1H(bp)) { + for (i = 0; i < 9; i++) + bnx2x_init_block(bp, + cm_start[func][i], cm_end[func][i]); + + REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port*8, 1); + REG_WR(bp, NIG_REG_LLH0_FUNC_VLAN_ID + port*8, bp->e1hov); + } + + /* HC init per function */ + if (CHIP_IS_E1H(bp)) { + REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_12 + func*4, 0); + + REG_WR(bp, HC_REG_LEADING_EDGE_0 + port*8, 0); + REG_WR(bp, HC_REG_TRAILING_EDGE_0 + port*8, 0); + } + bnx2x_init_block(bp, hc_limits[func][0], hc_limits[func][1]); + + if (CHIP_IS_E1H(bp)) + REG_WR(bp, HC_REG_FUNC_NUM_P0 + port*4, func); + + /* Reset PCIE errors for debug */ + REG_WR(bp, 0x2114, 0xffffffff); + REG_WR(bp, 0x2120, 0xffffffff); + + return 0; +} + +static int bnx2x_init_hw(struct bnx2x *bp, u32 load_code) +{ + int i, rc = 0; + + DP(BNX2X_MSG_MCP, "function %d load_code %x\n", + BP_FUNC(bp), load_code); + + bp->dmae_ready = 0; + mutex_init(&bp->dmae_mutex); + bnx2x_gunzip_init(bp); + + switch (load_code) { + case FW_MSG_CODE_DRV_LOAD_COMMON: + rc = bnx2x_init_common(bp); + if (rc) + goto init_hw_err; + /* no break */ + + case FW_MSG_CODE_DRV_LOAD_PORT: + bp->dmae_ready = 1; + rc = bnx2x_init_port(bp); + if (rc) + goto init_hw_err; + /* no break */ + + case FW_MSG_CODE_DRV_LOAD_FUNCTION: + bp->dmae_ready = 1; + rc = bnx2x_init_func(bp); + if (rc) + goto init_hw_err; + break; + + default: + BNX2X_ERR("Unknown load_code (0x%x) from MCP\n", load_code); + break; + } + + if (!BP_NOMCP(bp)) { + int func = BP_FUNC(bp); + + bp->fw_drv_pulse_wr_seq = + (SHMEM_RD(bp, func_mb[func].drv_pulse_mb) & + DRV_PULSE_SEQ_MASK); + bp->func_stx = SHMEM_RD(bp, func_mb[func].fw_mb_param); + DP(BNX2X_MSG_MCP, "drv_pulse 0x%x func_stx 0x%x\n", + bp->fw_drv_pulse_wr_seq, bp->func_stx); + } else + bp->func_stx = 0; + + /* this needs to be done before gunzip end */ + bnx2x_zero_def_sb(bp); + for_each_queue(bp, i) + bnx2x_zero_sb(bp, BP_L_ID(bp) + i); +#ifdef BCM_CNIC + bnx2x_zero_sb(bp, BP_L_ID(bp) + i); +#endif + +init_hw_err: + bnx2x_gunzip_end(bp); + + return rc; +} + +/* send the MCP a request, block until there is a reply */ +static u32 bnx2x_fw_command(struct bnx2x *bp, u32 command) +{ + int func = BP_FUNC(bp); + u32 seq = ++bp->fw_seq; + u32 rc = 0; + u32 cnt = 1; + u8 delay = CHIP_REV_IS_SLOW(bp) ? 100 : 10; + + SHMEM_WR(bp, func_mb[func].drv_mb_header, (command | seq)); + DP(BNX2X_MSG_MCP, "wrote command (%x) to FW MB\n", (command | seq)); + + do { + /* let the FW do it's magic ... */ + msleep(delay); + + rc = SHMEM_RD(bp, func_mb[func].fw_mb_header); + + /* Give the FW up to 2 second (200*10ms) */ + } while ((seq != (rc & FW_MSG_SEQ_NUMBER_MASK)) && (cnt++ < 200)); + + DP(BNX2X_MSG_MCP, "[after %d ms] read (%x) seq is (%x) from FW MB\n", + cnt*delay, rc, seq); + + /* is this a reply to our command? */ + if (seq == (rc & FW_MSG_SEQ_NUMBER_MASK)) { + rc &= FW_MSG_CODE_MASK; + + } else { + /* FW BUG! */ + BNX2X_ERR("FW failed to respond!\n"); + bnx2x_fw_dump(bp); + rc = 0; + } + + return rc; +} + +static void bnx2x_free_mem(struct bnx2x *bp) +{ + +#define BNX2X_PCI_FREE(x, y, size) \ + do { \ + if (x) { \ + pci_free_consistent(bp->pdev, size, x, y); \ + x = NULL; \ + y = 0; \ + } \ + } while (0) + +#define BNX2X_FREE(x) \ + do { \ + if (x) { \ + vfree(x); \ + x = NULL; \ + } \ + } while (0) + + int i; + + /* fastpath */ + for_each_queue(bp, i) { + + /* Status blocks */ + BNX2X_PCI_FREE(bnx2x_fp(bp, i, status_blk), + bnx2x_fp(bp, i, status_blk_mapping), + sizeof(struct host_status_block) + + sizeof(struct eth_tx_db_data)); + + /* fast path rings: tx_buf tx_desc rx_buf rx_desc rx_comp */ + BNX2X_FREE(bnx2x_fp(bp, i, tx_buf_ring)); + BNX2X_PCI_FREE(bnx2x_fp(bp, i, tx_desc_ring), + bnx2x_fp(bp, i, tx_desc_mapping), + sizeof(struct eth_tx_bd) * NUM_TX_BD); + + BNX2X_FREE(bnx2x_fp(bp, i, rx_buf_ring)); + BNX2X_PCI_FREE(bnx2x_fp(bp, i, rx_desc_ring), + bnx2x_fp(bp, i, rx_desc_mapping), + sizeof(struct eth_rx_bd) * NUM_RX_BD); + + BNX2X_PCI_FREE(bnx2x_fp(bp, i, rx_comp_ring), + bnx2x_fp(bp, i, rx_comp_mapping), + sizeof(struct eth_fast_path_rx_cqe) * + NUM_RCQ_BD); + + /* SGE ring */ + BNX2X_FREE(bnx2x_fp(bp, i, rx_page_ring)); + BNX2X_PCI_FREE(bnx2x_fp(bp, i, rx_sge_ring), + bnx2x_fp(bp, i, rx_sge_mapping), + BCM_PAGE_SIZE * NUM_RX_SGE_PAGES); + } + /* end of fastpath */ + + BNX2X_PCI_FREE(bp->def_status_blk, bp->def_status_blk_mapping, + sizeof(struct host_def_status_block)); + + BNX2X_PCI_FREE(bp->slowpath, bp->slowpath_mapping, + sizeof(struct bnx2x_slowpath)); + +#ifdef BCM_CNIC + BNX2X_PCI_FREE(bp->t1, bp->t1_mapping, 64*1024); + BNX2X_PCI_FREE(bp->t2, bp->t2_mapping, 16*1024); + BNX2X_PCI_FREE(bp->timers, bp->timers_mapping, 8*1024); + BNX2X_PCI_FREE(bp->qm, bp->qm_mapping, 128*1024); + BNX2X_PCI_FREE(bp->cnic_sb, bp->cnic_sb_mapping, + sizeof(struct host_status_block)); +#endif + BNX2X_PCI_FREE(bp->spq, bp->spq_mapping, BCM_PAGE_SIZE); + +#undef BNX2X_PCI_FREE +#undef BNX2X_KFREE +} + +static int bnx2x_alloc_mem(struct bnx2x *bp) +{ + +#define BNX2X_PCI_ALLOC(x, y, size) \ + do { \ + x = pci_alloc_consistent(bp->pdev, size, y); \ + if (x == NULL) \ + goto alloc_mem_err; \ + memset(x, 0, size); \ + } while (0) + +#define BNX2X_ALLOC(x, size) \ + do { \ + x = vmalloc(size); \ + if (x == NULL) \ + goto alloc_mem_err; \ + memset(x, 0, size); \ + } while (0) + + int i; + + /* fastpath */ + for_each_queue(bp, i) { + bnx2x_fp(bp, i, bp) = bp; + + /* Status blocks */ + BNX2X_PCI_ALLOC(bnx2x_fp(bp, i, status_blk), + &bnx2x_fp(bp, i, status_blk_mapping), + sizeof(struct host_status_block) + + sizeof(struct eth_tx_db_data)); + + bnx2x_fp(bp, i, hw_tx_prods) = + (void *)(bnx2x_fp(bp, i, status_blk) + 1); + + bnx2x_fp(bp, i, tx_prods_mapping) = + bnx2x_fp(bp, i, status_blk_mapping) + + sizeof(struct host_status_block); + + /* fast path rings: tx_buf tx_desc rx_buf rx_desc rx_comp */ + BNX2X_ALLOC(bnx2x_fp(bp, i, tx_buf_ring), + sizeof(struct sw_tx_bd) * NUM_TX_BD); + BNX2X_PCI_ALLOC(bnx2x_fp(bp, i, tx_desc_ring), + &bnx2x_fp(bp, i, tx_desc_mapping), + sizeof(struct eth_tx_bd) * NUM_TX_BD); + + BNX2X_ALLOC(bnx2x_fp(bp, i, rx_buf_ring), + sizeof(struct sw_rx_bd) * NUM_RX_BD); + BNX2X_PCI_ALLOC(bnx2x_fp(bp, i, rx_desc_ring), + &bnx2x_fp(bp, i, rx_desc_mapping), + sizeof(struct eth_rx_bd) * NUM_RX_BD); + + BNX2X_PCI_ALLOC(bnx2x_fp(bp, i, rx_comp_ring), + &bnx2x_fp(bp, i, rx_comp_mapping), + sizeof(struct eth_fast_path_rx_cqe) * + NUM_RCQ_BD); + + /* SGE ring */ + BNX2X_ALLOC(bnx2x_fp(bp, i, rx_page_ring), + sizeof(struct sw_rx_page) * NUM_RX_SGE); + BNX2X_PCI_ALLOC(bnx2x_fp(bp, i, rx_sge_ring), + &bnx2x_fp(bp, i, rx_sge_mapping), + BCM_PAGE_SIZE * NUM_RX_SGE_PAGES); + } + /* end of fastpath */ + + BNX2X_PCI_ALLOC(bp->def_status_blk, &bp->def_status_blk_mapping, + sizeof(struct host_def_status_block)); + + BNX2X_PCI_ALLOC(bp->slowpath, &bp->slowpath_mapping, + sizeof(struct bnx2x_slowpath)); + +#ifdef BCM_CNIC + BNX2X_PCI_ALLOC(bp->t1, &bp->t1_mapping, 64*1024); + + /* Initialize T1 */ + memset(bp->t1, 0, 64*1024); + + /* allocate searcher T2 table + we allocate 1/4 of alloc num for T2 + (which is not entered into the ILT) */ + BNX2X_PCI_ALLOC(bp->t2, &bp->t2_mapping, 16*1024); + + /* Initialize T2 (for 1024 connections) */ + memset(bp->t2, 0, 16*1024); + for (i = 0; i < 16*1024; i += 64) + *(u64 *)((char *)bp->t2 + i + 56) = bp->t2_mapping + i + 64; + + /* Timer block array (8*MAX_CONN) phys uncached for now 1024 conns */ + BNX2X_PCI_ALLOC(bp->timers, &bp->timers_mapping, 8*1024); + + /* QM queues (128*MAX_CONN) */ + BNX2X_PCI_ALLOC(bp->qm, &bp->qm_mapping, 128*1024); + + BNX2X_PCI_ALLOC(bp->cnic_sb, &bp->cnic_sb_mapping, + sizeof(struct host_status_block)); +#endif + + /* Slow path ring */ + BNX2X_PCI_ALLOC(bp->spq, &bp->spq_mapping, BCM_PAGE_SIZE); + + return 0; + +alloc_mem_err: + bnx2x_free_mem(bp); + return -ENOMEM; + +#undef BNX2X_PCI_ALLOC +#undef BNX2X_ALLOC +} + +static void bnx2x_free_tx_skbs(struct bnx2x *bp) +{ + int i; + + for_each_queue(bp, i) { + struct bnx2x_fastpath *fp = &bp->fp[i]; + + u16 bd_cons = fp->tx_bd_cons; + u16 sw_prod = fp->tx_pkt_prod; + u16 sw_cons = fp->tx_pkt_cons; + + while (sw_cons != sw_prod) { + bd_cons = bnx2x_free_tx_pkt(bp, fp, TX_BD(sw_cons)); + sw_cons++; + } + } +} + +static void bnx2x_free_rx_skbs(struct bnx2x *bp) +{ + int i, j; + + for_each_queue(bp, j) { + struct bnx2x_fastpath *fp = &bp->fp[j]; + + for (i = 0; i < NUM_RX_BD; i++) { + struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[i]; + struct sk_buff *skb = rx_buf->skb; + + if (skb == NULL) + continue; + + pci_unmap_single(bp->pdev, + pci_unmap_addr(rx_buf, mapping), + bp->rx_buf_size, PCI_DMA_FROMDEVICE); + + rx_buf->skb = NULL; + dev_kfree_skb(skb); + } + if (!fp->disable_tpa) + bnx2x_free_tpa_pool(bp, fp, CHIP_IS_E1(bp) ? + ETH_MAX_AGGREGATION_QUEUES_E1 : + ETH_MAX_AGGREGATION_QUEUES_E1H); + } +} + +static void bnx2x_free_skbs(struct bnx2x *bp) +{ + bnx2x_free_tx_skbs(bp); + bnx2x_free_rx_skbs(bp); +} + +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ +static void bnx2x_free_msix_irqs(struct bnx2x *bp) +{ + int i, offset = 1; + + free_irq(bp->msix_table[0].vector, bp->dev); + DP(NETIF_MSG_IFDOWN, "released sp irq (%d)\n", + bp->msix_table[0].vector); + +#ifdef BCM_CNIC + offset++; +#endif + for_each_queue(bp, i) { + DP(NETIF_MSG_IFDOWN, "about to release fp #%d->%d irq " + "state %x\n", i, bp->msix_table[i + offset].vector, + bnx2x_fp(bp, i, state)); + + free_irq(bp->msix_table[i + offset].vector, &bp->fp[i]); + } +} +#endif + +static void bnx2x_free_irq(struct bnx2x *bp) +{ +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ + if (bp->flags & USING_MSIX_FLAG) { + bnx2x_free_msix_irqs(bp); + pci_disable_msix(bp->pdev); + bp->flags &= ~USING_MSIX_FLAG; + + } else if (bp->flags & USING_MSI_FLAG) { + free_irq(bp->pdev->irq, bp->dev); + pci_disable_msi(bp->pdev); + bp->flags &= ~USING_MSIX_FLAG; + + } else +#endif + free_irq(bp->pdev->irq, bp->dev); +} + +static int bnx2x_enable_msix(struct bnx2x *bp) +{ +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ + int i, rc, offset = 1; + + bp->msix_table[0].entry = 0; + DP(NETIF_MSG_IFUP, "msix_table[0].entry = 0 (slowpath)\n"); + +#ifdef BCM_CNIC + bp->msix_table[1].entry = 1; + DP(NETIF_MSG_IFUP, "msix_table[1].entry = 1 (CNIC)\n"); + offset++; +#endif + for_each_queue(bp, i) { + int igu_vec = offset + i + BP_L_ID(bp); + + bp->msix_table[i + offset].entry = igu_vec; + DP(NETIF_MSG_IFUP, "msix_table[%d].entry = %d " + "(fastpath #%u)\n", i + offset, igu_vec, i); + } + + rc = pci_enable_msix(bp->pdev, &bp->msix_table[0], + bp->num_queues + offset); + if (rc) { + DP(NETIF_MSG_IFUP, "MSI-X is not attainable\n"); + return -1; + } + bp->flags |= USING_MSIX_FLAG; + + return 0; +#else + return -1; +#endif +} + +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ +static int bnx2x_req_msix_irqs(struct bnx2x *bp) +{ + int i, rc, offset = 1; + + rc = request_irq(bp->msix_table[0].vector, bnx2x_msix_sp_int, 0, + bp->dev->name, bp->dev); + if (rc) { + BNX2X_ERR("request sp irq failed\n"); + return -EBUSY; + } + +#ifdef BCM_CNIC + /* leave FP 1 for CNIC */ + offset++; +#endif + for_each_queue(bp, i) { + rc = request_irq(bp->msix_table[i + offset].vector, + bnx2x_msix_fp_int, 0, + bp->dev->name, &bp->fp[i]); + if (rc) { + BNX2X_ERR("request fp #%d irq failed rc -%d\n", + i, -rc); + bnx2x_free_msix_irqs(bp); + return -EBUSY; + } + + bnx2x_fp(bp, i, state) = BNX2X_FP_STATE_IRQ; + } + + return 0; +} + +static int bnx2x_enable_msi(struct bnx2x *bp) +{ + int rc; + + rc = pci_enable_msi(bp->pdev); + if (rc) { + DP(NETIF_MSG_IFUP, "MSI is not attainable\n"); + return -1; + } + bp->flags |= USING_MSI_FLAG; + + return 0; +} +#endif + +static int bnx2x_req_irq(struct bnx2x *bp) +{ + unsigned long flags; + int rc; + + if (bp->flags & USING_MSI_FLAG) + flags = 0; + else + flags = IRQF_SHARED; + + rc = request_irq(bp->pdev->irq, bnx2x_interrupt, flags, + bp->dev->name, bp->dev); + if (!rc) + bnx2x_fp(bp, 0, state) = BNX2X_FP_STATE_IRQ; + + return rc; +} + +static void bnx2x_napi_enable(struct bnx2x *bp) +{ +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ + int i; + + for_each_queue(bp, i) + napi_enable(&bnx2x_fp(bp, i, napi)); +#else + netif_poll_enable(bp->dev); +#endif +} + +static void bnx2x_napi_disable(struct bnx2x *bp) +{ +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ + int i; + + for_each_queue(bp, i) + napi_disable(&bnx2x_fp(bp, i, napi)); +#else + netif_poll_disable(bp->dev); +#endif +} + +static void bnx2x_netif_start(struct bnx2x *bp) +{ + if (atomic_dec_and_test(&bp->intr_sem)) { + if (netif_running(bp->dev)) { + bnx2x_napi_enable(bp); + bnx2x_int_enable(bp); + if (bp->state == BNX2X_STATE_OPEN) + netif_wake_queue(bp->dev); + } + } +} + +static void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw) +{ + bnx2x_int_disable_sync(bp, disable_hw); +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ + bnx2x_napi_disable(bp); +#endif + if (netif_running(bp->dev)) { +#ifndef BNX2X_NEW_NAPI /* ! BNX2X_UPSTREAM */ + bnx2x_napi_disable(bp); +#endif + netif_tx_disable(bp->dev); + bp->dev->trans_start = jiffies; /* prevent tx timeout */ + } +} + +/* + * Init service functions + */ + +static void bnx2x_set_mac_addr_e1(struct bnx2x *bp, int set) +{ + struct mac_configuration_cmd *config = bnx2x_sp(bp, mac_config); + int port = BP_PORT(bp); + + /* CAM allocation + * unicasts 0-31:port0 32-63:port1 + * multicast 64-127:port0 128-191:port1 + */ + config->hdr.length = 2; + config->hdr.offset = port ? 31 : 0; + config->hdr.client_id = BP_CL_ID(bp); + config->hdr.reserved1 = 0; + + /* primary MAC */ + config->config_table[0].cam_entry.msb_mac_addr = + swab16(*(u16 *)&bp->dev->dev_addr[0]); + config->config_table[0].cam_entry.middle_mac_addr = + swab16(*(u16 *)&bp->dev->dev_addr[2]); + config->config_table[0].cam_entry.lsb_mac_addr = + swab16(*(u16 *)&bp->dev->dev_addr[4]); + config->config_table[0].cam_entry.flags = cpu_to_le16(port); + if (set) + config->config_table[0].target_table_entry.flags = 0; + else + CAM_INVALIDATE(config->config_table[0]); + config->config_table[0].target_table_entry.client_id = 0; + config->config_table[0].target_table_entry.vlan_id = 0; + + DP(NETIF_MSG_IFUP, "%s MAC (%04x:%04x:%04x)\n", + (set ? "setting" : "clearing"), + config->config_table[0].cam_entry.msb_mac_addr, + config->config_table[0].cam_entry.middle_mac_addr, + config->config_table[0].cam_entry.lsb_mac_addr); + + /* broadcast */ + config->config_table[1].cam_entry.msb_mac_addr = 0xffff; + config->config_table[1].cam_entry.middle_mac_addr = 0xffff; + config->config_table[1].cam_entry.lsb_mac_addr = 0xffff; + config->config_table[1].cam_entry.flags = cpu_to_le16(port); + if (set) + config->config_table[1].target_table_entry.flags = + TSTORM_CAM_TARGET_TABLE_ENTRY_BROADCAST; + else + CAM_INVALIDATE(config->config_table[1]); + config->config_table[1].target_table_entry.client_id = 0; + config->config_table[1].target_table_entry.vlan_id = 0; + + bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_SET_MAC, 0, + U64_HI(bnx2x_sp_mapping(bp, mac_config)), + U64_LO(bnx2x_sp_mapping(bp, mac_config)), 0); +} + +static void bnx2x_set_mac_addr_e1h(struct bnx2x *bp, int set) +{ + struct mac_configuration_cmd_e1h *config = + (struct mac_configuration_cmd_e1h *)bnx2x_sp(bp, mac_config); + + if (set && (bp->state != BNX2X_STATE_OPEN)) { + DP(NETIF_MSG_IFUP, "state is %x, returning\n", bp->state); + return; + } + + /* CAM allocation for E1H + * unicasts: by func number + * multicast: 20+FUNC*20, 20 each + */ + config->hdr.length = 1; + config->hdr.offset = BP_FUNC(bp); + config->hdr.client_id = BP_CL_ID(bp); + config->hdr.reserved1 = 0; + + /* primary MAC */ + config->config_table[0].msb_mac_addr = + swab16(*(u16 *)&bp->dev->dev_addr[0]); + config->config_table[0].middle_mac_addr = + swab16(*(u16 *)&bp->dev->dev_addr[2]); + config->config_table[0].lsb_mac_addr = + swab16(*(u16 *)&bp->dev->dev_addr[4]); + config->config_table[0].client_id = BP_L_ID(bp); + config->config_table[0].vlan_id = 0; + config->config_table[0].e1hov_id = cpu_to_le16(bp->e1hov); + if (set) + config->config_table[0].flags = BP_PORT(bp); + else + config->config_table[0].flags = + MAC_CONFIGURATION_ENTRY_E1H_ACTION_TYPE; + + DP(NETIF_MSG_IFUP, "%s MAC (%04x:%04x:%04x) E1HOV %d CLID %d\n", + (set ? "setting" : "clearing"), + config->config_table[0].msb_mac_addr, + config->config_table[0].middle_mac_addr, + config->config_table[0].lsb_mac_addr, bp->e1hov, BP_L_ID(bp)); + + bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_SET_MAC, 0, + U64_HI(bnx2x_sp_mapping(bp, mac_config)), + U64_LO(bnx2x_sp_mapping(bp, mac_config)), 0); +} + +static int bnx2x_wait_ramrod(struct bnx2x *bp, int state, int idx, + int *state_p, int poll) +{ + /* can take a while if any port is running */ + int cnt = 500; + + DP(NETIF_MSG_IFUP, "%s for state to become %x on IDX [%d]\n", + poll ? "polling" : "waiting", state, idx); + + might_sleep(); + while (cnt--) { + if (poll) { + bnx2x_rx_int(bp->fp, 10); + /* if index is different from 0 + * the reply for some commands will + * be on the non default queue + */ + if (idx) + bnx2x_rx_int(&bp->fp[idx], 10); + } + + mb(); /* state is changed by bnx2x_sp_event() */ + if (*state_p == state) + return 0; + + msleep(1); + } + + /* timeout! */ + BNX2X_ERR("timeout %s for state %x on IDX [%d]\n", + poll ? "polling" : "waiting", state, idx); +#ifdef BNX2X_STOP_ON_ERROR + bnx2x_panic(); +#endif + + return -EBUSY; +} + +static int bnx2x_setup_leading(struct bnx2x *bp) +{ + int rc; + + /* reset IGU state */ + bnx2x_ack_sb(bp, bp->fp[0].sb_id, CSTORM_ID, 0, IGU_INT_ENABLE, 0); + + /* SETUP ramrod */ + bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_PORT_SETUP, 0, 0, 0, 0); + + /* Wait for completion */ + rc = bnx2x_wait_ramrod(bp, BNX2X_STATE_OPEN, 0, &(bp->state), 0); + + return rc; +} + +static int bnx2x_setup_multi(struct bnx2x *bp, int index) +{ + /* reset IGU state */ + bnx2x_ack_sb(bp, bp->fp[index].sb_id, CSTORM_ID, 0, IGU_INT_ENABLE, 0); + + /* SETUP ramrod */ + bp->fp[index].state = BNX2X_FP_STATE_OPENING; + bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_CLIENT_SETUP, index, 0, index, 0); + + /* Wait for completion */ + return bnx2x_wait_ramrod(bp, BNX2X_FP_STATE_OPEN, index, + &(bp->fp[index].state), 0); +} + +#ifdef BCM_CNIC +static int bnx2x_cnic_notify(struct bnx2x *bp, int cmd); +static void bnx2x_setup_cnic_irq_info(struct bnx2x *bp); +#endif +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ +static int bnx2x_poll(struct napi_struct *napi, int budget); +#endif +static void bnx2x_set_rx_mode(struct net_device *dev); + +/* must be called with rtnl_lock */ +static int bnx2x_nic_load(struct bnx2x *bp, int load_mode) +{ + u32 load_code; + int i, rc; +#ifdef BNX2X_STOP_ON_ERROR + int msglevel; + + DP(NETIF_MSG_IFUP, "enter\n"); + if (unlikely(bp->panic)) + return -EPERM; + msglevel = bp->msglevel; + bp->msglevel |= (BNX2X_MSG_FP | BNX2X_MSG_SP | NETIF_MSG_INTR); +#endif + + bp->state = BNX2X_STATE_OPENING_WAIT4_LOAD; + + switch (int_mode) { + case INT_MODE_INTx: + case INT_MODE_MSI: + bp->num_queues = 1; + DP(NETIF_MSG_IFUP, + "set number of queues to %d\n", bp->num_queues); + break; + + case INT_MODE_MSIX: + default: + /* if we can't use MSI-X we only need one fp, + * so try to enable MSI-X with the requested number of fp's + * and fallback to MSI or legacy INTx with one fp + */ + switch (bp->multi_mode) { + case ETH_RSS_MODE_DISABLED: + bp->num_queues = 1; + break; + case ETH_RSS_MODE_REGULAR: + bp->num_queues = min_t(u32, num_online_cpus(), + BNX2X_MAX_QUEUES(bp)); + break; + case ETH_RSS_MODE_VLAN_PRI: + case ETH_RSS_MODE_E1HOV_PRI: + case ETH_RSS_MODE_IP_DSCP: + bp->num_queues = 1; + for (i = 0; i < BNX2X_MAX_PRIORITY; i++) + if ((bp->pri_map[i] + 1) > bp->num_queues) + bp->num_queues = (bp->pri_map[i] + 1); + break; + default: + bp->num_queues = 1; + break; + } + DP(NETIF_MSG_IFUP, + "set number of queues to %d\n", bp->num_queues); + + if (bnx2x_enable_msix(bp)) { + /* failed to enable MSI-X */ + bp->num_queues = 1; + if (bp->multi_mode) + BNX2X_ERR("Multi requested but failed to " + "enable MSI-X set number of queues" + " to %d\n", bp->num_queues); + } + } + + if (bnx2x_alloc_mem(bp)) + return -ENOMEM; + + for_each_queue(bp, i) + bnx2x_fp(bp, i, disable_tpa) = + ((bp->flags & TPA_ENABLE_FLAG) == 0); + +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ + for_each_queue(bp, i) + netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi), + bnx2x_poll, 128); +#endif + +#ifdef BNX2X_STOP_ON_ERROR + for_each_queue(bp, i) { + struct bnx2x_fastpath *fp = &bp->fp[i]; + + fp->poll_no_work = 0; + fp->poll_calls = 0; + fp->poll_max_calls = 0; + fp->poll_complete = 0; + fp->poll_exit = 0; + } +#endif + bnx2x_napi_enable(bp); + +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ + if (bp->flags & USING_MSIX_FLAG) { + rc = bnx2x_req_msix_irqs(bp); + if (rc) { + pci_disable_msix(bp->pdev); + goto load_error1; + } + printk(KERN_INFO PFX "%s: using MSI-X\n", bp->dev->name); + } else { + if (int_mode != INT_MODE_INTx) + bnx2x_enable_msi(bp); +#else + { +#endif + bnx2x_ack_int(bp); + rc = bnx2x_req_irq(bp); + if (rc) { + BNX2X_ERR("IRQ request failed, aborting\n"); +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ + if (bp->flags & USING_MSI_FLAG) + pci_disable_msi(bp->pdev); +#endif + goto load_error1; + } + if (bp->flags & USING_MSI_FLAG) + printk(KERN_INFO PFX "%s: using MSI\n", bp->dev->name); + } + + /* Send LOAD_REQUEST command to MCP + Returns the type of LOAD command: + if it is the first port to be initialized + common blocks should be initialized, otherwise - not + */ + if (!BP_NOMCP(bp)) { + load_code = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_REQ); + if (!load_code) { + BNX2X_ERR("MCP response failure, aborting\n"); + rc = -EBUSY; + goto load_error2; + } + if (load_code == FW_MSG_CODE_DRV_LOAD_REFUSED) { + rc = -EBUSY; /* other port in diagnostic mode */ + goto load_error2; + } + + } else { + int port = BP_PORT(bp); + + DP(NETIF_MSG_IFUP, "NO MCP - load counts before us %d, %d, %d\n", + load_count[0], load_count[1], load_count[2]); + load_count[0]++; + load_count[1 + port]++; + DP(NETIF_MSG_IFUP, "NO MCP - new load counts %d, %d, %d\n", + load_count[0], load_count[1], load_count[2]); + if (load_count[0] == 1) + load_code = FW_MSG_CODE_DRV_LOAD_COMMON; + else if (load_count[1 + port] == 1) + load_code = FW_MSG_CODE_DRV_LOAD_PORT; + else + load_code = FW_MSG_CODE_DRV_LOAD_FUNCTION; + } + + if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) || + (load_code == FW_MSG_CODE_DRV_LOAD_PORT)) + bp->port.pmf = 1; + else + bp->port.pmf = 0; + DP(NETIF_MSG_LINK, "pmf %d\n", bp->port.pmf); + + /* Initialize HW */ + rc = bnx2x_init_hw(bp, load_code); + if (rc) { + BNX2X_ERR("HW init failed, aborting\n"); + goto load_error2; + } + + /* Setup NIC internals and enable interrupts */ + bnx2x_nic_init(bp, load_code); + + /* Send LOAD_DONE command to MCP */ + if (!BP_NOMCP(bp)) { + load_code = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE); + if (!load_code) { + BNX2X_ERR("MCP response failure, aborting\n"); + rc = -EBUSY; + goto load_error3; + } + } + + bnx2x_stats_init(bp); + + bp->state = BNX2X_STATE_OPENING_WAIT4_PORT; + + /* Enable Rx interrupt handling before sending the ramrod + as it's completed on Rx FP queue */ + atomic_set(&bp->intr_sem, 0); + + rc = bnx2x_setup_leading(bp); + if (rc) { + BNX2X_ERR("Setup leading failed!\n"); + goto load_error3; + } + + if (CHIP_IS_E1H(bp)) + if (bp->mf_config & FUNC_MF_CFG_FUNC_DISABLED) { + BNX2X_ERR("!!! mf_cfg function disabled\n"); + bp->state = BNX2X_STATE_DISABLED; + } + + if (bp->state == BNX2X_STATE_OPEN) { +#ifdef BCM_CNIC + /* Enable Timer scan */ + REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + BP_PORT(bp)*4, 1); +#endif + for_each_nondefault_queue(bp, i) { + rc = bnx2x_setup_multi(bp, i); + if (rc) +#ifdef BCM_CNIC + goto load_error4; +#else + goto load_error3; +#endif + } + } + + if (CHIP_IS_E1(bp)) + bnx2x_set_mac_addr_e1(bp, 1); + else + bnx2x_set_mac_addr_e1h(bp, 1); + + if (bp->port.pmf) + bnx2x_initial_phy_init(bp); + + /* Start fast path */ + switch (load_mode) { + case LOAD_NORMAL: + /* Tx queue should be only reenabled */ + netif_wake_queue(bp->dev); + /* Initialize the receive filter. */ + bnx2x_set_rx_mode(bp->dev); + break; + + case LOAD_OPEN: + netif_start_queue(bp->dev); + /* Initialize the receive filter. */ + bnx2x_set_rx_mode(bp->dev); + break; + + case LOAD_DIAG: + /* Initialize the receive filter. */ + bnx2x_set_rx_mode(bp->dev); + bp->state = BNX2X_STATE_DIAG; + break; + + default: + break; + } + + if (!bp->port.pmf) + bnx2x__link_status_update(bp); + + /* start the timer */ + mod_timer(&bp->timer, jiffies + bp->current_interval); + +#ifdef BCM_CNIC + bnx2x_setup_cnic_irq_info(bp); + if (bp->state == BNX2X_STATE_OPEN) + bnx2x_cnic_notify(bp, CNIC_CTL_START_CMD); +#endif + +#ifdef BNX2X_STOP_ON_ERROR + bp->msglevel = msglevel; + for_each_queue(bp, i) { + struct bnx2x_fastpath *fp = &bp->fp[i]; + + DP(NETIF_MSG_IFUP, "fp[%d] no_work %ld " + "calls %ld max_calls %ld complete %ld exit %ld\n", i, + fp->poll_no_work, fp->poll_calls, fp->poll_max_calls, + fp->poll_complete, fp->poll_exit); + } + DP(NETIF_MSG_IFUP, "exit\n"); +#endif + + return 0; + +#ifdef BCM_CNIC +load_error4: + /* Disable Timer scan */ + REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + BP_PORT(bp)*4, 0); +#endif +load_error3: + bnx2x_int_disable_sync(bp, 1); + /* Free SKBs, SGEs, TPA pool and driver internals */ + bnx2x_free_skbs(bp); + for_each_queue(bp, i) + bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE); +load_error2: + /* Release IRQs */ + bnx2x_free_irq(bp); +load_error1: + bnx2x_napi_disable(bp); + bnx2x_free_mem(bp); + + /* TBD we really need to reset the chip + if we want to recover from this */ + +#ifdef BNX2X_STOP_ON_ERROR + bp->msglevel = msglevel; + DP(NETIF_MSG_IFUP, "exit\n"); +#endif + + return rc; +} + +static int bnx2x_stop_multi(struct bnx2x *bp, int index) +{ + int rc; + + /* halt the connection */ + bp->fp[index].state = BNX2X_FP_STATE_HALTING; + bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_HALT, index, 0, index, 0); + + /* Wait for completion */ + rc = bnx2x_wait_ramrod(bp, BNX2X_FP_STATE_HALTED, index, + &(bp->fp[index].state), 1); + if (rc) /* timeout */ + return rc; + + /* delete cfc entry */ + bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_CFC_DEL, index, 0, 0, 1); + + /* Wait for completion */ + rc = bnx2x_wait_ramrod(bp, BNX2X_FP_STATE_CLOSED, index, + &(bp->fp[index].state), 1); + return rc; +} + +static int bnx2x_stop_leading(struct bnx2x *bp) +{ + u16 dsb_sp_prod_idx; + /* if the other port is handling traffic, + this can take a lot of time */ + int cnt = 500; + int rc; + + might_sleep(); + + /* Send HALT ramrod */ + bp->fp[0].state = BNX2X_FP_STATE_HALTING; + bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_HALT, 0, 0, BP_CL_ID(bp), 0); + + /* Wait for completion */ + rc = bnx2x_wait_ramrod(bp, BNX2X_FP_STATE_HALTED, 0, + &(bp->fp[0].state), 1); + if (rc) /* timeout */ + return rc; + + dsb_sp_prod_idx = *bp->dsb_sp_prod; + + /* Send PORT_DELETE ramrod */ + bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_PORT_DEL, 0, 0, 0, 1); + + /* Wait for completion to arrive on default status block + we are going to reset the chip anyway + so there is not much to do if this times out + */ + while (dsb_sp_prod_idx == *bp->dsb_sp_prod) { + if (!cnt) { + DP(NETIF_MSG_IFDOWN, "timeout waiting for port del " + "dsb_sp_prod 0x%x != dsb_sp_prod_idx 0x%x\n", + *bp->dsb_sp_prod, dsb_sp_prod_idx); +#ifdef BNX2X_STOP_ON_ERROR + bnx2x_panic(); +#else + rc = -EBUSY; +#endif + break; + } + cnt--; + msleep(1); + } + bp->state = BNX2X_STATE_CLOSING_WAIT4_UNLOAD; + bp->fp[0].state = BNX2X_FP_STATE_CLOSED; + + return rc; +} + +static void bnx2x_reset_func(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + int func = BP_FUNC(bp); + int base, i; + + /* Configure IGU */ + REG_WR(bp, HC_REG_LEADING_EDGE_0 + port*8, 0); + REG_WR(bp, HC_REG_TRAILING_EDGE_0 + port*8, 0); + + REG_WR(bp, HC_REG_CONFIG_0 + port*4, 0x1000); + +#ifdef BCM_CNIC + /* Disable Timer scan */ + REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + BP_PORT(bp)*4, 0); +#endif + + /* Clear ILT */ + base = FUNC_ILT_BASE(func); + for (i = base; i < base + ILT_PER_FUNC; i++) + bnx2x_ilt_wr(bp, i, 0); +} + +static void bnx2x_reset_port(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + u32 val; + + REG_WR(bp, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, 0); + + /* Do not rcv packets to BRB */ + REG_WR(bp, NIG_REG_LLH0_BRB1_DRV_MASK + port*4, 0x0); + /* Do not direct rcv packets that are not for MCP to the BRB */ + REG_WR(bp, (port ? NIG_REG_LLH1_BRB1_NOT_MCP : + NIG_REG_LLH0_BRB1_NOT_MCP), 0x0); + + /* Configure AEU */ + REG_WR(bp, MISC_REG_AEU_MASK_ATTN_FUNC_0 + port*4, 0); + + msleep(100); + /* Check for BRB port occupancy */ + val = REG_RD(bp, BRB1_REG_PORT_NUM_OCC_BLOCKS_0 + port*4); + if (val) + DP(NETIF_MSG_IFDOWN, + "BRB1 is not empty %d blocks are occupied\n", val); + + /* TODO: Close Doorbell port? */ +} + +static void bnx2x_reset_common(struct bnx2x *bp) +{ + /* reset_common */ + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, + 0xd3ffff7f); + REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, 0x1403); +} + +static void bnx2x_reset_chip(struct bnx2x *bp, u32 reset_code) +{ + DP(BNX2X_MSG_MCP, "function %d reset_code %x\n", + BP_FUNC(bp), reset_code); + + switch (reset_code) { + case FW_MSG_CODE_DRV_UNLOAD_COMMON: + bnx2x_reset_port(bp); + bnx2x_reset_func(bp); + bnx2x_reset_common(bp); + break; + + case FW_MSG_CODE_DRV_UNLOAD_PORT: + bnx2x_reset_port(bp); + bnx2x_reset_func(bp); + break; + + case FW_MSG_CODE_DRV_UNLOAD_FUNCTION: + bnx2x_reset_func(bp); + break; + + default: + BNX2X_ERR("Unknown reset_code (0x%x) from MCP\n", reset_code); + break; + } +} + +/* must be called with rtnl_lock */ +static int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode) +{ + int port = BP_PORT(bp); + u32 reset_code = 0; + int i, cnt, rc; +#ifdef BNX2X_STOP_ON_ERROR + int msglevel; + + DP(NETIF_MSG_IFDOWN, "enter\n"); + for_each_queue(bp, i) { + struct bnx2x_fastpath *fp = &bp->fp[i]; + + DP(NETIF_MSG_IFDOWN, "fp[%d] no_work %ld " + "calls %ld max_calls %ld complete %ld exit %ld\n", i, + fp->poll_no_work, fp->poll_calls, fp->poll_max_calls, + fp->poll_complete, fp->poll_exit); + } + msglevel = bp->msglevel; + bp->msglevel |= (BNX2X_MSG_FP | BNX2X_MSG_SP | NETIF_MSG_INTR); +#endif + +#ifdef BCM_CNIC + bnx2x_cnic_notify(bp, CNIC_CTL_STOP_CMD); +#endif + + bp->state = BNX2X_STATE_CLOSING_WAIT4_HALT; + + bp->rx_mode = BNX2X_RX_MODE_NONE; + bnx2x_set_storm_rx_mode(bp); + + bnx2x_netif_stop(bp, 1); + + del_timer_sync(&bp->timer); + SHMEM_WR(bp, func_mb[BP_FUNC(bp)].drv_pulse_mb, + (DRV_PULSE_ALWAYS_ALIVE | bp->fw_drv_pulse_wr_seq)); + bnx2x_stats_handle(bp, STATS_EVENT_STOP); + + /* Release IRQs */ + bnx2x_free_irq(bp); + + /* Wait until tx fast path tasks complete */ + for_each_queue(bp, i) { + struct bnx2x_fastpath *fp = &bp->fp[i]; + + cnt = 1000; + smp_rmb(); + while (BNX2X_HAS_TX_WORK(fp)) { + + bnx2x_tx_int(fp, 1000); + if (!cnt) { + BNX2X_ERR("timeout waiting for queue[%d]\n", + i); +#ifdef BNX2X_STOP_ON_ERROR + bnx2x_panic(); + return -EBUSY; +#else + break; +#endif + } + cnt--; + msleep(1); + smp_rmb(); + } + } + /* Give HW time to discard old tx messages */ + msleep(1); + + if (CHIP_IS_E1(bp)) { + struct mac_configuration_cmd *config = + bnx2x_sp(bp, mcast_config); + + bnx2x_set_mac_addr_e1(bp, 0); + + for (i = 0; i < config->hdr.length; i++) + CAM_INVALIDATE(config->config_table[i]); + + config->hdr.length = i; + if (CHIP_REV_IS_SLOW(bp)) + config->hdr.offset = BNX2X_MAX_EMUL_MULTI*(1 + port); + else + config->hdr.offset = BNX2X_MAX_MULTICAST*(1 + port); + config->hdr.client_id = BP_CL_ID(bp); + config->hdr.reserved1 = 0; + + bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_SET_MAC, 0, + U64_HI(bnx2x_sp_mapping(bp, mcast_config)), + U64_LO(bnx2x_sp_mapping(bp, mcast_config)), 0); + + } else { /* E1H */ + REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port*8, 0); + + bnx2x_set_mac_addr_e1h(bp, 0); + + for (i = 0; i < MC_HASH_SIZE; i++) + REG_WR(bp, MC_HASH_OFFSET(bp, i), 0); + } + + if (unload_mode == UNLOAD_NORMAL) + reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS; + + else if (bp->flags & NO_WOL_FLAG) { + reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP; + if (CHIP_IS_E1H(bp)) + REG_WR(bp, MISC_REG_E1HMF_MODE, 0); + + } else if (bp->wol) { + u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; + u8 *mac_addr = bp->dev->dev_addr; + u32 val; + /* The mac address is written to entries 1-4 to + preserve entry 0 which is used by the PMF */ + u8 entry = (BP_E1HVN(bp) + 1)*8; + + val = (mac_addr[0] << 8) | mac_addr[1]; + EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH + entry, val); + + val = (mac_addr[2] << 24) | (mac_addr[3] << 16) | + (mac_addr[4] << 8) | mac_addr[5]; + EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH + entry + 4, val); + + reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_EN; + + } else + reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS; + + /* Close multi and leading connections + Completions for ramrods are collected in a synchronous way */ + for_each_nondefault_queue(bp, i) + if (bnx2x_stop_multi(bp, i)) + goto unload_error; + + rc = bnx2x_stop_leading(bp); + if (rc) { + BNX2X_ERR("Stop leading failed!\n"); +#ifdef BNX2X_STOP_ON_ERROR + return -EBUSY; +#else + goto unload_error; +#endif + } + +unload_error: + if (!BP_NOMCP(bp)) + reset_code = bnx2x_fw_command(bp, reset_code); + else { + DP(NETIF_MSG_IFDOWN, "NO MCP - load counts %d, %d, %d\n", + load_count[0], load_count[1], load_count[2]); + load_count[0]--; + load_count[1 + port]--; + DP(NETIF_MSG_IFDOWN, "NO MCP - new load counts %d, %d, %d\n", + load_count[0], load_count[1], load_count[2]); + if (load_count[0] == 0) + reset_code = FW_MSG_CODE_DRV_UNLOAD_COMMON; + else if (load_count[1 + port] == 0) + reset_code = FW_MSG_CODE_DRV_UNLOAD_PORT; + else + reset_code = FW_MSG_CODE_DRV_UNLOAD_FUNCTION; + } + + if ((reset_code == FW_MSG_CODE_DRV_UNLOAD_COMMON) || + (reset_code == FW_MSG_CODE_DRV_UNLOAD_PORT)) + bnx2x__link_reset(bp); + + /* Reset the chip */ + bnx2x_reset_chip(bp, reset_code); + + /* Report UNLOAD_DONE to MCP */ + if (!BP_NOMCP(bp)) + bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE); + + /* Free SKBs, SGEs, TPA pool and driver internals */ + bnx2x_free_skbs(bp); + for_each_queue(bp, i) + bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE); + bnx2x_free_mem(bp); + + bp->state = BNX2X_STATE_CLOSED; + + netif_carrier_off(bp->dev); + +#ifdef BNX2X_STOP_ON_ERROR + bp->msglevel = msglevel; + for_each_queue(bp, i) { + struct bnx2x_fastpath *fp = &bp->fp[i]; + + DP(NETIF_MSG_IFDOWN, "fp[%d] no_work %ld " + "calls %ld max_calls %ld complete %ld exit %ld\n", i, + fp->poll_no_work, fp->poll_calls, fp->poll_max_calls, + fp->poll_complete, fp->poll_exit); + } + DP(NETIF_MSG_IFDOWN, "exit\n"); +#endif + + return 0; +} + +#if defined(INIT_DELAYED_WORK_DEFERRABLE) || defined(INIT_WORK_NAR) /* BNX2X_UPSTREAM */ +static void bnx2x_reset_task(struct work_struct *work) +{ + struct bnx2x *bp = container_of(work, struct bnx2x, reset_task); +#else +static void bnx2x_reset_task(void *data) +{ + struct bnx2x *bp = (struct bnx2x *)data; +#endif + +#ifdef BNX2X_STOP_ON_ERROR + BNX2X_ERR("reset task called but STOP_ON_ERROR defined" + " so reset not done to allow debug dump,\n" + KERN_ERR " you will need to reboot when done\n"); + return; +#endif + + rtnl_lock(); + + if (!netif_running(bp->dev)) + goto reset_task_exit; + + bnx2x_nic_unload(bp, UNLOAD_NORMAL); + bnx2x_nic_load(bp, LOAD_NORMAL); + +reset_task_exit: + rtnl_unlock(); +} + +/* end of nic load/unload */ + +/* ethtool_ops */ + +/* + * Init service functions + */ + +static void __devinit bnx2x_undi_unload(struct bnx2x *bp) +{ + u32 val; + + /* Check if there is any driver already loaded */ + val = REG_RD(bp, MISC_REG_UNPREPARED); + if (val == 0x1) { + /* Check if it is the UNDI driver + * UNDI driver initializes CID offset for normal bell to 0x7 + */ + bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_UNDI); + val = REG_RD(bp, DORQ_REG_NORM_CID_OFST); + if (val == 0x7) { + u32 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS; + /* save our func */ + int func = BP_FUNC(bp); + u32 swap_en; + u32 swap_val; + + /* clear the UNDI indication */ + REG_WR(bp, DORQ_REG_NORM_CID_OFST, 0); + + BNX2X_DEV_INFO("UNDI is active! reset device\n"); + + /* try unload UNDI on port 0 */ + bp->func = 0; + bp->fw_seq = + (SHMEM_RD(bp, func_mb[bp->func].drv_mb_header) & + DRV_MSG_SEQ_NUMBER_MASK); + reset_code = bnx2x_fw_command(bp, reset_code); + + /* if UNDI is loaded on the other port */ + if (reset_code != FW_MSG_CODE_DRV_UNLOAD_COMMON) { + + /* send "DONE" for previous unload */ + bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE); + + /* unload UNDI on port 1 */ + bp->func = 1; + bp->fw_seq = + (SHMEM_RD(bp, func_mb[bp->func].drv_mb_header) & + DRV_MSG_SEQ_NUMBER_MASK); + reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS; + + bnx2x_fw_command(bp, reset_code); + } + + /* now it's safe to release the lock */ + bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_UNDI); + + REG_WR(bp, (BP_PORT(bp) ? HC_REG_CONFIG_1 : + HC_REG_CONFIG_0), 0x1000); + + /* close input traffic and wait for it */ + /* Do not rcv packets to BRB */ + REG_WR(bp, + (BP_PORT(bp) ? NIG_REG_LLH1_BRB1_DRV_MASK : + NIG_REG_LLH0_BRB1_DRV_MASK), 0x0); + /* Do not direct rcv packets that are not for MCP to + * the BRB */ + REG_WR(bp, + (BP_PORT(bp) ? NIG_REG_LLH1_BRB1_NOT_MCP : + NIG_REG_LLH0_BRB1_NOT_MCP), 0x0); + /* clear AEU */ + REG_WR(bp, + (BP_PORT(bp) ? MISC_REG_AEU_MASK_ATTN_FUNC_1 : + MISC_REG_AEU_MASK_ATTN_FUNC_0), 0); + msleep(10); + + /* save NIG port swap info */ + swap_val = REG_RD(bp, NIG_REG_PORT_SWAP); + swap_en = REG_RD(bp, NIG_REG_STRAP_OVERRIDE); + /* reset device */ + REG_WR(bp, + GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_CLEAR, + 0xd3ffffff); + REG_WR(bp, + GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_CLEAR, + 0x1403); + /* take the NIG out of reset and restore swap values */ + REG_WR(bp, + GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, + MISC_REGISTERS_RESET_REG_1_RST_NIG); + REG_WR(bp, NIG_REG_PORT_SWAP, swap_val); + REG_WR(bp, NIG_REG_STRAP_OVERRIDE, swap_en); + + /* send unload done to the MCP */ + bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE); + + /* restore our func and fw_seq */ + bp->func = func; + bp->fw_seq = + (SHMEM_RD(bp, func_mb[bp->func].drv_mb_header) & + DRV_MSG_SEQ_NUMBER_MASK); + + } else + bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_UNDI); + } +} + +static void __devinit bnx2x_get_common_hwinfo(struct bnx2x *bp) +{ + u32 val, val2, val3, val4, id; + u16 pmc; + + /* Get the chip revision id and number. */ + /* chip num:16-31, rev:12-15, metal:4-11, bond_id:0-3 */ + val = REG_RD(bp, MISC_REG_CHIP_NUM); + id = ((val & 0xffff) << 16); + val = REG_RD(bp, MISC_REG_CHIP_REV); + id |= ((val & 0xf) << 12); + val = REG_RD(bp, MISC_REG_CHIP_METAL); + id |= ((val & 0xff) << 4); + val = REG_RD(bp, MISC_REG_BOND_ID); + id |= (val & 0xf); + bp->common.chip_id = id; + bp->link_params.chip_id = bp->common.chip_id; + BNX2X_DEV_INFO("chip ID is 0x%x\n", id); + + val = (REG_RD(bp, 0x2874) & 0x55); + if ((bp->common.chip_id & 0x1) || + (CHIP_IS_E1(bp) && val) || (CHIP_IS_E1H(bp) && (val == 0x55))) { + bp->flags |= ONE_PORT_FLAG; + BNX2X_DEV_INFO("single port device\n"); + } + + val = REG_RD(bp, MCP_REG_MCPR_NVM_CFG4); + bp->common.flash_size = (NVRAM_1MB_SIZE << + (val & MCPR_NVM_CFG4_FLASH_SIZE)); + BNX2X_DEV_INFO("flash_size 0x%x (%d)\n", + bp->common.flash_size, bp->common.flash_size); + + bp->common.shmem_base = REG_RD(bp, MISC_REG_SHARED_MEM_ADDR); + bp->link_params.shmem_base = bp->common.shmem_base; + BNX2X_DEV_INFO("shmem offset is 0x%x\n", bp->common.shmem_base); + + if (!bp->common.shmem_base || + (bp->common.shmem_base < 0xA0000) || + (bp->common.shmem_base >= 0xC0000)) { + BNX2X_DEV_INFO("MCP not active\n"); + bp->flags |= NO_MCP_FLAG; + return; + } + + val = SHMEM_RD(bp, validity_map[BP_PORT(bp)]); + if ((val & (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) + != (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) + BNX2X_ERR("BAD MCP validity signature\n"); + + bp->common.hw_config = SHMEM_RD(bp, dev_info.shared_hw_config.config); + BNX2X_DEV_INFO("hw_config 0x%08x\n", bp->common.hw_config); + + bp->link_params.hw_led_mode = ((bp->common.hw_config & + SHARED_HW_CFG_LED_MODE_MASK) >> + SHARED_HW_CFG_LED_MODE_SHIFT); + + bp->link_params.feature_config_flags = 0; + val = SHMEM_RD(bp, dev_info.shared_feature_config.config); + if (val & SHARED_FEAT_CFG_OVERRIDE_PREEMPHASIS_CFG_ENABLED) + bp->link_params.feature_config_flags |= + FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED; + else + bp->link_params.feature_config_flags &= + ~FEATURE_CONFIG_OVERRIDE_PREEMPHASIS_ENABLED; + + val = SHMEM_RD(bp, dev_info.bc_rev) >> 8; + bp->common.bc_ver = val; + BNX2X_DEV_INFO("bc_ver %X\n", val); + if (val < BNX2X_BC_VER) { + /* for now only warn + * later we might need to enforce this */ + BNX2X_ERR("This driver needs bc_ver %X but found %X," + " please upgrade BC\n", BNX2X_BC_VER, val); + } + + if (BP_E1HVN(bp) == 0) { + pci_read_config_word(bp->pdev, bp->pm_cap + PCI_PM_PMC, &pmc); + bp->flags |= (pmc & PCI_PM_CAP_PME_D3cold) ? 0 : NO_WOL_FLAG; + } else { + /* no WOL capability for E1HVN != 0 */ + bp->flags |= NO_WOL_FLAG; + } + BNX2X_DEV_INFO("%sWoL capable\n", + (bp->flags & NO_WOL_FLAG) ? "not " : ""); + + val = SHMEM_RD(bp, dev_info.shared_hw_config.part_num); + val2 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[4]); + val3 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[8]); + val4 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[12]); + + printk(KERN_INFO PFX "part number %X-%X-%X-%X\n", + val, val2, val3, val4); +} + +static void __devinit bnx2x_link_settings_supported(struct bnx2x *bp, + u32 switch_cfg) +{ + int port = BP_PORT(bp); + u32 ext_phy_type; + + switch (switch_cfg) { + case SWITCH_CFG_1G: + BNX2X_DEV_INFO("switch_cfg 0x%x (1G)\n", switch_cfg); + + ext_phy_type = + SERDES_EXT_PHY_TYPE(bp->link_params.ext_phy_config); + switch (ext_phy_type) { + case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT: + BNX2X_DEV_INFO("ext_phy_type 0x%x (Direct)\n", + ext_phy_type); + + bp->port.supported |= (SUPPORTED_10baseT_Half | + SUPPORTED_10baseT_Full | + SUPPORTED_100baseT_Half | + SUPPORTED_100baseT_Full | + SUPPORTED_1000baseT_Full | + SUPPORTED_2500baseX_Full | + SUPPORTED_TP | + SUPPORTED_FIBRE | + SUPPORTED_Autoneg | + SUPPORTED_Pause | + SUPPORTED_Asym_Pause); + break; + + case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482: + BNX2X_DEV_INFO("ext_phy_type 0x%x (5482)\n", + ext_phy_type); + + bp->port.supported |= (SUPPORTED_10baseT_Half | + SUPPORTED_10baseT_Full | + SUPPORTED_100baseT_Half | + SUPPORTED_100baseT_Full | + SUPPORTED_1000baseT_Full | + SUPPORTED_TP | + SUPPORTED_FIBRE | + SUPPORTED_Autoneg | + SUPPORTED_Pause | + SUPPORTED_Asym_Pause); + break; + + default: + BNX2X_ERR("NVRAM config error. " + "BAD SerDes ext_phy_config 0x%x\n", + bp->link_params.ext_phy_config); + return; + } + + bp->port.phy_addr = REG_RD(bp, NIG_REG_SERDES0_CTRL_PHY_ADDR + + port*0x10); + BNX2X_DEV_INFO("phy_addr 0x%x\n", bp->port.phy_addr); + break; + + case SWITCH_CFG_10G: + BNX2X_DEV_INFO("switch_cfg 0x%x (10G)\n", switch_cfg); + + ext_phy_type = + XGXS_EXT_PHY_TYPE(bp->link_params.ext_phy_config); + switch (ext_phy_type) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: + BNX2X_DEV_INFO("ext_phy_type 0x%x (Direct)\n", + ext_phy_type); + + bp->port.supported |= (SUPPORTED_10baseT_Half | + SUPPORTED_10baseT_Full | + SUPPORTED_100baseT_Half | + SUPPORTED_100baseT_Full | + SUPPORTED_1000baseT_Full | + SUPPORTED_2500baseX_Full | + SUPPORTED_10000baseT_Full | + SUPPORTED_TP | + SUPPORTED_FIBRE | + SUPPORTED_Autoneg | + SUPPORTED_Pause | + SUPPORTED_Asym_Pause); + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: + BNX2X_DEV_INFO("ext_phy_type 0x%x (8705)\n", + ext_phy_type); + + bp->port.supported |= (SUPPORTED_10000baseT_Full | + SUPPORTED_FIBRE | + SUPPORTED_Pause | + SUPPORTED_Asym_Pause); + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: + BNX2X_DEV_INFO("ext_phy_type 0x%x (8706)\n", + ext_phy_type); + + bp->port.supported |= (SUPPORTED_10000baseT_Full | + SUPPORTED_1000baseT_Full | + SUPPORTED_FIBRE | + SUPPORTED_Pause | + SUPPORTED_Asym_Pause); + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726: + BNX2X_DEV_INFO("ext_phy_type 0x%x (8726)\n", + ext_phy_type); + + bp->port.supported |= (SUPPORTED_10000baseT_Full | + SUPPORTED_FIBRE | + SUPPORTED_Pause | + SUPPORTED_Asym_Pause); + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: + BNX2X_DEV_INFO("ext_phy_type 0x%x (8072)\n", + ext_phy_type); + + bp->port.supported |= (SUPPORTED_10000baseT_Full | + SUPPORTED_1000baseT_Full | + SUPPORTED_FIBRE | + SUPPORTED_Autoneg | + SUPPORTED_Pause | + SUPPORTED_Asym_Pause); + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: + BNX2X_DEV_INFO("ext_phy_type 0x%x (8073)\n", + ext_phy_type); + + bp->port.supported |= (SUPPORTED_10000baseT_Full | + SUPPORTED_2500baseX_Full | + SUPPORTED_1000baseT_Full | + SUPPORTED_FIBRE | + SUPPORTED_Autoneg | + SUPPORTED_Pause | + SUPPORTED_Asym_Pause); + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + BNX2X_DEV_INFO("ext_phy_type 0x%x (SFX7101)\n", + ext_phy_type); + + bp->port.supported |= (SUPPORTED_10000baseT_Full | + SUPPORTED_TP | + SUPPORTED_Autoneg | + SUPPORTED_Pause | + SUPPORTED_Asym_Pause); + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE: + BNX2X_ERR("XGXS PHY Failure detected 0x%x\n", + bp->link_params.ext_phy_config); + break; + + default: + BNX2X_ERR("NVRAM config error. " + "BAD XGXS ext_phy_config 0x%x\n", + bp->link_params.ext_phy_config); + return; + } + + bp->port.phy_addr = REG_RD(bp, NIG_REG_XGXS0_CTRL_PHY_ADDR + + port*0x18); + BNX2X_DEV_INFO("phy_addr 0x%x\n", bp->port.phy_addr); + + break; + + default: + BNX2X_ERR("BAD switch_cfg link_config 0x%x\n", + bp->port.link_config); + return; + } + bp->link_params.phy_addr = bp->port.phy_addr; + + /* mask what we support according to speed_cap_mask */ + if (!(bp->link_params.speed_cap_mask & + PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF)) + bp->port.supported &= ~SUPPORTED_10baseT_Half; + + if (!(bp->link_params.speed_cap_mask & + PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL)) + bp->port.supported &= ~SUPPORTED_10baseT_Full; + + if (!(bp->link_params.speed_cap_mask & + PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF)) + bp->port.supported &= ~SUPPORTED_100baseT_Half; + + if (!(bp->link_params.speed_cap_mask & + PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL)) + bp->port.supported &= ~SUPPORTED_100baseT_Full; + + if (!(bp->link_params.speed_cap_mask & + PORT_HW_CFG_SPEED_CAPABILITY_D0_1G)) + bp->port.supported &= ~(SUPPORTED_1000baseT_Half | + SUPPORTED_1000baseT_Full); + + if (!(bp->link_params.speed_cap_mask & + PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G)) + bp->port.supported &= ~SUPPORTED_2500baseX_Full; + + if (!(bp->link_params.speed_cap_mask & + PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) + bp->port.supported &= ~SUPPORTED_10000baseT_Full; + + BNX2X_DEV_INFO("supported 0x%x\n", bp->port.supported); +} + +static void __devinit bnx2x_link_settings_requested(struct bnx2x *bp) +{ + bp->link_params.req_duplex = DUPLEX_FULL; + + switch (bp->port.link_config & PORT_FEATURE_LINK_SPEED_MASK) { + case PORT_FEATURE_LINK_SPEED_AUTO: + if (bp->port.supported & SUPPORTED_Autoneg) { + bp->link_params.req_line_speed = SPEED_AUTO_NEG; + bp->port.advertising = bp->port.supported; + } else { + u32 ext_phy_type = + XGXS_EXT_PHY_TYPE(bp->link_params.ext_phy_config); + + if ((ext_phy_type == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705) || + (ext_phy_type == + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706)) { + /* force 10G, no AN */ + bp->link_params.req_line_speed = SPEED_10000; + bp->port.advertising = + (ADVERTISED_10000baseT_Full | + ADVERTISED_FIBRE); + break; + } + BNX2X_ERR("NVRAM config error. " + "Invalid link_config 0x%x" + " Autoneg not supported\n", + bp->port.link_config); + return; + } + break; + + case PORT_FEATURE_LINK_SPEED_10M_FULL: + if (bp->port.supported & SUPPORTED_10baseT_Full) { + bp->link_params.req_line_speed = SPEED_10; + bp->port.advertising = (ADVERTISED_10baseT_Full | + ADVERTISED_TP); + } else { + BNX2X_ERR("NVRAM config error. " + "Invalid link_config 0x%x" + " speed_cap_mask 0x%x\n", + bp->port.link_config, + bp->link_params.speed_cap_mask); + return; + } + break; + + case PORT_FEATURE_LINK_SPEED_10M_HALF: + if (bp->port.supported & SUPPORTED_10baseT_Half) { + bp->link_params.req_line_speed = SPEED_10; + bp->link_params.req_duplex = DUPLEX_HALF; + bp->port.advertising = (ADVERTISED_10baseT_Half | + ADVERTISED_TP); + } else { + BNX2X_ERR("NVRAM config error. " + "Invalid link_config 0x%x" + " speed_cap_mask 0x%x\n", + bp->port.link_config, + bp->link_params.speed_cap_mask); + return; + } + break; + + case PORT_FEATURE_LINK_SPEED_100M_FULL: + if (bp->port.supported & SUPPORTED_100baseT_Full) { + bp->link_params.req_line_speed = SPEED_100; + bp->port.advertising = (ADVERTISED_100baseT_Full | + ADVERTISED_TP); + } else { + BNX2X_ERR("NVRAM config error. " + "Invalid link_config 0x%x" + " speed_cap_mask 0x%x\n", + bp->port.link_config, + bp->link_params.speed_cap_mask); + return; + } + break; + + case PORT_FEATURE_LINK_SPEED_100M_HALF: + if (bp->port.supported & SUPPORTED_100baseT_Half) { + bp->link_params.req_line_speed = SPEED_100; + bp->link_params.req_duplex = DUPLEX_HALF; + bp->port.advertising = (ADVERTISED_100baseT_Half | + ADVERTISED_TP); + } else { + BNX2X_ERR("NVRAM config error. " + "Invalid link_config 0x%x" + " speed_cap_mask 0x%x\n", + bp->port.link_config, + bp->link_params.speed_cap_mask); + return; + } + break; + + case PORT_FEATURE_LINK_SPEED_1G: + if (bp->port.supported & SUPPORTED_1000baseT_Full) { + bp->link_params.req_line_speed = SPEED_1000; + bp->port.advertising = (ADVERTISED_1000baseT_Full | + ADVERTISED_TP); + } else { + BNX2X_ERR("NVRAM config error. " + "Invalid link_config 0x%x" + " speed_cap_mask 0x%x\n", + bp->port.link_config, + bp->link_params.speed_cap_mask); + return; + } + break; + + case PORT_FEATURE_LINK_SPEED_2_5G: + if (bp->port.supported & SUPPORTED_2500baseX_Full) { + bp->link_params.req_line_speed = SPEED_2500; + bp->port.advertising = (ADVERTISED_2500baseX_Full | + ADVERTISED_TP); + } else { + BNX2X_ERR("NVRAM config error. " + "Invalid link_config 0x%x" + " speed_cap_mask 0x%x\n", + bp->port.link_config, + bp->link_params.speed_cap_mask); + return; + } + break; + + case PORT_FEATURE_LINK_SPEED_10G_CX4: + case PORT_FEATURE_LINK_SPEED_10G_KX4: + case PORT_FEATURE_LINK_SPEED_10G_KR: + if (bp->port.supported & SUPPORTED_10000baseT_Full) { + bp->link_params.req_line_speed = SPEED_10000; + bp->port.advertising = (ADVERTISED_10000baseT_Full | + ADVERTISED_FIBRE); + } else { + BNX2X_ERR("NVRAM config error. " + "Invalid link_config 0x%x" + " speed_cap_mask 0x%x\n", + bp->port.link_config, + bp->link_params.speed_cap_mask); + return; + } + break; + + default: + BNX2X_ERR("NVRAM config error. " + "BAD link speed link_config 0x%x\n", + bp->port.link_config); + bp->link_params.req_line_speed = SPEED_AUTO_NEG; + bp->port.advertising = bp->port.supported; + break; + } + + bp->link_params.req_flow_ctrl = (bp->port.link_config & + PORT_FEATURE_FLOW_CONTROL_MASK); + if ((bp->link_params.req_flow_ctrl == FLOW_CTRL_AUTO) && + !(bp->port.supported & SUPPORTED_Autoneg)) + bp->link_params.req_flow_ctrl = FLOW_CTRL_NONE; + + BNX2X_DEV_INFO("req_line_speed %d req_duplex %d req_flow_ctrl 0x%x" + " advertising 0x%x\n", + bp->link_params.req_line_speed, + bp->link_params.req_duplex, + bp->link_params.req_flow_ctrl, bp->port.advertising); +} + +static void __devinit bnx2x_get_port_hwinfo(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + u32 val, val2; + u16 i; + + bp->link_params.bp = bp; + bp->link_params.port = port; + + bp->link_params.lane_config = + SHMEM_RD(bp, dev_info.port_hw_config[port].lane_config); + bp->link_params.ext_phy_config = + SHMEM_RD(bp, + dev_info.port_hw_config[port].external_phy_config); + bp->link_params.speed_cap_mask = + SHMEM_RD(bp, + dev_info.port_hw_config[port].speed_capability_mask); + + bp->port.link_config = + SHMEM_RD(bp, dev_info.port_feature_config[port].link_config); + + /* Get the 4 lanes xgxs config rx and tx */ + for (i = 0; i < 2; i++) { + val = SHMEM_RD(bp, + dev_info.port_hw_config[port].xgxs_config_rx[i<<1]); + bp->link_params.xgxs_config_rx[i << 1] = ((val>>16) & 0xffff); + bp->link_params.xgxs_config_rx[(i << 1) + 1] = (val & 0xffff); + + val = SHMEM_RD(bp, + dev_info.port_hw_config[port].xgxs_config_tx[i<<1]); + bp->link_params.xgxs_config_tx[i << 1] = ((val>>16) & 0xffff); + bp->link_params.xgxs_config_tx[(i << 1) + 1] = (val & 0xffff); + } + + BNX2X_DEV_INFO("lane_config 0x%08x ext_phy_config 0x%08x" + " speed_cap_mask 0x%08x link_config 0x%08x\n", + bp->link_params.lane_config, + bp->link_params.ext_phy_config, + bp->link_params.speed_cap_mask, bp->port.link_config); + + bp->link_params.switch_cfg = (bp->port.link_config & + PORT_FEATURE_CONNECTED_SWITCH_MASK); + bnx2x_link_settings_supported(bp, bp->link_params.switch_cfg); + + bnx2x_link_settings_requested(bp); + + val2 = SHMEM_RD(bp, dev_info.port_hw_config[port].mac_upper); + val = SHMEM_RD(bp, dev_info.port_hw_config[port].mac_lower); + bp->dev->dev_addr[0] = (u8)(val2 >> 8 & 0xff); + bp->dev->dev_addr[1] = (u8)(val2 & 0xff); + bp->dev->dev_addr[2] = (u8)(val >> 24 & 0xff); + bp->dev->dev_addr[3] = (u8)(val >> 16 & 0xff); + bp->dev->dev_addr[4] = (u8)(val >> 8 & 0xff); + bp->dev->dev_addr[5] = (u8)(val & 0xff); + memcpy(bp->link_params.mac_addr, bp->dev->dev_addr, ETH_ALEN); +#ifdef ETHTOOL_GPERMADDR /* BNX2X_UPSTREAM */ + memcpy(bp->dev->perm_addr, bp->dev->dev_addr, ETH_ALEN); +#endif +} + +static int __devinit bnx2x_get_hwinfo(struct bnx2x *bp) +{ + int func = BP_FUNC(bp); + u32 val, val2; + int rc = 0; + + bnx2x_get_common_hwinfo(bp); + + bp->e1hov = 0; + bp->e1hmf = 0; + if (CHIP_IS_E1H(bp)) { + bp->mf_config = + SHMEM_RD(bp, mf_cfg.func_mf_config[func].config); + + val = (SHMEM_RD(bp, mf_cfg.func_mf_config[func].e1hov_tag) & + FUNC_MF_CFG_E1HOV_TAG_MASK); + if (val != FUNC_MF_CFG_E1HOV_TAG_DEFAULT) { + + bp->e1hov = val; + bp->e1hmf = 1; + BNX2X_DEV_INFO("MF mode E1HOV for func %d is %d " + "(0x%04x)\n", + func, bp->e1hov, bp->e1hov); + } else { + BNX2X_DEV_INFO("single function mode\n"); + if (BP_E1HVN(bp)) { + BNX2X_ERR("!!! No valid E1HOV for func %d," + " aborting\n", func); + rc = -EPERM; + } + } + } + + if (!BP_NOMCP(bp)) { + bnx2x_get_port_hwinfo(bp); + + bp->fw_seq = (SHMEM_RD(bp, func_mb[func].drv_mb_header) & + DRV_MSG_SEQ_NUMBER_MASK); + BNX2X_DEV_INFO("fw_seq 0x%08x\n", bp->fw_seq); + } + + if (IS_E1HMF(bp)) { + val2 = SHMEM_RD(bp, mf_cfg.func_mf_config[func].mac_upper); + val = SHMEM_RD(bp, mf_cfg.func_mf_config[func].mac_lower); + if ((val2 != FUNC_MF_CFG_UPPERMAC_DEFAULT) && + (val != FUNC_MF_CFG_LOWERMAC_DEFAULT)) { + bp->dev->dev_addr[0] = (u8)(val2 >> 8 & 0xff); + bp->dev->dev_addr[1] = (u8)(val2 & 0xff); + bp->dev->dev_addr[2] = (u8)(val >> 24 & 0xff); + bp->dev->dev_addr[3] = (u8)(val >> 16 & 0xff); + bp->dev->dev_addr[4] = (u8)(val >> 8 & 0xff); + bp->dev->dev_addr[5] = (u8)(val & 0xff); + memcpy(bp->link_params.mac_addr, bp->dev->dev_addr, + ETH_ALEN); +#ifdef ETHTOOL_GPERMADDR /* BNX2X_UPSTREAM */ + memcpy(bp->dev->perm_addr, bp->dev->dev_addr, + ETH_ALEN); +#endif + } + + return rc; + } + + if (BP_NOMCP(bp)) { + /* only supposed to happen on emulation/FPGA */ +#if (LINUX_VERSION_CODE >= 0x020618) /* BNX2X_UPSTREAM */ + BNX2X_ERR("warning random MAC workaround active\n"); + random_ether_addr(bp->dev->dev_addr); +#else + BNX2X_ERR("warning constant MAC workaround active\n"); + bp->dev->dev_addr[0] = 0; + bp->dev->dev_addr[1] = 0x50; + bp->dev->dev_addr[2] = 0xc2; + bp->dev->dev_addr[3] = 0x2c; + bp->dev->dev_addr[4] = (func + 1) * 0x10; + bp->dev->dev_addr[5] = 0x00; + memcpy(bp->link_params.mac_addr, bp->dev->dev_addr, ETH_ALEN); +#endif +#ifdef ETHTOOL_GPERMADDR /* BNX2X_UPSTREAM */ + memcpy(bp->dev->perm_addr, bp->dev->dev_addr, ETH_ALEN); +#endif + } + + return rc; +} + +static int __devinit bnx2x_init_bp(struct bnx2x *bp) +{ + int func = BP_FUNC(bp); + int timer_interval; + int i, rc; + + /* Disable interrupt handling until HW is initialized */ + atomic_set(&bp->intr_sem, 1); + + mutex_init(&bp->port.phy_mutex); + +#if defined(INIT_DELAYED_WORK_DEFERRABLE) || defined(INIT_WORK_NAR) /* BNX2X_UPSTREAM */ + INIT_WORK(&bp->sp_task, bnx2x_sp_task); + INIT_WORK(&bp->reset_task, bnx2x_reset_task); +#else + INIT_WORK(&bp->sp_task, bnx2x_sp_task, bp); + INIT_WORK(&bp->reset_task, bnx2x_reset_task, bp); +#endif +#if (LINUX_VERSION_CODE < 0x20618) /* ! BNX2X_UPSTREAM */ + bp->sp_running = 0; +#endif + + rc = bnx2x_get_hwinfo(bp); + + /* need to reset chip if undi was active */ + if (!BP_NOMCP(bp)) + bnx2x_undi_unload(bp); + + if (CHIP_REV_IS_FPGA(bp)) + printk(KERN_ERR PFX "FPGA detected\n"); + + if (BP_NOMCP(bp) && (func == 0)) + printk(KERN_ERR PFX + "MCP disabled, must load devices in order!\n"); + + /* Set multi queue mode and priority mapping */ + switch (multi_mode) { + case ETH_RSS_MODE_DISABLED: + case ETH_RSS_MODE_REGULAR: + bp->multi_mode = multi_mode; + for (i = 0; i < BNX2X_MAX_PRIORITY; i++) + bp->pri_map[i] = 0; + break; + case ETH_RSS_MODE_VLAN_PRI: + case ETH_RSS_MODE_E1HOV_PRI: + case ETH_RSS_MODE_IP_DSCP: + bp->multi_mode = multi_mode; + for (i = 0; i < BNX2X_MAX_PRIORITY; i++) + bp->pri_map[i] = ((pri_map & (0xf << i*4)) >> i*4); + break; + default: + bp->multi_mode = ETH_RSS_MODE_DISABLED; + for (i = 0; i < BNX2X_MAX_PRIORITY; i++) + bp->pri_map[i] = 0; + break; + } + + /* Set TPA flags */ + if (disable_tpa) { + bp->flags &= ~TPA_ENABLE_FLAG; +#if (LINUX_VERSION_CODE >= 0x2061a) /* BNX2X_UPSTREAM */ + bp->dev->features &= ~NETIF_F_LRO; +#endif + } else { + bp->flags |= TPA_ENABLE_FLAG; +#if (LINUX_VERSION_CODE >= 0x2061a) /* BNX2X_UPSTREAM */ + bp->dev->features |= NETIF_F_LRO; +#endif + } + +#if (LINUX_VERSION_CODE < 0x20618) /* ! BNX2X_UPSTREAM */ + /* MCP workaround */ + if (BP_NOMCP(bp)) { + /* [0x24c0]table size: + PCI_REG_GRC_PTR(func)->pci_msix_control = 0x10; */ + REG_WR(bp, 0x24c0, 0x10); + /* [0x24c4]table pointer: + PCI_REG_GRC_PTR(func)->pci_msix_tbl_off_bir = + 0x440000 + 0x2000*func; */ + REG_WR(bp, 0x24c4, 0x440000 + 0x2000*func); + /* [0x24c8]PBA pointer: + PCI_REG_GRC_PTR(func)->pci_msix_pba_off_bir = + 0x441800 + 0x2000*func; */ + REG_WR(bp, 0x24c8, 0x441800 + 0x2000*func); + } +#endif + + bp->tx_ring_size = MAX_TX_AVAIL; + bp->rx_ring_size = MAX_RX_AVAIL; + + bp->rx_csum = 1; + + bp->tx_ticks = 50; + bp->rx_ticks = 25; + + timer_interval = (CHIP_REV_IS_SLOW(bp) ? 5*HZ : HZ); + bp->current_interval = (poll ? poll : timer_interval); + + init_timer(&bp->timer); + bp->timer.expires = jiffies + bp->current_interval; + bp->timer.data = (unsigned long) bp; + bp->timer.function = bnx2x_timer; + + return rc; +} + +/* + * ethtool service functions + */ + +/* All ethtool functions called with rtnl_lock */ + +static int bnx2x_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) +{ + struct bnx2x *bp = netdev_priv(dev); + + cmd->supported = bp->port.supported; + cmd->advertising = bp->port.advertising; + + if (netif_carrier_ok(dev)) { + cmd->speed = bp->link_vars.line_speed; + cmd->duplex = bp->link_vars.duplex; + } else { + cmd->speed = bp->link_params.req_line_speed; + cmd->duplex = bp->link_params.req_duplex; + } + if (IS_E1HMF(bp)) { + u16 vn_max_rate; + + vn_max_rate = ((bp->mf_config & FUNC_MF_CFG_MAX_BW_MASK) >> + FUNC_MF_CFG_MAX_BW_SHIFT) * 100; + if (vn_max_rate < cmd->speed) + cmd->speed = vn_max_rate; + } + + if (bp->link_params.switch_cfg == SWITCH_CFG_10G) { + u32 ext_phy_type = + XGXS_EXT_PHY_TYPE(bp->link_params.ext_phy_config); + + switch (ext_phy_type) { + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: + cmd->port = PORT_FIBRE; + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: + cmd->port = PORT_TP; + break; + + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE: + BNX2X_ERR("XGXS PHY Failure detected 0x%x\n", + bp->link_params.ext_phy_config); + break; + + default: + DP(NETIF_MSG_LINK, "BAD XGXS ext_phy_config 0x%x\n", + bp->link_params.ext_phy_config); + break; + } + } else + cmd->port = PORT_TP; + + cmd->phy_address = bp->port.phy_addr; + cmd->transceiver = XCVR_INTERNAL; + + if (bp->link_params.req_line_speed == SPEED_AUTO_NEG) + cmd->autoneg = AUTONEG_ENABLE; + else + cmd->autoneg = AUTONEG_DISABLE; + + cmd->maxtxpkt = 0; + cmd->maxrxpkt = 0; + + DP(NETIF_MSG_LINK, "ethtool_cmd: cmd %d\n" + DP_LEVEL " supported 0x%x advertising 0x%x speed %d\n" + DP_LEVEL " duplex %d port %d phy_address %d transceiver %d\n" + DP_LEVEL " autoneg %d maxtxpkt %d maxrxpkt %d\n", + cmd->cmd, cmd->supported, cmd->advertising, cmd->speed, + cmd->duplex, cmd->port, cmd->phy_address, cmd->transceiver, + cmd->autoneg, cmd->maxtxpkt, cmd->maxrxpkt); + + return 0; +} + +static int bnx2x_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) +{ + struct bnx2x *bp = netdev_priv(dev); + u32 advertising; + + if (IS_E1HMF(bp)) + return 0; + + DP(NETIF_MSG_LINK, "ethtool_cmd: cmd %d\n" + DP_LEVEL " supported 0x%x advertising 0x%x speed %d\n" + DP_LEVEL " duplex %d port %d phy_address %d transceiver %d\n" + DP_LEVEL " autoneg %d maxtxpkt %d maxrxpkt %d\n", + cmd->cmd, cmd->supported, cmd->advertising, cmd->speed, + cmd->duplex, cmd->port, cmd->phy_address, cmd->transceiver, + cmd->autoneg, cmd->maxtxpkt, cmd->maxrxpkt); + + if (cmd->autoneg == AUTONEG_ENABLE) { + if (!(bp->port.supported & SUPPORTED_Autoneg)) { + DP(NETIF_MSG_LINK, "Autoneg not supported\n"); + return -EINVAL; + } + + /* advertise the requested speed and duplex if supported */ + cmd->advertising &= bp->port.supported; + + bp->link_params.req_line_speed = SPEED_AUTO_NEG; + bp->link_params.req_duplex = DUPLEX_FULL; + bp->port.advertising |= (ADVERTISED_Autoneg | + cmd->advertising); + + } else { /* forced speed */ + /* advertise the requested speed and duplex if supported */ + switch (cmd->speed) { + case SPEED_10: + if (cmd->duplex == DUPLEX_FULL) { + if (!(bp->port.supported & + SUPPORTED_10baseT_Full)) { + DP(NETIF_MSG_LINK, + "10M full not supported\n"); + return -EINVAL; + } + + advertising = (ADVERTISED_10baseT_Full | + ADVERTISED_TP); + } else { + if (!(bp->port.supported & + SUPPORTED_10baseT_Half)) { + DP(NETIF_MSG_LINK, + "10M half not supported\n"); + return -EINVAL; + } + + advertising = (ADVERTISED_10baseT_Half | + ADVERTISED_TP); + } + break; + + case SPEED_100: + if (cmd->duplex == DUPLEX_FULL) { + if (!(bp->port.supported & + SUPPORTED_100baseT_Full)) { + DP(NETIF_MSG_LINK, + "100M full not supported\n"); + return -EINVAL; + } + + advertising = (ADVERTISED_100baseT_Full | + ADVERTISED_TP); + } else { + if (!(bp->port.supported & + SUPPORTED_100baseT_Half)) { + DP(NETIF_MSG_LINK, + "100M half not supported\n"); + return -EINVAL; + } + + advertising = (ADVERTISED_100baseT_Half | + ADVERTISED_TP); + } + break; + + case SPEED_1000: + if (cmd->duplex != DUPLEX_FULL) { + DP(NETIF_MSG_LINK, "1G half not supported\n"); + return -EINVAL; + } + + if (!(bp->port.supported & SUPPORTED_1000baseT_Full)) { + DP(NETIF_MSG_LINK, "1G full not supported\n"); + return -EINVAL; + } + + advertising = (ADVERTISED_1000baseT_Full | + ADVERTISED_TP); + break; + + case SPEED_2500: + if (cmd->duplex != DUPLEX_FULL) { + DP(NETIF_MSG_LINK, + "2.5G half not supported\n"); + return -EINVAL; + } + + if (!(bp->port.supported & SUPPORTED_2500baseX_Full)) { + DP(NETIF_MSG_LINK, + "2.5G full not supported\n"); + return -EINVAL; + } + + advertising = (ADVERTISED_2500baseX_Full | + ADVERTISED_TP); + break; + + case SPEED_10000: + if (cmd->duplex != DUPLEX_FULL) { + DP(NETIF_MSG_LINK, "10G half not supported\n"); + return -EINVAL; + } + + if (!(bp->port.supported & SUPPORTED_10000baseT_Full)) { + DP(NETIF_MSG_LINK, "10G full not supported\n"); + return -EINVAL; + } + + advertising = (ADVERTISED_10000baseT_Full | + ADVERTISED_FIBRE); + break; + + default: + DP(NETIF_MSG_LINK, "Unsupported speed\n"); + return -EINVAL; + } + + bp->link_params.req_line_speed = cmd->speed; + bp->link_params.req_duplex = cmd->duplex; + bp->port.advertising = advertising; + } + + DP(NETIF_MSG_LINK, "req_line_speed %d\n" + DP_LEVEL " req_duplex %d advertising 0x%x\n", + bp->link_params.req_line_speed, bp->link_params.req_duplex, + bp->port.advertising); + + if (netif_running(dev)) { + bnx2x_stats_handle(bp, STATS_EVENT_STOP); + bnx2x_link_set(bp); + } + + return 0; +} + +#define PHY_FW_VER_LEN 10 + +static void bnx2x_get_drvinfo(struct net_device *dev, + struct ethtool_drvinfo *info) +{ + struct bnx2x *bp = netdev_priv(dev); + u8 phy_fw_ver[PHY_FW_VER_LEN]; + + strcpy(info->driver, DRV_MODULE_NAME); + strcpy(info->version, DRV_MODULE_VERSION); + + phy_fw_ver[0] = '\0'; + if (bp->port.pmf) { + bnx2x_acquire_phy_lock(bp); + bnx2x_get_ext_phy_fw_version(&bp->link_params, + (bp->state != BNX2X_STATE_CLOSED), + phy_fw_ver, PHY_FW_VER_LEN); + bnx2x_release_phy_lock(bp); + } + + snprintf(info->fw_version, 32, "BC:%d.%d.%d%s%s", + (bp->common.bc_ver & 0xff0000) >> 16, + (bp->common.bc_ver & 0xff00) >> 8, + (bp->common.bc_ver & 0xff), + ((phy_fw_ver[0] != '\0') ? " PHY:" : ""), phy_fw_ver); + strcpy(info->bus_info, pci_name(bp->pdev)); + info->n_stats = BNX2X_NUM_STATS; + info->testinfo_len = BNX2X_NUM_TESTS; + info->eedump_len = bp->common.flash_size; + info->regdump_len = 0; +} + +static void bnx2x_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) +{ + struct bnx2x *bp = netdev_priv(dev); + + if (bp->flags & NO_WOL_FLAG) { + wol->supported = 0; + wol->wolopts = 0; + } else { + wol->supported = WAKE_MAGIC; + if (bp->wol) + wol->wolopts = WAKE_MAGIC; + else + wol->wolopts = 0; + } + memset(&wol->sopass, 0, sizeof(wol->sopass)); +} + +static int bnx2x_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) +{ + struct bnx2x *bp = netdev_priv(dev); + + if (wol->wolopts & ~WAKE_MAGIC) + return -EINVAL; + + if (wol->wolopts & WAKE_MAGIC) { + if (bp->flags & NO_WOL_FLAG) + return -EINVAL; + + bp->wol = 1; + } else + bp->wol = 0; + + return 0; +} + +static u32 bnx2x_get_msglevel(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + + return bp->msglevel; +} + +static void bnx2x_set_msglevel(struct net_device *dev, u32 level) +{ + struct bnx2x *bp = netdev_priv(dev); + + if (capable(CAP_NET_ADMIN)) +#ifdef BNX2X_STOP_ON_ERROR + bp->msglevel = (0xf70f7 | level); +#else + bp->msglevel = level; +#endif +} + +static int bnx2x_nway_reset(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + + if (!bp->port.pmf) + return 0; + + if (netif_running(dev)) { + bnx2x_stats_handle(bp, STATS_EVENT_STOP); + bnx2x_link_set(bp); + } + + return 0; +} + +#if (LINUX_VERSION_CODE >= 0x020418) /* BNX2X_UPSTREAM */ +static int bnx2x_get_eeprom_len(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + + return bp->common.flash_size; +} +#endif + +static int bnx2x_acquire_nvram_lock(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + int count, i; + u32 val = 0; + + /* adjust timeout for emulation/FPGA */ + count = NVRAM_TIMEOUT_COUNT; + if (CHIP_REV_IS_SLOW(bp)) + count *= 100; + + /* request access to nvram interface */ + REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB, + (MCPR_NVM_SW_ARB_ARB_REQ_SET1 << port)); + + for (i = 0; i < count*10; i++) { + val = REG_RD(bp, MCP_REG_MCPR_NVM_SW_ARB); + if (val & (MCPR_NVM_SW_ARB_ARB_ARB1 << port)) + break; + + udelay(5); + } + + if (!(val & (MCPR_NVM_SW_ARB_ARB_ARB1 << port))) { + DP(BNX2X_MSG_NVM, "cannot get access to nvram interface\n"); + return -EBUSY; + } + + return 0; +} + +static int bnx2x_release_nvram_lock(struct bnx2x *bp) +{ + int port = BP_PORT(bp); + int count, i; + u32 val = 0; + + /* adjust timeout for emulation/FPGA */ + count = NVRAM_TIMEOUT_COUNT; + if (CHIP_REV_IS_SLOW(bp)) + count *= 100; + + /* relinquish nvram interface */ + REG_WR(bp, MCP_REG_MCPR_NVM_SW_ARB, + (MCPR_NVM_SW_ARB_ARB_REQ_CLR1 << port)); + + for (i = 0; i < count*10; i++) { + val = REG_RD(bp, MCP_REG_MCPR_NVM_SW_ARB); + if (!(val & (MCPR_NVM_SW_ARB_ARB_ARB1 << port))) + break; + + udelay(5); + } + + if (val & (MCPR_NVM_SW_ARB_ARB_ARB1 << port)) { + DP(BNX2X_MSG_NVM, "cannot free access to nvram interface\n"); + return -EBUSY; + } + + return 0; +} + +static void bnx2x_enable_nvram_access(struct bnx2x *bp) +{ + u32 val; + + val = REG_RD(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE); + + /* enable both bits, even on read */ + REG_WR(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE, + (val | MCPR_NVM_ACCESS_ENABLE_EN | + MCPR_NVM_ACCESS_ENABLE_WR_EN)); +} + +static void bnx2x_disable_nvram_access(struct bnx2x *bp) +{ + u32 val; + + val = REG_RD(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE); + + /* disable both bits, even after read */ + REG_WR(bp, MCP_REG_MCPR_NVM_ACCESS_ENABLE, + (val & ~(MCPR_NVM_ACCESS_ENABLE_EN | + MCPR_NVM_ACCESS_ENABLE_WR_EN))); +} + +static int bnx2x_nvram_read_dword(struct bnx2x *bp, u32 offset, u32 *ret_val, + u32 cmd_flags) +{ + int count, i, rc; + u32 val; + + /* build the command word */ + cmd_flags |= MCPR_NVM_COMMAND_DOIT; + + /* need to clear DONE bit separately */ + REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, MCPR_NVM_COMMAND_DONE); + + /* address of the NVRAM to read from */ + REG_WR(bp, MCP_REG_MCPR_NVM_ADDR, + (offset & MCPR_NVM_ADDR_NVM_ADDR_VALUE)); + + /* issue a read command */ + REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, cmd_flags); + + /* adjust timeout for emulation/FPGA */ + count = NVRAM_TIMEOUT_COUNT; + if (CHIP_REV_IS_SLOW(bp)) + count *= 100; + + /* wait for completion */ + *ret_val = 0; + rc = -EBUSY; + for (i = 0; i < count; i++) { + udelay(5); + val = REG_RD(bp, MCP_REG_MCPR_NVM_COMMAND); + + if (val & MCPR_NVM_COMMAND_DONE) { + val = REG_RD(bp, MCP_REG_MCPR_NVM_READ); + /* we read nvram data in cpu order + * but ethtool sees it as an array of bytes + * converting to big-endian will do the work */ + val = cpu_to_be32(val); + *ret_val = val; + rc = 0; + break; + } + } + + return rc; +} + +static int bnx2x_nvram_read(struct bnx2x *bp, u32 offset, u8 *ret_buf, + int buf_size) +{ + int rc; + u32 cmd_flags; + u32 val; + + if ((offset & 0x03) || (buf_size & 0x03) || (buf_size == 0)) { + DP(BNX2X_MSG_NVM, + "Invalid parameter: offset 0x%x buf_size 0x%x\n", + offset, buf_size); + return -EINVAL; + } + + if (offset + buf_size > bp->common.flash_size) { + DP(BNX2X_MSG_NVM, "Invalid parameter: offset (0x%x) +" + " buf_size (0x%x) > flash_size (0x%x)\n", + offset, buf_size, bp->common.flash_size); + return -EINVAL; + } + + /* request access to nvram interface */ + rc = bnx2x_acquire_nvram_lock(bp); + if (rc) + return rc; + + /* enable access to nvram interface */ + bnx2x_enable_nvram_access(bp); + + /* read the first word(s) */ + cmd_flags = MCPR_NVM_COMMAND_FIRST; + while ((buf_size > sizeof(u32)) && (rc == 0)) { + rc = bnx2x_nvram_read_dword(bp, offset, &val, cmd_flags); + memcpy(ret_buf, &val, 4); + + /* advance to the next dword */ + offset += sizeof(u32); + ret_buf += sizeof(u32); + buf_size -= sizeof(u32); + cmd_flags = 0; + } + + if (rc == 0) { + cmd_flags |= MCPR_NVM_COMMAND_LAST; + rc = bnx2x_nvram_read_dword(bp, offset, &val, cmd_flags); + memcpy(ret_buf, &val, 4); + } + + /* disable access to nvram interface */ + bnx2x_disable_nvram_access(bp); + bnx2x_release_nvram_lock(bp); + + return rc; +} + +static int bnx2x_get_eeprom(struct net_device *dev, + struct ethtool_eeprom *eeprom, u8 *eebuf) +{ + struct bnx2x *bp = netdev_priv(dev); + int rc; + + DP(BNX2X_MSG_NVM, "ethtool_eeprom: cmd %d\n" + DP_LEVEL " magic 0x%x offset 0x%x (%d) len 0x%x (%d)\n", + eeprom->cmd, eeprom->magic, eeprom->offset, eeprom->offset, + eeprom->len, eeprom->len); + + /* parameters already validated in ethtool_get_eeprom */ + + rc = bnx2x_nvram_read(bp, eeprom->offset, eebuf, eeprom->len); + + return rc; +} + +static int bnx2x_nvram_write_dword(struct bnx2x *bp, u32 offset, u32 val, + u32 cmd_flags) +{ + int count, i, rc; + + /* build the command word */ + cmd_flags |= MCPR_NVM_COMMAND_DOIT | MCPR_NVM_COMMAND_WR; + + /* need to clear DONE bit separately */ + REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, MCPR_NVM_COMMAND_DONE); + + /* write the data */ + REG_WR(bp, MCP_REG_MCPR_NVM_WRITE, val); + + /* address of the NVRAM to write to */ + REG_WR(bp, MCP_REG_MCPR_NVM_ADDR, + (offset & MCPR_NVM_ADDR_NVM_ADDR_VALUE)); + + /* issue the write command */ + REG_WR(bp, MCP_REG_MCPR_NVM_COMMAND, cmd_flags); + + /* adjust timeout for emulation/FPGA */ + count = NVRAM_TIMEOUT_COUNT; + if (CHIP_REV_IS_SLOW(bp)) + count *= 100; + + /* wait for completion */ + rc = -EBUSY; + for (i = 0; i < count; i++) { + udelay(5); + val = REG_RD(bp, MCP_REG_MCPR_NVM_COMMAND); + if (val & MCPR_NVM_COMMAND_DONE) { + rc = 0; + break; + } + } + + return rc; +} + +#define BYTE_OFFSET(offset) (8 * (offset & 0x03)) + +static int bnx2x_nvram_write1(struct bnx2x *bp, u32 offset, u8 *data_buf, + int buf_size) +{ + int rc; + u32 cmd_flags; + u32 align_offset; + u32 val; + + if (offset + buf_size > bp->common.flash_size) { + DP(BNX2X_MSG_NVM, "Invalid parameter: offset (0x%x) +" + " buf_size (0x%x) > flash_size (0x%x)\n", + offset, buf_size, bp->common.flash_size); + return -EINVAL; + } + + /* request access to nvram interface */ + rc = bnx2x_acquire_nvram_lock(bp); + if (rc) + return rc; + + /* enable access to nvram interface */ + bnx2x_enable_nvram_access(bp); + + cmd_flags = (MCPR_NVM_COMMAND_FIRST | MCPR_NVM_COMMAND_LAST); + align_offset = (offset & ~0x03); + rc = bnx2x_nvram_read_dword(bp, align_offset, &val, cmd_flags); + + if (rc == 0) { + val &= ~(0xff << BYTE_OFFSET(offset)); + val |= (*data_buf << BYTE_OFFSET(offset)); + + /* nvram data is returned as an array of bytes + * convert it back to cpu order */ + val = be32_to_cpu(val); + + rc = bnx2x_nvram_write_dword(bp, align_offset, val, + cmd_flags); + } + + /* disable access to nvram interface */ + bnx2x_disable_nvram_access(bp); + bnx2x_release_nvram_lock(bp); + + return rc; +} + +static int bnx2x_nvram_write(struct bnx2x *bp, u32 offset, u8 *data_buf, + int buf_size) +{ + int rc; + u32 cmd_flags; + u32 val; + u32 written_so_far; + + if (buf_size == 1) /* ethtool */ + return bnx2x_nvram_write1(bp, offset, data_buf, buf_size); + + if ((offset & 0x03) || (buf_size & 0x03) || (buf_size == 0)) { + DP(BNX2X_MSG_NVM, + "Invalid parameter: offset 0x%x buf_size 0x%x\n", + offset, buf_size); + return -EINVAL; + } + + if (offset + buf_size > bp->common.flash_size) { + DP(BNX2X_MSG_NVM, "Invalid parameter: offset (0x%x) +" + " buf_size (0x%x) > flash_size (0x%x)\n", + offset, buf_size, bp->common.flash_size); + return -EINVAL; + } + + /* request access to nvram interface */ + rc = bnx2x_acquire_nvram_lock(bp); + if (rc) + return rc; + + /* enable access to nvram interface */ + bnx2x_enable_nvram_access(bp); + + written_so_far = 0; + cmd_flags = MCPR_NVM_COMMAND_FIRST; + while ((written_so_far < buf_size) && (rc == 0)) { + if (written_so_far == (buf_size - sizeof(u32))) + cmd_flags |= MCPR_NVM_COMMAND_LAST; + else if (((offset + 4) % NVRAM_PAGE_SIZE) == 0) + cmd_flags |= MCPR_NVM_COMMAND_LAST; + else if ((offset % NVRAM_PAGE_SIZE) == 0) + cmd_flags |= MCPR_NVM_COMMAND_FIRST; + + memcpy(&val, data_buf, 4); + + rc = bnx2x_nvram_write_dword(bp, offset, val, cmd_flags); + + /* advance to the next dword */ + offset += sizeof(u32); + data_buf += sizeof(u32); + written_so_far += sizeof(u32); + cmd_flags = 0; + } + + /* disable access to nvram interface */ + bnx2x_disable_nvram_access(bp); + bnx2x_release_nvram_lock(bp); + + return rc; +} + +static int bnx2x_set_eeprom(struct net_device *dev, + struct ethtool_eeprom *eeprom, u8 *eebuf) +{ + struct bnx2x *bp = netdev_priv(dev); + int rc; + + DP(BNX2X_MSG_NVM, "ethtool_eeprom: cmd %d\n" + DP_LEVEL " magic 0x%x offset 0x%x (%d) len 0x%x (%d)\n", + eeprom->cmd, eeprom->magic, eeprom->offset, eeprom->offset, + eeprom->len, eeprom->len); + + /* parameters already validated in ethtool_set_eeprom */ + + /* If the magic number is PHY (0x00504859) upgrade the PHY FW */ + if (eeprom->magic == 0x00504859) + if (bp->port.pmf) { + + bnx2x_acquire_phy_lock(bp); + rc = bnx2x_flash_download(bp, BP_PORT(bp), + bp->link_params.ext_phy_config, + (bp->state != BNX2X_STATE_CLOSED), + eebuf, eeprom->len); + if ((bp->state == BNX2X_STATE_OPEN) || + (bp->state == BNX2X_STATE_DISABLED)) { + rc |= bnx2x_link_reset(&bp->link_params, + &bp->link_vars); + rc |= bnx2x_phy_init(&bp->link_params, + &bp->link_vars); + } + bnx2x_release_phy_lock(bp); + + } else /* Only the PMF can access the PHY */ + return -EINVAL; + else + rc = bnx2x_nvram_write(bp, eeprom->offset, eebuf, eeprom->len); + + return rc; +} + +static int bnx2x_get_coalesce(struct net_device *dev, + struct ethtool_coalesce *coal) +{ + struct bnx2x *bp = netdev_priv(dev); + + memset(coal, 0, sizeof(struct ethtool_coalesce)); + + coal->rx_coalesce_usecs = bp->rx_ticks; + coal->tx_coalesce_usecs = bp->tx_ticks; + + return 0; +} + +static int bnx2x_set_coalesce(struct net_device *dev, + struct ethtool_coalesce *coal) +{ + struct bnx2x *bp = netdev_priv(dev); + + bp->rx_ticks = (u16) coal->rx_coalesce_usecs; + if (bp->rx_ticks > 3000) + bp->rx_ticks = 3000; + + bp->tx_ticks = (u16) coal->tx_coalesce_usecs; + if (bp->tx_ticks > 0x3000) + bp->tx_ticks = 0x3000; + + if (netif_running(dev)) + bnx2x_update_coalesce(bp); + + return 0; +} + +static void bnx2x_get_ringparam(struct net_device *dev, + struct ethtool_ringparam *ering) +{ + struct bnx2x *bp = netdev_priv(dev); + + ering->rx_max_pending = MAX_RX_AVAIL; + ering->rx_mini_max_pending = 0; + ering->rx_jumbo_max_pending = 0; + + ering->rx_pending = bp->rx_ring_size; + ering->rx_mini_pending = 0; + ering->rx_jumbo_pending = 0; + + ering->tx_max_pending = MAX_TX_AVAIL; + ering->tx_pending = bp->tx_ring_size; +} + +static int bnx2x_set_ringparam(struct net_device *dev, + struct ethtool_ringparam *ering) +{ + struct bnx2x *bp = netdev_priv(dev); + int rc = 0; + + if ((ering->rx_pending > MAX_RX_AVAIL) || + (ering->tx_pending > MAX_TX_AVAIL) || + (ering->tx_pending <= MAX_SKB_FRAGS + 4)) + return -EINVAL; + + bp->rx_ring_size = ering->rx_pending; + bp->tx_ring_size = ering->tx_pending; + + if (netif_running(dev)) { + bnx2x_nic_unload(bp, UNLOAD_NORMAL); + rc = bnx2x_nic_load(bp, LOAD_NORMAL); + } + + return rc; +} + +static void bnx2x_get_pauseparam(struct net_device *dev, + struct ethtool_pauseparam *epause) +{ + struct bnx2x *bp = netdev_priv(dev); + + epause->autoneg = (bp->link_params.req_flow_ctrl == FLOW_CTRL_AUTO) && + (bp->link_params.req_line_speed == SPEED_AUTO_NEG); + + epause->rx_pause = ((bp->link_vars.flow_ctrl & FLOW_CTRL_RX) == + FLOW_CTRL_RX); + epause->tx_pause = ((bp->link_vars.flow_ctrl & FLOW_CTRL_TX) == + FLOW_CTRL_TX); + + DP(NETIF_MSG_LINK, "ethtool_pauseparam: cmd %d\n" + DP_LEVEL " autoneg %d rx_pause %d tx_pause %d\n", + epause->cmd, epause->autoneg, epause->rx_pause, epause->tx_pause); +} + +static int bnx2x_set_pauseparam(struct net_device *dev, + struct ethtool_pauseparam *epause) +{ + struct bnx2x *bp = netdev_priv(dev); + + if (IS_E1HMF(bp)) + return 0; + + DP(NETIF_MSG_LINK, "ethtool_pauseparam: cmd %d\n" + DP_LEVEL " autoneg %d rx_pause %d tx_pause %d\n", + epause->cmd, epause->autoneg, epause->rx_pause, epause->tx_pause); + + bp->link_params.req_flow_ctrl = FLOW_CTRL_AUTO; + + if (epause->rx_pause) + bp->link_params.req_flow_ctrl |= FLOW_CTRL_RX; + + if (epause->tx_pause) + bp->link_params.req_flow_ctrl |= FLOW_CTRL_TX; + + if (bp->link_params.req_flow_ctrl == FLOW_CTRL_AUTO) + bp->link_params.req_flow_ctrl = FLOW_CTRL_NONE; + + if (epause->autoneg) { + if (!(bp->port.supported & SUPPORTED_Autoneg)) { + DP(NETIF_MSG_LINK, "autoneg not supported\n"); + return -EINVAL; + } + + if (bp->link_params.req_line_speed == SPEED_AUTO_NEG) + bp->link_params.req_flow_ctrl = FLOW_CTRL_AUTO; + } + + DP(NETIF_MSG_LINK, + "req_flow_ctrl 0x%x\n", bp->link_params.req_flow_ctrl); + + if (netif_running(dev)) { + bnx2x_stats_handle(bp, STATS_EVENT_STOP); + bnx2x_link_set(bp); + } + + return 0; +} + +#if (LINUX_VERSION_CODE >= 0x02061a) /* BNX2X_UPSTREAM */ +static int bnx2x_set_flags(struct net_device *dev, u32 data) +{ + struct bnx2x *bp = netdev_priv(dev); + int changed = 0; + int rc = 0; + + /* TPA requires Rx CSUM offloading */ + if ((data & ETH_FLAG_LRO) && bp->rx_csum) { + if (!(dev->features & NETIF_F_LRO)) { + dev->features |= NETIF_F_LRO; + bp->flags |= TPA_ENABLE_FLAG; + changed = 1; + } + + } else if (dev->features & NETIF_F_LRO) { + dev->features &= ~NETIF_F_LRO; + bp->flags &= ~TPA_ENABLE_FLAG; + changed = 1; + } + + if (changed && netif_running(dev)) { + bnx2x_nic_unload(bp, UNLOAD_NORMAL); + rc = bnx2x_nic_load(bp, LOAD_NORMAL); + } + + return rc; +} +#endif + +static u32 bnx2x_get_rx_csum(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + + return bp->rx_csum; +} + +static int bnx2x_set_rx_csum(struct net_device *dev, u32 data) +{ + struct bnx2x *bp = netdev_priv(dev); + int rc = 0; + + bp->rx_csum = data; + + /* Disable TPA, when Rx CSUM is disabled. Otherwise all + TPA'ed packets will be discarded due to wrong TCP CSUM */ + if (!data) { +#if (LINUX_VERSION_CODE >= 0x02061a) /* BNX2X_UPSTREAM */ + u32 flags = ethtool_op_get_flags(dev); + + rc = bnx2x_set_flags(dev, (flags & ~ETH_FLAG_LRO)); +#else + bp->flags &= ~TPA_ENABLE_FLAG; + if (netif_running(dev)) { + bnx2x_nic_unload(bp, UNLOAD_NORMAL); + rc = bnx2x_nic_load(bp, LOAD_NORMAL); + } +#endif + } + + return rc; +} + +#ifdef NETIF_F_TSO /* BNX2X_UPSTREAM */ +static int bnx2x_set_tso(struct net_device *dev, u32 data) +{ + if (data) { + dev->features |= (NETIF_F_TSO | NETIF_F_TSO_ECN); +#ifdef NETIF_F_TSO6 /* BNX2X_UPSTREAM */ + dev->features |= NETIF_F_TSO6; +#endif + } else { + dev->features &= ~(NETIF_F_TSO | NETIF_F_TSO_ECN); +#ifdef NETIF_F_TSO6 /* BNX2X_UPSTREAM */ + dev->features &= ~NETIF_F_TSO6; +#endif + } + + return 0; +} +#endif + +static const struct { + char string[ETH_GSTRING_LEN]; +} bnx2x_tests_str_arr[BNX2X_NUM_TESTS] = { + { "register_test (offline)" }, + { "memory_test (offline)" }, + { "loopback_test (offline)" }, + { "nvram_test (online)" }, + { "interrupt_test (online)" }, + { "link_test (online)" }, + { "idle check (online)" }, + { "MC errors (online)" } +}; + +static int bnx2x_self_test_count(struct net_device *dev) +{ + return BNX2X_NUM_TESTS; +} + +static int bnx2x_test_registers(struct bnx2x *bp) +{ + int idx, i, rc = -ENODEV; + u32 wr_val = 0; + int port = BP_PORT(bp); + static const struct { + u32 offset0; + u32 offset1; + u32 mask; + } reg_tbl[] = { +/* 0 */ { BRB1_REG_PAUSE_LOW_THRESHOLD_0, 4, 0x000003ff }, + { DORQ_REG_DB_ADDR0, 4, 0xffffffff }, + { HC_REG_AGG_INT_0, 4, 0x000003ff }, + { PBF_REG_MAC_IF0_ENABLE, 4, 0x00000001 }, + { PBF_REG_P0_INIT_CRD, 4, 0x000007ff }, + { PRS_REG_CID_PORT_0, 4, 0x00ffffff }, + { PXP2_REG_PSWRQ_CDU0_L2P, 4, 0x000fffff }, + { PXP2_REG_RQ_CDU0_EFIRST_MEM_ADDR, 8, 0x0003ffff }, + { PXP2_REG_PSWRQ_TM0_L2P, 4, 0x000fffff }, + { PXP2_REG_RQ_USDM0_EFIRST_MEM_ADDR, 8, 0x0003ffff }, +/* 10 */ { PXP2_REG_PSWRQ_TSDM0_L2P, 4, 0x000fffff }, + { QM_REG_CONNNUM_0, 4, 0x000fffff }, + { TM_REG_LIN0_MAX_ACTIVE_CID, 4, 0x0003ffff }, + { SRC_REG_KEYRSS0_0, 40, 0xffffffff }, + { SRC_REG_KEYRSS0_7, 40, 0xffffffff }, + { XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD00, 4, 0x00000001 }, + { XCM_REG_WU_DA_CNT_CMD00, 4, 0x00000003 }, + { XCM_REG_GLB_DEL_ACK_MAX_CNT_0, 4, 0x000000ff }, + { NIG_REG_EGRESS_MNG0_FIFO, 20, 0xffffffff }, + { NIG_REG_LLH0_T_BIT, 4, 0x00000001 }, +/* 20 */ { NIG_REG_EMAC0_IN_EN, 4, 0x00000001 }, + { NIG_REG_BMAC0_IN_EN, 4, 0x00000001 }, + { NIG_REG_XCM0_OUT_EN, 4, 0x00000001 }, + { NIG_REG_BRB0_OUT_EN, 4, 0x00000001 }, + { NIG_REG_LLH0_XCM_MASK, 4, 0x00000007 }, + { NIG_REG_LLH0_ACPI_PAT_6_LEN, 68, 0x000000ff }, + { NIG_REG_LLH0_ACPI_PAT_0_CRC, 68, 0xffffffff }, + { NIG_REG_LLH0_DEST_MAC_0_0, 160, 0xffffffff }, + { NIG_REG_LLH0_DEST_IP_0_1, 160, 0xffffffff }, + { NIG_REG_LLH0_IPV4_IPV6_0, 160, 0x00000001 }, +/* 30 */ { NIG_REG_LLH0_DEST_UDP_0, 160, 0x0000ffff }, + { NIG_REG_LLH0_DEST_TCP_0, 160, 0x0000ffff }, + { NIG_REG_LLH0_VLAN_ID_0, 160, 0x00000fff }, + { NIG_REG_XGXS_SERDES0_MODE_SEL, 4, 0x00000001 }, + { NIG_REG_LED_CONTROL_OVERRIDE_TRAFFIC_P0, 4, 0x00000001 }, + { NIG_REG_STATUS_INTERRUPT_PORT0, 4, 0x07ffffff }, + { NIG_REG_XGXS0_CTRL_EXTREMOTEMDIOST, 24, 0x00000001 }, + { NIG_REG_SERDES0_CTRL_PHY_ADDR, 16, 0x0000001f }, + + { 0xffffffff, 0, 0x00000000 } + }; + + if (!netif_running(bp->dev)) + return rc; + + /* Repeat the test twice: + First by writing 0x00000000, second by writing 0xffffffff */ + for (idx = 0; idx < 2; idx++) { + + switch (idx) { + case 0: + wr_val = 0; + break; + case 1: + wr_val = 0xffffffff; + break; + } + + for (i = 0; reg_tbl[i].offset0 != 0xffffffff; i++) { + u32 offset, mask, save_val, val; + + offset = reg_tbl[i].offset0 + port*reg_tbl[i].offset1; + mask = reg_tbl[i].mask; + + save_val = REG_RD(bp, offset); + + REG_WR(bp, offset, wr_val); + val = REG_RD(bp, offset); + + /* Restore the original register's value */ + REG_WR(bp, offset, save_val); + + /* verify that value is as expected value */ + if ((val & mask) != (wr_val & mask)) + goto test_reg_exit; + } + } + + rc = 0; + +test_reg_exit: + return rc; +} + +static int bnx2x_test_memory(struct bnx2x *bp) +{ + int i, j, rc = -ENODEV; + u32 val; + static const struct { + u32 offset; + int size; + } mem_tbl[] = { + { CCM_REG_XX_DESCR_TABLE, CCM_REG_XX_DESCR_TABLE_SIZE }, + { CFC_REG_ACTIVITY_COUNTER, CFC_REG_ACTIVITY_COUNTER_SIZE }, + { CFC_REG_LINK_LIST, CFC_REG_LINK_LIST_SIZE }, + { DMAE_REG_CMD_MEM, DMAE_REG_CMD_MEM_SIZE }, + { TCM_REG_XX_DESCR_TABLE, TCM_REG_XX_DESCR_TABLE_SIZE }, + { UCM_REG_XX_DESCR_TABLE, UCM_REG_XX_DESCR_TABLE_SIZE }, + { XCM_REG_XX_DESCR_TABLE, XCM_REG_XX_DESCR_TABLE_SIZE }, + + { 0xffffffff, 0 } + }; + static const struct { + char *name; + u32 offset; + u32 e1_mask; + u32 e1h_mask; + } prty_tbl[] = { + { "CCM_PRTY_STS", CCM_REG_CCM_PRTY_STS, 0x3ffc0, 0 }, + { "CFC_PRTY_STS", CFC_REG_CFC_PRTY_STS, 0x2, 0x2 }, + { "DMAE_PRTY_STS", DMAE_REG_DMAE_PRTY_STS, 0, 0 }, + { "TCM_PRTY_STS", TCM_REG_TCM_PRTY_STS, 0x3ffc0, 0 }, + { "UCM_PRTY_STS", UCM_REG_UCM_PRTY_STS, 0x3ffc0, 0 }, + { "XCM_PRTY_STS", XCM_REG_XCM_PRTY_STS, 0x3ffc1, 0 }, + + { NULL, 0xffffffff, 0, 0 } + }; + + if (!netif_running(bp->dev)) + return rc; + + /* Go through all the memories */ + for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) + for (j = 0; j < mem_tbl[i].size; j++) + REG_RD(bp, mem_tbl[i].offset + j*4); + + /* Check the parity status */ + for (i = 0; prty_tbl[i].offset != 0xffffffff; i++) { + val = REG_RD(bp, prty_tbl[i].offset); + if ((CHIP_IS_E1(bp) && (val & ~(prty_tbl[i].e1_mask))) || + (CHIP_IS_E1H(bp) && (val & ~(prty_tbl[i].e1h_mask)))) { + DP(NETIF_MSG_HW, + "%s is 0x%x\n", prty_tbl[i].name, val); + goto test_mem_exit; + } + } + + rc = 0; + +test_mem_exit: + return rc; +} + +static void bnx2x_wait_for_link(struct bnx2x *bp, u8 link_up) +{ + int cnt = 1000; + + if (link_up) + while (bnx2x_link_test(bp) && cnt--) + msleep(10); +} + +static int bnx2x_run_loopback(struct bnx2x *bp, int loopback_mode, u8 link_up) +{ + unsigned int pkt_size, num_pkts, i; + struct sk_buff *skb; + unsigned char *packet; + struct bnx2x_fastpath *fp = &bp->fp[0]; + u16 tx_start_idx, tx_idx; + u16 rx_start_idx, rx_idx; + u16 pkt_prod; + struct sw_tx_bd *tx_buf; + struct eth_tx_bd *tx_bd; + dma_addr_t mapping; + union eth_rx_cqe *cqe; + u8 cqe_fp_flags; + struct sw_rx_bd *rx_buf; + u16 len; + int rc = -ENODEV; + + if (loopback_mode == BNX2X_MAC_LOOPBACK) { + bp->link_params.loopback_mode = LOOPBACK_BMAC; + bnx2x_acquire_phy_lock(bp); + bnx2x_phy_init(&bp->link_params, &bp->link_vars); + bnx2x_release_phy_lock(bp); + + } else if (loopback_mode == BNX2X_PHY_LOOPBACK) { + bp->link_params.loopback_mode = LOOPBACK_XGXS_10; + bnx2x_acquire_phy_lock(bp); + bnx2x_phy_init(&bp->link_params, &bp->link_vars); + bnx2x_release_phy_lock(bp); + /* wait until link state is restored */ + bnx2x_wait_for_link(bp, link_up); + + } else + return -EINVAL; + + pkt_size = 1514; + skb = netdev_alloc_skb(bp->dev, bp->rx_buf_size); + if (!skb) { + rc = -ENOMEM; + goto test_loopback_exit; + } + packet = skb_put(skb, pkt_size); + memcpy(packet, bp->dev->dev_addr, ETH_ALEN); + memset(packet + ETH_ALEN, 0, (ETH_HLEN - ETH_ALEN)); + for (i = ETH_HLEN; i < pkt_size; i++) + packet[i] = (unsigned char) (i & 0xff); + + num_pkts = 0; + tx_start_idx = le16_to_cpu(*fp->tx_cons_sb); + rx_start_idx = le16_to_cpu(*fp->rx_cons_sb); + + pkt_prod = fp->tx_pkt_prod++; + tx_buf = &fp->tx_buf_ring[TX_BD(pkt_prod)]; + tx_buf->first_bd = fp->tx_bd_prod; + tx_buf->skb = skb; + + tx_bd = &fp->tx_desc_ring[TX_BD(fp->tx_bd_prod)]; + mapping = pci_map_single(bp->pdev, skb->data, + skb_headlen(skb), PCI_DMA_TODEVICE); + tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); + tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); + tx_bd->nbd = cpu_to_le16(1); + tx_bd->nbytes = cpu_to_le16(skb_headlen(skb)); + tx_bd->vlan = cpu_to_le16(pkt_prod); + tx_bd->bd_flags.as_bitfield = (ETH_TX_BD_FLAGS_START_BD | + ETH_TX_BD_FLAGS_END_BD); + tx_bd->general_data = ((UNICAST_ADDRESS << + ETH_TX_BD_ETH_ADDR_TYPE_SHIFT) | 1); + + fp->hw_tx_prods->bds_prod = + cpu_to_le16(le16_to_cpu(fp->hw_tx_prods->bds_prod) + 1); + mb(); /* FW restriction: must not reorder writing nbd and packets */ + fp->hw_tx_prods->packets_prod = + cpu_to_le32(le32_to_cpu(fp->hw_tx_prods->packets_prod) + 1); + DOORBELL(bp, FP_IDX(fp), 0); + + mmiowb(); + + num_pkts++; + fp->tx_bd_prod++; + bp->dev->trans_start = jiffies; + + udelay(100); + + tx_idx = le16_to_cpu(*fp->tx_cons_sb); + if (tx_idx != tx_start_idx + num_pkts) + goto test_loopback_exit; + + rx_idx = le16_to_cpu(*fp->rx_cons_sb); + if (rx_idx != rx_start_idx + num_pkts) + goto test_loopback_exit; + + cqe = &fp->rx_comp_ring[RCQ_BD(fp->rx_comp_cons)]; + cqe_fp_flags = cqe->fast_path_cqe.type_error_flags; + if (CQE_TYPE(cqe_fp_flags) || (cqe_fp_flags & ETH_RX_ERROR_FALGS)) + goto test_loopback_rx_exit; + + len = le16_to_cpu(cqe->fast_path_cqe.pkt_len); + if (len != pkt_size) + goto test_loopback_rx_exit; + + rx_buf = &fp->rx_buf_ring[RX_BD(fp->rx_bd_cons)]; + skb = rx_buf->skb; + skb_reserve(skb, cqe->fast_path_cqe.placement_offset); + for (i = ETH_HLEN; i < pkt_size; i++) + if (*(skb->data + i) != (unsigned char) (i & 0xff)) + goto test_loopback_rx_exit; + + rc = 0; + +test_loopback_rx_exit: + bp->dev->last_rx = jiffies; + + fp->rx_bd_cons = NEXT_RX_IDX(fp->rx_bd_cons); + fp->rx_bd_prod = NEXT_RX_IDX(fp->rx_bd_prod); + fp->rx_comp_cons = NEXT_RCQ_IDX(fp->rx_comp_cons); + fp->rx_comp_prod = NEXT_RCQ_IDX(fp->rx_comp_prod); + + /* Update producers */ + bnx2x_update_rx_prod(bp, fp, fp->rx_bd_prod, fp->rx_comp_prod, + fp->rx_sge_prod); + mmiowb(); /* keep prod updates ordered */ + +test_loopback_exit: + bp->link_params.loopback_mode = LOOPBACK_NONE; + + return rc; +} + +static int bnx2x_test_loopback(struct bnx2x *bp, u8 link_up) +{ + int rc = 0; + + if (!netif_running(bp->dev)) + return BNX2X_LOOPBACK_FAILED; + + bnx2x_netif_stop(bp, 1); + + if (bnx2x_run_loopback(bp, BNX2X_MAC_LOOPBACK, link_up)) { + DP(NETIF_MSG_PROBE, "MAC loopback failed\n"); + rc |= BNX2X_MAC_LOOPBACK_FAILED; + } + + if (bnx2x_run_loopback(bp, BNX2X_PHY_LOOPBACK, link_up)) { + DP(NETIF_MSG_PROBE, "PHY loopback failed\n"); + rc |= BNX2X_PHY_LOOPBACK_FAILED; + } + + bnx2x_netif_start(bp); + + return rc; +} + +#define CRC32_RESIDUAL 0xdebb20e3 + +static int bnx2x_test_nvram(struct bnx2x *bp) +{ + static const struct { + int offset; + int size; + } nvram_tbl[] = { + { 0, 0x14 }, /* bootstrap */ + { 0x14, 0xec }, /* dir */ + { 0x100, 0x350 }, /* manuf_info */ + { 0x450, 0xf0 }, /* feature_info */ + { 0x640, 0x64 }, /* upgrade_key_info */ + { 0x6a4, 0x64 }, + { 0x708, 0x70 }, /* manuf_key_info */ + { 0x778, 0x70 }, + { 0, 0 } + }; + u32 buf[0x350 / 4]; + u8 *data = (u8 *)buf; + int i, rc; + u32 magic, csum; + + rc = bnx2x_nvram_read(bp, 0, data, 4); + if (rc) { + DP(NETIF_MSG_PROBE, "magic value read (rc -%d)\n", -rc); + goto test_nvram_exit; + } + + magic = be32_to_cpu(buf[0]); + if (magic != 0x669955aa) { + DP(NETIF_MSG_PROBE, "magic value (0x%08x)\n", magic); + rc = -ENODEV; + goto test_nvram_exit; + } + + for (i = 0; nvram_tbl[i].size; i++) { + + rc = bnx2x_nvram_read(bp, nvram_tbl[i].offset, data, + nvram_tbl[i].size); + if (rc) { + DP(NETIF_MSG_PROBE, + "nvram_tbl[%d] read data (rc -%d)\n", i, -rc); + goto test_nvram_exit; + } + + csum = ether_crc_le(nvram_tbl[i].size, data); + if (csum != CRC32_RESIDUAL) { + DP(NETIF_MSG_PROBE, + "nvram_tbl[%d] csum value (0x%08x)\n", i, csum); + rc = -ENODEV; + goto test_nvram_exit; + } + } + +test_nvram_exit: + return rc; +} + +static int bnx2x_test_intr(struct bnx2x *bp) +{ + struct mac_configuration_cmd *config = bnx2x_sp(bp, mac_config); + int i, rc; + + if (!netif_running(bp->dev)) + return -ENODEV; + + config->hdr.length = 0; + config->hdr.offset = 0; + config->hdr.client_id = BP_CL_ID(bp); + config->hdr.reserved1 = 0; + + rc = bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_SET_MAC, 0, + U64_HI(bnx2x_sp_mapping(bp, mac_config)), + U64_LO(bnx2x_sp_mapping(bp, mac_config)), 0); + if (rc == 0) { + bp->set_mac_pending++; + for (i = 0; i < 10; i++) { + if (!bp->set_mac_pending) + break; + msleep_interruptible(10); + } + if (i == 10) + rc = -ENODEV; + } + + return rc; +} + +static void bnx2x_self_test(struct net_device *dev, + struct ethtool_test *etest, u64 *buf) +{ + struct bnx2x *bp = netdev_priv(dev); + + memset(buf, 0, sizeof(u64) * BNX2X_NUM_TESTS); + + if (!netif_running(dev)) + return; + + /* offline tests are not supported in MF mode */ + if (IS_E1HMF(bp)) + etest->flags &= ~ETH_TEST_FL_OFFLINE; + + if (etest->flags & ETH_TEST_FL_OFFLINE) { + u8 link_up; + + link_up = bp->link_vars.link_up; + bnx2x_nic_unload(bp, UNLOAD_NORMAL); + bnx2x_nic_load(bp, LOAD_DIAG); + /* wait until link state is restored */ + bnx2x_wait_for_link(bp, link_up); + + if (bnx2x_test_registers(bp) != 0) { + buf[0] = 1; + etest->flags |= ETH_TEST_FL_FAILED; + } + if (bnx2x_test_memory(bp) != 0) { + buf[1] = 1; + etest->flags |= ETH_TEST_FL_FAILED; + } + buf[2] = bnx2x_test_loopback(bp, link_up); + if (buf[2] != 0) + etest->flags |= ETH_TEST_FL_FAILED; + + bnx2x_nic_unload(bp, UNLOAD_NORMAL); + bnx2x_nic_load(bp, LOAD_NORMAL); + /* wait until link state is restored */ + bnx2x_wait_for_link(bp, link_up); + } + if (bnx2x_test_nvram(bp) != 0) { + buf[3] = 1; + etest->flags |= ETH_TEST_FL_FAILED; + } + if (bnx2x_test_intr(bp) != 0) { + buf[4] = 1; + etest->flags |= ETH_TEST_FL_FAILED; + } + if (bp->port.pmf) + if (bnx2x_link_test(bp) != 0) { + buf[5] = 1; + etest->flags |= ETH_TEST_FL_FAILED; + } +#ifndef BNX2X_UPSTREAM /* ! BNX2X_UPSTREAM */ + /* run the idle check twice */ + bnx2x_idle_chk(bp); + buf[6] = bnx2x_idle_chk(bp); + if (buf[6] != 0) + etest->flags |= ETH_TEST_FL_FAILED; +#endif + buf[7] = bnx2x_mc_assert(bp); + if (buf[7] != 0) + etest->flags |= ETH_TEST_FL_FAILED; + +#ifdef BNX2X_EXTRA_DEBUG + bnx2x_panic_dump(bp); +#endif +} + +static const struct { + long offset; + int size; + u32 flags; +#define STATS_FLAGS_PORT 1 +#define STATS_FLAGS_FUNC 2 + u8 string[ETH_GSTRING_LEN]; +} bnx2x_stats_arr[BNX2X_NUM_STATS] = { +/* 1 */ { STATS_OFFSET32(valid_bytes_received_hi), + 8, STATS_FLAGS_FUNC, "rx_bytes" }, + { STATS_OFFSET32(error_bytes_received_hi), + 8, STATS_FLAGS_FUNC, "rx_error_bytes" }, + { STATS_OFFSET32(total_bytes_transmitted_hi), + 8, STATS_FLAGS_FUNC, "tx_bytes" }, + { STATS_OFFSET32(tx_stat_ifhcoutbadoctets_hi), + 8, STATS_FLAGS_PORT, "tx_error_bytes" }, + { STATS_OFFSET32(total_unicast_packets_received_hi), + 8, STATS_FLAGS_FUNC, "rx_ucast_packets" }, + { STATS_OFFSET32(total_multicast_packets_received_hi), + 8, STATS_FLAGS_FUNC, "rx_mcast_packets" }, + { STATS_OFFSET32(total_broadcast_packets_received_hi), + 8, STATS_FLAGS_FUNC, "rx_bcast_packets" }, + { STATS_OFFSET32(total_unicast_packets_transmitted_hi), + 8, STATS_FLAGS_FUNC, "tx_packets" }, + { STATS_OFFSET32(tx_stat_dot3statsinternalmactransmiterrors_hi), + 8, STATS_FLAGS_PORT, "tx_mac_errors" }, +/* 10 */{ STATS_OFFSET32(rx_stat_dot3statscarriersenseerrors_hi), + 8, STATS_FLAGS_PORT, "tx_carrier_errors" }, + { STATS_OFFSET32(rx_stat_dot3statsfcserrors_hi), + 8, STATS_FLAGS_PORT, "rx_crc_errors" }, + { STATS_OFFSET32(rx_stat_dot3statsalignmenterrors_hi), + 8, STATS_FLAGS_PORT, "rx_align_errors" }, + { STATS_OFFSET32(tx_stat_dot3statssinglecollisionframes_hi), + 8, STATS_FLAGS_PORT, "tx_single_collisions" }, + { STATS_OFFSET32(tx_stat_dot3statsmultiplecollisionframes_hi), + 8, STATS_FLAGS_PORT, "tx_multi_collisions" }, + { STATS_OFFSET32(tx_stat_dot3statsdeferredtransmissions_hi), + 8, STATS_FLAGS_PORT, "tx_deferred" }, + { STATS_OFFSET32(tx_stat_dot3statsexcessivecollisions_hi), + 8, STATS_FLAGS_PORT, "tx_excess_collisions" }, + { STATS_OFFSET32(tx_stat_dot3statslatecollisions_hi), + 8, STATS_FLAGS_PORT, "tx_late_collisions" }, + { STATS_OFFSET32(tx_stat_etherstatscollisions_hi), + 8, STATS_FLAGS_PORT, "tx_total_collisions" }, + { STATS_OFFSET32(rx_stat_etherstatsfragments_hi), + 8, STATS_FLAGS_PORT, "rx_fragments" }, +/* 20 */{ STATS_OFFSET32(rx_stat_etherstatsjabbers_hi), + 8, STATS_FLAGS_PORT, "rx_jabbers" }, + { STATS_OFFSET32(rx_stat_etherstatsundersizepkts_hi), + 8, STATS_FLAGS_PORT, "rx_undersize_packets" }, + { STATS_OFFSET32(jabber_packets_received), + 4, STATS_FLAGS_FUNC, "rx_oversize_packets" }, + { STATS_OFFSET32(tx_stat_etherstatspkts64octets_hi), + 8, STATS_FLAGS_PORT, "tx_64_byte_packets" }, + { STATS_OFFSET32(tx_stat_etherstatspkts65octetsto127octets_hi), + 8, STATS_FLAGS_PORT, "tx_65_to_127_byte_packets" }, + { STATS_OFFSET32(tx_stat_etherstatspkts128octetsto255octets_hi), + 8, STATS_FLAGS_PORT, "tx_128_to_255_byte_packets" }, + { STATS_OFFSET32(tx_stat_etherstatspkts256octetsto511octets_hi), + 8, STATS_FLAGS_PORT, "tx_256_to_511_byte_packets" }, + { STATS_OFFSET32(tx_stat_etherstatspkts512octetsto1023octets_hi), + 8, STATS_FLAGS_PORT, "tx_512_to_1023_byte_packets" }, + { STATS_OFFSET32(etherstatspkts1024octetsto1522octets_hi), + 8, STATS_FLAGS_PORT, "tx_1024_to_1522_byte_packets" }, + { STATS_OFFSET32(etherstatspktsover1522octets_hi), + 8, STATS_FLAGS_PORT, "tx_1523_to_9022_byte_packets" }, +/* 30 */{ STATS_OFFSET32(rx_stat_xonpauseframesreceived_hi), + 8, STATS_FLAGS_PORT, "rx_xon_frames" }, + { STATS_OFFSET32(rx_stat_xoffpauseframesreceived_hi), + 8, STATS_FLAGS_PORT, "rx_xoff_frames" }, + { STATS_OFFSET32(tx_stat_outxonsent_hi), + 8, STATS_FLAGS_PORT, "tx_xon_frames" }, + { STATS_OFFSET32(tx_stat_outxoffsent_hi), + 8, STATS_FLAGS_PORT, "tx_xoff_frames" }, + { STATS_OFFSET32(rx_stat_maccontrolframesreceived_hi), + 8, STATS_FLAGS_PORT, "rx_mac_ctrl_frames" }, + { STATS_OFFSET32(mac_filter_discard), + 4, STATS_FLAGS_PORT, "rx_filtered_packets" }, + { STATS_OFFSET32(no_buff_discard), + 4, STATS_FLAGS_FUNC, "rx_discards" }, + { STATS_OFFSET32(xxoverflow_discard), + 4, STATS_FLAGS_PORT, "rx_fw_discards" }, + { STATS_OFFSET32(brb_drop_hi), + 8, STATS_FLAGS_PORT, "brb_discard" }, + { STATS_OFFSET32(brb_truncate_hi), + 8, STATS_FLAGS_PORT, "brb_truncate" }, +/* 40 */{ STATS_OFFSET32(rx_err_discard_pkt), + 4, STATS_FLAGS_FUNC, "rx_phy_ip_err_discards"}, + { STATS_OFFSET32(rx_skb_alloc_failed), + 4, STATS_FLAGS_FUNC, "rx_skb_alloc_discard" }, + { STATS_OFFSET32(hw_csum_err), + 4, STATS_FLAGS_FUNC, "rx_csum_offload_errors" }, +/* 43 */{ STATS_OFFSET32(nig_timer_max), + 4, STATS_FLAGS_PORT, "timer_max_events" } +}; + +#define IS_NOT_E1HMF_STAT(bp, i) \ + (IS_E1HMF(bp) && (bnx2x_stats_arr[i].flags & STATS_FLAGS_PORT)) + +static void bnx2x_get_strings(struct net_device *dev, u32 stringset, u8 *buf) +{ + struct bnx2x *bp = netdev_priv(dev); + int i, j; + + switch (stringset) { + case ETH_SS_STATS: + for (i = 0, j = 0; i < BNX2X_NUM_STATS; i++) { + if (IS_NOT_E1HMF_STAT(bp, i)) + continue; + strcpy(buf + j*ETH_GSTRING_LEN, + bnx2x_stats_arr[i].string); + j++; + } + break; + + case ETH_SS_TEST: + memcpy(buf, bnx2x_tests_str_arr, sizeof(bnx2x_tests_str_arr)); + break; + } +} + +static int bnx2x_get_stats_count(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + int i, num_stats = 0; + + for (i = 0; i < BNX2X_NUM_STATS; i++) { + if (IS_NOT_E1HMF_STAT(bp, i)) + continue; + num_stats++; + } + return num_stats; +} + +static void bnx2x_get_ethtool_stats(struct net_device *dev, + struct ethtool_stats *stats, u64 *buf) +{ + struct bnx2x *bp = netdev_priv(dev); + u32 *hw_stats = (u32 *)&bp->eth_stats; + int i, j; + + for (i = 0, j = 0; i < BNX2X_NUM_STATS; i++) { + if (IS_NOT_E1HMF_STAT(bp, i)) + continue; + + if (bnx2x_stats_arr[i].size == 0) { + /* skip this counter */ + buf[j] = 0; + j++; + continue; + } + if (bnx2x_stats_arr[i].size == 4) { + /* 4-byte counter */ + buf[j] = (u64) *(hw_stats + bnx2x_stats_arr[i].offset); + j++; + continue; + } + /* 8-byte counter */ + buf[j] = HILO_U64(*(hw_stats + bnx2x_stats_arr[i].offset), + *(hw_stats + bnx2x_stats_arr[i].offset + 1)); + j++; + } +} + +static int bnx2x_phys_id(struct net_device *dev, u32 data) +{ + struct bnx2x *bp = netdev_priv(dev); + int port = BP_PORT(bp); + int i; + + if (!netif_running(dev)) + return 0; + + if (!bp->port.pmf) + return 0; + + if (data == 0) + data = 2; + + for (i = 0; i < (data * 2); i++) { + if ((i % 2) == 0) + bnx2x_set_led(bp, port, LED_MODE_OPER, SPEED_1000, + bp->link_params.hw_led_mode, + bp->link_params.chip_id); + else + bnx2x_set_led(bp, port, LED_MODE_OFF, 0, + bp->link_params.hw_led_mode, + bp->link_params.chip_id); + + msleep_interruptible(500); + if (signal_pending(current)) + break; + } + + if (bp->link_vars.link_up) + bnx2x_set_led(bp, port, LED_MODE_OPER, + bp->link_vars.line_speed, + bp->link_params.hw_led_mode, + bp->link_params.chip_id); + + return 0; +} + +static struct ethtool_ops bnx2x_ethtool_ops = { + .get_settings = bnx2x_get_settings, + .set_settings = bnx2x_set_settings, + .get_drvinfo = bnx2x_get_drvinfo, + .get_wol = bnx2x_get_wol, + .set_wol = bnx2x_set_wol, + .get_msglevel = bnx2x_get_msglevel, + .set_msglevel = bnx2x_set_msglevel, + .nway_reset = bnx2x_nway_reset, + .get_link = ethtool_op_get_link, +#if (LINUX_VERSION_CODE >= 0x020418) /* BNX2X_UPSTREAM */ + .get_eeprom_len = bnx2x_get_eeprom_len, +#endif + .get_eeprom = bnx2x_get_eeprom, + .set_eeprom = bnx2x_set_eeprom, + .get_coalesce = bnx2x_get_coalesce, + .set_coalesce = bnx2x_set_coalesce, + .get_ringparam = bnx2x_get_ringparam, + .set_ringparam = bnx2x_set_ringparam, + .get_pauseparam = bnx2x_get_pauseparam, + .set_pauseparam = bnx2x_set_pauseparam, + .get_rx_csum = bnx2x_get_rx_csum, + .set_rx_csum = bnx2x_set_rx_csum, + .get_tx_csum = ethtool_op_get_tx_csum, +#if (LINUX_VERSION_CODE >= 0x020618) /* BNX2X_UPSTREAM */ + .set_tx_csum = ethtool_op_set_tx_hw_csum, +#else + .set_tx_csum = bnx2x_set_tx_hw_csum, +#endif +#if (LINUX_VERSION_CODE >= 0x02061a) /* BNX2X_UPSTREAM */ + .set_flags = bnx2x_set_flags, + .get_flags = ethtool_op_get_flags, +#endif + .get_sg = ethtool_op_get_sg, + .set_sg = ethtool_op_set_sg, +#ifdef NETIF_F_TSO /* BNX2X_UPSTREAM */ + .get_tso = ethtool_op_get_tso, + .set_tso = bnx2x_set_tso, +#endif + .self_test_count = bnx2x_self_test_count, + .self_test = bnx2x_self_test, + .get_strings = bnx2x_get_strings, + .phys_id = bnx2x_phys_id, + .get_stats_count = bnx2x_get_stats_count, + .get_ethtool_stats = bnx2x_get_ethtool_stats, +#ifdef ETHTOOL_GPERMADDR /* ! BNX2X_UPSTREAM */ +#if (LINUX_VERSION_CODE < 0x020617) + .get_perm_addr = ethtool_op_get_perm_addr +#endif +#endif +}; + +/* end of ethtool_ops */ + +/**************************************************************************** +* General service functions +****************************************************************************/ + +static int bnx2x_set_power_state(struct bnx2x *bp, pci_power_t state) +{ + u16 pm_csr; + + pci_read_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL, &pm_csr); + + switch (state) { + case PCI_D0: + pci_write_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL, + ((pm_csr & ~PCI_PM_CTRL_STATE_MASK) | + PCI_PM_CTRL_PME_STATUS)); + + if (pm_csr & PCI_PM_CTRL_STATE_MASK) + /* delay required during transition out of D3hot */ + msleep(20); + break; + + case PCI_D3hot: + pm_csr &= ~PCI_PM_CTRL_STATE_MASK; + pm_csr |= 3; + + if (bp->wol) + pm_csr |= PCI_PM_CTRL_PME_ENABLE; + + pci_write_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL, + pm_csr); + + /* No more memory access after this point until + * device is brought back to D0. + */ + break; + + default: + return -EINVAL; + } + return 0; +} + +static inline int bnx2x_has_rx_work(struct bnx2x_fastpath *fp) +{ + u16 rx_cons_sb; + + rx_cons_sb = le16_to_cpu(*fp->rx_cons_sb); + if ((rx_cons_sb & MAX_RCQ_DESC_CNT) == MAX_RCQ_DESC_CNT) + rx_cons_sb++; + return (fp->rx_comp_cons != rx_cons_sb); +} + +/* + * net_device service functions + */ + +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ +static int bnx2x_poll(struct napi_struct *napi, int budget) +#else +static int bnx2x_poll(struct net_device *dev, int *budget) +#endif +{ +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ + struct bnx2x_fastpath *fp = container_of(napi, struct bnx2x_fastpath, + napi); + struct bnx2x *bp = fp->bp; + int work_done = 0; +#else + struct bnx2x *bp = netdev_priv(dev); + struct bnx2x_fastpath *fp = &bp->fp[0]; +#endif +#ifdef BNX2X_STOP_ON_ERROR + int has_work = 0; + + fp->poll_calls++; +#endif + +#ifdef BNX2X_STOP_ON_ERROR + if (unlikely(bp->panic)) + goto poll_panic; +#endif + + prefetch(fp->tx_buf_ring[TX_BD(fp->tx_pkt_cons)].skb); + prefetch(fp->rx_buf_ring[RX_BD(fp->rx_bd_cons)].skb); + prefetch((char *)(fp->rx_buf_ring[RX_BD(fp->rx_bd_cons)].skb) + 256); + + bnx2x_update_fpsb_idx(fp); + + if (BNX2X_HAS_TX_WORK(fp)) { +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ + bnx2x_tx_int(fp, budget); +#else + bnx2x_tx_int(fp, *budget); +#endif +#ifdef BNX2X_STOP_ON_ERROR + has_work++; +#endif + } + + if (bnx2x_has_rx_work(fp)) { +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ + work_done = bnx2x_rx_int(fp, budget); +#else + { + int orig_budget = min(*budget, dev->quota); + int work_done; + + work_done = bnx2x_rx_int(fp, orig_budget); + *budget -= work_done; + dev->quota -= work_done; + } +#endif +#ifdef BNX2X_STOP_ON_ERROR + has_work++; +#endif + } +#ifdef BNX2X_STOP_ON_ERROR + if (!has_work) + fp->poll_no_work++; +#endif + + rmb(); /* BNX2X_HAS_WORK() reads the status block */ + + /* must not complete if we consumed full budget */ +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ + if ((work_done < budget) && !BNX2X_HAS_WORK(fp)) { +#else + if (*budget && !BNX2X_HAS_WORK(fp)) { +#endif + +#ifdef BNX2X_STOP_ON_ERROR +poll_panic: + fp->poll_complete++; + if (fp->poll_calls > fp->poll_max_calls) + fp->poll_max_calls = fp->poll_calls; + fp->poll_calls = 0; +#endif + netif_rx_complete(bp->dev, napi); + + bnx2x_ack_sb(bp, FP_SB_ID(fp), USTORM_ID, + le16_to_cpu(fp->fp_u_idx), IGU_INT_NOP, 1); + bnx2x_ack_sb(bp, FP_SB_ID(fp), CSTORM_ID, + le16_to_cpu(fp->fp_c_idx), IGU_INT_ENABLE, 1); + +#ifndef BNX2X_NEW_NAPI /* ! BNX2X_UPSTREAM */ + return 0; +#endif + } +#ifdef BNX2X_STOP_ON_ERROR + fp->poll_exit++; +#endif + +#ifdef BNX2X_NEW_NAPI /* BNX2X_UPSTREAM */ + return work_done; +#else + return 1; +#endif +} + +#if (LINUX_VERSION_CODE < 0x020618) /* ! BNX2X_UPSTREAM */ +static struct net_device_stats *bnx2x_get_stats(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + + return &bp->net_stats; +} +#endif + +#ifdef NETIF_F_TSO /* BNX2X_UPSTREAM */ +/* we split the first BD into headers and data BDs + * to ease the pain of our fellow microcode engineers + * we use one mapping for both BDs + * So far this has only been observed to happen + * in Other Operating Systems(TM) + */ +static noinline u16 bnx2x_tx_split(struct bnx2x *bp, + struct bnx2x_fastpath *fp, + struct eth_tx_bd **tx_bd, u16 hlen, + u16 bd_prod, int nbd) +{ + struct eth_tx_bd *h_tx_bd = *tx_bd; + struct eth_tx_bd *d_tx_bd; + dma_addr_t mapping; + int old_len = le16_to_cpu(h_tx_bd->nbytes); + + /* first fix first BD */ + h_tx_bd->nbd = cpu_to_le16(nbd); + h_tx_bd->nbytes = cpu_to_le16(hlen); + + DP(NETIF_MSG_TX_QUEUED, "TSO split header size is %d " + "(%x:%x) nbd %d\n", h_tx_bd->nbytes, h_tx_bd->addr_hi, + h_tx_bd->addr_lo, h_tx_bd->nbd); + + /* now get a new data BD + * (after the pbd) and fill it */ + bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); + d_tx_bd = &fp->tx_desc_ring[bd_prod]; + + mapping = HILO_U64(le32_to_cpu(h_tx_bd->addr_hi), + le32_to_cpu(h_tx_bd->addr_lo)) + hlen; + + d_tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); + d_tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); + d_tx_bd->nbytes = cpu_to_le16(old_len - hlen); + d_tx_bd->vlan = 0; + /* this marks the BD as one that has no individual mapping + * the FW ignores this flag in a BD not marked start + */ + d_tx_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_SW_LSO; + DP(NETIF_MSG_TX_QUEUED, + "TSO split data size is %d (%x:%x)\n", + d_tx_bd->nbytes, d_tx_bd->addr_hi, d_tx_bd->addr_lo); + + /* update tx_bd for marking the last BD flag */ + *tx_bd = d_tx_bd; + + return bd_prod; +} +#endif + +static inline u16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix) +{ + if (fix > 0) + csum = (u16) ~csum_fold(csum_sub(csum, + csum_partial(t_header - fix, fix, 0))); + + else if (fix < 0) + csum = (u16) ~csum_fold(csum_add(csum, + csum_partial(t_header, -fix, 0))); + + return swab16(csum); +} + +static inline u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb) +{ + u32 rc; + + if (skb->ip_summed != CHECKSUM_PARTIAL) + rc = XMIT_PLAIN; + + else { + if (skb->protocol == ntohs(ETH_P_IPV6)) { + rc = XMIT_CSUM_V6; + if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP) + rc |= XMIT_CSUM_TCP; + + } else { + rc = XMIT_CSUM_V4; + if (ip_hdr(skb)->protocol == IPPROTO_TCP) + rc |= XMIT_CSUM_TCP; + } + } + +#ifdef NETIF_F_GSO /* BNX2X_UPSTREAM */ + if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4) + rc |= XMIT_GSO_V4; + +#ifdef NETIF_F_TSO6 /* BNX2X_UPSTREAM */ + else if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) + rc |= XMIT_GSO_V6; +#endif +#elif defined(NETIF_F_TSO) /* ! BNX2X_UPSTREAM */ + if ((skb_shinfo(skb)->gso_size) && + (skb->len > (bp->dev->mtu + ETH_HLEN))) + rc |= XMIT_GSO_V4; +#endif + + return rc; +} + +/* check if packet requires linearization (packet is too fragmented) */ +static int bnx2x_pkt_req_lin(struct bnx2x *bp, struct sk_buff *skb, + u32 xmit_type) +{ + int to_copy = 0; + int hlen = 0; + int first_bd_sz = 0; + + /* 3 = 1 (for linear data BD) + 2 (for PBD and last BD) */ + if (skb_shinfo(skb)->nr_frags >= (MAX_FETCH_BD - 3)) { + + if (xmit_type & XMIT_GSO) { +#ifdef NETIF_F_TSO /* BNX2X_UPSTREAM */ + unsigned short lso_mss = skb_shinfo(skb)->gso_size; + /* Check if LSO packet needs to be copied: + 3 = 1 (for headers BD) + 2 (for PBD and last BD) */ + int wnd_size = MAX_FETCH_BD - 3; + /* Number of windows to check */ + int num_wnds = skb_shinfo(skb)->nr_frags - wnd_size; + int wnd_idx = 0; + int frag_idx = 0; + u32 wnd_sum = 0; + + /* Headers length */ + hlen = (int)(skb_transport_header(skb) - skb->data) + + tcp_hdrlen(skb); + + /* Amount of data (w/o headers) on linear part of SKB*/ + first_bd_sz = skb_headlen(skb) - hlen; + + wnd_sum = first_bd_sz; + + /* Calculate the first sum - it's special */ + for (frag_idx = 0; frag_idx < wnd_size - 1; frag_idx++) + wnd_sum += + skb_shinfo(skb)->frags[frag_idx].size; + + /* If there was data on linear skb data - check it */ + if (first_bd_sz > 0) { + if (unlikely(wnd_sum < lso_mss)) { + to_copy = 1; + goto exit_lbl; + } + + wnd_sum -= first_bd_sz; + } + + /* Others are easier: run through the frag list and + check all windows */ + for (wnd_idx = 0; wnd_idx <= num_wnds; wnd_idx++) { + wnd_sum += + skb_shinfo(skb)->frags[wnd_idx + wnd_size - 1].size; + + if (unlikely(wnd_sum < lso_mss)) { + to_copy = 1; + break; + } + wnd_sum -= + skb_shinfo(skb)->frags[wnd_idx].size; + } +#endif + } else { + /* in non-LSO too fragmented packet should always + be linearized */ + to_copy = 1; + } + } + +#ifdef NETIF_F_TSO /* BNX2X_UPSTREAM */ +exit_lbl: +#endif + if (unlikely(to_copy)) + DP(NETIF_MSG_TX_QUEUED, + "Linearization IS REQUIRED for %s packet. " + "num_frags %d hlen %d first_bd_sz %d\n", + (xmit_type & XMIT_GSO) ? "LSO" : "non-LSO", + skb_shinfo(skb)->nr_frags, hlen, first_bd_sz); + + return to_copy; +} + +/* called with netif_tx_lock + * bnx2x_tx_int() runs without netif_tx_lock unless it needs to call + * netif_wake_queue() + */ +static int bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + struct bnx2x_fastpath *fp; + struct sw_tx_bd *tx_buf; + struct eth_tx_bd *tx_bd; + struct eth_tx_parse_bd *pbd = NULL; + u16 pkt_prod, bd_prod; + int nbd, fp_index; + dma_addr_t mapping; + u32 xmit_type = bnx2x_xmit_type(bp, skb); + int vlan_off = (bp->e1hov ? 4 : 0); + int i; + u8 hlen = 0; + +#ifdef BNX2X_STOP_ON_ERROR + if (unlikely(bp->panic)) + return NETDEV_TX_BUSY; +#endif + + fp_index = (smp_processor_id() % bp->num_queues); + if (bp->multi_mode == ETH_RSS_MODE_VLAN_PRI) { + if ((bp->vlgrp != NULL) && vlan_tx_tag_present(skb)) { + i = ((vlan_tx_tag_get(skb) >> 13) & 0x7); + fp_index = bp->pri_map[i]; + } + } else if (bp->multi_mode == ETH_RSS_MODE_IP_DSCP) { + i = ((ip_hdr(skb)->tos >> 2) & 0x7); + fp_index = bp->pri_map[i]; + } + + fp = &bp->fp[fp_index]; + + if (unlikely(bnx2x_tx_avail(fp) < (skb_shinfo(skb)->nr_frags + 3))) { + bp->eth_stats.driver_xoff++, + netif_stop_queue(dev); + BNX2X_ERR("BUG! Tx ring full when queue awake!\n"); + return NETDEV_TX_BUSY; + } + +#ifdef NETIF_F_GSO /* BNX2X_UPSTREAM */ + DP(NETIF_MSG_TX_QUEUED, "SKB: summed %x protocol %x protocol(%x,%x)" + " gso type %x xmit_type %x\n", + skb->ip_summed, skb->protocol, ipv6_hdr(skb)->nexthdr, + ip_hdr(skb)->protocol, skb_shinfo(skb)->gso_type, xmit_type); +#endif + + /* First, check if we need to linearize the skb + (due to FW restrictions) */ + if (bnx2x_pkt_req_lin(bp, skb, xmit_type)) { + /* Statistics of linearization */ + bp->lin_cnt++; +#if (LINUX_VERSION_CODE > 0x020611) || (defined SLE_VERSION_CODE) /* BNX2X_UPSTREAM */ + if (skb_linearize(skb) != 0) { +#else + if (skb_linearize(skb, GFP_ATOMIC) != 0) { +#endif + DP(NETIF_MSG_TX_QUEUED, "SKB linearization failed - " + "silently dropping this SKB\n"); + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } + } + + /* + Please read carefully. First we use one BD which we mark as start, + then for TSO or xsum we have a parsing info BD, + and only then we have the rest of the TSO BDs. + (don't forget to mark the last one as last, + and to unmap only AFTER you write to the BD ...) + And above all, all pdb sizes are in words - NOT DWORDS! + */ + + pkt_prod = fp->tx_pkt_prod++; + bd_prod = TX_BD(fp->tx_bd_prod); + + /* get a tx_buf and first BD */ + tx_buf = &fp->tx_buf_ring[TX_BD(pkt_prod)]; + tx_bd = &fp->tx_desc_ring[bd_prod]; + + tx_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD; + tx_bd->general_data = (UNICAST_ADDRESS << + ETH_TX_BD_ETH_ADDR_TYPE_SHIFT); + /* header nbd */ + tx_bd->general_data |= (1 << ETH_TX_BD_HDR_NBDS_SHIFT); + + /* remember the first BD of the packet */ + tx_buf->first_bd = fp->tx_bd_prod; + tx_buf->skb = skb; + + DP(NETIF_MSG_TX_QUEUED, + "sending pkt %u @%p next_idx %u bd %u @%p\n", + pkt_prod, tx_buf, fp->tx_pkt_prod, bd_prod, tx_bd); + + if ((bp->vlgrp != NULL) && vlan_tx_tag_present(skb)) { + tx_bd->vlan = cpu_to_le16(vlan_tx_tag_get(skb)); + tx_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_VLAN_TAG; + vlan_off += 4; + } else + tx_bd->vlan = cpu_to_le16(pkt_prod); + + if (xmit_type) { + /* turn on parsing and get a BD */ + bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); + pbd = (void *)&fp->tx_desc_ring[bd_prod]; + + memset(pbd, 0, sizeof(struct eth_tx_parse_bd)); + } + + if (xmit_type & XMIT_CSUM) { + hlen = (skb_network_header(skb) - skb->data + vlan_off) / 2; + + /* for now NS flag is not used in Linux */ + pbd->global_data = (hlen | + ((skb->protocol == ntohs(ETH_P_8021Q)) << + ETH_TX_PARSE_BD_LLC_SNAP_EN_SHIFT)); + + pbd->ip_hlen = (skb_transport_header(skb) - + skb_network_header(skb)) / 2; + + hlen += pbd->ip_hlen + tcp_hdrlen(skb) / 2; + + pbd->total_hlen = cpu_to_le16(hlen); + hlen = hlen*2 - vlan_off; + + tx_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_TCP_CSUM; + + if (xmit_type & XMIT_CSUM_V4) + tx_bd->bd_flags.as_bitfield |= + ETH_TX_BD_FLAGS_IP_CSUM; + else + tx_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IPV6; + + if (xmit_type & XMIT_CSUM_TCP) { + pbd->tcp_pseudo_csum = swab16(tcp_hdr(skb)->check); + + } else { + s8 fix = SKB_CS_OFF(skb); /* signed! */ + + pbd->global_data |= ETH_TX_PARSE_BD_CS_ANY_FLG; + pbd->cs_offset = fix / 2; + + DP(NETIF_MSG_TX_QUEUED, + "hlen %d offset %d fix %d csum before fix %x\n", + le16_to_cpu(pbd->total_hlen), pbd->cs_offset, fix, + SKB_CS(skb)); + + /* HW bug: fixup the CSUM */ + pbd->tcp_pseudo_csum = + bnx2x_csum_fix(skb_transport_header(skb), + SKB_CS(skb), fix); + + DP(NETIF_MSG_TX_QUEUED, "csum after fix %x\n", + pbd->tcp_pseudo_csum); + } + } + + mapping = pci_map_single(bp->pdev, skb->data, + skb_headlen(skb), PCI_DMA_TODEVICE); + + tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); + tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); + nbd = skb_shinfo(skb)->nr_frags + ((pbd == NULL) ? 1 : 2); + tx_bd->nbd = cpu_to_le16(nbd); + tx_bd->nbytes = cpu_to_le16(skb_headlen(skb)); + + DP(NETIF_MSG_TX_QUEUED, "first bd @%p addr (%x:%x) nbd %d" + " nbytes %d flags %x vlan %x\n", + tx_bd, tx_bd->addr_hi, tx_bd->addr_lo, le16_to_cpu(tx_bd->nbd), + le16_to_cpu(tx_bd->nbytes), tx_bd->bd_flags.as_bitfield, + le16_to_cpu(tx_bd->vlan)); + +#ifdef NETIF_F_TSO /* BNX2X_UPSTREAM */ + if (xmit_type & XMIT_GSO) { + + DP(NETIF_MSG_TX_QUEUED, + "TSO packet len %d hlen %d total len %d tso size %d\n", + skb->len, hlen, skb_headlen(skb), + skb_shinfo(skb)->gso_size); + + tx_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_SW_LSO; + + if (unlikely(skb_headlen(skb) > hlen)) + bd_prod = bnx2x_tx_split(bp, fp, &tx_bd, hlen, + bd_prod, ++nbd); + + pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size); + pbd->tcp_send_seq = swab32(tcp_hdr(skb)->seq); + pbd->tcp_flags = pbd_tcp_flags(skb); + + if (xmit_type & XMIT_GSO_V4) { + pbd->ip_id = swab16(ip_hdr(skb)->id); + pbd->tcp_pseudo_csum = + swab16(~csum_tcpudp_magic(ip_hdr(skb)->saddr, + ip_hdr(skb)->daddr, + 0, IPPROTO_TCP, 0)); + + } else + pbd->tcp_pseudo_csum = + swab16(~csum_ipv6_magic(&ipv6_hdr(skb)->saddr, + &ipv6_hdr(skb)->daddr, + 0, IPPROTO_TCP, 0)); + + pbd->global_data |= ETH_TX_PARSE_BD_PSEUDO_CS_WITHOUT_LEN; + } +#endif + + for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { + skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; + + bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); + tx_bd = &fp->tx_desc_ring[bd_prod]; + + mapping = pci_map_page(bp->pdev, frag->page, frag->page_offset, + frag->size, PCI_DMA_TODEVICE); + + tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping)); + tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping)); + tx_bd->nbytes = cpu_to_le16(frag->size); + tx_bd->vlan = cpu_to_le16(pkt_prod); + tx_bd->bd_flags.as_bitfield = 0; + + DP(NETIF_MSG_TX_QUEUED, + "frag %d bd @%p addr (%x:%x) nbytes %d flags %x\n", + i, tx_bd, tx_bd->addr_hi, tx_bd->addr_lo, + le16_to_cpu(tx_bd->nbytes), tx_bd->bd_flags.as_bitfield); + } + + /* now at last mark the BD as the last BD */ + tx_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_END_BD; + + DP(NETIF_MSG_TX_QUEUED, "last bd @%p flags %x\n", + tx_bd, tx_bd->bd_flags.as_bitfield); + + bd_prod = TX_BD(NEXT_TX_IDX(bd_prod)); + + /* now send a tx doorbell, counting the next BD + * if the packet contains or ends with it + */ + if (TX_BD_POFF(bd_prod) < nbd) + nbd++; + + if (pbd) + DP(NETIF_MSG_TX_QUEUED, + "PBD @%p ip_data %x ip_hlen %u ip_id %u lso_mss %u" + " tcp_flags %x xsum %x seq %u hlen %u\n", + pbd, pbd->global_data, pbd->ip_hlen, pbd->ip_id, + pbd->lso_mss, pbd->tcp_flags, pbd->tcp_pseudo_csum, + pbd->tcp_send_seq, le16_to_cpu(pbd->total_hlen)); + + DP(NETIF_MSG_TX_QUEUED, "doorbell: nbd %d bd %u\n", nbd, bd_prod); + + fp->hw_tx_prods->bds_prod = + cpu_to_le16(le16_to_cpu(fp->hw_tx_prods->bds_prod) + nbd); + mb(); /* FW restriction: must not reorder writing nbd and packets */ + fp->hw_tx_prods->packets_prod = + cpu_to_le32(le32_to_cpu(fp->hw_tx_prods->packets_prod) + 1); + DOORBELL(bp, FP_IDX(fp), 0); + + mmiowb(); + + fp->tx_bd_prod += nbd; + dev->trans_start = jiffies; + + if (unlikely(bnx2x_tx_avail(fp) < MAX_SKB_FRAGS + 3)) { + netif_stop_queue(dev); + bp->eth_stats.driver_xoff++; + if (bnx2x_tx_avail(fp) >= MAX_SKB_FRAGS + 3) + netif_wake_queue(dev); + } + fp->tx_pkt++; + + return NETDEV_TX_OK; +} + +/* called with rtnl_lock */ +static int bnx2x_open(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + + bnx2x_set_power_state(bp, PCI_D0); + + return bnx2x_nic_load(bp, LOAD_OPEN); +} + +/* called with rtnl_lock */ +static int bnx2x_close(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + + /* Unload the driver, release IRQs */ + bnx2x_nic_unload(bp, UNLOAD_CLOSE); +#if (LINUX_VERSION_CODE >= 0x20614) /* BNX2X_UPSTREAM */ + if (atomic_read(&bp->pdev->enable_cnt) == 1) +#endif + if (!CHIP_REV_IS_SLOW(bp)) + bnx2x_set_power_state(bp, PCI_D3hot); + + return 0; +} + +/* called with netif_tx_lock from dev_mcast.c */ +static void bnx2x_set_rx_mode(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + u32 rx_mode = BNX2X_RX_MODE_NORMAL; + int port = BP_PORT(bp); + + if (bp->state != BNX2X_STATE_OPEN) { + DP(NETIF_MSG_IFUP, "state is %x, returning\n", bp->state); + return; + } + + DP(NETIF_MSG_IFUP, "dev->flags = %x\n", dev->flags); + + if (dev->flags & IFF_PROMISC) + rx_mode = BNX2X_RX_MODE_PROMISC; + + else if ((dev->flags & IFF_ALLMULTI) || + ((dev->mc_count > BNX2X_MAX_MULTICAST) && CHIP_IS_E1(bp))) + rx_mode = BNX2X_RX_MODE_ALLMULTI; + + else { /* some multicasts */ + if (CHIP_IS_E1(bp)) { + int i, old, offset; + struct dev_mc_list *mclist; + struct mac_configuration_cmd *config = + bnx2x_sp(bp, mcast_config); + + for (i = 0, mclist = dev->mc_list; + mclist && (i < dev->mc_count); + i++, mclist = mclist->next) { + + config->config_table[i]. + cam_entry.msb_mac_addr = + swab16(*(u16 *)&mclist->dmi_addr[0]); + config->config_table[i]. + cam_entry.middle_mac_addr = + swab16(*(u16 *)&mclist->dmi_addr[2]); + config->config_table[i]. + cam_entry.lsb_mac_addr = + swab16(*(u16 *)&mclist->dmi_addr[4]); + config->config_table[i].cam_entry.flags = + cpu_to_le16(port); + config->config_table[i]. + target_table_entry.flags = 0; + config->config_table[i]. + target_table_entry.client_id = 0; + config->config_table[i]. + target_table_entry.vlan_id = 0; + + DP(NETIF_MSG_IFUP, + "setting MCAST[%d] (%04x:%04x:%04x)\n", i, + config->config_table[i]. + cam_entry.msb_mac_addr, + config->config_table[i]. + cam_entry.middle_mac_addr, + config->config_table[i]. + cam_entry.lsb_mac_addr); + } + old = config->hdr.length; + if (old > i) { + for (; i < old; i++) { + if (CAM_IS_INVALID(config-> + config_table[i])) { + /* already invalidated */ + break; + } + /* invalidate */ + CAM_INVALIDATE(config-> + config_table[i]); + } + } + + if (CHIP_REV_IS_SLOW(bp)) + offset = BNX2X_MAX_EMUL_MULTI*(1 + port); + else + offset = BNX2X_MAX_MULTICAST*(1 + port); + + config->hdr.length = i; + config->hdr.offset = offset; + config->hdr.client_id = BP_CL_ID(bp); + config->hdr.reserved1 = 0; + + bnx2x_sp_post(bp, RAMROD_CMD_ID_ETH_SET_MAC, 0, + U64_HI(bnx2x_sp_mapping(bp, mcast_config)), + U64_LO(bnx2x_sp_mapping(bp, mcast_config)), + 0); + } else { /* E1H */ + /* Accept one or more multicasts */ + struct dev_mc_list *mclist; + u32 mc_filter[MC_HASH_SIZE]; + u32 crc, bit, regidx; + int i; + + memset(mc_filter, 0, 4 * MC_HASH_SIZE); + + for (i = 0, mclist = dev->mc_list; + mclist && (i < dev->mc_count); + i++, mclist = mclist->next) { + + DP(NETIF_MSG_IFUP, "Adding mcast MAC: " + "%02x:%02x:%02x:%02x:%02x:%02x\n", + mclist->dmi_addr[0], mclist->dmi_addr[1], + mclist->dmi_addr[2], mclist->dmi_addr[3], + mclist->dmi_addr[4], mclist->dmi_addr[5]); + + crc = crc32c_le(0, mclist->dmi_addr, ETH_ALEN); + bit = (crc >> 24) & 0xff; + regidx = bit >> 5; + bit &= 0x1f; + mc_filter[regidx] |= (1 << bit); + } + + for (i = 0; i < MC_HASH_SIZE; i++) + REG_WR(bp, MC_HASH_OFFSET(bp, i), + mc_filter[i]); + } + } + + bp->rx_mode = rx_mode; + bnx2x_set_storm_rx_mode(bp); +} + +/* called with rtnl_lock */ +static int bnx2x_change_mac_addr(struct net_device *dev, void *p) +{ + struct sockaddr *addr = p; + struct bnx2x *bp = netdev_priv(dev); + + if (!is_valid_ether_addr((u8 *)(addr->sa_data))) + return -EINVAL; + + memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); + if (netif_running(dev)) { + if (CHIP_IS_E1(bp)) + bnx2x_set_mac_addr_e1(bp, 1); + else + bnx2x_set_mac_addr_e1h(bp, 1); + } + + return 0; +} + +/* called with rtnl_lock */ +static int bnx2x_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) +{ + struct mii_ioctl_data *data = if_mii(ifr); + struct bnx2x *bp = netdev_priv(dev); + int port = BP_PORT(bp); + int err; + + switch (cmd) { + case SIOCGMIIPHY: + data->phy_id = bp->port.phy_addr; + + /* fallthrough */ + + case SIOCGMIIREG: { + u16 mii_regval; + + if (!netif_running(dev)) + return -EAGAIN; + + mutex_lock(&bp->port.phy_mutex); + err = bnx2x_cl45_read(bp, port, 0, bp->port.phy_addr, + DEFAULT_PHY_DEV_ADDR, + (data->reg_num & 0x1f), &mii_regval); + data->val_out = mii_regval; + mutex_unlock(&bp->port.phy_mutex); + return err; + } + + case SIOCSMIIREG: + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + + if (!netif_running(dev)) + return -EAGAIN; + + mutex_lock(&bp->port.phy_mutex); + err = bnx2x_cl45_write(bp, port, 0, bp->port.phy_addr, + DEFAULT_PHY_DEV_ADDR, + (data->reg_num & 0x1f), data->val_in); + mutex_unlock(&bp->port.phy_mutex); + return err; + + default: + /* do nothing */ + break; + } + + return -EOPNOTSUPP; +} + +/* called with rtnl_lock */ +static int bnx2x_change_mtu(struct net_device *dev, int new_mtu) +{ + struct bnx2x *bp = netdev_priv(dev); + int rc = 0; + + if ((new_mtu > ETH_MAX_JUMBO_PACKET_SIZE) || + ((new_mtu + ETH_HLEN) < ETH_MIN_PACKET_SIZE)) + return -EINVAL; + + /* This does not race with packet allocation + * because the actual alloc size is + * only updated as part of load + */ + dev->mtu = new_mtu; + + if (netif_running(dev)) { + bnx2x_nic_unload(bp, UNLOAD_NORMAL); + rc = bnx2x_nic_load(bp, LOAD_NORMAL); + } + + return rc; +} + +static void bnx2x_tx_timeout(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + +#ifdef BNX2X_STOP_ON_ERROR + if (!bp->panic) + bnx2x_panic(); +#endif + /* This allows the netif to be shutdown gracefully before resetting */ + schedule_work(&bp->reset_task); +} + +#ifdef BCM_VLAN +/* called with rtnl_lock */ +static void bnx2x_vlan_rx_register(struct net_device *dev, + struct vlan_group *vlgrp) +{ + struct bnx2x *bp = netdev_priv(dev); + + bp->vlgrp = vlgrp; + if (netif_running(dev)) + bnx2x_set_client_config(bp); +} + +#if (LINUX_VERSION_CODE < 0x020616) /* ! BNX2X_UPSTREAM */ +static void bnx2x_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid) +{ + struct bnx2x *bp = netdev_priv(dev); + + if (bp->vlgrp) + bp->vlgrp->vlan_devices[vid] = NULL; +} +#endif +#endif + +#if defined(HAVE_POLL_CONTROLLER) || defined(CONFIG_NET_POLL_CONTROLLER) +static void poll_bnx2x(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + + disable_irq(bp->pdev->irq); +#if (LINUX_VERSION_CODE < 0x20613) + bnx2x_interrupt(bp->pdev->irq, dev, NULL); +#else /* BNX2X_UPSTREAM */ + bnx2x_interrupt(bp->pdev->irq, dev); +#endif + enable_irq(bp->pdev->irq); +} +#endif + +static int __devinit bnx2x_init_dev(struct pci_dev *pdev, + struct net_device *dev) +{ + struct bnx2x *bp; + int rc; + +#if (LINUX_VERSION_CODE < 0x020618) /* ! BNX2X_UPSTREAM */ + SET_MODULE_OWNER(dev); +#endif +#if (LINUX_VERSION_CODE >= 0x20419) /* BNX2X_UPSTREAM */ + SET_NETDEV_DEV(dev, &pdev->dev); +#endif + bp = netdev_priv(dev); + + bp->dev = dev; + bp->pdev = pdev; + bp->flags = 0; + bp->func = PCI_FUNC(pdev->devfn); + + rc = pci_enable_device(pdev); + if (rc) { + printk(KERN_ERR PFX "Cannot enable PCI device, aborting\n"); + goto err_out; + } + + if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) { + printk(KERN_ERR PFX "Cannot find PCI device base address," + " aborting\n"); + rc = -ENODEV; + goto err_out_disable; + } + + if (!(pci_resource_flags(pdev, 2) & IORESOURCE_MEM)) { + printk(KERN_ERR PFX "Cannot find second PCI device" + " base address, aborting\n"); + rc = -ENODEV; + goto err_out_disable; + } + +#if (LINUX_VERSION_CODE >= 0x20614) /* BNX2X_UPSTREAM */ + if (atomic_read(&pdev->enable_cnt) == 1) { +#endif + rc = pci_request_regions(pdev, DRV_MODULE_NAME); + if (rc) { + printk(KERN_ERR PFX "Cannot obtain PCI resources," + " aborting\n"); + goto err_out_disable; + } + + pci_set_master(pdev); +#if (LINUX_VERSION_CODE >= 0x2060b) /* BNX2X_UPSTREAM */ + pci_save_state(pdev); +#else + pci_save_state(pdev, bp->pci_state); +#endif +#if (LINUX_VERSION_CODE >= 0x20614) /* BNX2X_UPSTREAM */ + } +#endif + + bp->pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); + if (bp->pm_cap == 0) { + printk(KERN_ERR PFX "Cannot find power management" + " capability, aborting\n"); + rc = -EIO; + goto err_out_release; + } + + bp->pcie_cap = pci_find_capability(pdev, PCI_CAP_ID_EXP); + if (bp->pcie_cap == 0) { + printk(KERN_ERR PFX "Cannot find PCI Express capability," + " aborting\n"); + rc = -EIO; + goto err_out_release; + } + + if (pci_set_dma_mask(pdev, DMA_64BIT_MASK) == 0) { + bp->flags |= USING_DAC_FLAG; + if (pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK) != 0) { + printk(KERN_ERR PFX "pci_set_consistent_dma_mask" + " failed, aborting\n"); + rc = -EIO; + goto err_out_release; + } + + } else if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) { + printk(KERN_ERR PFX "System does not support DMA," + " aborting\n"); + rc = -EIO; + goto err_out_release; + } + + dev->mem_start = pci_resource_start(pdev, 0); + dev->base_addr = dev->mem_start; + dev->mem_end = pci_resource_end(pdev, 0); + + dev->irq = pdev->irq; + + bp->regview = ioremap_nocache(dev->base_addr, + pci_resource_len(pdev, 0)); + if (!bp->regview) { + printk(KERN_ERR PFX "Cannot map register space, aborting\n"); + rc = -ENOMEM; + goto err_out_release; + } + + bp->doorbells = ioremap_nocache(pci_resource_start(pdev, 2), + min_t(u64, BNX2X_DB_SIZE, + pci_resource_len(pdev, 2))); + if (!bp->doorbells) { + printk(KERN_ERR PFX "Cannot map doorbell space, aborting\n"); + rc = -ENOMEM; + goto err_out_unmap; + } + + bnx2x_set_power_state(bp, PCI_D0); + + /* clean indirect addresses */ + pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, + PCICFG_VENDOR_ID_OFFSET); + REG_WR(bp, PXP2_REG_PGL_ADDR_88_F0 + BP_PORT(bp)*16, 0); + REG_WR(bp, PXP2_REG_PGL_ADDR_8C_F0 + BP_PORT(bp)*16, 0); + REG_WR(bp, PXP2_REG_PGL_ADDR_90_F0 + BP_PORT(bp)*16, 0); + REG_WR(bp, PXP2_REG_PGL_ADDR_94_F0 + BP_PORT(bp)*16, 0); + +#ifndef BNX2X_NEW_NAPI /* ! BNX2X_UPSTREAM */ + dev->poll = bnx2x_poll; + dev->weight = 128*4; +#endif +#if (LINUX_VERSION_CODE < 0x020618) /* ! BNX2X_UPSTREAM */ + dev->get_stats = bnx2x_get_stats; +#endif + dev->hard_start_xmit = bnx2x_start_xmit; + dev->watchdog_timeo = TX_TIMEOUT; + + dev->ethtool_ops = &bnx2x_ethtool_ops; + dev->open = bnx2x_open; + dev->stop = bnx2x_close; + dev->set_multicast_list = bnx2x_set_rx_mode; + dev->set_mac_address = bnx2x_change_mac_addr; + dev->do_ioctl = bnx2x_ioctl; + dev->change_mtu = bnx2x_change_mtu; + dev->tx_timeout = bnx2x_tx_timeout; +#ifdef BCM_VLAN + dev->vlan_rx_register = bnx2x_vlan_rx_register; +#if (LINUX_VERSION_CODE < 0x20616) /* ! BNX2X_UPSTREAM */ + dev->vlan_rx_kill_vid = bnx2x_vlan_rx_kill_vid; +#endif +#endif +#if defined(HAVE_POLL_CONTROLLER) || defined(CONFIG_NET_POLL_CONTROLLER) + dev->poll_controller = poll_bnx2x; +#endif + dev->features |= NETIF_F_SG; + dev->features |= NETIF_F_HW_CSUM; + if (bp->flags & USING_DAC_FLAG) + dev->features |= NETIF_F_HIGHDMA; +#ifdef BCM_VLAN + dev->features |= (NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX); +#endif +#ifdef NETIF_F_TSO /* BNX2X_UPSTREAM */ + dev->features |= (NETIF_F_TSO | NETIF_F_TSO_ECN); +#endif +#ifdef NETIF_F_TSO6 /* BNX2X_UPSTREAM */ + dev->features |= NETIF_F_TSO6; +#endif + + return 0; + +err_out_unmap: + if (bp->regview) { + iounmap(bp->regview); + bp->regview = NULL; + } + if (bp->doorbells) { + iounmap(bp->doorbells); + bp->doorbells = NULL; + } + +err_out_release: +#if (LINUX_VERSION_CODE >= 0x20614) /* BNX2X_UPSTREAM */ + if (atomic_read(&pdev->enable_cnt) == 1) +#endif + pci_release_regions(pdev); + +err_out_disable: + pci_disable_device(pdev); + pci_set_drvdata(pdev, NULL); + +err_out: + return rc; +} + +static int __devinit bnx2x_get_pcie_width(struct bnx2x *bp) +{ + u32 val = REG_RD(bp, PCICFG_OFFSET + PCICFG_LINK_CONTROL); + + val = (val & PCICFG_LINK_WIDTH) >> PCICFG_LINK_WIDTH_SHIFT; + return val; +} + +/* return value of 1=2.5GHz 2=5GHz */ +static int __devinit bnx2x_get_pcie_speed(struct bnx2x *bp) +{ + u32 val = REG_RD(bp, PCICFG_OFFSET + PCICFG_LINK_CONTROL); + + val = (val & PCICFG_LINK_SPEED) >> PCICFG_LINK_SPEED_SHIFT; + return val; +} + +static int __devinit bnx2x_init_one(struct pci_dev *pdev, + const struct pci_device_id *ent) +{ + static int version_printed; + struct net_device *dev = NULL; + struct bnx2x *bp; + int rc; +#if (LINUX_VERSION_CODE >= 0x20618) /* BNX2X_UPSTREAM */ + DECLARE_MAC_BUF(mac); +#endif + + if (version_printed++ == 0) + printk(KERN_INFO "%s", version); + + /* dev zeroed in init_etherdev */ + dev = alloc_etherdev(sizeof(*bp)); + if (!dev) { + printk(KERN_ERR PFX "Cannot allocate net device\n"); + return -ENOMEM; + } + + netif_carrier_off(dev); + + bp = netdev_priv(dev); +#ifdef BNX2X_STOP_ON_ERROR + bp->msglevel = (0xf70f7 | debug); +#else + bp->msglevel = debug; +#endif + + rc = bnx2x_init_dev(pdev, dev); + if (rc < 0) { + free_netdev(dev); + return rc; + } + + rc = register_netdev(dev); + if (rc) { + dev_err(&pdev->dev, "Cannot register net device\n"); + goto init_one_exit; + } + + pci_set_drvdata(pdev, dev); + + rc = bnx2x_init_bp(bp); + if (rc) { + unregister_netdev(dev); + goto init_one_exit; + } + + printk(KERN_INFO "%s: %s (%c%d) PCI-E x%d %s found at mem %lx," + " IRQ %d, ", dev->name, board_info[ent->driver_data].name, + (CHIP_REV(bp) >> 12) + 'A', (CHIP_METAL(bp) >> 4), + bnx2x_get_pcie_width(bp), + (bnx2x_get_pcie_speed(bp) == 2) ? "5GHz (Gen2)" : "2.5GHz", + dev->base_addr, bp->pdev->irq); +#if (LINUX_VERSION_CODE >= 0x20618) /* BNX2X_UPSTREAM */ + printk(KERN_CONT "node addr %s\n", print_mac(mac, dev->dev_addr)); +#else + printk(KERN_CONT "node addr "); + { + int i; + + for (i = 0; i < ETH_ALEN; i++) + printk(KERN_CONT "%2.2x", dev->dev_addr[i]); + } + printk(KERN_CONT "\n"); +#endif + return 0; + +init_one_exit: + if (bp->regview) + iounmap(bp->regview); + + if (bp->doorbells) + iounmap(bp->doorbells); + + free_netdev(dev); + +#if (LINUX_VERSION_CODE >= 0x20614) /* BNX2X_UPSTREAM */ + if (atomic_read(&pdev->enable_cnt) == 1) +#endif + pci_release_regions(pdev); + + pci_disable_device(pdev); + pci_set_drvdata(pdev, NULL); + + return rc; +} + +static void __devexit bnx2x_remove_one(struct pci_dev *pdev) +{ + struct net_device *dev = pci_get_drvdata(pdev); + struct bnx2x *bp; + + if (!dev) { + printk(KERN_ERR PFX "BAD net device from bnx2x_init_one\n"); + return; + } + bp = netdev_priv(dev); + +#if (LINUX_VERSION_CODE < 0x20618) /* ! BNX2X_UPSTREAM */ + flush_scheduled_work(); +#endif + unregister_netdev(dev); + + if (bp->regview) + iounmap(bp->regview); + + if (bp->doorbells) + iounmap(bp->doorbells); + + free_netdev(dev); + +#if (LINUX_VERSION_CODE >= 0x20614) /* BNX2X_UPSTREAM */ + if (atomic_read(&pdev->enable_cnt) == 1) +#endif + pci_release_regions(pdev); + + pci_disable_device(pdev); + pci_set_drvdata(pdev, NULL); +} + +static int bnx2x_suspend(struct pci_dev *pdev, pm_message_t state) +{ + struct net_device *dev = pci_get_drvdata(pdev); + struct bnx2x *bp; + + if (!dev) { + printk(KERN_ERR PFX "BAD net device from bnx2x_init_one\n"); + return -ENODEV; + } + bp = netdev_priv(dev); + + rtnl_lock(); + +#if (LINUX_VERSION_CODE >= 0x2060b) /* BNX2X_UPSTREAM */ + pci_save_state(pdev); +#else + pci_save_state(pdev, bp->pci_state); +#endif + + if (!netif_running(dev)) { + rtnl_unlock(); + return 0; + } + +#if (LINUX_VERSION_CODE < 0x20618) /* ! BNX2X_UPSTREAM */ + flush_scheduled_work(); +#endif + netif_device_detach(dev); + + bnx2x_nic_unload(bp, UNLOAD_CLOSE); + + bnx2x_set_power_state(bp, pci_choose_state(pdev, state)); + + rtnl_unlock(); + + return 0; +} + +static int bnx2x_resume(struct pci_dev *pdev) +{ + struct net_device *dev = pci_get_drvdata(pdev); + struct bnx2x *bp; + int rc; + + if (!dev) { + printk(KERN_ERR PFX "BAD net device from bnx2x_init_one\n"); + return -ENODEV; + } + bp = netdev_priv(dev); + + rtnl_lock(); + +#if (LINUX_VERSION_CODE >= 0x2060b) /* BNX2X_UPSTREAM */ + pci_restore_state(pdev); +#else + pci_restore_state(pdev, bp->pci_state); +#endif + + if (!netif_running(dev)) { + rtnl_unlock(); + return 0; + } + + bnx2x_set_power_state(bp, PCI_D0); + netif_device_attach(dev); + + rc = bnx2x_nic_load(bp, LOAD_OPEN); + + rtnl_unlock(); + + return rc; +} + +#if (LINUX_VERSION_CODE >= 0x2060b) && !defined(__VMKLNX__) /* BNX2X_UPSTREAM */ +static int bnx2x_eeh_nic_unload(struct bnx2x *bp) +{ + int i; + + bp->state = BNX2X_STATE_ERROR; + + bp->rx_mode = BNX2X_RX_MODE_NONE; + + bnx2x_netif_stop(bp, 0); + + del_timer_sync(&bp->timer); + bp->stats_state = STATS_STATE_DISABLED; + DP(BNX2X_MSG_STATS, "stats_state - DISABLED\n"); + + /* Release IRQs */ + bnx2x_free_irq(bp); + + if (CHIP_IS_E1(bp)) { + struct mac_configuration_cmd *config = + bnx2x_sp(bp, mcast_config); + + for (i = 0; i < config->hdr.length; i++) + CAM_INVALIDATE(config->config_table[i]); + } + + /* Free SKBs, SGEs, TPA pool and driver internals */ + bnx2x_free_skbs(bp); + for_each_queue(bp, i) + bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE); + bnx2x_free_mem(bp); + + bp->state = BNX2X_STATE_CLOSED; + + netif_carrier_off(bp->dev); + + return 0; +} + +static void bnx2x_eeh_recover(struct bnx2x *bp) +{ + u32 val; + + mutex_init(&bp->port.phy_mutex); + + bp->common.shmem_base = REG_RD(bp, MISC_REG_SHARED_MEM_ADDR); + bp->link_params.shmem_base = bp->common.shmem_base; + BNX2X_DEV_INFO("shmem offset is 0x%x\n", bp->common.shmem_base); + + if (!bp->common.shmem_base || + (bp->common.shmem_base < 0xA0000) || + (bp->common.shmem_base >= 0xC0000)) { + BNX2X_DEV_INFO("MCP not active\n"); + bp->flags |= NO_MCP_FLAG; + return; + } + + val = SHMEM_RD(bp, validity_map[BP_PORT(bp)]); + if ((val & (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) + != (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB)) + BNX2X_ERR("BAD MCP validity signature\n"); + + if (!BP_NOMCP(bp)) { + bp->fw_seq = (SHMEM_RD(bp, func_mb[BP_FUNC(bp)].drv_mb_header) + & DRV_MSG_SEQ_NUMBER_MASK); + BNX2X_DEV_INFO("fw_seq 0x%08x\n", bp->fw_seq); + } +} + +/** + * bnx2x_io_error_detected - called when PCI error is detected + * @pdev: Pointer to PCI device + * @state: The current pci connection state + * + * This function is called after a PCI bus error affecting + * this device has been detected. + */ +static pci_ers_result_t bnx2x_io_error_detected(struct pci_dev *pdev, + pci_channel_state_t state) +{ + struct net_device *dev = pci_get_drvdata(pdev); + struct bnx2x *bp = netdev_priv(dev); + + rtnl_lock(); + + netif_device_detach(dev); + + if (netif_running(dev)) + bnx2x_eeh_nic_unload(bp); + + pci_disable_device(pdev); + + rtnl_unlock(); + + /* Request a slot reset */ + return PCI_ERS_RESULT_NEED_RESET; +} + +/** + * bnx2x_io_slot_reset - called after the PCI bus has been reset + * @pdev: Pointer to PCI device + * + * Restart the card from scratch, as if from a cold-boot. + */ +static pci_ers_result_t bnx2x_io_slot_reset(struct pci_dev *pdev) +{ + struct net_device *dev = pci_get_drvdata(pdev); + struct bnx2x *bp = netdev_priv(dev); + + rtnl_lock(); + + if (pci_enable_device(pdev)) { + dev_err(&pdev->dev, + "Cannot re-enable PCI device after reset\n"); + rtnl_unlock(); + return PCI_ERS_RESULT_DISCONNECT; + } + + pci_set_master(pdev); + pci_restore_state(pdev); + + if (netif_running(dev)) + bnx2x_set_power_state(bp, PCI_D0); + + rtnl_unlock(); + + return PCI_ERS_RESULT_RECOVERED; +} + +/** + * bnx2x_io_resume - called when traffic can start flowing again + * @pdev: Pointer to PCI device + * + * This callback is called when the error recovery driver tells us that + * its OK to resume normal operation. + */ +static void bnx2x_io_resume(struct pci_dev *pdev) +{ + struct net_device *dev = pci_get_drvdata(pdev); + struct bnx2x *bp = netdev_priv(dev); + + rtnl_lock(); + + bnx2x_eeh_recover(bp); + + if (netif_running(dev)) + bnx2x_nic_load(bp, LOAD_NORMAL); + + netif_device_attach(dev); + + rtnl_unlock(); +} + +static struct pci_error_handlers bnx2x_err_handler = { + .error_detected = bnx2x_io_error_detected, + .slot_reset = bnx2x_io_slot_reset, + .resume = bnx2x_io_resume, +}; +#endif + +static struct pci_driver bnx2x_pci_driver = { + .name = DRV_MODULE_NAME, + .id_table = bnx2x_pci_tbl, + .probe = bnx2x_init_one, + .remove = __devexit_p(bnx2x_remove_one), + .suspend = bnx2x_suspend, + .resume = bnx2x_resume, +#if (LINUX_VERSION_CODE >= 0x2060b) && !defined(__VMKLNX__) /* BNX2X_UPSTREAM */ + .err_handler = &bnx2x_err_handler, +#endif +}; + +static int __init bnx2x_init(void) +{ +#if (LINUX_VERSION_CODE >= 0x020600) /* BNX2X_UPSTREAM */ + return pci_register_driver(&bnx2x_pci_driver); +#else + return pci_module_init(&bnx2x_pci_driver); +#endif +} + +static void __exit bnx2x_cleanup(void) +{ + pci_unregister_driver(&bnx2x_pci_driver); +} + +module_init(bnx2x_init); +module_exit(bnx2x_cleanup); + +#ifdef BCM_CNIC + +/* count denotes the number of new completions we have seen */ +static void bnx2x_cnic_sp_post(struct bnx2x *bp, int count) +{ + int func = BP_FUNC(bp); + +#ifdef BNX2X_STOP_ON_ERROR + if (unlikely(bp->panic)) + return; +#endif + + spin_lock_bh(&bp->spq_lock); + bp->cnic_spq_pending -= count; + + for (; bp->cnic_spq_pending < bp->cnic_eth_dev.max_kwqe_pending; + bp->cnic_spq_pending++) { + + if (!bp->cnic_kwq_pending) + break; + + *bp->spq_prod_bd = *bp->cnic_kwq_cons; + + bp->cnic_kwq_pending--; + + DP(NETIF_MSG_TIMER, "pending on SPQ %d, on KWQ %d count %d\n", + bp->cnic_spq_pending, bp->cnic_kwq_pending, count); + + if (bp->spq_prod_bd == bp->spq_last_bd) { + bp->spq_prod_bd = bp->spq; + bp->spq_prod_idx = 0; + DP(NETIF_MSG_TIMER, "end of spq\n"); + + } else { + bp->spq_prod_bd++; + bp->spq_prod_idx++; + } + + if (bp->cnic_kwq_cons == bp->cnic_kwq_last) + bp->cnic_kwq_cons = bp->cnic_kwq; + else + bp->cnic_kwq_cons++; + } + + REG_WR(bp, BAR_XSTRORM_INTMEM + XSTORM_SPQ_PROD_OFFSET(func), + bp->spq_prod_idx); + + spin_unlock_bh(&bp->spq_lock); +} + +static int bnx2x_cnic_sp_queue(struct net_device *dev, + struct kwqe_16 *kwqes[], u32 count) +{ + struct bnx2x *bp = netdev_priv(dev); + int i; + +#ifdef BNX2X_STOP_ON_ERROR + if (unlikely(bp->panic)) + return -EIO; +#endif + + spin_lock_bh(&bp->spq_lock); + + for (i = 0; i < count; i++) { + struct eth_spe *spe = (struct eth_spe *)kwqes[i]; + + if (bp->cnic_spq_pending == MAX_SP_DESC_CNT) + break; + + *bp->cnic_kwq_prod = *spe; + + bp->cnic_kwq_pending++; + + DP(NETIF_MSG_TIMER, "L5 SPQE %x %x %x:%x pos %d\n", + spe->hdr.conn_and_cmd_data, spe->hdr.type, + spe->data.mac_config_addr.hi, + spe->data.mac_config_addr.lo, + bp->cnic_kwq_pending); + + if (bp->cnic_kwq_prod == bp->cnic_kwq_last) + bp->cnic_kwq_prod = bp->cnic_kwq; + else + bp->cnic_kwq_prod++; + } + + spin_unlock_bh(&bp->spq_lock); + + if (bp->cnic_spq_pending < bp->cnic_eth_dev.max_kwqe_pending) + bnx2x_cnic_sp_post(bp, 0); + + return i; +} + +static int bnx2x_cnic_ctl_send(struct bnx2x *bp, struct cnic_ctl_info *ctl) +{ + struct cnic_ops *c_ops; + int rc = 0; + + rcu_read_lock(); + c_ops = rcu_dereference(bp->cnic_ops); + if (c_ops) + rc = c_ops->cnic_ctl(bp->cnic_data, ctl); + rcu_read_unlock(); + + /* since for now we don't handle send failure just tell the user */ + if (rc) + BNX2X_ERR("sending cmd %x returned %d\n", ctl->cmd, rc); + + return rc; +} + +/* + * for commands that have no data + */ +static int bnx2x_cnic_notify(struct bnx2x *bp, int cmd) +{ + struct cnic_ctl_info ctl = {0}; + + ctl.cmd = cmd; + + return bnx2x_cnic_ctl_send(bp, &ctl); +} + +static void bnx2x_cnic_cfc_comp(struct bnx2x *bp, int cid) +{ + struct cnic_ctl_info ctl; + + /* first we tell CNIC and only then we count this as a completion */ + ctl.cmd = CNIC_CTL_COMPLETION_CMD; + ctl.data.comp.cid = cid; + + bnx2x_cnic_ctl_send(bp, &ctl); + bnx2x_cnic_sp_post(bp, 1); +} + +static int bnx2x_drv_ctl(struct net_device *dev, struct drv_ctl_info *ctl) +{ + struct bnx2x *bp = netdev_priv(dev); + + switch (ctl->cmd) { + case DRV_CTL_CTXTBL_WR_CMD: + { + u32 index = ctl->data.io.offset; + dma_addr_t addr = ctl->data.io.dma_addr; + + bnx2x_ilt_wr(bp, index, addr); + return 0; + } + break; + case DRV_CTL_COMPLETION_CMD: + { + int count = ctl->data.comp.comp_count; + + bnx2x_cnic_sp_post(bp, count); + return 0; + } + break; + default: + BNX2X_ERR("unknown command %x\n", ctl->cmd); + return -EINVAL; + } +} + +static void bnx2x_setup_cnic_irq_info(struct bnx2x *bp) +{ + struct cnic_eth_dev *cp = &bp->cnic_eth_dev; + +#ifdef CONFIG_PCI_MSI /* BNX2X_UPSTREAM */ + if (bp->flags & USING_MSIX_FLAG) { + cp->drv_state |= CNIC_DRV_STATE_USING_MSIX; + cp->irq_arr[0].irq_flags |= CNIC_IRQ_FL_MSIX; + cp->irq_arr[0].vector = bp->msix_table[CNIC_SB_ID + 1].vector; + } else { +#else + { +#endif + cp->drv_state &= ~CNIC_DRV_STATE_USING_MSIX; + cp->irq_arr[0].irq_flags &= ~CNIC_IRQ_FL_MSIX; + } + cp->irq_arr[0].status_blk = bp->cnic_sb; + cp->irq_arr[0].status_blk_num = CNIC_SB_ID; + + cp->num_irq = 1; +} + +static int bnx2x_register_cnic(struct net_device *dev, struct cnic_ops *ops, + void *data) +{ + struct bnx2x *bp = netdev_priv(dev); + struct cnic_eth_dev *cp = &bp->cnic_eth_dev; + + if (ops == NULL) + return -EINVAL; + +#if !defined(__VMKLNX__) + if (!try_module_get(ops->cnic_owner)) + return -EBUSY; +#endif + + if (atomic_read(&bp->intr_sem) != 0) + return -EBUSY; + + bp->cnic_kwq = kzalloc(PAGE_SIZE, GFP_KERNEL); + if (!bp->cnic_kwq) + return -ENOMEM; + + bp->cnic_kwq_cons = bp->cnic_kwq; + bp->cnic_kwq_prod = bp->cnic_kwq; + bp->cnic_kwq_last = bp->cnic_kwq + SP_DESC_CNT; + + bp->cnic_spq_pending = 0; + bp->cnic_kwq_pending = 0; + + bp->cnic_data = data; + rcu_assign_pointer(bp->cnic_ops, ops); + + cp->num_irq = 0; + cp->drv_state = CNIC_DRV_STATE_REGD; + + bnx2x_init_sb(bp, bp->cnic_sb, bp->cnic_sb_mapping, CNIC_SB_ID); + + bnx2x_setup_cnic_irq_info(bp); + + return 0; +} + +static int bnx2x_unregister_cnic(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + struct cnic_eth_dev *cp = &bp->cnic_eth_dev; + + cp->drv_state = 0; +#if !defined(__VMKLNX__) + module_put(bp->cnic_ops->cnic_owner); +#endif + rcu_assign_pointer(bp->cnic_ops, NULL); +#if !defined(__VMKLNX__) + synchronize_rcu(); +#endif + kfree(bp->cnic_kwq); + + return 0; +} + +struct cnic_eth_dev *bnx2x_cnic_probe(struct net_device *dev) +{ + struct bnx2x *bp = netdev_priv(dev); + struct cnic_eth_dev *cp = &bp->cnic_eth_dev; + + cp->drv_owner = THIS_MODULE; + cp->chip_id = CHIP_ID(bp); + cp->pdev = bp->pdev; + cp->io_base = bp->regview; + cp->max_kwqe_pending = 8; + cp->ctx_blk_size = CNIC_CTX_PER_ILT * sizeof(union cdu_context); + cp->ctx_tbl_offset = FUNC_ILT_BASE(bp->func) + 1; + cp->ctx_tbl_len = CNIC_ILT_LINES; + cp->starting_cid = 16; + cp->drv_submit_kwqes_16 = bnx2x_cnic_sp_queue; + cp->drv_ctl = bnx2x_drv_ctl; + cp->drv_register_cnic = bnx2x_register_cnic; + cp->drv_unregister_cnic = bnx2x_unregister_cnic; + + return cp; +} +EXPORT_SYMBOL(bnx2x_cnic_probe); + +#endif /* BCM_CNIC */ diff --git a/drivers/net/bnx2x_reg.h b/drivers/net/bnx2x_reg.h index 5a1aa0b5..9c2583dc 100644 --- a/drivers/net/bnx2x_reg.h +++ b/drivers/net/bnx2x_reg.h @@ -6,7 +6,7 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation. * - * The registers description starts with the regsister Access type followed + * The registers description starts with the register Access type followed * by size in bits. For example [RW 32]. The access types are: * R - Read only * RC - Clear on read @@ -38,21 +38,19 @@ was asserted. */ #define BRB1_REG_NUM_OF_FULL_CYCLES_0 0x600c8 #define BRB1_REG_NUM_OF_FULL_CYCLES_1 0x600cc -#define BRB1_REG_NUM_OF_FULL_CYCLES_2 0x600d0 -#define BRB1_REG_NUM_OF_FULL_CYCLES_3 0x600d4 #define BRB1_REG_NUM_OF_FULL_CYCLES_4 0x600d8 /* [ST 32] The number of cycles that the pause signal towards MAC #0 was asserted. */ #define BRB1_REG_NUM_OF_PAUSE_CYCLES_0 0x600b8 #define BRB1_REG_NUM_OF_PAUSE_CYCLES_1 0x600bc -#define BRB1_REG_NUM_OF_PAUSE_CYCLES_2 0x600c0 -#define BRB1_REG_NUM_OF_PAUSE_CYCLES_3 0x600c4 /* [RW 10] Write client 0: De-assert pause threshold. */ #define BRB1_REG_PAUSE_HIGH_THRESHOLD_0 0x60078 #define BRB1_REG_PAUSE_HIGH_THRESHOLD_1 0x6007c /* [RW 10] Write client 0: Assert pause threshold. */ #define BRB1_REG_PAUSE_LOW_THRESHOLD_0 0x60068 #define BRB1_REG_PAUSE_LOW_THRESHOLD_1 0x6006c +/* [R 24] The number of full blocks occupied by port. */ +#define BRB1_REG_PORT_NUM_OCC_BLOCKS_0 0x60094 /* [RW 1] Reset the design by software. */ #define BRB1_REG_SOFT_RESET 0x600dc /* [R 5] Used to read the value of the XX protection CAM occupancy counter. */ @@ -72,6 +70,8 @@ #define CCM_REG_CCM_INT_MASK 0xd01e4 /* [R 11] Interrupt register #0 read */ #define CCM_REG_CCM_INT_STS 0xd01d8 +/* [R 27] Parity register #0 read */ +#define CCM_REG_CCM_PRTY_STS 0xd01e8 /* [RW 3] The size of AG context region 0 in REG-pairs. Designates the MS REG-pair number (e.g. if region 0 is 6 REG-pairs; the value should be 5). Is used to determine the number of the AG context REG-pairs written back; @@ -190,25 +190,20 @@ weight 8 (the most prioritised); 1 stands for weight 1(least prioritised); 2 stands for weight 2; tc. */ #define CCM_REG_PBF_WEIGHT 0xd00ac -/* [RW 6] The physical queue number of queue number 1 per port index. */ #define CCM_REG_PHYS_QNUM1_0 0xd0134 #define CCM_REG_PHYS_QNUM1_1 0xd0138 -/* [RW 6] The physical queue number of queue number 2 per port index. */ #define CCM_REG_PHYS_QNUM2_0 0xd013c #define CCM_REG_PHYS_QNUM2_1 0xd0140 -/* [RW 6] The physical queue number of queue number 3 per port index. */ #define CCM_REG_PHYS_QNUM3_0 0xd0144 -/* [RW 6] The physical queue number of queue number 0 with QOS equal 0 port - index 0. */ +#define CCM_REG_PHYS_QNUM3_1 0xd0148 #define CCM_REG_QOS_PHYS_QNUM0_0 0xd0114 #define CCM_REG_QOS_PHYS_QNUM0_1 0xd0118 -/* [RW 6] The physical queue number of queue number 0 with QOS equal 1 port - index 0. */ #define CCM_REG_QOS_PHYS_QNUM1_0 0xd011c #define CCM_REG_QOS_PHYS_QNUM1_1 0xd0120 -/* [RW 6] The physical queue number of queue number 0 with QOS equal 2 port - index 0. */ #define CCM_REG_QOS_PHYS_QNUM2_0 0xd0124 +#define CCM_REG_QOS_PHYS_QNUM2_1 0xd0128 +#define CCM_REG_QOS_PHYS_QNUM3_0 0xd012c +#define CCM_REG_QOS_PHYS_QNUM3_1 0xd0130 /* [RW 1] STORM - CM Interface enable. If 0 - the valid input is disregarded; acknowledge output is deasserted; all other signals are treated as usual; if 1 - normal activity. */ @@ -253,6 +248,7 @@ mechanism. The fields are: [5:0] - message length; [12:6] - message pointer; 18:13] - next pointer. */ #define CCM_REG_XX_DESCR_TABLE 0xd0300 +#define CCM_REG_XX_DESCR_TABLE_SIZE 36 /* [R 7] Used to read the value of XX protection Free counter. */ #define CCM_REG_XX_FREE 0xd0184 /* [RW 6] Initial value for the credit counter; responsible for fulfilling @@ -296,6 +292,8 @@ /* [WB 24] MATT ram access. each entry has the following format:{RegionLength[11:0]; egionOffset[11:0]} */ #define CDU_REG_MATT 0x101100 +/* [RW 1] when this bit is set the CDU operates in e1hmf mode */ +#define CDU_REG_MF_MODE 0x101050 /* [R 1] indication the initializing the activity counter by the hardware was done. */ #define CFC_REG_AC_INIT_DONE 0x104078 @@ -326,10 +324,14 @@ specifications */ #define CFC_REG_ERROR_VECTOR 0x10403c #define CFC_REG_INIT_REG 0x10404c +#define CFC_REG_INTERFACES 0x104058 /* [RW 24] {weight_load_client7[2:0] to weight_load_client0[2:0]}. this field allows changing the priorities of the weighted-round-robin arbiter which selects which CFC load client should be served next */ #define CFC_REG_LCREQ_WEIGHTS 0x104084 +/* [RW 16] Link List ram access; data = {prev_lcid; ext_lcid} */ +#define CFC_REG_LINK_LIST 0x104c00 +#define CFC_REG_LINK_LIST_SIZE 256 /* [R 1] indication the initializing the link list by the hardware was done. */ #define CFC_REG_LL_INIT_DONE 0x104074 /* [R 9] Number of allocated LCIDs which are at empty state */ @@ -342,6 +344,45 @@ #define CFC_REG_NUM_LCIDS_LEAVING 0x104018 /* [RW 8] The event id for aggregated interrupt 0 */ #define CSDM_REG_AGG_INT_EVENT_0 0xc2038 +#define CSDM_REG_AGG_INT_EVENT_1 0xc203c +#define CSDM_REG_AGG_INT_EVENT_10 0xc2060 +#define CSDM_REG_AGG_INT_EVENT_11 0xc2064 +#define CSDM_REG_AGG_INT_EVENT_12 0xc2068 +#define CSDM_REG_AGG_INT_EVENT_13 0xc206c +#define CSDM_REG_AGG_INT_EVENT_14 0xc2070 +#define CSDM_REG_AGG_INT_EVENT_15 0xc2074 +#define CSDM_REG_AGG_INT_EVENT_16 0xc2078 +#define CSDM_REG_AGG_INT_EVENT_17 0xc207c +#define CSDM_REG_AGG_INT_EVENT_18 0xc2080 +#define CSDM_REG_AGG_INT_EVENT_19 0xc2084 +#define CSDM_REG_AGG_INT_EVENT_2 0xc2040 +#define CSDM_REG_AGG_INT_EVENT_20 0xc2088 +#define CSDM_REG_AGG_INT_EVENT_21 0xc208c +#define CSDM_REG_AGG_INT_EVENT_22 0xc2090 +#define CSDM_REG_AGG_INT_EVENT_23 0xc2094 +#define CSDM_REG_AGG_INT_EVENT_24 0xc2098 +#define CSDM_REG_AGG_INT_EVENT_25 0xc209c +#define CSDM_REG_AGG_INT_EVENT_26 0xc20a0 +#define CSDM_REG_AGG_INT_EVENT_27 0xc20a4 +#define CSDM_REG_AGG_INT_EVENT_28 0xc20a8 +#define CSDM_REG_AGG_INT_EVENT_29 0xc20ac +#define CSDM_REG_AGG_INT_EVENT_3 0xc2044 +#define CSDM_REG_AGG_INT_EVENT_30 0xc20b0 +#define CSDM_REG_AGG_INT_EVENT_31 0xc20b4 +#define CSDM_REG_AGG_INT_EVENT_4 0xc2048 +/* [RW 1] The T bit for aggregated interrupt 0 */ +#define CSDM_REG_AGG_INT_T_0 0xc20b8 +#define CSDM_REG_AGG_INT_T_1 0xc20bc +#define CSDM_REG_AGG_INT_T_10 0xc20e0 +#define CSDM_REG_AGG_INT_T_11 0xc20e4 +#define CSDM_REG_AGG_INT_T_12 0xc20e8 +#define CSDM_REG_AGG_INT_T_13 0xc20ec +#define CSDM_REG_AGG_INT_T_14 0xc20f0 +#define CSDM_REG_AGG_INT_T_15 0xc20f4 +#define CSDM_REG_AGG_INT_T_16 0xc20f8 +#define CSDM_REG_AGG_INT_T_17 0xc20fc +#define CSDM_REG_AGG_INT_T_18 0xc2100 +#define CSDM_REG_AGG_INT_T_19 0xc2104 /* [RW 13] The start address in the internal RAM for the cfc_rsp lcid */ #define CSDM_REG_CFC_RSP_START_ADDR 0xc2008 /* [RW 16] The maximum value of the competion counter #0 */ @@ -358,6 +399,9 @@ /* [RW 32] Interrupt mask register #0 read/write */ #define CSDM_REG_CSDM_INT_MASK_0 0xc229c #define CSDM_REG_CSDM_INT_MASK_1 0xc22ac +/* [R 32] Interrupt register #0 read */ +#define CSDM_REG_CSDM_INT_STS_0 0xc2290 +#define CSDM_REG_CSDM_INT_STS_1 0xc22a0 /* [RW 11] Parity mask register #0 read/write */ #define CSDM_REG_CSDM_PRTY_MASK 0xc22bc /* [R 11] Parity register #0 read */ @@ -443,6 +487,9 @@ /* [RW 32] Interrupt mask register #0 read/write */ #define CSEM_REG_CSEM_INT_MASK_0 0x200110 #define CSEM_REG_CSEM_INT_MASK_1 0x200120 +/* [R 32] Interrupt register #0 read */ +#define CSEM_REG_CSEM_INT_STS_0 0x200104 +#define CSEM_REG_CSEM_INT_STS_1 0x200114 /* [RW 32] Parity mask register #0 read/write */ #define CSEM_REG_CSEM_PRTY_MASK_0 0x200130 #define CSEM_REG_CSEM_PRTY_MASK_1 0x200140 @@ -453,9 +500,8 @@ #define CSEM_REG_ENABLE_OUT 0x2000a8 /* [RW 32] This address space contains all registers and memories that are placed in SEM_FAST block. The SEM_FAST registers are described in - appendix B. In order to access the SEM_FAST registers the base address - CSEM_REGISTERS_FAST_MEMORY (Offset: 0x220000) should be added to each - SEM_FAST register offset. */ + appendix B. In order to access the sem_fast registers the base address + ~fast_memory.fast_memory should be added to eachsem_fast register offset. */ #define CSEM_REG_FAST_MEMORY 0x220000 /* [RW 1] Disables input messages from FIC0 May be updated during run_time by the microcode */ @@ -539,13 +585,10 @@ #define DBG_REG_DBG_PRTY_MASK 0xc0a8 /* [R 1] Parity register #0 read */ #define DBG_REG_DBG_PRTY_STS 0xc09c -/* [RW 2] debug only: These bits indicate the credit for PCI request type 4 - interface; MUST be configured AFTER pci_ext_buffer_strt_addr_lsb/msb are - configured */ -#define DBG_REG_PCI_REQ_CREDIT 0xc120 /* [RW 32] Commands memory. The address to command X; row Y is to calculated as 14*X+Y. */ #define DMAE_REG_CMD_MEM 0x102400 +#define DMAE_REG_CMD_MEM_SIZE 224 /* [RW 1] If 0 - the CRC-16c initial value is all zeroes; if 1 - the CRC-16c initial value is all ones. */ #define DMAE_REG_CRC16C_INIT 0x10201c @@ -630,6 +673,8 @@ #define DORQ_REG_AGG_CMD3 0x17006c /* [RW 28] UCM Header. */ #define DORQ_REG_CMHEAD_RX 0x170050 +/* [RW 32] Doorbell address for RBC doorbells (function 0). */ +#define DORQ_REG_DB_ADDR0 0x17008c /* [RW 5] Interrupt mask register #0 read/write */ #define DORQ_REG_DORQ_INT_MASK 0x170180 /* [R 5] Interrupt register #0 read */ @@ -690,75 +735,34 @@ #define HC_CONFIG_0_REG_SINGLE_ISR_EN_0 (0x1<<1) #define HC_REG_AGG_INT_0 0x108050 #define HC_REG_AGG_INT_1 0x108054 -/* [RW 16] attention bit and attention acknowledge bits status for port 0 - and 1 according to the following address map: addr 0 - attn_bit_0; addr 1 - - attn_ack_bit_0; addr 2 - attn_bit_1; addr 3 - attn_ack_bit_1; */ #define HC_REG_ATTN_BIT 0x108120 -/* [RW 16] attn bits status index for attn bit msg; addr 0 - function 0; - addr 1 - functin 1 */ #define HC_REG_ATTN_IDX 0x108100 -/* [RW 32] port 0 lower 32 bits address field for attn messag. */ #define HC_REG_ATTN_MSG0_ADDR_L 0x108018 -/* [RW 32] port 1 lower 32 bits address field for attn messag. */ #define HC_REG_ATTN_MSG1_ADDR_L 0x108020 -/* [RW 8] status block number for attn bit msg - function 0; */ #define HC_REG_ATTN_NUM_P0 0x108038 -/* [RW 8] status block number for attn bit msg - function 1 */ #define HC_REG_ATTN_NUM_P1 0x10803c +#define HC_REG_COMMAND_REG 0x108180 #define HC_REG_CONFIG_0 0x108000 #define HC_REG_CONFIG_1 0x108004 +#define HC_REG_FUNC_NUM_P0 0x1080ac +#define HC_REG_FUNC_NUM_P1 0x1080b0 /* [RW 3] Parity mask register #0 read/write */ #define HC_REG_HC_PRTY_MASK 0x1080a0 /* [R 3] Parity register #0 read */ #define HC_REG_HC_PRTY_STS 0x108094 -/* [RW 17] status block interrupt mask; one in each bit means unmask; zerow - in each bit means mask; bit 0 - default SB; bit 1 - SB_0; bit 2 - SB_1... - bit 16- SB_15; addr 0 - port 0; addr 1 - port 1 */ #define HC_REG_INT_MASK 0x108108 -/* [RW 16] port 0 attn bit condition monitoring; each bit that is set will - lock a change fron 0 to 1 in the corresponding attention signals that - comes from the AEU */ #define HC_REG_LEADING_EDGE_0 0x108040 #define HC_REG_LEADING_EDGE_1 0x108048 -/* [RW 16] all producer and consumer of port 0 according to the following - addresses; U_prod: 0-15; C_prod: 16-31; U_cons: 32-47; C_cons:48-63; - Defoult_prod: U/C/X/T/Attn-64/65/66/67/68; Defoult_cons: - U/C/X/T/Attn-69/70/71/72/73 */ #define HC_REG_P0_PROD_CONS 0x108200 -/* [RW 16] all producer and consumer of port 1according to the following - addresses; U_prod: 0-15; C_prod: 16-31; U_cons: 32-47; C_cons:48-63; - Defoult_prod: U/C/X/T/Attn-64/65/66/67/68; Defoult_cons: - U/C/X/T/Attn-69/70/71/72/73 */ #define HC_REG_P1_PROD_CONS 0x108400 -/* [W 1] This register is write only and has 4 addresses as follow: 0 = - clear all PBA bits port 0; 1 = clear all pending interrupts request - port0; 2 = clear all PBA bits port 1; 3 = clear all pending interrupts - request port1; here is no meaning for the data in this register */ #define HC_REG_PBA_COMMAND 0x108140 #define HC_REG_PCI_CONFIG_0 0x108010 #define HC_REG_PCI_CONFIG_1 0x108014 -/* [RW 24] all counters acording to the following address: LSB: 0=read; 1= - read_clear; 0-71 = HW counters (the inside order is the same as the - interrupt table in the spec); 72-219 = SW counters 1 (stops after first - consumer upd) the inside order is: 72-103 - U_non_default_p0; 104-135 - C_non_defaul_p0; 36-145 U/C/X/T/Attn_default_p0; 146-177 - U_non_default_p1; 178-209 C_non_defaul_p1; 10-219 U/C/X/T/Attn_default_p1 - ; 220-367 = SW counters 2 (stops when prod=cons) the inside order is: - 220-251 - U_non_default_p0; 252-283 C_non_defaul_p0; 84-293 - U/C/X/T/Attn_default_p0; 294-325 U_non_default_p1; 326-357 - C_non_defaul_p1; 58-367 U/C/X/T/Attn_default_p1 ; 368-515 = mailbox - counters; (the inside order of the mailbox counter is 368-431 U and C - non_default_p0; 432-441 U/C/X/T/Attn_default_p0; 442-505 U and C - non_default_p1; 506-515 U/C/X/T/Attn_default_p1) */ #define HC_REG_STATISTIC_COUNTERS 0x109000 -/* [RW 16] port 0 attn bit condition monitoring; each bit that is set will - lock a change fron 1 to 0 in the corresponding attention signals that - comes from the AEU */ #define HC_REG_TRAILING_EDGE_0 0x108044 #define HC_REG_TRAILING_EDGE_1 0x10804c #define HC_REG_UC_RAM_ADDR_0 0x108028 #define HC_REG_UC_RAM_ADDR_1 0x108030 -/* [RW 16] ustorm address for coalesc now message */ #define HC_REG_USTORM_ADDR_FOR_COALESCE 0x108068 #define HC_REG_VQID_0 0x108008 #define HC_REG_VQID_1 0x10800c @@ -883,14 +887,16 @@ rom_parity; [29] MCP Latched ump_rx_parity; [30] MCP Latched ump_tx_parity; [31] MCP Latched scpad_parity; */ #define MISC_REG_AEU_AFTER_INVERT_4_MCP 0xa458 -/* [W 11] write to this register results with the clear of the latched +/* [W 14] write to this register results with the clear of the latched signals; one in d0 clears RBCR latch; one in d1 clears RBCT latch; one in d2 clears RBCN latch; one in d3 clears RBCU latch; one in d4 clears RBCP latch; one in d5 clears GRC Latched timeout attention; one in d6 clears GRC Latched reserved access attention; one in d7 clears Latched rom_parity; one in d8 clears Latched ump_rx_parity; one in d9 clears - Latched ump_tx_parity; one in d10 clears Latched scpad_parity; read from - this register return zero */ + Latched ump_tx_parity; one in d10 clears Latched scpad_parity (both + ports); one in d11 clears pxpv_misc_mps_attn; one in d12 clears + pxp_misc_exp_rom_attn0; one in d13 clears pxp_misc_exp_rom_attn1; read + from this register return zero */ #define MISC_REG_AEU_CLR_LATCH_SIGNAL 0xa45c /* [RW 32] first 32b for enabling the output for function 0 output0. mapped as follows: [0] NIG attention for function0; [1] NIG attention for @@ -907,7 +913,11 @@ TSEMI Hw interrupt; [30] PBF Parity error; [31] PBF Hw interrupt; */ #define MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0 0xa06c #define MISC_REG_AEU_ENABLE1_FUNC_0_OUT_1 0xa07c +#define MISC_REG_AEU_ENABLE1_FUNC_0_OUT_2 0xa08c #define MISC_REG_AEU_ENABLE1_FUNC_0_OUT_3 0xa09c +#define MISC_REG_AEU_ENABLE1_FUNC_0_OUT_5 0xa0bc +#define MISC_REG_AEU_ENABLE1_FUNC_0_OUT_6 0xa0cc +#define MISC_REG_AEU_ENABLE1_FUNC_0_OUT_7 0xa0dc /* [RW 32] first 32b for enabling the output for function 1 output0. mapped as follows: [0] NIG attention for function0; [1] NIG attention for function1; [2] GPIO1 function 1; [3] GPIO2 function 1; [4] GPIO3 function @@ -923,9 +933,13 @@ TSEMI Hw interrupt; [30] PBF Parity error; [31] PBF Hw interrupt; */ #define MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 0xa10c #define MISC_REG_AEU_ENABLE1_FUNC_1_OUT_1 0xa11c +#define MISC_REG_AEU_ENABLE1_FUNC_1_OUT_2 0xa12c #define MISC_REG_AEU_ENABLE1_FUNC_1_OUT_3 0xa13c -/* [RW 32] first 32b for enabling the output for close the gate nig 0. - mapped as follows: [0] NIG attention for function0; [1] NIG attention for +#define MISC_REG_AEU_ENABLE1_FUNC_1_OUT_5 0xa15c +#define MISC_REG_AEU_ENABLE1_FUNC_1_OUT_6 0xa16c +#define MISC_REG_AEU_ENABLE1_FUNC_1_OUT_7 0xa17c +/* [RW 32] first 32b for enabling the output for close the gate nig. mapped + as follows: [0] NIG attention for function0; [1] NIG attention for function1; [2] GPIO1 function 0; [3] GPIO2 function 0; [4] GPIO3 function 0; [5] GPIO4 function 0; [6] GPIO1 function 1; [7] GPIO2 function 1; [8] GPIO3 function 1; [9] GPIO4 function 1; [10] PCIE glue/PXP VPD event @@ -939,8 +953,8 @@ TSEMI Hw interrupt; [30] PBF Parity error; [31] PBF Hw interrupt; */ #define MISC_REG_AEU_ENABLE1_NIG_0 0xa0ec #define MISC_REG_AEU_ENABLE1_NIG_1 0xa18c -/* [RW 32] first 32b for enabling the output for close the gate pxp 0. - mapped as follows: [0] NIG attention for function0; [1] NIG attention for +/* [RW 32] first 32b for enabling the output for close the gate pxp. mapped + as follows: [0] NIG attention for function0; [1] NIG attention for function1; [2] GPIO1 function 0; [3] GPIO2 function 0; [4] GPIO3 function 0; [5] GPIO4 function 0; [6] GPIO1 function 1; [7] GPIO2 function 1; [8] GPIO3 function 1; [9] GPIO4 function 1; [10] PCIE glue/PXP VPD event @@ -984,34 +998,34 @@ interrupt; */ #define MISC_REG_AEU_ENABLE2_FUNC_1_OUT_0 0xa110 #define MISC_REG_AEU_ENABLE2_FUNC_1_OUT_1 0xa120 -/* [RW 32] second 32b for enabling the output for close the gate nig 0. - mapped as follows: [0] PBClient Parity error; [1] PBClient Hw interrupt; - [2] QM Parity error; [3] QM Hw interrupt; [4] Timers Parity error; [5] - Timers Hw interrupt; [6] XSDM Parity error; [7] XSDM Hw interrupt; [8] - XCM Parity error; [9] XCM Hw interrupt; [10] XSEMI Parity error; [11] - XSEMI Hw interrupt; [12] DoorbellQ Parity error; [13] DoorbellQ Hw - interrupt; [14] NIG Parity error; [15] NIG Hw interrupt; [16] Vaux PCI - core Parity error; [17] Vaux PCI core Hw interrupt; [18] Debug Parity - error; [19] Debug Hw interrupt; [20] USDM Parity error; [21] USDM Hw - interrupt; [22] UCM Parity error; [23] UCM Hw interrupt; [24] USEMI - Parity error; [25] USEMI Hw interrupt; [26] UPB Parity error; [27] UPB Hw - interrupt; [28] CSDM Parity error; [29] CSDM Hw interrupt; [30] CCM - Parity error; [31] CCM Hw interrupt; */ +/* [RW 32] second 32b for enabling the output for close the gate nig. mapped + as follows: [0] PBClient Parity error; [1] PBClient Hw interrupt; [2] QM + Parity error; [3] QM Hw interrupt; [4] Timers Parity error; [5] Timers Hw + interrupt; [6] XSDM Parity error; [7] XSDM Hw interrupt; [8] XCM Parity + error; [9] XCM Hw interrupt; [10] XSEMI Parity error; [11] XSEMI Hw + interrupt; [12] DoorbellQ Parity error; [13] DoorbellQ Hw interrupt; [14] + NIG Parity error; [15] NIG Hw interrupt; [16] Vaux PCI core Parity error; + [17] Vaux PCI core Hw interrupt; [18] Debug Parity error; [19] Debug Hw + interrupt; [20] USDM Parity error; [21] USDM Hw interrupt; [22] UCM + Parity error; [23] UCM Hw interrupt; [24] USEMI Parity error; [25] USEMI + Hw interrupt; [26] UPB Parity error; [27] UPB Hw interrupt; [28] CSDM + Parity error; [29] CSDM Hw interrupt; [30] CCM Parity error; [31] CCM Hw + interrupt; */ #define MISC_REG_AEU_ENABLE2_NIG_0 0xa0f0 #define MISC_REG_AEU_ENABLE2_NIG_1 0xa190 -/* [RW 32] second 32b for enabling the output for close the gate pxp 0. - mapped as follows: [0] PBClient Parity error; [1] PBClient Hw interrupt; - [2] QM Parity error; [3] QM Hw interrupt; [4] Timers Parity error; [5] - Timers Hw interrupt; [6] XSDM Parity error; [7] XSDM Hw interrupt; [8] - XCM Parity error; [9] XCM Hw interrupt; [10] XSEMI Parity error; [11] - XSEMI Hw interrupt; [12] DoorbellQ Parity error; [13] DoorbellQ Hw - interrupt; [14] NIG Parity error; [15] NIG Hw interrupt; [16] Vaux PCI - core Parity error; [17] Vaux PCI core Hw interrupt; [18] Debug Parity - error; [19] Debug Hw interrupt; [20] USDM Parity error; [21] USDM Hw - interrupt; [22] UCM Parity error; [23] UCM Hw interrupt; [24] USEMI - Parity error; [25] USEMI Hw interrupt; [26] UPB Parity error; [27] UPB Hw - interrupt; [28] CSDM Parity error; [29] CSDM Hw interrupt; [30] CCM - Parity error; [31] CCM Hw interrupt; */ +/* [RW 32] second 32b for enabling the output for close the gate pxp. mapped + as follows: [0] PBClient Parity error; [1] PBClient Hw interrupt; [2] QM + Parity error; [3] QM Hw interrupt; [4] Timers Parity error; [5] Timers Hw + interrupt; [6] XSDM Parity error; [7] XSDM Hw interrupt; [8] XCM Parity + error; [9] XCM Hw interrupt; [10] XSEMI Parity error; [11] XSEMI Hw + interrupt; [12] DoorbellQ Parity error; [13] DoorbellQ Hw interrupt; [14] + NIG Parity error; [15] NIG Hw interrupt; [16] Vaux PCI core Parity error; + [17] Vaux PCI core Hw interrupt; [18] Debug Parity error; [19] Debug Hw + interrupt; [20] USDM Parity error; [21] USDM Hw interrupt; [22] UCM + Parity error; [23] UCM Hw interrupt; [24] USEMI Parity error; [25] USEMI + Hw interrupt; [26] UPB Parity error; [27] UPB Hw interrupt; [28] CSDM + Parity error; [29] CSDM Hw interrupt; [30] CCM Parity error; [31] CCM Hw + interrupt; */ #define MISC_REG_AEU_ENABLE2_PXP_0 0xa100 #define MISC_REG_AEU_ENABLE2_PXP_1 0xa1a0 /* [RW 32] third 32b for enabling the output for function 0 output0. mapped @@ -1044,34 +1058,34 @@ attn1; */ #define MISC_REG_AEU_ENABLE3_FUNC_1_OUT_0 0xa114 #define MISC_REG_AEU_ENABLE3_FUNC_1_OUT_1 0xa124 -/* [RW 32] third 32b for enabling the output for close the gate nig 0. - mapped as follows: [0] CSEMI Parity error; [1] CSEMI Hw interrupt; [2] - PXP Parity error; [3] PXP Hw interrupt; [4] PXPpciClockClient Parity - error; [5] PXPpciClockClient Hw interrupt; [6] CFC Parity error; [7] CFC - Hw interrupt; [8] CDU Parity error; [9] CDU Hw interrupt; [10] DMAE - Parity error; [11] DMAE Hw interrupt; [12] IGU (HC) Parity error; [13] - IGU (HC) Hw interrupt; [14] MISC Parity error; [15] MISC Hw interrupt; - [16] pxp_misc_mps_attn; [17] Flash event; [18] SMB event; [19] MCP attn0; - [20] MCP attn1; [21] SW timers attn_1 func0; [22] SW timers attn_2 func0; - [23] SW timers attn_3 func0; [24] SW timers attn_4 func0; [25] PERST; - [26] SW timers attn_1 func1; [27] SW timers attn_2 func1; [28] SW timers - attn_3 func1; [29] SW timers attn_4 func1; [30] General attn0; [31] - General attn1; */ +/* [RW 32] third 32b for enabling the output for close the gate nig. mapped + as follows: [0] CSEMI Parity error; [1] CSEMI Hw interrupt; [2] PXP + Parity error; [3] PXP Hw interrupt; [4] PXPpciClockClient Parity error; + [5] PXPpciClockClient Hw interrupt; [6] CFC Parity error; [7] CFC Hw + interrupt; [8] CDU Parity error; [9] CDU Hw interrupt; [10] DMAE Parity + error; [11] DMAE Hw interrupt; [12] IGU (HC) Parity error; [13] IGU (HC) + Hw interrupt; [14] MISC Parity error; [15] MISC Hw interrupt; [16] + pxp_misc_mps_attn; [17] Flash event; [18] SMB event; [19] MCP attn0; [20] + MCP attn1; [21] SW timers attn_1 func0; [22] SW timers attn_2 func0; [23] + SW timers attn_3 func0; [24] SW timers attn_4 func0; [25] PERST; [26] SW + timers attn_1 func1; [27] SW timers attn_2 func1; [28] SW timers attn_3 + func1; [29] SW timers attn_4 func1; [30] General attn0; [31] General + attn1; */ #define MISC_REG_AEU_ENABLE3_NIG_0 0xa0f4 #define MISC_REG_AEU_ENABLE3_NIG_1 0xa194 -/* [RW 32] third 32b for enabling the output for close the gate pxp 0. - mapped as follows: [0] CSEMI Parity error; [1] CSEMI Hw interrupt; [2] - PXP Parity error; [3] PXP Hw interrupt; [4] PXPpciClockClient Parity - error; [5] PXPpciClockClient Hw interrupt; [6] CFC Parity error; [7] CFC - Hw interrupt; [8] CDU Parity error; [9] CDU Hw interrupt; [10] DMAE - Parity error; [11] DMAE Hw interrupt; [12] IGU (HC) Parity error; [13] - IGU (HC) Hw interrupt; [14] MISC Parity error; [15] MISC Hw interrupt; - [16] pxp_misc_mps_attn; [17] Flash event; [18] SMB event; [19] MCP attn0; - [20] MCP attn1; [21] SW timers attn_1 func0; [22] SW timers attn_2 func0; - [23] SW timers attn_3 func0; [24] SW timers attn_4 func0; [25] PERST; - [26] SW timers attn_1 func1; [27] SW timers attn_2 func1; [28] SW timers - attn_3 func1; [29] SW timers attn_4 func1; [30] General attn0; [31] - General attn1; */ +/* [RW 32] third 32b for enabling the output for close the gate pxp. mapped + as follows: [0] CSEMI Parity error; [1] CSEMI Hw interrupt; [2] PXP + Parity error; [3] PXP Hw interrupt; [4] PXPpciClockClient Parity error; + [5] PXPpciClockClient Hw interrupt; [6] CFC Parity error; [7] CFC Hw + interrupt; [8] CDU Parity error; [9] CDU Hw interrupt; [10] DMAE Parity + error; [11] DMAE Hw interrupt; [12] IGU (HC) Parity error; [13] IGU (HC) + Hw interrupt; [14] MISC Parity error; [15] MISC Hw interrupt; [16] + pxp_misc_mps_attn; [17] Flash event; [18] SMB event; [19] MCP attn0; [20] + MCP attn1; [21] SW timers attn_1 func0; [22] SW timers attn_2 func0; [23] + SW timers attn_3 func0; [24] SW timers attn_4 func0; [25] PERST; [26] SW + timers attn_1 func1; [27] SW timers attn_2 func1; [28] SW timers attn_3 + func1; [29] SW timers attn_4 func1; [30] General attn0; [31] General + attn1; */ #define MISC_REG_AEU_ENABLE3_PXP_0 0xa104 #define MISC_REG_AEU_ENABLE3_PXP_1 0xa1a4 /* [RW 32] fourth 32b for enabling the output for function 0 output0.mapped @@ -1088,6 +1102,10 @@ Latched ump_tx_parity; [31] MCP Latched scpad_parity; */ #define MISC_REG_AEU_ENABLE4_FUNC_0_OUT_0 0xa078 #define MISC_REG_AEU_ENABLE4_FUNC_0_OUT_2 0xa098 +#define MISC_REG_AEU_ENABLE4_FUNC_0_OUT_4 0xa0b8 +#define MISC_REG_AEU_ENABLE4_FUNC_0_OUT_5 0xa0c8 +#define MISC_REG_AEU_ENABLE4_FUNC_0_OUT_6 0xa0d8 +#define MISC_REG_AEU_ENABLE4_FUNC_0_OUT_7 0xa0e8 /* [RW 32] fourth 32b for enabling the output for function 1 output0.mapped as follows: [0] General attn2; [1] General attn3; [2] General attn4; [3] General attn5; [4] General attn6; [5] General attn7; [6] General attn8; @@ -1102,34 +1120,36 @@ Latched ump_tx_parity; [31] MCP Latched scpad_parity; */ #define MISC_REG_AEU_ENABLE4_FUNC_1_OUT_0 0xa118 #define MISC_REG_AEU_ENABLE4_FUNC_1_OUT_2 0xa138 -/* [RW 32] fourth 32b for enabling the output for close the gate nig - 0.mapped as follows: [0] General attn2; [1] General attn3; [2] General - attn4; [3] General attn5; [4] General attn6; [5] General attn7; [6] - General attn8; [7] General attn9; [8] General attn10; [9] General attn11; - [10] General attn12; [11] General attn13; [12] General attn14; [13] - General attn15; [14] General attn16; [15] General attn17; [16] General - attn18; [17] General attn19; [18] General attn20; [19] General attn21; - [20] Main power interrupt; [21] RBCR Latched attn; [22] RBCT Latched - attn; [23] RBCN Latched attn; [24] RBCU Latched attn; [25] RBCP Latched - attn; [26] GRC Latched timeout attention; [27] GRC Latched reserved - access attention; [28] MCP Latched rom_parity; [29] MCP Latched - ump_rx_parity; [30] MCP Latched ump_tx_parity; [31] MCP Latched - scpad_parity; */ +#define MISC_REG_AEU_ENABLE4_FUNC_1_OUT_4 0xa158 +#define MISC_REG_AEU_ENABLE4_FUNC_1_OUT_5 0xa168 +#define MISC_REG_AEU_ENABLE4_FUNC_1_OUT_6 0xa178 +#define MISC_REG_AEU_ENABLE4_FUNC_1_OUT_7 0xa188 +/* [RW 32] fourth 32b for enabling the output for close the gate nig.mapped + as follows: [0] General attn2; [1] General attn3; [2] General attn4; [3] + General attn5; [4] General attn6; [5] General attn7; [6] General attn8; + [7] General attn9; [8] General attn10; [9] General attn11; [10] General + attn12; [11] General attn13; [12] General attn14; [13] General attn15; + [14] General attn16; [15] General attn17; [16] General attn18; [17] + General attn19; [18] General attn20; [19] General attn21; [20] Main power + interrupt; [21] RBCR Latched attn; [22] RBCT Latched attn; [23] RBCN + Latched attn; [24] RBCU Latched attn; [25] RBCP Latched attn; [26] GRC + Latched timeout attention; [27] GRC Latched reserved access attention; + [28] MCP Latched rom_parity; [29] MCP Latched ump_rx_parity; [30] MCP + Latched ump_tx_parity; [31] MCP Latched scpad_parity; */ #define MISC_REG_AEU_ENABLE4_NIG_0 0xa0f8 #define MISC_REG_AEU_ENABLE4_NIG_1 0xa198 -/* [RW 32] fourth 32b for enabling the output for close the gate pxp - 0.mapped as follows: [0] General attn2; [1] General attn3; [2] General - attn4; [3] General attn5; [4] General attn6; [5] General attn7; [6] - General attn8; [7] General attn9; [8] General attn10; [9] General attn11; - [10] General attn12; [11] General attn13; [12] General attn14; [13] - General attn15; [14] General attn16; [15] General attn17; [16] General - attn18; [17] General attn19; [18] General attn20; [19] General attn21; - [20] Main power interrupt; [21] RBCR Latched attn; [22] RBCT Latched - attn; [23] RBCN Latched attn; [24] RBCU Latched attn; [25] RBCP Latched - attn; [26] GRC Latched timeout attention; [27] GRC Latched reserved - access attention; [28] MCP Latched rom_parity; [29] MCP Latched - ump_rx_parity; [30] MCP Latched ump_tx_parity; [31] MCP Latched - scpad_parity; */ +/* [RW 32] fourth 32b for enabling the output for close the gate pxp.mapped + as follows: [0] General attn2; [1] General attn3; [2] General attn4; [3] + General attn5; [4] General attn6; [5] General attn7; [6] General attn8; + [7] General attn9; [8] General attn10; [9] General attn11; [10] General + attn12; [11] General attn13; [12] General attn14; [13] General attn15; + [14] General attn16; [15] General attn17; [16] General attn18; [17] + General attn19; [18] General attn20; [19] General attn21; [20] Main power + interrupt; [21] RBCR Latched attn; [22] RBCT Latched attn; [23] RBCN + Latched attn; [24] RBCU Latched attn; [25] RBCP Latched attn; [26] GRC + Latched timeout attention; [27] GRC Latched reserved access attention; + [28] MCP Latched rom_parity; [29] MCP Latched ump_rx_parity; [30] MCP + Latched ump_tx_parity; [31] MCP Latched scpad_parity; */ #define MISC_REG_AEU_ENABLE4_PXP_0 0xa108 #define MISC_REG_AEU_ENABLE4_PXP_1 0xa1a8 /* [RW 1] set/clr general attention 0; this will set/clr bit 94 in the aeu @@ -1148,6 +1168,7 @@ #define MISC_REG_AEU_GENERAL_ATTN_19 0xa04c #define MISC_REG_AEU_GENERAL_ATTN_10 0xa028 #define MISC_REG_AEU_GENERAL_ATTN_11 0xa02c +#define MISC_REG_AEU_GENERAL_ATTN_12 0xa030 #define MISC_REG_AEU_GENERAL_ATTN_2 0xa008 #define MISC_REG_AEU_GENERAL_ATTN_20 0xa050 #define MISC_REG_AEU_GENERAL_ATTN_21 0xa054 @@ -1158,6 +1179,7 @@ #define MISC_REG_AEU_GENERAL_ATTN_7 0xa01c #define MISC_REG_AEU_GENERAL_ATTN_8 0xa020 #define MISC_REG_AEU_GENERAL_ATTN_9 0xa024 +#define MISC_REG_AEU_GENERAL_MASK 0xa61c /* [RW 32] first 32b for inverting the input for function 0; for each bit: 0= do not invert; 1= invert; mapped as follows: [0] NIG attention for function0; [1] NIG attention for function1; [2] GPIO1 mcp; [3] GPIO2 mcp; @@ -1189,10 +1211,29 @@ #define MISC_REG_AEU_INVERTER_2_FUNC_0 0xa230 #define MISC_REG_AEU_INVERTER_2_FUNC_1 0xa240 /* [RW 10] [7:0] = mask 8 attention output signals toward IGU function0; - [9:8] = mask close the gates signals of function 0 toward PXP [8] and NIG - [9]. Zero = mask; one = unmask */ + [9:8] = raserved. Zero = mask; one = unmask */ #define MISC_REG_AEU_MASK_ATTN_FUNC_0 0xa060 #define MISC_REG_AEU_MASK_ATTN_FUNC_1 0xa064 +/* [RW 1] If set a system kill occurred */ +#define MISC_REG_AEU_SYS_KILL_OCCURRED 0xa610 +/* [RW 32] Represent the status of the input vector to the AEU when a system + kill occurred. The register is reset in por reset. Mapped as follows: [0] + NIG attention for function0; [1] NIG attention for function1; [2] GPIO1 + mcp; [3] GPIO2 mcp; [4] GPIO3 mcp; [5] GPIO4 mcp; [6] GPIO1 function 1; + [7] GPIO2 function 1; [8] GPIO3 function 1; [9] GPIO4 function 1; [10] + PCIE glue/PXP VPD event function0; [11] PCIE glue/PXP VPD event + function1; [12] PCIE glue/PXP Expansion ROM event0; [13] PCIE glue/PXP + Expansion ROM event1; [14] SPIO4; [15] SPIO5; [16] MSI/X indication for + mcp; [17] MSI/X indication for function 1; [18] BRB Parity error; [19] + BRB Hw interrupt; [20] PRS Parity error; [21] PRS Hw interrupt; [22] SRC + Parity error; [23] SRC Hw interrupt; [24] TSDM Parity error; [25] TSDM Hw + interrupt; [26] TCM Parity error; [27] TCM Hw interrupt; [28] TSEMI + Parity error; [29] TSEMI Hw interrupt; [30] PBF Parity error; [31] PBF Hw + interrupt; */ +#define MISC_REG_AEU_SYS_KILL_STATUS_0 0xa600 +#define MISC_REG_AEU_SYS_KILL_STATUS_1 0xa604 +#define MISC_REG_AEU_SYS_KILL_STATUS_2 0xa608 +#define MISC_REG_AEU_SYS_KILL_STATUS_3 0xa60c /* [R 4] This field indicates the type of the device. '0' - 2 Ports; '1' - 1 Port. */ #define MISC_REG_BOND_ID 0xa400 @@ -1206,8 +1247,80 @@ starts at 0x0 for the A0 tape-out and increments by one for each all-layer tape-out. */ #define MISC_REG_CHIP_REV 0xa40c -/* [RW 32] The following driver registers(1..6) represent 6 drivers and 32 - clients. Each client can be controlled by one driver only. One in each +/* [RW 32] The following driver registers(1...16) represent 16 drivers and + 32 clients. Each client can be controlled by one driver only. One in each + bit represent that this driver control the appropriate client (Ex: bit 5 + is set means this driver control client number 5). addr1 = set; addr0 = + clear; read from both addresses will give the same result = status. write + to address 1 will set a request to control all the clients that their + appropriate bit (in the write command) is set. if the client is free (the + appropriate bit in all the other drivers is clear) one will be written to + that driver register; if the client isn't free the bit will remain zero. + if the appropriate bit is set (the driver request to gain control on a + client it already controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW + interrupt will be asserted). write to address 0 will set a request to + free all the clients that their appropriate bit (in the write command) is + set. if the appropriate bit is clear (the driver request to free a client + it doesn't controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW interrupt will + be asserted). */ +#define MISC_REG_DRIVER_CONTROL_10 0xa3e0 +#define MISC_REG_DRIVER_CONTROL_10_SIZE 2 +/* [RW 32] The following driver registers(1...16) represent 16 drivers and + 32 clients. Each client can be controlled by one driver only. One in each + bit represent that this driver control the appropriate client (Ex: bit 5 + is set means this driver control client number 5). addr1 = set; addr0 = + clear; read from both addresses will give the same result = status. write + to address 1 will set a request to control all the clients that their + appropriate bit (in the write command) is set. if the client is free (the + appropriate bit in all the other drivers is clear) one will be written to + that driver register; if the client isn't free the bit will remain zero. + if the appropriate bit is set (the driver request to gain control on a + client it already controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW + interrupt will be asserted). write to address 0 will set a request to + free all the clients that their appropriate bit (in the write command) is + set. if the appropriate bit is clear (the driver request to free a client + it doesn't controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW interrupt will + be asserted). */ +#define MISC_REG_DRIVER_CONTROL_11 0xa3e8 +#define MISC_REG_DRIVER_CONTROL_11_SIZE 2 +/* [RW 32] The following driver registers(1...16) represent 16 drivers and + 32 clients. Each client can be controlled by one driver only. One in each + bit represent that this driver control the appropriate client (Ex: bit 5 + is set means this driver control client number 5). addr1 = set; addr0 = + clear; read from both addresses will give the same result = status. write + to address 1 will set a request to control all the clients that their + appropriate bit (in the write command) is set. if the client is free (the + appropriate bit in all the other drivers is clear) one will be written to + that driver register; if the client isn't free the bit will remain zero. + if the appropriate bit is set (the driver request to gain control on a + client it already controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW + interrupt will be asserted). write to address 0 will set a request to + free all the clients that their appropriate bit (in the write command) is + set. if the appropriate bit is clear (the driver request to free a client + it doesn't controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW interrupt will + be asserted). */ +#define MISC_REG_DRIVER_CONTROL_12 0xa3f0 +#define MISC_REG_DRIVER_CONTROL_12_SIZE 2 +/* [RW 32] The following driver registers(1...16) represent 16 drivers and + 32 clients. Each client can be controlled by one driver only. One in each + bit represent that this driver control the appropriate client (Ex: bit 5 + is set means this driver control client number 5). addr1 = set; addr0 = + clear; read from both addresses will give the same result = status. write + to address 1 will set a request to control all the clients that their + appropriate bit (in the write command) is set. if the client is free (the + appropriate bit in all the other drivers is clear) one will be written to + that driver register; if the client isn't free the bit will remain zero. + if the appropriate bit is set (the driver request to gain control on a + client it already controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW + interrupt will be asserted). write to address 0 will set a request to + free all the clients that their appropriate bit (in the write command) is + set. if the appropriate bit is clear (the driver request to free a client + it doesn't controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW interrupt will + be asserted). */ +#define MISC_REG_DRIVER_CONTROL_13 0xa3f8 +#define MISC_REG_DRIVER_CONTROL_13_SIZE 2 +/* [RW 32] The following driver registers(1...16) represent 16 drivers and + 32 clients. Each client can be controlled by one driver only. One in each bit represent that this driver control the appropriate client (Ex: bit 5 is set means this driver control client number 5). addr1 = set; addr0 = clear; read from both addresses will give the same result = status. write @@ -1223,6 +1336,64 @@ it doesn't controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW interrupt will be asserted). */ #define MISC_REG_DRIVER_CONTROL_1 0xa510 +#define MISC_REG_DRIVER_CONTROL_14 0xa5e0 +#define MISC_REG_DRIVER_CONTROL_14_SIZE 2 +/* [RW 32] The following driver registers(1...16) represent 16 drivers and + 32 clients. Each client can be controlled by one driver only. One in each + bit represent that this driver control the appropriate client (Ex: bit 5 + is set means this driver control client number 5). addr1 = set; addr0 = + clear; read from both addresses will give the same result = status. write + to address 1 will set a request to control all the clients that their + appropriate bit (in the write command) is set. if the client is free (the + appropriate bit in all the other drivers is clear) one will be written to + that driver register; if the client isn't free the bit will remain zero. + if the appropriate bit is set (the driver request to gain control on a + client it already controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW + interrupt will be asserted). write to address 0 will set a request to + free all the clients that their appropriate bit (in the write command) is + set. if the appropriate bit is clear (the driver request to free a client + it doesn't controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW interrupt will + be asserted). */ +#define MISC_REG_DRIVER_CONTROL_15 0xa5e8 +#define MISC_REG_DRIVER_CONTROL_15_SIZE 2 +/* [RW 32] The following driver registers(1...16) represent 16 drivers and + 32 clients. Each client can be controlled by one driver only. One in each + bit represent that this driver control the appropriate client (Ex: bit 5 + is set means this driver control client number 5). addr1 = set; addr0 = + clear; read from both addresses will give the same result = status. write + to address 1 will set a request to control all the clients that their + appropriate bit (in the write command) is set. if the client is free (the + appropriate bit in all the other drivers is clear) one will be written to + that driver register; if the client isn't free the bit will remain zero. + if the appropriate bit is set (the driver request to gain control on a + client it already controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW + interrupt will be asserted). write to address 0 will set a request to + free all the clients that their appropriate bit (in the write command) is + set. if the appropriate bit is clear (the driver request to free a client + it doesn't controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW interrupt will + be asserted). */ +#define MISC_REG_DRIVER_CONTROL_16 0xa5f0 +#define MISC_REG_DRIVER_CONTROL_16_SIZE 2 +/* [RW 32] The following driver registers(1...16) represent 16 drivers and + 32 clients. Each client can be controlled by one driver only. One in each + bit represent that this driver control the appropriate client (Ex: bit 5 + is set means this driver control client number 5). addr1 = set; addr0 = + clear; read from both addresses will give the same result = status. write + to address 1 will set a request to control all the clients that their + appropriate bit (in the write command) is set. if the client is free (the + appropriate bit in all the other drivers is clear) one will be written to + that driver register; if the client isn't free the bit will remain zero. + if the appropriate bit is set (the driver request to gain control on a + client it already controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW + interrupt will be asserted). write to address 0 will set a request to + free all the clients that their appropriate bit (in the write command) is + set. if the appropriate bit is clear (the driver request to free a client + it doesn't controls the ~MISC_REGISTERS_INT_STS.GENERIC_SW interrupt will + be asserted). */ +#define MISC_REG_DRIVER_CONTROL_7 0xa3c8 +/* [RW 1] e1hmf for WOL. If clr WOL signal o the PXP will be send on bit 0 + only. */ +#define MISC_REG_E1HMF_MODE 0xa5f8 /* [RW 32] GPIO. [31-28] FLOAT port 0; [27-24] FLOAT port 0; When any of these bits is written as a '1'; the corresponding SPIO bit will turn off it's drivers and become an input. This is the reset state of all GPIO @@ -1240,6 +1411,18 @@ This is the result value of the pin; not the drive value. Writing these bits will have not effect. */ #define MISC_REG_GPIO 0xa490 +/* [R 28] this field hold the last information that caused reserved + attention. bits [19:0] - address; [22:20] function; [23] reserved; + [27:24] the master that caused the attention - according to the following + encodeing:1 = pxp; 2 = mcp; 3 = usdm; 4 = tsdm; 5 = xsdm; 6 = csdm; 7 = + dbu; 8 = dmae */ +#define MISC_REG_GRC_RSV_ATTN 0xa3c0 +/* [R 28] this field hold the last information that caused timeout + attention. bits [19:0] - address; [22:20] function; [23] reserved; + [27:24] the master that caused the attention - according to the following + encodeing:1 = pxp; 2 = mcp; 3 = usdm; 4 = tsdm; 5 = xsdm; 6 = csdm; 7 = + dbu; 8 = dmae */ +#define MISC_REG_GRC_TIMEOUT_ATTN 0xa3c4 /* [RW 1] Setting this bit enables a timer in the GRC block to timeout any access that does not finish within ~misc_registers_grc_timout_val.grc_timeout_val cycles. When this bit is @@ -1282,6 +1465,11 @@ #define MISC_REG_MISC_PRTY_MASK 0xa398 /* [R 1] Parity register #0 read */ #define MISC_REG_MISC_PRTY_STS 0xa38c +#define MISC_REG_NIG_WOL_P0 0xa270 +#define MISC_REG_NIG_WOL_P1 0xa274 +/* [R 1] If set indicate that the pcie_rst_b was asserted without perst + assertion */ +#define MISC_REG_PCIE_HOT_RESET 0xa618 /* [RW 32] 32 LSB of storm PLL first register; reset val = 0x 071d2911. inside order of the bits is: [0] P1 divider[0] (reset value 1); [1] P1 divider[1] (reset value 0); [2] P1 divider[2] (reset value 0); [3] P1 @@ -1303,7 +1491,7 @@ #define MISC_REG_PLL_STORM_CTRL_2 0xa298 #define MISC_REG_PLL_STORM_CTRL_3 0xa29c #define MISC_REG_PLL_STORM_CTRL_4 0xa2a0 -/* [RW 32] reset reg#1; rite/read one = the specific block is out of reset; +/* [RW 32] reset reg#2; rite/read one = the specific block is out of reset; write/read zero = the specific block is in reset; addr 0-wr- the write value will be written to the register; addr 1-set - one will be written to all the bits that have the value of one in the data written (bits that @@ -1311,14 +1499,12 @@ written to all the bits that have the value of one in the data written (bits that have the value of zero will not be change); addr 3-ignore; read ignore from all addr except addr 00; inside order of the bits is: - [0] rst_brb1; [1] rst_prs; [2] rst_src; [3] rst_tsdm; [4] rst_tsem; [5] - rst_tcm; [6] rst_rbcr; [7] rst_nig; [8] rst_usdm; [9] rst_ucm; [10] - rst_usem; [11] rst_upb; [12] rst_ccm; [13] rst_csem; [14] rst_csdm; [15] - rst_rbcu; [16] rst_pbf; [17] rst_qm; [18] rst_tm; [19] rst_dorq; [20] - rst_xcm; [21] rst_xsdm; [22] rst_xsem; [23] rst_rbct; [24] rst_cdu; [25] - rst_cfc; [26] rst_pxp; [27] rst_pxpv; [28] rst_rbcp; [29] rst_hc; [30] - rst_dmae; [31] rst_semi_rtc; */ -#define MISC_REG_RESET_REG_1 0xa580 + [0] rst_bmac0; [1] rst_bmac1; [2] rst_emac0; [3] rst_emac1; [4] rst_grc; + [5] rst_mcp_n_reset_reg_hard_core; [6] rst_ mcp_n_hard_core_rst_b; [7] + rst_ mcp_n_reset_cmn_cpu; [8] rst_ mcp_n_reset_cmn_core; [9] rst_rbcn; + [10] rst_dbg; [11] rst_misc_core; [12] rst_dbue (UART); [13] + Pci_resetmdio_n; [14] rst_emac0_hard_core; [15] rst_emac1_hard_core; 16] + rst_pxp_rq_rd_wr; 31:17] reserved */ #define MISC_REG_RESET_REG_2 0xa590 /* [RW 20] 20 bit GRC address where the scratch-pad of the MCP that is shared with the driver resides */ @@ -1345,7 +1531,7 @@ select VAUX supply. (This is an output pin only; it is not controlled by the SET and CLR fields; it is controlled by the Main Power SM; the FLOAT field is not applicable for this pin; only the VALUE fields is relevant - - it reflects the output value); [3] reserved; [4] spio_4; [5] spio_5; [6] + it reflects the output value); [3] port swap [4] spio_4; [5] spio_5; [6] Bit 0 of UMP device ID select; read by UMP firmware; [7] Bit 1 of UMP device ID select; read by UMP firmware. */ #define MISC_REG_SPIO 0xa4fc @@ -1394,8 +1580,9 @@ #define NIG_REG_BRB1_PAUSE_IN_EN 0x100c8 /* [RW 1] output enable for RX BRB1 LP IF */ #define NIG_REG_BRB_LB_OUT_EN 0x10100 -/* [WB_W 72] Debug packet to LP from RBC; Data spelling:[63:0] data; 64] - error; [67:65]eop_bvalid; [68]eop; [69]sop; [70]port_id; 71]flush */ +/* [WB_W 82] Debug packet to LP from RBC; Data spelling:[63:0] data; 64] + error; [67:65]eop_bvalid; [68]eop; [69]sop; [70]port_id; 71]flush; + 72:73]-vnic_num; 81:74]-sideband_info */ #define NIG_REG_DEBUG_PACKET_LB 0x10800 /* [RW 1] Input enable for TX Debug packet */ #define NIG_REG_EGRESS_DEBUG_IN_EN 0x100dc @@ -1409,6 +1596,8 @@ /* [RW 1] MAC configuration for packets of port0. If 1 - all packet outputs to emac for port0; other way to bmac for port0 */ #define NIG_REG_EGRESS_EMAC0_PORT 0x10058 +/* [RW 32] TX_MNG_FIFO in NIG_TX_PORT0; data[31:0] written in FIFO order. */ +#define NIG_REG_EGRESS_MNG0_FIFO 0x1045c /* [RW 1] Input enable for TX PBF user packet port0 IF */ #define NIG_REG_EGRESS_PBF0_IN_EN 0x100cc /* [RW 1] Input enable for TX PBF user packet port1 IF */ @@ -1438,6 +1627,8 @@ #define NIG_REG_INGRESS_EOP_LB_FIFO 0x104e4 /* [RW 1] led 10g for port 0 */ #define NIG_REG_LED_10G_P0 0x10320 +/* [RW 1] led 10g for port 1 */ +#define NIG_REG_LED_10G_P1 0x10324 /* [RW 1] Port0: This bit is set to enable the use of the ~nig_registers_led_control_blink_rate_p0.led_control_blink_rate_p0 field defined below. If this bit is cleared; then the blink rate will be about @@ -1448,7 +1639,7 @@ is reset to 0x080; giving a default blink period of approximately 8Hz. */ #define NIG_REG_LED_CONTROL_BLINK_RATE_P0 0x10310 /* [RW 1] Port0: If set along with the - nig_registers_led_control_override_traffic_p0.led_control_override_traffic_p0 + ~nig_registers_led_control_override_traffic_p0.led_control_override_traffic_p0 bit and ~nig_registers_led_control_traffic_p0.led_control_traffic_p0 LED bit; the Traffic LED will blink with the blink rate specified in ~nig_registers_led_control_blink_rate_p0.led_control_blink_rate_p0 and @@ -1470,19 +1661,48 @@ /* [RW 4] led mode for port0: 0 MAC; 1-3 PHY1; 4 MAC2; 5-7 PHY4; 8-MAC3; 9-11PHY7; 12 MAC4; 13-15 PHY10; */ #define NIG_REG_LED_MODE_P0 0x102f0 +#define NIG_REG_LLH0_ACPI_PAT_0_CRC 0x1015c +#define NIG_REG_LLH0_ACPI_PAT_6_LEN 0x10154 #define NIG_REG_LLH0_BRB1_DRV_MASK 0x10244 +#define NIG_REG_LLH0_BRB1_DRV_MASK_MF 0x16048 /* [RW 1] send to BRB1 if no match on any of RMP rules. */ #define NIG_REG_LLH0_BRB1_NOT_MCP 0x1025c +/* [RW 2] Determine the classification participants. 0: no classification.1: + classification upon VLAN id. 2: classification upon MAC address. 3: + classification upon both VLAN id & MAC addr. */ +#define NIG_REG_LLH0_CLS_TYPE 0x16080 /* [RW 32] cm header for llh0 */ #define NIG_REG_LLH0_CM_HEADER 0x1007c +#define NIG_REG_LLH0_DEST_IP_0_1 0x101dc +#define NIG_REG_LLH0_DEST_MAC_0_0 0x101c0 +/* [RW 16] destination TCP address 1. The LLH will look for this address in + all incoming packets. */ +#define NIG_REG_LLH0_DEST_TCP_0 0x10220 +/* [RW 16] destination UDP address 1 The LLH will look for this address in + all incoming packets. */ +#define NIG_REG_LLH0_DEST_UDP_0 0x10214 #define NIG_REG_LLH0_ERROR_MASK 0x1008c /* [RW 8] event id for llh0 */ #define NIG_REG_LLH0_EVENT_ID 0x10084 +#define NIG_REG_LLH0_FUNC_EN 0x160fc +#define NIG_REG_LLH0_FUNC_VLAN_ID 0x16100 +/* [RW 1] Determine the IP version to look for in + ~nig_registers_llh0_dest_ip_0.llh0_dest_ip_0. 0 - IPv6; 1-IPv4 */ +#define NIG_REG_LLH0_IPV4_IPV6_0 0x10208 +/* [RW 1] t bit for llh0 */ +#define NIG_REG_LLH0_T_BIT 0x10074 +/* [RW 12] VLAN ID 1. In case of VLAN packet the LLH will look for this ID. */ +#define NIG_REG_LLH0_VLAN_ID_0 0x1022c /* [RW 8] init credit counter for port0 in LLH */ #define NIG_REG_LLH0_XCM_INIT_CREDIT 0x10554 #define NIG_REG_LLH0_XCM_MASK 0x10130 +#define NIG_REG_LLH1_BRB1_DRV_MASK 0x10248 /* [RW 1] send to BRB1 if no match on any of RMP rules. */ #define NIG_REG_LLH1_BRB1_NOT_MCP 0x102dc +/* [RW 2] Determine the classification participants. 0: no classification.1: + classification upon VLAN id. 2: classification upon MAC address. 3: + classification upon both VLAN id & MAC addr. */ +#define NIG_REG_LLH1_CLS_TYPE 0x16084 /* [RW 32] cm header for llh1 */ #define NIG_REG_LLH1_CM_HEADER 0x10080 #define NIG_REG_LLH1_ERROR_MASK 0x10090 @@ -1491,13 +1711,26 @@ /* [RW 8] init credit counter for port1 in LLH */ #define NIG_REG_LLH1_XCM_INIT_CREDIT 0x10564 #define NIG_REG_LLH1_XCM_MASK 0x10134 +/* [RW 1] When this bit is set; the LLH will expect all packets to be with + e1hov */ +#define NIG_REG_LLH_E1HOV_MODE 0x160d8 +/* [RW 1] When this bit is set; the LLH will classify the packet before + sending it to the BRB or calculating WoL on it. */ +#define NIG_REG_LLH_MF_MODE 0x16024 #define NIG_REG_MASK_INTERRUPT_PORT0 0x10330 #define NIG_REG_MASK_INTERRUPT_PORT1 0x10334 /* [RW 1] Output signal from NIG to EMAC0. When set enables the EMAC0 block. */ #define NIG_REG_NIG_EMAC0_EN 0x1003c +/* [RW 1] Output signal from NIG to EMAC1. When set enables the EMAC1 block. */ +#define NIG_REG_NIG_EMAC1_EN 0x10040 /* [RW 1] Output signal from NIG to TX_EMAC0. When set indicates to the EMAC0 to strip the CRC from the ingress packets. */ #define NIG_REG_NIG_INGRESS_EMAC0_NO_CRC 0x10044 +/* [R 32] Interrupt register #0 read */ +#define NIG_REG_NIG_INT_STS_0 0x103b0 +#define NIG_REG_NIG_INT_STS_1 0x103c0 +/* [R 32] Parity register #0 read */ +#define NIG_REG_NIG_PRTY_STS 0x103d0 /* [RW 1] Input enable for RX PBF LP IF */ #define NIG_REG_PBF_LB_IN_EN 0x100b4 /* [RW 1] Value of this register will be transmitted to port swap when @@ -1514,9 +1747,24 @@ /* [R 32] Rx statistics : In user packets discarded due to BRB backpressure for port0 */ #define NIG_REG_STAT0_BRB_DISCARD 0x105f0 +/* [R 32] Rx statistics : In user packets truncated due to BRB backpressure + for port0 */ +#define NIG_REG_STAT0_BRB_TRUNCATE 0x105f8 +/* [WB_R 36] Tx statistics : Number of packets from emac0 or bmac0 that + between 1024 and 1522 bytes for port0 */ +#define NIG_REG_STAT0_EGRESS_MAC_PKT0 0x10750 +/* [WB_R 36] Tx statistics : Number of packets from emac0 or bmac0 that + between 1523 bytes and above for port0 */ +#define NIG_REG_STAT0_EGRESS_MAC_PKT1 0x10760 /* [R 32] Rx statistics : In user packets discarded due to BRB backpressure for port1 */ #define NIG_REG_STAT1_BRB_DISCARD 0x10628 +/* [WB_R 36] Tx statistics : Number of packets from emac1 or bmac1 that + between 1024 and 1522 bytes for port1 */ +#define NIG_REG_STAT1_EGRESS_MAC_PKT0 0x107a0 +/* [WB_R 36] Tx statistics : Number of packets from emac1 or bmac1 that + between 1523 bytes and above for port1 */ +#define NIG_REG_STAT1_EGRESS_MAC_PKT1 0x107b0 /* [WB_R 64] Rx statistics : User octets received for LP */ #define NIG_REG_STAT2_BRB_OCTET 0x107e0 #define NIG_REG_STATUS_INTERRUPT_PORT0 0x10328 @@ -1529,8 +1777,12 @@ #define NIG_REG_XCM0_OUT_EN 0x100f0 /* [RW 1] output enable for RX_XCM1 IF */ #define NIG_REG_XCM1_OUT_EN 0x100f4 +/* [RW 1] control to xgxs - remote PHY in-band MDIO */ +#define NIG_REG_XGXS0_CTRL_EXTREMOTEMDIOST 0x10348 /* [RW 5] control to xgxs - CL45 DEVAD */ #define NIG_REG_XGXS0_CTRL_MD_DEVAD 0x1033c +/* [RW 1] control to xgxs; 0 - clause 45; 1 - clause 22 */ +#define NIG_REG_XGXS0_CTRL_MD_ST 0x10338 /* [RW 5] control to xgxs - CL22 PHY_ADD and CL45 PRTAD */ #define NIG_REG_XGXS0_CTRL_PHY_ADDR 0x10340 /* [R 1] status from xgxs0 that inputs to interrupt logic of link10g. */ @@ -1616,6 +1868,8 @@ #define PB_REG_PB_PRTY_MASK 0x38 /* [R 4] Parity register #0 read */ #define PB_REG_PB_PRTY_STS 0x2c +#define PRS_A_PRSU_20_REG_HASH_TCP_IPV4_PORT_0 (0x1<<0) +#define PRS_A_PRSU_20_REG_HASH_TCP_IPV6_PORT_0 (0x1<<2) #define PRS_REG_A_PRSU_20 0x40134 /* [R 8] debug only: CFC load request current credit. Transaction based. */ #define PRS_REG_CFC_LD_CURRENT_CREDIT 0x40164 @@ -1626,7 +1880,6 @@ #define PRS_REG_CFC_SEARCH_INITIAL_CREDIT 0x4011c /* [RW 24] CID for port 0 if no match */ #define PRS_REG_CID_PORT_0 0x400fc -#define PRS_REG_CID_PORT_1 0x40100 /* [RW 32] The CM header for flush message where 'load existed' bit in CFC load response is reset and packet type is 0. Used in packet start message to TCM. */ @@ -1635,6 +1888,7 @@ #define PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_2 0x400e4 #define PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_3 0x400e8 #define PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_4 0x400ec +#define PRS_REG_CM_HDR_FLUSH_LOAD_TYPE_5 0x400f0 /* [RW 32] The CM header for flush message where 'load existed' bit in CFC load response is set and packet type is 0. Used in packet start message to TCM. */ @@ -1643,6 +1897,7 @@ #define PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_2 0x400c4 #define PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_3 0x400c8 #define PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_4 0x400cc +#define PRS_REG_CM_HDR_FLUSH_NO_LOAD_TYPE_5 0x400d0 /* [RW 32] The CM header for a match and packet type 1 for loopback port. Used in packet start message to TCM. */ #define PRS_REG_CM_HDR_LOOPBACK_TYPE_1 0x4009c @@ -1658,11 +1913,15 @@ #define PRS_REG_CM_HDR_TYPE_4 0x40088 /* [RW 32] The CM header in case there was not a match on the connection */ #define PRS_REG_CM_NO_MATCH_HDR 0x400b8 +/* [RW 1] Indicates if in e1hov mode. 0=non-e1hov mode; 1=e1hov mode. */ +#define PRS_REG_E1HOV_MODE 0x401c8 /* [RW 8] The 8-bit event ID for a match and packet type 1. Used in packet start message to TCM. */ #define PRS_REG_EVENT_ID_1 0x40054 #define PRS_REG_EVENT_ID_2 0x40058 #define PRS_REG_EVENT_ID_3 0x4005c +/* [RW 16] The Ethernet type value for FCoE */ +#define PRS_REG_FCOE_TYPE 0x401d0 /* [RW 8] Context region for flush packet with packet type 0. Used in CFC load request message. */ #define PRS_REG_FLUSH_REGIONS_TYPE_0 0x40004 @@ -1730,8 +1989,17 @@ #define PXP2_REG_HST_DATA_FIFO_STATUS 0x12047c /* [R 7] Debug only: Number of used entries in the header FIFO */ #define PXP2_REG_HST_HEADER_FIFO_STATUS 0x120478 +#define PXP2_REG_PGL_ADDR_88_F0 0x120534 +#define PXP2_REG_PGL_ADDR_8C_F0 0x120538 +#define PXP2_REG_PGL_ADDR_90_F0 0x12053c +#define PXP2_REG_PGL_ADDR_94_F0 0x120540 #define PXP2_REG_PGL_CONTROL0 0x120490 #define PXP2_REG_PGL_CONTROL1 0x120514 +/* [RW 32] third dword data of expansion rom request. this register is + special. reading from it provides a vector outstanding read requests. if + a bit is zero it means that a read request on the corresponding tag did + not finish yet (not all completions have arrived for it) */ +#define PXP2_REG_PGL_EXP_ROM2 0x120808 /* [RW 32] Inbound interrupt table for CSDM: bits[31:16]-mask; its[15:0]-address */ #define PXP2_REG_PGL_INT_CSDM_0 0x1204f4 @@ -1775,8 +2043,7 @@ /* [R 1] this bit indicates that a read request was blocked because of bus_master_en was deasserted */ #define PXP2_REG_PGL_READ_BLOCKED 0x120568 -/* [R 6] debug only */ -#define PXP2_REG_PGL_TXR_CDTS 0x120528 +#define PXP2_REG_PGL_TAGS_LIMIT 0x1205a8 /* [R 18] debug only */ #define PXP2_REG_PGL_TXW_CDTS 0x12052c /* [R 1] this bit indicates that a write request was blocked because of @@ -1828,12 +2095,14 @@ #define PXP2_REG_PSWRQ_QM0_L2P 0x120038 #define PXP2_REG_PSWRQ_SRC0_L2P 0x120054 #define PXP2_REG_PSWRQ_TM0_L2P 0x12001c -/* [RW 25] Interrupt mask register #0 read/write */ -#define PXP2_REG_PXP2_INT_MASK 0x120578 -/* [R 25] Interrupt register #0 read */ -#define PXP2_REG_PXP2_INT_STS 0x12056c -/* [RC 25] Interrupt register #0 read clear */ -#define PXP2_REG_PXP2_INT_STS_CLR 0x120570 +#define PXP2_REG_PSWRQ_TSDM0_L2P 0x1200e0 +/* [RW 32] Interrupt mask register #0 read/write */ +#define PXP2_REG_PXP2_INT_MASK_0 0x120578 +/* [R 32] Interrupt register #0 read */ +#define PXP2_REG_PXP2_INT_STS_0 0x12056c +#define PXP2_REG_PXP2_INT_STS_1 0x120608 +/* [RC 32] Interrupt register #0 read clear */ +#define PXP2_REG_PXP2_INT_STS_CLR_0 0x120570 /* [RW 32] Parity mask register #0 read/write */ #define PXP2_REG_PXP2_PRTY_MASK_0 0x120588 #define PXP2_REG_PXP2_PRTY_MASK_1 0x120598 @@ -2016,8 +2285,12 @@ #define PXP2_REG_RQ_BW_WR_UBOUND29 0x1202a4 /* [RW 7] Bandwidth upper bound for VQ30 */ #define PXP2_REG_RQ_BW_WR_UBOUND30 0x1202a8 +/* [RW 18] external first_mem_addr field in L2P table for CDU module port 0 */ +#define PXP2_REG_RQ_CDU0_EFIRST_MEM_ADDR 0x120008 /* [RW 2] Endian mode for cdu */ #define PXP2_REG_RQ_CDU_ENDIAN_M 0x1201a0 +#define PXP2_REG_RQ_CDU_FIRST_ILT 0x12061c +#define PXP2_REG_RQ_CDU_LAST_ILT 0x120620 /* [RW 3] page size in L2P table for CDU module; -4k; -8k; -16k; -32k; -64k; -128k */ #define PXP2_REG_RQ_CDU_P_SIZE 0x120018 @@ -2029,18 +2302,28 @@ /* [RW 1] When '1'; requests will enter input buffers but wont get out towards the glue */ #define PXP2_REG_RQ_DISABLE_INPUTS 0x120330 -/* [RW 2] Endian mode for hc */ -#define PXP2_REG_RQ_HC_ENDIAN_M 0x1201a8 +/* [RW 1] 1 - SR will be aligned by 64B; 0 - SR will be aligned by 8B */ +#define PXP2_REG_RQ_DRAM_ALIGN 0x1205b0 +/* [RW 1] If 1 ILT failiue will not result in ELT access; An interrupt will + be asserted */ +#define PXP2_REG_RQ_ELT_DISABLE 0x12066c +/* [RW 1] when '0' ILT logic will work as in A0; otherwise B0; for back + compatibility needs; Note that different registers are used per mode */ +#define PXP2_REG_RQ_ILT_MODE 0x1205b4 /* [WB 53] Onchip address table */ #define PXP2_REG_RQ_ONCHIP_AT 0x122000 +/* [WB 53] Onchip address table - B0 */ +#define PXP2_REG_RQ_ONCHIP_AT_B0 0x128000 /* [RW 13] Pending read limiter threshold; in Dwords */ #define PXP2_REG_RQ_PDR_LIMIT 0x12033c /* [RW 2] Endian mode for qm */ #define PXP2_REG_RQ_QM_ENDIAN_M 0x120194 +#define PXP2_REG_RQ_QM_FIRST_ILT 0x120634 +#define PXP2_REG_RQ_QM_LAST_ILT 0x120638 /* [RW 3] page size in L2P table for QM module; -4k; -8k; -16k; -32k; -64k; -128k */ #define PXP2_REG_RQ_QM_P_SIZE 0x120050 -/* [RW 1] 1' indicates that the RBC has finished configurating the PSWRQ */ +/* [RW 1] 1' indicates that the RBC has finished configuring the PSWRQ */ #define PXP2_REG_RQ_RBC_DONE 0x1201b0 /* [RW 3] Max burst size filed for read requests port 0; 000 - 128B; 001:256B; 010: 512B; 11:1K:100:2K; 01:4K */ @@ -2050,16 +2333,22 @@ #define PXP2_REG_RQ_RD_MBS1 0x120168 /* [RW 2] Endian mode for src */ #define PXP2_REG_RQ_SRC_ENDIAN_M 0x12019c +#define PXP2_REG_RQ_SRC_FIRST_ILT 0x12063c +#define PXP2_REG_RQ_SRC_LAST_ILT 0x120640 /* [RW 3] page size in L2P table for SRC module; -4k; -8k; -16k; -32k; -64k; -128k */ #define PXP2_REG_RQ_SRC_P_SIZE 0x12006c /* [RW 2] Endian mode for tm */ #define PXP2_REG_RQ_TM_ENDIAN_M 0x120198 +#define PXP2_REG_RQ_TM_FIRST_ILT 0x120644 +#define PXP2_REG_RQ_TM_LAST_ILT 0x120648 /* [RW 3] page size in L2P table for TM module; -4k; -8k; -16k; -32k; -64k; -128k */ #define PXP2_REG_RQ_TM_P_SIZE 0x120034 /* [R 5] Number of entries in the ufifo; his fifo has l2p completions */ #define PXP2_REG_RQ_UFIFO_NUM_OF_ENTRY 0x12080c +/* [RW 18] external first_mem_addr field in L2P table for USDM module port 0 */ +#define PXP2_REG_RQ_USDM0_EFIRST_MEM_ADDR 0x120094 /* [R 8] Number of entries occupied by vq 0 in pswrq memory */ #define PXP2_REG_RQ_VQ0_ENTRY_CNT 0x120810 /* [R 8] Number of entries occupied by vq 10 in pswrq memory */ @@ -2130,19 +2419,63 @@ /* [RW 3] Max burst size filed for write requests port 1; 000 - 128B; 001:256B; 010: 512B; */ #define PXP2_REG_RQ_WR_MBS1 0x120164 -/* [RW 10] if Number of entries in dmae fifo will be higer than this +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_CDU_MPS 0x1205f0 +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_CSDM_MPS 0x1205d0 +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_DBG_MPS 0x1205e8 +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_DMAE_MPS 0x1205ec +/* [RW 10] if Number of entries in dmae fifo will be higher than this threshold then has_payload indication will be asserted; the default value should be equal to > write MBS size! */ #define PXP2_REG_WR_DMAE_TH 0x120368 -/* [RW 10] if Number of entries in usdmdp fifo will be higer than this +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_HC_MPS 0x1205c8 +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_QM_MPS 0x1205dc +/* [RW 1] 0 - working in A0 mode; - working in B0 mode */ +#define PXP2_REG_WR_REV_MODE 0x120670 +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_SRC_MPS 0x1205e4 +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_TM_MPS 0x1205e0 +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_TSDM_MPS 0x1205d4 +/* [RW 10] if Number of entries in usdmdp fifo will be higher than this threshold then has_payload indication will be asserted; the default value should be equal to > write MBS size! */ #define PXP2_REG_WR_USDMDP_TH 0x120348 +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_USDM_MPS 0x1205cc +/* [RW 2] 0 - 128B; - 256B; - 512B; - 1024B; when the payload in the + buffer reaches this number has_payload will be asserted */ +#define PXP2_REG_WR_XSDM_MPS 0x1205d8 /* [R 1] debug only: Indication if PSWHST arbiter is idle */ #define PXP_REG_HST_ARB_IS_IDLE 0x103004 /* [R 8] debug only: A bit mask for all PSWHST arbiter clients. '1' means this client is waiting for the arbiter. */ #define PXP_REG_HST_CLIENTS_WAITING_TO_ARB 0x103008 +/* [R 1] debug only: '1' means this PSWHST is discarding doorbells. This bit + should update accoring to 'hst_discard_doorbells' register when the state + machine is idle */ +#define PXP_REG_HST_DISCARD_DOORBELLS_STATUS 0x1030a0 +/* [R 6] debug only: A bit mask for all PSWHST internal write clients. '1' + means this PSWHST is discarding inputs from this client. Each bit should + update accoring to 'hst_discard_internal_writes' register when the state + machine is idle. */ +#define PXP_REG_HST_DISCARD_INTERNAL_WRITES_STATUS 0x10309c /* [WB 160] Used for initialization of the inbound interrupts memory */ #define PXP_REG_HST_INBOUND_INT 0x103800 /* [RW 32] Interrupt mask register #0 read/write */ @@ -2165,18 +2498,25 @@ #define QM_REG_ACTCTRINITVAL_3 0x16804c /* [RW 32] The base logical address (in bytes) of each physical queue. The index I represents the physical queue number. The 12 lsbs are ignore and - considered zero so practically there are only 20 bits in this register. */ + considered zero so practically there are only 20 bits in this register; + queues 63-0 */ #define QM_REG_BASEADDR 0x168900 /* [RW 16] The byte credit cost for each task. This value is for both ports */ #define QM_REG_BYTECRDCOST 0x168234 /* [RW 16] The initial byte credit value for both ports. */ #define QM_REG_BYTECRDINITVAL 0x168238 /* [RW 32] A bit per physical queue. If the bit is cleared then the physical - queue uses port 0 else it uses port 1. */ + queue uses port 0 else it uses port 1; queues 31-0 */ #define QM_REG_BYTECRDPORT_LSB 0x168228 /* [RW 32] A bit per physical queue. If the bit is cleared then the physical - queue uses port 0 else it uses port 1. */ + queue uses port 0 else it uses port 1; queues 95-64 */ +#define QM_REG_BYTECRDPORT_LSB_EXT_A 0x16e520 +/* [RW 32] A bit per physical queue. If the bit is cleared then the physical + queue uses port 0 else it uses port 1; queues 63-32 */ #define QM_REG_BYTECRDPORT_MSB 0x168224 +/* [RW 32] A bit per physical queue. If the bit is cleared then the physical + queue uses port 0 else it uses port 1; queues 127-96 */ +#define QM_REG_BYTECRDPORT_MSB_EXT_A 0x16e51c /* [RW 16] The byte credit value that if above the QM is considered almost full */ #define QM_REG_BYTECREDITAFULLTHR 0x168094 @@ -2203,7 +2543,7 @@ #define QM_REG_CMINTVOQMASK_6 0x16820c #define QM_REG_CMINTVOQMASK_7 0x168210 /* [RW 20] The number of connections divided by 16 which dictates the size - of each queue per port 0 */ + of each queue which belongs to even function number. */ #define QM_REG_CONNNUM_0 0x168020 /* [R 6] Keep the fill level of the fifo from write client 4 */ #define QM_REG_CQM_WRC_FIFOLVL 0x168018 @@ -2216,74 +2556,179 @@ bypass enable */ #define QM_REG_ENBYPVOQMASK 0x16823c /* [RW 32] A bit mask per each physical queue. If a bit is set then the - physical queue uses the byte credit */ + physical queue uses the byte credit; queues 31-0 */ #define QM_REG_ENBYTECRD_LSB 0x168220 /* [RW 32] A bit mask per each physical queue. If a bit is set then the - physical queue uses the byte credit */ + physical queue uses the byte credit; queues 95-64 */ +#define QM_REG_ENBYTECRD_LSB_EXT_A 0x16e518 +/* [RW 32] A bit mask per each physical queue. If a bit is set then the + physical queue uses the byte credit; queues 63-32 */ #define QM_REG_ENBYTECRD_MSB 0x16821c +/* [RW 32] A bit mask per each physical queue. If a bit is set then the + physical queue uses the byte credit; queues 127-96 */ +#define QM_REG_ENBYTECRD_MSB_EXT_A 0x16e514 /* [RW 4] If cleared then the secondary interface will not be served by the RR arbiter */ #define QM_REG_ENSEC 0x1680f0 -/* [RW 32] A bit vector per each physical queue which selects which function - number to use on PCI access for that queue. */ +/* [RW 32] NA */ #define QM_REG_FUNCNUMSEL_LSB 0x168230 -/* [RW 32] A bit vector per each physical queue which selects which function - number to use on PCI access for that queue. */ +/* [RW 32] NA */ #define QM_REG_FUNCNUMSEL_MSB 0x16822c /* [RW 32] A mask register to mask the Almost empty signals which will not - be use for the almost empty indication to the HW block */ + be use for the almost empty indication to the HW block; queues 31:0 */ #define QM_REG_HWAEMPTYMASK_LSB 0x168218 /* [RW 32] A mask register to mask the Almost empty signals which will not - be use for the almost empty indication to the HW block */ + be use for the almost empty indication to the HW block; queues 95-64 */ +#define QM_REG_HWAEMPTYMASK_LSB_EXT_A 0x16e510 +/* [RW 32] A mask register to mask the Almost empty signals which will not + be use for the almost empty indication to the HW block; queues 63:32 */ #define QM_REG_HWAEMPTYMASK_MSB 0x168214 +/* [RW 32] A mask register to mask the Almost empty signals which will not + be use for the almost empty indication to the HW block; queues 127-96 */ +#define QM_REG_HWAEMPTYMASK_MSB_EXT_A 0x16e50c /* [RW 4] The number of outstanding request to CFC */ #define QM_REG_OUTLDREQ 0x168804 /* [RC 1] A flag to indicate that overflow error occurred in one of the queues. */ #define QM_REG_OVFERROR 0x16805c -/* [RC 6] the Q were the qverflow occurs */ +/* [RC 7] the Q were the qverflow occurs */ #define QM_REG_OVFQNUM 0x168058 -/* [R 32] Pause state for physical queues 31-0 */ +/* [R 16] Pause state for physical queues 15-0 */ #define QM_REG_PAUSESTATE0 0x168410 -/* [R 32] Pause state for physical queues 64-32 */ +/* [R 16] Pause state for physical queues 31-16 */ #define QM_REG_PAUSESTATE1 0x168414 +/* [R 16] Pause state for physical queues 47-32 */ +#define QM_REG_PAUSESTATE2 0x16e684 +/* [R 16] Pause state for physical queues 63-48 */ +#define QM_REG_PAUSESTATE3 0x16e688 +/* [R 16] Pause state for physical queues 79-64 */ +#define QM_REG_PAUSESTATE4 0x16e68c +/* [R 16] Pause state for physical queues 95-80 */ +#define QM_REG_PAUSESTATE5 0x16e690 +/* [R 16] Pause state for physical queues 111-96 */ +#define QM_REG_PAUSESTATE6 0x16e694 +/* [R 16] Pause state for physical queues 127-112 */ +#define QM_REG_PAUSESTATE7 0x16e698 /* [RW 2] The PCI attributes field used in the PCI request. */ #define QM_REG_PCIREQAT 0x168054 /* [R 16] The byte credit of port 0 */ #define QM_REG_PORT0BYTECRD 0x168300 /* [R 16] The byte credit of port 1 */ #define QM_REG_PORT1BYTECRD 0x168304 -/* [WB 54] Pointer Table Memory; The mapping is as follow: ptrtbl[53:30] - read pointer; ptrtbl[29:6] write pointer; ptrtbl[5:4] read bank0; - ptrtbl[3:2] read bank 1; ptrtbl[1:0] write bank; */ +/* [RW 3] pci function number of queues 15-0 */ +#define QM_REG_PQ2PCIFUNC_0 0x16e6bc +#define QM_REG_PQ2PCIFUNC_1 0x16e6c0 +#define QM_REG_PQ2PCIFUNC_2 0x16e6c4 +#define QM_REG_PQ2PCIFUNC_3 0x16e6c8 +#define QM_REG_PQ2PCIFUNC_4 0x16e6cc +#define QM_REG_PQ2PCIFUNC_5 0x16e6d0 +#define QM_REG_PQ2PCIFUNC_6 0x16e6d4 +#define QM_REG_PQ2PCIFUNC_7 0x16e6d8 +/* [WB 54] Pointer Table Memory for queues 63-0; The mapping is as follow: + ptrtbl[53:30] read pointer; ptrtbl[29:6] write pointer; ptrtbl[5:4] read + bank0; ptrtbl[3:2] read bank 1; ptrtbl[1:0] write bank; */ #define QM_REG_PTRTBL 0x168a00 +/* [WB 54] Pointer Table Memory for queues 127-64; The mapping is as follow: + ptrtbl[53:30] read pointer; ptrtbl[29:6] write pointer; ptrtbl[5:4] read + bank0; ptrtbl[3:2] read bank 1; ptrtbl[1:0] write bank; */ +#define QM_REG_PTRTBL_EXT_A 0x16e200 /* [RW 2] Interrupt mask register #0 read/write */ #define QM_REG_QM_INT_MASK 0x168444 /* [R 2] Interrupt register #0 read */ #define QM_REG_QM_INT_STS 0x168438 -/* [RW 9] Parity mask register #0 read/write */ +/* [RW 12] Parity mask register #0 read/write */ #define QM_REG_QM_PRTY_MASK 0x168454 -/* [R 9] Parity register #0 read */ +/* [R 12] Parity register #0 read */ #define QM_REG_QM_PRTY_STS 0x168448 /* [R 32] Current queues in pipeline: Queues from 32 to 63 */ #define QM_REG_QSTATUS_HIGH 0x16802c +/* [R 32] Current queues in pipeline: Queues from 96 to 127 */ +#define QM_REG_QSTATUS_HIGH_EXT_A 0x16e408 /* [R 32] Current queues in pipeline: Queues from 0 to 31 */ #define QM_REG_QSTATUS_LOW 0x168028 -/* [R 24] The number of tasks queued for each queue */ +/* [R 32] Current queues in pipeline: Queues from 64 to 95 */ +#define QM_REG_QSTATUS_LOW_EXT_A 0x16e404 +/* [R 24] The number of tasks queued for each queue; queues 63-0 */ #define QM_REG_QTASKCTR_0 0x168308 +/* [R 24] The number of tasks queued for each queue; queues 127-64 */ +#define QM_REG_QTASKCTR_EXT_A_0 0x16e584 /* [RW 4] Queue tied to VOQ */ #define QM_REG_QVOQIDX_0 0x1680f4 #define QM_REG_QVOQIDX_10 0x16811c +#define QM_REG_QVOQIDX_100 0x16e49c +#define QM_REG_QVOQIDX_101 0x16e4a0 +#define QM_REG_QVOQIDX_102 0x16e4a4 +#define QM_REG_QVOQIDX_103 0x16e4a8 +#define QM_REG_QVOQIDX_104 0x16e4ac +#define QM_REG_QVOQIDX_105 0x16e4b0 +#define QM_REG_QVOQIDX_106 0x16e4b4 +#define QM_REG_QVOQIDX_107 0x16e4b8 +#define QM_REG_QVOQIDX_108 0x16e4bc +#define QM_REG_QVOQIDX_109 0x16e4c0 +#define QM_REG_QVOQIDX_100 0x16e49c +#define QM_REG_QVOQIDX_101 0x16e4a0 +#define QM_REG_QVOQIDX_102 0x16e4a4 +#define QM_REG_QVOQIDX_103 0x16e4a8 +#define QM_REG_QVOQIDX_104 0x16e4ac +#define QM_REG_QVOQIDX_105 0x16e4b0 +#define QM_REG_QVOQIDX_106 0x16e4b4 +#define QM_REG_QVOQIDX_107 0x16e4b8 +#define QM_REG_QVOQIDX_108 0x16e4bc +#define QM_REG_QVOQIDX_109 0x16e4c0 #define QM_REG_QVOQIDX_11 0x168120 +#define QM_REG_QVOQIDX_110 0x16e4c4 +#define QM_REG_QVOQIDX_111 0x16e4c8 +#define QM_REG_QVOQIDX_112 0x16e4cc +#define QM_REG_QVOQIDX_113 0x16e4d0 +#define QM_REG_QVOQIDX_114 0x16e4d4 +#define QM_REG_QVOQIDX_115 0x16e4d8 +#define QM_REG_QVOQIDX_116 0x16e4dc +#define QM_REG_QVOQIDX_117 0x16e4e0 +#define QM_REG_QVOQIDX_118 0x16e4e4 +#define QM_REG_QVOQIDX_119 0x16e4e8 +#define QM_REG_QVOQIDX_110 0x16e4c4 +#define QM_REG_QVOQIDX_111 0x16e4c8 +#define QM_REG_QVOQIDX_112 0x16e4cc +#define QM_REG_QVOQIDX_113 0x16e4d0 +#define QM_REG_QVOQIDX_114 0x16e4d4 +#define QM_REG_QVOQIDX_115 0x16e4d8 +#define QM_REG_QVOQIDX_116 0x16e4dc +#define QM_REG_QVOQIDX_117 0x16e4e0 +#define QM_REG_QVOQIDX_118 0x16e4e4 +#define QM_REG_QVOQIDX_119 0x16e4e8 #define QM_REG_QVOQIDX_12 0x168124 +#define QM_REG_QVOQIDX_120 0x16e4ec +#define QM_REG_QVOQIDX_121 0x16e4f0 +#define QM_REG_QVOQIDX_122 0x16e4f4 +#define QM_REG_QVOQIDX_123 0x16e4f8 +#define QM_REG_QVOQIDX_124 0x16e4fc +#define QM_REG_QVOQIDX_125 0x16e500 +#define QM_REG_QVOQIDX_126 0x16e504 +#define QM_REG_QVOQIDX_127 0x16e508 +#define QM_REG_QVOQIDX_120 0x16e4ec +#define QM_REG_QVOQIDX_121 0x16e4f0 +#define QM_REG_QVOQIDX_122 0x16e4f4 +#define QM_REG_QVOQIDX_123 0x16e4f8 +#define QM_REG_QVOQIDX_124 0x16e4fc +#define QM_REG_QVOQIDX_125 0x16e500 +#define QM_REG_QVOQIDX_126 0x16e504 +#define QM_REG_QVOQIDX_127 0x16e508 #define QM_REG_QVOQIDX_13 0x168128 #define QM_REG_QVOQIDX_14 0x16812c #define QM_REG_QVOQIDX_15 0x168130 #define QM_REG_QVOQIDX_16 0x168134 #define QM_REG_QVOQIDX_17 0x168138 #define QM_REG_QVOQIDX_21 0x168148 +#define QM_REG_QVOQIDX_22 0x16814c +#define QM_REG_QVOQIDX_23 0x168150 +#define QM_REG_QVOQIDX_24 0x168154 #define QM_REG_QVOQIDX_25 0x168158 +#define QM_REG_QVOQIDX_26 0x16815c +#define QM_REG_QVOQIDX_27 0x168160 +#define QM_REG_QVOQIDX_28 0x168164 #define QM_REG_QVOQIDX_29 0x168168 +#define QM_REG_QVOQIDX_30 0x16816c +#define QM_REG_QVOQIDX_31 0x168170 #define QM_REG_QVOQIDX_32 0x168174 #define QM_REG_QVOQIDX_33 0x168178 #define QM_REG_QVOQIDX_34 0x16817c @@ -2328,17 +2773,79 @@ #define QM_REG_QVOQIDX_61 0x1681e8 #define QM_REG_QVOQIDX_62 0x1681ec #define QM_REG_QVOQIDX_63 0x1681f0 +#define QM_REG_QVOQIDX_64 0x16e40c +#define QM_REG_QVOQIDX_65 0x16e410 +#define QM_REG_QVOQIDX_66 0x16e414 +#define QM_REG_QVOQIDX_67 0x16e418 +#define QM_REG_QVOQIDX_68 0x16e41c +#define QM_REG_QVOQIDX_69 0x16e420 #define QM_REG_QVOQIDX_60 0x1681e4 #define QM_REG_QVOQIDX_61 0x1681e8 #define QM_REG_QVOQIDX_62 0x1681ec #define QM_REG_QVOQIDX_63 0x1681f0 +#define QM_REG_QVOQIDX_64 0x16e40c +#define QM_REG_QVOQIDX_65 0x16e410 +#define QM_REG_QVOQIDX_69 0x16e420 #define QM_REG_QVOQIDX_7 0x168110 +#define QM_REG_QVOQIDX_70 0x16e424 +#define QM_REG_QVOQIDX_71 0x16e428 +#define QM_REG_QVOQIDX_72 0x16e42c +#define QM_REG_QVOQIDX_73 0x16e430 +#define QM_REG_QVOQIDX_74 0x16e434 +#define QM_REG_QVOQIDX_75 0x16e438 +#define QM_REG_QVOQIDX_76 0x16e43c +#define QM_REG_QVOQIDX_77 0x16e440 +#define QM_REG_QVOQIDX_78 0x16e444 +#define QM_REG_QVOQIDX_79 0x16e448 +#define QM_REG_QVOQIDX_70 0x16e424 +#define QM_REG_QVOQIDX_71 0x16e428 +#define QM_REG_QVOQIDX_72 0x16e42c +#define QM_REG_QVOQIDX_73 0x16e430 +#define QM_REG_QVOQIDX_74 0x16e434 +#define QM_REG_QVOQIDX_75 0x16e438 +#define QM_REG_QVOQIDX_76 0x16e43c +#define QM_REG_QVOQIDX_77 0x16e440 +#define QM_REG_QVOQIDX_78 0x16e444 +#define QM_REG_QVOQIDX_79 0x16e448 #define QM_REG_QVOQIDX_8 0x168114 +#define QM_REG_QVOQIDX_80 0x16e44c +#define QM_REG_QVOQIDX_81 0x16e450 +#define QM_REG_QVOQIDX_82 0x16e454 +#define QM_REG_QVOQIDX_83 0x16e458 +#define QM_REG_QVOQIDX_84 0x16e45c +#define QM_REG_QVOQIDX_85 0x16e460 +#define QM_REG_QVOQIDX_86 0x16e464 +#define QM_REG_QVOQIDX_87 0x16e468 +#define QM_REG_QVOQIDX_88 0x16e46c +#define QM_REG_QVOQIDX_89 0x16e470 +#define QM_REG_QVOQIDX_80 0x16e44c +#define QM_REG_QVOQIDX_81 0x16e450 +#define QM_REG_QVOQIDX_85 0x16e460 +#define QM_REG_QVOQIDX_86 0x16e464 +#define QM_REG_QVOQIDX_87 0x16e468 +#define QM_REG_QVOQIDX_88 0x16e46c +#define QM_REG_QVOQIDX_89 0x16e470 #define QM_REG_QVOQIDX_9 0x168118 -/* [R 24] Remaining pause timeout for port 0 */ -#define QM_REG_REMAINPAUSETM0 0x168418 -/* [R 24] Remaining pause timeout for port 1 */ -#define QM_REG_REMAINPAUSETM1 0x16841c +#define QM_REG_QVOQIDX_90 0x16e474 +#define QM_REG_QVOQIDX_91 0x16e478 +#define QM_REG_QVOQIDX_92 0x16e47c +#define QM_REG_QVOQIDX_93 0x16e480 +#define QM_REG_QVOQIDX_94 0x16e484 +#define QM_REG_QVOQIDX_95 0x16e488 +#define QM_REG_QVOQIDX_96 0x16e48c +#define QM_REG_QVOQIDX_97 0x16e490 +#define QM_REG_QVOQIDX_98 0x16e494 +#define QM_REG_QVOQIDX_99 0x16e498 +#define QM_REG_QVOQIDX_90 0x16e474 +#define QM_REG_QVOQIDX_91 0x16e478 +#define QM_REG_QVOQIDX_92 0x16e47c +#define QM_REG_QVOQIDX_93 0x16e480 +#define QM_REG_QVOQIDX_94 0x16e484 +#define QM_REG_QVOQIDX_95 0x16e488 +#define QM_REG_QVOQIDX_96 0x16e48c +#define QM_REG_QVOQIDX_97 0x16e490 +#define QM_REG_QVOQIDX_98 0x16e494 +#define QM_REG_QVOQIDX_99 0x16e498 /* [RW 1] Initialization bit command */ #define QM_REG_SOFT_RESET 0x168428 /* [RW 8] The credit cost per every task in the QM. A value per each VOQ */ @@ -2372,44 +2879,103 @@ #define QM_REG_VOQINITCREDIT_4 0x168070 #define QM_REG_VOQINITCREDIT_5 0x168074 /* [RW 1] The port of which VOQ belongs */ +#define QM_REG_VOQPORT_0 0x1682a0 #define QM_REG_VOQPORT_1 0x1682a4 #define QM_REG_VOQPORT_10 0x1682c8 #define QM_REG_VOQPORT_11 0x1682cc #define QM_REG_VOQPORT_2 0x1682a8 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ #define QM_REG_VOQQMASK_0_LSB 0x168240 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_0_LSB_EXT_A 0x16e524 +/* [RW 32] The physical queue number associated with each VOQ; queues 63-32 */ #define QM_REG_VOQQMASK_0_MSB 0x168244 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_0_MSB_EXT_A 0x16e528 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ +#define QM_REG_VOQQMASK_10_LSB 0x168290 +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_10_LSB_EXT_A 0x16e574 +/* [RW 32] The physical queue number associated with each VOQ; queues 63-32 */ +#define QM_REG_VOQQMASK_10_MSB 0x168294 +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_10_MSB_EXT_A 0x16e578 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ +#define QM_REG_VOQQMASK_11_LSB 0x168298 +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_11_LSB_EXT_A 0x16e57c +/* [RW 32] The physical queue number associated with each VOQ; queues 63-32 */ +#define QM_REG_VOQQMASK_11_MSB 0x16829c +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_11_MSB_EXT_A 0x16e580 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ +#define QM_REG_VOQQMASK_1_LSB 0x168248 +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_1_LSB_EXT_A 0x16e52c +/* [RW 32] The physical queue number associated with each VOQ; queues 63-32 */ #define QM_REG_VOQQMASK_1_MSB 0x16824c -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_1_MSB_EXT_A 0x16e530 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ #define QM_REG_VOQQMASK_2_LSB 0x168250 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_2_LSB_EXT_A 0x16e534 +/* [RW 32] The physical queue number associated with each VOQ; queues 63-32 */ #define QM_REG_VOQQMASK_2_MSB 0x168254 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_2_MSB_EXT_A 0x16e538 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ #define QM_REG_VOQQMASK_3_LSB 0x168258 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_3_LSB_EXT_A 0x16e53c +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_3_MSB_EXT_A 0x16e540 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ #define QM_REG_VOQQMASK_4_LSB 0x168260 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_4_LSB_EXT_A 0x16e544 +/* [RW 32] The physical queue number associated with each VOQ; queues 63-32 */ #define QM_REG_VOQQMASK_4_MSB 0x168264 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_4_MSB_EXT_A 0x16e548 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ #define QM_REG_VOQQMASK_5_LSB 0x168268 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_5_LSB_EXT_A 0x16e54c +/* [RW 32] The physical queue number associated with each VOQ; queues 63-32 */ #define QM_REG_VOQQMASK_5_MSB 0x16826c -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_5_MSB_EXT_A 0x16e550 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ #define QM_REG_VOQQMASK_6_LSB 0x168270 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_6_LSB_EXT_A 0x16e554 +/* [RW 32] The physical queue number associated with each VOQ; queues 63-32 */ #define QM_REG_VOQQMASK_6_MSB 0x168274 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_6_MSB_EXT_A 0x16e558 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ #define QM_REG_VOQQMASK_7_LSB 0x168278 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_7_LSB_EXT_A 0x16e55c +/* [RW 32] The physical queue number associated with each VOQ; queues 63-32 */ #define QM_REG_VOQQMASK_7_MSB 0x16827c -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_7_MSB_EXT_A 0x16e560 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ #define QM_REG_VOQQMASK_8_LSB 0x168280 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_8_LSB_EXT_A 0x16e564 +/* [RW 32] The physical queue number associated with each VOQ; queues 63-32 */ #define QM_REG_VOQQMASK_8_MSB 0x168284 -/* [RW 32] The physical queue number associated with each VOQ */ +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_8_MSB_EXT_A 0x16e568 +/* [RW 32] The physical queue number associated with each VOQ; queues 31-0 */ #define QM_REG_VOQQMASK_9_LSB 0x168288 +/* [RW 32] The physical queue number associated with each VOQ; queues 95-64 */ +#define QM_REG_VOQQMASK_9_LSB_EXT_A 0x16e56c +/* [RW 32] The physical queue number associated with each VOQ; queues 127-96 */ +#define QM_REG_VOQQMASK_9_MSB_EXT_A 0x16e570 /* [RW 32] Wrr weights */ #define QM_REG_WRRWEIGHTS_0 0x16880c #define QM_REG_WRRWEIGHTS_1 0x168810 @@ -2431,14 +2997,78 @@ #define QM_REG_WRRWEIGHTS_15 0x168828 #define QM_REG_WRRWEIGHTS_15_SIZE 1 /* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_16 0x16e000 +#define QM_REG_WRRWEIGHTS_16_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_17 0x16e004 +#define QM_REG_WRRWEIGHTS_17_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_18 0x16e008 +#define QM_REG_WRRWEIGHTS_18_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_19 0x16e00c +#define QM_REG_WRRWEIGHTS_19_SIZE 1 +/* [RW 32] Wrr weights */ #define QM_REG_WRRWEIGHTS_10 0x168814 #define QM_REG_WRRWEIGHTS_11 0x168818 #define QM_REG_WRRWEIGHTS_12 0x16881c #define QM_REG_WRRWEIGHTS_13 0x168820 #define QM_REG_WRRWEIGHTS_14 0x168824 #define QM_REG_WRRWEIGHTS_15 0x168828 +#define QM_REG_WRRWEIGHTS_16 0x16e000 +#define QM_REG_WRRWEIGHTS_17 0x16e004 +#define QM_REG_WRRWEIGHTS_18 0x16e008 +#define QM_REG_WRRWEIGHTS_19 0x16e00c #define QM_REG_WRRWEIGHTS_2 0x16882c +#define QM_REG_WRRWEIGHTS_20 0x16e010 +#define QM_REG_WRRWEIGHTS_20_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_21 0x16e014 +#define QM_REG_WRRWEIGHTS_21_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_22 0x16e018 +#define QM_REG_WRRWEIGHTS_22_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_23 0x16e01c +#define QM_REG_WRRWEIGHTS_23_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_24 0x16e020 +#define QM_REG_WRRWEIGHTS_24_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_25 0x16e024 +#define QM_REG_WRRWEIGHTS_25_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_26 0x16e028 +#define QM_REG_WRRWEIGHTS_26_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_27 0x16e02c +#define QM_REG_WRRWEIGHTS_27_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_28 0x16e030 +#define QM_REG_WRRWEIGHTS_28_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_29 0x16e034 +#define QM_REG_WRRWEIGHTS_29_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_20 0x16e010 +#define QM_REG_WRRWEIGHTS_21 0x16e014 +#define QM_REG_WRRWEIGHTS_22 0x16e018 +#define QM_REG_WRRWEIGHTS_23 0x16e01c +#define QM_REG_WRRWEIGHTS_24 0x16e020 +#define QM_REG_WRRWEIGHTS_25 0x16e024 +#define QM_REG_WRRWEIGHTS_26 0x16e028 +#define QM_REG_WRRWEIGHTS_27 0x16e02c +#define QM_REG_WRRWEIGHTS_28 0x16e030 +#define QM_REG_WRRWEIGHTS_29 0x16e034 #define QM_REG_WRRWEIGHTS_3 0x168830 +#define QM_REG_WRRWEIGHTS_30 0x16e038 +#define QM_REG_WRRWEIGHTS_30_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_31 0x16e03c +#define QM_REG_WRRWEIGHTS_31_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_30 0x16e038 +#define QM_REG_WRRWEIGHTS_31 0x16e03c #define QM_REG_WRRWEIGHTS_4 0x168834 #define QM_REG_WRRWEIGHTS_5 0x168838 #define QM_REG_WRRWEIGHTS_6 0x16883c @@ -2447,6 +3077,70 @@ #define QM_REG_WRRWEIGHTS_9 0x168848 /* [R 6] Keep the fill level of the fifo from write client 1 */ #define QM_REG_XQM_WRC_FIFOLVL 0x168000 +#define BRB1_BRB1_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define BRB1_BRB1_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define BRB1_BRB1_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define BRB1_BRB1_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define BRB1_BRB1_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define BRB1_BRB1_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define BRB1_BRB1_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define BRB1_BRB1_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define CCM_CCM_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define CCM_CCM_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define CCM_CCM_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define CCM_CCM_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define CCM_CCM_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define CCM_CCM_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define CCM_CCM_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define CCM_CCM_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define CDU_CDU_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define CDU_CDU_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define CDU_CDU_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define CDU_CDU_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define CDU_CDU_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define CDU_CDU_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define CDU_CDU_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define CDU_CDU_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define CFC_CFC_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define CFC_CFC_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define CFC_CFC_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define CFC_CFC_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define CFC_CFC_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define CFC_CFC_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define CFC_CFC_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define CFC_CFC_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define CSDM_CSDM_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) +#define CSDM_CSDM_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 +#define CSDM_CSDM_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) +#define CSDM_CSDM_INT_STS_CLR_0_REG_ADDRESS_ERROR_SIZE 0 +#define CSDM_CSDM_INT_STS_WR_0_REG_ADDRESS_ERROR (0x1<<0) +#define CSDM_CSDM_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 +#define CSDM_CSDM_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) +#define CSDM_CSDM_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 +#define CSEM_CSEM_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) +#define CSEM_CSEM_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 +#define CSEM_CSEM_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) +#define CSEM_CSEM_INT_STS_CLR_0_REG_ADDRESS_ERROR_SIZE 0 +#define CSEM_CSEM_INT_STS_WR_0_REG_ADDRESS_ERROR (0x1<<0) +#define CSEM_CSEM_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 +#define CSEM_CSEM_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) +#define CSEM_CSEM_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 +#define DBG_DBG_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define DBG_DBG_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define DBG_DBG_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define DBG_DBG_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define DBG_DBG_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define DBG_DBG_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define DBG_DBG_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define DBG_DBG_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define DMAE_DMAE_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define DMAE_DMAE_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define DMAE_DMAE_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define DMAE_DMAE_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define DMAE_DMAE_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define DMAE_DMAE_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define DMAE_DMAE_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define DMAE_DMAE_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 #define DORQ_DORQ_INT_STS_REG_ADDRESS_ERROR (0x1<<0) #define DORQ_DORQ_INT_STS_REG_ADDRESS_ERROR_SIZE 0 #define DORQ_DORQ_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) @@ -2455,6 +3149,22 @@ #define DORQ_DORQ_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 #define DORQ_DORQ_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) #define DORQ_DORQ_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define HC_HC_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define HC_HC_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define HC_HC_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define HC_HC_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define HC_HC_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define HC_HC_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define HC_HC_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define HC_HC_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define MISC_MISC_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define MISC_MISC_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define MISC_MISC_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define MISC_MISC_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define MISC_MISC_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define MISC_MISC_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define MISC_MISC_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define MISC_MISC_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 #define NIG_NIG_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) #define NIG_NIG_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 #define NIG_NIG_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) @@ -2463,6 +3173,70 @@ #define NIG_NIG_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 #define NIG_NIG_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) #define NIG_NIG_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 +#define PBF_PBF_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define PBF_PBF_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define PBF_PBF_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define PBF_PBF_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define PBF_PBF_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define PBF_PBF_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define PBF_PBF_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define PBF_PBF_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define PB_PB_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define PB_PB_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define PB_PB_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define PB_PB_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define PB_PB_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define PB_PB_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define PB_PB_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define PB_PB_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define PRS_PRS_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define PRS_PRS_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define PRS_PRS_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define PRS_PRS_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define PRS_PRS_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define PRS_PRS_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define PRS_PRS_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define PRS_PRS_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define PXP2_PXP2_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) +#define PXP2_PXP2_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 +#define PXP2_PXP2_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) +#define PXP2_PXP2_INT_STS_CLR_0_REG_ADDRESS_ERROR_SIZE 0 +#define PXP2_PXP2_INT_STS_WR_0_REG_ADDRESS_ERROR (0x1<<0) +#define PXP2_PXP2_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 +#define PXP2_PXP2_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) +#define PXP2_PXP2_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 +#define PXP_PXP_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) +#define PXP_PXP_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 +#define PXP_PXP_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) +#define PXP_PXP_INT_STS_CLR_0_REG_ADDRESS_ERROR_SIZE 0 +#define PXP_PXP_INT_STS_WR_0_REG_ADDRESS_ERROR (0x1<<0) +#define PXP_PXP_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 +#define PXP_PXP_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) +#define PXP_PXP_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 +#define QM_QM_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define QM_QM_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define QM_QM_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define QM_QM_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define QM_QM_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define QM_QM_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define QM_QM_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define QM_QM_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define SEM_FAST_SEM_FAST_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define SEM_FAST_SEM_FAST_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define SEM_FAST_SEM_FAST_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define SEM_FAST_SEM_FAST_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define SEM_FAST_SEM_FAST_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define SEM_FAST_SEM_FAST_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define SEM_FAST_SEM_FAST_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define SEM_FAST_SEM_FAST_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define SRC_SRC_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define SRC_SRC_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define SRC_SRC_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define SRC_SRC_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define SRC_SRC_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define SRC_SRC_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define SRC_SRC_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define SRC_SRC_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 #define TCM_TCM_INT_STS_REG_ADDRESS_ERROR (0x1<<0) #define TCM_TCM_INT_STS_REG_ADDRESS_ERROR_SIZE 0 #define TCM_TCM_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) @@ -2471,18 +3245,98 @@ #define TCM_TCM_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 #define TCM_TCM_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) #define TCM_TCM_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define TM_TM_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define TM_TM_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define TM_TM_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define TM_TM_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define TM_TM_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define TM_TM_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define TM_TM_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define TM_TM_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define TSDM_TSDM_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) +#define TSDM_TSDM_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 +#define TSDM_TSDM_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) +#define TSDM_TSDM_INT_STS_CLR_0_REG_ADDRESS_ERROR_SIZE 0 +#define TSDM_TSDM_INT_STS_WR_0_REG_ADDRESS_ERROR (0x1<<0) +#define TSDM_TSDM_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 +#define TSDM_TSDM_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) +#define TSDM_TSDM_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 +#define TSEM_TSEM_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) +#define TSEM_TSEM_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 +#define TSEM_TSEM_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) +#define TSEM_TSEM_INT_STS_CLR_0_REG_ADDRESS_ERROR_SIZE 0 +#define TSEM_TSEM_INT_STS_WR_0_REG_ADDRESS_ERROR (0x1<<0) +#define TSEM_TSEM_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 +#define TSEM_TSEM_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) +#define TSEM_TSEM_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 +#define UCM_UCM_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define UCM_UCM_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define UCM_UCM_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define UCM_UCM_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define UCM_UCM_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define UCM_UCM_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define UCM_UCM_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define UCM_UCM_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define USDM_USDM_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) +#define USDM_USDM_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 +#define USDM_USDM_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) +#define USDM_USDM_INT_STS_CLR_0_REG_ADDRESS_ERROR_SIZE 0 +#define USDM_USDM_INT_STS_WR_0_REG_ADDRESS_ERROR (0x1<<0) +#define USDM_USDM_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 +#define USDM_USDM_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) +#define USDM_USDM_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 +#define USEM_USEM_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) +#define USEM_USEM_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 +#define USEM_USEM_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) +#define USEM_USEM_INT_STS_CLR_0_REG_ADDRESS_ERROR_SIZE 0 +#define USEM_USEM_INT_STS_WR_0_REG_ADDRESS_ERROR (0x1<<0) +#define USEM_USEM_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 +#define USEM_USEM_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) +#define USEM_USEM_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 +#define XCM_XCM_INT_STS_REG_ADDRESS_ERROR (0x1<<0) +#define XCM_XCM_INT_STS_REG_ADDRESS_ERROR_SIZE 0 +#define XCM_XCM_INT_STS_CLR_REG_ADDRESS_ERROR (0x1<<0) +#define XCM_XCM_INT_STS_CLR_REG_ADDRESS_ERROR_SIZE 0 +#define XCM_XCM_INT_STS_WR_REG_ADDRESS_ERROR (0x1<<0) +#define XCM_XCM_INT_STS_WR_REG_ADDRESS_ERROR_SIZE 0 +#define XCM_XCM_INT_MASK_REG_ADDRESS_ERROR (0x1<<0) +#define XCM_XCM_INT_MASK_REG_ADDRESS_ERROR_SIZE 0 +#define XSDM_XSDM_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) +#define XSDM_XSDM_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 +#define XSDM_XSDM_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) +#define XSDM_XSDM_INT_STS_CLR_0_REG_ADDRESS_ERROR_SIZE 0 +#define XSDM_XSDM_INT_STS_WR_0_REG_ADDRESS_ERROR (0x1<<0) +#define XSDM_XSDM_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 +#define XSDM_XSDM_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) +#define XSDM_XSDM_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 +#define XSEM_XSEM_INT_STS_0_REG_ADDRESS_ERROR (0x1<<0) +#define XSEM_XSEM_INT_STS_0_REG_ADDRESS_ERROR_SIZE 0 +#define XSEM_XSEM_INT_STS_CLR_0_REG_ADDRESS_ERROR (0x1<<0) +#define XSEM_XSEM_INT_STS_CLR_0_REG_ADDRESS_ERROR_SIZE 0 +#define XSEM_XSEM_INT_STS_WR_0_REG_ADDRESS_ERROR (0x1<<0) +#define XSEM_XSEM_INT_STS_WR_0_REG_ADDRESS_ERROR_SIZE 0 +#define XSEM_XSEM_INT_MASK_0_REG_ADDRESS_ERROR (0x1<<0) +#define XSEM_XSEM_INT_MASK_0_REG_ADDRESS_ERROR_SIZE 0 #define CFC_DEBUG1_REG_WRITE_AC (0x1<<4) #define CFC_DEBUG1_REG_WRITE_AC_SIZE 4 -/* [R 1] debug only: This bit indicates wheter indicates that external +/* [R 1] debug only: This bit indicates whether indicates that external buffer was wrapped (oldest data was thrown); Relevant only when ~dbg_registers_debug_target=2 (PCI) & ~dbg_registers_full_mode=1 (wrap); */ #define DBG_REG_WRAP_ON_EXT_BUFFER 0xc124 #define DBG_REG_WRAP_ON_EXT_BUFFER_SIZE 1 -/* [R 1] debug only: This bit indicates wheter the internal buffer was +/* [R 1] debug only: This bit indicates whether the internal buffer was wrapped (oldest data was thrown) Relevant only when ~dbg_registers_debug_target=0 (internal buffer) */ #define DBG_REG_WRAP_ON_INT_BUFFER 0xc128 #define DBG_REG_WRAP_ON_INT_BUFFER_SIZE 1 +#define QM_QM_PRTY_STS_REG_WRBUFF (0x1<<8) +#define QM_QM_PRTY_STS_REG_WRBUFF_SIZE 8 +#define QM_QM_PRTY_STS_CLR_REG_WRBUFF (0x1<<8) +#define QM_QM_PRTY_STS_CLR_REG_WRBUFF_SIZE 8 +#define QM_QM_PRTY_STS_WR_REG_WRBUFF (0x1<<8) +#define QM_QM_PRTY_STS_WR_REG_WRBUFF_SIZE 8 +#define QM_QM_PRTY_MASK_REG_WRBUFF (0x1<<8) +#define QM_QM_PRTY_MASK_REG_WRBUFF_SIZE 8 /* [RW 32] Wrr weights */ #define QM_REG_WRRWEIGHTS_0 0x16880c #define QM_REG_WRRWEIGHTS_0_SIZE 1 @@ -2531,20 +3385,77 @@ /* [RW 32] Wrr weights */ #define QM_REG_WRRWEIGHTS_9 0x168848 #define QM_REG_WRRWEIGHTS_9_SIZE 1 -/* [RW 22] Number of free element in the free list of T2 entries - port 0. */ +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_16 0x16e000 +#define QM_REG_WRRWEIGHTS_16_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_17 0x16e004 +#define QM_REG_WRRWEIGHTS_17_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_18 0x16e008 +#define QM_REG_WRRWEIGHTS_18_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_19 0x16e00c +#define QM_REG_WRRWEIGHTS_19_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_20 0x16e010 +#define QM_REG_WRRWEIGHTS_20_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_21 0x16e014 +#define QM_REG_WRRWEIGHTS_21_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_22 0x16e018 +#define QM_REG_WRRWEIGHTS_22_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_23 0x16e01c +#define QM_REG_WRRWEIGHTS_23_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_24 0x16e020 +#define QM_REG_WRRWEIGHTS_24_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_25 0x16e024 +#define QM_REG_WRRWEIGHTS_25_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_26 0x16e028 +#define QM_REG_WRRWEIGHTS_26_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_27 0x16e02c +#define QM_REG_WRRWEIGHTS_27_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_28 0x16e030 +#define QM_REG_WRRWEIGHTS_28_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_29 0x16e034 +#define QM_REG_WRRWEIGHTS_29_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_30 0x16e038 +#define QM_REG_WRRWEIGHTS_30_SIZE 1 +/* [RW 32] Wrr weights */ +#define QM_REG_WRRWEIGHTS_31 0x16e03c +#define QM_REG_WRRWEIGHTS_31_SIZE 1 #define SRC_REG_COUNTFREE0 0x40500 -/* [WB 64] First free element in the free list of T2 entries - port 0. */ +/* [RW 1] If clr the searcher is compatible to E1 A0 - support only two + ports. If set the searcher support 8 functions. */ +#define SRC_REG_E1HMF_ENABLE 0x404cc #define SRC_REG_FIRSTFREE0 0x40510 #define SRC_REG_KEYRSS0_0 0x40408 +#define SRC_REG_KEYRSS0_7 0x40424 #define SRC_REG_KEYRSS1_9 0x40454 -/* [WB 64] Last free element in the free list of T2 entries - port 0. */ +#define SRC_REG_KEYSEARCH_0 0x40458 +#define SRC_REG_KEYSEARCH_1 0x4045c +#define SRC_REG_KEYSEARCH_2 0x40460 +#define SRC_REG_KEYSEARCH_3 0x40464 +#define SRC_REG_KEYSEARCH_4 0x40468 +#define SRC_REG_KEYSEARCH_5 0x4046c +#define SRC_REG_KEYSEARCH_6 0x40470 +#define SRC_REG_KEYSEARCH_7 0x40474 +#define SRC_REG_KEYSEARCH_8 0x40478 +#define SRC_REG_KEYSEARCH_9 0x4047c #define SRC_REG_LASTFREE0 0x40530 -/* [RW 5] The number of hash bits used for the search (h); Values can be 8 - to 24. */ #define SRC_REG_NUMBER_HASH_BITS0 0x40400 /* [RW 1] Reset internal state machines. */ #define SRC_REG_SOFT_RST 0x4049c -/* [R 1] Interrupt register #0 read */ +/* [R 3] Interrupt register #0 read */ #define SRC_REG_SRC_INT_STS 0x404ac /* [RW 3] Parity mask register #0 read/write */ #define SRC_REG_SRC_PRTY_MASK 0x404c8 @@ -2626,6 +3537,7 @@ #define TCM_REG_N_SM_CTX_LD_2 0x50058 #define TCM_REG_N_SM_CTX_LD_3 0x5005c #define TCM_REG_N_SM_CTX_LD_4 0x50060 +#define TCM_REG_N_SM_CTX_LD_5 0x50064 /* [RW 1] Input pbf Interface enable. If 0 - the valid input is disregarded; acknowledge output is deasserted; all other signals are treated as usual; if 1 - normal activity. */ @@ -2637,11 +3549,14 @@ weight 8 (the most prioritised); 1 stands for weight 1(least prioritised); 2 stands for weight 2; tc. */ #define TCM_REG_PBF_WEIGHT 0x500b4 -/* [RW 6] The physical queue number 0 per port index. */ #define TCM_REG_PHYS_QNUM0_0 0x500e0 #define TCM_REG_PHYS_QNUM0_1 0x500e4 -/* [RW 6] The physical queue number 1 per port index. */ #define TCM_REG_PHYS_QNUM1_0 0x500e8 +#define TCM_REG_PHYS_QNUM1_1 0x500ec +#define TCM_REG_PHYS_QNUM2_0 0x500f0 +#define TCM_REG_PHYS_QNUM2_1 0x500f4 +#define TCM_REG_PHYS_QNUM3_0 0x500f8 +#define TCM_REG_PHYS_QNUM3_1 0x500fc /* [RW 1] Input prs Interface enable. If 0 - the valid input is disregarded; acknowledge output is deasserted; all other signals are treated as usual; if 1 - normal activity. */ @@ -2670,6 +3585,8 @@ #define TCM_REG_TCM_INT_MASK 0x501dc /* [R 11] Interrupt register #0 read */ #define TCM_REG_TCM_INT_STS 0x501d0 +/* [R 27] Parity register #0 read */ +#define TCM_REG_TCM_PRTY_STS 0x501e0 /* [RW 3] The size of AG context region 0 in REG-pairs. Designates the MS REG-pair number (e.g. if region 0 is 6 REG-pairs; the value should be 5). Is used to determine the number of the AG context REG-pairs written back; @@ -2729,6 +3646,7 @@ mechanism. The fields are: [5:0] - length of the message; 15:6] - message pointer; 20:16] - next pointer. */ #define TCM_REG_XX_DESCR_TABLE 0x50280 +#define TCM_REG_XX_DESCR_TABLE_SIZE 32 /* [R 6] Use to read the value of XX protection Free counter. */ #define TCM_REG_XX_FREE 0x50178 /* [RW 6] Initial value for the credit counter; responsible for fulfilling @@ -2773,6 +3691,7 @@ #define TM_REG_EN_CL1_INPUT 0x16400c /* [RW 1] Enable client2 input. */ #define TM_REG_EN_CL2_INPUT 0x164010 +#define TM_REG_EN_LINEAR0_TIMER 0x164014 /* [RW 1] Enable real time counter. */ #define TM_REG_EN_REAL_TIME_CNT 0x1640d8 /* [RW 1] Enable for Timers state machines. */ @@ -2780,20 +3699,26 @@ /* [RW 4] Load value for expiration credit cnt. CFC max number of outstanding load requests for timers (expiration) context loading. */ #define TM_REG_EXP_CRDCNT_VAL 0x164238 -/* [RW 18] Linear0 Max active cid. */ +/* [RW 32] Linear0 logic address. */ +#define TM_REG_LIN0_LOGIC_ADDR 0x164240 +/* [RW 18] Linear0 Max active cid (in banks of 32 entries). */ #define TM_REG_LIN0_MAX_ACTIVE_CID 0x164048 /* [WB 64] Linear0 phy address. */ #define TM_REG_LIN0_PHY_ADDR 0x164270 +/* [RW 1] Linear0 physical address valid. */ +#define TM_REG_LIN0_PHY_ADDR_VALID 0x164248 /* [RW 24] Linear0 array scan timeout. */ #define TM_REG_LIN0_SCAN_TIME 0x16403c +/* [RW 32] Linear1 logic address. */ +#define TM_REG_LIN1_LOGIC_ADDR 0x164250 /* [WB 64] Linear1 phy address. */ #define TM_REG_LIN1_PHY_ADDR 0x164280 +/* [RW 1] Linear1 physical address valid. */ +#define TM_REG_LIN1_PHY_ADDR_VALID 0x164258 /* [RW 6] Linear timer set_clear fifo threshold. */ #define TM_REG_LIN_SETCLR_FIFO_ALFULL_THR 0x164070 /* [RW 2] Load value for pci arbiter credit cnt. */ #define TM_REG_PCIARB_CRDCNT_VAL 0x164260 -/* [RW 1] Timer software reset - active high. */ -#define TM_REG_TIMER_SOFT_RST 0x164004 /* [RW 20] The amount of hardware cycles for each timer tick. */ #define TM_REG_TIMER_TICK_SIZE 0x16401c /* [RW 8] Timers Context region. */ @@ -2804,6 +3729,21 @@ #define TM_REG_TM_INT_STS 0x1640f0 /* [RW 8] The event id for aggregated interrupt 0 */ #define TSDM_REG_AGG_INT_EVENT_0 0x42038 +#define TSDM_REG_AGG_INT_EVENT_2 0x42040 +#define TSDM_REG_AGG_INT_EVENT_20 0x42088 +#define TSDM_REG_AGG_INT_EVENT_21 0x4208c +#define TSDM_REG_AGG_INT_EVENT_22 0x42090 +#define TSDM_REG_AGG_INT_EVENT_23 0x42094 +#define TSDM_REG_AGG_INT_EVENT_24 0x42098 +#define TSDM_REG_AGG_INT_EVENT_25 0x4209c +#define TSDM_REG_AGG_INT_EVENT_26 0x420a0 +#define TSDM_REG_AGG_INT_EVENT_27 0x420a4 +#define TSDM_REG_AGG_INT_EVENT_28 0x420a8 +#define TSDM_REG_AGG_INT_EVENT_29 0x420ac +#define TSDM_REG_AGG_INT_EVENT_3 0x42044 +#define TSDM_REG_AGG_INT_EVENT_30 0x420b0 +#define TSDM_REG_AGG_INT_EVENT_31 0x420b4 +#define TSDM_REG_AGG_INT_EVENT_4 0x42048 /* [RW 13] The start address in the internal RAM for the cfc_rsp lcid */ #define TSDM_REG_CFC_RSP_START_ADDR 0x42008 /* [RW 16] The maximum value of the competion counter #0 */ @@ -2868,6 +3808,9 @@ /* [RW 32] Interrupt mask register #0 read/write */ #define TSDM_REG_TSDM_INT_MASK_0 0x4229c #define TSDM_REG_TSDM_INT_MASK_1 0x422ac +/* [R 32] Interrupt register #0 read */ +#define TSDM_REG_TSDM_INT_STS_0 0x42290 +#define TSDM_REG_TSDM_INT_STS_1 0x422a0 /* [RW 11] Parity mask register #0 read/write */ #define TSDM_REG_TSDM_PRTY_MASK 0x422bc /* [R 11] Parity register #0 read */ @@ -2908,9 +3851,8 @@ #define TSEM_REG_ENABLE_OUT 0x1800a8 /* [RW 32] This address space contains all registers and memories that are placed in SEM_FAST block. The SEM_FAST registers are described in - appendix B. In order to access the SEM_FAST registers the base address - TSEM_REGISTERS_FAST_MEMORY (Offset: 0x1a0000) should be added to each - SEM_FAST register offset. */ + appendix B. In order to access the sem_fast registers the base address + ~fast_memory.fast_memory should be added to eachsem_fast register offset. */ #define TSEM_REG_FAST_MEMORY 0x1a0000 /* [RW 1] Disables input messages from FIC0 May be updated during run_time by the microcode */ @@ -2993,6 +3935,9 @@ /* [RW 32] Interrupt mask register #0 read/write */ #define TSEM_REG_TSEM_INT_MASK_0 0x180100 #define TSEM_REG_TSEM_INT_MASK_1 0x180110 +/* [R 32] Interrupt register #0 read */ +#define TSEM_REG_TSEM_INT_STS_0 0x1800f4 +#define TSEM_REG_TSEM_INT_STS_1 0x180104 /* [RW 32] Parity mask register #0 read/write */ #define TSEM_REG_TSEM_PRTY_MASK_0 0x180120 #define TSEM_REG_TSEM_PRTY_MASK_1 0x180130 @@ -3088,12 +4033,15 @@ #define UCM_REG_N_SM_CTX_LD_2 0xe005c #define UCM_REG_N_SM_CTX_LD_3 0xe0060 #define UCM_REG_N_SM_CTX_LD_4 0xe0064 -/* [RW 6] The physical queue number 0 per port index (CID[23]) */ +#define UCM_REG_N_SM_CTX_LD_5 0xe0068 #define UCM_REG_PHYS_QNUM0_0 0xe0110 #define UCM_REG_PHYS_QNUM0_1 0xe0114 -/* [RW 6] The physical queue number 1 per port index (CID[23]) */ #define UCM_REG_PHYS_QNUM1_0 0xe0118 #define UCM_REG_PHYS_QNUM1_1 0xe011c +#define UCM_REG_PHYS_QNUM2_0 0xe0120 +#define UCM_REG_PHYS_QNUM2_1 0xe0124 +#define UCM_REG_PHYS_QNUM3_0 0xe0128 +#define UCM_REG_PHYS_QNUM3_1 0xe012c /* [RW 8] The Event ID for Timers formatting in case of stop done. */ #define UCM_REG_STOP_EVNT_ID 0xe00ac /* [RC 1] Set when the message length mismatch (relative to last indication) @@ -3132,6 +4080,8 @@ #define UCM_REG_UCM_INT_MASK 0xe01d4 /* [R 11] Interrupt register #0 read */ #define UCM_REG_UCM_INT_STS 0xe01c8 +/* [R 27] Parity register #0 read */ +#define UCM_REG_UCM_PRTY_STS 0xe01d8 /* [RW 2] The size of AG context region 0 in REG-pairs. Designates the MS REG-pair number (e.g. if region 0 is 6 REG-pairs; the value should be 5). Is used to determine the number of the AG context REG-pairs written back; @@ -3189,6 +4139,7 @@ mechanism. The fields are:[5:0] - message length; 14:6] - message pointer; 19:15] - next pointer. */ #define UCM_REG_XX_DESCR_TABLE 0xe0280 +#define UCM_REG_XX_DESCR_TABLE_SIZE 32 /* [R 6] Use to read the XX protection Free counter. */ #define UCM_REG_XX_FREE 0xe016c /* [RW 6] Initial value for the credit counter; responsible for fulfilling @@ -3218,6 +4169,22 @@ #define USDM_REG_AGG_INT_EVENT_17 0xc407c #define USDM_REG_AGG_INT_EVENT_18 0xc4080 #define USDM_REG_AGG_INT_EVENT_19 0xc4084 +#define USDM_REG_AGG_INT_EVENT_2 0xc4040 +#define USDM_REG_AGG_INT_EVENT_20 0xc4088 +#define USDM_REG_AGG_INT_EVENT_21 0xc408c +#define USDM_REG_AGG_INT_EVENT_22 0xc4090 +#define USDM_REG_AGG_INT_EVENT_23 0xc4094 +#define USDM_REG_AGG_INT_EVENT_24 0xc4098 +#define USDM_REG_AGG_INT_EVENT_25 0xc409c +#define USDM_REG_AGG_INT_EVENT_26 0xc40a0 +#define USDM_REG_AGG_INT_EVENT_27 0xc40a4 +#define USDM_REG_AGG_INT_EVENT_28 0xc40a8 +#define USDM_REG_AGG_INT_EVENT_29 0xc40ac +#define USDM_REG_AGG_INT_EVENT_3 0xc4044 +#define USDM_REG_AGG_INT_EVENT_30 0xc40b0 +#define USDM_REG_AGG_INT_EVENT_31 0xc40b4 +#define USDM_REG_AGG_INT_EVENT_4 0xc4048 +#define USDM_REG_AGG_INT_EVENT_5 0xc404c /* [RW 1] For each aggregated interrupt index whether the mode is normal (0) or auto-mask-mode (1) */ #define USDM_REG_AGG_INT_MODE_0 0xc41b8 @@ -3232,6 +4199,8 @@ #define USDM_REG_AGG_INT_MODE_17 0xc41fc #define USDM_REG_AGG_INT_MODE_18 0xc4200 #define USDM_REG_AGG_INT_MODE_19 0xc4204 +#define USDM_REG_AGG_INT_MODE_4 0xc41c8 +#define USDM_REG_AGG_INT_MODE_5 0xc41cc /* [RW 13] The start address in the internal RAM for the cfc_rsp lcid */ #define USDM_REG_CFC_RSP_START_ADDR 0xc4008 /* [RW 16] The maximum value of the competion counter #0 */ @@ -3298,6 +4267,9 @@ /* [RW 32] Interrupt mask register #0 read/write */ #define USDM_REG_USDM_INT_MASK_0 0xc42a0 #define USDM_REG_USDM_INT_MASK_1 0xc42b0 +/* [R 32] Interrupt register #0 read */ +#define USDM_REG_USDM_INT_STS_0 0xc4294 +#define USDM_REG_USDM_INT_STS_1 0xc42a4 /* [RW 11] Parity mask register #0 read/write */ #define USDM_REG_USDM_PRTY_MASK 0xc42c0 /* [R 11] Parity register #0 read */ @@ -3338,9 +4310,8 @@ #define USEM_REG_ENABLE_OUT 0x3000a8 /* [RW 32] This address space contains all registers and memories that are placed in SEM_FAST block. The SEM_FAST registers are described in - appendix B. In order to access the SEM_FAST registers... the base address - USEM_REGISTERS_FAST_MEMORY (Offset: 0x320000) should be added to each - SEM_FAST register offset. */ + appendix B. In order to access the sem_fast registers the base address + ~fast_memory.fast_memory should be added to eachsem_fast register offset. */ #define USEM_REG_FAST_MEMORY 0x320000 /* [RW 1] Disables input messages from FIC0 May be updated during run_time by the microcode */ @@ -3423,6 +4394,9 @@ /* [RW 32] Interrupt mask register #0 read/write */ #define USEM_REG_USEM_INT_MASK_0 0x300110 #define USEM_REG_USEM_INT_MASK_1 0x300120 +/* [R 32] Interrupt register #0 read */ +#define USEM_REG_USEM_INT_STS_0 0x300104 +#define USEM_REG_USEM_INT_STS_1 0x300114 /* [RW 32] Parity mask register #0 read/write */ #define USEM_REG_USEM_PRTY_MASK_0 0x300130 #define USEM_REG_USEM_PRTY_MASK_1 0x300140 @@ -3491,11 +4465,8 @@ writes the initial credit value; read returns the current value of the credit counter. Must be initialized to 64 at start-up. */ #define XCM_REG_FIC1_INIT_CRD 0x20410 -/* [RW 8] The maximum delayed ACK counter value.Must be at least 2. Per port - value. */ #define XCM_REG_GLB_DEL_ACK_MAX_CNT_0 0x20118 #define XCM_REG_GLB_DEL_ACK_MAX_CNT_1 0x2011c -/* [RW 28] The delayed ACK timeout in ticks. Per port value. */ #define XCM_REG_GLB_DEL_ACK_TMR_VAL_0 0x20108 #define XCM_REG_GLB_DEL_ACK_TMR_VAL_1 0x2010c /* [RW 1] Arbitratiojn between Input Arbiter groups: 0 - fair Round-Robin; 1 @@ -3545,6 +4516,7 @@ #define XCM_REG_N_SM_CTX_LD_2 0x20068 #define XCM_REG_N_SM_CTX_LD_3 0x2006c #define XCM_REG_N_SM_CTX_LD_4 0x20070 +#define XCM_REG_N_SM_CTX_LD_5 0x20074 /* [RW 1] Input pbf Interface enable. If 0 - the valid input is disregarded; acknowledge output is deasserted; all other signals are treated as usual; if 1 - normal activity. */ @@ -3556,6 +4528,8 @@ weight 8 (the most prioritised); 1 stands for weight 1(least prioritised); 2 stands for weight 2; tc. */ #define XCM_REG_PBF_WEIGHT 0x200d0 +#define XCM_REG_PHYS_QNUM3_0 0x20100 +#define XCM_REG_PHYS_QNUM3_1 0x20104 /* [RW 8] The Event ID for Timers formatting in case of stop done. */ #define XCM_REG_STOP_EVNT_ID 0x200b8 /* [RC 1] Set at message length mismatch (relative to last indication) at @@ -3603,53 +4577,17 @@ weight 8 (the most prioritised); 1 stands for weight 1(least prioritised); 2 stands for weight 2; tc. */ #define XCM_REG_USEM_WEIGHT 0x200c8 -/* [RW 2] DA counter command; used in case of window update doorbell.The - first index stands for the value DaEnable of that connection. The second - index stands for port number. */ #define XCM_REG_WU_DA_CNT_CMD00 0x201d4 -/* [RW 2] DA counter command; used in case of window update doorbell.The - first index stands for the value DaEnable of that connection. The second - index stands for port number. */ #define XCM_REG_WU_DA_CNT_CMD01 0x201d8 -/* [RW 2] DA counter command; used in case of window update doorbell.The - first index stands for the value DaEnable of that connection. The second - index stands for port number. */ #define XCM_REG_WU_DA_CNT_CMD10 0x201dc -/* [RW 2] DA counter command; used in case of window update doorbell.The - first index stands for the value DaEnable of that connection. The second - index stands for port number. */ #define XCM_REG_WU_DA_CNT_CMD11 0x201e0 -/* [RW 8] DA counter update value used in case of window update doorbell.The - first index stands for the value DaEnable of that connection. The second - index stands for port number. */ #define XCM_REG_WU_DA_CNT_UPD_VAL00 0x201e4 -/* [RW 8] DA counter update value; used in case of window update - doorbell.The first index stands for the value DaEnable of that - connection. The second index stands for port number. */ #define XCM_REG_WU_DA_CNT_UPD_VAL01 0x201e8 -/* [RW 8] DA counter update value; used in case of window update - doorbell.The first index stands for the value DaEnable of that - connection. The second index stands for port number. */ #define XCM_REG_WU_DA_CNT_UPD_VAL10 0x201ec -/* [RW 8] DA counter update value; used in case of window update - doorbell.The first index stands for the value DaEnable of that - connection. The second index stands for port number. */ #define XCM_REG_WU_DA_CNT_UPD_VAL11 0x201f0 -/* [RW 1] DA timer command; used in case of window update doorbell.The first - index stands for the value DaEnable of that connection. The second index - stands for port number. */ #define XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD00 0x201c4 -/* [RW 1] DA timer command; used in case of window update doorbell.The first - index stands for the value DaEnable of that connection. The second index - stands for port number. */ #define XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD01 0x201c8 -/* [RW 1] DA timer command; used in case of window update doorbell.The first - index stands for the value DaEnable of that connection. The second index - stands for port number. */ #define XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD10 0x201cc -/* [RW 1] DA timer command; used in case of window update doorbell.The first - index stands for the value DaEnable of that connection. The second index - stands for port number. */ #define XCM_REG_WU_DA_SET_TMR_CNT_FLG_CMD11 0x201d0 /* [RW 1] CM - CFC Interface enable. If 0 - the valid input is disregarded; acknowledge output is deasserted; all other signals are treated as usual; @@ -3659,6 +4597,8 @@ #define XCM_REG_XCM_INT_MASK 0x202b4 /* [R 14] Interrupt register #0 read */ #define XCM_REG_XCM_INT_STS 0x202a8 +/* [R 30] Parity register #0 read */ +#define XCM_REG_XCM_PRTY_STS 0x202b8 /* [RW 4] The size of AG context region 0 in REG-pairs. Designates the MS REG-pair number (e.g. if region 0 is 6 REG-pairs; the value should be 5). Is used to determine the number of the AG context REG-pairs written back; @@ -3715,6 +4655,7 @@ mechanism. The fields are: [5:0] - message length; 11:6] - message pointer; 16:12] - next pointer. */ #define XCM_REG_XX_DESCR_TABLE 0x20480 +#define XCM_REG_XX_DESCR_TABLE_SIZE 32 /* [R 6] Used to read the XX protection Free counter. */ #define XCM_REG_XX_FREE 0x20240 /* [RW 6] Initial value for the credit counter; responsible for fulfilling @@ -3728,7 +4669,7 @@ #define XCM_REG_XX_MSG_NUM 0x20428 /* [RW 8] The Event ID; sent to the STORM in case of XX overflow. */ #define XCM_REG_XX_OVFL_EVNT_ID 0x20058 -/* [RW 15] Indirect access to the XX table of the XX protection mechanism. +/* [RW 16] Indirect access to the XX table of the XX protection mechanism. The fields are:[4:0] - tail pointer; 9:5] - Link List size; 14:10] - header pointer. */ #define XCM_REG_XX_TABLE 0x20500 @@ -3745,6 +4686,9 @@ #define XSDM_REG_AGG_INT_EVENT_17 0x16607c #define XSDM_REG_AGG_INT_EVENT_18 0x166080 #define XSDM_REG_AGG_INT_EVENT_19 0x166084 +#define XSDM_REG_AGG_INT_EVENT_10 0x166060 +#define XSDM_REG_AGG_INT_EVENT_11 0x166064 +#define XSDM_REG_AGG_INT_EVENT_12 0x166068 #define XSDM_REG_AGG_INT_EVENT_2 0x166040 #define XSDM_REG_AGG_INT_EVENT_20 0x166088 #define XSDM_REG_AGG_INT_EVENT_21 0x16608c @@ -3756,6 +4700,15 @@ #define XSDM_REG_AGG_INT_EVENT_27 0x1660a4 #define XSDM_REG_AGG_INT_EVENT_28 0x1660a8 #define XSDM_REG_AGG_INT_EVENT_29 0x1660ac +#define XSDM_REG_AGG_INT_EVENT_3 0x166044 +#define XSDM_REG_AGG_INT_EVENT_30 0x1660b0 +#define XSDM_REG_AGG_INT_EVENT_31 0x1660b4 +#define XSDM_REG_AGG_INT_EVENT_4 0x166048 +#define XSDM_REG_AGG_INT_EVENT_5 0x16604c +#define XSDM_REG_AGG_INT_EVENT_6 0x166050 +#define XSDM_REG_AGG_INT_EVENT_7 0x166054 +#define XSDM_REG_AGG_INT_EVENT_8 0x166058 +#define XSDM_REG_AGG_INT_EVENT_9 0x16605c /* [RW 1] For each aggregated interrupt index whether the mode is normal (0) or auto-mask-mode (1) */ #define XSDM_REG_AGG_INT_MODE_0 0x1661b8 @@ -3832,6 +4785,9 @@ /* [RW 32] Interrupt mask register #0 read/write */ #define XSDM_REG_XSDM_INT_MASK_0 0x16629c #define XSDM_REG_XSDM_INT_MASK_1 0x1662ac +/* [R 32] Interrupt register #0 read */ +#define XSDM_REG_XSDM_INT_STS_0 0x166290 +#define XSDM_REG_XSDM_INT_STS_1 0x1662a0 /* [RW 11] Parity mask register #0 read/write */ #define XSDM_REG_XSDM_PRTY_MASK 0x1662bc /* [R 11] Parity register #0 read */ @@ -3872,9 +4828,8 @@ #define XSEM_REG_ENABLE_OUT 0x2800a8 /* [RW 32] This address space contains all registers and memories that are placed in SEM_FAST block. The SEM_FAST registers are described in - appendix B. In order to access the SEM_FAST registers the base address - XSEM_REGISTERS_FAST_MEMORY (Offset: 0x2a0000) should be added to each - SEM_FAST register offset. */ + appendix B. In order to access the sem_fast registers the base address + ~fast_memory.fast_memory should be added to eachsem_fast register offset. */ #define XSEM_REG_FAST_MEMORY 0x2a0000 /* [RW 1] Disables input messages from FIC0 May be updated during run_time by the microcode */ @@ -3957,6 +4912,9 @@ /* [RW 32] Interrupt mask register #0 read/write */ #define XSEM_REG_XSEM_INT_MASK_0 0x280110 #define XSEM_REG_XSEM_INT_MASK_1 0x280120 +/* [R 32] Interrupt register #0 read */ +#define XSEM_REG_XSEM_INT_STS_0 0x280104 +#define XSEM_REG_XSEM_INT_STS_1 0x280114 /* [RW 32] Parity mask register #0 read/write */ #define XSEM_REG_XSEM_PRTY_MASK_0 0x280130 #define XSEM_REG_XSEM_PRTY_MASK_1 0x280140 @@ -3993,10 +4951,14 @@ #define BIGMAC_REGISTER_TX_SOURCE_ADDR (0x08<<3) #define BIGMAC_REGISTER_TX_STAT_GTBYT (0x20<<3) #define BIGMAC_REGISTER_TX_STAT_GTPKT (0x0C<<3) +#define EMAC_LED_1000MB_OVERRIDE (1L<<1) +#define EMAC_LED_100MB_OVERRIDE (1L<<2) +#define EMAC_LED_10MB_OVERRIDE (1L<<3) +#define EMAC_LED_2500MB_OVERRIDE (1L<<12) +#define EMAC_LED_OVERRIDE (1L<<0) +#define EMAC_LED_TRAFFIC (1L<<6) #define EMAC_MDIO_COMM_COMMAND_ADDRESS (0L<<26) -#define EMAC_MDIO_COMM_COMMAND_READ_22 (2L<<26) #define EMAC_MDIO_COMM_COMMAND_READ_45 (3L<<26) -#define EMAC_MDIO_COMM_COMMAND_WRITE_22 (1L<<26) #define EMAC_MDIO_COMM_COMMAND_WRITE_45 (1L<<26) #define EMAC_MDIO_COMM_DATA (0xffffL<<0) #define EMAC_MDIO_COMM_START_BUSY (1L<<29) @@ -4005,14 +4967,12 @@ #define EMAC_MDIO_MODE_CLOCK_CNT (0x3fL<<16) #define EMAC_MDIO_MODE_CLOCK_CNT_BITSHIFT 16 #define EMAC_MODE_25G_MODE (1L<<5) -#define EMAC_MODE_ACPI_RCVD (1L<<20) #define EMAC_MODE_HALF_DUPLEX (1L<<1) -#define EMAC_MODE_MPKT (1L<<18) -#define EMAC_MODE_MPKT_RCVD (1L<<19) #define EMAC_MODE_PORT_GMII (2L<<2) #define EMAC_MODE_PORT_MII (1L<<2) #define EMAC_MODE_PORT_MII_10M (3L<<2) #define EMAC_MODE_RESET (1L<<0) +#define EMAC_REG_EMAC_LED 0xc #define EMAC_REG_EMAC_MAC_MATCH 0x10 #define EMAC_REG_EMAC_MDIO_COMM 0xac #define EMAC_REG_EMAC_MDIO_MODE 0xb4 @@ -4028,21 +4988,27 @@ #define EMAC_RX_MODE_FLOW_EN (1L<<2) #define EMAC_RX_MODE_KEEP_VLAN_TAG (1L<<10) #define EMAC_RX_MODE_PROMISCUOUS (1L<<8) +#define EMAC_RX_MODE_RESET (1L<<0) #define EMAC_RX_MTU_SIZE_JUMBO_ENA (1L<<31) #define EMAC_TX_MODE_EXT_PAUSE_EN (1L<<3) +#define EMAC_TX_MODE_FLOW_EN (1L<<4) #define EMAC_TX_MODE_RESET (1L<<0) +#define MISC_REGISTERS_GPIO_0 0 #define MISC_REGISTERS_GPIO_1 1 #define MISC_REGISTERS_GPIO_2 2 #define MISC_REGISTERS_GPIO_3 3 #define MISC_REGISTERS_GPIO_CLR_POS 16 #define MISC_REGISTERS_GPIO_FLOAT (0xffL<<24) #define MISC_REGISTERS_GPIO_FLOAT_POS 24 +#define MISC_REGISTERS_GPIO_HIGH 1 #define MISC_REGISTERS_GPIO_INPUT_HI_Z 2 +#define MISC_REGISTERS_GPIO_LOW 0 #define MISC_REGISTERS_GPIO_OUTPUT_HIGH 1 #define MISC_REGISTERS_GPIO_OUTPUT_LOW 0 #define MISC_REGISTERS_GPIO_PORT_SHIFT 4 #define MISC_REGISTERS_GPIO_SET_POS 8 #define MISC_REGISTERS_RESET_REG_1_CLEAR 0x588 +#define MISC_REGISTERS_RESET_REG_1_RST_NIG (0x1<<7) #define MISC_REGISTERS_RESET_REG_1_SET 0x584 #define MISC_REGISTERS_RESET_REG_2_CLEAR 0x598 #define MISC_REGISTERS_RESET_REG_2_RST_BMAC0 (0x1<<0) @@ -4077,7 +5043,9 @@ #define HW_LOCK_MAX_RESOURCE_VALUE 31 #define HW_LOCK_RESOURCE_8072_MDIO 0 #define HW_LOCK_RESOURCE_GPIO 1 +#define HW_LOCK_RESOURCE_PORT0_ATT_MASK 3 #define HW_LOCK_RESOURCE_SPIO 2 +#define HW_LOCK_RESOURCE_UNDI 5 #define AEU_INPUTS_ATTN_BITS_BRB_PARITY_ERROR (1<<18) #define AEU_INPUTS_ATTN_BITS_CCM_HW_INTERRUPT (1<<31) #define AEU_INPUTS_ATTN_BITS_CDU_HW_INTERRUPT (1<<9) @@ -4127,7 +5095,7 @@ #define AEU_INPUTS_ATTN_BITS_XSEMI_PARITY_ERROR (1<<10) #define RESERVED_GENERAL_ATTENTION_BIT_0 0 -#define EVEREST_GEN_ATTN_IN_USE_MASK 0x3e0 +#define EVEREST_GEN_ATTN_IN_USE_MASK 0x3ffe0 #define EVEREST_LATCHED_ATTN_IN_USE_MASK 0xffe00000 #define RESERVED_GENERAL_ATTENTION_BIT_6 6 @@ -4156,6 +5124,17 @@ /* mcp error attention bit */ #define MCP_FATAL_ASSERT_ATTENTION_BIT RESERVED_GENERAL_ATTENTION_BIT_11 +/*E1H NIG status sync attention mapped to group 4-7*/ +#define LINK_SYNC_ATTENTION_BIT_FUNC_0 RESERVED_GENERAL_ATTENTION_BIT_12 +#define LINK_SYNC_ATTENTION_BIT_FUNC_1 RESERVED_GENERAL_ATTENTION_BIT_13 +#define LINK_SYNC_ATTENTION_BIT_FUNC_2 RESERVED_GENERAL_ATTENTION_BIT_14 +#define LINK_SYNC_ATTENTION_BIT_FUNC_3 RESERVED_GENERAL_ATTENTION_BIT_15 +#define LINK_SYNC_ATTENTION_BIT_FUNC_4 RESERVED_GENERAL_ATTENTION_BIT_16 +#define LINK_SYNC_ATTENTION_BIT_FUNC_5 RESERVED_GENERAL_ATTENTION_BIT_17 +#define LINK_SYNC_ATTENTION_BIT_FUNC_6 RESERVED_GENERAL_ATTENTION_BIT_18 +#define LINK_SYNC_ATTENTION_BIT_FUNC_7 RESERVED_GENERAL_ATTENTION_BIT_19 + + #define LATCHED_ATTN_RBCR 23 #define LATCHED_ATTN_RBCT 24 #define LATCHED_ATTN_RBCN 25 @@ -4217,40 +5196,73 @@ #define GRCBASE_MISC_AEU GRCBASE_MISC -/*the offset of the configuration space in the pci core register*/ +/* offset of configuration space in the pci core register */ #define PCICFG_OFFSET 0x2000 #define PCICFG_VENDOR_ID_OFFSET 0x00 #define PCICFG_DEVICE_ID_OFFSET 0x02 -#define PCICFG_SUBSYSTEM_VENDOR_ID_OFFSET 0x2c -#define PCICFG_SUBSYSTEM_ID_OFFSET 0x2e -#define PCICFG_INT_LINE 0x3c -#define PCICFG_INT_PIN 0x3d +#define PCICFG_COMMAND_OFFSET 0x04 +#define PCICFG_COMMAND_IO_SPACE (1<<0) +#define PCICFG_COMMAND_MEM_SPACE (1<<1) +#define PCICFG_COMMAND_BUS_MASTER (1<<2) +#define PCICFG_COMMAND_SPECIAL_CYCLES (1<<3) +#define PCICFG_COMMAND_MWI_CYCLES (1<<4) +#define PCICFG_COMMAND_VGA_SNOOP (1<<5) +#define PCICFG_COMMAND_PERR_ENA (1<<6) +#define PCICFG_COMMAND_STEPPING (1<<7) +#define PCICFG_COMMAND_SERR_ENA (1<<8) +#define PCICFG_COMMAND_FAST_B2B (1<<9) +#define PCICFG_COMMAND_INT_DISABLE (1<<10) +#define PCICFG_COMMAND_RESERVED (0x1f<<11) +#define PCICFG_STATUS_OFFSET 0x06 +#define PCICFG_REVESION_ID 0x08 #define PCICFG_CACHE_LINE_SIZE 0x0c #define PCICFG_LATENCY_TIMER 0x0d -#define PCICFG_REVESION_ID 0x08 #define PCICFG_BAR_1_LOW 0x10 #define PCICFG_BAR_1_HIGH 0x14 #define PCICFG_BAR_2_LOW 0x18 #define PCICFG_BAR_2_HIGH 0x1c +#define PCICFG_SUBSYSTEM_VENDOR_ID_OFFSET 0x2c +#define PCICFG_SUBSYSTEM_ID_OFFSET 0x2e +#define PCICFG_INT_LINE 0x3c +#define PCICFG_INT_PIN 0x3d +#define PCICFG_PM_CAPABILITY 0x48 +#define PCICFG_PM_CAPABILITY_VERSION (0x3<<16) +#define PCICFG_PM_CAPABILITY_CLOCK (1<<19) +#define PCICFG_PM_CAPABILITY_RESERVED (1<<20) +#define PCICFG_PM_CAPABILITY_DSI (1<<21) +#define PCICFG_PM_CAPABILITY_AUX_CURRENT (0x7<<22) +#define PCICFG_PM_CAPABILITY_D1_SUPPORT (1<<25) +#define PCICFG_PM_CAPABILITY_D2_SUPPORT (1<<26) +#define PCICFG_PM_CAPABILITY_PME_IN_D0 (1<<27) +#define PCICFG_PM_CAPABILITY_PME_IN_D1 (1<<28) +#define PCICFG_PM_CAPABILITY_PME_IN_D2 (1<<29) +#define PCICFG_PM_CAPABILITY_PME_IN_D3_HOT (1<<30) +#define PCICFG_PM_CAPABILITY_PME_IN_D3_COLD (1<<31) +#define PCICFG_PM_CSR_OFFSET 0x4c +#define PCICFG_PM_CSR_STATE (0x3<<0) +#define PCICFG_PM_CSR_PME_ENABLE (1<<8) +#define PCICFG_PM_CSR_PME_STATUS (1<<15) #define PCICFG_GRC_ADDRESS 0x78 #define PCICFG_GRC_DATA 0x80 #define PCICFG_DEVICE_CONTROL 0xb4 #define PCICFG_LINK_CONTROL 0xbc + #define BAR_USTRORM_INTMEM 0x400000 #define BAR_CSTRORM_INTMEM 0x410000 #define BAR_XSTRORM_INTMEM 0x420000 #define BAR_TSTRORM_INTMEM 0x430000 +/* for accessing the IGU in case of status block ACK */ #define BAR_IGU_INTMEM 0x440000 #define BAR_DOORBELL_OFFSET 0x800000 #define BAR_ME_REGISTER 0x450000 - -#define GRC_CONFIG_2_SIZE_REG 0x408 /* config_2 offset */ -#define PCI_CONFIG_2_BAR1_SIZE (0xfL<<0) +/* config_2 offset */ +#define GRC_CONFIG_2_SIZE_REG 0x408 +#define PCI_CONFIG_2_BAR1_SIZE (0xfL<<0) #define PCI_CONFIG_2_BAR1_SIZE_DISABLED (0L<<0) #define PCI_CONFIG_2_BAR1_SIZE_64K (1L<<0) #define PCI_CONFIG_2_BAR1_SIZE_128K (2L<<0) @@ -4267,11 +5279,11 @@ #define PCI_CONFIG_2_BAR1_SIZE_256M (13L<<0) #define PCI_CONFIG_2_BAR1_SIZE_512M (14L<<0) #define PCI_CONFIG_2_BAR1_SIZE_1G (15L<<0) -#define PCI_CONFIG_2_BAR1_64ENA (1L<<4) -#define PCI_CONFIG_2_EXP_ROM_RETRY (1L<<5) -#define PCI_CONFIG_2_CFG_CYCLE_RETRY (1L<<6) -#define PCI_CONFIG_2_FIRST_CFG_DONE (1L<<7) -#define PCI_CONFIG_2_EXP_ROM_SIZE (0xffL<<8) +#define PCI_CONFIG_2_BAR1_64ENA (1L<<4) +#define PCI_CONFIG_2_EXP_ROM_RETRY (1L<<5) +#define PCI_CONFIG_2_CFG_CYCLE_RETRY (1L<<6) +#define PCI_CONFIG_2_FIRST_CFG_DONE (1L<<7) +#define PCI_CONFIG_2_EXP_ROM_SIZE (0xffL<<8) #define PCI_CONFIG_2_EXP_ROM_SIZE_DISABLED (0L<<8) #define PCI_CONFIG_2_EXP_ROM_SIZE_2K (1L<<8) #define PCI_CONFIG_2_EXP_ROM_SIZE_4K (2L<<8) @@ -4288,46 +5300,44 @@ #define PCI_CONFIG_2_EXP_ROM_SIZE_8M (13L<<8) #define PCI_CONFIG_2_EXP_ROM_SIZE_16M (14L<<8) #define PCI_CONFIG_2_EXP_ROM_SIZE_32M (15L<<8) -#define PCI_CONFIG_2_BAR_PREFETCH (1L<<16) -#define PCI_CONFIG_2_RESERVED0 (0x7fffL<<17) +#define PCI_CONFIG_2_BAR_PREFETCH (1L<<16) +#define PCI_CONFIG_2_RESERVED0 (0x7fffL<<17) /* config_3 offset */ -#define GRC_CONFIG_3_SIZE_REG (0x40c) -#define PCI_CONFIG_3_STICKY_BYTE (0xffL<<0) -#define PCI_CONFIG_3_FORCE_PME (1L<<24) -#define PCI_CONFIG_3_PME_STATUS (1L<<25) -#define PCI_CONFIG_3_PME_ENABLE (1L<<26) -#define PCI_CONFIG_3_PM_STATE (0x3L<<27) -#define PCI_CONFIG_3_VAUX_PRESET (1L<<30) -#define PCI_CONFIG_3_PCI_POWER (1L<<31) - -/* config_2 offset */ -#define GRC_CONFIG_2_SIZE_REG 0x408 +#define GRC_CONFIG_3_SIZE_REG 0x40c +#define PCI_CONFIG_3_STICKY_BYTE (0xffL<<0) +#define PCI_CONFIG_3_FORCE_PME (1L<<24) +#define PCI_CONFIG_3_PME_STATUS (1L<<25) +#define PCI_CONFIG_3_PME_ENABLE (1L<<26) +#define PCI_CONFIG_3_PM_STATE (0x3L<<27) +#define PCI_CONFIG_3_VAUX_PRESET (1L<<30) +#define PCI_CONFIG_3_PCI_POWER (1L<<31) #define GRC_BAR2_CONFIG 0x4e0 -#define PCI_CONFIG_2_BAR2_SIZE (0xfL<<0) -#define PCI_CONFIG_2_BAR2_SIZE_DISABLED (0L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_64K (1L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_128K (2L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_256K (3L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_512K (4L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_1M (5L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_2M (6L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_4M (7L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_8M (8L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_16M (9L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_32M (10L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_64M (11L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_128M (12L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_256M (13L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_512M (14L<<0) -#define PCI_CONFIG_2_BAR2_SIZE_1G (15L<<0) -#define PCI_CONFIG_2_BAR2_64ENA (1L<<4) +#define PCI_CONFIG_2_BAR2_SIZE (0xfL<<0) +#define PCI_CONFIG_2_BAR2_SIZE_DISABLED (0L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_64K (1L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_128K (2L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_256K (3L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_512K (4L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_1M (5L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_2M (6L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_4M (7L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_8M (8L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_16M (9L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_32M (10L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_64M (11L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_128M (12L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_256M (13L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_512M (14L<<0) +#define PCI_CONFIG_2_BAR2_SIZE_1G (15L<<0) +#define PCI_CONFIG_2_BAR2_64ENA (1L<<4) + +#define PCI_PM_DATA_A 0x410 +#define PCI_PM_DATA_B 0x414 +#define PCI_ID_VAL1 0x434 +#define PCI_ID_VAL2 0x438 -#define PCI_PM_DATA_A (0x410) -#define PCI_PM_DATA_B (0x414) -#define PCI_ID_VAL1 (0x434) -#define PCI_ID_VAL2 (0x438) #define MDIO_REG_BANK_CL73_IEEEB0 0x0 #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL 0x0 @@ -4336,7 +5346,7 @@ #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_MAIN_RST 0x8000 #define MDIO_REG_BANK_CL73_IEEEB1 0x10 -#define MDIO_CL73_IEEEB1_AN_ADV2 0x01 +#define MDIO_CL73_IEEEB1_AN_ADV2 0x01 #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M 0x0000 #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M_KX 0x0020 #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KX4 0x0040 @@ -4365,7 +5375,7 @@ #define MDIO_REG_BANK_RX_ALL 0x80f0 #define MDIO_RX_ALL_RX_EQ_BOOST 0x1c #define MDIO_RX_ALL_RX_EQ_BOOST_EQUALIZER_CTRL_MASK 0x7 -#define MDIO_RX_ALL_RX_EQ_BOOST_OFFSET_CTRL 0x10 +#define MDIO_RX_ALL_RX_EQ_BOOST_OFFSET_CTRL 0x10 #define MDIO_REG_BANK_TX0 0x8060 #define MDIO_TX0_TX_DRIVER 0x17 @@ -4379,6 +5389,42 @@ #define MDIO_TX0_TX_DRIVER_IFULLSPD_SHIFT 1 #define MDIO_TX0_TX_DRIVER_ICBUF1T 1 +#define MDIO_REG_BANK_TX1 0x8070 +#define MDIO_TX1_TX_DRIVER 0x17 +#define MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK 0xf000 +#define MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT 12 +#define MDIO_TX0_TX_DRIVER_IDRIVER_MASK 0x0f00 +#define MDIO_TX0_TX_DRIVER_IDRIVER_SHIFT 8 +#define MDIO_TX0_TX_DRIVER_IPREDRIVER_MASK 0x00f0 +#define MDIO_TX0_TX_DRIVER_IPREDRIVER_SHIFT 4 +#define MDIO_TX0_TX_DRIVER_IFULLSPD_MASK 0x000e +#define MDIO_TX0_TX_DRIVER_IFULLSPD_SHIFT 1 +#define MDIO_TX0_TX_DRIVER_ICBUF1T 1 + +#define MDIO_REG_BANK_TX2 0x8080 +#define MDIO_TX2_TX_DRIVER 0x17 +#define MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK 0xf000 +#define MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT 12 +#define MDIO_TX0_TX_DRIVER_IDRIVER_MASK 0x0f00 +#define MDIO_TX0_TX_DRIVER_IDRIVER_SHIFT 8 +#define MDIO_TX0_TX_DRIVER_IPREDRIVER_MASK 0x00f0 +#define MDIO_TX0_TX_DRIVER_IPREDRIVER_SHIFT 4 +#define MDIO_TX0_TX_DRIVER_IFULLSPD_MASK 0x000e +#define MDIO_TX0_TX_DRIVER_IFULLSPD_SHIFT 1 +#define MDIO_TX0_TX_DRIVER_ICBUF1T 1 + +#define MDIO_REG_BANK_TX3 0x8090 +#define MDIO_TX3_TX_DRIVER 0x17 +#define MDIO_TX0_TX_DRIVER_PREEMPHASIS_MASK 0xf000 +#define MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT 12 +#define MDIO_TX0_TX_DRIVER_IDRIVER_MASK 0x0f00 +#define MDIO_TX0_TX_DRIVER_IDRIVER_SHIFT 8 +#define MDIO_TX0_TX_DRIVER_IPREDRIVER_MASK 0x00f0 +#define MDIO_TX0_TX_DRIVER_IPREDRIVER_SHIFT 4 +#define MDIO_TX0_TX_DRIVER_IFULLSPD_MASK 0x000e +#define MDIO_TX0_TX_DRIVER_IFULLSPD_SHIFT 1 +#define MDIO_TX0_TX_DRIVER_ICBUF1T 1 + #define MDIO_REG_BANK_XGXS_BLOCK0 0x8000 #define MDIO_BLOCK0_XGXS_CONTROL 0x10 @@ -4392,213 +5438,292 @@ #define MDIO_XGXS_BLOCK2_RX_LN_SWAP 0x10 #define MDIO_XGXS_BLOCK2_RX_LN_SWAP_ENABLE 0x8000 #define MDIO_XGXS_BLOCK2_RX_LN_SWAP_FORCE_ENABLE 0x4000 -#define MDIO_XGXS_BLOCK2_TX_LN_SWAP 0x11 +#define MDIO_XGXS_BLOCK2_TX_LN_SWAP 0x11 #define MDIO_XGXS_BLOCK2_TX_LN_SWAP_ENABLE 0x8000 -#define MDIO_XGXS_BLOCK2_UNICORE_MODE_10G 0x14 +#define MDIO_XGXS_BLOCK2_UNICORE_MODE_10G 0x14 #define MDIO_XGXS_BLOCK2_UNICORE_MODE_10G_CX4_XGXS 0x0001 #define MDIO_XGXS_BLOCK2_UNICORE_MODE_10G_HIGIG_XGXS 0x0010 -#define MDIO_XGXS_BLOCK2_TEST_MODE_LANE 0x15 +#define MDIO_XGXS_BLOCK2_TEST_MODE_LANE 0x15 #define MDIO_REG_BANK_GP_STATUS 0x8120 -#define MDIO_GP_STATUS_TOP_AN_STATUS1 0x1B -#define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_AUTONEG_COMPLETE 0x0001 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_CL37_AUTONEG_COMPLETE 0x0002 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_LINK_STATUS 0x0004 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_DUPLEX_STATUS 0x0008 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_MR_LP_NP_AN_ABLE 0x0010 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_LP_NP_BAM_ABLE 0x0020 - -#define MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_TXSIDE 0x0040 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_RXSIDE 0x0080 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_MASK 0x3f00 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10M 0x0000 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_100M 0x0100 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G 0x0200 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_2_5G 0x0300 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_5G 0x0400 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_6G 0x0500 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_HIG 0x0600 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_CX4 0x0700 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_12G_HIG 0x0800 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_12_5G 0x0900 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_13G 0x0A00 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_15G 0x0B00 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_16G 0x0C00 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G_KX 0x0D00 -#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_KX4 0x0E00 +#define MDIO_GP_STATUS_TOP_AN_STATUS1 0x1B +#define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_AUTONEG_COMPLETE 0x0001 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_CL37_AUTONEG_COMPLETE 0x0002 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_LINK_STATUS 0x0004 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_DUPLEX_STATUS 0x0008 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_MR_LP_NP_AN_ABLE 0x0010 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_LP_NP_BAM_ABLE 0x0020 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_TXSIDE 0x0040 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_RXSIDE 0x0080 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_MASK 0x3f00 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10M 0x0000 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_100M 0x0100 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G 0x0200 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_2_5G 0x0300 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_5G 0x0400 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_6G 0x0500 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_HIG 0x0600 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_CX4 0x0700 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_12G_HIG 0x0800 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_12_5G 0x0900 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_13G 0x0A00 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_15G 0x0B00 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_16G 0x0C00 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_1G_KX 0x0D00 +#define MDIO_GP_STATUS_TOP_AN_STATUS1_ACTUAL_SPEED_10G_KX4 0x0E00 #define MDIO_REG_BANK_10G_PARALLEL_DETECT 0x8130 -#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL 0x11 -#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL_PARDET10G_EN 0x1 -#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK 0x13 -#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK_CNT (0xb71<<1) +#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL 0x11 +#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_CONTROL_PARDET10G_EN 0x1 +#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK 0x13 +#define MDIO_10G_PARALLEL_DETECT_PAR_DET_10G_LINK_CNT (0xb71<<1) #define MDIO_REG_BANK_SERDES_DIGITAL 0x8300 -#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1 0x10 -#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_FIBER_MODE 0x0001 -#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_TBI_IF 0x0002 -#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_SIGNAL_DETECT_EN 0x0004 -#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_INVERT_SIGNAL_DETECT 0x0008 -#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET 0x0010 -#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_MSTR_MODE 0x0020 -#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2 0x11 -#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN 0x0001 -#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_AN_FST_TMR 0x0040 -#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1 0x14 -#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_DUPLEX 0x0004 -#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_MASK 0x0018 -#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_SHIFT 3 -#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_2_5G 0x0018 -#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_1G 0x0010 -#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_100M 0x0008 -#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_10M 0x0000 -#define MDIO_SERDES_DIGITAL_MISC1 0x18 -#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_MASK 0xE000 -#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_25M 0x0000 -#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_100M 0x2000 -#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_125M 0x4000 -#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_156_25M 0x6000 -#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_187_5M 0x8000 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_SEL 0x0010 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_MASK 0x000f -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_2_5G 0x0000 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_5G 0x0001 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_6G 0x0002 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_10G_HIG 0x0003 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_10G_CX4 0x0004 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_12G 0x0005 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_12_5G 0x0006 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_13G 0x0007 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_15G 0x0008 -#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_16G 0x0009 +#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1 0x10 +#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_FIBER_MODE 0x0001 +#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_TBI_IF 0x0002 +#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_SIGNAL_DETECT_EN 0x0004 +#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_INVERT_SIGNAL_DETECT 0x0008 +#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_AUTODET 0x0010 +#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL1_MSTR_MODE 0x0020 +#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2 0x11 +#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN 0x0001 +#define MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_AN_FST_TMR 0x0040 +#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1 0x14 +#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_DUPLEX 0x0004 +#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_MASK 0x0018 +#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_SHIFT 3 +#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_2_5G 0x0018 +#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_1G 0x0010 +#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_100M 0x0008 +#define MDIO_SERDES_DIGITAL_A_1000X_STATUS1_SPEED_10M 0x0000 +#define MDIO_SERDES_DIGITAL_MISC1 0x18 +#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_MASK 0xE000 +#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_25M 0x0000 +#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_100M 0x2000 +#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_125M 0x4000 +#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_156_25M 0x6000 +#define MDIO_SERDES_DIGITAL_MISC1_REFCLK_SEL_187_5M 0x8000 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_SEL 0x0010 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_MASK 0x000f +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_2_5G 0x0000 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_5G 0x0001 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_6G 0x0002 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_10G_HIG 0x0003 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_10G_CX4 0x0004 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_12G 0x0005 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_12_5G 0x0006 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_13G 0x0007 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_15G 0x0008 +#define MDIO_SERDES_DIGITAL_MISC1_FORCE_SPEED_16G 0x0009 #define MDIO_REG_BANK_OVER_1G 0x8320 -#define MDIO_OVER_1G_DIGCTL_3_4 0x14 -#define MDIO_OVER_1G_DIGCTL_3_4_MP_ID_MASK 0xffe0 -#define MDIO_OVER_1G_DIGCTL_3_4_MP_ID_SHIFT 5 -#define MDIO_OVER_1G_UP1 0x19 -#define MDIO_OVER_1G_UP1_2_5G 0x0001 -#define MDIO_OVER_1G_UP1_5G 0x0002 -#define MDIO_OVER_1G_UP1_6G 0x0004 -#define MDIO_OVER_1G_UP1_10G 0x0010 -#define MDIO_OVER_1G_UP1_10GH 0x0008 -#define MDIO_OVER_1G_UP1_12G 0x0020 -#define MDIO_OVER_1G_UP1_12_5G 0x0040 -#define MDIO_OVER_1G_UP1_13G 0x0080 -#define MDIO_OVER_1G_UP1_15G 0x0100 -#define MDIO_OVER_1G_UP1_16G 0x0200 -#define MDIO_OVER_1G_UP2 0x1A -#define MDIO_OVER_1G_UP2_IPREDRIVER_MASK 0x0007 -#define MDIO_OVER_1G_UP2_IDRIVER_MASK 0x0038 -#define MDIO_OVER_1G_UP2_PREEMPHASIS_MASK 0x03C0 -#define MDIO_OVER_1G_UP3 0x1B -#define MDIO_OVER_1G_UP3_HIGIG2 0x0001 -#define MDIO_OVER_1G_LP_UP1 0x1C -#define MDIO_OVER_1G_LP_UP2 0x1D -#define MDIO_OVER_1G_LP_UP2_MR_ADV_OVER_1G_MASK 0x03ff -#define MDIO_OVER_1G_LP_UP2_PREEMPHASIS_MASK 0x0780 -#define MDIO_OVER_1G_LP_UP2_PREEMPHASIS_SHIFT 7 -#define MDIO_OVER_1G_LP_UP3 0x1E +#define MDIO_OVER_1G_DIGCTL_3_4 0x14 +#define MDIO_OVER_1G_DIGCTL_3_4_MP_ID_MASK 0xffe0 +#define MDIO_OVER_1G_DIGCTL_3_4_MP_ID_SHIFT 5 +#define MDIO_OVER_1G_UP1 0x19 +#define MDIO_OVER_1G_UP1_2_5G 0x0001 +#define MDIO_OVER_1G_UP1_5G 0x0002 +#define MDIO_OVER_1G_UP1_6G 0x0004 +#define MDIO_OVER_1G_UP1_10G 0x0010 +#define MDIO_OVER_1G_UP1_10GH 0x0008 +#define MDIO_OVER_1G_UP1_12G 0x0020 +#define MDIO_OVER_1G_UP1_12_5G 0x0040 +#define MDIO_OVER_1G_UP1_13G 0x0080 +#define MDIO_OVER_1G_UP1_15G 0x0100 +#define MDIO_OVER_1G_UP1_16G 0x0200 +#define MDIO_OVER_1G_UP2 0x1A +#define MDIO_OVER_1G_UP2_IPREDRIVER_MASK 0x0007 +#define MDIO_OVER_1G_UP2_IDRIVER_MASK 0x0038 +#define MDIO_OVER_1G_UP2_PREEMPHASIS_MASK 0x03C0 +#define MDIO_OVER_1G_UP3 0x1B +#define MDIO_OVER_1G_UP3_HIGIG2 0x0001 +#define MDIO_OVER_1G_LP_UP1 0x1C +#define MDIO_OVER_1G_LP_UP2 0x1D +#define MDIO_OVER_1G_LP_UP2_MR_ADV_OVER_1G_MASK 0x03ff +#define MDIO_OVER_1G_LP_UP2_PREEMPHASIS_MASK 0x0780 +#define MDIO_OVER_1G_LP_UP2_PREEMPHASIS_SHIFT 7 +#define MDIO_OVER_1G_LP_UP3 0x1E #define MDIO_REG_BANK_BAM_NEXT_PAGE 0x8350 -#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL 0x10 -#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_BAM_MODE 0x0001 -#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_TETON_AN 0x0002 +#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL 0x10 +#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_BAM_MODE 0x0001 +#define MDIO_BAM_NEXT_PAGE_MP5_NEXT_PAGE_CTRL_TETON_AN 0x0002 + +#define MDIO_REG_BANK_CL73_USERB0 0x8370 +#define MDIO_CL73_USERB0_CL73_BAM_CTRL1 0x12 +#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_EN 0x8000 +#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_STATION_MNGR_EN 0x4000 +#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_NP_AFTER_BP_EN 0x2000 +#define MDIO_CL73_USERB0_CL73_BAM_CTRL3 0x14 +#define MDIO_CL73_USERB0_CL73_BAM_CTRL3_USE_CL73_HCD_MR 0x0001 + +#define MDIO_REG_BANK_AER_BLOCK 0xFFD0 +#define MDIO_AER_BLOCK_AER_REG 0x1E + +#define MDIO_REG_BANK_COMBO_IEEE0 0xFFE0 +#define MDIO_COMBO_IEEE0_MII_CONTROL 0x10 +#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_MASK 0x2040 +#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_10 0x0000 +#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_100 0x2000 +#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_1000 0x0040 +#define MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX 0x0100 +#define MDIO_COMBO_IEEO_MII_CONTROL_RESTART_AN 0x0200 +#define MDIO_COMBO_IEEO_MII_CONTROL_AN_EN 0x1000 +#define MDIO_COMBO_IEEO_MII_CONTROL_LOOPBACK 0x4000 +#define MDIO_COMBO_IEEO_MII_CONTROL_RESET 0x8000 +#define MDIO_COMBO_IEEE0_MII_STATUS 0x11 +#define MDIO_COMBO_IEEE0_MII_STATUS_LINK_PASS 0x0004 +#define MDIO_COMBO_IEEE0_MII_STATUS_AUTONEG_COMPLETE 0x0020 +#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV 0x14 +#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_FULL_DUPLEX 0x0020 +#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_HALF_DUPLEX 0x0040 +#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK 0x0180 +#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE 0x0000 +#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_SYMMETRIC 0x0080 +#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC 0x0100 +#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH 0x0180 +#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_NEXT_PAGE 0x8000 +#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1 0x15 +#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_NEXT_PAGE 0x8000 +#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_ACK 0x4000 +#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_PAUSE_MASK 0x0180 +#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_PAUSE_NONE 0x0000 +#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_PAUSE_BOTH 0x0180 +#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_HALF_DUP_CAP 0x0040 +#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_FULL_DUP_CAP 0x0020 +/*WhenthelinkpartnerisinSGMIImode(bit0=1),then +bit15=link,bit12=duplex,bits11:10=speed,bit14=acknowledge. +Theotherbitsarereservedandshouldbezero*/ +#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_SGMII_MODE 0x0001 + + +#define MDIO_PMA_DEVAD 0x1 +/*ieee*/ +#define MDIO_PMA_REG_CTRL 0x0 +#define MDIO_PMA_REG_STATUS 0x1 +#define MDIO_PMA_REG_10G_CTRL2 0x7 +#define MDIO_PMA_REG_RX_SD 0xa +/*bcm*/ +#define MDIO_PMA_REG_BCM_CTRL 0x0096 +#define MDIO_PMA_REG_FEC_CTRL 0x00ab +#define MDIO_PMA_REG_RX_ALARM_CTRL 0x9000 +#define MDIO_PMA_REG_LASI_CTRL 0x9002 +#define MDIO_PMA_REG_RX_ALARM 0x9003 +#define MDIO_PMA_REG_TX_ALARM 0x9004 +#define MDIO_PMA_REG_LASI_STATUS 0x9005 +#define MDIO_PMA_REG_PHY_IDENTIFIER 0xc800 +#define MDIO_PMA_REG_DIGITAL_CTRL 0xc808 +#define MDIO_PMA_REG_DIGITAL_STATUS 0xc809 +#define MDIO_PMA_REG_TX_POWER_DOWN 0xca02 +#define MDIO_PMA_REG_CMU_PLL_BYPASS 0xca09 +#define MDIO_PMA_REG_MISC_CTRL 0xca0a +#define MDIO_PMA_REG_GEN_CTRL 0xca10 +#define MDIO_PMA_REG_GEN_CTRL_ROM_RESET_INTERNAL_MP 0x0188 +#define MDIO_PMA_REG_GEN_CTRL_ROM_MICRO_RESET 0x018a +#define MDIO_PMA_REG_M8051_MSGIN_REG 0xca12 +#define MDIO_PMA_REG_M8051_MSGOUT_REG 0xca13 +#define MDIO_PMA_REG_ROM_VER1 0xca19 +#define MDIO_PMA_REG_ROM_VER2 0xca1a +#define MDIO_PMA_REG_EDC_FFE_MAIN 0xca1b +#define MDIO_PMA_REG_PLL_BANDWIDTH 0xca1d +#define MDIO_PMA_REG_MISC_CTRL0 0xca23 +#define MDIO_PMA_REG_LRM_MODE 0xca3f +#define MDIO_PMA_REG_CDR_BANDWIDTH 0xca46 +#define MDIO_PMA_REG_MISC_CTRL1 0xca85 + +#define MDIO_PMA_REG_8726_TWO_WIRE_CTRL 0x8000 +#define MDIO_PMA_REG_8726_TWO_WIRE_CTRL_STATUS_MASK 0x000c +#define MDIO_PMA_REG_8726_TWO_WIRE_STATUS_IDLE 0x0000 +#define MDIO_PMA_REG_8726_TWO_WIRE_STATUS_COMPLETE 0x0004 +#define MDIO_PMA_REG_8726_TWO_WIRE_STATUS_IN_PROGRESS 0x0008 +#define MDIO_PMA_REG_8726_TWO_WIRE_STATUS_FAILED 0x000c +#define MDIO_PMA_REG_8726_TWO_WIRE_BYTE_CNT 0x8002 +#define MDIO_PMA_REG_8726_TWO_WIRE_MEM_ADDR 0x8003 +#define MDIO_PMA_REG_8726_TWO_WIRE_DATA_BUF 0xc820 +#define MDIO_PMA_REG_8726_TWO_WIRE_DATA_MASK 0xff + + +#define MDIO_PMA_REG_7101_RESET 0xc000 +#define MDIO_PMA_REG_7107_LED_CNTL 0xc007 +#define MDIO_PMA_REG_7101_VER1 0xc026 +#define MDIO_PMA_REG_7101_VER2 0xc027 + + +#define MDIO_WIS_DEVAD 0x2 +/*bcm*/ +#define MDIO_WIS_REG_LASI_CNTL 0x9002 +#define MDIO_WIS_REG_LASI_STATUS 0x9005 + +#define MDIO_PCS_DEVAD 0x3 +#define MDIO_PCS_REG_STATUS 0x0020 +#define MDIO_PCS_REG_LASI_STATUS 0x9005 +#define MDIO_PCS_REG_7101_DSP_ACCESS 0xD000 +#define MDIO_PCS_REG_7101_SPI_MUX 0xD008 +#define MDIO_PCS_REG_7101_SPI_CTRL_ADDR 0xE12A +#define MDIO_PCS_REG_7101_SPI_RESET_BIT (5) +#define MDIO_PCS_REG_7101_SPI_FIFO_ADDR 0xE02A +#define MDIO_PCS_REG_7101_SPI_FIFO_ADDR_WRITE_ENABLE_CMD (6) +#define MDIO_PCS_REG_7101_SPI_FIFO_ADDR_BULK_ERASE_CMD (0xC7) +#define MDIO_PCS_REG_7101_SPI_FIFO_ADDR_PAGE_PROGRAM_CMD (2) +#define MDIO_PCS_REG_7101_SPI_BYTES_TO_TRANSFER_ADDR 0xE028 + + +#define MDIO_XS_DEVAD 0x4 +#define MDIO_XS_PLL_SEQUENCER 0x8000 +#define MDIO_XS_SFX7101_XGXS_TEST1 0xc00a -#define MDIO_REG_BANK_CL73_USERB0 0x8370 -#define MDIO_CL73_USERB0_CL73_BAM_CTRL1 0x12 -#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_EN 0x8000 -#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_STATION_MNGR_EN 0x4000 -#define MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_NP_AFTER_BP_EN 0x2000 -#define MDIO_CL73_USERB0_CL73_BAM_CTRL3 0x14 -#define MDIO_CL73_USERB0_CL73_BAM_CTRL3_USE_CL73_HCD_MR 0x0001 +#define MDIO_AN_DEVAD 0x7 +/*ieee*/ +#define MDIO_AN_REG_CTRL 0x0000 +#define MDIO_AN_REG_STATUS 0x0001 +#define MDIO_AN_REG_STATUS_AN_COMPLETE 0x0020 +#define MDIO_AN_REG_ADV_PAUSE 0x0010 +#define MDIO_AN_REG_ADV_PAUSE_PAUSE 0x0400 +#define MDIO_AN_REG_ADV_PAUSE_ASYMMETRIC 0x0800 +#define MDIO_AN_REG_ADV_PAUSE_BOTH 0x0C00 +#define MDIO_AN_REG_ADV_PAUSE_MASK 0x0C00 +#define MDIO_AN_REG_ADV 0x0011 +#define MDIO_AN_REG_ADV2 0x0012 +#define MDIO_AN_REG_LP_AUTO_NEG 0x0013 +#define MDIO_AN_REG_MASTER_STATUS 0x0021 +/*bcm*/ +#define MDIO_AN_REG_LINK_STATUS 0x8304 +#define MDIO_AN_REG_CL37_CL73 0x8370 +#define MDIO_AN_REG_CL37_AN 0xffe0 +#define MDIO_AN_REG_CL37_FC_LD 0xffe4 +#define MDIO_AN_REG_CL37_FC_LP 0xffe5 -#define MDIO_REG_BANK_AER_BLOCK 0xFFD0 -#define MDIO_AER_BLOCK_AER_REG 0x1E -#define MDIO_REG_BANK_COMBO_IEEE0 0xFFE0 -#define MDIO_COMBO_IEEE0_MII_CONTROL 0x10 -#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_MASK 0x2040 -#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_10 0x0000 -#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_100 0x2000 -#define MDIO_COMBO_IEEO_MII_CONTROL_MAN_SGMII_SP_1000 0x0040 -#define MDIO_COMBO_IEEO_MII_CONTROL_FULL_DUPLEX 0x0100 -#define MDIO_COMBO_IEEO_MII_CONTROL_RESTART_AN 0x0200 -#define MDIO_COMBO_IEEO_MII_CONTROL_AN_EN 0x1000 -#define MDIO_COMBO_IEEO_MII_CONTROL_LOOPBACK 0x4000 -#define MDIO_COMBO_IEEO_MII_CONTROL_RESET 0x8000 -#define MDIO_COMBO_IEEE0_MII_STATUS 0x11 -#define MDIO_COMBO_IEEE0_MII_STATUS_LINK_PASS 0x0004 -#define MDIO_COMBO_IEEE0_MII_STATUS_AUTONEG_COMPLETE 0x0020 -#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV 0x14 -#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_FULL_DUPLEX 0x0020 -#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_HALF_DUPLEX 0x0040 -#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK 0x0180 -#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE 0x0000 -#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_SYMMETRIC 0x0080 -#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC 0x0100 -#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH 0x0180 -#define MDIO_COMBO_IEEE0_AUTO_NEG_ADV_NEXT_PAGE 0x8000 -#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1 0x15 -#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_NEXT_PAGE 0x8000 -#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_ACK 0x4000 -#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_PAUSE_MASK 0x0180 -#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_PAUSE_NONE\ - 0x0000 -#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_PAUSE_BOTH\ - 0x0180 -#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_HALF_DUP_CAP 0x0040 -#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_FULL_DUP_CAP 0x0020 -#define MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1_SGMII_MODE 0x0001 +#define IGU_FUNC_BASE 0x0400 +#define IGU_ADDR_MSIX 0x0000 +#define IGU_ADDR_INT_ACK 0x0200 +#define IGU_ADDR_PROD_UPD 0x0201 +#define IGU_ADDR_ATTN_BITS_UPD 0x0202 +#define IGU_ADDR_ATTN_BITS_SET 0x0203 +#define IGU_ADDR_ATTN_BITS_CLR 0x0204 +#define IGU_ADDR_COALESCE_NOW 0x0205 +#define IGU_ADDR_SIMD_MASK 0x0206 +#define IGU_ADDR_SIMD_NOMASK 0x0207 +#define IGU_ADDR_MSI_CTL 0x0210 +#define IGU_ADDR_MSI_ADDR_LO 0x0211 +#define IGU_ADDR_MSI_ADDR_HI 0x0212 +#define IGU_ADDR_MSI_DATA 0x0213 -#define EXT_PHY_AUTO_NEG_DEVAD 0x7 -#define EXT_PHY_OPT_PMA_PMD_DEVAD 0x1 -#define EXT_PHY_OPT_WIS_DEVAD 0x2 -#define EXT_PHY_OPT_PCS_DEVAD 0x3 -#define EXT_PHY_OPT_PHY_XS_DEVAD 0x4 -#define EXT_PHY_OPT_CNTL 0x0 -#define EXT_PHY_OPT_CNTL2 0x7 -#define EXT_PHY_OPT_PMD_RX_SD 0xa -#define EXT_PHY_OPT_PMD_MISC_CNTL 0xca0a -#define EXT_PHY_OPT_PHY_IDENTIFIER 0xc800 -#define EXT_PHY_OPT_PMD_DIGITAL_CNT 0xc808 -#define EXT_PHY_OPT_PMD_DIGITAL_SATUS 0xc809 -#define EXT_PHY_OPT_CMU_PLL_BYPASS 0xca09 -#define EXT_PHY_OPT_LASI_CNTL 0x9002 -#define EXT_PHY_OPT_RX_ALARM 0x9003 -#define EXT_PHY_OPT_LASI_STATUS 0x9005 -#define EXT_PHY_OPT_PCS_STATUS 0x0020 -#define EXT_PHY_OPT_XGXS_LANE_STATUS 0x0018 -#define EXT_PHY_OPT_AN_LINK_STATUS 0x8304 -#define EXT_PHY_OPT_AN_CL37_CL73 0x8370 -#define EXT_PHY_OPT_AN_CL37_FD 0xffe4 -#define EXT_PHY_OPT_AN_CL37_AN 0xffe0 -#define EXT_PHY_OPT_AN_ADV 0x11 +#define IGU_INT_ENABLE 0 +#define IGU_INT_DISABLE 1 +#define IGU_INT_NOP 2 +#define IGU_INT_NOP2 3 -#define EXT_PHY_KR_PMA_PMD_DEVAD 0x1 -#define EXT_PHY_KR_PCS_DEVAD 0x3 -#define EXT_PHY_KR_AUTO_NEG_DEVAD 0x7 -#define EXT_PHY_KR_CTRL 0x0000 -#define EXT_PHY_KR_STATUS 0x0001 -#define EXT_PHY_KR_AUTO_NEG_COMPLETE 0x0020 -#define EXT_PHY_KR_AUTO_NEG_ADVERT 0x0010 -#define EXT_PHY_KR_AUTO_NEG_ADVERT_PAUSE 0x0400 -#define EXT_PHY_KR_AUTO_NEG_ADVERT_PAUSE_ASYMMETRIC 0x0800 -#define EXT_PHY_KR_AUTO_NEG_ADVERT_PAUSE_BOTH 0x0C00 -#define EXT_PHY_KR_AUTO_NEG_ADVERT_PAUSE_MASK 0x0C00 -#define EXT_PHY_KR_LP_AUTO_NEG 0x0013 -#define EXT_PHY_KR_CTRL2 0x0007 -#define EXT_PHY_KR_PCS_STATUS 0x0020 -#define EXT_PHY_KR_PMD_CTRL 0x0096 -#define EXT_PHY_KR_LASI_CNTL 0x9002 -#define EXT_PHY_KR_LASI_STATUS 0x9005 -#define EXT_PHY_KR_MISC_CTRL1 0xca85 -#define EXT_PHY_KR_GEN_CTRL 0xca10 -#define EXT_PHY_KR_ROM_CODE 0xca19 -#define EXT_PHY_KR_ROM_RESET_INTERNAL_MP 0x0188 -#define EXT_PHY_KR_ROM_MICRO_RESET 0x018a +#define COMMAND_REG_INT_ACK 0x0 +#define COMMAND_REG_PROD_UPD 0x4 +#define COMMAND_REG_ATTN_BITS_UPD 0x8 +#define COMMAND_REG_ATTN_BITS_SET 0xc +#define COMMAND_REG_ATTN_BITS_CLR 0x10 +#define COMMAND_REG_COALESCE_NOW 0x14 +#define COMMAND_REG_SIMD_MASK 0x18 +#define COMMAND_REG_SIMD_NOMASK 0x1c -#define EXT_PHY_SFX7101_XGXS_TEST1 0xc00a diff --git a/drivers/net/bnx2x_self_test.h b/drivers/net/bnx2x_self_test.h new file mode 100644 index 00000000..78d68dcd --- /dev/null +++ b/drivers/net/bnx2x_self_test.h @@ -0,0 +1,1003 @@ +/* bnx2x_self_test.h: Broadcom Everest network driver. + * + * Copyright (c) 2007-2008 Broadcom Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation. + */ + +/* self test */ + +static int idle_chk_errors; +static int idle_chk_warnings; + + +#define IDLE_CHK_E1 0x1 +#define IDLE_CHK_E1H 0x2 + +#define IDLE_CHK_ERROR 1 +#define IDLE_CHK_ERROR_NO_TRAFFIC 2 +#define IDLE_CHK_WARNING 3 + + +#define CHIP_MASK_CHK(chip_mask) \ + (((((chip_mask) & IDLE_CHK_E1) && is_e1) || \ + (((chip_mask) & IDLE_CHK_E1H) && is_e1h)) ? 1 : 0) + +#define CONDITION_CHK(condition, severity, fail_msg, arg_list...) \ + do { \ + if (condition) { \ + switch (severity) { \ + case IDLE_CHK_ERROR: \ + BNX2X_DBG_ERR("ERROR " fail_msg, ##arg_list); \ + idle_chk_errors++; \ + break; \ + case IDLE_CHK_ERROR_NO_TRAFFIC: \ + BNX2X_DBG_ERR("INFO " fail_msg, ##arg_list); \ + break; \ + case IDLE_CHK_WARNING: \ + BNX2X_DBG_ERR("WARNING " fail_msg, \ + ##arg_list); \ + idle_chk_warnings++; \ + break; \ + } \ + } \ + } while (0); + + +static void bnx2x_idle_chk4(struct bnx2x *bp, u32 chip_mask, u32 offset1, + u32 offset2, int loop, int inc, int severity) +{ + static const u32 leading_cids[] = { 0x0, 0x80000, 0x20000, 0xa0000, + 0x40000, 0xc0000, 0x60000, 0xe0000 }; + int is_e1 = CHIP_IS_E1(bp); + int is_e1h = CHIP_IS_E1H(bp); + int i, j, max = (is_e1 ? 2 : 8); + u32 val1, val2; + int leading; + + if (CHIP_MASK_CHK(chip_mask)) + for (i = 0; i < loop; i++) { + val1 = (REG_RD(bp, offset1 + i*4) >> 1); + val2 = REG_RD(bp, offset2 + i*inc); + leading = 0; + for (j = 0; j < max; j++) { + if (val1 == leading_cids[j]) { + leading = 1; + break; + } + } + if (!leading) { + CONDITION_CHK((val2 != 0), severity, + "CFC: LCID %d, AC is not 0, " + "CID_CAM 0x%x Value is 0x%x\n", + i, val1, val2); + } else { + CONDITION_CHK(((val2 != 0) && (val2 != 1)), + IDLE_CHK_ERROR_NO_TRAFFIC, + "CFC: LCID %d, AC is not 0 nor 1, " + "CID_CAM 0x%x " + "(leading). Value is 0x%x\n", + i, val1, val2); + } + } +} + +static void bnx2x_idle_chk6(struct bnx2x *bp, u32 chip_mask, u32 offset, + int loop, int inc, int severity) +{ + int is_e1 = CHIP_IS_E1(bp); + int is_e1h = CHIP_IS_E1H(bp); + int i; + u32 val1, val2; + + if (CHIP_MASK_CHK(chip_mask)) { + u32 rd_ptr, wr_ptr, rd_bank, wr_bank; + + for (i = 0; i < loop; i++) { + val1 = REG_RD(bp, offset + i*inc); + val2 = REG_RD(bp, offset + i*inc + 4); + rd_ptr = ((val1 & 0x3FFFFFC0) >> 6); + wr_ptr = ((((val1 & 0xC0000000) >> 30) & 0x3) | + ((val2 & 0x3FFFFF) << 2)); + CONDITION_CHK((rd_ptr != wr_ptr), severity, + "QM: PTRTBL entry %d - rd_ptr is not" + " equal to wr_ptr. Values are 0x%x 0x%x\n", + i, rd_ptr, wr_ptr); + rd_bank = ((val1 & 0x30) >> 4); + wr_bank = (val1 & 0x03); + CONDITION_CHK((rd_bank != wr_bank), severity, + "QM: PTRTBL entry %d - rd_bank is not" + " equal to wr_bank. Values are 0x%x 0x%x\n", + i, rd_bank, wr_bank); + } + } +} + +static int bnx2x_idle_chk(struct bnx2x *bp) +{ + +/* read one reg and check the condition */ +#define IDLE_CHK_1(chip_mask, offset, condition, severity, fail_msg) \ + do { \ + if (CHIP_MASK_CHK(chip_mask)) { \ + val = REG_RD(bp, offset); \ + CONDITION_CHK(condition, severity, \ + fail_msg ". Value is 0x%x\n", val); \ + } \ + } while (0); + +/* loop to read one reg and check the condition */ +#define IDLE_CHK_2(chip_mask, offset, loop, inc, condition, severity, \ + fail_msg) \ + do { \ + if (CHIP_MASK_CHK(chip_mask)) \ + for (i = 0; i < (loop); i++) { \ + val = REG_RD(bp, offset + i*(inc)); \ + CONDITION_CHK(condition, severity, \ + fail_msg ". Value is 0x%x\n", \ + i, val); \ + } \ + } while (0); + +/* read two regs and check the condition */ +#define IDLE_CHK_3(chip_mask, offset1, offset2, condition, severity, \ + fail_msg) \ + do { \ + if (CHIP_MASK_CHK(chip_mask)) { \ + val1 = REG_RD(bp, offset1); \ + val2 = REG_RD(bp, offset2); \ + CONDITION_CHK(condition, severity, \ + fail_msg ". Values are 0x%x 0x%x\n", \ + val1, val2); \ + } \ + } while (0); + +/* read one reg and check according to CID_CAM */ +#define IDLE_CHK_4(chip_mask, offset1, offset2, loop, inc, severity) \ + bnx2x_idle_chk4(bp, chip_mask, offset1, offset2, loop, inc, severity) + +/* read one reg and check according to another reg */ +#define IDLE_CHK_5(chip_mask, offset, offset1, offset2, condition, severity, \ + fail_msg) \ + do { \ + if (CHIP_MASK_CHK(chip_mask)) \ + if (!REG_RD(bp, offset)) \ + IDLE_CHK_3(chip_mask, offset1, offset2, \ + condition, severity, fail_msg); \ + } while (0); + +/* read wide-bus reg and check sub-fields */ +#define IDLE_CHK_6(chip_mask, offset, loop, inc, severity) \ + bnx2x_idle_chk6(bp, chip_mask, offset, loop, inc, severity) + + + int is_e1 = CHIP_IS_E1(bp); + int is_e1h = CHIP_IS_E1H(bp); + int i; + u32 val, val1, val2; + + idle_chk_errors = 0; + idle_chk_warnings = 0; + + if (!netif_running(bp->dev)) + return idle_chk_errors; + + IDLE_CHK_1(0x3, 0x2114, ((val & 0x0ff010) != 0), IDLE_CHK_ERROR, + "PCIE: ucorr_err_status is not 0"); + IDLE_CHK_1(0x3, 0x2114, ((val & 0x100000) != 0), IDLE_CHK_WARNING, + "PCIE: ucorr_err_status - Unsupported request error"); + IDLE_CHK_1(0x3, 0x2120, + (((val & 0x31c1) != 0x2000) && ((val & 0x31c1) != 0)), + IDLE_CHK_WARNING, "PCIE: corr_err_status is not 0x2000"); + IDLE_CHK_1(0x3, 0x2814, ((val & ~0x40100) != 0), IDLE_CHK_ERROR, + "PCIE: attentions register is not 0x40100"); + IDLE_CHK_1(0x2, 0x281c, ((val & ~0x40040100) != 0), IDLE_CHK_ERROR, + "PCIE: attentions register is not 0x40040100"); + IDLE_CHK_1(0x2, 0x2820, ((val & ~0x40040100) != 0), IDLE_CHK_ERROR, + "PCIE: attentions register is not 0x40040100"); + IDLE_CHK_1(0x1, PXP2_REG_PGL_EXP_ROM2, (val != 0xffffffff), + IDLE_CHK_WARNING, + "PXP2: There are outstanding read requests. Not all" + " completions have arrived for read requests on tags that" + " are marked with 0"); + IDLE_CHK_2(0x3, 0x212c, 4, 4, ((val != 0) && (idle_chk_errors > 0)), + IDLE_CHK_WARNING, "PCIE: error packet header %d is not 0"); + + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ0_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ0 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ1_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ1 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ2_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ2 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ3_ENTRY_CNT, (val > 2), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ3 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ4_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ4 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ5_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ5 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ6_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ6 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ7_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ7 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ8_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ8 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ9_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ9 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ10_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ10 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ11_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ11 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ12_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ12 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ13_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ13 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ14_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ14 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ15_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ15 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ16_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ16 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ17_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ17 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ18_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ18 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ19_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ19 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ20_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ20 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ21_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ21 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ22_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ22 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ23_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ23 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ24_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ24 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ25_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ25 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ26_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ26 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ27_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ27 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ28_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ28 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ29_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ29 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ30_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ30 is not empty"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_VQ31_ENTRY_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PXP2: VQ31 is not empty"); + + IDLE_CHK_1(0x3, PXP2_REG_RQ_UFIFO_NUM_OF_ENTRY, (val != 0), + IDLE_CHK_ERROR, "PXP2: rq_ufifo_num_of_entry is not 0"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_RBC_DONE, (val != 1), IDLE_CHK_ERROR, + "PXP2: rq_rbc_done is not 1"); + IDLE_CHK_1(0x3, PXP2_REG_RQ_CFG_DONE, (val != 1), IDLE_CHK_ERROR, + "PXP2: rq_cfg_done is not 1"); + IDLE_CHK_1(0x3, PXP2_REG_PSWRQ_BW_CREDIT, (val != 0x1b), + IDLE_CHK_ERROR, + "PXP2: rq_read_credit and rq_write_credit are not 3"); + IDLE_CHK_1(0x3, PXP2_REG_RD_START_INIT, (val != 1), IDLE_CHK_ERROR, + "PXP2: rd_start_init is not 1"); + IDLE_CHK_1(0x3, PXP2_REG_RD_INIT_DONE, (val != 1), IDLE_CHK_ERROR, + "PXP2: rd_init_done is not 1"); + + IDLE_CHK_3(0x3, PXP2_REG_RD_SR_CNT, PXP2_REG_RD_SR_NUM_CFG, + (val1 != (val2-1)), IDLE_CHK_WARNING, + "PXP2: rd_sr_cnt is not equal to rd_sr_num_cfg"); + IDLE_CHK_3(0x3, PXP2_REG_RD_BLK_CNT, PXP2_REG_RD_BLK_NUM_CFG, + (val1 != val2), IDLE_CHK_WARNING, + "PXP2: rd_blk_cnt is not equal to rd_blk_num_cfg"); + + IDLE_CHK_3(0x3, PXP2_REG_RD_SR_CNT, PXP2_REG_RD_SR_NUM_CFG, + (val1 < (val2-3)), IDLE_CHK_ERROR_NO_TRAFFIC, + "PXP2: There are more than two unused SRs"); + IDLE_CHK_3(0x3, PXP2_REG_RD_BLK_CNT, PXP2_REG_RD_BLK_NUM_CFG, + (val1 < (val2-2)), IDLE_CHK_ERROR_NO_TRAFFIC, + "PXP2: There are more than two unused blocks"); + + IDLE_CHK_1(0x3, PXP2_REG_RD_PORT_IS_IDLE_0, (val != 1), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PXP2: P0 All delivery ports are not idle"); + IDLE_CHK_1(0x3, PXP2_REG_RD_PORT_IS_IDLE_1, (val != 1), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PXP2: P1 All delivery ports are not idle"); + + IDLE_CHK_2(0x3, PXP2_REG_RD_ALMOST_FULL_0, 11, 4, (val != 0), + IDLE_CHK_ERROR, "PXP2: rd_almost_full_%d is not 0"); + + IDLE_CHK_1(0x3, PXP2_REG_RD_DISABLE_INPUTS, (val != 0), + IDLE_CHK_ERROR, "PXP2: PSWRD inputs are disabled"); + IDLE_CHK_1(0x3, PXP2_REG_HST_HEADER_FIFO_STATUS, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PXP2: HST header FIFO status is not 0"); + IDLE_CHK_1(0x3, PXP2_REG_HST_DATA_FIFO_STATUS, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PXP2: HST data FIFO status is not 0"); + IDLE_CHK_1(0x3, PXP2_REG_PGL_WRITE_BLOCKED, (val != 0), + IDLE_CHK_ERROR, "PXP2: pgl_write_blocked is not 0"); + IDLE_CHK_1(0x3, PXP2_REG_PGL_READ_BLOCKED, (val != 0), IDLE_CHK_ERROR, + "PXP2: pgl_read_blocked is not 0"); + IDLE_CHK_1(0x3, PXP2_REG_PGL_TXW_CDTS, (((val >> 17) & 1) != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PXP2: There is data which is ready"); + + IDLE_CHK_1(0x3, PXP_REG_HST_ARB_IS_IDLE, (val != 1), IDLE_CHK_WARNING, + "PXP: HST arbiter is not idle"); + IDLE_CHK_1(0x3, PXP_REG_HST_CLIENTS_WAITING_TO_ARB, (val != 0), + IDLE_CHK_WARNING, + "PXP: HST one of the clients is waiting for delivery"); + IDLE_CHK_1(0x2, PXP_REG_HST_DISCARD_INTERNAL_WRITES_STATUS, + (val != 0), IDLE_CHK_WARNING, + "PXP: HST Close the gates: Discarding internal writes"); + IDLE_CHK_1(0x2, PXP_REG_HST_DISCARD_DOORBELLS_STATUS, (val != 0), + IDLE_CHK_WARNING, + "PXP: HST Close the gates: Discarding doorbells"); + + IDLE_CHK_1(0x3, DMAE_REG_GO_C0, (val != 0), IDLE_CHK_ERROR_NO_TRAFFIC, + "DMAE: command 0 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C1, (val != 0), IDLE_CHK_ERROR_NO_TRAFFIC, + "DMAE: command 1 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C2, (val != 0), IDLE_CHK_ERROR_NO_TRAFFIC, + "DMAE: command 2 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C3, (val != 0), IDLE_CHK_ERROR_NO_TRAFFIC, + "DMAE: command 3 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C4, (val != 0), IDLE_CHK_ERROR_NO_TRAFFIC, + "DMAE: command 4 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C5, (val != 0), IDLE_CHK_ERROR_NO_TRAFFIC, + "DMAE: command 5 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C6, (val != 0), IDLE_CHK_ERROR_NO_TRAFFIC, + "DMAE: command 6 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C7, (val != 0), IDLE_CHK_ERROR_NO_TRAFFIC, + "DMAE: command 7 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C8, (val != 0), IDLE_CHK_ERROR_NO_TRAFFIC, + "DMAE: command 8 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C9, (val != 0), IDLE_CHK_ERROR_NO_TRAFFIC, + "DMAE: command 9 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C10, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "DMAE: command 10 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C11, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "DMAE: command 11 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C12, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "DMAE: command 12 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C13, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "DMAE: command 13 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C14, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "DMAE: command 14 go is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_GO_C15, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "DMAE: command 15 go is not 0"); + + IDLE_CHK_1(0x1, CFC_REG_NUM_LCIDS_INSIDE, (val > 2), IDLE_CHK_ERROR, + "CFC: num_lcid_inside is larger than 2"); + IDLE_CHK_1(0x2, CFC_REG_NUM_LCIDS_INSIDE, (val > 8), IDLE_CHK_ERROR, + "CFC: num_lcid_inside is larger than 8"); + IDLE_CHK_1(0x2, CFC_REG_NUM_LCIDS_INSIDE, (val > 2), IDLE_CHK_WARNING, + "CFC: num_lcid_inside is larger than 2"); + IDLE_CHK_1(0x3, CFC_REG_ERROR_VECTOR, (val != 0), IDLE_CHK_ERROR, + "CFC: error vector is not 0"); + IDLE_CHK_1(0x3, CFC_REG_NUM_LCIDS_ARRIVING, (val != 0), + IDLE_CHK_ERROR, "CFC: number of arriving LCIDs is not 0"); + IDLE_CHK_1(0x3, CFC_REG_NUM_LCIDS_ALLOC, (val != 0), IDLE_CHK_ERROR, + "CFC: number of alloc LCIDs is not 0"); + IDLE_CHK_1(0x3, CFC_REG_NUM_LCIDS_LEAVING, (val != 0), IDLE_CHK_ERROR, + "CFC: number of leaving LCIDs is not 0"); + + IDLE_CHK_4(0x3, CFC_REG_CID_CAM, CFC_REG_ACTIVITY_COUNTER, + CFC_REG_ACTIVITY_COUNTER_SIZE, 4, IDLE_CHK_ERROR); + + IDLE_CHK_2(0x3, QM_REG_QTASKCTR_0, 64, 4, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "QM: Q_%d, queue is not empty"); + + IDLE_CHK_3(0x3, QM_REG_VOQCREDIT_0, QM_REG_VOQINITCREDIT_0, + (val1 != val2), IDLE_CHK_ERROR_NO_TRAFFIC, + "QM: VOQ_0, VOQ credit is not equal to initial credit"); + IDLE_CHK_3(0x3, QM_REG_VOQCREDIT_1, QM_REG_VOQINITCREDIT_1, + (val1 != val2), IDLE_CHK_ERROR_NO_TRAFFIC, + "QM: VOQ_1, VOQ credit is not equal to initial credit"); + IDLE_CHK_3(0x3, QM_REG_VOQCREDIT_4, QM_REG_VOQINITCREDIT_4, + (val1 != val2), IDLE_CHK_ERROR, + "QM: VOQ_4, VOQ credit is not equal to initial credit"); + + IDLE_CHK_3(0x3, QM_REG_PORT0BYTECRD, QM_REG_BYTECRDINITVAL, + (val1 != val2), IDLE_CHK_ERROR_NO_TRAFFIC, + "QM: P0 Byte credit is not equal to initial credit"); + IDLE_CHK_3(0x3, QM_REG_PORT1BYTECRD, QM_REG_BYTECRDINITVAL, + (val1 != val2), IDLE_CHK_ERROR_NO_TRAFFIC, + "QM: P1 Byte credit is not equal to initial credit"); + + IDLE_CHK_1(0x3, CCM_REG_CAM_OCCUP, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "CCM: XX protection CAM is not empty"); + IDLE_CHK_1(0x3, TCM_REG_CAM_OCCUP, (val != 0), IDLE_CHK_ERROR, + "TCM: XX protection CAM is not empty"); + IDLE_CHK_1(0x3, UCM_REG_CAM_OCCUP, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "UCM: XX protection CAM is not empty"); + IDLE_CHK_1(0x3, XCM_REG_CAM_OCCUP, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "XCM: XX protection CAM is not empty"); + + IDLE_CHK_1(0x3, BRB1_REG_NUM_OF_FULL_BLOCKS, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "BRB1: BRB is not empty"); + + IDLE_CHK_1(0x3, CSEM_REG_SLEEP_THREADS_VALID, (val != 0), + IDLE_CHK_ERROR, "CSEM: There are sleeping threads"); + IDLE_CHK_1(0x3, TSEM_REG_SLEEP_THREADS_VALID, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "TSEM: There are sleeping threads"); + IDLE_CHK_1(0x3, USEM_REG_SLEEP_THREADS_VALID, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "USEM: There are sleeping threads"); + IDLE_CHK_1(0x3, XSEM_REG_SLEEP_THREADS_VALID, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "XSEM: There are sleeping threads"); + + IDLE_CHK_1(0x3, CSEM_REG_SLOW_EXT_STORE_EMPTY, (val != 1), + IDLE_CHK_ERROR, "CSEM: External store FIFO is not empty"); + IDLE_CHK_1(0x3, TSEM_REG_SLOW_EXT_STORE_EMPTY, (val != 1), + IDLE_CHK_ERROR_NO_TRAFFIC, + "TSEM: External store FIFO is not empty"); + IDLE_CHK_1(0x3, USEM_REG_SLOW_EXT_STORE_EMPTY, (val != 1), + IDLE_CHK_ERROR_NO_TRAFFIC, + "USEM: External store FIFO is not empty"); + IDLE_CHK_1(0x3, XSEM_REG_SLOW_EXT_STORE_EMPTY, (val != 1), + IDLE_CHK_ERROR_NO_TRAFFIC, + "XSEM: External store FIFO is not empty"); + + IDLE_CHK_1(0x3, CSDM_REG_SYNC_PARSER_EMPTY, (val != 1), + IDLE_CHK_ERROR, "CSDM: Parser serial FIFO is not empty"); + IDLE_CHK_1(0x3, TSDM_REG_SYNC_PARSER_EMPTY, (val != 1), + IDLE_CHK_ERROR_NO_TRAFFIC, + "TSDM: Parser serial FIFO is not empty"); + IDLE_CHK_1(0x3, USDM_REG_SYNC_PARSER_EMPTY, (val != 1), + IDLE_CHK_ERROR, "USDM: Parser serial FIFO is not empty"); + IDLE_CHK_1(0x3, XSDM_REG_SYNC_PARSER_EMPTY, (val != 1), + IDLE_CHK_ERROR, "XSDM: Parser serial FIFO is not empty"); + + IDLE_CHK_1(0x3, CSDM_REG_SYNC_SYNC_EMPTY, (val != 1), IDLE_CHK_ERROR, + "CSDM: Parser SYNC serial FIFO is not empty"); + IDLE_CHK_1(0x3, TSDM_REG_SYNC_SYNC_EMPTY, (val != 1), IDLE_CHK_ERROR, + "TSDM: Parser SYNC serial FIFO is not empty"); + IDLE_CHK_1(0x3, USDM_REG_SYNC_SYNC_EMPTY, (val != 1), IDLE_CHK_ERROR, + "USDM: Parser SYNC serial FIFO is not empty"); + IDLE_CHK_1(0x3, XSDM_REG_SYNC_SYNC_EMPTY, (val != 1), IDLE_CHK_ERROR, + "XSDM: Parser SYNC serial FIFO is not empty"); + + IDLE_CHK_1(0x3, CSDM_REG_RSP_PXP_CTRL_RDATA_EMPTY, (val != 1), + IDLE_CHK_ERROR, + "CSDM: pxp_ctrl rd_data fifo is not empty in sdm_dma_rsp" + " block"); + IDLE_CHK_1(0x3, TSDM_REG_RSP_PXP_CTRL_RDATA_EMPTY, (val != 1), + IDLE_CHK_ERROR, + "TSDM: pxp_ctrl rd_data fifo is not empty in sdm_dma_rsp" + " block"); + IDLE_CHK_1(0x3, USDM_REG_RSP_PXP_CTRL_RDATA_EMPTY, (val != 1), + IDLE_CHK_ERROR_NO_TRAFFIC, + "USDM: pxp_ctrl rd_data fifo is not empty in sdm_dma_rsp" + " block"); + IDLE_CHK_1(0x3, XSDM_REG_RSP_PXP_CTRL_RDATA_EMPTY, (val != 1), + IDLE_CHK_ERROR_NO_TRAFFIC, + "XSDM: pxp_ctrl rd_data fifo is not empty in sdm_dma_rsp" + " block"); + + IDLE_CHK_1(0x3, DORQ_REG_DQ_FILL_LVLF, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "DQ: DORQ queue is not empty"); + + IDLE_CHK_1(0x3, CFC_REG_CFC_INT_STS, (val != 0), IDLE_CHK_ERROR, + "CFC: interrupt status is not 0"); + IDLE_CHK_1(0x3, CDU_REG_CDU_INT_STS, (val != 0), IDLE_CHK_ERROR, + "CDU: interrupt status is not 0"); + IDLE_CHK_1(0x3, CCM_REG_CCM_INT_STS, (val != 0), IDLE_CHK_ERROR, + "CCM: interrupt status is not 0"); + IDLE_CHK_1(0x3, TCM_REG_TCM_INT_STS, (val != 0), IDLE_CHK_ERROR, + "TCM: interrupt status is not 0"); + IDLE_CHK_1(0x3, UCM_REG_UCM_INT_STS, (val != 0), IDLE_CHK_ERROR, + "UCM: interrupt status is not 0"); + IDLE_CHK_1(0x3, XCM_REG_XCM_INT_STS, (val != 0), IDLE_CHK_ERROR, + "XCM: interrupt status is not 0"); + IDLE_CHK_1(0x3, PBF_REG_PBF_INT_STS, (val != 0), IDLE_CHK_ERROR, + "PBF: interrupt status is not 0"); + IDLE_CHK_1(0x3, TM_REG_TM_INT_STS, (val != 0), IDLE_CHK_ERROR, + "TIMERS: interrupt status is not 0"); + IDLE_CHK_1(0x3, DORQ_REG_DORQ_INT_STS, (val != 0), IDLE_CHK_ERROR, + "DQ: interrupt status is not 0"); + IDLE_CHK_1(0x3, SRC_REG_SRC_INT_STS, (val != 0), IDLE_CHK_ERROR, + "SRCH: interrupt status is not 0"); + IDLE_CHK_1(0x3, PRS_REG_PRS_INT_STS, (val != 0), IDLE_CHK_ERROR, + "PRS: interrupt status is not 0"); + IDLE_CHK_1(0x3, BRB1_REG_BRB1_INT_STS, ((val & ~0xfc00) != 0), + IDLE_CHK_ERROR, "BRB1: interrupt status is not 0"); + IDLE_CHK_1(0x3, GRCBASE_XPB + PB_REG_PB_INT_STS, (val != 0), + IDLE_CHK_ERROR, "XPB: interrupt status is not 0"); + IDLE_CHK_1(0x3, GRCBASE_UPB + PB_REG_PB_INT_STS, (val != 0), + IDLE_CHK_ERROR, "UPB: interrupt status is not 0"); + IDLE_CHK_1(0x3, PXP2_REG_PXP2_INT_STS_0, (val != 0), IDLE_CHK_WARNING, + "PXP2: interrupt status 0 is not 0"); + IDLE_CHK_1(0x2, PXP2_REG_PXP2_INT_STS_1, (val != 0), IDLE_CHK_WARNING, + "PXP2: interrupt status 1 is not 0"); + IDLE_CHK_1(0x3, QM_REG_QM_INT_STS, (val != 0), IDLE_CHK_ERROR, + "QM: interrupt status is not 0"); + IDLE_CHK_1(0x3, PXP_REG_PXP_INT_STS_0, (val != 0), IDLE_CHK_ERROR, + "PXP: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, PXP_REG_PXP_INT_STS_1, (val != 0), IDLE_CHK_ERROR, + "PXP: interrupt status 1 is not 0"); + + IDLE_CHK_1(0x3, DORQ_REG_RSPA_CRD_CNT, (val != 2), + IDLE_CHK_ERROR_NO_TRAFFIC, + "DQ: Credit to XCM is not full"); + IDLE_CHK_1(0x3, DORQ_REG_RSPB_CRD_CNT, (val != 2), IDLE_CHK_ERROR, + "DQ: Credit to UCM is not full"); + + IDLE_CHK_1(0x3, QM_REG_VOQCRDERRREG, (val != 0), IDLE_CHK_ERROR, + "QM: Credit error register is not 0 (byte or credit" + " overflow/underflow)"); + IDLE_CHK_1(0x3, DORQ_REG_DQ_FULL_ST, (val != 0), IDLE_CHK_ERROR, + "DQ: DORQ queue is full"); + + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_1_FUNC_0, + ((val & ~0xcffc) != 0), IDLE_CHK_WARNING, + "AEU: P0 AFTER_INVERT_1 is not 0"); + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_2_FUNC_0, (val != 0), + IDLE_CHK_ERROR, "AEU: P0 AFTER_INVERT_2 is not 0"); + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_3_FUNC_0, + ((val & ~0xc21b0000) != 0), IDLE_CHK_ERROR, + "AEU: P0 AFTER_INVERT_3 is not 0"); + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_4_FUNC_0, + ((val & ~0x801fffff) != 0), IDLE_CHK_ERROR, + "AEU: P0 AFTER_INVERT_4 is not 0"); + + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_1_FUNC_1, + ((val & ~0xcffc) != 0), IDLE_CHK_WARNING, + "AEU: P1 AFTER_INVERT_1 is not 0"); + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_2_FUNC_1, (val != 0), + IDLE_CHK_ERROR, "AEU: P1 AFTER_INVERT_2 is not 0"); + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_3_FUNC_1, + ((val & ~0xc21b0000) != 0), IDLE_CHK_ERROR, + "AEU: P1 AFTER_INVERT_3 is not 0"); + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_4_FUNC_1, + ((val & ~0x801fffff) != 0), IDLE_CHK_ERROR, + "AEU: P1 AFTER_INVERT_4 is not 0"); + + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_1_MCP, + ((val & ~0xcffc) != 0), IDLE_CHK_WARNING, + "AEU: MCP AFTER_INVERT_1 is not 0"); + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_2_MCP, (val != 0), + IDLE_CHK_ERROR, "AEU: MCP AFTER_INVERT_2 is not 0"); + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_3_MCP, + ((val & ~0xc21b0000) != 0), IDLE_CHK_ERROR, + "AEU: MCP AFTER_INVERT_3 is not 0"); + IDLE_CHK_1(0x3, MISC_REG_AEU_AFTER_INVERT_4_MCP, + ((val & ~0x801fffff) != 0), IDLE_CHK_ERROR, + "AEU: MCP AFTER_INVERT_4 is not 0"); + + IDLE_CHK_5(0x3, PBF_REG_DISABLE_NEW_TASK_PROC_P0, PBF_REG_P0_CREDIT, + PBF_REG_P0_INIT_CRD, (val1 != val2), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PBF: P0 credit is not equal to init_crd"); + IDLE_CHK_5(0x3, PBF_REG_DISABLE_NEW_TASK_PROC_P1, PBF_REG_P1_CREDIT, + PBF_REG_P1_INIT_CRD, (val1 != val2), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PBF: P1 credit is not equal to init_crd"); + IDLE_CHK_3(0x3, PBF_REG_P4_CREDIT, PBF_REG_P4_INIT_CRD, + (val1 != val2), IDLE_CHK_ERROR, + "PBF: P4 credit is not equal to init_crd"); + + IDLE_CHK_1(0x3, PBF_REG_P0_TASK_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PBF: P0 task_cnt is not 0"); + IDLE_CHK_1(0x3, PBF_REG_P1_TASK_CNT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, "PBF: P1 task_cnt is not 0"); + IDLE_CHK_1(0x3, PBF_REG_P4_TASK_CNT, (val != 0), IDLE_CHK_ERROR, + "PBF: P4 task_cnt is not 0"); + + IDLE_CHK_1(0x3, XCM_REG_CFC_INIT_CRD, (val != 1), IDLE_CHK_ERROR, + "XCM: CFC_INIT_CRD is not 1"); + IDLE_CHK_1(0x3, UCM_REG_CFC_INIT_CRD, (val != 1), IDLE_CHK_ERROR, + "UCM: CFC_INIT_CRD is not 1"); + IDLE_CHK_1(0x3, TCM_REG_CFC_INIT_CRD, (val != 1), IDLE_CHK_ERROR, + "TCM: CFC_INIT_CRD is not 1"); + IDLE_CHK_1(0x3, CCM_REG_CFC_INIT_CRD, (val != 1), + IDLE_CHK_ERROR_NO_TRAFFIC, "CCM: CFC_INIT_CRD is not 1"); + + IDLE_CHK_1(0x3, XCM_REG_XQM_INIT_CRD, (val != 32), IDLE_CHK_ERROR, + "XCM: XQM_INIT_CRD is not 32"); + IDLE_CHK_1(0x3, UCM_REG_UQM_INIT_CRD, (val != 32), IDLE_CHK_ERROR, + "UCM: UQM_INIT_CRD is not 32"); + IDLE_CHK_1(0x3, TCM_REG_TQM_INIT_CRD, (val != 32), IDLE_CHK_ERROR, + "TCM: TQM_INIT_CRD is not 32"); + IDLE_CHK_1(0x3, CCM_REG_CQM_INIT_CRD, (val != 32), + IDLE_CHK_ERROR_NO_TRAFFIC, "CCM: CQM_INIT_CRD is not 32"); + + IDLE_CHK_1(0x3, XCM_REG_TM_INIT_CRD, (val != 4), IDLE_CHK_ERROR, + "XCM: TM_INIT_CRD is not 4"); + IDLE_CHK_1(0x3, UCM_REG_TM_INIT_CRD, (val != 4), IDLE_CHK_ERROR, + "UCM: TM_INIT_CRD is not 4"); + + IDLE_CHK_1(0x3, XCM_REG_FIC0_INIT_CRD, (val != 64), + IDLE_CHK_ERROR_NO_TRAFFIC, "XCM: FIC0_INIT_CRD is not 64"); + IDLE_CHK_1(0x3, UCM_REG_FIC0_INIT_CRD, (val != 64), + IDLE_CHK_ERROR_NO_TRAFFIC, "UCM: FIC0_INIT_CRD is not 64"); + IDLE_CHK_1(0x3, TCM_REG_FIC0_INIT_CRD, (val != 64), + IDLE_CHK_ERROR_NO_TRAFFIC, "TCM: FIC0_INIT_CRD is not 64"); + IDLE_CHK_1(0x3, CCM_REG_FIC0_INIT_CRD, (val != 64), + IDLE_CHK_ERROR_NO_TRAFFIC, "CCM: FIC0_INIT_CRD is not 64"); + + IDLE_CHK_1(0x3, XCM_REG_FIC1_INIT_CRD, (val != 64), IDLE_CHK_ERROR, + "XCM: FIC1_INIT_CRD is not 64"); + IDLE_CHK_1(0x3, UCM_REG_FIC1_INIT_CRD, (val != 64), IDLE_CHK_ERROR, + "UCM: FIC1_INIT_CRD is not 64"); + IDLE_CHK_1(0x3, TCM_REG_FIC1_INIT_CRD, (val != 64), IDLE_CHK_ERROR, + "TCM: FIC1_INIT_CRD is not 64"); + IDLE_CHK_1(0x3, CCM_REG_FIC1_INIT_CRD, (val != 64), IDLE_CHK_ERROR, + "CCM: FIC1_INIT_CRD is not 64"); + + IDLE_CHK_1(0x1, XCM_REG_XX_FREE, (val != 31), IDLE_CHK_ERROR, + "XCM: XX_FREE is not 31"); + IDLE_CHK_1(0x2, XCM_REG_XX_FREE, (val != 32), IDLE_CHK_ERROR, + "XCM: XX_FREE is not 32"); + IDLE_CHK_1(0x3, UCM_REG_XX_FREE, (val != 27), + IDLE_CHK_ERROR_NO_TRAFFIC, "UCM: XX_FREE is not 27"); + IDLE_CHK_1(0x3, TCM_REG_XX_FREE, (val != 32), IDLE_CHK_ERROR, + "TCM: XX_FREE is not 32"); + IDLE_CHK_1(0x3, CCM_REG_XX_FREE, (val != 24), IDLE_CHK_ERROR, + "CCM: XX_FREE is not 24"); + + IDLE_CHK_1(0x3, XSEM_REG_FAST_MEMORY + 0x18000, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "XSEM: FOC0 credit less than initial credit"); + IDLE_CHK_1(0x3, XSEM_REG_FAST_MEMORY + 0x18040, (val != 24), + IDLE_CHK_ERROR_NO_TRAFFIC, + "XSEM: FOC1 credit less than initial credit"); + IDLE_CHK_1(0x3, XSEM_REG_FAST_MEMORY + 0x18080, (val != 12), + IDLE_CHK_ERROR_NO_TRAFFIC, + "XSEM: FOC2 credit less than initial credit"); + IDLE_CHK_1(0x3, XSEM_REG_FAST_MEMORY + 0x180C0, (val != 102), + IDLE_CHK_ERROR_NO_TRAFFIC, + "XSEM: FOC3 credit less than initial credit"); + + IDLE_CHK_1(0x3, USEM_REG_FAST_MEMORY + 0x18000, (val != 26), + IDLE_CHK_ERROR_NO_TRAFFIC, + "USEM: FOC0 credit less than initial credit"); + IDLE_CHK_1(0x3, USEM_REG_FAST_MEMORY + 0x18040, (val != 78), + IDLE_CHK_ERROR_NO_TRAFFIC, + "USEM: FOC1 credit less than initial credit"); + IDLE_CHK_1(0x3, USEM_REG_FAST_MEMORY + 0x18080, (val != 16), + IDLE_CHK_ERROR_NO_TRAFFIC, + "USEM: FOC2 credit less than initial credit"); + IDLE_CHK_1(0x3, USEM_REG_FAST_MEMORY + 0x180C0, (val != 32), + IDLE_CHK_ERROR_NO_TRAFFIC, + "USEM: FOC3 credit less than initial credit"); + + IDLE_CHK_1(0x3, TSEM_REG_FAST_MEMORY + 0x18000, (val != 52), + IDLE_CHK_ERROR_NO_TRAFFIC, + "TSEM: FOC0 credit less than initial credit"); + IDLE_CHK_1(0x3, TSEM_REG_FAST_MEMORY + 0x18040, (val != 24), + IDLE_CHK_ERROR_NO_TRAFFIC, + "TSEM: FOC1 credit less than initial credit"); + IDLE_CHK_1(0x3, TSEM_REG_FAST_MEMORY + 0x18080, (val != 12), + IDLE_CHK_ERROR_NO_TRAFFIC, + "TSEM: FOC2 credit less than initial credit"); + IDLE_CHK_1(0x3, TSEM_REG_FAST_MEMORY + 0x180C0, (val != 32), + IDLE_CHK_ERROR_NO_TRAFFIC, + "TSEM: FOC3 credit less than initial credit"); + + IDLE_CHK_1(0x3, CSEM_REG_FAST_MEMORY + 0x18000, (val != 16), + IDLE_CHK_ERROR_NO_TRAFFIC, + "CSEM: FOC0 credit less than initial credit"); + IDLE_CHK_1(0x3, CSEM_REG_FAST_MEMORY + 0x18040, (val != 18), + IDLE_CHK_ERROR_NO_TRAFFIC, + "CSEM: FOC1 credit less than initial credit"); + IDLE_CHK_1(0x3, CSEM_REG_FAST_MEMORY + 0x18080, (val != 48), + IDLE_CHK_ERROR_NO_TRAFFIC, + "CSEM: FOC2 credit less than initial credit"); + IDLE_CHK_1(0x3, CSEM_REG_FAST_MEMORY + 0x180C0, (val != 14), + IDLE_CHK_ERROR_NO_TRAFFIC, + "CSEM: FOC3 credit less than initial credit"); + + IDLE_CHK_1(0x3, PRS_REG_TSDM_CURRENT_CREDIT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PRS: TSDM current credit is not 0"); + IDLE_CHK_1(0x3, PRS_REG_TCM_CURRENT_CREDIT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PRS: TCM current credit is not 0"); + IDLE_CHK_1(0x3, PRS_REG_CFC_LD_CURRENT_CREDIT, (val != 0), + IDLE_CHK_ERROR, "PRS: CFC_LD current credit is not 0"); + IDLE_CHK_1(0x3, PRS_REG_CFC_SEARCH_CURRENT_CREDIT, (val != 0), + IDLE_CHK_ERROR, "PRS: CFC_SEARCH current credit is not 0"); + IDLE_CHK_1(0x3, PRS_REG_SRC_CURRENT_CREDIT, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PRS: SRCH current credit is not 0"); + + IDLE_CHK_1(0x3, PRS_REG_PENDING_BRB_PRS_RQ, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PRS: PENDING_BRB_PRS_RQ is not 0"); + IDLE_CHK_2(0x3, PRS_REG_PENDING_BRB_CAC0_RQ, 5, 4, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PRS: PENDING_BRB_CAC%d_RQ is not 0"); + + IDLE_CHK_1(0x3, PRS_REG_SERIAL_NUM_STATUS_LSB, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PRS: SERIAL_NUM_STATUS_LSB is not 0"); + IDLE_CHK_1(0x3, PRS_REG_SERIAL_NUM_STATUS_MSB, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "PRS: SERIAL_NUM_STATUS_MSB is not 0"); + + IDLE_CHK_1(0x3, CDU_REG_ERROR_DATA, (val != 0), IDLE_CHK_ERROR, + "CDU: ERROR_DATA is not 0"); + + IDLE_CHK_1(0x3, CCM_REG_STORM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "CCM: STORM declared message length unequal to actual"); + IDLE_CHK_1(0x3, CCM_REG_CSDM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "CCM: CSDM declared message length unequal to actual"); + IDLE_CHK_1(0x3, CCM_REG_TSEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "CCM: TSEM declared message length unequal to actual"); + IDLE_CHK_1(0x3, CCM_REG_XSEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "CCM: XSEM declared message length unequal to actual"); + IDLE_CHK_1(0x3, CCM_REG_USEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "CCM: USEM declared message length unequal to actual"); + IDLE_CHK_1(0x3, CCM_REG_PBF_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "CCM: PBF declared message length unequal to actual"); + + IDLE_CHK_1(0x3, TCM_REG_STORM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "TCM: STORM declared message length unequal to actual"); + IDLE_CHK_1(0x3, TCM_REG_TSDM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "TCM: TSDM declared message length unequal to actual"); + IDLE_CHK_1(0x3, TCM_REG_PRS_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "TCM: PRS declared message length unequal to actual"); + IDLE_CHK_1(0x3, TCM_REG_PBF_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "TCM: PBF declared message length unequal to actual"); + IDLE_CHK_1(0x3, TCM_REG_USEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "TCM: USEM declared message length unequal to actual"); + IDLE_CHK_1(0x3, TCM_REG_CSEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "TCM: CSEM declared message length unequal to actual"); + + IDLE_CHK_1(0x3, UCM_REG_STORM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "UCM: STORM declared message length unequal to actual"); + IDLE_CHK_1(0x3, UCM_REG_USDM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "UCM: USDM declared message length unequal to actual"); + IDLE_CHK_1(0x3, UCM_REG_TSEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "UCM: TSEM declared message length unequal to actual"); + IDLE_CHK_1(0x3, UCM_REG_CSEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "UCM: CSEM declared message length unequal to actual"); + IDLE_CHK_1(0x3, UCM_REG_XSEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "UCM: XSEM declared message length unequal to actual"); + IDLE_CHK_1(0x3, UCM_REG_DORQ_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "UCM: DORQ declared message length unequal to actual"); + + IDLE_CHK_1(0x3, XCM_REG_STORM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "XCM: STORM declared message length unequal to actual"); + IDLE_CHK_1(0x3, XCM_REG_XSDM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "XCM: XSDM declared message length unequal to actual"); + IDLE_CHK_1(0x3, XCM_REG_TSEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "XCM: TSEM declared message length unequal to actual"); + IDLE_CHK_1(0x3, XCM_REG_CSEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "XCM: CSEM declared message length unequal to actual"); + IDLE_CHK_1(0x3, XCM_REG_USEM_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "XCM: USEM declared message length unequal to actual"); + IDLE_CHK_1(0x3, XCM_REG_DORQ_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "XCM: DORQ declared message length unequal to actual"); + IDLE_CHK_1(0x3, XCM_REG_PBF_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "XCM: PBF declared message length unequal to actual"); + IDLE_CHK_1(0x3, XCM_REG_NIG0_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "XCM: NIG0 declared message length unequal to actual"); + IDLE_CHK_1(0x3, XCM_REG_NIG1_LENGTH_MIS, (val != 0), IDLE_CHK_ERROR, + "XCM: NIG1 declared message length unequal to actual"); + + IDLE_CHK_1(0x3, QM_REG_XQM_WRC_FIFOLVL, (val != 0), IDLE_CHK_ERROR, + "QM: XQM wrc_fifolvl is not 0"); + IDLE_CHK_1(0x3, QM_REG_UQM_WRC_FIFOLVL, (val != 0), IDLE_CHK_ERROR, + "QM: UQM wrc_fifolvl is not 0"); + IDLE_CHK_1(0x3, QM_REG_TQM_WRC_FIFOLVL, (val != 0), IDLE_CHK_ERROR, + "QM: TQM wrc_fifolvl is not 0"); + IDLE_CHK_1(0x3, QM_REG_CQM_WRC_FIFOLVL, (val != 0), IDLE_CHK_ERROR, + "QM: CQM wrc_fifolvl is not 0"); + IDLE_CHK_1(0x3, QM_REG_QSTATUS_LOW, (val != 0), IDLE_CHK_ERROR, + "QM: QSTATUS_LOW is not 0"); + IDLE_CHK_1(0x3, QM_REG_QSTATUS_HIGH, (val != 0), IDLE_CHK_ERROR, + "QM: QSTATUS_HIGH is not 0"); + IDLE_CHK_1(0x3, QM_REG_PAUSESTATE0, (val != 0), IDLE_CHK_ERROR, + "QM: PAUSESTATE0 is not 0"); + IDLE_CHK_1(0x3, QM_REG_PAUSESTATE1, (val != 0), IDLE_CHK_ERROR, + "QM: PAUSESTATE1 is not 0"); + IDLE_CHK_1(0x3, QM_REG_OVFQNUM, (val != 0), IDLE_CHK_ERROR, + "QM: OVFQNUM is not 0"); + IDLE_CHK_1(0x3, QM_REG_OVFERROR, (val != 0), IDLE_CHK_ERROR, + "QM: OVFERROR is not 0"); + + IDLE_CHK_6(0x3, QM_REG_PTRTBL, 64, 8, IDLE_CHK_ERROR_NO_TRAFFIC); + + IDLE_CHK_1(0x3, BRB1_REG_BRB1_PRTY_STS, ((val & ~0x8) != 0), + IDLE_CHK_WARNING, "BRB1: parity status is not 0"); + IDLE_CHK_1(0x3, CDU_REG_CDU_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "CDU: parity status is not 0"); + IDLE_CHK_1(0x3, CFC_REG_CFC_PRTY_STS, ((val & ~0x2) != 0), + IDLE_CHK_WARNING, "CFC: parity status is not 0"); + IDLE_CHK_1(0x3, CSDM_REG_CSDM_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "CSDM: parity status is not 0"); + IDLE_CHK_1(0x3, DBG_REG_DBG_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "DBG: parity status is not 0"); + IDLE_CHK_1(0x3, DMAE_REG_DMAE_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "DMAE: parity status is not 0"); + IDLE_CHK_1(0x3, DORQ_REG_DORQ_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "DQ: parity status is not 0"); + IDLE_CHK_1(0x1, TCM_REG_TCM_PRTY_STS, ((val & ~0x3ffc0) != 0), + IDLE_CHK_WARNING, "TCM: parity status is not 0"); + IDLE_CHK_1(0x2, TCM_REG_TCM_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "TCM: parity status is not 0"); + IDLE_CHK_1(0x1, CCM_REG_CCM_PRTY_STS, ((val & ~0x3ffc0) != 0), + IDLE_CHK_WARNING, "CCM: parity status is not 0"); + IDLE_CHK_1(0x2, CCM_REG_CCM_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "CCM: parity status is not 0"); + IDLE_CHK_1(0x1, UCM_REG_UCM_PRTY_STS, ((val & ~0x3ffc0) != 0), + IDLE_CHK_WARNING, "UCM: parity status is not 0"); + IDLE_CHK_1(0x2, UCM_REG_UCM_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "UCM: parity status is not 0"); + IDLE_CHK_1(0x1, XCM_REG_XCM_PRTY_STS, ((val & ~0x3ffc0) != 0), + IDLE_CHK_WARNING, "XCM: parity status is not 0"); + IDLE_CHK_1(0x2, XCM_REG_XCM_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "XCM: parity status is not 0"); + IDLE_CHK_1(0x1, HC_REG_HC_PRTY_STS, ((val & ~0x1) != 0), + IDLE_CHK_WARNING, "HC: parity status is not 0"); + IDLE_CHK_1(0x1, MISC_REG_MISC_PRTY_STS, ((val & ~0x1) != 0), + IDLE_CHK_WARNING, "MISC: parity status is not 0"); + IDLE_CHK_1(0x3, PRS_REG_PRS_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "PRS: parity status is not 0"); + IDLE_CHK_1(0x3, PXP_REG_PXP_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "PXP: parity status is not 0"); + IDLE_CHK_1(0x3, QM_REG_QM_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "QM: parity status is not 0"); + IDLE_CHK_1(0x1, SRC_REG_SRC_PRTY_STS, ((val & ~0x4) != 0), + IDLE_CHK_WARNING, "SRCH: parity status is not 0"); + IDLE_CHK_1(0x3, TSDM_REG_TSDM_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "TSDM: parity status is not 0"); + IDLE_CHK_1(0x3, USDM_REG_USDM_PRTY_STS, ((val & ~0x20) != 0), + IDLE_CHK_WARNING, "USDM: parity status is not 0"); + IDLE_CHK_1(0x3, XSDM_REG_XSDM_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "XSDM: parity status is not 0"); + IDLE_CHK_1(0x3, GRCBASE_XPB + PB_REG_PB_PRTY_STS, (val != 0), + IDLE_CHK_WARNING, "XPB: parity status is not 0"); + IDLE_CHK_1(0x3, GRCBASE_UPB + PB_REG_PB_PRTY_STS, (val != 0), + IDLE_CHK_WARNING, "UPB: parity status is not 0"); + + IDLE_CHK_1(0x3, CSEM_REG_CSEM_PRTY_STS_0, (val != 0), + IDLE_CHK_WARNING, "CSEM: parity status 0 is not 0"); + IDLE_CHK_1(0x1, PXP2_REG_PXP2_PRTY_STS_0, ((val & ~0xfff40020) != 0), + IDLE_CHK_WARNING, "PXP2: parity status 0 is not 0"); + IDLE_CHK_1(0x2, PXP2_REG_PXP2_PRTY_STS_0, ((val & ~0x20) != 0), + IDLE_CHK_WARNING, "PXP2: parity status 0 is not 0"); + IDLE_CHK_1(0x3, TSEM_REG_TSEM_PRTY_STS_0, (val != 0), + IDLE_CHK_WARNING, "TSEM: parity status 0 is not 0"); + IDLE_CHK_1(0x3, USEM_REG_USEM_PRTY_STS_0, (val != 0), + IDLE_CHK_WARNING, "USEM: parity status 0 is not 0"); + IDLE_CHK_1(0x3, XSEM_REG_XSEM_PRTY_STS_0, (val != 0), + IDLE_CHK_WARNING, "XSEM: parity status 0 is not 0"); + + IDLE_CHK_1(0x3, CSEM_REG_CSEM_PRTY_STS_1, (val != 0), + IDLE_CHK_WARNING, "CSEM: parity status 1 is not 0"); + IDLE_CHK_1(0x1, PXP2_REG_PXP2_PRTY_STS_1, ((val & ~0x20) != 0), + IDLE_CHK_WARNING, "PXP2: parity status 1 is not 0"); + IDLE_CHK_1(0x2, PXP2_REG_PXP2_PRTY_STS_1, (val != 0), + IDLE_CHK_WARNING, "PXP2: parity status 1 is not 0"); + IDLE_CHK_1(0x3, TSEM_REG_TSEM_PRTY_STS_1, (val != 0), + IDLE_CHK_WARNING, "TSEM: parity status 1 is not 0"); + IDLE_CHK_1(0x3, USEM_REG_USEM_PRTY_STS_1, (val != 0), + IDLE_CHK_WARNING, "USEM: parity status 1 is not 0"); + IDLE_CHK_1(0x3, XSEM_REG_XSEM_PRTY_STS_1, (val != 0), + IDLE_CHK_WARNING, "XSEM: parity status 1 is not 0"); + + IDLE_CHK_2(0x2, QM_REG_QTASKCTR_EXT_A_0, 64, 4, (val != 0), + IDLE_CHK_ERROR_NO_TRAFFIC, + "QM: Q_EXT_A_%d, queue is not empty"); + IDLE_CHK_1(0x2, QM_REG_QSTATUS_LOW_EXT_A, (val != 0), IDLE_CHK_ERROR, + "QM: QSTATUS_LOW_EXT_A is not 0"); + IDLE_CHK_1(0x2, QM_REG_QSTATUS_HIGH_EXT_A, (val != 0), IDLE_CHK_ERROR, + "QM: QSTATUS_HIGH_EXT_A is not 0"); + IDLE_CHK_1(0x2, QM_REG_PAUSESTATE2, (val != 0), IDLE_CHK_ERROR, + "QM: PAUSESTATE2 is not 0"); + IDLE_CHK_1(0x2, QM_REG_PAUSESTATE3, (val != 0), IDLE_CHK_ERROR, + "QM: PAUSESTATE3 is not 0"); + IDLE_CHK_1(0x2, QM_REG_PAUSESTATE4, (val != 0), IDLE_CHK_ERROR, + "QM: PAUSESTATE4 is not 0"); + IDLE_CHK_1(0x2, QM_REG_PAUSESTATE5, (val != 0), IDLE_CHK_ERROR, + "QM: PAUSESTATE5 is not 0"); + IDLE_CHK_1(0x2, QM_REG_PAUSESTATE6, (val != 0), IDLE_CHK_ERROR, + "QM: PAUSESTATE6 is not 0"); + IDLE_CHK_1(0x2, QM_REG_PAUSESTATE7, (val != 0), IDLE_CHK_ERROR, + "QM: PAUSESTATE7 is not 0"); + IDLE_CHK_6(0x2, QM_REG_PTRTBL_EXT_A, 64, 8, + IDLE_CHK_ERROR_NO_TRAFFIC); + + IDLE_CHK_1(0x2, MISC_REG_AEU_SYS_KILL_OCCURRED, (val != 0), + IDLE_CHK_ERROR, "MISC: system kill occurd;"); + IDLE_CHK_1(0x2, MISC_REG_AEU_SYS_KILL_STATUS_0, (val != 0), + IDLE_CHK_ERROR, + "MISC: system kill occurd; status_0 register"); + IDLE_CHK_1(0x2, MISC_REG_AEU_SYS_KILL_STATUS_1, (val != 0), + IDLE_CHK_ERROR, + "MISC: system kill occurd; status_1 register"); + IDLE_CHK_1(0x2, MISC_REG_AEU_SYS_KILL_STATUS_2, (val != 0), + IDLE_CHK_ERROR, + "MISC: system kill occurd; status_2 register"); + IDLE_CHK_1(0x2, MISC_REG_AEU_SYS_KILL_STATUS_3, (val != 0), + IDLE_CHK_ERROR, + "MISC: system kill occurd; status_3 register"); + IDLE_CHK_1(0x2, MISC_REG_PCIE_HOT_RESET, (val != 0), IDLE_CHK_WARNING, + "MISC: pcie_rst_b was asserted without perst assertion"); + + IDLE_CHK_1(0x3, NIG_REG_NIG_INT_STS_0, ((val & ~0x300) != 0), + IDLE_CHK_ERROR, "NIG: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, NIG_REG_NIG_INT_STS_0, (val == 0x300), + IDLE_CHK_WARNING, + "NIG: Access to BMAC while not active. If tested on FPGA," + " ignore this warning."); + IDLE_CHK_1(0x3, NIG_REG_NIG_INT_STS_1, (val != 0), IDLE_CHK_ERROR, + "NIG: interrupt status 1 is not 0"); + IDLE_CHK_1(0x2, NIG_REG_NIG_PRTY_STS, ((val & ~0xffc00000) != 0), + IDLE_CHK_WARNING, "NIG: parity status is not 0"); + + IDLE_CHK_1(0x3, TSEM_REG_TSEM_INT_STS_0, ((val & ~0x10000000) != 0), + IDLE_CHK_ERROR, "TSEM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, TSEM_REG_TSEM_INT_STS_0, (val == 0x10000000), + IDLE_CHK_WARNING, "TSEM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, TSEM_REG_TSEM_INT_STS_1, (val != 0), IDLE_CHK_ERROR, + "TSEM: interrupt status 1 is not 0"); + + IDLE_CHK_1(0x3, CSEM_REG_CSEM_INT_STS_0, ((val & ~0x10000000) != 0), + IDLE_CHK_ERROR, "CSEM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, CSEM_REG_CSEM_INT_STS_0, (val == 0x10000000), + IDLE_CHK_WARNING, "CSEM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, CSEM_REG_CSEM_INT_STS_1, (val != 0), IDLE_CHK_ERROR, + "CSEM: interrupt status 1 is not 0"); + + IDLE_CHK_1(0x3, USEM_REG_USEM_INT_STS_0, ((val & ~0x10000000) != 0), + IDLE_CHK_ERROR, "USEM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, USEM_REG_USEM_INT_STS_0, (val == 0x10000000), + IDLE_CHK_WARNING, "USEM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, USEM_REG_USEM_INT_STS_1, (val != 0), IDLE_CHK_ERROR, + "USEM: interrupt status 1 is not 0"); + + IDLE_CHK_1(0x3, XSEM_REG_XSEM_INT_STS_0, ((val & ~0x10000000) != 0), + IDLE_CHK_ERROR, "XSEM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, XSEM_REG_XSEM_INT_STS_0, (val == 0x10000000), + IDLE_CHK_WARNING, "XSEM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, XSEM_REG_XSEM_INT_STS_1, (val != 0), IDLE_CHK_ERROR, + "XSEM: interrupt status 1 is not 0"); + + IDLE_CHK_1(0x3, TSDM_REG_TSDM_INT_STS_0, (val != 0), IDLE_CHK_ERROR, + "TSDM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, TSDM_REG_TSDM_INT_STS_1, (val != 0), IDLE_CHK_ERROR, + "TSDM: interrupt status 1 is not 0"); + + IDLE_CHK_1(0x3, CSDM_REG_CSDM_INT_STS_0, (val != 0), IDLE_CHK_ERROR, + "CSDM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, CSDM_REG_CSDM_INT_STS_1, (val != 0), IDLE_CHK_ERROR, + "CSDM: interrupt status 1 is not 0"); + + IDLE_CHK_1(0x3, USDM_REG_USDM_INT_STS_0, (val != 0), IDLE_CHK_ERROR, + "USDM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, USDM_REG_USDM_INT_STS_1, (val != 0), IDLE_CHK_ERROR, + "USDM: interrupt status 1 is not 0"); + + IDLE_CHK_1(0x3, XSDM_REG_XSDM_INT_STS_0, (val != 0), IDLE_CHK_ERROR, + "XSDM: interrupt status 0 is not 0"); + IDLE_CHK_1(0x3, XSDM_REG_XSDM_INT_STS_1, (val != 0), IDLE_CHK_ERROR, + "XSDM: interrupt status 1 is not 0"); + + IDLE_CHK_1(0x2, HC_REG_HC_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "HC: parity status is not 0"); + IDLE_CHK_1(0x2, MISC_REG_MISC_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "MISC: parity status is not 0"); + IDLE_CHK_1(0x2, SRC_REG_SRC_PRTY_STS, (val != 0), IDLE_CHK_WARNING, + "SRCH: parity status is not 0"); + + if (idle_chk_errors == 0) { + BNX2X_DBG_ERR("completed successfully (with %d warnings)\n", + idle_chk_warnings); + } else { + BNX2X_DBG_ERR("failed (with %d errors, %d warnings)\n", + idle_chk_errors, idle_chk_warnings); + } + return idle_chk_errors; +} +