From ea15405e8556befc9d85d4ce5ea639214455fcdd Mon Sep 17 00:00:00 2001 From: Arif Ali Date: Sun, 6 Nov 2011 23:25:14 +0000 Subject: [PATCH] 1.1: Initial commit --- Makefile | 28 - README | 93 - bin/oem_filter.exe | Bin 25230 -> 0 bytes bin/oemcmd.bat | 1 - bin/yang | Bin 15228 -> 0 bytes build-stuff/CustomRUU.exe | Bin 943616 -> 0 bytes build-stuff/readme.txt | 19 - changelog.txt | 15 - compile | 35 - compile-all | 41 - lk/AndroidBoot.mk | 66 - lk/app/aboot/aboot.c | 725 - lk/app/aboot/bootimg.h | 97 - lk/app/aboot/fastboot.c | 377 - lk/app/aboot/fastboot.h | 50 - lk/app/aboot/recovery.c | 280 - lk/app/aboot/recovery.h | 77 - lk/app/aboot/rules.mk | 7 - lk/app/app.c | 66 - lk/app/rules.mk | 5 - lk/app/shell/rules.mk | 7 - lk/app/shell/shell.c | 41 - lk/arch/arm/arch.c | 72 - lk/arch/arm/asm.S | 103 - lk/arch/arm/cache-ops.S | 366 - lk/arch/arm/cache.c | 22 - lk/arch/arm/compile.mk | 33 - lk/arch/arm/crt0.S | 219 - lk/arch/arm/dcc.S | 41 - lk/arch/arm/exceptions.S | 132 - lk/arch/arm/faults.c | 91 - lk/arch/arm/include/arch/arch_thread.h | 31 - lk/arch/arm/include/arch/arm.h | 94 - lk/arch/arm/include/arch/arm/cores.h | 122 - lk/arch/arm/include/arch/arm/dcc.h | 33 - lk/arch/arm/include/arch/arm/mmu.h | 44 - lk/arch/arm/include/arch/arm/ops.h | 48 - lk/arch/arm/include/arch/defines.h | 43 - lk/arch/arm/mmu.c | 100 - lk/arch/arm/ops.S | 213 - lk/arch/arm/rules.mk | 142 - lk/arch/arm/system-onesegment.ld | 82 - lk/arch/arm/system-twosegment.ld | 85 - lk/arch/arm/thread.c | 88 - lk/dev/dev.c | 28 - lk/dev/fbcon/fbcon.c | 245 - lk/dev/fbcon/font5x12.h | 126 - lk/dev/fbcon/rules.mk | 5 - lk/dev/keys/gpio_keypad.c | 618 - lk/dev/keys/keys.c | 67 - lk/dev/keys/rules.mk | 10 - .../net/smc91c96/include/dev/net/smc91c96.h | 29 - lk/dev/net/smc91c96/rules.mk | 8 - lk/dev/net/smc91c96/smc91c96.c | 70 - lk/dev/net/smc91c96/smc91c96_p.h | 80 - lk/dev/pmic/twl4030/include/dev/twl4030.h | 36 - lk/dev/pmic/twl4030/rules.mk | 7 - lk/dev/pmic/twl4030/twl4030.c | 169 - lk/dev/pmic/twl4030/twl4030_hw.h | 369 - lk/dev/rules.mk | 5 - lk/dev/usb/rules.mk | 5 - lk/dev/usb/usb.c | 307 - lk/include/app.h | 49 - lk/include/arch.h | 37 - lk/include/arch/ops.h | 71 - lk/include/arch/thread.h | 34 - lk/include/asm.h | 30 - lk/include/assert.h | 40 - lk/include/bits.h | 59 - lk/include/compiler.h | 109 - lk/include/ctype.h | 43 - lk/include/debug.h | 95 - lk/include/dev/ethernet.h | 38 - lk/include/dev/fbcon.h | 54 - lk/include/dev/flash.h | 67 - lk/include/dev/gpio.h | 51 - lk/include/dev/gpio_keypad.h | 248 - lk/include/dev/i2c.h | 39 - lk/include/dev/keys.h | 91 - lk/include/dev/uart.h | 38 - lk/include/dev/udc.h | 120 - lk/include/dev/usb.h | 65 - lk/include/dev/usbc.h | 98 - lk/include/endian.h | 95 - lk/include/err.h | 41 - lk/include/hw/mii.h | 75 - lk/include/hw/usb.h | 106 - lk/include/inttypes.h | 29 - lk/include/kernel/dpc.h | 38 - lk/include/kernel/event.h | 63 - lk/include/kernel/mutex.h | 49 - lk/include/kernel/thread.h | 227 - lk/include/kernel/timer.h | 59 - lk/include/lib/console.h | 62 - lk/include/lib/heap.h | 35 - lk/include/lib/ptable.h | 70 - lk/include/limits.h | 121 - lk/include/list.h | 269 - lk/include/malloc.h | 43 - lk/include/new.h | 35 - lk/include/platform.h | 38 - lk/include/platform/debug.h | 51 - lk/include/platform/interrupts.h | 35 - lk/include/platform/timer.h | 31 - lk/include/printf.h | 44 - lk/include/rand.h | 29 - lk/include/reg.h | 44 - lk/include/stdint.h | 60 - lk/include/stdio.h | 12 - lk/include/stdlib.h | 49 - lk/include/string.h | 80 - lk/include/sys/types.h | 68 - lk/include/target.h | 38 - lk/include/version.h | 7 - lk/kernel/debug.c | 126 - lk/kernel/dpc.c | 88 - lk/kernel/event.c | 138 - lk/kernel/main.c | 158 - lk/kernel/mutex.c | 169 - lk/kernel/rules.mk | 16 - lk/kernel/thread.c | 666 - lk/kernel/timer.c | 142 - lk/lib/console/console.c | 340 - lk/lib/console/rules.mk | 6 - lk/lib/debug/debug.c | 360 - lk/lib/debug/rules.mk | 4 - lk/lib/heap/heap.c | 380 - lk/lib/heap/rules.mk | 4 - lk/lib/libc/atexit.c | 29 - lk/lib/libc/atoi.c | 105 - lk/lib/libc/ctype.c | 86 - lk/lib/libc/eabi.c | 51 - lk/lib/libc/malloc.c | 55 - lk/lib/libc/new.cpp | 51 - lk/lib/libc/printf.c | 341 - lk/lib/libc/pure_virtual.cpp | 29 - lk/lib/libc/rand.c | 30 - lk/lib/libc/rules.mk | 20 - lk/lib/libc/string/arch/arm/memcpy.S | 177 - lk/lib/libc/string/arch/arm/memset.S | 113 - lk/lib/libc/string/arch/arm/rules.mk | 11 - lk/lib/libc/string/bcopy.c | 35 - lk/lib/libc/string/bzero.c | 35 - lk/lib/libc/string/memchr.c | 45 - lk/lib/libc/string/memcmp.c | 40 - lk/lib/libc/string/memcpy.c | 69 - lk/lib/libc/string/memmove.c | 93 - lk/lib/libc/string/memscan.c | 41 - lk/lib/libc/string/memset.c | 61 - lk/lib/libc/string/rules.mk | 42 - lk/lib/libc/string/strcat.c | 42 - lk/lib/libc/string/strchr.c | 37 - lk/lib/libc/string/strcmp.c | 41 - lk/lib/libc/string/strcoll.c | 34 - lk/lib/libc/string/strcpy.c | 39 - lk/lib/libc/string/strdup.c | 43 - lk/lib/libc/string/strerror.c | 36 - lk/lib/libc/string/strlcat.c | 50 - lk/lib/libc/string/strlcpy.c | 47 - lk/lib/libc/string/strlen.c | 41 - lk/lib/libc/string/strncat.c | 48 - lk/lib/libc/string/strncmp.c | 42 - lk/lib/libc/string/strncpy.c | 40 - lk/lib/libc/string/strnicmp.c | 55 - lk/lib/libc/string/strnlen.c | 38 - lk/lib/libc/string/strpbrk.c | 44 - lk/lib/libc/string/strrchr.c | 45 - lk/lib/libc/string/strspn.c | 48 - lk/lib/libc/string/strstr.c | 46 - lk/lib/libc/string/strtok.c | 51 - lk/lib/libc/string/strxfrm.c | 42 - lk/lib/ptable/ptable.c | 99 - lk/lib/ptable/rules.mk | 4 - lk/make/build.mk | 30 - lk/make/macros.mk | 5 - lk/make/module.mk | 21 - lk/makefile | 188 - lk/platform/debug.c | 24 - lk/platform/init.c | 54 - lk/platform/msm_shared/debug.c | 81 - lk/platform/msm_shared/dmov.h | 173 - lk/platform/msm_shared/hsusb.c | 935 -- lk/platform/msm_shared/hsusb.h | 189 - lk/platform/msm_shared/i2c_qup.c | 840 - lk/platform/msm_shared/include/i2c_qup.h | 254 - lk/platform/msm_shared/include/jtag.h | 40 - lk/platform/msm_shared/include/mddi.h | 84 - lk/platform/msm_shared/include/mipi_dsi.h | 449 - lk/platform/msm_shared/include/mmc.h | 623 - lk/platform/msm_shared/include/nand.h | 203 - lk/platform/msm_shared/include/splash.h | 12930 ---------------- lk/platform/msm_shared/include/uart_dm.h | 273 - lk/platform/msm_shared/jtag.c | 115 - lk/platform/msm_shared/jtag_hook.S | 33 - lk/platform/msm_shared/lcdc.c | 161 - lk/platform/msm_shared/mddi.c | 344 - lk/platform/msm_shared/mddi_hw.h | 249 - lk/platform/msm_shared/mipi_dsi.c | 652 - lk/platform/msm_shared/mmc.c | 2796 ---- lk/platform/msm_shared/nand.c | 3475 ----- lk/platform/msm_shared/proc_comm.c | 368 - lk/platform/msm_shared/rules.mk | 31 - lk/platform/msm_shared/smem.c | 91 - lk/platform/msm_shared/smem.h | 201 - lk/platform/msm_shared/smem_ptable.c | 156 - lk/platform/msm_shared/timer.c | 204 - lk/platform/msm_shared/uart.c | 207 - lk/platform/msm_shared/uart_dm.c | 526 - lk/platform/qsd8k/acpuclock.c | 95 - lk/platform/qsd8k/arch_init.S | 648 - lk/platform/qsd8k/gpio.c | 212 - lk/platform/qsd8k/gpio_hw.h | 118 - lk/platform/qsd8k/include/platform/iomap.h | 48 - lk/platform/qsd8k/include/platform/irqs.h | 131 - lk/platform/qsd8k/interrupts.c | 159 - lk/platform/qsd8k/panel.c | 657 - lk/platform/qsd8k/platform.c | 84 - lk/platform/qsd8k/rules.mk | 25 - lk/platform/rules.mk | 7 - lk/project/htcleo.mk | 11 - lk/target/htcleo/atags.c | 21 - lk/target/htcleo/htcleo_boot.c | 33 - lk/target/htcleo/htcleo_boot_s.S | 86 - lk/target/htcleo/include/target/display.h | 47 - lk/target/htcleo/init.c | 246 - lk/target/htcleo/keypad.c | 35 - lk/target/htcleo/nand.c | 1090 -- lk/target/htcleo/oem_cmd.c | 148 - lk/target/htcleo/platform.c | 39 - lk/target/htcleo/rules.mk | 65 - lk/target/htcleo/tools/makefile | 1 - lk/target/init.c | 72 - lk/target/rules.mk | 6 - nbgen.c | 181 - oem_filter.c | 47 - patches/cwm_off_charge_v2.patch | 124 - patches/kernel_clk_power_collapse.patch | 32 - ...l_off_mode_charging_panel_init_crash.patch | 39 - patches/kernel_reboot_reason.patch | 33 - 239 files changed, 46610 deletions(-) delete mode 100644 Makefile delete mode 100644 README delete mode 100644 bin/oem_filter.exe delete mode 100644 bin/oemcmd.bat delete mode 100755 bin/yang delete mode 100755 build-stuff/CustomRUU.exe delete mode 100644 build-stuff/readme.txt delete mode 100644 changelog.txt delete mode 100755 compile delete mode 100755 compile-all delete mode 100644 lk/AndroidBoot.mk delete mode 100644 lk/app/aboot/aboot.c delete mode 100644 lk/app/aboot/bootimg.h delete mode 100644 lk/app/aboot/fastboot.c delete mode 100644 lk/app/aboot/fastboot.h delete mode 100644 lk/app/aboot/recovery.c delete mode 100644 lk/app/aboot/recovery.h delete mode 100644 lk/app/aboot/rules.mk delete mode 100644 lk/app/app.c delete mode 100644 lk/app/rules.mk delete mode 100644 lk/app/shell/rules.mk delete mode 100644 lk/app/shell/shell.c delete mode 100644 lk/arch/arm/arch.c delete mode 100644 lk/arch/arm/asm.S delete mode 100644 lk/arch/arm/cache-ops.S delete mode 100644 lk/arch/arm/cache.c delete mode 100644 lk/arch/arm/compile.mk delete mode 100644 lk/arch/arm/crt0.S delete mode 100644 lk/arch/arm/dcc.S delete mode 100644 lk/arch/arm/exceptions.S delete mode 100644 lk/arch/arm/faults.c delete mode 100644 lk/arch/arm/include/arch/arch_thread.h delete mode 100644 lk/arch/arm/include/arch/arm.h delete mode 100644 lk/arch/arm/include/arch/arm/cores.h delete mode 100644 lk/arch/arm/include/arch/arm/dcc.h delete mode 100644 lk/arch/arm/include/arch/arm/mmu.h delete mode 100644 lk/arch/arm/include/arch/arm/ops.h delete mode 100644 lk/arch/arm/include/arch/defines.h delete mode 100644 lk/arch/arm/mmu.c delete mode 100644 lk/arch/arm/ops.S delete mode 100644 lk/arch/arm/rules.mk delete mode 100644 lk/arch/arm/system-onesegment.ld delete mode 100644 lk/arch/arm/system-twosegment.ld delete mode 100644 lk/arch/arm/thread.c delete mode 100644 lk/dev/dev.c delete mode 100644 lk/dev/fbcon/fbcon.c delete mode 100644 lk/dev/fbcon/font5x12.h delete mode 100644 lk/dev/fbcon/rules.mk delete mode 100644 lk/dev/keys/gpio_keypad.c delete mode 100644 lk/dev/keys/keys.c delete mode 100644 lk/dev/keys/rules.mk delete mode 100644 lk/dev/net/smc91c96/include/dev/net/smc91c96.h delete mode 100644 lk/dev/net/smc91c96/rules.mk delete mode 100644 lk/dev/net/smc91c96/smc91c96.c delete mode 100644 lk/dev/net/smc91c96/smc91c96_p.h delete mode 100644 lk/dev/pmic/twl4030/include/dev/twl4030.h delete mode 100644 lk/dev/pmic/twl4030/rules.mk delete mode 100644 lk/dev/pmic/twl4030/twl4030.c delete mode 100644 lk/dev/pmic/twl4030/twl4030_hw.h delete mode 100644 lk/dev/rules.mk delete mode 100644 lk/dev/usb/rules.mk delete mode 100644 lk/dev/usb/usb.c delete mode 100644 lk/include/app.h delete mode 100644 lk/include/arch.h delete mode 100644 lk/include/arch/ops.h delete mode 100644 lk/include/arch/thread.h delete mode 100644 lk/include/asm.h delete mode 100644 lk/include/assert.h delete mode 100644 lk/include/bits.h delete mode 100644 lk/include/compiler.h delete mode 100644 lk/include/ctype.h delete mode 100644 lk/include/debug.h delete mode 100644 lk/include/dev/ethernet.h delete mode 100644 lk/include/dev/fbcon.h delete mode 100644 lk/include/dev/flash.h delete mode 100644 lk/include/dev/gpio.h delete mode 100644 lk/include/dev/gpio_keypad.h delete mode 100644 lk/include/dev/i2c.h delete mode 100644 lk/include/dev/keys.h delete mode 100644 lk/include/dev/uart.h delete mode 100644 lk/include/dev/udc.h delete mode 100644 lk/include/dev/usb.h delete mode 100644 lk/include/dev/usbc.h delete mode 100644 lk/include/endian.h delete mode 100644 lk/include/err.h delete mode 100644 lk/include/hw/mii.h delete mode 100644 lk/include/hw/usb.h delete mode 100644 lk/include/inttypes.h delete mode 100644 lk/include/kernel/dpc.h delete mode 100644 lk/include/kernel/event.h delete mode 100644 lk/include/kernel/mutex.h delete mode 100644 lk/include/kernel/thread.h delete mode 100644 lk/include/kernel/timer.h delete mode 100644 lk/include/lib/console.h delete mode 100644 lk/include/lib/heap.h delete mode 100644 lk/include/lib/ptable.h delete mode 100644 lk/include/limits.h delete mode 100644 lk/include/list.h delete mode 100644 lk/include/malloc.h delete mode 100644 lk/include/new.h delete mode 100644 lk/include/platform.h delete mode 100644 lk/include/platform/debug.h delete mode 100644 lk/include/platform/interrupts.h delete mode 100644 lk/include/platform/timer.h delete mode 100644 lk/include/printf.h delete mode 100644 lk/include/rand.h delete mode 100644 lk/include/reg.h delete mode 100644 lk/include/stdint.h delete mode 100644 lk/include/stdio.h delete mode 100644 lk/include/stdlib.h delete mode 100644 lk/include/string.h delete mode 100644 lk/include/sys/types.h delete mode 100644 lk/include/target.h delete mode 100644 lk/include/version.h delete mode 100644 lk/kernel/debug.c delete mode 100644 lk/kernel/dpc.c delete mode 100644 lk/kernel/event.c delete mode 100644 lk/kernel/main.c delete mode 100644 lk/kernel/mutex.c delete mode 100644 lk/kernel/rules.mk delete mode 100644 lk/kernel/thread.c delete mode 100644 lk/kernel/timer.c delete mode 100644 lk/lib/console/console.c delete mode 100644 lk/lib/console/rules.mk delete mode 100644 lk/lib/debug/debug.c delete mode 100644 lk/lib/debug/rules.mk delete mode 100644 lk/lib/heap/heap.c delete mode 100644 lk/lib/heap/rules.mk delete mode 100644 lk/lib/libc/atexit.c delete mode 100644 lk/lib/libc/atoi.c delete mode 100644 lk/lib/libc/ctype.c delete mode 100644 lk/lib/libc/eabi.c delete mode 100644 lk/lib/libc/malloc.c delete mode 100644 lk/lib/libc/new.cpp delete mode 100644 lk/lib/libc/printf.c delete mode 100644 lk/lib/libc/pure_virtual.cpp delete mode 100644 lk/lib/libc/rand.c delete mode 100644 lk/lib/libc/rules.mk delete mode 100644 lk/lib/libc/string/arch/arm/memcpy.S delete mode 100644 lk/lib/libc/string/arch/arm/memset.S delete mode 100644 lk/lib/libc/string/arch/arm/rules.mk delete mode 100644 lk/lib/libc/string/bcopy.c delete mode 100644 lk/lib/libc/string/bzero.c delete mode 100644 lk/lib/libc/string/memchr.c delete mode 100644 lk/lib/libc/string/memcmp.c delete mode 100644 lk/lib/libc/string/memcpy.c delete mode 100644 lk/lib/libc/string/memmove.c delete mode 100644 lk/lib/libc/string/memscan.c delete mode 100644 lk/lib/libc/string/memset.c delete mode 100644 lk/lib/libc/string/rules.mk delete mode 100644 lk/lib/libc/string/strcat.c delete mode 100644 lk/lib/libc/string/strchr.c delete mode 100644 lk/lib/libc/string/strcmp.c delete mode 100644 lk/lib/libc/string/strcoll.c delete mode 100644 lk/lib/libc/string/strcpy.c delete mode 100644 lk/lib/libc/string/strdup.c delete mode 100644 lk/lib/libc/string/strerror.c delete mode 100644 lk/lib/libc/string/strlcat.c delete mode 100644 lk/lib/libc/string/strlcpy.c delete mode 100644 lk/lib/libc/string/strlen.c delete mode 100644 lk/lib/libc/string/strncat.c delete mode 100644 lk/lib/libc/string/strncmp.c delete mode 100644 lk/lib/libc/string/strncpy.c delete mode 100644 lk/lib/libc/string/strnicmp.c delete mode 100644 lk/lib/libc/string/strnlen.c delete mode 100644 lk/lib/libc/string/strpbrk.c delete mode 100644 lk/lib/libc/string/strrchr.c delete mode 100644 lk/lib/libc/string/strspn.c delete mode 100644 lk/lib/libc/string/strstr.c delete mode 100644 lk/lib/libc/string/strtok.c delete mode 100644 lk/lib/libc/string/strxfrm.c delete mode 100644 lk/lib/ptable/ptable.c delete mode 100644 lk/lib/ptable/rules.mk delete mode 100644 lk/make/build.mk delete mode 100644 lk/make/macros.mk delete mode 100644 lk/make/module.mk delete mode 100644 lk/makefile delete mode 100644 lk/platform/debug.c delete mode 100644 lk/platform/init.c delete mode 100644 lk/platform/msm_shared/debug.c delete mode 100644 lk/platform/msm_shared/dmov.h delete mode 100644 lk/platform/msm_shared/hsusb.c delete mode 100644 lk/platform/msm_shared/hsusb.h delete mode 100644 lk/platform/msm_shared/i2c_qup.c delete mode 100644 lk/platform/msm_shared/include/i2c_qup.h delete mode 100644 lk/platform/msm_shared/include/jtag.h delete mode 100644 lk/platform/msm_shared/include/mddi.h delete mode 100644 lk/platform/msm_shared/include/mipi_dsi.h delete mode 100644 lk/platform/msm_shared/include/mmc.h delete mode 100644 lk/platform/msm_shared/include/nand.h delete mode 100644 lk/platform/msm_shared/include/splash.h delete mode 100644 lk/platform/msm_shared/include/uart_dm.h delete mode 100644 lk/platform/msm_shared/jtag.c delete mode 100644 lk/platform/msm_shared/jtag_hook.S delete mode 100644 lk/platform/msm_shared/lcdc.c delete mode 100644 lk/platform/msm_shared/mddi.c delete mode 100644 lk/platform/msm_shared/mddi_hw.h delete mode 100644 lk/platform/msm_shared/mipi_dsi.c delete mode 100644 lk/platform/msm_shared/mmc.c delete mode 100644 lk/platform/msm_shared/nand.c delete mode 100644 lk/platform/msm_shared/proc_comm.c delete mode 100644 lk/platform/msm_shared/rules.mk delete mode 100644 lk/platform/msm_shared/smem.c delete mode 100644 lk/platform/msm_shared/smem.h delete mode 100644 lk/platform/msm_shared/smem_ptable.c delete mode 100644 lk/platform/msm_shared/timer.c delete mode 100644 lk/platform/msm_shared/uart.c delete mode 100644 lk/platform/msm_shared/uart_dm.c delete mode 100644 lk/platform/qsd8k/acpuclock.c delete mode 100644 lk/platform/qsd8k/arch_init.S delete mode 100644 lk/platform/qsd8k/gpio.c delete mode 100644 lk/platform/qsd8k/gpio_hw.h delete mode 100644 lk/platform/qsd8k/include/platform/iomap.h delete mode 100644 lk/platform/qsd8k/include/platform/irqs.h delete mode 100644 lk/platform/qsd8k/interrupts.c delete mode 100644 lk/platform/qsd8k/panel.c delete mode 100644 lk/platform/qsd8k/platform.c delete mode 100644 lk/platform/qsd8k/rules.mk delete mode 100644 lk/platform/rules.mk delete mode 100644 lk/project/htcleo.mk delete mode 100644 lk/target/htcleo/atags.c delete mode 100644 lk/target/htcleo/htcleo_boot.c delete mode 100644 lk/target/htcleo/htcleo_boot_s.S delete mode 100644 lk/target/htcleo/include/target/display.h delete mode 100644 lk/target/htcleo/init.c delete mode 100644 lk/target/htcleo/keypad.c delete mode 100644 lk/target/htcleo/nand.c delete mode 100644 lk/target/htcleo/oem_cmd.c delete mode 100644 lk/target/htcleo/platform.c delete mode 100644 lk/target/htcleo/rules.mk delete mode 100644 lk/target/htcleo/tools/makefile delete mode 100644 lk/target/init.c delete mode 100644 lk/target/rules.mk delete mode 100644 nbgen.c delete mode 100644 oem_filter.c delete mode 100644 patches/cwm_off_charge_v2.patch delete mode 100644 patches/kernel_clk_power_collapse.patch delete mode 100644 patches/kernel_off_mode_charging_panel_init_crash.patch delete mode 100644 patches/kernel_reboot_reason.patch diff --git a/Makefile b/Makefile deleted file mode 100644 index 103b852..0000000 --- a/Makefile +++ /dev/null @@ -1,28 +0,0 @@ - -export VERSION=1.4.0.1 -export TOOLCHAIN_PREFIX=arm-none-eabi- - -default: bin/RUU_signed.nbh - -clean: - $(MAKE) -C lk htcleo clean - rm -rf lk/build-htcleo - rm -rf bin/nbgen - rm -rf bin/lk.bin - rm -rf bin/os.nb.payload - rm -rf bin/os.nb - rm -rf bin/RUU_signed.nbh - -bin/nbgen: - gcc -std=c99 nbgen.c -o bin/nbgen - -bin/RUU_signed.nbh: bin/nbgen - $(MAKE) -C lk htcleo DEBUG=1 - cp lk/build-htcleo/lk.bin bin/ - cd bin ; ./nbgen os.nb - cd bin ; ./yang -F RUU_signed.nbh -f os.nb -t 0x400 -s 64 -d PB8110000 -c 11111111 -v CLK$(VERSION) -l WWE - -partition: - rm -rf lk/build-htcleo/target/htcleo/init.* - rm -rf bin/RUU_signed.nbh - $(MAKE) diff --git a/README b/README deleted file mode 100644 index 04f6937..0000000 --- a/README +++ /dev/null @@ -1,93 +0,0 @@ -================= -cLK by cedesmith -================= -URL: http://forum.xda-developers.com/showthread.php?t=901305 - -1. Disclaimer -2. FAQ -3. How To - 3.1. Flash cLK - 3.2. Compiling cLK -4. Known Issues -5. Credits - -================ -1. DISCLAIMER -================ - -This comes with no warranties, if you use it you do it on your own risk. -Please read carefully the flowing information and make sure you know what you are doing. -I don't have time or patience for questions and support. If you use it you are on your own (well and this community). - -================ -2. FAQ -================ - -Q&A -Q: What it is ? -A: A bootloader for android like magldr. - -Q: Is it better then magldr ? -A1: NO, it is missing tetris . -A2: NO, magldr has some nice features like partitioning and rmnet. - -Q: Can i use last 24MB of nand with this? -A: NO, SPL will erase them. When i have some time i may try to fix it. - -Q: Does battery charge with this ? -A: YES, from version 1.3 - -Q: Does it boot WP7? -A: NO. I am only interested in android but in can load and execute any program. - -Q: Should i install it ? -A: If you had to ask probably not. If has no functional benefits over magldr. - -================= -3. How To -================= - -3.1 Flash cLK --------------- - -- make sure you have hspl -- enter SPL by holding VOL DOWN key while powering/resting the phone. -- flash with customruu like you would a windows rom and/or magldr - -Flash a ROM -- download android sdk (or rather, just adb, drivers and fastboot) -- fastboot flash recovery recovery.img -- after recovery you can reboot and use CWM or you can flash with fastboot - (fastboot flash boot boot.img, fastboot flash system system.img, fastboot flash userdata userdata.img) - -Start recovery / fastboot / text console -- holding down any key ( except power ) will show text console -- home key will enter recovery ( if flashed ) -- back key will enter fastboot mode - -The following URL has a fantastic howto by stirkac -http://forum.xda-developers.com/showpost.php?p=12327648&postcount=844 - -3.2 Compiling cLK ------------------ - -Linux: http://forum.xda-developers.com/showpost.php?p=12461912&postcount=934 - -Windows: http://forum.xda-developers.com/showpost.php?p=12461551&postcount=932 - -================= -4. Known issues -================= - -RMNET does not work. - -================= -5. Credits -================= - -- cedesmith for make LK available for the HD2 -- codeaurrora for making LK and for making it open -- Martin Johnson for his tinboot witch was a great inspiration -- Martijn Stolk for his kernel segfault solving code and and cotulla for pointing it and his contribution to android on HD2 -- all how worked on making linux kernel possible on hd2 - diff --git a/bin/oem_filter.exe b/bin/oem_filter.exe deleted file mode 100644 index 1dcc3f75470cc568da4e228d8b9357e3e022f848..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25230 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 diff --git a/bin/oemcmd.bat b/bin/oemcmd.bat deleted file mode 100644 index a66115e..0000000 --- a/bin/oemcmd.bat +++ /dev/null @@ -1 +0,0 @@ -@fastboot oem %* 2>&1 | oem_filter \ No newline at end of file diff --git a/bin/yang b/bin/yang deleted file mode 100755 index 73834feb048e8e14e4b49648553d255219dcdb14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15228 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

gVqkesebgjB}vt?O-3vN7b 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

4=y?6@G@Jj`3WT%)H`E(&dh=( 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�cUef)Iq@>m$W69ljB5G4g+z=|6brD4}cxrn2)K zl)4WI<`9HZe(w*h7Mi>Z2@`jjXWnHtktgXCoaqPtTn?H|dPjW~bS6yUiv&})fw7@% zHs(ZfjwXh$knn(eNJ=1Ra)^3gI8@PdBKTxRZNlQe9c2t(7=vy#B945QNV5IQr(!>8 zx@n;h2oH;_f9ucrqIa)lp~4MR^&S-zO|Q>tJ)rx-(KkDxbq~p-li}zSQ5C#@tlCZx zB<%%YwVK}<>l)V}hq}9=9DX79tAT7DcB`^>t21TXH_;0uBt7dQJ;bZzjN$h`}R}9 z_7QWqu_;TX?+fhKxo$7pD_>_#?T+6WbnapIK+LODRz4tklQ0}MBnfvWwpklXeY zse7l;yPHtJtx`#vhL1ICikAN)C<;ar? z-OHlX(P0)FAIFv*g3=Rl4tRBk-P6GWp1KLMrrxK{hpEVyP^a6o3$(>wv)%dA-^dR) z&&|)HWtPX)26rl~OM*|KKPkC@Nylh^KT1(zz8z+kW)skmUzi$j$%Ubd0RY)~cD6EO z3>TJ>g%yc-%uxMteyc+)=)~y*(0IxS>e!>^aqn{1$9~zn+?q|DU>GrDl-urSxPe$U z7~=FhN}iz9GPfuSJ!47_$JJpF-dc>m!X&+q{=8}{odufqyjUz7o^D<;&e*!#ds8utNU;A`Fg%@(fY$tB2Ok zue!$USJXEL$DK~>)ke_>b8$@QH9ZCkbN^n~ryWO4u!D%2|C9Zn?TV9Ej7ju-_ETt% zcN+BI2t@oVbA+jX+*rikyI1kxg-_^xC%|2BVE5JF-2*=nfs>08f!G*qUA8CJ=j~8L ziD~PDeZAvXE=GBR1Tn94x2~Bgq@KjUBq4(*2U_9R#O)Y4N&b>@I^a!(yUE(OoUu+m z6-w@l6+#V?tMJe%Z~FuYhT?l-F@E>SrW#aC#clX1o-l5!#Ef$G{D;S}_6*bsPYNHA zyMIKSa1FX-`W;N;daHdRgpne9$8iJc<_TRWpc?z*F!JK?DDW~~@Tb)}EMSTu(&!Jg z@Llm6wSYned$XQx`ODo2PPF!6p=sz2Yzv&uJXkvl`Xed*uv^#WEhzl|vEnO^D$BgO zwW=u|S)$2#enKb@%gXnvCLot*TlF86108h0el29I1i~9--9M*IFPQmv#dbOB^oi~9 zov;NI?Q2BBpcez1VraPBoQ-Od7_LXuu1OWGad#u})Px+-oqCjJ>9*#i?MCQyH?{jf zXa};bCi_7-Bv|XZtHn1B-UP`(#r~tNN$>E6;rk=7yHpC7ui+zRwTZ^OBoPW{M;6p@ zt}4KitE1}Hi(q<^oVui1OMpY`vvS755M(6pdKNOD1&`qNoc*8^;i=GQVd{x>S{U|f z*j!4d^6uQud$%EEfV=~D+MP`^v!j?B4gLXO)WH<&Sz{MfcBa*dxPZMEHr|D52E-kb%;R`>aiRr<@NFa=h_U*O=LW82`*tg1e}qL2<2fW*VjNdhU=F zR5|=6)BfK6IZky)oT>fGe9~sK4F5;avL}u?1O?doWEjoA)ePvWz45{_5;TDvIbL&K zI3*5CLL?hr_-wxn)Qbo1M185`)!PMMJqOCO{24t<#=DN{&q}l!%=1exj{eQs_;8nw zL5G@(IOD$RQ4+^@8ekhH@o&?g-l zL3em*l1viBFT_t|1;BS5GW%@V&7Y7=?$MCZYE4aIaM_3??4v}U@kw+}0JP3luH~GI zo$tc9-_z1TmL?Y+5`i_ly4Ix3+(tvYE%!m;#CTJDp0K}bQfAZYpc4tYF_(2Xxc&y~ zo%xHbkV>ybAlA~NtvTkSg2>XEJ);B!H|T|%^AA>nA7Kp~-4_qhd}ymj8cyu<#W1zb z8YPp-U=eOd9x{A$Kk?x@-i%}48 zQ?em#-VUINN8Mi{^+*vIf1o3xnCFVkdvJLR9n$eIM^)5$ALoLJ>2vEV^@;#Iw98b} z?zClojz@DUlO<>dl+du>OV#J-{O3xcArg-~iSstVE3F(8cnWCMG?|pHbe*L(2-+3#=yvf5NW@TR7LzS= zWg+&;Sp=<5gvgsmv^skmi39UsG!Hu-I-cOKevhRyr=w13)#ax7@8gQlt4RZll;SIl z%BC@TUK@gXF=mS4y1Ak+oy|)n^sm&Qpa-ks&j0$&q2rMyf%$5|-uG;7+4c4LAMx3}Gl^a@JTL6!P# z9Es2w8@WDC;gbBWI9HTT*aAj)=()%Z5_D_`lQ576Gq|-asZgd?ee}VKl54q#>vdIra3Yol=UeNAYWAw z?m;JqUw?$sc(?NBPCKj#k!ccqzTnC84BoB8nRA=?V8XuXtIU`0+5igF!Vf3HiXm&_ zEWZ%`a+{#k8GBP#`L|%>jhaK`@!ua7(^M-yMCKP(N(=gl&tR?<_&r>-y*qCLy*;2% zJ>)ZTBi<%9mg^rhIxf9ftJIJE3`s%M(YE-4&uIk=S~&Vxa~QS%FIo-t3DGxF?bety zw)16f{I8M`UAtS1Ibyx`=kzR$MGnvbo2ZIgqL6CHKJ1bge{34rH~!s4!Smx@>Q~i( z79GdONGMJFa^#hKX>znRY&V0~I?vyb_5AkY-IDLP_5XX)1M2 z#KP<7AVFsxiYz79Zrly<(6k2e$KE7|9L11yIl}RXygLu})RtY?mw+D1t?PN;^jyt2 z`JB41o{X+9)+oI|K!NmLWB0>5i>ibztZxX}=^&y9c<}vZvBe#R;Zhvp#CYps(1wI* zU=@-KKRSJWp_l^Nv=nu=zs$E${KyF<;?+L;$U5_!$j1e%ul* zyQCRdj*c)Q*h>qNJIFx*saf`&yq~{5;x5PAwRte9il}C|gzZ%gf~^SaQN=pry2B;o zAy@*#*0c0G=>VI;cm+EjW^%@Cy;3P;>JHA6Qj)##35BiVto(Tbx>j#`Wy5G11SiUN zA`vWt3>UeEkN1DOiwWY}O_LJf`N}zlfVD^N&=o@iqD53i>pll+(t|qbF)Cd988#(! z7)hvTUwgBBnp(NdM(pL%Vcgu{+oIQSOF{D8jb--Vw@>Pol*2BcRDz- zw+i`E%wdX8KngKuUGVwuZ;)gCEdDwS05d>VQ~*^jZVvy3PV3F#+-a!bNgTnMHc4FTM{o^-tc3 zv2-xoM^==-*E1ptVa@1wqyOhu@hx9? zpTYr!Mma5kCZ#)XG!xML1RXQ-%$r`<#g~eg5!Ro+xQm;Aw+yshy%ckPE2rK`P`CjB zkAPCG{&8JMrBAybL&Yb#U~bPJA5W6aWDDiyR+Xy2gA2g(ApGc*qh>NpMMquXnbtmz zLvSyOaf{Zl0Pb;MD$z9Ub(3q)Yb-DiYrr#?Q0p!GKo(}qX&P`8Y4JotMox=ap z#|I~meLpEqXz_?zLHlB?pi$(<#DkMXQShs?msfgg5cZd!e@|XO3$5}n;jj?_G@ob} z_VNAhZXSOT-g>x@JTtjxl)HgVtKCcfJpNPrfG|#adm{!ZtCWb#*5eN50|bto@%}e~ z;9Lk^jRq4_87yJMPa8ce$M0aN3$#*cyxP)|& z(H56E++_j$83e!n42nCVwZ%_Dwam;Em=F@_vZ@T;fs8NEsR4mR$XzJo`xm8>=S46s zAL}+)?kmH#iL0W0ovkg2?q312d@l=UvtRn(ANrQ#j_KCi92VdMMB&pZwoVk5H5X$X zDhV+ZAPOoAJU5+@u1HCRD_zK)Pv#oS3u4c&tR?8wa5_>XT!7J^@fmuB$U0Ayh=8MG zXsXP;jzQm#?QyLLvE4+k;BR@@5J3cTWK%d`9GX&?zw9;=OP@40vMBswSC~x5iS`rl z>#RLQhN=PJnX6~T?QIW#b2yc%jWL?&E~|vO{({_Cd!a}E`Z2*!JRS3xa+h+C-Tocz&nzF^BR_&WQGcu^DTV8qC zk=Oww#K}({otqtMwb_rp1P}QoJP1OC=JapesaOt7? zVz+z)ZYaL&c%{xnUK<2U01R@y&4C<(cig_PwEP%DItl&8kYy8hp#slmTZf(8d( zsw*&mFX{#KSk{$=$o{(O^(?Pkx$eVtdNOMMr>1qxv%Tx8I(M`~14OQxVW z2IT_j25t}(``5{Z4DX{jlAtK7JMzUs9+OJ^;tzMic-7x86YC)~a<0lj{T)ES`<_Iq zVXr#2FRIW*BMdUtfziw|TUS1O#ABJs)29$uZT62J=bKU1x z<*aub?&j%pARQ7Br&3DM*p69BnXddRyF;k3j73D)xap2Der;Gjh zj5*n19B_j^9m};E)e24(koRa>%Z8QIQDcNxOLBz?UhV;cy$^}b^{a)%#K>7rqQQa8 zLm@DCfX8!U8u2eLTZc_q`j1arZ%kzk$;<-|ESX-a@2cTC^hFY-NBWAJljz)&NV6?j zOLzK{fDH5?^;>)iKjg;Olgo`dsLud_kW$%eRJ%Yc+v7D?2=7l}aPK8cFdFyQ!YTag zEKi@5BWr*bGweS?c15K!7?{E>?hL8j8ncIAaObkA9{k9xYFjH4BWk>Vp869|^ zX~c6jVXivuj%+^PeHGNi4_j>ZBg0=(B>3Dy0bBsU7`0CRg3%>`~Ei3PjcKyv4tG*7vtmANat<>ADqk=38ztSib;-e_%!o?(DkQj8uK^h6)F86j^zJ+6%32BS`*guhz!6nq>415Nx1{kl+*RuzH4(yn+e43u;>gxh6Nic}1 zb61Zaw!6{wMJ7;}C8?g^K7R}u&^hOohD3d%Qw)LHD%|3HQ8w3p7Szvek6N6N&fJX(!gF{Ce2wW{ltQEm#nvG*9a*Wxr6(!%7XwmqU%vj#^3zCu^_RgCrT?Ax zw_AMhbr3-Ex`Cw1{fvg!T=K)Ap23)1a#_E&GtJEI|L7Buin0LJySb{RH&adC_Z;6D zc#h&15|^C2e`y)YJh_Sj8w&5*yqaI`IJNDRt{87V8=-;yI@M5{oWFJnTYEP5DtL)j z$u)sN?jP%_Gw)txDiHKXSpYH)KJ&b{T(;7yslq&T7h(1Epo1Ew0pgh!Nt76)?OHW; zFwJM#*K$)lC0G53Qyks(W%R2oQxZx5Z1v`yfH@-o^BTM=n}_$F@MH48>a$I6*?W1y z7cTjdgcp;Ww6{8fKSdVIne)6)XfxziUIiv}Ek>GEl&;1>mu317MoyiUN*BVP@~wQ0 zzgxIkiVNY75*3_>j}x~9AW6o{6Jt?^5rjjz2O4QTS2qMc}655=U2 zA_h0aDG_zyN$-9W=fmzod$j#6QO>&9!2K3>pDWdnR@feUIN?yf^O`UG0N0>_xsm{+ zvHBcaHdKd1C>0;z6<{oWIxQSy6w2<>e+N3<9+#DN54kipghljP6Z;Os(uk_2TTjuvb==Rm%R#h+u4Qt zPtvfOG5?Wtl>t>XO_*+w?kAxpba!`3Hv;E7_xK*d<*hHTF?URN?KxYAw@P{h^@@orb_V<0= za#J>IQm6j~D!Hp*{Hf+Cl3eji$MbPn9|@YK$}C*M+bik2OcZ|GJ8`m!jtu$&Lr1>3 ziQ-SZr2V{V=T!Ftk$-pJxKDujS6EAe{Xg{jPjQjyy)1GPLZ!ic@F3{3(!8%# z8(R2x(*@ZNimfa6CWIfe{JJt~PGW3-0K_jyK6dCGuWiAQ)rBn=|C9&qE#Q#+YB4bn z*PKTmFGX-znDVMJ+FtYR^Fg~ea(h7f`i(YzTgA*`b~ys8Q0rD1XG&cN6R0ixZF0mP zQi^+Cnign>a<$EE?tyi#Mp9yg98nEg(T;qNCXNB+tmH>JP&syS+F-ddJ3YDgasA;C z?fa8}QG)mk1Y=FpWzd`py@83LS00A}#njIvZ<9C6;8{gyA?l)^C3flFAt;N43`fV! z@!1wwXHe5%q$DDZAp3Qq=!lZj2#y{2^7Y=8cEq~4LNH0?Z<(?$3bB}@$~f!C!Xaiv zDGOrxq{17ZN;WrPGqlnmU<>`X8|ZDrdD}41Ij5gQ+4#i|;(RoKMllA(7$drN?=v~A z=}d&j-aU*dOBtgdQ5hyEtaHWQ*4ZUoka@~yjXO0zX)r2IN21z|&=_)ts)>VDeIwut$hA zr9S+RoPSP(Z#<0jf*6;+pat$QU)CFy9=={@gva{~%5!dS;_wxr%+wI>(9svi5IR(0 zg4DB`1G^GCz)|i#a;PgJ)!<00n6$!XjuHAbifNXU^Iqg&^3XB6$hNVgf2L`c-dc8eS5{WS{+ZbH!5WTT1F?5km2Yz zye}6F*k$(=>^Rf9!;ewz#{dMrTKvzQM8g60oSKB}V>A2u2Y1(JrX<~Efa9;r( z{v1u&(Zz(8Mrnh*44MC0I%L4wudj?l!OY7)QDYK#etx802N!7~LaB^9ibe0R4cR*A z6aSoW&E$0uifkR>2Xhh7HaYiMOp3(>aegVo>y39ze~NLOR@8!e766a>hHob7(bk_q zQLOG)9ZX9FiYBUBmKJ15pu9eATlx42{&j7J&Ng+JHUIPLfn0v6+5tOgk4~ou zCA^bJD4uzWy3qq4HGj)n9IU!9`+IjpqM8bV_0`}nv@mN*x8RFdb5P~O^vnkyAz{me zTmlqWQ`nuEzPEz*(C0148_0hPibg)#N3M|S%U@cZIY7p%Uz16jB%dzoReO%uJo7&J zGOKgn@it^|s)b1h3fh3a1W>_Y89*d&jy~Q#sDgk9C(L@40~dcBqtiB1!O7LATmBCV zmnQm!=(%q#CMOQo9eBk#n8DUhCY-8JMF$XRmc~}HwIjTH zb=A8WNTRrgY{>y*P=){*XmELT)=GbH*^vKj&}H$kMt)m9Hz@D=4@BhDyj@@5N$hGw z@KIIlm8iV0bvnfGU*d#@(i;T-nQgvbVEp#*85|4~!`qKb3L3e0$pYD180qwll#k8bJ@R$IjHAdB2! z@=%4^mz8bw9<}m-r#R2*u}!i#kaeoA5_W_;~}^QNk1p6AGN>}v{s z2mqW<&qnpMuCLAh9eZ}-|5^T2%>2xL^j3?9RWS(WzJ}f?6+}dT+=mX7B!7oq_c1S+qg4eg7AGn1 z;HGg5tna-HFL1;7FK_a^uxAfe@TZMdB^so%ApKc2dP3}E3JUMS7#B{fr>Fx@=L53p z?rEXXo@aJ$omr2pGv6}&uG3ZuQyq-`1Rt`%egUC#d~Jtm`g)z~aqoM&CQVums~vIS zpRndw9}Xl=i=g|<5N2F?07uZO&Fm`)Wooy--LOl<8f&jCKNl4DTOJi*@8nQAjsQxKHfr(6S5uc5`pnW~) z3-qN7pFncy3I3sfvHtXk41moA+O!w94uIJieA%-%o!=?rM6 zH!kTd*SP_oIdGrvmu}v;Yv`Kvw;!5rC_)S@3%v5<90}nBl*>ir6)14TS%NTfXtf-Rz z2lDwVH@a&%tTpJ-BZl{V7K{6aLqt~GDfvhkC~=;*Vrmb@Zf_?7Bq_AvB~*oJ1gh;x zUOkG2-`*Y>NI!wkDlO&=ZG6$Lk=sJm#+BgX=}!8W4_>I4z}_YF;6*g!nk=otDYh=8 zb_&>u-w&_8!>tHS$LXzPM0*345CcGG-aqmPrdWfWkfFauccXwT> z+mQ{TvEBzF-7&Jmv-oIW_qc%oFL+Z^8$Agt1A6l!<-ZvJO;qkA`jtO{Lwf6DC3-6q zRHf=r8rlLu%Z1^+;?^Qq%%52%YIP#at8KMekw`NXc?tyBYct>@5L%rLog&MCL3)QF zxnCAPl|Na$7*ZMU0-Qitg)_+GGmq_>2d5s*uS8%b%f~ZF3dC$O_)Z5AuNnWUj zaFc*<%0pDqBWLt?h-crsYkK=Y`Sq~UTT{;394>z-8uANe{g)Fq4AHIla^3>uFLRFN zjvRsbK8M^viEO1N$BUDD)E#Lq@!lvXL6F9l&D;1o8O{Oo#vI;9|K%o7psc9ee8^jvX9gb9L?laWN7K9R357&k3j;-%gu+ zaeh5S9=cE4O=ra4A5ojDJsLS|`Ch1B7Gwh45;b6-ng5NzhVX7U;3IIb5J(oVI*-)0 z&Jajzm+EmqX{hk4hF_sa&rt?r#s-}3r1FC%fHXZsCLD_z2t?gb)XvbAP;mslI=| zUffakJ{f(Drk`;ZJ4~@wG!a;(A}H1b;qUcU_F~MK?Wff=mL?C?708xT5)K+dn1sD9 zD8(VgoX^hzi(?%rM|d%|!<`1&#Z0k=bvG(wMEpCBMrPo^oBdwgR~T!z+?{;bUDh!p zlyC68qNLCd)aZBRY$BE(A^)W6VJck))|qmJ|19~ZdbC|BgGO9iWa9YnL-MNh*2;~1 zAUEwHiYn9mS55n8?WIot#W^3g5JW>`&}(MF-hIzM{)qVb60zOyNcD%-(|OkfctBf4 zALdZ0Qvlg~6uz!g8?R*}Pk$I34UrREhjL{f7w3Y@BU8_Ln4hlp`5BD9bHIcOyMHH0 z(AZKV%72Bb>*CgX9bz>wsawYV>lbg-3FQo=uOl2u&|^#}X~t0Q@@p}vyli41c)I}L zOe%t7L|QS2(4F^TTp;2pDU5D$Lenv;qYLB*AQC7;Or4jhykLIy_}ykmXxn4#U#52k zFQ)>U;_f-T5umcNma#0sG1pe{ru?I~Ox!OH|Fw=68r529OtE}WRv(=goV@SFk! zZ?P@b!ZsUBRS@Jf7LR89ZQ@^7IFP=tm=5p$8|U{QPaRTJ3{b{%utS>0^H+jGMDQZK z@lmhov;#n1EW}kDPDR>R4cTZMheAR{=rY#ldox%95C8D~b2iq$e3;9mn?G?Y7GHat zi|R$-n{;^ED07LlFSX3KedYk-hCty|2d-=8MWkScjS8%$sPl8K>buV<7d z!vE~+mNR=2dm)v-w6{D7JootaqYhhg&Cm589SQlGQ2R32q2%Eb2wz0^tkA3Ves=2J zZgJ-0w)xvBFS7nZK0lyCzA0MaqjQiX(%lRr@%Id2Xd^%%ZIo+u% zd&vWC#M~-%Fl{Zb*i`jFIrziuyb~>b|JM+XQYlp7_mqVzBQ_IZ0M6~H5R}7C4hIKC zQ0fV;=0(@kby^5Hb<7LQ9kTx;@rMh^_mQGUAPw1#l59>@=GhBXLOl-xht!`O0soVj zC>0`9)-Ci%#68%t^<6rATo#(+4&oz>`mEea&b32A7qwWhZG_WtD>I~#Of3_olPJtx zAAwSSU;pE9;r)NP>4jL|2wml^T1b}3YsBOjF~&bvXB=C)SJa8zL7P@j|BXq0^T z16!XjO~Jjp|HRDt_h`;k2|BG=_ozz8+}0Q9EGW^ve93<{etcC2dqHxS&$mV#<$^1t zoiP3v{aF0wuhK6R5G0OiSvK1XxXj^MJ2`5_x2c{XEK!y{F0b1D ztdHN$NL>x3$^YjA?F(C?~Xmz4Y%$-!9ovf6@evgU1T^J|{c#)}yjp5V^=$OuaFG$wEss6L-? zCn%F#kQv&TSF_08bhsu=*rRCa^3RA8x~=X~T1<3=aK0H?SSj4irykl*8H#$Q8);?{ zHi7?Yp9br1J`y6v`d!AkuY@EV?hd7JIapn5iYm_~LqKICZhDySfD=+;`U(v~6+Ykh zMP#O&TWdi=+bZc}7^ozG@RSpiQzFD4%_cnCdVe>Nz9zPKyqj|_3obJA{t_aA15_k6 zyCEg1Hbn9XllRlf>T0(2pg0!2YAn zPBg_$(y$pDEOP3Sok8j3D3s>wl$kKCB(P*aKL5_%PNbt=iey79qEAA{qNdq2zXM*vMr79hUx~}3E5AGALl64i8-oX2F3JH8 zPx?{ktfusvz;~52*j@bVFJOXBHgkm_XD`rXZhqqib|cSIh;KTOLJ$Cdo^t(>XBsB+UO^j6JEtI64xP zZ*WiNEG`yVWL@>Or7g3M;9lc*U(UYvGZ(By&ph*Gz z3d!yR5eiV49amegD^7m%$!reodkGg}BePX|(~~fG`4=E!-v}?RVxI$wGM&P|MiE2* zDn<{ti2ndB{sa*z`Ewi2>Ew2J?}!dAp>o^y*nYLuvWFFvr`c&74TSZiiAsFty`Ss_ z|LTNWkWBXUR@_r*t|tB=Ea-Fq?zKDuucn)DRlX9)@tT{wqYw{p7-1n8IX=?k0WS(m z;w+jt5~7=})2jd6SX8Ls%M02J@VF&~V+Ufsl@H<8MTh>`Q7$zJ#*_Ak`oJ+kKwyXk z5#LyB1CY9X|5v)dnE&JU!brLV>mRr?&In*DSE&M9tH@svpFlj#=mo;?a{RQYFV7rE zE~o&cxm3nA!VHo9{W;Ilu3HDAROK|}(_k*H2oK(z|GEi-s89g=4Gtsb6-Mj<_|c5z zujFPmmCh}i3`WFEp1ZBFLn`id9E z#r-`$wYJB*;*WFeYS=)(z^x(8Mi1SMwBAy95mEWrFLS#|LzW@PElsT*oKE0;4e0Tn z=ki;b7uFe1O)F7&XC}69WIEcKWd`+{OG14sfCx1`-tQIMT0sN@s2Ym|n_DVSZ z_%gUR%-liBP^TC8p7hnZ7x9Dv0X%3bDyjD!gPTL^0U%olF z+x>y}4}XnwZJO#xsybyF`+|Nd-`RuyC!pLYCzgOsBGazLRP@07q4=<8%C+u{{tp^5 zbl7dJ*m~pvzDCPcj??fH$i7t17B}driv&0PZk5*~k=oEx4+U!<+B9oON*zPPn5f?J zFt`tA*~u|9ceB94g8vGWQ}E>wObKRwvnZ=QD(1VAhOO1mGa>}Neu!FBJ5P`4qGaOz zm#@Wd0_sxw^8d_CzN||>cdRW~@$2Wld*NjN#@gk5+=z|heht3PQ&*f{l!VfNwT>B1 zfmPza^kxY*ukNihxZL*SZh!u1xMjK*W@DUNYrOT26`DA1U6F=vZ%&T#5dLiZWq_Nu ziAGtf^f4qj)kx6d8}Z88?K?H_zErW$eJ(!k53=d%ilxizPGx$(K#WYO zJ^)aU5aWt*pwPqVj4ii`97QrY^Zx@-czoYjY;DceVQb{|ts+b<1B$Is(59=A^oc9( z4PHQ_LbM@|k@)B&AuhD%DD;=wQZ3?pqQG%@PtidjIIg$s+ghxydufuCX&t6{-99St zMWUYt1rTa%h0JGR`m=T2Tv(mj0gT!qG zd4s>abUy$-Gh{t$I;?ipKnHGcCs_vek@ki@bso847rYwHCTQSLSOloP;2K}fohK3c z*~>-l`~-QC#XYpmT6y;d1YdYRH+s-*_poM_moP*X7{xFnJOKb9VJ?p2E1%MquI`_Y zSPQ5@J&3Byrr^1V5=JrKjHNtR?|8F0ubN85cad#1;NWBkKC$b@=-0ZwzYg>}t}76; z8xZVgeB`(Q`esh3P#cBCWR?_|$&YTqzDHqxC5KJ(v(gM2qjpA1vwnxf|6|WJ#h@*H z>O~?2)@$>OdkQ(r^^0cmX6zry(RKS1YHV z7~h4&*&vBx3zRmfaUctNfL#DE@v2KznD0z>uqLeeOPJ}aeuR&)XeOuNI~uhMr5nva zzvmubKda*yvS`{jXRlj!Ww%Z*Y-}&h=*M-6Ut#H1bSrfQ>xq+~G*n!}!+qQl zKCbNwjJqYs0asgE-|HUf99o!}y3*}t2}5^~Du9}2WJo&@Zi z6%&Yv@lfLcXT|XnX&!C@O*~q03}r;56UJ&^5zsz_+zn401Tp|W5OPyl#X_2*Y+ig0 zDD1Ero};9;=8j3%ILMmt?rDXZ80J*g@<;#fbn4(n*@V@@wb6nnCdz&)< zM^1Im0bC=tN2$@%_RqoL9Zj+r!8w81|LjD_v$)aj!PjI&Rj~2`KOm2P!i*^i$Gt{N z9{TkSya7bJX6PfruaUFEwjf=ir-j9BExb1cG^7Ae?<%V>YP z*X?uj&TjcnqIN1)Gqy`P#CrNH3#mvW>6bt3D&%e=h+#xRi7Em`jywcWeG zsG7WdvuWKp$@Kc4nfn)p2jBq67PC;iY<(erEJpk$?T;B`r(oy@Eu2YBADvzRV>z`+ zeS~b+#N0McGsn~+<#+7(zVqM-@GdgeBKYF-mG`Ig@gII(bd6h+`WTdf;s^Ki*YB@o z<_Yd>0^JeK-*B3Mbj5u!jh)V| z_$?;t`i+55)Z01uA5or5V1sqIAMmex>1VB5(9f-iPYwDFm^q|*Cqx@r1+yY8SJgmM zL9B2YQG&LDl|N`whF|qP62u&caJ_Z-3+%qyud?tkz#INWdPs=>{pL>v)1iEgC#y(D zfB{r4A+f|qe0VLzdzk&48y7e5n{7Q|!Jjv^#+U59Gck`6I*u>_gwm<0$r!>G1Iefq z2Qz7S7^=$uYW%7SUf<+V!eCgI<`T!Z#v%NpT@KDXS~tL(otasdo3?;X*1;j*A}itF z$OjVGFiq5~f_BWa_YAbAn322By~(t{+QB3KfF_x!j^%X)U6hMDHG4u=xrBKI8U0)^f3te7 z_nQH0)X7xPpEa;|O#l^7ET`X-wbM5mlKklwbwIPd-onO<&xLvz0@@0O1r54$U)XFc zlez&Ja>11D(vIuQYlOq*?NBkWn?N8WkE$u+LC0J0{-_(i&-WSrIub9x_Ua#5J9KLI zpBt1h1@0W=cMOkz`Qk7S=aTHHI6i)itC=#eo%YCu(s0Bsh$~u}RAg#2n|yY_q2W_E zBac38d5>QrNky_FnAh>W;U&_ii}p?nR;C$7XMZlc4$L613IoJxT8Qgt;gWbI-crnE zU)q@g0${ZI<&U?&dgS6K7`rqdAC{^>StKxs?$`>`-tH9mw#oh1fujE;h|!O{Z0!lzORB$>)Qm^j zs2#y7gz9oE`eQocmoe>$Wa8B~LKB6o=iqJ5r98X?W`gC`8Xxr{9Qw!9)oMaPNk^#( zCX(*`T#&VO#Ir4E%cPV02Px_vAa!e7FgXnP$S5^T#qgh!B*WVIqw-||PHoI;wDeb9 zDH*J$Q_=_T(+YU^8g-3m8PB%M) zRwKh2VHdZQH!iDEi+RUbp39>+8@$bq!hiiEa$Y*&f=^$Tf_2)Q-UMU@Ng6Hb;gA_Q zOyn7V4e9=UtoYM}U3<3VdnECI{?$#b5xojP{^zscO4VuKkZ-AF3D{;myU8aVyXesc zXXs=--Oj+Q+J{;v?WTrOSZh%e-vBU#yAJ3+3SW2wLy+1ck5O$fv2IGTArUFrV$c9; z!;U4-xVzqQbG7)|f3ILZoTFAs!nPZII&X(sy`$sjdTI70_;C?8LI;|gY%duBCWNQ& z-`lwmD&6?XL5g2H=0~tR?p1AaS~9U3Vo#OoDl9?*lG{5>03tT{|CGpJH8ux&%Z+W> zo@WDR`5bzd^vz|E4j2yDDEA$co?M$VDHdvTRpLKQOMdx_H`E3;3M{irR?lI9!Ex^Y zWSg~DM-InZg|icXq>^;Fjv)(t=~M_z#N5E&K${PFW3CKl-V@h8+jZ!wKf4GI!alkI z)c`?0EtQl=Wki!M*1Ui109h^V(|tJTssM{Z?G`tYqQ$2&V=hmXtiZ7C z3F*DR1_?YcJl}n2Ou_aviAo~D2okm)&Q%m8rFnTgy*532N-h!fW^JvT9$UC2a!KrOtU&mPzo{?3f13FJ5Y$DGYtIVQShOF|32a%V|WJ2K_MQgM(fqwv68md5ag1h zs}5_p?jkfJJ`tZOaj;J%4m8%ll8lO04-*!w0dw7Hn~GuL$S6teOr2XS_UkTyEW=cf zVC#hB#=z@`Y8!Ia%MaY5TP^*ZD_thJZB+fziqL$Z!h0psb9||7nJTCYfE#K7M|G1# z=AU`HCJN)>Twr542@y}E=HR|*l&Xl;fxOQJQmRiMR{f}ya7TnB60hwt`sqPY&K_$# zX(KM@T;trFBX5?N^!EGhXE^#w6MW=(Ofob)UeYjIJXCez1Y-eZ0Xnt9A$QlFzT~3% zZpJ>+*5usxb|KEA<2*D0gZaLT(d96ZMucaX?s&Pn#F2A4kD4B0Q2llsG!~E}xVKR6 z+;Xrc5IGi4NyGHu|FrfE>E?x~&TF1x4`PVnVOWn-)Sou%tT!A286K+oC%E(!o8O6< zzp#?;GYRW~mCyk2k?!?^3;H;!K}%rjGjhxET$y~hs^r`Flh4I!1YfN&j)+vJzM<%0 zVNuNI$b+kmpd(X$&q#~pteMdoA&X74%^b_}qahl&cB1N>)&A|S%oyuG;tCk1T(4FU z6#2te8nkCNQICy4!=<;qcX%|2Hd$D^LBE~xU^0A6%wo|`3B!eG-NH=Az{|2R(6&kW z3crU*L@mc>7yHRCbb!$u78)#^eNeRgPVzCA$K~6~;NMianMKDyAIys%-n$+cMP{8i z1z0Ob^29E8=!_0#uj|Am=nHcCGCFOdI*wtvXRRAWA9f;2?)th+&7r#-kY{+?%kf|zzoS#99sv$gRWX{;)<;GM%$g=0qY z*kwvL%Bg7}3V}AL&k!Ys@oKFGu53dnZi9q|Q7ls)%FAfU`XJDuUc}^yK9l^J3Hu%O zDAl;7n0}R%CKL&y;rC5neK9#7)Ei()IpKYq8QFRdE}=|9@wc7#nCmG{M;jaG;*o@6Nk|s~3uuo>WtCQ958IF1<5Mf8-e@V#$qb?=k$0_Plxk zWX7N>eITV^>|w-VM;m*$%u`C$YHXUV_M0j5zB{cTSQeEsku-n4{w?zC{C=8z1qw#x zZSlM!WXs2|iqFtB)odR(MVkA=V}F&QRD%c}ZqnvDKim76CYf~!v6|2#hHO=cm-En7 zhEx-%baP@^-t(09%^!nqd|2CGJObGWV=V|Wn~eMs-t}Xf%1usONI6Yh^-TKUy(QG4 z@`FBxog#*=-<9hwNQ0f%H7OciT3FpjCCb=vyl(asHIzed^DfC_? z)s|cbS^j=SOO$W6A(p?DGfEapm1avJ5YGg9DFD!7s-4$}T>5>{(GfAyLT#MS)(O*Y zVZ~WP%G@Et*~=fcnzn3~(UrV|8YG5XT~F4@v^4E2eop!#!PdGLM_bf|Rrkw$+?8quTxE;@-L<+n+|F0Kh78-GDDS(~V?PGS7nNvKD7T>T_#1As)2br81`hp-yq9Da=l>6$( zk-3=2p60&lricbmd#;$PZa}tn1Hi@Gb*Oj!ChvKi{2`)#8)K|jSq*Kwfspu3_K#=d zh1p$x_?pV?giyn>UTH|15_@D`?#@=;}rxrm^K(VSAdMPfN?kVw*3 zf+>~ zM?vMP_b0dx?vZcOO%4P>3%>;v>%vLNJOmM5mT4OmwrY`V29zsv*5u-FM#(+_k(O&6 zk2XQtuXhN9uB6LxUx9ODS+YoAkP_Y*Ro`T_HO+yTL=@~qr6?(*Df{PvM@E3!@3ePh zg5(%ZRP48;TgRgKl?zi0_)5SBF({T;&Y6B5#n_6X=bd^a;EoTOg{TSqE4j(-5rBUD zkEs8y3u0h|RbB=S>)Ulievu{iz_?lTti!swd^Q{FhC&C@QyUz^QrVK;7Sd$*r1F-+ zbu%M(!PjoibbzreiQaj;Qo~qruV1&t54K@2ss~n>qT?Tyu=fe^HK+&g$x2NK7{vi0|tIVP67}#=4-jH}0Bd zA?FsD{w^9NIg5wMD!fI-s)7P|$W1($M%()MOv>)fy*GkggyzT?m0Rz?%PHvrrp>6I;F7a3g3lF_ODZQ}y(p>(b*V-@*tGcsya3JBC-; zlv>-6aHr?iI2?E2ePt!p3W1LBiKCZW+gAH!jc&PlVxY5Pu{P(B>c3_}7|BJ$;`z#vk=o-l~ zt^pd<_UjA zH2s(LdnfpJdL6$7bEeSn%=nRxQFx|?d;Ld$tsxBGO7!XkSOyQ4SoOU-HXitwaMVoK zPo^|@p;Z&H)?U%X*zaJ4%f_ae45gX|9dxD^~=6my&HJemvj+-+J9ThAE z1jX7ELK>h$b&6r^$nMB$8*}?oGR-0+xB=?b0V}5`vRH>vJ~`U%>c)TnF;&8RrS$e_ zy!@pvQ}NyA`9CZ360lEC$VG5JI7L2020`$YON-9f)29&6GDpwe)xiQ4G`Nnl_Pn3o znM7X+cO;U|t18dDeT5)quBb`Xv$y^|coxJk@dJF0_CtMP5|JG*1K&5rHK7K-I5AVQ z#@JZP2Szi>f#yeZGSxsV4*k-=xSKKNmft=A1^_zh%GASHfKu*m3^& z30^j-Y~B_O4nQw4ayG%IKf&`>JLWMg4L7iO6X)vvMClG($hJ8(V0R6@ey8tPrRJF< z;G@rZHkbFQp)|z;?JJ={1R_$2e-au?V&snobBJx(VDNQq!7fY8*pd4iQNM7ZW~Cfc z6P;!Po!479R@NU}qsba)1eZ~E;+TW82g}SOefr2}HcZejmfurC4mng>4CB!oN;mFz zjpf3MMFVchlroZd%-#KngBli011f>g(01bvwt0=}8S7VVg3*zUA|u(n z(x7_}=3$fM$@)zKXt7#yvSl|+gL+>66cv5V*-MF9#5^9EJ>XTD0Qlf)_l|M~xjl7g zr}3vhhZX@G+AI<3r(8LU{oHo&{GgHsVj}Il<5AwoVw0Krm`_#;&Eo2y+|@Ek9rQzc z*-&YK9|`~BNtUB3UD0P7ttFS4H!w&0ry)%anWxd?8c@o=*rJc1oicq<&D+Q&JDLZS zlz`(McHP{I+_PdCw|MN$UU_HNQFAD_5LmkLMsMmL%^n);&Y!5cJE%s=B6sywBHiC} zr7Y-zkh1Z4YT&D36>7@C`0U_FtEb-j`vAVdhzm82^D5RP93TQm)-IS_b>5q^-L-?d zqiDamog&>U8h@+6JOJSRx|oYJw>L|qQ^Uecxjk=MEjAfbpuqt^lZ@y6i@ko0>6V(q1s>tG!6|2mM*!Kt@JFJk zYhiOnC=JRx=dY4AuusufBYP0ROoC` z#MC@<#E!9PNG1(UQk>XY$ccmmn%d;KG@@`G(`MeecU|&CffyU`M8CB<0=qw3P?WZj zhxw~GMYN9iFURtC{5&mAWB+7M6ZML@i5!%6sLujqRn2WM`YZXBB6t2w%rDYr>J5{O z_Al-^hTyRiarKKT-GHmJc~a1hR%deRs}cs85p54tX>Ibn9e_e}G$m4ym=#)sPj@{I zcUUA3;@^!Dv>!5F`Ef#>LxMHb)ytD~DIQMs(a_K?&%3?@tQutu;XNv7*W>SA;+U7> z+Q<%T?gr`=_{tLRTY|;DA0Kvic~l68xIk%KcWK$PxoJ(gG$+1FpdD`21EBxZm~W!MggH1u8-{0l?j>CUn}nDWiQ4Y-=RGHh^rm>`ZMtE z1H%fU9rjH#1Rjl00+-a9#bwi?XSKs18tliAqj?W`j?!Qu=pCV;a99xm46!+y?PCqD zG%Hwr1~AwOuN^vMk8~A}+L;?caAKHiK=iGGR4iydu7ONo)USV~Pp7!nBy5LP2`V(q zmOXNg=S24s9{H&25^p;gFtSMZIWu^=utJq_6(QP17B0j7Ee9qWq`U8?%HxVk4md%R zAz|;XQ|t&4Md3#;-w3d91Ynfc3Cx$kn%*AW_p^Cd_*Yl~3G_(rhmJ7Y z4?-snXIp7>oLqv0;v9A6k_y`B9gCl$P@d{2*Yj4}nWn5e2+{*~W55Gork*tM?7y;3 zLR2J^dCe$CCK2yDHgD920@w$CyHc2B;|Gn?cuRf;dddJeci z0GjC>#^1=DnsrcYB-9uDR0-3M*e)HZPc7TaqFcLEz9wf|=s~)TnmjfTKyi}RNkHkLm(laGRWv^l2@5VZeVUDqjz{~OI ztj7lYxg~xBNwj~u<)83;!|QY|#i#plAhQ9snS?K!y@cgv+sK9qNBMmFI?~Gqd?ar+avIhb?9*{VHkN83mN_h}@+VBUi&tuH17B>vFB)_Rdxg$cy zK+OE8k-{VXt<$(#c@%c1x3CQHP#evdGA#$J5fCKAn%uR+4nxtGtFHMr`dx6f-!f{a zQ!oJZs)l+vI>LK(_T3oiKX=o8yUcAWiZlZm+Qr_EGql)wHHVI-{$}k3(j9**-&8)X z*gb%UQvtcC;8#BRdIMf*RXRmwa>&!qG2e zE2TJ50gR4nV?*sH;OCM%zDD`+xyh|;R#KW3hqs~%h-!hgVQSycWUKdu8}0r~J}r`| zAyY0odALfo>QK^HeFvKNp)?0NYAQ8dG8}q6=h$&M-J~nw3zR z5RbK%NfBmZmI^*dp^}W0sD^R&KY5D8=+s`8P}l-crbhwXkK;UQ3qMh*=HxrPHW$$- z)J@sBbvTS7pZ;T!3SO9`bP)hE9@F}{iC^s+E!QG@tS{Sh2-6wwO*OYG;Gy1!lL=5B`DAx_ENR*VxU;=@VjJ&ZzpU^zdny7S$=hpI@ z`tAj=5s-TwX0$D9sa{%&rxn~~o!KVcb>zLn)qc@b*-s`>25JN_cE+hQRTIqo90f<> zv!c39{ACD9V*AoNDb=S(#NJ6k21@go_I(N?FmDZMpdH_vn*Rscl8`mR0XG&#e$M6rgOM+l%4GH7BeklwPEn4%w-?m*t zuQ(qWe>-+z(t*SELaY+;AkmLIrjk(4pSlB$V?xDcTj#m@g^u0V5))zNXvv>vn!M)&$O!>%ZU4yWKO&ONjORekGBD_UYRZ=4MWlyNW}D`}9?#Y-jCjBe@+1;`$v zJ3tDc+oHRqX>&P$TT)`lB)g12$M!mI^_dD?V7he>n|yB_Zu^CLyn^^9_pB+_X0Z*nkt~ICiAuPon@s5 zxiJK-3Ypmw$_+R9!(rP8;^Yp`m>Mjn?3S{Vr{C{ywVms0_Y`$FCB&gLu%$1LJl}Ef zi$6_yX8Ud|-zIq_!^4QZct@*@RS%ho9&6*xwbfP6GM{vxZh>%7X7CbT~F}{Y`^xr%W3A4pw0; z5D>zzhO--)-k9%;`qkWk&uKq+UEjd!@_kYFG*Z0@tw~baODCc$i2+I5#FVyJ-kl0 zqzuwuaU8|inO@_jcOE-y3MMB5Y99=eNu@9R#Dc?X5u!@zo9i%u+17$SRuf{T8%Iea`-^YoChtO#WxUOGlKT8oJ z!psZZiW->m7;t2~g1hhCJ>vsoZz4ef4mNyEXo| z{0Wg`;|vX2usxZ;Isz$AjJKzxu7*fY`*%TGQ8J5TKuvM z+@G7t++LD4wjyV8(ht0bsfuS2EmNV^54@{ z{;hY;b7r0$)hOs*!J~fAj4p#pmXRW@eLJ&LJ0mRN-!#C2T5Geu=hz7)si2U;&z#9NNGbIcE!|vu|V1D=9`? zCe>T7UIVMJl8$8QEfF;8{eQP0tGi$Wl_;<~6DFk{^5r6?5Qg`Uavw^aQ&5wcPl+PI z)q1KxCHj8pLPseQ&atp_BsX}U$vXhvG~;y%tsKarX?SQrie8OHSZ0?ht1(Cbs}|A6 z{Rq^&vn|E3y0GD1jDJRomF7rVx23Dha=`q^yV+qS)VdPMv_vsXW2iGiSM-aoVBycL z5)&&?>XnI~fK&Dh3{hXvpZl1i#8=W>0+h4s_u&U#?I)m33}&b=eN>=lF|<4W(s+fb z9Q08|I;wcgjh7D@a$>19mDLLpUO=2q^2*diLhI|=6FmR3(88R!1nfRN>=WP>^>EDU zp`RP}swkA+T;B6rQNmY7ybE(T~MX>Mk3T7e*81I8l)K)@u#x+^AtQ#l}Af(X8 z)Q4B~E|5x6iEew8yAM9Jf!ZceQT=`I2$7PJw?#QqsMD48dtq@(NLOv?VD&c;!}^s% zwsfH1_pPqT`rmfgy&m{MGZRXeJS+CkP9;m|NA{0jfBg#_K1qLp(A=p!1xVTt-+V*- zSpLQY3skGr3%-WceIXxg*JBA#i75X3x#qVE0W&voPihi#lX$=OyaWN(b|~gw-adg9kzcseiW&r6kb|Y_h*HcsmX{lf zg;30SQ4TP1v9U{7_!FRb7;(OH$olNFuj#EU`%q<>#o^?D=SAua`D%zF>QqvfdN zh9%0!a9xhDjr*;Yg_Rz*a-iB9>&`F>zkGa?`ic-%{JLxdI`t|kRW=J9*X1$xA6=V` zzbOO`GU{?IA6rZ+O~+NBZkoXzwc^}IlI}~quh-Rpyl+v;l6BcJAvhG6Sv2rcA|vuf zxnob+uo1Q=KM5535MfpJP9;Z}D`NRf!7tr~E4Q>}+$|V~^{Ehewr87H zvJI(bTe@z|Vx&%&AoBu=1if>J&R=CjzY!lG5vkW;C~fOSS{<`}dO z-W1u4v_h0=0!8vRN^f((FDHD{hW&h+4C61L& zIhCN$CNo3I#yxS}GyJzG6}|s3j~}n_t@=R|WOo@MW=#RJ8tPKxw2B_a2_nrQbX70Z z8KD2@58d_$YpkS)z@{zemjotEU4T4sLATf4S+#CZ+e^pg|3tjN z1v~zo=pkOlE1Dqe6i31=?}-I%a?mdUm8l#*?4E?D(z1nT~@y99s{ zomB&FbYFd~Q~1x69vd_~@}rJ%g}pD>acm10EaBTw`Wf7lOYVOZofXa6&*#Hyuaa^3 zzwWKZ3hlpNq^BD~#UupPE3zC|+PptZ%s(=fIJ`yfs!yfc^U%)#ib{^@->LIVxOTAl zMFj{qJ&AhYbpKuthb!*eTbMk2=f!QpZ<>kjYf=W^ka;2COGDt_J=`?#4IZZ$;M36b z+TjQq0;>`dM(?%l<#@fMqp=N((9EE@N9y#8UG`TQR&`I_2KD^F&m3u=(f%w2D8WnL z3w3<@wO8IqHCQC3A z+=6v7euWiA=y435RYYusjM$3)=1q0t5@C;Vl6r?9H4IM8n*e@=mR5}=8Ja|QAf??i zzST`T45%$QJ?JN%&Gom!kVgR$|Gou^*7bKPqX=N~^?hfZ&OZat(B=gjJ3L1bI;-#H zR-jS7>+}%R#@*@LLXwzHROxWJ<;#ZIx8L4{o&l>iV2XZZrr8_FacA!|IU;gY3N&vS z{ccwJU3K|}>rrg45pgZ6tz9JQz_`t&F5G6Q@YgHe zdizs#@|>ksVxorNZ9@k6jlj0@_(dtYx|?bPz*tS{6E2(Vu@~mcQX$pd`NO(N8s|Ce*eq?W*2op^iI$6kkh@MzD z0*mV?pk#j@=1{Zw=6w4$>YiQWe54G8dG+JeQC>gwZRbCYzOQ$Upb}onoxeR8!n}mN zxU$pI{#5)`cY6y3OuO{`7!Mb6jre<-eTVvj_#?;U)-14!y0<+!&8gl{>%4ksJD04w zF&P5-OQy=>)lvd<)HnnwC>_OD*aqO8GjnbK9kHotn{E6_p=NBLPyG1;pw9{XJCU;x zW2QxQdJ<;CaOXTk-Rx55=qxbs2Tnhjc$wMuwykD>_7v{#7X*>s9 z@7}=rbx>4EJaYI;8p}%o#`q~nU&01=94TpEz$?wxS-6B|M4W|M@XJtVZrs`{^p^P- zbdM~tFElwRJ*m70f7H)A`fSwo;iOApvVrRW3Jv#FSgrpijb`B+Zd)Hj)rK>BJ z)=|v_FSA6B#f}M4;d!4u_6x@fg!FE0E5pTWP5+4W5Af&6i|~M2q})RkEB= zZLMFx8KDxOjl#z$IR`FC+4U9Rb`2t1e>}AhKt_@QOA8pHv1;h4 zXzC0cx$rBa9*oI;03vQM%y0*g@Q`mZ*77Og#dUGKX`w_unCPO56LrU)97OIBYJJYa zyKyC}M0o%1r!mqTZWs~)Ws*~VwZF0D~o`r5b%gZ0@ht2O~ zT;t6oE#4JUFMv~EX5cBE+n%2_OK`x#Hhn~}ws{4+oN)F1n-Aawli!Rov~oKmO=-g0 zX+T^DO}h+2b(dkM{Z}wnVcq{uxkE4EAc_Q^+=ii!1wtn`?|i5?;_im}sDz^o4Lgk* z?kZA@Oq+YmM#C?jQ7fSI|N5SH*kc#+^miv(HATT$Q^#}nPL&N zTYAG=jiSc`I+-0^2`Ov{k|X0V@$${)KKI*kjc$UuP`x5UT`}b)OpJ}S3@ z3iIA0H-5ITc($=f{_br65bDN_X+&LQ12I+c;Drf%k5_?^;x95Qu{nxaN~{r zO$3-Al@I?1S0j9~`$)~yYLa@mdog_IBwww zCm(F3>KcSNK;Yi{J)_vUK#_{!xQ2)f&o!`>k`1`vw7Jl&C$!f-0H*ZVQOy@NnY?eG zr*`b$FdSl{-IcJ{{`kazfNTQRJONY_DlohQxC0fq;_FMPbCejJYaF-&K^A5d&w}Se z+w6^dKg|2;blOCgYxjh|jKclH_K_URzX#AJTgxq)E_88xM&OS(qJL^-GvVs>0`-L+ zPH9ir*F=em(w}Ya8U=FbB>Tfdc(j9Wq26QmmnBkM0hSr+Y=Qiyee+>fx-2eAQtr-$ zC}@!^Oob^=i0aIVY$|i z#Ufr%t)|gZD+~PIo(dPWFr4O#7STXy&O@AwMWBJwd@?0sjEp1;mS( zR2*-zb2M4w5ko$|05kE^?K%6+90##Rqp+J385oP?49hVXfD-^5vA8&hyjxf$_Ksxa zXI*zsnH6Gq`oI>w8lP5UkuA3ekZZEL;$=0+Al_9jHMbGLb_0P@$sajbYktjA`|HzW zgQO|zxvKN1o4wwq)3_STbDr|}V74{z-u$h}hjuWQTHu@R_-AQ-AOJ}w>x`|+=&u<)J!B^ z$${sE5k~LdJJrj09#$m@%pqnFVh!n2(xhuyfJ0$Dd;n!?DVMcR2zx_?*BfonN&sI{ zS=_>-jaR#u$L{?5giybDsyOn{ZCjdP_^(m7Hbde65RYK}YrVtkaJ{km9X)w!oKWP2 z4Z+)o*u6hT6JFk`=b(uWlxH2t3g}%VBM0F(omZs$oy_=fe;e%u4*7DPW%92Pw}>vS zup4aH=@H>UXkFHS$QCthAD6dZ;gT(%M9Jl6nO)0dj39j4$t|S-W!4dC(upQp=ZP6? zVK^JqXA1;GK|<`*os%#?5hG4+T-$Dea||NG)VAwW)n|%jM+`Z6@;^Y z@&EfOk;u}SGmr}mHvHmA8;Z@PoQXsx8;_sLGsI3C-inI<@9Va;kgFEnpRh}Mxx-bX zX%fJ)oka2Uc`S1s(UH$>njbC`K{4{3 zlRUM~zlx~`IqIwIxnP2@I>1?5IbAf}pfN#>b!{37(VYh{VgNqzzjQ^PxSnBP>@(dk zeQZAQQj6_@)*ek7&1rHHzq45;h2*zjIgg2iyAY1i7BIAAYIByRftI=7_1G{uVuo+M zDaXosR+=0M%41-umC(Fsf$g{8+4gVMMujF3Nv}CPYQ!>@D<|*pd?CJbn1zUiRz8kQ zP)7qs1T+m92^=WuRpQ8b3I&9J({TkX@x5rt*>N4)fVEYCUy}kI_dT)G{5_hb+ z!*`-WN2;hNYFsfRpr->+YQMC-%P5A^e+JZoa6Izv<4lJ8`ANM5AUgG%+A)Z9*3mCn zd~^CeSsad9AUuR?+x^AMBAVUMnuRGL01JB7|c!VG`3&GjD>N6Cl^v?Sm2h<$6 zTw2)GQyIb&fDhH9e!7fmknyeT(C2?vP?(-$6ugjV;K3g`ID8)+m#4;XlW*LK^ec17 zni!=vz@nlcVbIM3HDiy1J=zkD-|>H>BEKzeWQ<^l73cV_;&b-qb$&}!7Yvd-ZM%zp z{b`J)sqz7^JvD>!+c(5A&_vR)fVP>F0p!ZP;qOvh)n=^GWL+8aN_@+_q9=5T2f=fP zNlcDlgZL`+bLLMg-v#s^+AGTa(GUTkUV_d*f}lB}C-g{_Am~ePKALRC!bf_n)F?Pm zxIOaA!9_~I67G7u$kTN49hVs@+!TV}6w!VQ$-=+xJ>Ktr*T1dbir(lV0!F(M0Fvf| zonGm?-GphP{wY;1*9sg6;H4E# z5$+2Y=MEQ@YU7VGn|Iq18RW_?HM}k$iw3nH)m4J=h|WU&U0C|0te$2a&kSzAz9VzP zn{5LKc+Nc~Li+OIls(|w<&u3sC%KJ&-ptkH(C(?=Nu;yCdM30e!*vZXX}i?7l#w0f zb+#1YsdYv7$SY7ECw>pk5Bz1Dc-T={?|ePl7+y4QNic|RZ_(^=`_HB#tv|+MnHZW_ zv$k=ToMFQpJwPyH;hZ&-k6&Zjz_fe5MsYqOIgM( z%x#6@U>(l~_uDATL&u#LUU}V$juiqXgXJ5saj5+e)j0#6kr4!+@h?&6J*K-3XRxGpQjWTbB<4V%KB ze&ilm@OcxqIQAk#PB%sq84NN_`4;auve^62+ZfUZUQi03tt$_~Ae(m&tM zCbHzAH1K;p<&K&scs~9W$(18zLeg*fn%?6waWPhuQ@)nHh1CPl;*yT0r_;NuA~9{e znE{7Dw8x99FFDs67y^cCISo@$p83xEd&C_f;^=4wr4Qtg(lg+-n_+H3OXu)W{xuuz zj)L^_xeDP6fB}56o%+(;`*SrN0XerE_oF>`bgxl)tdbrh&?SklBA67h_k_nWa8xpk z&nvAC&h?X6EziX!noy9K25C^IbKmjRgnn9YG3drwWk*q%(0wQApC4$m z5?8-E*=rDn^&Z7|80Ddn)|EKP@j@^NereGDq{v)zB)T2~{=Ld2#G^G@Y#jDOV3c^X zVr@Z#Z&g;;W90t(!1AhbFkpcWMD%~;KoL~TFG0IKl=;orJPQYUZRxH4P>kCwHV5Ps z?^7JAXsZAMMrVwbuv@MBB0GU!vM2|tK1O<<^qM2xWL-i z&>16i8|#GWv}>S9P-W111}Rg9QQnOfN;06U{kplw{QOfSw^FzQp!LBMK534%PxhUf z$>@#o)ZuQ|BJB%F$7Hvk0T&l{>pks_9rT?u=9M-~F!38c(emNxVScX9Iv+G9tAppY z_EVs7kdKI8LOsl-8a#e!?xE)2-He5W#s=PSEn4yyapsdpGqOJDf*es(z%Y3BE_Pc% z4{lfJV&{y;M$1u#{=yl&;enr{n*nS@_7ZSj3&jXx1uJjFzW(JqfmQsBv;jW(<&~^g z>_~R6(uCs?f=ho6Ej|$I{6?8)0WJj@BY%3r5pmwinoS>Ag*- zTZ>>PzF|bBy3AZGdBT|~Q{v)7PDLQ0KQ4CO9ta~?hhjw(!Rb#lPTUt#KhK2`G6+n+ zkbS?DIg$s^&CNU!eqQS>X@4|208fBT&{Tj;KVxPCq?IuIr=N=i6UW9#deN1s1S~@G zh1)sOm4-hLSRbmu+UKymZJlL(*QcO>#IIEk6w=)b&mq`s!G2=Wa}b6cY{(jmOQGJEK*NGqnYt%1T^dRh3}lW+Z# z6A&DFP1eYE^Vw>9bZFn@YqNv%)TS;8;1m|;AIH(1b<#!hmQM{UU<_&yC10Jn(7eQB zn28#>Zat(3%7((=P8uKKa}0SzSMeTtP@kasgQXlj=2^UkMht@o-Q1&FMpwd9rWy{{T)uS6ju) zJC0fM=O=v}=0JN4RH1tWxmAQ%;OyVvQXmoVP>gYCyeg`>(qiFGDTfrAJ-4UnlpGt6 z@p9w^OFavlf_{LgNOq!H7Oc;aolI=v5(Tl8s^#GZ=&ald(8B_Jf{4N^d#uu){S_OsD zxgJWcRO#LXBWmRlB$+LJl#*R}*J!0KFg$r_!7TO16jVrHCzU3@vTq6BCJK%TJh0p& zWeA$vz-EFn3~2h=%_m~J9iotKAbw_ji<~E%wJW9r7edG?LyojD0lL2aa2*3AErUwG zFDC2Exv1`q%eQv_l7iRj(1={WALm6grc8>W=gU}uR%fV8aHLvmxRp3 zKd$qG)umc{B~F$KoDImv_^wy-=8)~@JmRabm`O$P-+tCv_R3IJTAVq*SfU7l&y&<+ zu7%cHi&BgTXb+Z{e?dnD{)Lz(eUIfJwC1H(1~i#*@Q$u0WsPo0-TUS^e%O(M-W@=O zqbES~x`%M%T@hzhsueK|gz0<8oE1+4i$L-p02UXgzddltXEKq4QSN^q&h(G14gTW1 zS9qB$c@gink150&_y3R*+~6TCV)&r19d{*#y-03i6jy&!`5?qv!xQZarNl9-q$i?l zs@%!!o0IfZsbWaTT0sQ~y@)bO#`H{(B;_-vhaaxVNw^5*%V9aE^5 zD|o{iFQ)v{lQVXZhu`6&myTzjiIT>}RW_dhL61Z0aaA{02y54V@|?Bnf~%js3%B8J%leXvdNc`|8Z2UGqR$9G*uKV={K zvLPpx)zr^`uG~Y_Jqa5Ba^u@Ew5c?FNZic4ozXd(DUGgTnvFO#oClE zU*!p8S$)ZBb+6Yc=k)R5jL%(V% zoRcVU(s_b(&zP;0ldScA@PRExDa$L{cK0w^=);@!R_6C%BGJvh8xq%KIiE_^3R?r4 zkIak;j}1JUiz)&ZIHLZrtbDK5+vF1p9EUX{!9>w)dv<{%Yb3~yv03LQ@`BfuINpvK zHsN8~L5wLA_>{k8d`;7{QcdFdi zAwK-zt8GB+CHW~N_D*Q7JwMy8nJW&48EyJa)@J&5(4#e9-@maC@~t9;IR7@_Bl{d9f45%d{O%-y5`1s#6T8Pbo1TaJFaSYiiafoj|wzKrE5p5AE zj#O~SeJ@)V)J$b4t`s&nPA0oaIkqBXF-H+d&}I9B!5q}0m9^3>OYPG~scSTe*5iz% z7l8ILjl3-1eoigUc@hn~8JxQ-2s67QK=)ss>*j0Kd@K+B4dr_6BE4d!W78j!Zew1; z9Q5B>3$Pw(u!U2=JUhSwNjeqsiO%tOKf`w^zPaZxS3pTYYB$4sd{;zhqNg8kFz>~;C$QSGcq#T{b&5!8z-DhWz+t0`Eko)Ibnlg)>aH=6vk z&VJ^Vpo2yS=Pb!t&+kio&qNJ41wQhe%k7{{>LLxni4V}^F7hdovgSi3=H?@&G@CCF zxF$gqtTA^4$@iupX(e5P@cP1L8sQO0*t&Cc)rFrv#LB^%x_nWyhynjzdC?dXzlb~K zg6U15`ciY+GRph4u=9WrT@Jj6fL0rpc6JxL<^sG86n^8Rtan_$X%bXae?=33QiDXu z-CX>Xkgxwc_I@q3X6L*84p~GnjtpoR*Rs*~4YE`)wtbRsjYf*IMWulGfdOq9SYzw7 zBx!WC*{9UxyD5N-h)=WRaeZ%$0K9D+Y&=9b9_-ZulyNDkdZ|c0}N{O zL0W*bMeWS2BsWSlH4k*$Ln3M;-EwxL?kw@+xH88y4?GS4LX$rwd5Ft)Rd$NZt4$`F z!#QJ{5AL4c!;s~dtH#&ar!^d>7noG9t@H&^54ZrhcD43Z>(X~Z8iyfDfp$m#`w9IA z*!IfAIz@=1l43(_nj5ftVa>Q!*VX*+eDeT7=4Y>@3BdR`dC?%_lZv&wj&Tz+?$zm? zout%iX4>2UT5$gpHIx$(qu9J+ynbPBZFjPs7alZ^I;VDsWg=6{IzB>Gl+J&ac6YVE zZ|5)TotfZR*T+|I|1G#CZSO1#JOM!J{%aD_69qYYTT#oOJIuHj|rpZookY=?Y@IU z44~>w19~Y#D%4m&M5_O_?HyQz^*hbgsPN^>Qy{y@^dClTH&w4`Fh;gw7L~?en}I1= zd$VK#>YZRl8IcfX{LdeHELw7*sNsx(Ut5=_hxOE5Yr3)SHZ*IQpfGY$G{=G!87ky; znSSsGV_ZjeGU)V|N}6)L(b&9Y{!M7zWG}4r>ak9PW33;3FgL*=0!C%7mOZ~32@pMA zX&%uVUKIxkx-be^SlytrY?-p70t^s)b;izs`CmS*Dw$6&U`(({_piPdF3%G3+o*=q zvyProLW_0m=W%N_FvXuse5q;%Wv2e)&k`>L-CGh^#0)555eu`B(TmgNnq7g$xED>d z!lsK+71qi*UX;aq-Hr$iD2&9xWs~Nof3bB3IrrxdtbcgMfAphOuUIjlbUQ!V>(Yar zkpFT$}e>wzs00=HI1KuT^W576&y`#FC$%2V#?M z;$urYxuxHz_&T~uLB(UmUlc9;8d3vqLzWo*?t|TqQqBHx^1yEQ46=`fL+(8-xf|oc#Vk$U{=yw#>-LGHi6*&EcCnWflTHMow_G>)Dz#|8WGy!WnWetcP?!ian$>y)`R4EEn5 z?s5OSerQQ37{B)Bb$Ee>DiQ-|=)pPnb&WU9{cR~M)%Tb2KcRA0pRV=*`JKxXUP?AI zwDKn#G9j@GclI@c@e$D^v?ANef;|RlGe`3NeIh0SR(c-;)q#ND(tXSP-Z|)D+iWX! z#ck!6ZuS1MY!JiG$ER?UF${g;+yDK^b7rCvsW|5GN}5ql@<~sa)Gd%`FD~i@`3*0{Vv)#(_jhLK?=ucn(b}sc)cnC)xPTA9bT2yNHKo zH=OH1%KEc-@4x>&_H$F{vh3tp&e3NT)bCuQ>4*)sg(kkuzS z!DNMF^p@t&Ol=ieoN?;!l=}$q;q_e(pKymlMVz(%YD$i19&Q=9}*k);#_e7+?GpcW{m{}VgugwL~~th0QOHX-SZhnC1;;J8V2Rj+wnu8sbLs$nM*B!)a8X@ zD0G=$=;--L}d{PHz>cQ=*?fW9HUxkRh5t(VDqC&tH@ z62N08%T5k+3iHYe1BzjeA!@AOhx?&$rn&@=+gY6sDaA?96b)xYF{hTJ&xRUN`U#kr z(|E`@J*R3XLnmmJAUul!ARR};Ke_J>MZ&(xevx)EHOW!Y*ezgJ16DIk^k4|=+j=NQ z!+qXBD{8Gynv$XF!&Wia3a`m?^J)m0(g4oWtN)yU)Q=b%VFY((a3hZw0Z zuv1e0#TS0siL~f&Aayl;o;h=qQlV+Y;X3CUUt2EGn>?Ff%)_AAGka#wp#*m|HyHb~B_709Y3CRP;e=0Cex+3kPubhYG5RP&> zjZ)?*G_hGKh4Hp}vtKPP!?ik^Lx-m=xYupG%HR1rx=cmPw0Prch&fhjE`m0})_E;O zy8InXXaaCMDvg=+r+4+Zg-0y9@%XTP+!c8OgQ)UPprPO8fL$FDar)pUvtK!WZEQh` z7Tao8bEg?%`+!p|9BOq4vgouOhkhHL(lTrH15kl-7k*AMcXWpB86hZ}(jHy{GMz?e zJxW^}Ez!x1P28{B#Q7PuE;l_8H=)Nn5?-=EGOHbsA$cFTO3(P1es6$kE=MAC_Rgc_r!s7n%<_sv<{~gBK zis%|@e8Jo#l3q8XC>UcHS&o>{9hxl1|Bx5@!N(082&Txc?Ruu+GH}5Ns4mtPG##3W zuk)$n!sV%MyhPB(K;ob!Cez$VQUb>#&3Nb=CDo%CxEkzD!hyem zIjT^iV9v>7-K#(e7ogldWQ-n^$(#=ezMMP6t# zKzf?|!Oi)4tU1%kS0pfWBp^;WjKb2RZ!bz_q8mNTU%BH=NDAH}Af1LZ0_C^gf(90e zwx)IY*b&u8y0@QXo@)9CNY1)i{y)GcudgCv1_5l3v&9l^WU@t4ge91iVN7d17g#zo z-3}2b9!!pk@W#yE-Km5-F}$T42-a;6oQ||>Mh>|c%3?F$J_v!5qx3yM{{;6v=4%{g zhBM92e+k;;4?geY>3z#2YzG_NUhmm=JY=1b@ueYGhK=qfVnu23cps#^0HPfRj3UL~ zT1B_C7$BJWt8gmGs&Kz9>(PZATI$xrR4dI<~_GpycVCR zU{Y%sHdBsq!4NBb@`iG$Z5@N9HVAXTIXm!VpJ-Wcyh>1^eR zl^E}Z@*%;9zD*x7{jQ-b?($R|uU*W0G@om!bm#mu@ z@R~S{%w&}vp&dnM+u(>%6yXZoRdjO($09}8KU?YeEf8<^JfW=m9h=c};^;20xUWt_ z^Q+m5->73S+jGLU5_;7LE?~pX^;7TsS(AL74VIn*p8HFh=W)Yn{aZgJ*k&-@BAh-6 z`)mkF?7FRjY=T($sd7>5#X0z-GyL(5$dHT31UqNVI&~S%DD4UuH~`B8$UG?A4>F3s zJCT(WWU_K^P;5gbnwNcK#C-iyA=my8?EXt}&Ra<$s)_@8%d33HP&aUL|7+%p_RiR} zQhxamBCck9ETaAvs4#!3Yus6g#1}{Z37JuBttBI=fbPu4^TzwHKPI%k;Q2>f+26cU zL|HGuj}h;pMfmdIlM<#aI1K++V6Th>AAngUr}MPihjxr=as_WBFKN@Zqu?4j-2JQlrYCr0mQw4t>3!JU_ z(^EcCgQ#NU!4Ln^YYB=(DfjZq*;Hh~s?D)Yl4;Y=8=F*D-aywrkU!^vYvy2_^-N7< ze@rf0U2<(>x!Wuuamxj^JqlhEAHa)xZP)8G6|vk<|6!jGkVL(6pH#P7*Md4HkRjl8<=2ZU|bn!NUGqZQv(1den| z*qcE|)lbG%*Zz1rryNDCiLc4-t>#TYdG&rSnjXh2SSjQJ%JMO|R_K}if{Qa9Ue8Av zTE|uE@3pFIN30n2{|}=aYw6*vPiUVhK^l@u-{V91Xyvm{7gIt}#XLA1pm`fuW|d4decG?>2-uo?&v5hQv4 z{xAjl1_1MT<{9gduGPJd>k_5$+~2jm)I{F|E5keYkeBWOqxoq#u#orV_9N&14&|Vy z66k6cAuCb!2oG5de1#W`;W0P%{Nrx(-?5%BH`B$HK4Sy>6Y!AZLC)J~cBeIY`#YSw z1mrKsXYHpR(m_o)$M2pzTzJHXc!5f!OgMQ*zWU(VDtP&GSKr(|HfWMSY*z#cMR^`2 zpuH>*ErV5nx{cBPl(gOZeAV)eVo&n0z zJJuS56r2)$t0lsbB6<5jEDJpXg1PI$I(zZc;J zNd36AeAW!nGA(DjwdSq$HiS<1t}z^Gsb62a*N@U1qu13g@h$s{O^YtSoGt)sVYzZf zv~UMl#b@zLmQrI*OAhtE=TXrwg}RO@i84N5KEsyZ(*~a8c0drwX|9nV*YA0rs1;W? z9s#0`H(a0ixdlCcTV$38GcdC5Z7XeIysTPlA_QG_gwAw&oz|fJAw32wGWh1)DgA*d zq`=b2UUF*lc32)=qXi!%?t%U16h!smt#3`v-%6U4YA!2fs~bIe96YGEflW-w!j|qo z(H%$gn>e=m)<^xnmfyxOMc&x2Fi_JZohU}&m=bABmo!PgxHhxnSY?_-LSf?a6%e&= zI3QPS2mw?Hn1A1?OAdaZ{AL{Bux+hM90>MtFb3KUa8zg;{Cu2^LJ|KmuzoXI_=9U& zq6q=@Hiu4UeOzmKzC=7tIj5^A3@kq@)Zya?uxvi?2AA@}1#9}lL#?_GBBa{Zg}1?j z?{PSE>--nYCNLyGne!N!@$vJGJX8@O@@0ge!ZeE2ALw|)_KTejV4xHB?&;H;Pv1e9 z1)d?jrDyckk85pu>>R-ocdQZe7RHhG+4Orr(j(J>0-?8SqoiFW+Abds1;BZ)EQN|H z3rpy{m7&<(rbN%*%~*(A3?5)rHEG-)4Y;}D>ah+hA{p>5JWXSp%j^~vS29^)IOs#& zvVzO2cl8)VgKp_}u{tbsS^D*fQBjq&X$m*z89Y=R%0IMiun1!rW6Ip1GaM)@ zMVD7{{QXi+PbVXRO|N}T)pW8pELs@@+O}PX8e-fll!4g>^ryS2GQoXp0z!o|P&)J$8u-|4;+`csmch!YdiF{W@*CH;|=ZTLm zY`qDn#?h}{rRRqF1s5A!xkA1LX+I!3mSio`!5=+n@qu^BAts)lWdUkPm|ZtHnUM%i z`6)$dRX-5RHf9K(FPBb>m0uGhW*zO;ZkKccL}$wOSM3PHBY~M^LBHA};)4+P|HF zk-@EMWf1w4E9$>msmnUY4_BV@>E>pQVN*xd915j>5TH||w9;GliiiIQjcT&m5f09b z@XNX`2{4zQ3G~;n9%ieP!953pBq9%4zG?2!t8OO3p{#)%O?_0qOk7B$xTHuv@}RSD zf3#Hj_D5`Y1xi@rG<654FnV?F#GIA~p#>_oq%u)NKTY7y7X4MCtosYCUr}>~ukAc~ z=Vg1n0t!`p3yclOyG5TX>YG> z$sVRMb}B=N zU#j_&s{Ak7;1l8tncNd6{zS|R#!ggpVO|c91J{T0th-E3SJk3*i1ZI(;gGsyF{KjH zRO>7n!liVzIfW`7>RghJySho0WjvWvfXYCc1y1tu#5c=) ze#H$yH-oE~h`Qlk^*7?$ExXOWsqQnne7Z|=8=2R~d+Y&i(f`eG6|;AAF^0cnn8`D= z<;V}+l;a(zZYLIt1M1j5#gx(g&ko50*E5pimR-bn85Wjx?EJNYpQa8Aiw8diZgb^j zo-9Pd&j3jWGPFA6?@%CeuF$9`;pcrwB9)1WK-`rcWN_d{C^f90<3W$7^_2uwcl_t~LET>WcIdN|Y` zr^xV-%l}f7gRG0nxtmN=Y2kh)$_W)64=jM7MOxmp1gxAhgP3($qUi5`mZH<4*H4X~ z{sm40ZE}3^?YF(Ak|aA3hkOFiGXQbE3+m3+*t6qK!5_oPybs8eGNDMbH~zJt937&E z1^VlBpZ2*;54I5TkCMe{CYl&bKPi#oI{xvI7~W?Gv>9J+-3WY-ub5-hN_JoK?~1;m zhc`ta!NuPg`^XC(F?(PB{txa_?iagAxCYbxv;HX(Uky0Tp1`S37&;fzQrCC88roQ| z%Z9Z(DYCERokAyvI0S4_!Mr*^pfl%`gKY;noRW)DOXerxS7R;Cc8NUp!8v|tf*|-F zeEQWmfi?T+{R!XZwdyDWF4oUadp{lE`=t_qA8AwApyUH8!;m1Y14cSFhMX4N&w0r) zd4F^B>enVUMJns0&4P=%hWSw#Q*LT?(ZNf#hL9A&Y|`@zRbBo&-Lo1KlGml5R|hPJ z=9nVE?aC(gimm#GgC;J4_{P$Fym>u5eZg78^96eLi|%uZWg1-edWpyfJ!e75$+pq3 zqqAhN^bSy272twX{P)G^xzFRPo(BW28&jmP2wRteDX^-9zIC!kiI$ zBn}Wp#n;-xIz3l%tgMW|b<@N<2ss;dWHT|E0@~Et^UDDDn)lpv!M%oF_yGc ztMOI}HuyBpIpaS9ki372w(2P^2Y_IKzVA|bS0KpylP5G+2F3J2- zTSW@*n0H8WXf^eEqQ*uj`*6hA7;a}Uq@bOo2h>yFWTYn}aesK`yQv~$sbYmg0c?B% z2><8hh$(Ba;lgHn2LhF}5Sq3!LQ)cp_(I6KQ9wz(R2xMybe3x>>WUzeWXqruEIM3^ zPmS-i;EKQU9uJ>PdlcN9e#!^U$}=o3SuuYZ)&}}`y2y~yOsi%kl3A^GdxA~ySXBc! zZc*No$`~0)wb4B7Je}z1xSaiA59kb1^eEurjt!!7EG+ewlxmpFnSI)XO~rkjWi9w_R2)-=CK=Ah6p1bA=M$nUeuy$?~Gt)@KY^ zQv5k*s8s1j+ft~3SC)IojOefpC`Y`Y(k-o)o%>jfbX3jrScWPYLb+aT^t3K;P4b}= z>*#5-NFi43{o$Zj+v;H`yZ(4TSn-Gf#w_EPF>iN$m7&GI472OPA2p2UK+4S6o@r-s zqLg;{cVcbjH-!LzCXrJsb%@O6Db->yhdBwzq4!Q zw{)J_7{+MzgYE8_N@Q*a=OYAcU&N>u_N*&$GIEH9AKISof3-Z0x%r0^JS|?&O>G6- ziV_-gvY})jXVFS*8Wrmbwc|%>NQ;09xxK2498 za!TEoz@n80U5nn>afH9;mq^?8s}?w>g5xG7q?6MeEDRdh0`2K_q*+@$w&x=TyOtmx z;ucUpYhzQWNql}-QSG5nAV!%{xtyX^AcEp?v5AU;ubT8OG7FS`^7vLENBUV*$R0=b zJ+r`P%$)y7y2^m6nkGzlOGyaQ-3=mAf;5OA4T5xccXxM(fOL1abW1l#cf{Po-5tG-u@sk(2(|}N0RWe_ z=#w5pup{;vnu$OEfdu)w(FJ0JWU2CDIZojhWouUdvx#i#I{=^wEkrg|Ag!q~*b zi}&o{Q_-JdRZo1*8Nx3k@vIRfJp+7&(`n}`dZCfvL!dAF^5Mz=?d`s(pm|rLaXxMi zcLS4x#cd&=G5f=0!IIYS1yCQfOkRfWG(PW2!%8bI1}broFFnps0)H$kR)*_pGVu0v z0p@=3_mA(>wO0bM{HaA*m#A>A7jZdE3kqLBhy_r9lhrQ|H>{Nw_d$pfj7I;WgN-!z z5OAR4YUZO3dOWY+(c4Ji{#wpYlw?JXt%)y$UjbX8B$+uWwb%4FadK`4K1lqZi5Xc=E9?AO-{qW>{ddE&jY*52~mUj!%`fZ8q~su&1s>z{>T zptMY^2q)dd;D605ESx;$a6kbCX5;7VgrvrhzR`CM8Kx|kCjp&PTpb8K*cF9M_FqZ_ zoj3$g=iP)LeX(r|9RCqqKsAUJ1XZTtfe(SwaZU_D5A|kHy*ebJszl6W&^NA6Fu0uOGGoG^y`C)d<|Z zg#uqcP7~i>gddki2{-mFuJch1XYF+&+W=$Gki&d41>BsRkfPMqFvv?VZLH2dG}qWf zbGcA5KI?(oSWn}p_nSw;x2&Ka8U&iIXU`>(VutFYB8E6`F60<2O4rm!YW^a2~` zU*9Nx*h=-u@eck;elgt7%?L>}2i<$T*oFfh)c}*HY6~)%p#A;N-&^*X>Y}+0&C+oY zN$f{e3x7o0pjO2@_PgOre46XyevQIgZ*X4> zX@!H<)wO}hEk?RY^>FH2WFaVW4SOL5V`7)SvD093ehi^mQ5x8Qdf7KPAu_AkW3odu zz_sowE6Vh2F~%s$?rF@+1!*|GJCu5#4J2PuU4Lc%i^Fv_v2rXh&ebabsvmh?7@P5F zQIC=E9kY=G_HzTSeY`xN5&`Yev3gitS%si;Bp&W=-VvjwWa=f2LUXWw-nr4V@uLf$ zZ5~z#DEJtCiPPC_6#0Qyf8`vNK=qHuC*&AqM$2vQ(khyD`wO>5;`#m|08LCF=X$$t24oY=UI1f68EWZ)j#huH$Af zg@O!WXLTXNQDrcQ8KNHE)QuPo-Kse9(G{r1+?3ua@2wiaiQVel$j$8^&xmOC$)oU$@Hek&yEpO71(l)JP6zf6fPmX#clst#=^fAldIUE_A!MT zTb^}h<;P!agKFjq@Zb+wj5q@D18+=_}* zcS0?^26XWIaDNR9(PzF2Ra-n zSo(-)hoBy8<%jkz-#EcNxvYSo&-(n7WSjF{8K`O!8ZT)|C+sP;5m1jC)M_(L;b()Z z6agzhMNfZ@=UqtMR1+oqkAcYhmG2$Pqz)e>9sXRBbC(i zSNtBsrF@1dH1g`fcVFt8A3x9h*q0^g;(wJur)sD;uK2?m#!+7u162tT3X=8!LDI1WHxor6 z4Q(oDBlNYND-9(BV@D?@`4di-7HN<-XlKR7$OtF+alxzB4_!`Hwa5d>Sw9ihy*2sf z|2L`D;w4XLD{<<4TzJ%E3S1yOKM>!mf2r<6jEgRly!D^d?hpLD>~r}lvI4N?(UW}4 z>a`Rup7&QTodK5$0Q_68t*8le`Fnp#`F47Jo)dN~VN7EGO8=JLx5{MaS7f5}GoWB| ztV7=0I7ysVyO{3)ab$QK#xD%zrQ|MGA7K(YT7H^L?SFL5zCb~(uCXp9(yM@Q?pM2l zqa18LxU8IartvIl9mDZu-IVu$RyL#5=M?z$U)Y!+;ih&^B~1_6qMAb&eXj2GmLY4^ zNLhcPI#ZtU+21p`L%&943N5my`xSalBib^(c>U z98BMTC~<1*yR}f&(;ZGq#Si~tmIgv^x|ID?bGI4)<=&CjfoeDS%S@#Rn>kV3%6EAb zc)2`~-yg;MsddwW`er91fDMlEH!cf)fGu4~Z$5z6NwoOggb3Z{?BH18#W7ZaA$DB$ zh4o%)t+D4XcIY=Jc+l$lT*_%77^E{^Un@1%y$zvtL=Q6lw?`jDcK}#x`r?kEm zQ*J%8VL+8pD(=PA%W4fp#%^sGW(LW75Lmz=4(L#FVnF)@RVR&TPyK%22t+u)zqkJ0 zzx|RoQgl|ie$T$s6;(^y)b73a8~PQ|qp*xd?SmArErSfOMWxw223EtVg_lH^H|lZ} z(!|;KZ>~#Z_Bc^E6(j#;X|?B8xjHI&(oe`nt}4`pLWP=?IF+>H;Hjt@pq)5ULBGwNdvj@H%oioK(4>Jju7GJ5A|e|rt^Hw58ohrb*yvgN{QUu&WBQ2U2oe~RIlK2)WWqj;8kNln1z?p>qc<|JkEo7w?SO zuJ5<(@Xv?Th-|5?fp$F%6=l`8!kn&?hF`A_KmTT`La9NNxmIQxmB~Zp<;d;a>K#Ip zl`iv>t6T`mBpFW~+Z;HMirJ^kF|F?L>lZe4&k0^WNjaCi@6 zd+9jQxEm(zH-b~zfG0Eu>)|bADoCla;SqEF^r$~K<)iz{+~(j|$~}-{GRx;a@odZR z{^vT(s5G(977@lYVL9v>==!|TOhkF8phTOukuo;-nzgfw41Nq$TLm znP}^-Qe$iz6mK5$FL+@N>50GP1!oh(x{U3_t3CO{eyFQCWfE`Mrn$ui@=mR@2e?+Z z%e(WwIGwmD?&p(-v5!4&6!;DXwh1a0V$zm?Jy+8YA;niOqvSUMgFa$6ohc4v^7#=P z!zKV;C2o-OE?P`eE?VtZR=D8WYRI(j$Bb^g_cP<@d)NQhfMA+zh)3bUtf%lvF87E{ zUZH~#LX$pqA5g*bvAghZy~N{j@EwN>f8b#GiV4~bv&MLiOsi2s08oK8R^&>-JOMZQ z48YgOKmUXh&^bg!F(1`>x=Z^8=1s_<%q3<~ABCz>m*t|g9IK#%gGMz|z)fKU|I>#YP(7B1nX!A<|Sd2L|V6mwKfsU%zw!*o-ZVMf%BfDphI7#VGkg<3S z7~6IS;J|3b^H?XOGW|K0z1G9>3)dQ%)WAdBLb&fF_InNAHWr=xaRO(g+>Dj&(;#;vGuy7*(=h>B&YYKb_`RoaRD@v3i0PEnthR} zs!~>jgBfQEWgi!*QR+?YM2_b9LD3zXNq^uR?@D zUh)xQr3{Q`0r1OVt+N@*l=CWX`%6kU_^HRRf1iaN+cO*Dz~XOMf_=cslQ0?|XousV=?m*%$GA%{MD(jX#^^M!8>`KKN8 zK_GF1Y%%n zkSt{0!YNgBtw~kR?;?a0CwZJVtAAAm-^CuZU;^^#dfN|1t`W%WhtTcLz{Nb$ZER^&PuM2?I05Z1-{&N&IYD?e9^pRs zA0Qu32OsM?TU7fyLZ1ZB>b=6ko&HkMc0lruuQ8|bxl5Qemk$tvrH*RMEmN|^WA~!# zUrYWB%){?Mky50o$PJDC6kg)EmPGO{4QeD?(C}zmj$oh?0k3!&a_}v!7Eahz&(DEGhd_kv@RVDTL?ntc5hJFE=qne ztA(fLkm_l!ozjpSHbEld!|$z)*bPOHiJ$s}$>QvrgC}Snv~=0Uos1Q$=rESpau8rg zDs{hO3^N%`*x94Y@DU&Qr}MGWN5~Mex13&Xi_&RLXPimUimuz8-X0c7iINr%kYU*7 z0#>kFzru-amqmWLIz$0yess=tH4ls0#JMGz15AO2;DrxBaA$$ZFYGmxjms1nT;a1G zoXzP{FA2Cw&;QVXXR3;jz5cpyT(A@J2InKYaz6&6eC{HUV+E>MXgum-As#!CBV**l}=Z0ASxnOl~tOEEBpaBhkD z$g5liy^IR?hpp&8l>@mCKhyS!?TvRrj z-d$augPKBk+_TAJ%=gHvY@TJW>0iF(=6JnDQv;{5f{(z|-uAbySs_i{eroScBq9G0 zuYN6!Njw(j3vqLHUg!8GqX`3JSt_+uE?!e?KKwHe-xtV^6sS3(z z1EzTy?Bxvhd$c}>1b>q@Bkfuu715u*{);~=1I4N_S%v)IbD+o>UQAXUSwm6eE?3nK znaq9E>tLV$2>n;UMBXybL!?v}0O%EU+Dz0j24rIe6kvOf?cDR1+9 zqIhe2TJ>?h5qUaOW{lA?`qRpXuO;5#&QO_6EW9UB-h4m3qJ}nEr1h=CL0B!`gOStfI24gJ@9n`_5dd|Rp8>g`F1-GHe|_ll zbUr?f%WtyIM@4doo(8m*|LCW15F3u#!XF_* zP9X~W$_C+J9Q(8EQ69(IuRV6o47RK-W8<6Qs6_~R?F;P`6*JDFIH(J0guBpcOTuJn zvx*B2e&(pxR)WA198C(U|SHe>UMveS zu)Y>63L|R?dUJ*K)UAnEp7NQd!>_RaPVfX71EEYe&T5~MO$>OAInD6U%Qbf={dCvC zwa@$tBnyzKct^-Mh6Eoi>V<4F`L`T7ZNo!b3R<;QcV+Hg<8?Zn2|_c6bu0gUBto&B zH)Y*3sPqlo0!m}rkoQ)Wu;aHLV-Ap}6u>NbSKv!yADi#77{pJX6yLi|^L5aQ7xj-E zh}!{T3O_Ui)t)x1SQ`?v{S^ggkiPL;p^@d*RzH9P=!D|d!C=9AR<#iyY?&lTUzdA) zZgnZ?M6P-LP@UL%>iyYm6;Y5il!DRlA0VzyIbYGTvBtJM1alh-fEi+GlkfkDW30Iz zkCn)d)_Dq6J@mby?u%RkXUy$L^!&{mO!8$}1Iwo$91dwnW|m8wP@uAv&Vu6=BOg&_ z&x^PeCE<;51a1_ahp|*XTUfa5->>|iv}IL_bxUAunI-~7T5m8Q^AJUy-kcbU(9evX zqgtXv<@+e$kqd@-OvqH^mJpDPyv{$tqYe zTKr-yT8;S%f7M-PC7>WH5N;DwU3rzGnZtvjw8q8*`$~#u*6`N-9s2}_6zGtQIiIw` z>p(Xm{-BN3X;ph5ypz=2CFP{zJn!tj6{V!;GmD&(utTikaljvB(Xx0MqIV}(r;K#lwldSFSH&^lL)OW7SrcsI5i`me zYy&wTxRl`V47qjw3Vi9`v||7H0;a^^sv0%&9@z*9zFdiq?QAD_J&cLPWC?7y{17pv zwt^rpl&0(d=&G731pGRlEDFt{^AK`1jglLM72f%j5X8TxJsF9uabYBHF)s6xpL^zD;;W zXtT{fvX~a~3t$b%xkCBEqO77p94R0)yi5;i6*H_#_L2B|lbH{moCx2cg{Sap=p<7i zHbs6rdjAb01K961o=$!-u5~2KchY4NZ!wY##;?2>zSakc_x~C4W$&YT?nftU#$=X% z!}A^ey>Nqr?`a{UemvHHLBX0$2P@(KbNmrs9KocCCGUDi&HUfaEO9qQkra7|%{jmE zF6AXz1J$8#ti~$>YOmz0le=|c7#K#TEQ=&2ffMWRMO_#1>&+!ZF`C&CDtQ&jq2Z5_ zhF9C4>t*Q6*Bzso{~m7v8B3nVsTfDgCAs7DfP0dLCdmW5)4q0Sm)QgQ#lMQpL#3Pb z8-TbZ^4U8{^&_$hrang|HDV{{zA+nUM`#yJXMRe-#f>MSzxFR3h0-1qfb)iCe(}i} zvhpr|6-z6S@TI>rdZ9Up!;-jNe=e&-rv$r1t-v#DvqpEbGCJ-b!&)@h z{e+!3+3Xt1RL8B&gaU+Bs)CKtby1TK$46V1MD=s!-f=A71V6q8 z^8(kX;m|xR+3z4MDFW9|>`3*YU`_k|;E)_^5V(5pb8&8anS>(G_mDE7c!&MryYMD~vTeY9;)RrGI z0hSbw%LyyUG-UakZoN*2UN3Y^Qqm1c`a5mcjhyd%nm`fnV{nEMA$T{YkD`L)RgsJa zsY-ee=RYkZsl?mVu;Mx@Ym@{976g%`E#aug{9L(~L1$fwxnx9U-rf6zd13^0ja zx^w9EkQ!?ShJ2+EV2;x4Qd~6W{)6G_1pCXpb&v-*WAmAoToX!e{_^hpy23$b71C<= zf>s@Ncz!D6rmMWeJQ$YvR|n-D9`Z8Uhfx<5^+8q$O*0p-f1A)-S7s*bdzU8b>=9~$ zgaFCigJ9Dd5e5gFUC_S`L_)DFZ&^}LRU@H_h*t$yx|IASHrVoGo+J@Bno@|dkKJnk#5E1DtcqIp4G}B-wysmh7&2+3#3so zjbf9pr)E=Bz75};E-O@=z0(p{6{L0SUSiAXJe&@?jrm0&l*yWzz!+d+?R_PsB?rednzD0gH6Znka5WWXVzNQljUBN|06WP;Hh0CDS z%HDoA?KrxRysxMM8L7dBUYmzpbZ}%3rckhl2K~9_oY35YzLMP)#u>fk(%d#kbGK5P z^^03*XJ%`Z#^rD@X6dFL-fVN{UO+7tG*~)0JSu1OH-f*uIZMqvs?HncnjZ=hz7@yG zR1zRO0E1JcxRmcTs18hIX^|^U+|!c>aRkah{1xbR*V{~{mY@{klRoLd6=Et5CQcDL z^H5oz1GOYT0CyISk?Ta`t@!!KxTT_)IJ@wLATg$o&Gry2Rjd1SlaC9^{Xs=_QHDxccF z5MS&}VJF5}Fa;!kG(95Nh+dw*O|{IXoiPC$v<}FBs67yB;FRdY85P8D{5*E5K6J|B zfP%7e2VodL-(2cX7~;p%AayNU9)wi?R=Wm@TcN7)#>W>2neZos#^D-M7h_e9fKr}0 zpzISizN*~Ijek3_0F~StVPjFYFofoUN%Y=H?kM)m9BF-C_gDKV4-*G_SD|K4qzXD` zfEW!*I^B_jVQ^hN6Mn=xb3=4bM|`k0LCS!2g#a}RMz}uOR5OUPgU7L=WtjVsvB2h3 z)|_j2lDL(&eLXT=|H|>-O3dYE1#Sqqp6?kFVha1l2ATCGd=vz5;yK;MFfRQ87_ zOi@h+eHlDo03eI@ETo%tFkxhe+-Q=k0r_m(gqa$-ZK@^S)nYEU3R%T1x*{}M!uvCQGHA_qH>xc}RM`1vHPq;(~e zqPI#pMe_$5$E?h9(vuNr#R80fq&cfA$c7RCqH!l^XKKCV2)XoqTUcauD$vGtBQagB zWQz+>Wv0T14t`d97YC~^V?M0w11>mc<+874y4KHS(QL&wf@gt+eeQe;IFNC*dBxq_ zrJu|NG&!D6=;fzBU9AOBOCwrg8`OM|JSyU++X4f+bZ?$x*DrC? z>dHxFq8x2W0K6_4kis7%pR_(2B*$7WNGyEjs(2rXbH)}{txpIM%$IGwDk+TgcgDxk zNGJDk(f>ffhn%DUSMo$E_T~^jOngEhg-!Gi(5dqkPTR|1~}_<#$8Wl zexF+_gr9eCaobg0XDVswROUZSBD*!_cLDHy%!em(EHGXa*!nacJqO+ffu~=*Wf>ehEAu0U-ZabA^O5&|vYv0rARWGP8>(wnctzeYv!4i_5m&_7nA|7r>Q9RI+hy z0y^RElAKC>OCRdFx7b3pVyGlmpy0&?co7nd zx-5xU*;=eOdTB3^_B`Vs21<+?^C4J`3FsgaY@GUoRKh2gW{t}~s8`N3{Bu!6K$f%( ztab+UJ0SDh-ysk)@c>F?bagPKr3-lGTc0zu-$UG`@39q(6r$sca7gNR3Jf-}w>?B8 zUz@JNu;T1}DbT@BQ7_3Ru0}(8E$W`Z)^IRap#bx?_&_g@>w5j#^&0&_E1F76^^c|% z^RwCVBVNWX+RK`(rzCvU1@QiW`*SA8x7;Y*m9PSMAY5eoXgG@S^--WAlPOBy#n=b5 z6PLxI&u%`mCxY9hSRLhAk1v~!kM+|Qtb0A(WIIR_fh+J2)C#RvdGpE)D?HOW5QE{nI9fjirKWE{Of3X@ zhoV;3b_==fp(o3#+G~H|+*>ebY6Gn%D8g_wH->cHzS^epv#p>_I;&(ud(qxuwexRJ zw$k3V-%w!XBri~vhByN9`B8P1wiHu(&g9k5BYaC**OeHkk}f^kLcPi6N{dDMzCJ^M zJ(=NQpghbR+9MU&3FVC&CiN=mS#WtVjF(1EMz`&K#1+wnJqPlUAJl5=i>pLEu-5t5>G`|VqcMp`6 zP5+GDUqy71DNPRm>#so6;LZ^K@OyIBqwYh3udJtLnI=gUPLX-eN!+}85GLc+CK~hS zxoM?LnTQ5{@mX~v=<$_3tF5H_Xs&azIsaLR#79U~EdG=~EaL|@AG_jog}7T1GsZ;w zG?~mW4Tt~sz<_*;dllukb^8cK-8|PLel93!-tOuijHwouovb7IG1#H7ZT=D^jH3Yo zp)((bc)Vrb-(ju}pI>YSGsWMK;LC)gK!hncUW2h*|KMOkYGVw8FO>hxdXA(|t}BYG zp$Of@sv8K|h{UP|nO8qcAaraud4H~b&8#PSIks!%Qf(Qq;zJ(93+F296q7)jF^JkDHDdNoM^P}q;`7$NXlQsaK zR6qTcDK~%WR0HY>97vl*VGmB9Ld{;n;o4+#toK4Ldq2OBqqMgFt<@2D_;{-@htb-~u%;DJwfTjB z`=>2)9N7ueYUUW?yf<;tqI?A*|6xbpbj*GFYtA0ug$fN!sP>cCq@Yggksh1!t|y&Z zsx|*-1%yKF%e%lP7Qc862{#_`A;Nxay#H0;(?H4@HF0=}Ye_p+?7I~~6aIXZ!xJg|;M^*aQ1CM4AAth#cf(@&MidDmLC?0)pq$cPh|YYgUk zBp}PL?GG9$t0BZOB)xkU$eB;(9?xqOZ~%?AMxX%KT4h=`yzk5WQ6bx8k#GH|8Ol28c&gp z`+N0*ekEn|!H#a5&L=XB)ck_m-&va>S0?dM)S&wB4Q*J-3$M>v8}kcM($-()nuXH> z=l!-LeltXX)!kkP(KM)$1%xASonRmAjDcYnDkENsec@i{eViRv;EX(yeYE~C^Fujt zA+$BO>HiHGds&AF3aDzvJ z$IIhEv`$;ZCN+!L{=s3ei&Lk3Q}5?HD6DzzTAM1yZR{z6|43P*(5#sZzU5noQ$)Kqdq4ALykLx2Cz9 z8J9v#c*qGJwNQkBJgK~2-U*~nm+Zn(T77LT!t8}<^uooSqNvb-h=-Jv+C^cMkKaEL zsT{T(@~EZa>J*S+*-}ce0TYe0^e>%W^jtVlr6Y#J;TMEH;!^Ka5c=6iY@T(weoz#V z!{BT)(cyucg`3!*lwsEf0ChmsXo>!tFyMv0*?&2l3f8S5i}qMo_DeGY&4)gVFdX>cTq+h;uNr zm$H+EgDf|8uAQIP&)3ff;&Tkj+z%^fg*xo#svc)9iQ|BJb zlH4QHYj1#mbVu%sQ@0bIYX&z2fR4Wn>U~%`Im0yF34UbD+797-w>+G(bNa5oTyGD+ z0vi^t-XiFxe;BEH50+6nk@CS{)T<9Nj1p)QmqeLdz$(n?%U!4oFi*Yp2J23K zZ?|2H;@bccU3~t(R7U)&VB?^yet=iKM{KESzD`HypFax={LQEY{y8A=#G^S5ORZO6 zbIkHgZ34>tp7Zy%r!8!{YUvbl^SI->Vs>zJlHM?o=ZrHtIB1FWEo&FU(u@H1zopcL zo%|Y#Szq~PfU%#LJ3pIaSVGh4%YIwW%r6O_t0WsgKLFs*-#n3K#Ys^kTsexBeR*HM zr3-@OD1>EP4N%Kk%Ku)vS(SMzO|&$?VyT)tPsOF)VRE^DGbKAOVEw%3054SNs#dOC zds7ECR#K`s7#D=ev_o(9f;2waNn>%k+HzV25I`}@FEvLRq)o~wdfOHZRP(3mDJ6r} z69B{ph;k4A9mYm~YT!l^{P45tHiR$SzcOmMuYkm7&yJ&*ZW}G92J@{V2}54b(SlbIA(>OMngm$QoE6O5nZyjm${ z$$u;QPk)PoHYKj(woak<4&N&!ccPa8?!AE)urFC7s>6n=0z{ zJo^e(2&{kkHtvMyhNZ55py7v$It!c? z-Bby=_MzFR&^Bc!Y___1w#q_=c^n%=Z*XiT`}T`7>f51rY^1|VvWHP=E=hO2)V(?y z;PwS7QBnh?J?^|jBF+Qu8*0BR_d2>g1h*F|%{Xqbp(oL>=-p+#}%(f}O z`|XB_f(QT)bP7k>%84&@klUVV)XCxnv?WJ|ip9w(-qS$XE)Tf%Ij<}bNG6?Fe=Gf< z9e5d6YnD0ha{qe?iH&0H3398OP{!!H%fO0S;ku~D=|03)2VL2J*7wD`)mgkDG##_z zS3b;uAoL6Fj#u7Q6OQ`nfY+f+6Iy*ExGXp7f^?q`ZJnFjtzbq2W8M=@1=aPnNycpd z|5~qiN|nuOS>;PbB`wAQtM8thdMsuXeu<&|{O?OE^`gitQuG$Qq05OtF#W13$%u<| zpT)x#j8lT2gmOIskw0yvbsOUyI)^$2twhD5+8?P0&V!Rk{8AXr5mRZpu?6_1G3|8)bb?}3l# z-&i?mN;&ea{*((BeS%{pCxVkO&V5;ST-FJsE8hWOP1lKGggGoA~9`_j;p2oE{M zBcbN5^e-#a)}beR8T<4`Kqo3-^HadrroVuhB<>cvnVdQLx46FQ^!3N zx_*OInJT98Fi!Xw)~@ay{om0b(VpM8;iH~~X689Sd+yCM`FIzsXdQuVJ)fdT`$vBH zH)#9(p)K8b*8f7*V-TIN6DrwL`8QlgVk7>bnf(!{yf>*Pk5i=hQ@;KF&6_(`n#w(g zx(z-WeOt1BS3tq@qxnh528_G zU6u95)?jU^=rhzHwd6h-hfY5^FVwSEzw^$PQ4qlfD@Dz^C^G%pP>F`$?+{4y={I^2 z7a?s*e7)|o<}e`~kJ@g*)9xu|n#E#xVHvp(V5~PVv-iQF)iM+Hu5Yq0zxw{{a|ar3 z*q05xtz!rW*i`X4=A!!YIG2Q;3ihC)-!^p4u<_(34X>>C;?BMSEQ%pn+8!<$ZFFYxw&432>nfAl zJ)CKUf3N#pb$Rbw%}OdsHy@6RyDu2m1pT_R{~=Jy;d{5={JhtynvIZzj_q`)mx%Qa zI1+_$+({R0*hKX5r#K>zF2E2&kA|;3+4o0Rii>(T-cJDuKXst+%^4g3)K^`!GW8&r z!chX)QJxG0Eygme-1P(GD=1{h`>+nWn`hBVV?(j|aC~sMhWOLwEAFetU1p$E_^bB< zGSS{fw)p68%%-^KI6c9wwl>>;keA3w{;9w6Yc8HmWur!iRl7=#x^b z?GuPV+|oV%P(?cyKNp_T2+rs2nK4MY7D7rD(&hp{AEc>A^*h%VYZP=kDx>IKwhr8% zVgG4#iGq@}U-P^D@iEVDniUW!3x$HL-3PEthtOnHdE!VayaO#>h#Q=;1ju6!EcC5i zRuCZato|N0@ZVF4?byvYz=>~UuBr_U{0Rd9TiS$ayEI+yi9I#e; zF-NRdRJFh1Hi&cho&_nOgnRHSIx)7c^@4>c{$jH3#(e&iXwx9r$|4)WKPkP%O1nT- z0cZ;Q>$16<&XGoH7S}wuuh)JONM7v^M%&UU_kI7IqA?yGywv1WpAJ!Afsa3EWCDIJ zYPZBb`r;6&Z~kEvcdL7|S@I%#wb9J)zv4r%G%N9d?}=i!2vX}lDg+LB zhVz%?(k5`hC0u#ON%wqfet?K(~+Mk|~K z;Yrg2bQ{Aste?s%#lWaDt4Ou3%=Vx+Ancop%1&`({7I?W);i-D?7(%4xPw&?d#uQCkfBcUZNx?LWi$J2K)B zn$vtlLQ*$}HDm(}ZvDkvhK~{15w>vGv{7N2*cY}{XXm=qL~g%6UXjOzDak_I6zkXa zI)0R2()D9^b!j}+NaHvyS6Y?*DYO5Tzf4cfLDGl0xM9#Df=;)JCGys5?y0n$EpDw2 zw#mr}nKs#cf#ZDDbq#-SZ?1b)@P&3M*Z@8xLl~N<{hQUEzweOP(dLs?EBSFVw5H8 zK(j<-pOx)NBd{)?M$7*i5&@BJ20fqPjuXIIYq#52Eq&tPKA0UMlXUEz63e>*mdb&4 zhW);gFsRnl(Nfe%GyD5o@9q==E_I$G#o?IExc+GCsDn;>8|Lt>dJ2i4k3v{V{E(kd zTOXu=IzA}c@_>#zudN*V^5)AN>m5UT8&5C^*cxbaVFI(;Xv8C-!yBAYqhdO-wf8(bCe9@dCGS6;#7_L(>V zQwS-7HySqU-F>%cSF+Q)Q3%c2J`q%p7A!KsihR9Wk~&+MQ}+zu-!gn)HovK5HbtB%IhS@ z`Vm|H2nhfB-9o3QqztZtn?PQF)R-H5VK~AnI7Veboq>;RE`PkC87KlA8JIu|QL-=j zXW{EJPQuiSE3?chlZYTqq6IyupYy(TaTO@o4a?!ddEP4X)EZf{JXiQn`0sdb_4cO% zaPwC3=t5uolegp=-69^TVSk)CRQgFoO+cdTCRS5>lN(?9T6qUF-|cQfk3YCt*i#LW-*yT*B6FdLp~@a@FHX9| zW#1xS*ylRLv47{}>Hee!832PcXq^9HN2!Xf5fF3K^3}qD#)8}V79(5cfMJ-bopIm* zk+vJisgg~@_@A8eEo;!B1s;b(iS4VsL6eckqeQ2%rGYb~ugP*uy*XZyMSB&sj&hn` zz0z~@rHgWhB+)5Lxvw7;zCmc-HuaZNsBJwqdrtBTKAzzfLUmQ)M%_lHf4HF1KQ(Ov z7aX8REj8?C%g+Gt>7oNZDX~x3r$~;rW361@!KqQ>m1u6?|$U!oiJretXFG z45rZoMUueSC~LMpiq6m+?mQ(*ejN;P52&$_GzWO!L$!LCbrcipGKH}vC3p@Ml zagt0-*`u6Kgu_xkpHohN9siDa-eIaHI%A}b+>bV9Cfd}|ao38%nqENTJ%+5ZuZn>z zk{>zM{Dnvs|5!zkP&(-n1j;_m{B(ZOiPl&H!hrPohAorUNB$bM@h1Z!fg?ww+$N}0 zT`5IC2W|b)lpw-!$DZ^dQ2LRW=^w9VR?i&}vX*f08Ju!!D9q3wksrQer!*O7cU*9s zoO!MoJV74toGXjlPCi-s!&P1l>#-D@%9D}f!GMnSLp!J`kD)?inYHUf$`PVXb^CTPNc zP7BL;D@>w=`P%EATX!ar(z0>1A7IUPG{O-p=X^oJeX{)mR!EjsHgvcV4l~04a--Je z117D4Kj^cHzMUU8=%(a$U*>&{ki_3J$>cnxRz%T`-?gOi)99kK0@IUt?s55A~%z(8wTd!@B%R>Wy+WhmYBnn#k)?||Rww^E)U`dO6 z{1{fh&ZQdU0V=oei`YNIzPUTc@pC-X$x%9IRQli+bTe4J2kD56<9iT2fK-RWAdqEL zhrg4fMuJDK_zv9`M&^D&-XIVtl>>?fex+>x!rL_a*H@>EKRqQ*|G{!y?-TH%obQg8 z5|4jAZ3A~XQwO?6&rd58t$1;#S}f}5%FAt23l~Q2XDki@Io&*=T)3QV6N#RS*yT@_ zOCM3zz|D?Pf5-aZwR9S{&y1BvbQ*RrBlyW1;+uf zXx-fXbq+aBwciMN-wMkQM0+^C?Q%G9_y8G5^%h}=V^CX!*O}ON=y0hWltSXE@KId&5-CxwRnf`+CWPiuRsSXTFna#@M!8}OEfOR^dU2bb zDX@s7yh?PRBxTad!M4u;_|Bpm%&)A=eYDK)Zw85cQ)@;>=>Q5S^&Q}*d*>yCL`)MW8@l{b?hbQ zmR~%ByM_1`@J0E43E$qI3wQ2pXLQ-lvmWfQ^qh%0yirrvwzL5CKy+pC5(KBfAeJjZ zXLl-Cj~v;=@!kr%E2Ha_?6-q^X6x!LzaF_hfk2;k?*TH7$WvMhjrqANH2$A|#(!tw zlcYwfyHipi94NLk)~>=6`^l~qB<7Cz`-jn}&W@`#KWfG@HXSBNgBsB-P~k#@5Pk0r z8 z^GSlYO=xXEAo{>3 zr;q*wYpS~j0UJYW`0Uo;KxPD_d|J94x;QGsgv5H9F7RRdcLO29(lZ7^C ztFQ?o3NjpWVI_LKQz1kP=43iRB`Y&HiTw*YIsg_fC$<%VZ?Ot>GRO4I-JaAPPa~=U z`#7X8gkV6LH)HnDxat)7{h`<9uMex9mvG8q#wEwkYxQ7l5@1i!Hxq+HPg`d>WweUs zkn2`;lhTonxt6jM65c;x_>~!D={Z};H^u0Uk?DBpTAF1{Wkt8y7jOXqdyf$q&|iWV zw%zhB2^sH-jp{ji{k-3d_KXp1IKSY8PGM39NMee|D7a9DKj2Fv+7)1y zC06qdluG`&H9m(@zCA~s24ujH;G8n}5d%MoASqf#mH4nmN#-jnfM5eiW;ZE8=YI0u zYhXRj{IhYEEr=2Qx4Zx{#nH(t<~5=zd`hnV2Ngzy5tSKL4+m>ytzsNA-L9BsMIDO& zBk3pus%n;WcSv`4cXvxSNOy{a(%l_`ASs>F-5}B-ARyfhQqt$0`@Q@3%+Aiv-QDTg z@85+~WMcWDP%IjLj{SYQ&1;;+lqRTgC2lXan&70^^q3va@53HDIQ0Qj6Q89)f8Xy8 zV$DtxQ+gmUBNShM8%)`jLfL+Sj(d?kJ(gwF56+(iF)_@vb0X_R+i7xGg zRj2=2mFyN^qUd?~9jm@QAOh2oAO*6_j)>x{=+aKU3G%)2q#_ljBuxhc6pJTQv*kUh z?z#vG2+TH0)rXX4fiXpFqdNx%SO((rBTrWPQ3hHGA45%fx&KaU)3fKEiwA!$v+lcb zcCsrY#>qe^xNVb$Q0ch&fcYPm5Ionh4smOv6F+K$26=tTFytg-UyY@;e{FnB%T&Tl zk`5q&J_b_oFF6(uU>|F^WI8_mXVD;qU2QSiyTAQu7?{MPxH6Q%i%=0FB|81|{w%R? zLa_mY*~kWAp^VP9=H-4P_?#r>sX;xfB0%WZaho*jA{vKpXvF~DYuxor*z=haf?0GQ z(3>6U*ndlfDwy(ioB&tOK?LHFA?VuXD>@YrC2dMdX(71y5>yqhlLi5S^D;v{f|wE>AnO0KcHjYq`6#pK&B9J9D<1_v z0}9!s&e(_qWH~Qs7fs{lH7akWoIm|}CVzqF!S4N6h!!LN-qC;&Gd3Lp)01q1K_b?2 zz+Ju)>K2Z3?xv@*u0vVU!@eKTlr9Om%MQ8!|bRU&Op zRG;=L3jH1k!VMSEiZ~@a$h+LEk|iDTG(rQtT3~|$i?+OWxIcf6UAKSK1x9f^J(g$oqw+jLS%h@muW4) zJrC7rn|coQWeS2e=*F@AYgBE$ok8g7)po!@a?}GnJ|lv0wVM1Lf*;r(6a3Mo{xZ>R zAAyz*(noYmB0uB~wh7}?EgWW`W2ZD$4(NqQhndi^orx!}g;)RHe!A28`WMAhgnRv0 zX`lZDr8VLYHX!&+crj%)!FGmlR|3o1mCdkeGR^FRW_r5Ff0-wq3y(UA8NfhcQ=ngZ z_$aFe7CgPYEX#~gJ;@_pplMg=WABUJj*9Mj&$)yZcjp$?p9g_`bAm4eKIMCwk#{Se zN^zm6qYg)iQ{RT93S0zF&XCcEdCE-zn2BV#w@iXEe}hJW> z#cNX%fT{{kz2wRuEwFQS>VP%nSPzURENNiXyXI;bhg?3e0Um&zQk0o&BWpdKf=86# z@46q<)Ya<|_QB20{C4-L-bB*g04?XSu0(JP?=Vpxn~pdHhPG!A zuA9Df!2AgtF^iG^%BBYA)#@*oIux$kiEXVsXjp=|N#1)3qp!#0?`=(b9PG5c^l+hM zB!8Z5b!FZqq{MK;c*gwzs8NW>v%?-_w<3GMNLZYd?OW-0i|UWo)ZrLGS<&eO$!OgeYDt_tuKMVGbJ{O-k!zxuOxD0fz zv$9`AURmBjsiQi)O64nyZ|gMBA|b4e{{;;($~IYQ8e@^NTE%#ApU6US(8S~D<0K#W z@pjI!_-dX{;|%{1zEVF>Bb8?u7c}ksP_QEUsNO{mJ>X8W?%=0F(R4IHM84-H35Lv z6TMhZS)g}l^SZtm#mt%@rbJ^(Vd@~5@+*%K(iJK8Gjyl3QkX3vyWFXw_r&KJ41FFD zkQau}@}FEh4s^&0CI386FVOE#y^B@?58*xDl?Wjz%sq^8zK>W?)E~atU)@qkan@vZ z@{m7bL-~r$xZQ`yuY{BA?}Li`Wyk|}TheukJZIV9UhMWah|AS5?jCFO;sVoEGTo4) z-)fN4)?c9M@;9-L5KyYG?b}1`v%s4lJ9SG~ATa>yr@)uIzdOs6rt^$S5!zKy%BZ+P zQ&;^P6PylGy7si&5I*F5-F=}g5BxWcHb&C;Am_C60JG?7Muz)%7eNGm1~__dL+oe% z(ec#S+Bl-eQGflZCmt%sn;&^;@2(%LhysHG04ux4FU4Bxq**jSmp?^d!vANCn^)kY zY2ol*RvX#Hbm2$)@=&1CB6yq|j^JB$KG->Zfgm@aD&zKKYG)3tt=ZQ~)>q({qEOY2 zwW&TcvqpU*MaE+$3k4|tOH4q3I>oxz&g_z?>X{h;md-tTBDduin(+CT$E>$z(_hh{ zFbEzhEy|><1Id8i*#S#&_dq;6a+{c8>v%RYh{oZ${C(Hn8>3^i9#(vJhmpt-ptQ7Hp?SgtGfMj#0Z8dZ*JQLsN&7L* zKaWg>o>l{s1kD2R&$AS(isog9|J@`b%f!OHL=1oNMD>)KgC>H?+CnoBR}#KO%)KG0 z(X0~$aXcFRFc+q{^Yp1KPG&MKDqddegn`a^6z#~1{x3K3o@@KXBPYOs6>A?i3ndBd zf#_fCa`fegH3+XNh8DLfzM%5JnyY%k5w;(|6_`gCKh2-@4$0>|`VRl+{QRl()6tHl zsQ_1Z694zq5pDsZP{+o}*axQTvQNkwyMLr*z{7ZgG%3Y|e4@-t*vlSxI$;aqcC*em z@qd{X!p==z|HD7Dv~b;h7gms7G{XJ?>5LOzF8JoUtAa^#M9Xjigw9V^{{=P)RsV8G zZ0NIoSA4k^%ui+Cg3*kYsMgdJaHE8>iL(2#AX&W^iTBkW`fRA#&kw2-HJ5&h=Jleb zd^q^&kEjG$vcmh?d!Apt&~VXa72UnXt6%zxK;%Kn8pgp>gXv81p?%oA@Sl=waC-I9 z6$;q!rz*a`lV;%VFo%V2jAQJ6CmOXZp&>wTetW|b34#DZ0zttRxL;&1+GeY* z8tZaWhxmRHAEBKhqucRwvt|E;fik!Zdo69Gz6m79rSp8AZw~ZKa3`L~?$zQC+!;kA z+ZFk)ORf`cmEs2W-AII2-FVW(PLcZ;y?zqRR!W=@)CDSA&yvWu7rDGT_WB7p=2>2? zs%@l6Lo@9sf$#nk3irevyCkdQ%Ge}j@B+}86#X93D%;26o~YiJdQ`|Rp9M%8dclbaL|?qnYIL7H^sEdc>%fN8?DPMVb^He{My57 zCfinm#){u0lLHK>Q1H2I2;ia9hVjG

A%50Z6YX6k2J25Tl&OPLeoqkG8^ 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

XdNqT1|BY#`@8ycBXsWi>~ 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 KQv9rgfBz4g?OGfF diff --git a/build-stuff/readme.txt b/build-stuff/readme.txt deleted file mode 100644 index 516ad97..0000000 --- a/build-stuff/readme.txt +++ /dev/null @@ -1,19 +0,0 @@ -cLK 1.4 ---------- - -Built by arif-ali from xda-developers -using 2009q3 of Codesourcery Toolchain - -misc 1M -recovery 5M -boot 8M -system 90M -cache 5M -userdata remaining - -Thanks and credits ------------------- -* cedesmith -* seadersn - -- 27 Mar 2011 diff --git a/changelog.txt b/changelog.txt deleted file mode 100644 index f932ddf..0000000 --- a/changelog.txt +++ /dev/null @@ -1,15 +0,0 @@ -1.4 - - nbgen for making .nb file -1.3.3 - - small fix on get_boot_reason - - cwm off charge fully implemented, inspired by dan1j3l's code (http://gitorious.org/htc-hd2-android-libraries/cmon/blobs/master/cmon.c) -1.3.2 - - ROMHDR base addr is spl virtual 0x80000000 = 11800000 physical, LK will relocate to correct address (MEMBASE) - - save reboot reason at 0x2FFB0000 (ramconsole - 0x1000 (PAGE_SIZE)) and @0x2FFB0004 XOR 0x004b4c63 (cLK signature) - - added oem cmd to fastboot and oemcmd.bat for PC. supported commands are: - dmesg - kernel debug messages - smesg - spl messages - pwf addr len - dump memory - set[c,w,s] addr value - set char(1byte), word(4 byes), or string - - \ No newline at end of file diff --git a/compile b/compile deleted file mode 100755 index e364460..0000000 --- a/compile +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -[ `which arm-none-eabi-gcc` ] && TOOLCHAIN_PREFIX="arm-none-eabi-" || TOOLCHAIN_PREFIX="arm-eabi-" -export TOOLCHAIN_PREFIX - -if [ "$1" = "clean" ]; then - cd lk - make htcleo clean - cd .. - rm bin/nbgen -fi - -rm bin/lk.bin -rm bin/os.nb.payload -rm bin/os.nb -rm bin/RUU_signed.nbh - -if [ ! -f bin/nbgen ]; then - gcc -std=c99 nbgen.c -o bin/nbgen -fi - -cd lk -make htcleo DEBUG=1 -[ $? -eq 0 ] || exit 1 -cp build-htcleo/lk.bin ../bin/ -cd .. - -cd bin -chmod +x yang -./nbgen os.nb -./yang -F RUU_signed.nbh -f os.nb -t 0x400 -s 64 -d PB8110000 -c 11111111 -v CLK1.4 -l WWE -cd .. - - - diff --git a/compile-all b/compile-all deleted file mode 100755 index bf6395e..0000000 --- a/compile-all +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -export ARM=$PWD/../../../toolchain/arm-2009q3/bin -export PATH=$ARM:$PATH -export VERSION=1.4.0.1 -#export SIZES="`echo {80..150..10} {160..460..20} 250 350 450`" -export SIZES="`echo {80..450..10}`" -export CACHE="5 44" -export OUTPUT=$PWD/../cLK-out -export O_ALL=$OUTPUT/allInOne -export O_ZIP=$OUTPUT/zips - -make clean -mkdir -p $O_ALL -mkdir -p $O_ZIP -rm -rf $O_ALL/{*.nbh,*.zip} -rm -rf $O_ZIP/*.zip - -for cache in $CACHE -do - for size in $SIZES - do - sed -i s/DEFINES\ +=\ SYSTEM_PARTITION_SIZE=.*/DEFINES\ +=\ SYSTEM_PARTITION_SIZE=${size}/ lk/target/htcleo/rules.mk - sed -i s/DEFINES\ +=\ CACHE_PARTITION_SIZE=.*/DEFINES\ +=\ CACHE_PARTITION_SIZE=${cache}/ lk/target/htcleo/rules.mk - sed -i s/system\ .*/system\ ${size}M/ build-stuff/readme.txt - sed -i s/cache\ .*/cache\ ${cache}M/ build-stuff/readme.txt - make partition - pushd build-stuff - rm -rf $O_ZIP/cLK_${VERSION}_${size}_${cache}.zip - mv ../bin/RUU_signed.nbh . - zip -9Dr $O_ZIP/cLK_${VERSION}_${size}_${cache}.zip readme.txt CustomRUU.exe RUU_signed.nbh - cp RUU_signed.nbh $O_ALL/RUU_signed-${size}-${cache}.nbh - rm -rf RUU_signed.nbh - popd - done -done - -pushd $O_ALL -rm -rf cLK_${VERSION}_layouts_arif.zip -zip -9Dr cLK_${VERSION}_layouts_arif.zip *.nbh -popd diff --git a/lk/AndroidBoot.mk b/lk/AndroidBoot.mk deleted file mode 100644 index fbe0527..0000000 --- a/lk/AndroidBoot.mk +++ /dev/null @@ -1,66 +0,0 @@ -#Android makefile to build lk bootloader as a part of Android Build - -TARGET_BOOTLOADER := $(PRODUCT_OUT)/appsboot.mbn -BOOTLOADER_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_OBJ - -# Force GCC 4.4.0 crosstool chain for Android builds -CROSS_TOOL := ../../../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- - -# Remove bootloader binary to trigger recompile when source changes -appsbootldr_clean: - $(hide) rm -f $(TARGET_BOOTLOADER) - $(hide) rm -rf $(BOOTLOADER_OUT) - -$(BOOTLOADER_OUT): - mkdir -p $(BOOTLOADER_OUT) - - -TARGET_EMMC := 0 -ifeq ($(TARGET_USERIMAGES_USE_EXT2),true) - TARGET_EMMC := 1 -endif -ifeq ($(TARGET_USERIMAGES_USE_EXT3),true) - TARGET_EMMC := 1 -endif -ifeq ($(TARGET_USERIMAGES_USE_EXT4),true) - TARGET_EMMC := 1 -endif - - -ifeq ($(TARGET_EMMC),1) -TARGET_BOOTLOADER_EMMC := $(PRODUCT_OUT)/EMMCBOOT.MBN -BOOTLOADER_EMMC_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_EMMC_OBJ - -emmc_appsbootldr_clean: - $(hide) rm -f $(TARGET_BOOTLOADER_EMMC) - $(hide) rm -rf $(BOOTLOADER_EMMC_OUT) - -$(BOOTLOADER_EMMC_OUT): - mkdir -p $(BOOTLOADER_EMMC_OUT) - -$(TARGET_BOOTLOADER): appsbootldr_clean emmc_appsbootldr_clean $(BOOTLOADER_OUT) $(BOOTLOADER_EMMC_OUT) - $(MAKE) -C bootable/bootloader/lk TOOLCHAIN_PREFIX=$(CROSS_TOOL) BOOTLOADER_OUT=../../../$(BOOTLOADER_OUT) $(TARGET_PRODUCT) - $(MAKE) -C bootable/bootloader/lk TOOLCHAIN_PREFIX=$(CROSS_TOOL) BOOTLOADER_OUT=../../../$(BOOTLOADER_EMMC_OUT) $(TARGET_PRODUCT) EMMC_BOOT=1 - -else - -$(TARGET_BOOTLOADER): appsbootldr_clean $(BOOTLOADER_OUT) - $(MAKE) -C bootable/bootloader/lk TOOLCHAIN_PREFIX=$(CROSS_TOOL) BOOTLOADER_OUT=../../../$(BOOTLOADER_OUT) $(TARGET_PRODUCT) - -endif - -#build nandwrite as a part of Android Build -TARGET_NANDWRITE := $(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk -NANDWRITE_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/nandwrite - -nandwrite_clean: - $(hide) rm -f $(TARGET_NANDWRITE) - $(hide) rm -rf $(NANDWRITE_OUT) - -$(NANDWRITE_OUT): - mkdir -p $(NANDWRITE_OUT) - -$(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT) - @echo $(TARGET_PRODUCT)_nandwrite - $(MAKE) -C bootable/bootloader/lk TOOLCHAIN_PREFIX=$(CROSS_TOOL) BOOTLOADER_OUT=../../../$(NANDWRITE_OUT) $(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1 - diff --git a/lk/app/aboot/aboot.c b/lk/app/aboot/aboot.c deleted file mode 100644 index 22f9cbc..0000000 --- a/lk/app/aboot/aboot.c +++ /dev/null @@ -1,725 +0,0 @@ -/* - * Copyright (c) 2009, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Code Aurora nor - * the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "recovery.h" -#include "bootimg.h" -#include "fastboot.h" -#include "version.h" - -#define EXPAND(NAME) #NAME -#define TARGET(NAME) EXPAND(NAME) -#define DEFAULT_CMDLINE ""; - -#ifdef MEMBASE -#define EMMC_BOOT_IMG_HEADER_ADDR (0xFF000+(MEMBASE)) -#else -#define EMMC_BOOT_IMG_HEADER_ADDR 0xFF000 -#endif - -#define RECOVERY_MODE 0x77665502 -#define FASTBOOT_MODE 0x77665500 - -static const char *emmc_cmdline = " androidboot.emmc=true"; -//static const char *battchg_pause = " androidboot.battchg_pause=true"; -static const char *battchg_pause = " androidboot.mode=offmode_charging"; - - -static struct udc_device surf_udc_device = { - .vendor_id = 0x18d1, - .product_id = 0x0D02, - .version_id = 0x0001, - .manufacturer = "Google", - .product = "Android", -}; - -struct atag_ptbl_entry -{ - char name[16]; - unsigned offset; - unsigned size; - unsigned flags; -}; - -void platform_uninit_timer(void); -unsigned* target_atag_mem(unsigned* ptr); -unsigned board_machtype(void); -unsigned check_reboot_mode(void); -void *target_get_scratch_address(void); -int target_is_emmc_boot(void); -void reboot_device(unsigned); -void target_battery_charging_enable(unsigned enable, unsigned disconnect); -unsigned int mmc_write (unsigned long long data_addr, - unsigned int data_len, unsigned int* in); -unsigned long long mmc_ptn_offset (unsigned char * name); -unsigned long long mmc_ptn_size (unsigned char * name); -void display_shutdown(void); - -static void ptentry_to_tag(unsigned **ptr, struct ptentry *ptn) -{ - struct atag_ptbl_entry atag_ptn; - - if (ptn->type == TYPE_MODEM_PARTITION) - return; - memcpy(atag_ptn.name, ptn->name, 16); - atag_ptn.name[15] = '\0'; - atag_ptn.offset = ptn->start; - atag_ptn.size = ptn->length; - atag_ptn.flags = ptn->flags; - memcpy(*ptr, &atag_ptn, sizeof(struct atag_ptbl_entry)); - *ptr += sizeof(struct atag_ptbl_entry) / sizeof(unsigned); -} - -void boot_linux(void *kernel, unsigned *tags, - const char *cmdline, unsigned machtype, - void *ramdisk, unsigned ramdisk_size) -{ - unsigned *ptr = tags; - unsigned pcount = 0; - void (*entry)(unsigned,unsigned,unsigned*) = kernel; - struct ptable *ptable; - int cmdline_len = 0; - int have_cmdline = 0; - int pause_at_bootup = 0; - - /* CORE */ - *ptr++ = 2; - *ptr++ = 0x54410001; - - if (ramdisk_size) { - *ptr++ = 4; - *ptr++ = 0x54420005; - *ptr++ = (unsigned)ramdisk; - *ptr++ = ramdisk_size; - } - - ptr = target_atag_mem(ptr); - - if (!target_is_emmc_boot()) { - /* Skip NAND partition ATAGS for eMMC boot */ - if ((ptable = flash_get_ptable()) && (ptable->count != 0)) { - int i; - for(i=0; i < ptable->count; i++) { - struct ptentry *ptn; - ptn = ptable_get(ptable, i); - if (ptn->type == TYPE_APPS_PARTITION) - pcount++; - } - *ptr++ = 2 + (pcount * (sizeof(struct atag_ptbl_entry) / - sizeof(unsigned))); - *ptr++ = 0x4d534d70; - for (i = 0; i < ptable->count; ++i) - ptentry_to_tag(&ptr, ptable_get(ptable, i)); - } - } - - if (cmdline && cmdline[0]) { - cmdline_len = strlen(cmdline); - have_cmdline = 1; - } - if (target_is_emmc_boot()) { - cmdline_len += strlen(emmc_cmdline); - } - if (target_pause_for_battery_charge()) { - pause_at_bootup = 1; - cmdline_len += strlen(battchg_pause); - } - if (cmdline_len > 0) { - const char *src; - char *dst; - unsigned n; - /* include terminating 0 and round up to a word multiple */ - n = (cmdline_len + 4) & (~3); - *ptr++ = (n / 4) + 2; - *ptr++ = 0x54410009; - dst = (char *)ptr; - if (have_cmdline) { - src = cmdline; - while ((*dst++ = *src++)); - } - if (target_is_emmc_boot()) { - src = emmc_cmdline; - if (have_cmdline) --dst; - have_cmdline = 1; - while ((*dst++ = *src++)); - } - if (pause_at_bootup) { - src = battchg_pause; - if (have_cmdline) --dst; - while ((*dst++ = *src++)); - } - ptr += (n / 4); - } - - /* END */ - *ptr++ = 0; - *ptr++ = 0; - - dprintf(INFO, "booting linux @ %p, ramdisk @ %p (%d)\n", - kernel, ramdisk, ramdisk_size); - if (cmdline) - dprintf(INFO, "cmdline: %s\n", cmdline); - - enter_critical_section(); - platform_uninit_timer(); - arch_disable_cache(UCACHE); - arch_disable_mmu(); -#if DISPLAY_SPLASH_SCREEN - display_shutdown(); -#endif - - htcleo_boot(kernel, machtype, tags); - //entry(0, machtype, tags); -} - -unsigned page_size = 0; -unsigned page_mask = 0; - -#define ROUND_TO_PAGE(x,y) (((x) + (y)) & (~(y))) - -static unsigned char buf[4096]; //Equal to max-supported pagesize - -int boot_linux_from_mmc(void) -{ - struct boot_img_hdr *hdr = (void*) buf; - struct boot_img_hdr *uhdr; - unsigned offset = 0; - unsigned long long ptn = 0; - unsigned n = 0; - const char *cmdline; - - uhdr = (struct boot_img_hdr *)EMMC_BOOT_IMG_HEADER_ADDR; - if (!memcmp(uhdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE)) { - dprintf(INFO, "Unified boot method!\n"); - hdr = uhdr; - goto unified_boot; - } - if(!boot_into_recovery) - { - ptn = mmc_ptn_offset("boot"); - if(ptn == 0) { - dprintf(CRITICAL, "ERROR: No boot partition found\n"); - return -1; - } - } - else - { - ptn = mmc_ptn_offset("recovery"); - if(ptn == 0) { - dprintf(CRITICAL, "ERROR: No recovery partition found\n"); - return -1; - } - } - - if (mmc_read(ptn + offset, (unsigned int *)buf, page_size)) { - dprintf(CRITICAL, "ERROR: Cannot read boot image header\n"); - return -1; - } - - if (memcmp(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE)) { - dprintf(CRITICAL, "ERROR: Invaled boot image header\n"); - return -1; - } - - if (hdr->page_size && (hdr->page_size != page_size)) { - page_size = hdr->page_size; - page_mask = page_size - 1; - } - offset += page_size; - - n = ROUND_TO_PAGE(hdr->kernel_size, page_mask); - if (mmc_read(ptn + offset, (void *)hdr->kernel_addr, n)) { - dprintf(CRITICAL, "ERROR: Cannot read kernel image\n"); - return -1; - } - offset += n; - - n = ROUND_TO_PAGE(hdr->ramdisk_size, page_mask); - if (mmc_read(ptn + offset, (void *)hdr->ramdisk_addr, n)) { - dprintf(CRITICAL, "ERROR: Cannot read ramdisk image\n"); - return -1; - } - offset += n; - -unified_boot: - dprintf(INFO, "\nkernel @ %x (%d bytes)\n", hdr->kernel_addr, - hdr->kernel_size); - dprintf(INFO, "ramdisk @ %x (%d bytes)\n", hdr->ramdisk_addr, - hdr->ramdisk_size); - - if(hdr->cmdline[0]) { - cmdline = (char*) hdr->cmdline; - } else { - cmdline = DEFAULT_CMDLINE; - } - strcat(cmdline," clk="); - strcat(cmdline,cLK_version); - - dprintf(INFO, "cmdline = '%s'\n", cmdline); - - dprintf(INFO, "\nBooting Linux\n"); - boot_linux((void *)hdr->kernel_addr, (void *)TAGS_ADDR, - (const char *)cmdline, board_machtype(), - (void *)hdr->ramdisk_addr, hdr->ramdisk_size); - - return 0; -} - -int boot_linux_from_flash(void) -{ - struct boot_img_hdr *hdr = (void*) buf; - unsigned n; - struct ptentry *ptn; - struct ptable *ptable; - unsigned offset = 0; - const char *cmdline; - - if (target_is_emmc_boot()) { - hdr = (struct boot_img_hdr *)EMMC_BOOT_IMG_HEADER_ADDR; - if (memcmp(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE)) { - dprintf(CRITICAL, "ERROR: Invalid boot image header\n"); - return -1; - } - goto continue_boot; - } - - ptable = flash_get_ptable(); - if (ptable == NULL) { - dprintf(CRITICAL, "ERROR: Partition table not found\n"); - return -1; - } - - if(!boot_into_recovery) - { - ptn = ptable_find(ptable, "boot"); - if (ptn == NULL) { - dprintf(CRITICAL, "ERROR: No boot partition found\n"); - return -1; - } - } - else - { - ptn = ptable_find(ptable, "recovery"); - if (ptn == NULL) { - dprintf(CRITICAL, "ERROR: No recovery partition found\n"); - return -1; - } - } - - if (flash_read(ptn, offset, buf, page_size)) { - dprintf(CRITICAL, "ERROR: Cannot read boot image header\n"); - return -1; - } - offset += page_size; - - if (memcmp(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE)) { - dprintf(CRITICAL, "ERROR: Invaled boot image heador\n"); - return -1; - } - - if (hdr->page_size != page_size) { - dprintf(CRITICAL, "ERROR: Invaled boot image pagesize. Device pagesize: %d, Image pagesize: %d\n",page_size,hdr->page_size); - return -1; - } - - n = ROUND_TO_PAGE(hdr->kernel_size, page_mask); - if (flash_read(ptn, offset, (void *)hdr->kernel_addr, n)) { - dprintf(CRITICAL, "ERROR: Cannot read kernel image\n"); - return -1; - } - offset += n; - - n = ROUND_TO_PAGE(hdr->ramdisk_size, page_mask); - if (flash_read(ptn, offset, (void *)hdr->ramdisk_addr, n)) { - dprintf(CRITICAL, "ERROR: Cannot read ramdisk image\n"); - return -1; - } - offset += n; - -continue_boot: - dprintf(INFO, "\nkernel @ %x (%d bytes)\n", hdr->kernel_addr, - hdr->kernel_size); - dprintf(INFO, "ramdisk @ %x (%d bytes)\n", hdr->ramdisk_addr, - hdr->ramdisk_size); - - if(hdr->cmdline[0]) { - cmdline = (char*) hdr->cmdline; - } else { - cmdline = DEFAULT_CMDLINE; - } - strcat(cmdline," clk="); - strcat(cmdline,cLK_version); - - dprintf(INFO, "cmdline = '%s'\n", cmdline); - - /* TODO: create/pass atags to kernel */ - - dprintf(INFO, "\nBooting Linux\n"); - boot_linux((void *)hdr->kernel_addr, (void *)TAGS_ADDR, - (const char *)cmdline, board_machtype(), - (void *)hdr->ramdisk_addr, hdr->ramdisk_size); - - return 0; -} - -void cmd_boot(const char *arg, void *data, unsigned sz) -{ - unsigned kernel_actual; - unsigned ramdisk_actual; - static struct boot_img_hdr hdr; - char *ptr = ((char*) data); - - if (sz < sizeof(hdr)) { - fastboot_fail("invalid bootimage header"); - return; - } - - memcpy(&hdr, data, sizeof(hdr)); - - /* ensure commandline is terminated */ - hdr.cmdline[BOOT_ARGS_SIZE-1] = 0; - - if(target_is_emmc_boot() && hdr.page_size) { - page_size = hdr.page_size; - page_mask = page_size - 1; - } - - kernel_actual = ROUND_TO_PAGE(hdr.kernel_size, page_mask); - ramdisk_actual = ROUND_TO_PAGE(hdr.ramdisk_size, page_mask); - - //cedesmith: this will prevent lk booting lk.bin - //if (page_size + kernel_actual + ramdisk_actual < sz) { - // fastboot_fail("incomplete bootimage"); - // return; - //} - - memmove((void*) KERNEL_ADDR, ptr + page_size, hdr.kernel_size); - memmove((void*) RAMDISK_ADDR, ptr + page_size + kernel_actual, hdr.ramdisk_size); - - fastboot_okay(""); - target_battery_charging_enable(0, 1); - udc_stop(); - - boot_linux((void*) KERNEL_ADDR, (void*) TAGS_ADDR, - (const char*) hdr.cmdline, board_machtype(), - (void*) RAMDISK_ADDR, hdr.ramdisk_size); -} - -void cmd_erase(const char *arg, void *data, unsigned sz) -{ - struct ptentry *ptn; - struct ptable *ptable; - - ptable = flash_get_ptable(); - if (ptable == NULL) { - fastboot_fail("partition table doesn't exist"); - return; - } - - ptn = ptable_find(ptable, arg); - if (ptn == NULL) { - fastboot_fail("unknown partition name"); - return; - } - - if (flash_erase(ptn)) { - fastboot_fail("failed to erase partition"); - return; - } - fastboot_okay(""); -} - - -void cmd_erase_mmc(const char *arg, void *data, unsigned sz) -{ - unsigned long long ptn = 0; - unsigned int out[512] = {0}; - - ptn = mmc_ptn_offset(arg); - if(ptn == 0) { - fastboot_fail("partition table doesn't exist"); - return; - } - - - /* Simple inefficient version of erase. Just writing - 0 in first block */ - if (mmc_write(ptn , 512, (unsigned int *)out)) { - fastboot_fail("failed to erase partition"); - return; - } - fastboot_okay(""); -} - - -void cmd_flash_mmc(const char *arg, void *data, unsigned sz) -{ - unsigned long long ptn = 0; - unsigned long long size = 0; - - ptn = mmc_ptn_offset(arg); - if(ptn == 0) { - fastboot_fail("partition table doesn't exist"); - return; - } - - if (!strcmp(arg, "boot") || !strcmp(arg, "recovery")) { - if (memcmp((void *)data, BOOT_MAGIC, BOOT_MAGIC_SIZE)) { - fastboot_fail("image is not a boot image"); - return; - } - } - - size = mmc_ptn_size(arg); - if (ROUND_TO_PAGE(sz,511) > size) { - fastboot_fail("size too large"); - return; - } - - if (mmc_write(ptn , sz, (unsigned int *)data)) { - fastboot_fail("flash write failure"); - return; - } - fastboot_okay(""); - return; -} - -void cmd_flash(const char *arg, void *data, unsigned sz) -{ - struct ptentry *ptn; - struct ptable *ptable; - unsigned extra = 0; - - ptable = flash_get_ptable(); - if (ptable == NULL) { - fastboot_fail("partition table doesn't exist"); - return; - } - - ptn = ptable_find(ptable, arg); - if (ptn == NULL) { - fastboot_fail("unknown partition name"); - return; - } - - if (!strcmp(ptn->name, "boot") || !strcmp(ptn->name, "recovery")) { - if (memcmp((void *)data, BOOT_MAGIC, BOOT_MAGIC_SIZE)) { - fastboot_fail("image is not a boot image"); - return; - } - } - - if (!strcmp(ptn->name, "system") || !strcmp(ptn->name, "userdata") - || !strcmp(ptn->name, "persist")) - extra = ((page_size >> 9) * 16); - else - sz = ROUND_TO_PAGE(sz, page_mask); - - dprintf(INFO, "writing %d bytes to '%s'\n", sz, ptn->name); - if (flash_write(ptn, extra, data, sz)) { - fastboot_fail("flash write failure"); - return; - } - dprintf(INFO, "partition '%s' updated\n", ptn->name); - fastboot_okay(""); -} - -void cmd_continue(const char *arg, void *data, unsigned sz) -{ - fastboot_okay(""); - target_battery_charging_enable(0, 1); - udc_stop(); - if (target_is_emmc_boot()) - { - boot_linux_from_mmc(); - } - else - { - boot_linux_from_flash(); - } -} - -void cmd_reboot(const char *arg, void *data, unsigned sz) -{ - dprintf(INFO, "rebooting the device\n"); - fastboot_okay(""); - reboot_device(0); -} - -void cmd_reboot_bootloader(const char *arg, void *data, unsigned sz) -{ - dprintf(INFO, "rebooting the device\n"); - fastboot_okay(""); - reboot_device(FASTBOOT_MODE); -} - -void splash_screen () -{ - struct ptentry *ptn; - struct ptable *ptable; - struct fbcon_config *fb_display = NULL; - - if (!target_is_emmc_boot()) - { - ptable = flash_get_ptable(); - if (ptable == NULL) { - dprintf(CRITICAL, "ERROR: Partition table not found\n"); - return -1; - } - - ptn = ptable_find(ptable, "splash"); - if (ptn == NULL) { - dprintf(CRITICAL, "ERROR: No splash partition found\n"); - } else { - fb_display = fbcon_display(); - if (fb_display) { - if (flash_read(ptn, 0, fb_display->base, - (fb_display->width * fb_display->height * fb_display->bpp/8))) { - fbcon_clear(); - dprintf(CRITICAL, "ERROR: Cannot read splash image\n"); - } - } - } - } -} - -void aboot_init(const struct app_descriptor *app) -{ - unsigned reboot_mode = 0; - unsigned disp_init = 0; - unsigned usb_init = 0; - - /* Setup page size information for nand/emmc reads */ - if (target_is_emmc_boot()) - { - page_size = 2048; - page_mask = page_size - 1; - } - else - { - page_size = flash_page_size(); - page_mask = page_size - 1; - } - - /* Display splash screen if enabled */ - #if DISPLAY_SPLASH_SCREEN - display_init(); - dprintf(INFO, "Diplay initialized\n"); - disp_init = 1; - diplay_image_on_screen(); - #endif - - /* Check if we should do something other than booting up */ - if (keys_get_state(KEY_HOME) != 0) - boot_into_recovery = 1; - if (keys_get_state(KEY_SOFT1) != 0) - try_flash_recovery = 1; - if (keys_get_state(KEY_BACK) != 0) - goto fastboot; - if (keys_get_state(KEY_CLEAR) != 0) - goto fastboot; - - #if NO_KEYPAD_DRIVER - /* With no keypad implementation, check the status of USB connection. */ - /* If USB is connected then go into fastboot mode. */ - usb_init = 1; - udc_init(&surf_udc_device); - if (usb_cable_status()) - goto fastboot; - #endif - - reboot_mode = check_reboot_mode(); - if (reboot_mode == RECOVERY_MODE) { - boot_into_recovery = 1; - } else if(reboot_mode == FASTBOOT_MODE) { - goto fastboot; - } - - if (target_is_emmc_boot()) - { - boot_linux_from_mmc(); - } - else - { - recovery_init(); - boot_linux_from_flash(); - } - dprintf(CRITICAL, "ERROR: Could not do normal boot. Reverting " - "to fastboot mode.\n"); - -fastboot: - htcleo_fastboot_init(); - - if(!usb_init) - udc_init(&surf_udc_device); - - fastboot_register("boot", cmd_boot); - - if (target_is_emmc_boot()) - { - fastboot_register("flash:", cmd_flash_mmc); - fastboot_register("erase:", cmd_erase_mmc); - } - else - { - fastboot_register("flash:", cmd_flash); - fastboot_register("erase:", cmd_erase); - } - - fastboot_register("continue", cmd_continue); - fastboot_register("reboot", cmd_reboot); - fastboot_register("reboot-bootloader", cmd_reboot_bootloader); - fastboot_publish("product", TARGET(BOARD)); - fastboot_publish("kernel", "lk"); - - //fastboot_init(target_get_scratch_address(), 120 * 1024 * 1024); - fastboot_init(target_get_scratch_address(), MEMBASE - SCRATCH_ADDR - 0x00100000); - udc_start(); - target_battery_charging_enable(1, 0); -} - -APP_START(aboot) - .init = aboot_init, -APP_END - diff --git a/lk/app/aboot/bootimg.h b/lk/app/aboot/bootimg.h deleted file mode 100644 index 44fde92..0000000 --- a/lk/app/aboot/bootimg.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef _BOOT_IMAGE_H_ -#define _BOOT_IMAGE_H_ - -typedef struct boot_img_hdr boot_img_hdr; - -#define BOOT_MAGIC "ANDROID!" -#define BOOT_MAGIC_SIZE 8 -#define BOOT_NAME_SIZE 16 -#define BOOT_ARGS_SIZE 512 - -struct boot_img_hdr -{ - unsigned char magic[BOOT_MAGIC_SIZE]; - - unsigned kernel_size; /* size in bytes */ - unsigned kernel_addr; /* physical load addr */ - - unsigned ramdisk_size; /* size in bytes */ - unsigned ramdisk_addr; /* physical load addr */ - - unsigned second_size; /* size in bytes */ - unsigned second_addr; /* physical load addr */ - - unsigned tags_addr; /* physical addr for kernel tags */ - unsigned page_size; /* flash page size we assume */ - unsigned unused[2]; /* future expansion: should be 0 */ - - unsigned char name[BOOT_NAME_SIZE]; /* asciiz product name */ - - unsigned char cmdline[BOOT_ARGS_SIZE]; - - unsigned id[8]; /* timestamp / checksum / sha1 / etc */ -}; - -/* -** +-----------------+ -** | boot header | 1 page -** +-----------------+ -** | kernel | n pages -** +-----------------+ -** | ramdisk | m pages -** +-----------------+ -** | second stage | o pages -** +-----------------+ -** -** n = (kernel_size + page_size - 1) / page_size -** m = (ramdisk_size + page_size - 1) / page_size -** o = (second_size + page_size - 1) / page_size -** -** 0. all entities are page_size aligned in flash -** 1. kernel and ramdisk are required (size != 0) -** 2. second is optional (second_size == 0 -> no second) -** 3. load each element (kernel, ramdisk, second) at -** the specified physical address (kernel_addr, etc) -** 4. prepare tags at tag_addr. kernel_args[] is -** appended to the kernel commandline in the tags. -** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr -** 6. if second_size != 0: jump to second_addr -** else: jump to kernel_addr -*/ - -boot_img_hdr *mkbootimg(void *kernel, unsigned kernel_size, - void *ramdisk, unsigned ramdisk_size, - void *second, unsigned second_size, - unsigned page_size, - unsigned *bootimg_size); - -void bootimg_set_cmdline(boot_img_hdr *hdr, const char *cmdline); -#endif diff --git a/lk/app/aboot/fastboot.c b/lk/app/aboot/fastboot.c deleted file mode 100644 index c449a79..0000000 --- a/lk/app/aboot/fastboot.c +++ /dev/null @@ -1,377 +0,0 @@ -/* - * Copyright (c) 2009, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include - -void boot_linux(void *bootimg, unsigned sz); - -/* todo: give lk strtoul and nuke this */ -static unsigned hex2unsigned(const char *x) -{ - unsigned n = 0; - - while(*x) { - switch(*x) { - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - n = (n << 4) | (*x - '0'); - break; - case 'a': case 'b': case 'c': - case 'd': case 'e': case 'f': - n = (n << 4) | (*x - 'a' + 10); - break; - case 'A': case 'B': case 'C': - case 'D': case 'E': case 'F': - n = (n << 4) | (*x - 'A' + 10); - break; - default: - return n; - } - x++; - } - - return n; -} - -struct fastboot_cmd { - struct fastboot_cmd *next; - const char *prefix; - unsigned prefix_len; - void (*handle)(const char *arg, void *data, unsigned sz); -}; - -struct fastboot_var { - struct fastboot_var *next; - const char *name; - const char *value; -}; - -static struct fastboot_cmd *cmdlist; - -void fastboot_register(const char *prefix, - void (*handle)(const char *arg, void *data, unsigned sz)) -{ - struct fastboot_cmd *cmd; - cmd = malloc(sizeof(*cmd)); - if (cmd) { - cmd->prefix = prefix; - cmd->prefix_len = strlen(prefix); - cmd->handle = handle; - cmd->next = cmdlist; - cmdlist = cmd; - } -} - -static struct fastboot_var *varlist; - -void fastboot_publish(const char *name, const char *value) -{ - struct fastboot_var *var; - var = malloc(sizeof(*var)); - if (var) { - var->name = name; - var->value = value; - var->next = varlist; - varlist = var; - } -} - - -static event_t usb_online; -static event_t txn_done; -static unsigned char buffer[4096]; -static struct udc_endpoint *in, *out; -static struct udc_request *req; -int txn_status; - -static void *download_base; -static unsigned download_max; -static unsigned download_size; - -#define STATE_OFFLINE 0 -#define STATE_COMMAND 1 -#define STATE_COMPLETE 2 -#define STATE_ERROR 3 - -static unsigned fastboot_state = STATE_OFFLINE; - -static void req_complete(struct udc_request *req, unsigned actual, int status) -{ - txn_status = status; - req->length = actual; - event_signal(&txn_done, 0); -} - -static int usb_read(void *_buf, unsigned len) -{ - int r; - unsigned xfer; - unsigned char *buf = _buf; - int count = 0; - - if (fastboot_state == STATE_ERROR) - goto oops; - - while (len > 0) { - xfer = (len > 4096) ? 4096 : len; - req->buf = buf; - req->length = xfer; - req->complete = req_complete; - r = udc_request_queue(out, req); - if (r < 0) { - dprintf(INFO, "usb_read() queue failed\n"); - goto oops; - } - event_wait(&txn_done); - - if (txn_status < 0) { - dprintf(INFO, "usb_read() transaction failed\n"); - goto oops; - } - - count += req->length; - buf += req->length; - len -= req->length; - - /* short transfer? */ - if (req->length != xfer) break; - } - - return count; - -oops: - fastboot_state = STATE_ERROR; - return -1; -} - -static int usb_write(void *buf, unsigned len) -{ - int r; - - if (fastboot_state == STATE_ERROR) - goto oops; - - req->buf = buf; - req->length = len; - req->complete = req_complete; - r = udc_request_queue(in, req); - if (r < 0) { - dprintf(INFO, "usb_write() queue failed\n"); - goto oops; - } - event_wait(&txn_done); - if (txn_status < 0) { - dprintf(INFO, "usb_write() transaction failed\n"); - goto oops; - } - return req->length; - -oops: - fastboot_state = STATE_ERROR; - return -1; -} - -void fastboot_ack(const char *code, const char *reason) -{ - char response[64]; - - if (fastboot_state != STATE_COMMAND) - return; - - if (reason == 0) - reason = ""; - - snprintf(response, 64, "%s%s", code, reason); - fastboot_state = STATE_COMPLETE; - - usb_write(response, strlen(response)); - -} - -void fastboot_fail(const char *reason) -{ - fastboot_ack("FAIL", reason); -} - -void fastboot_okay(const char *info) -{ - fastboot_ack("OKAY", info); -} - -int fastboot_write(void *buf, unsigned len) -{ - return usb_write(buf, len); -} - -static void cmd_getvar(const char *arg, void *data, unsigned sz) -{ - struct fastboot_var *var; - - for (var = varlist; var; var = var->next) { - if (!strcmp(var->name, arg)) { - fastboot_okay(var->value); - return; - } - } - fastboot_okay(""); -} - -static void cmd_download(const char *arg, void *data, unsigned sz) -{ - char response[64]; - unsigned len = hex2unsigned(arg); - int r; - - download_size = 0; - if (len > download_max) { - fastboot_fail("data too large"); - return; - } - - sprintf(response,"DATA%08x", len); - if (usb_write(response, strlen(response)) < 0) - return; - - r = usb_read(download_base, len); - if ((r < 0) || (r != len)) { - fastboot_state = STATE_ERROR; - return; - } - download_size = len; - fastboot_okay(""); -} - -static void fastboot_command_loop(void) -{ - struct fastboot_cmd *cmd; - int r; - dprintf(INFO,"fastboot: processing commands\n"); - -again: - while (fastboot_state != STATE_ERROR) { - r = usb_read(buffer, 64); - if (r < 0) break; - buffer[r] = 0; - dprintf(INFO,"fastboot: %s\n", buffer); - - for (cmd = cmdlist; cmd; cmd = cmd->next) { - if (memcmp(buffer, cmd->prefix, cmd->prefix_len)) - continue; - fastboot_state = STATE_COMMAND; - cmd->handle((const char*) buffer + cmd->prefix_len, - (void*) download_base, download_size); - if (fastboot_state == STATE_COMMAND) - fastboot_fail("unknown reason"); - goto again; - } - - fastboot_fail("unknown command"); - - } - fastboot_state = STATE_OFFLINE; - dprintf(INFO,"fastboot: oops!\n"); -} - -static int fastboot_handler(void *arg) -{ - for (;;) { - event_wait(&usb_online); - fastboot_command_loop(); - } - return 0; -} - -static void fastboot_notify(struct udc_gadget *gadget, unsigned event) -{ - if (event == UDC_EVENT_ONLINE) { - event_signal(&usb_online, 0); - } -} - -static struct udc_endpoint *fastboot_endpoints[2]; - -static struct udc_gadget fastboot_gadget = { - .notify = fastboot_notify, - .ifc_class = 0xff, - .ifc_subclass = 0x42, - .ifc_protocol = 0x03, - .ifc_endpoints = 2, - .ifc_string = "fastboot", - .ept = fastboot_endpoints, -}; - -int fastboot_init(void *base, unsigned size) -{ - thread_t *thr; - dprintf(INFO, "fastboot_init()\n"); - - download_base = base; - download_max = size; - - event_init(&usb_online, 0, EVENT_FLAG_AUTOUNSIGNAL); - event_init(&txn_done, 0, EVENT_FLAG_AUTOUNSIGNAL); - - in = udc_endpoint_alloc(UDC_TYPE_BULK_IN, 512); - if (!in) - goto fail_alloc_in; - out = udc_endpoint_alloc(UDC_TYPE_BULK_OUT, 512); - if (!out) - goto fail_alloc_out; - - fastboot_endpoints[0] = in; - fastboot_endpoints[1] = out; - - req = udc_request_alloc(); - if (!req) - goto fail_alloc_req; - - if (udc_register_gadget(&fastboot_gadget)) - goto fail_udc_register; - - fastboot_register("getvar:", cmd_getvar); - fastboot_register("download:", cmd_download); - fastboot_publish("version", "0.5"); - - thr = thread_create("fastboot", fastboot_handler, 0, DEFAULT_PRIORITY, 4096); - thread_resume(thr); - return 0; - -fail_udc_register: - udc_request_free(req); -fail_alloc_req: - udc_endpoint_free(out); -fail_alloc_out: - udc_endpoint_free(in); -fail_alloc_in: - return -1; -} diff --git a/lk/app/aboot/fastboot.h b/lk/app/aboot/fastboot.h deleted file mode 100644 index 42d8f8a..0000000 --- a/lk/app/aboot/fastboot.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2009, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __APP_FASTBOOT_H -#define __APP_FASTBOOT_H - -int fastboot_init(void *xfer_buffer, unsigned max); - -/* register a command handler - * - command handlers will be called if their prefix matches - * - they are expected to call fastboot_okay() or fastboot_fail() - * to indicate success/failure before returning - */ -void fastboot_register(const char *prefix, - void (*handle)(const char *arg, void *data, unsigned size)); - -/* publish a variable readable by the built-in getvar command */ -void fastboot_publish(const char *name, const char *value); - -/* only callable from within a command handler */ -void fastboot_okay(const char *result); -void fastboot_fail(const char *reason); - - -#endif diff --git a/lk/app/aboot/recovery.c b/lk/app/aboot/recovery.c deleted file mode 100644 index 6adca18..0000000 --- a/lk/app/aboot/recovery.c +++ /dev/null @@ -1,280 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "recovery.h" -#include "bootimg.h" - -static const int MISC_PAGES = 3; // number of pages to save -static const int MISC_COMMAND_PAGE = 1; // bootloader command is this page -static char buf[4096]; -unsigned boot_into_recovery = 0; - -void reboot_device(unsigned); - -int get_recovery_message(struct recovery_message *out) -{ - struct ptentry *ptn; - struct ptable *ptable; - unsigned offset = 0; - unsigned pagesize = flash_page_size(); - - ptable = flash_get_ptable(); - - if (ptable == NULL) { - dprintf(CRITICAL, "ERROR: Partition table not found\n"); - return -1; - } - ptn = ptable_find(ptable, "misc"); - - if (ptn == NULL) { - dprintf(CRITICAL, "ERROR: No misc partition found\n"); - return -1; - } - - offset += (pagesize * MISC_COMMAND_PAGE); - dprintf(CRITICAL, "flash_read misc partition \n"); - if (flash_read(ptn, offset, buf, pagesize)) { - dprintf(CRITICAL, "ERROR: Cannot read recovery_header\n"); - return -1; - } - dprintf(CRITICAL, "flash_read misc partition done\n"); - memcpy(out, buf, sizeof(*out)); - return 0; -} - -int set_recovery_message(const struct recovery_message *in) -{ - struct ptentry *ptn; - struct ptable *ptable; - unsigned offset = 0; - unsigned pagesize = flash_page_size(); - unsigned n = 0; - - ptable = flash_get_ptable(); - - if (ptable == NULL) { - dprintf(CRITICAL, "ERROR: Partition table not found\n"); - return -1; - } - ptn = ptable_find(ptable, "misc"); - - if (ptn == NULL) { - dprintf(CRITICAL, "ERROR: No misc partition found\n"); - return -1; - } - - n = pagesize * (MISC_COMMAND_PAGE + 1); - - if (flash_read(ptn, offset, SCRATCH_ADDR, n)) { - dprintf(CRITICAL, "ERROR: Cannot read recovery_header\n"); - return -1; - } - - offset += (pagesize * MISC_COMMAND_PAGE); - offset += SCRATCH_ADDR; - memcpy(offset, in, sizeof(*in)); - if (flash_write(ptn, 0, (void *)SCRATCH_ADDR, n)) { - dprintf(CRITICAL, "ERROR: flash write fail!\n"); - return -1; - } -} - -int read_update_header_for_bootloader(struct update_header *header) -{ - struct ptentry *ptn; - struct ptable *ptable; - unsigned offset = 0; - unsigned pagesize = flash_page_size(); - - ptable = flash_get_ptable(); - if (ptable == NULL) { - dprintf(CRITICAL, "ERROR: Partition table not found\n"); - return -1; - } - ptn = ptable_find(ptable, "cache"); - - if (ptn == NULL) { - dprintf(CRITICAL, "ERROR: No cache partition found\n"); - return -1; - } - if (flash_read(ptn, offset, buf, pagesize)) { - dprintf(CRITICAL, "ERROR: Cannot read recovery_header\n"); - return -1; - } - memcpy(header, buf, sizeof(*header)); - - if(strncmp(header->MAGIC, UPDATE_MAGIC, UPDATE_MAGIC_SIZE)) - { - return -1; - } - return 0; -} - -int update_firmware_image (struct update_header *header, char *name) -{ - struct ptentry *ptn; - struct ptable *ptable; - unsigned offset = 0; - unsigned pagesize = flash_page_size(); - unsigned pagemask = pagesize -1; - unsigned n = 0; - - ptable = flash_get_ptable(); - if (ptable == NULL) { - dprintf(CRITICAL, "ERROR: Partition table not found\n"); - return -1; - } - - ptn = ptable_find(ptable, "cache"); - if (ptn == NULL) { - dprintf(CRITICAL, "ERROR: No cache partition found\n"); - return -1; - } - - offset += header->image_offset; - n = (header->image_length + pagemask) & (~pagemask); - - if (flash_read(ptn, offset, SCRATCH_ADDR, n)) { - dprintf(CRITICAL, "ERROR: Cannot read radio image\n"); - return -1; - } - - ptn = ptable_find(ptable, name); - if (ptn == NULL) { - dprintf(CRITICAL, "ERROR: No %s partition found\n", name); - return -1; - } - - if (flash_write(ptn, 0, SCRATCH_ADDR, n)) { - dprintf(CRITICAL, "ERROR: flash write fail!\n"); - return -1; - } - - dprintf(INFO, "Partition writen successfully!"); - return 0; -} - -/* Bootloader / Recovery Flow - * - * On every boot, the bootloader will read the recovery_message - * from flash and check the command field. The bootloader should - * deal with the command field not having a 0 terminator correctly - * (so as to not crash if the block is invalid or corrupt). - * - * The bootloader will have to publish the partition that contains - * the recovery_message to the linux kernel so it can update it. - * - * if command == "boot-recovery" -> boot recovery.img - * else if command == "update-radio" -> update radio image (below) - * else -> boot boot.img (normal boot) - * - * Radio Update Flow - * 1. the bootloader will attempt to load and validate the header - * 2. if the header is invalid, status="invalid-update", goto #8 - * 3. display the busy image on-screen - * 4. if the update image is invalid, status="invalid-radio-image", goto #8 - * 5. attempt to update the firmware (depending on the command) - * 6. if successful, status="okay", goto #8 - * 7. if failed, and the old image can still boot, status="failed-update" - * 8. write the recovery_message, leaving the recovery field - * unchanged, updating status, and setting command to - * "boot-recovery" - * 9. reboot - * - * The bootloader will not modify or erase the cache partition. - * It is recovery's responsibility to clean up the mess afterwards. - */ - -int recovery_init (void) -{ - struct recovery_message msg; - struct update_header header; - char partition_name[32]; - unsigned valid_command = 0; - - // get recovery message - if(get_recovery_message(&msg)) - return -1; - if (msg.command[0] != 0 && msg.command[0] != 255) { - dprintf("Recovery command: %.*s\n", sizeof(msg.command), msg.command); - } - msg.command[sizeof(msg.command)-1] = '\0'; //Ensure termination - - if (!strcmp("boot-recovery",msg.command)) { - valid_command = 1; - strcpy(msg.command, ""); // to safe against multiple reboot into recovery - strcpy(msg.status, "OKAY"); - set_recovery_message(&msg); // send recovery message - boot_into_recovery = 1; // Boot in recovery mode - return 0; - } - -// cedesmith: wince phone update radio and boot loader using spl -#ifndef WSPL_VADDR - if (!strcmp("update-radio",msg.command)) { - valid_command = 1; - strcpy(partition_name, "FOTA"); - } - - //Todo: Add support for bootloader update too. -#endif - - if(!valid_command) { - //We need not to do anything - return 0; // Boot in normal mode - } - - if (read_update_header_for_bootloader(&header)) { - strcpy(msg.status, "invalid-update"); - goto SEND_RECOVERY_MSG; - } - - if (update_firmware_image (&header, partition_name)) { - strcpy(msg.status, "failed-update"); - goto SEND_RECOVERY_MSG; - } - strcpy(msg.status, "OKAY"); - -SEND_RECOVERY_MSG: - strcpy(msg.command, "boot-recovery"); - set_recovery_message(&msg); // send recovery message - boot_into_recovery = 1; // Boot in recovery mode - reboot_device(0); - return 0; -} diff --git a/lk/app/aboot/recovery.h b/lk/app/aboot/recovery.h deleted file mode 100644 index f76358f..0000000 --- a/lk/app/aboot/recovery.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _BOOTLOADER_RECOVERY_H -#define _BOOTLOADER_RECOVERY_H - -#define UPDATE_MAGIC "MSM-RADIO-UPDATE" -#define UPDATE_MAGIC_SIZE 16 -#define UPDATE_VERSION 0x00010000 - - -/* Recovery Message */ -struct recovery_message { - char command[32]; - char status[32]; - char recovery[1024]; -}; - - -struct update_header { - unsigned char MAGIC[UPDATE_MAGIC_SIZE]; - - unsigned version; - unsigned size; - - unsigned image_offset; - unsigned image_length; - - unsigned bitmap_width; - unsigned bitmap_height; - unsigned bitmap_bpp; - - unsigned busy_bitmap_offset; - unsigned busy_bitmap_length; - - unsigned fail_bitmap_offset; - unsigned fail_bitmap_length; -}; - - - -int get_recovery_message(struct recovery_message *out); -int set_recovery_message(const struct recovery_message *in); - -int read_update_header_for_bootloader(struct update_header *header); -int update_firmware_image (struct update_header *header, char *name); - -int recovery_init (void); - -extern unsigned boot_into_recovery; - -#endif diff --git a/lk/app/aboot/rules.mk b/lk/app/aboot/rules.mk deleted file mode 100644 index c23784e..0000000 --- a/lk/app/aboot/rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/aboot.o \ - $(LOCAL_DIR)/fastboot.o \ - $(LOCAL_DIR)/recovery.o - diff --git a/lk/app/app.c b/lk/app/app.c deleted file mode 100644 index 2aad5f4..0000000 --- a/lk/app/app.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2009 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include - -extern const struct app_descriptor __apps_start; -extern const struct app_descriptor __apps_end; - -static void start_app(const struct app_descriptor *app); - -/* one time setup */ -void apps_init(void) -{ - const struct app_descriptor *app; - - /* call all the init routines */ - for (app = &__apps_start; app != &__apps_end; app++) { - if (app->init) - app->init(app); - } - - /* start any that want to start on boot */ - for (app = &__apps_start; app != &__apps_end; app++) { - if (app->entry && (app->flags & APP_FLAG_DONT_START_ON_BOOT) == 0) { - start_app(app); - } - } -} - -static int app_thread_entry(void *arg) -{ - const struct app_descriptor *app = (const struct app_descriptor *)arg; - - app->entry(app, NULL); - - return 0; -} - -static void start_app(const struct app_descriptor *app) -{ - printf("starting app %s\n", app->name); - - thread_resume(thread_create(app->name, &app_thread_entry, (void *)app, DEFAULT_PRIORITY, DEFAULT_STACK_SIZE)); -} - diff --git a/lk/app/rules.mk b/lk/app/rules.mk deleted file mode 100644 index 74abd56..0000000 --- a/lk/app/rules.mk +++ /dev/null @@ -1,5 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/app.o - diff --git a/lk/app/shell/rules.mk b/lk/app/shell/rules.mk deleted file mode 100644 index 5b7c919..0000000 --- a/lk/app/shell/rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -MODULES += \ - lib/console - -OBJS += \ - $(LOCAL_DIR)/shell.o diff --git a/lk/app/shell/shell.c b/lk/app/shell/shell.c deleted file mode 100644 index bdf67c5..0000000 --- a/lk/app/shell/shell.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2009 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include - -static void shell_init(const struct app_descriptor *app) -{ - console_init(); -} - -static void shell_entry(const struct app_descriptor *app, void *args) -{ - console_start(); -} - -APP_START(shell) - .init = shell_init, - .entry = shell_entry, -APP_END - diff --git a/lk/arch/arm/arch.c b/lk/arch/arm/arch.c deleted file mode 100644 index 37b557c..0000000 --- a/lk/arch/arm/arch.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include - -#if ARM_CPU_CORTEX_A8 -static void set_vector_base(addr_t addr) -{ - __asm__ volatile("mcr p15, 0, %0, c12, c0, 0" :: "r" (addr)); -} -#endif - -void arch_early_init(void) -{ - /* turn off the cache */ - arch_disable_cache(UCACHE); - - /* set the vector base to our exception vectors so we dont need to double map at 0 */ -#if ARM_CPU_CORTEX_A8 - set_vector_base(MEMBASE); -#endif - -#if ARM_WITH_MMU - arm_mmu_init(); - - platform_init_mmu_mappings(); -#endif - - /* turn the cache back on */ - arch_enable_cache(UCACHE); - -#if ARM_WITH_NEON - /* enable cp10 and cp11 */ - uint32_t val; - __asm__ volatile("mrc p15, 0, %0, c1, c0, 2" : "=r" (val)); - val |= (3<<22)|(3<<20); - __asm__ volatile("mcr p15, 0, %0, c1, c0, 2" :: "r" (val)); - - /* set enable bit in fpexc */ - val = (1<<30); - __asm__ volatile("mcr p10, 7, %0, c8, c0, 0" :: "r" (val)); -#endif -} - -void arch_init(void) -{ -} - diff --git a/lk/arch/arm/asm.S b/lk/arch/arm/asm.S deleted file mode 100644 index 1b0ea1e..0000000 --- a/lk/arch/arm/asm.S +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include - - - /* context switch frame is as follows: - * ulr - * usp - * lr - * r11 - * r10 - * r9 - * r8 - * r7 - * r6 - * r5 - * r4 - */ -/* arm_context_switch(addr_t *old_sp, addr_t new_sp) */ -FUNCTION(arm_context_switch) - /* save all the usual registers + user regs */ - /* the spsr is saved and restored in the iframe by exceptions.S */ - sub r3, sp, #(11*4) /* can't use sp in user mode stm */ - mov r12, lr - stmia r3, { r4-r11, r12, r13, r14 }^ - - /* save old sp */ - str r3, [r0] - - /* clear any exlusive locks that the old thread holds */ -#if ARM_ISA_ARMV7 - /* can clear it directly */ - .word 0xf57ff01f // clrex -#elif ARM_ISA_ARMV6 - /* have to do a fake strex to clear it */ - ldr r0, =strex_spot - strex r3, r2, [r0] -#endif - - /* load new regs */ - ldmia r1, { r4-r11, r12, r13, r14 }^ - mov lr, r12 /* restore lr */ - add sp, r1, #(11*4) /* restore sp */ - bx lr - -.ltorg - -FUNCTION(arm_save_mode_regs) - mrs r1, cpsr - -#if ARM_ISA_ARMv6 - cps #0x11 /* fiq */ - str r13, [r0], #4 - str r14, [r0], #4 - cps #0x12 /* irq */ - str r13, [r0], #4 - str r14, [r0], #4 - cps #0x13 /* svc */ - str r13, [r0], #4 - str r14, [r0], #4 - cps #0x17 /* abt */ - str r13, [r0], #4 - str r14, [r0], #4 - cps #0x1b /* und */ - str r13, [r0], #4 - str r14, [r0], #4 - cps #0x1f /* sys */ - str r13, [r0], #4 - str r14, [r0], #4 -#else - // XXX implement - b . -#endif - - msr cpsr_c, r1 - - bx lr - -.data -strex_spot: - .word 0 - - diff --git a/lk/arch/arm/cache-ops.S b/lk/arch/arm/cache-ops.S deleted file mode 100644 index 8a545dc..0000000 --- a/lk/arch/arm/cache-ops.S +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include - -.text - -#if ARM_WITH_CACHE - -/* low level cache routines for various cpu families */ - -#if ARM_CPU_ARM1136 || ARM_CPU_ARM926 - -/* void arch_disable_cache(uint flags) */ -FUNCTION(arch_disable_cache) - mov r12, #0 // zero register - mrs r3, cpsr // save the old interrupt state -#if ARM_ISA_ARMv6 - .word 0xf10c01c0 /* cpsid iaf */ // interrupts disabled -#else - orr r3, r3, #(1<<7) - msr cpsr, r3 -#endif - -.Ldcache_disable: - tst r0, #DCACHE - beq .Licache_disable - mrc p15, 0, r1, c1, c0, 0 // cr1 - tst r1, #(1<<2) // is the dcache already disabled? - beq .Licache_disable - - bic r1, #(1<<2) - mcr p15, 0, r1, c1, c0, 0 // disable dcache - -#if ARM_CPU_ARM1136 - mcr p15, 0, r12, c7, c14, 0 // clean & invalidate dcache -#elif ARM_CPU_ARM926 -0: - mrc p15, 0, r15, c7, c14, 3 // clean & invalidate dcache - bne 0b -#else -#error whut? -#endif - mcr p15, 0, r0, c7, c10, 4 // data sync barrier (formerly drain write buffer) - -.Licache_disable: - tst r0, #ICACHE - beq .Ldone_disable - - mrc p15, 0, r1, c1, c0, 0 // cr1 - bic r1, #(1<<12) - mcr p15, 0, r1, c1, c0, 0 // disable icache - - mcr p15, 0, r12, c7, c5, 0 // invalidate icache - -.Ldone_disable: - msr cpsr, r3 - bx lr - -/* void arch_enable_cache(uint flags) */ -FUNCTION(arch_enable_cache) - mov r12, #0 // zero register - mrs r3, cpsr // save the old interrupt state -#if ARM_ISA_ARMv6 - .word 0xf10c01c0 /* cpsid iaf */ // interrupts disabled -#else - orr r3, r3, #(1<<7) - msr cpsr, r3 -#endif - -.Ldcache_enable: - tst r0, #DCACHE - beq .Licache_enable - mrc p15, 0, r1, c1, c0, 0 // cr1 - tst r1, #(1<<2) // is the dcache already enabled? - bne .Licache_enable - - mcr p15, 0, r12, c7, c6, 0 // invalidate dcache - - orr r1, #(1<<2) - mcr p15, 0, r1, c1, c0, 0 // enable dcache - -.Licache_enable: - tst r0, #ICACHE - beq .Ldone_enable - - mcr p15, 0, r12, c7, c5, 0 // invalidate icache - - mrc p15, 0, r1, c1, c0, 0 // cr1 - orr r1, #(1<<12) - mcr p15, 0, r1, c1, c0, 0 // enable icache - -.Ldone_enable: - msr cpsr, r3 - bx lr - -#elif ARM_CPU_CORTEX_A8 - -/* void arch_disable_cache(uint flags) */ -FUNCTION(arch_disable_cache) - stmfd sp!, {r4-r11, lr} - - mov r7, r0 // save flags - - mrs r12, cpsr // save the old interrupt state - .word 0xf10c01c0 /* cpsid iaf */ // interrupts disabled - -.Ldcache_disable: - tst r7, #DCACHE - beq .Licache_disable - mrc p15, 0, r0, c1, c0, 0 // cr1 - tst r0, #(1<<2) // is the dcache already disabled? - beq .Ldcache_already_disabled - - bic r0, #(1<<2) - mcr p15, 0, r0, c1, c0, 0 // disable dcache - - // flush and invalidate the dcache - // NOTE: trashes a bunch of registers, can't be spilling stuff to the stack - bl flush_invalidate_cache_v7 - - b .Ldcache_disable_L2 - -.Ldcache_already_disabled: - // make sure all of the caches are invalidated - // NOTE: trashes a bunch of registers, can't be spilling stuff to the stack - bl invalidate_cache_v7 - -.Ldcache_disable_L2: - -#if ARM_WITH_L2 - // disable the L2, if present - mrc p15, 0, r0, c1, c0, 1 // aux cr1 - bic r0, #(1<<1) - mcr p15, 0, r0, c1, c0, 1 // disable L2 dcache -#endif - -.Licache_disable: - tst r7, #ICACHE - beq .Ldone_disable - - mrc p15, 0, r0, c1, c0, 0 // cr1 - bic r0, #(1<<12) - mcr p15, 0, r0, c1, c0, 0 // disable icache - -.Ldone_disable: - // make sure the icache is always invalidated - mov r0, #0 - mcr p15, 0, r0, c7, c5, 0 // invalidate icache to PoU - - msr cpsr, r12 - ldmfd sp!, {r4-r11, pc} - -/* void arch_enable_cache(uint flags) */ -FUNCTION(arch_enable_cache) - stmfd sp!, {r4-r11, lr} - - mov r7, r0 // save flags - - mrs r12, cpsr // save the old interrupt state - .word 0xf10c01c0 /* cpsid iaf */ // interrupts disabled - -.Ldcache_enable: - tst r7, #DCACHE - beq .Licache_enable - mrc p15, 0, r0, c1, c0, 0 // cr1 - tst r0, #(1<<2) // is the dcache already enabled? - bne .Licache_enable - - // invalidate L1 and L2 - // NOTE: trashes a bunch of registers, can't be spilling stuff to the stack - bl invalidate_cache_v7 - -#if ARM_WITH_L2 - // enable the L2, if present - mrc p15, 0, r0, c1, c0, 1 // aux cr1 - orr r0, #(1<<1) - mcr p15, 0, r0, c1, c0, 1 // enable L2 dcache -#endif - - mrc p15, 0, r0, c1, c0, 0 // cr1 - orr r0, #(1<<2) - mcr p15, 0, r0, c1, c0, 0 // enable dcache - -.Licache_enable: - tst r7, #ICACHE - beq .Ldone_enable - - mov r0, #0 - mcr p15, 0, r0, c7, c5, 0 // invalidate icache to PoU - - mrc p15, 0, r0, c1, c0, 0 // cr1 - orr r0, #(1<<12) - mcr p15, 0, r0, c1, c0, 0 // enable icache - -.Ldone_enable: - msr cpsr, r12 - ldmfd sp!, {r4-r11, pc} - -// flush & invalidate cache routine, trashes r0-r6, r9-r11 -flush_invalidate_cache_v7: - /* from ARMv7 manual, B2-17 */ - MRC p15, 1, R0, c0, c0, 1 // Read CLIDR - ANDS R3, R0, #0x7000000 - MOV R3, R3, LSR #23 // Cache level value (naturally aligned) - BEQ .Lfinished - MOV R10, #0 -.Loop1: - ADD R2, R10, R10, LSR #1 // Work out 3xcachelevel - MOV R1, R0, LSR R2 // bottom 3 bits are the Cache type for this level - AND R1, R1, #7 // get those 3 bits alone - CMP R1, #2 - BLT .Lskip // no cache or only instruction cache at this level - MCR p15, 2, R10, c0, c0, 0 // write the Cache Size selection register - .word 0xf57ff06f // ISB // ISB to sync the change to the CacheSizeID reg - MRC p15, 1, R1, c0, c0, 0 // reads current Cache Size ID register - AND R2, R1, #0x7 // extract the line length field - ADD R2, R2, #4 // add 4 for the line length offset (log2 16 bytes) - LDR R4, =0x3FF - ANDS R4, R4, R1, LSR #3 // R4 is the max number on the way size (right aligned) - CLZ R5, R4 // R5 is the bit position of the way size increment - LDR R6, =0x00007FFF - ANDS R6, R6, R1, LSR #13 // R6 is the max number of the index size (right aligned) -.Loop2: - MOV R9, R4 // R9 working copy of the max way size (right aligned) -.Loop3: - ORR R11, R10, R9, LSL R5 // factor in the way number and cache number into R11 - ORR R11, R11, R6, LSL R2 // factor in the index number - MCR p15, 0, R11, c7, c14, 2 // clean & invalidate by set/way - SUBS R9, R9, #1 // decrement the way number - BGE .Loop3 - SUBS R6, R6, #1 // decrement the index - BGE .Loop2 -.Lskip: - ADD R10, R10, #2 // increment the cache number - CMP R3, R10 - BGT .Loop1 - -.Lfinished: - mov r10, #0 - mcr p15, 2, r10, c0, c0, 0 // select cache level 0 - .word 0xf57ff06f // isb - - bx lr - -// invalidate cache routine, trashes r0-r6, r9-r11 -invalidate_cache_v7: - /* from ARMv7 manual, B2-17 */ - MRC p15, 1, R0, c0, c0, 1 // Read CLIDR - ANDS R3, R0, #0x7000000 - MOV R3, R3, LSR #23 // Cache level value (naturally aligned) - BEQ .Lfinished_invalidate - MOV R10, #0 -.Loop1_invalidate: - ADD R2, R10, R10, LSR #1 // Work out 3xcachelevel - MOV R1, R0, LSR R2 // bottom 3 bits are the Cache type for this level - AND R1, R1, #7 // get those 3 bits alone - CMP R1, #2 - BLT .Lskip_invalidate // no cache or only instruction cache at this level - MCR p15, 2, R10, c0, c0, 0 // write the Cache Size selection register - .word 0xf57ff06f // ISB // ISB to sync the change to the CacheSizeID reg - MRC p15, 1, R1, c0, c0, 0 // reads current Cache Size ID register - AND R2, R1, #0x7 // extract the line length field - ADD R2, R2, #4 // add 4 for the line length offset (log2 16 bytes) - LDR R4, =0x3FF - ANDS R4, R4, R1, LSR #3 // R4 is the max number on the way size (right aligned) - CLZ R5, R4 // R5 is the bit position of the way size increment - LDR R6, =0x00007FFF - ANDS R6, R6, R1, LSR #13 // R6 is the max number of the index size (right aligned) -.Loop2_invalidate: - MOV R9, R4 // R9 working copy of the max way size (right aligned) -.Loop3_invalidate: - ORR R11, R10, R9, LSL R5 // factor in the way number and cache number into R11 - ORR R11, R11, R6, LSL R2 // factor in the index number - MCR p15, 0, R11, c7, c6, 2 // invalidate by set/way - SUBS R9, R9, #1 // decrement the way number - BGE .Loop3_invalidate - SUBS R6, R6, #1 // decrement the index - BGE .Loop2_invalidate -.Lskip_invalidate: - ADD R10, R10, #2 // increment the cache number - CMP R3, R10 - BGT .Loop1_invalidate - -.Lfinished_invalidate: - mov r10, #0 - mcr p15, 2, r10, c0, c0, 0 // select cache level 0 - .word 0xf57ff06f // isb - - bx lr - -#else -#error unhandled cpu -#endif - -#if ARM_CPU_ARM926 || ARM_CPU_ARM1136 || ARM_CPU_CORTEX_A8 -/* shared cache flush routines */ - - /* void arch_flush_cache_range(addr_t start, size_t len); */ -FUNCTION(arch_clean_cache_range) -0: - mcr p15, 0, r0, c7, c10, 1 // clean cache to PoC by MVA - add r0, r0, #CACHE_LINE - subs r1, r1, #CACHE_LINE - bhs 0b - - mov r0, #0 - mcr p15, 0, r0, c7, c10, 4 // data sync barrier (formerly drain write buffer) - - bx lr - - /* void arch_flush_invalidate_cache_range(addr_t start, size_t len); */ -FUNCTION(arch_clean_invalidate_cache_range) -0: - mcr p15, 0, r0, c7, c14, 1 // clean & invalidate cache to PoC by MVA - add r0, r0, #CACHE_LINE - subs r1, r1, #CACHE_LINE - bhs 0b - - mov r0, #0 - mcr p15, 0, r0, c7, c10, 4 // data sync barrier (formerly drain write buffer) - - bx lr -#else -#error unhandled cpu -#endif - -#else - -/* no cache */ - -FUNCTION(arch_disable_cache) - bx lr - -FUNCTION(arch_enable_cache) - bx lr - -FUNCTION(arch_clean_cache_range) - bx lr - -FUNCTION(arch_clean_invalidate_cache_range) - bx lr - -#endif // ARM_WITH_CACHE - diff --git a/lk/arch/arm/cache.c b/lk/arch/arm/cache.c deleted file mode 100644 index 0a403b5..0000000 --- a/lk/arch/arm/cache.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ diff --git a/lk/arch/arm/compile.mk b/lk/arch/arm/compile.mk deleted file mode 100644 index b509e16..0000000 --- a/lk/arch/arm/compile.mk +++ /dev/null @@ -1,33 +0,0 @@ - -$(BUILDDIR)/%.o: %.c $(SRCDEPS) - @$(MKDIR) - @echo compiling $< - $(NOECHO)$(CC) $(CFLAGS) $(THUMBCFLAGS) --std=c99 $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@ - -$(BUILDDIR)/%.o: %.cpp $(SRCDEPS) - @$(MKDIR) - @echo compiling $< - $(NOECHO)$(CC) $(CFLAGS) $(CPPFLAGS) $(THUMBCFLAGS) $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@ - -# to override thumb setting, mark the .o file as .Ao -$(BUILDDIR)/%.Ao: %.c $(SRCDEPS) - @$(MKDIR) - @echo compiling $< - $(NOECHO)$(CC) $(CFLAGS) --std=c99 $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@ - -$(BUILDDIR)/%.Ao: %.cpp $(SRCDEPS) - @$(MKDIR) - @echo compiling $< - $(NOECHO)$(CC) $(CFLAGS) $(CPPFLAGS) $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@ - -# assembly is always compiled in ARM mode at the moment -$(BUILDDIR)/%.Ao: %.S $(SRCDEPS) - @$(MKDIR) - @echo compiling $< - $(NOECHO)$(CC) $(CFLAGS) $(ASMFLAGS) $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@ - -$(BUILDDIR)/%.o: %.S $(SRCDEPS) - @$(MKDIR) - @echo compiling $< - $(NOECHO)$(CC) $(CFLAGS) $(ASMFLAGS) $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@ - diff --git a/lk/arch/arm/crt0.S b/lk/arch/arm/crt0.S deleted file mode 100644 index 644c748..0000000 --- a/lk/arch/arm/crt0.S +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#define DSB .byte 0x4f, 0xf0, 0x7f, 0xf5 -#define ISB .byte 0x6f, 0xf0, 0x7f, 0xf5 - -.text -.globl _start -_start: - b reset - b arm_undefined - b arm_syscall - b arm_prefetch_abort - b arm_data_abort - b arm_reserved - b arm_irq - b arm_fiq - -#ifdef WSPL_VADDR -//if LK is loaded by wince spl add romhdr -.org 0x40 - .word 0x43454345 - .word (romhdr-_start)+WSPL_VADDR // virtual address of romhdr - //.word romhdr+0x96C00000 // virtual address of romhdr - .word romhdr-_start // file address of romhdr - -.org 0x00000900 -romhdr: - .word 0x2000000 // dllfirst - .word 0x2000000 // dlllast - .word WSPL_VADDR // physfirst - .word WSPL_VADDR+(_end-_start) // physlast - .word 0 // nummods (no TOCentry after ROMHDR) - .word WSPL_VADDR+(_end-_start) // ulRAMStart - .word WSPL_VADDR+(_end-_start) // ulRAMFree - .word WSPL_VADDR+MEMSIZE // ulRAMEnd - .word 0 // ulCopyEntries - .word 0 // ulCopyOffset - .word 0 // ulProfileLen - .word 0 // ulProfileOffset - .word 0 // numfiles - .word 0 // ulKernelFlags - .word 0x80808080 // ulFSRamPercent - .word 0 // ulDrivglobStart - .word 0 // ulDrivglobLen - .hword 0x1C2 // usCPUType - .hword 0x2 // usMiscFlags - .word 0 // pExtensions - .word 0 // ulTrackingStart - .word 0 // ulTrackingLen -.org 0x00001000 -#endif - - -reset: - /* do some cpu setup */ -#if ARM_WITH_CP15 - mrc p15, 0, r0, c1, c0, 0 - /* XXX this is currently for arm926, revist with armv6 cores */ - /* new thumb behavior, low exception vectors, i/d cache disable, mmu disabled */ - bic r0, r0, #(1<<15| 1<<13 | 1<<12) - bic r0, r0, #(1<<2 | 1<<0) - /* enable alignment faults */ - orr r0, r0, #(1<<1) - mcr p15, 0, r0, c1, c0, 0 -#endif - -#if WITH_CPU_EARLY_INIT - /* call platform/arch/etc specific init code */ - bl __cpu_early_init - - /* declare return address as global to avoid using stack */ -.globl _cpu_early_init_complete - _cpu_early_init_complete: - -#endif - -#if (!ENABLE_NANDWRITE) -#if WITH_CPU_WARM_BOOT - ldr r0, warm_boot_tag - cmp r0, #1 - - /* if set, warm boot */ - ldreq pc, =BASE_ADDR - - mov r0, #1 - str r0, warm_boot_tag -#endif -#endif - - /* see if we need to relocate */ - ldr r1, = .Laddr - ldr r0, = _start - sub r1, r1, r0 - mov r0, pc - sub r0, r0, r1 //#(.Laddr - _start) -.Laddr: - str r0, load_address - ldr r1, =_start - cmp r0, r1 - beq .Lstack_setup - - /* we need to relocate ourselves to the proper spot */ - ldr r2, =__data_end - -.Lrelocate_loop: - ldr r3, [r0], #4 - str r3, [r1], #4 - cmp r1, r2 - bne .Lrelocate_loop - - /* we're relocated, jump to the right address */ - ldr r0, =.Lstack_setup - bx r0 - -.ltorg -#if WITH_CPU_WARM_BOOT -warm_boot_tag: - .word 0 -#endif - -.global load_address -load_address: - .word 0 - -.Lstack_setup: - /* set up the stack for irq, fiq, abort, undefined, system/user, and lastly supervisor mode */ - mrs r0, cpsr - bic r0, r0, #0x1f - - ldr r2, =abort_stack_top - orr r1, r0, #0x12 // irq - msr cpsr_c, r1 - ldr r13, =irq_save_spot /* save a pointer to a temporary dumping spot used during irq delivery */ - - orr r1, r0, #0x11 // fiq - msr cpsr_c, r1 - mov sp, r2 - - orr r1, r0, #0x17 // abort - msr cpsr_c, r1 - mov sp, r2 - - orr r1, r0, #0x1b // undefined - msr cpsr_c, r1 - mov sp, r2 - - orr r1, r0, #0x1f // system - msr cpsr_c, r1 - mov sp, r2 - - orr r1, r0, #0x13 // supervisor - msr cpsr_c, r1 - mov sp, r2 - - /* copy the initialized data segment out of rom if necessary */ - ldr r0, =__data_start_rom - ldr r1, =__data_start - ldr r2, =__data_end - - cmp r0, r1 - beq .L__do_bss - -.L__copy_loop: - cmp r1, r2 - ldrlt r3, [r0], #4 - strlt r3, [r1], #4 - blt .L__copy_loop - -.L__do_bss: - /* clear out the bss */ - ldr r0, =__bss_start - ldr r1, =_end - mov r2, #0 -.L__bss_loop: - cmp r0, r1 - strlt r2, [r0], #4 - blt .L__bss_loop - -#ifdef ARM_CPU_CORTEX_A8 - DSB - ISB -#endif - - bl kmain - b . - -.ltorg - -.bss -.align 2 - /* the abort stack is for unrecoverable errors. - * also note the initial working stack is set to here. - * when the threading system starts up it'll switch to a new - * dynamically allocated stack, so we don't need it for very long - */ -abort_stack: - .skip 1024 -abort_stack_top: diff --git a/lk/arch/arm/dcc.S b/lk/arch/arm/dcc.S deleted file mode 100644 index 69a6585..0000000 --- a/lk/arch/arm/dcc.S +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2008 Brian Swetland - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -.global dcc_putc -.global dcc_getc - -#if defined(ARM_ISA_ARMV6) || defined(ARM_ISA_ARMV7) -dcc_getc: - mrc 14, 0, r0, c0, c1, 0 - tst r0, #(1 << 30) - moveq r0, #-1 - mrcne 14, 0, r0, c0, c5, 0 - bx lr - -dcc_putc: - mrc 14, 0, r15, c0, c1, 0 - mcrcc 14, 0, r0, c0, c5, 0 - movcc r0, #0 - movcs r0, #-1 - bx lr -#endif diff --git a/lk/arch/arm/exceptions.S b/lk/arch/arm/exceptions.S deleted file mode 100644 index 0c881b9..0000000 --- a/lk/arch/arm/exceptions.S +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include - -FUNCTION(arm_undefined) - stmfd sp!, { r0-r12, r14 } - sub sp, sp, #12 - mov r0, sp - mrs r1, spsr - stmia r0, { r1, r13-r14 }^ - b arm_undefined_handler - b . - -FUNCTION(arm_syscall) - stmfd sp!, { r0-r12, r14 } - sub sp, sp, #12 - mov r0, sp - mrs r1, spsr - stmia r0, { r1, r13-r14 }^ - b arm_syscall_handler - b . - -FUNCTION(arm_prefetch_abort) - stmfd sp!, { r0-r12, r14 } - sub sp, sp, #12 - mov r0, sp - mrs r1, spsr - stmia r0, { r1, r13-r14 }^ - b arm_prefetch_abort_handler - b . - -FUNCTION(arm_data_abort) - stmfd sp!, { r0-r12, r14 } - sub sp, sp, #12 - mov r0, sp - mrs r1, spsr - stmia r0, { r1, r13-r14 }^ - b arm_data_abort_handler - b . - -FUNCTION(arm_reserved) - b . - -FUNCTION(arm_irq) - /* XXX only deals with interrupting supervisor mode */ - - /* save r4-r6 and use as a temporary place to save while we switch into supervisor mode */ - stmia r13, { r4-r6 } - mov r4, r13 - sub r5, lr, #4 - mrs r6, spsr - - /* move into supervisor mode. irq/fiq disabled */ - msr cpsr_c, #(3<<6 | 0x13) - - /* save the return address */ - stmfd sp!, { r5 } - - /* save C trashed regs, supervisor lr */ - stmfd sp!, { r0-r3, r12, lr } - - /* save spsr */ - stmfd sp!, { r6 } - - /* restore r4-r6 */ - ldmia r4, { r4-r6 } - - /* increment the global critical section count */ - ldr r1, =critical_section_count - ldr r0, [r1] - add r0, r0, #1 - str r0, [r1] - - /* call into higher level code */ - mov r0, sp /* iframe */ - bl platform_irq - - /* reschedule if the handler returns nonzero */ - cmp r0, #0 - blne thread_preempt - - /* decrement the global critical section count */ - ldr r1, =critical_section_count - ldr r0, [r1] - sub r0, r0, #1 - str r0, [r1] - - /* restore spsr */ - ldmfd sp!, { r0 } - msr spsr_cxsf, r0 - - /* restore back to where we came from */ - ldmfd sp!, { r0-r3, r12, lr, pc }^ - -.bss -.align 2 - .global irq_save_spot -irq_save_spot: - .word 0 /* r4 */ - .word 0 /* r5 */ - .word 0 /* r6 */ - -.text -FUNCTION(arm_fiq) - sub lr, lr, #4 - stmfd sp!, { r0-r3, r12, lr } - - bl platform_fiq - - ldmfd sp!, { r0-r3, r12, pc }^ - -.ltorg diff --git a/lk/arch/arm/faults.c b/lk/arch/arm/faults.c deleted file mode 100644 index 020266a..0000000 --- a/lk/arch/arm/faults.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include - -static void dump_fault_frame(struct arm_fault_frame *frame) -{ - dprintf(CRITICAL, "r0 0x%08x r1 0x%08x r2 0x%08x r3 0x%08x\n", frame->r[0], frame->r[1], frame->r[2], frame->r[3]); - dprintf(CRITICAL, "r4 0x%08x r5 0x%08x r6 0x%08x r7 0x%08x\n", frame->r[4], frame->r[5], frame->r[6], frame->r[7]); - dprintf(CRITICAL, "r8 0x%08x r9 0x%08x r10 0x%08x r11 0x%08x\n", frame->r[8], frame->r[9], frame->r[10], frame->r[11]); - dprintf(CRITICAL, "r12 0x%08x usp 0x%08x ulr 0x%08x pc 0x%08x\n", frame->r[12], frame->usp, frame->ulr, frame->pc); - dprintf(CRITICAL, "spsr 0x%08x\n", frame->spsr); - - struct arm_mode_regs regs; - arm_save_mode_regs(®s); - - dprintf(CRITICAL, "%c%s r13 0x%08x r14 0x%08x\n", ((frame->spsr & MODE_MASK) == MODE_FIQ) ? '*' : ' ', "fiq", regs.fiq_r13, regs.fiq_r14); - dprintf(CRITICAL, "%c%s r13 0x%08x r14 0x%08x\n", ((frame->spsr & MODE_MASK) == MODE_IRQ) ? '*' : ' ', "irq", regs.irq_r13, regs.irq_r14); - dprintf(CRITICAL, "%c%s r13 0x%08x r14 0x%08x\n", ((frame->spsr & MODE_MASK) == MODE_SVC) ? '*' : ' ', "svc", regs.svc_r13, regs.svc_r14); - dprintf(CRITICAL, "%c%s r13 0x%08x r14 0x%08x\n", ((frame->spsr & MODE_MASK) == MODE_UND) ? '*' : ' ', "und", regs.und_r13, regs.und_r14); - dprintf(CRITICAL, "%c%s r13 0x%08x r14 0x%08x\n", ((frame->spsr & MODE_MASK) == MODE_SYS) ? '*' : ' ', "sys", regs.sys_r13, regs.sys_r14); - - // dump the bottom of the current stack - addr_t stack; - switch (frame->spsr & MODE_MASK) { - case MODE_FIQ: stack = regs.fiq_r13; break; - case MODE_IRQ: stack = regs.irq_r13; break; - case MODE_SVC: stack = regs.svc_r13; break; - case MODE_UND: stack = regs.und_r13; break; - case MODE_SYS: stack = regs.sys_r13; break; - default: - stack = 0; - } - - if (stack != 0) { - dprintf(CRITICAL, "bottom of stack at 0x%08x:\n", (unsigned int)stack); - hexdump((void *)stack, 128); - } -} - -static void exception_die(struct arm_fault_frame *frame, int pc_off, const char *msg) -{ - inc_critical_section(); - frame->pc += pc_off; - dprintf(CRITICAL, msg); - dump_fault_frame(frame); - - halt(); - for(;;); -} - -void arm_syscall_handler(struct arm_fault_frame *frame) -{ - exception_die(frame, -4, "unhandled syscall, halting\n"); -} - -void arm_undefined_handler(struct arm_fault_frame *frame) -{ - exception_die(frame, -4, "undefined abort, halting\n"); -} - -void arm_data_abort_handler(struct arm_fault_frame *frame) -{ - exception_die(frame, -8, "data abort, halting\n"); -} - -void arm_prefetch_abort_handler(struct arm_fault_frame *frame) -{ - exception_die(frame, -4, "prefetch abort, halting\n"); -} diff --git a/lk/arch/arm/include/arch/arch_thread.h b/lk/arch/arm/include/arch/arch_thread.h deleted file mode 100644 index 2f4facf..0000000 --- a/lk/arch/arm/include/arch/arch_thread.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ARM_ARCH_THREAD_H -#define __ARM_ARCH_THREAD_H - -struct arch_thread { - vaddr_t sp; -}; - -#endif - diff --git a/lk/arch/arm/include/arch/arm.h b/lk/arch/arm/include/arch/arm.h deleted file mode 100644 index a14bf9c..0000000 --- a/lk/arch/arm/include/arch/arm.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ARCH_ARM_H -#define __ARCH_ARM_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -void arm_context_switch(vaddr_t *old_sp, vaddr_t new_sp); - -static inline uint32_t read_cpsr() { - uint32_t cpsr; - - __asm__ volatile("mrs %0, cpsr" : "=r" (cpsr)); - return cpsr; -} - -struct arm_iframe { - uint32_t spsr; - uint32_t r0; - uint32_t r1; - uint32_t r2; - uint32_t r3; - uint32_t r12; - uint32_t lr; - uint32_t pc; -}; - -struct arm_fault_frame { - uint32_t spsr; - uint32_t usp; - uint32_t ulr; - uint32_t r[13]; - uint32_t pc; -}; - -#define MODE_MASK 0x1f -#define MODE_USR 0x10 -#define MODE_FIQ 0x11 -#define MODE_IRQ 0x12 -#define MODE_SVC 0x13 -#define MODE_MON 0x16 -#define MODE_ABT 0x17 -#define MODE_UND 0x1b -#define MODE_SYS 0x1f - -struct arm_mode_regs { - uint32_t fiq_r13, fiq_r14; - uint32_t irq_r13, irq_r14; - uint32_t svc_r13, svc_r14; - uint32_t abt_r13, abt_r14; - uint32_t und_r13, und_r14; - uint32_t sys_r13, sys_r14; -}; - -void arm_save_mode_regs(struct arm_mode_regs *regs); - -uint32_t arm_read_cr1(void); -void arm_write_cr1(uint32_t val); -uint32_t arm_read_cr1_aux(void); -void arm_write_cr1_aux(uint32_t val); -void arm_write_ttbr(uint32_t val); -void arm_write_dacr(uint32_t val); -void arm_invalidate_tlb(void); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/lk/arch/arm/include/arch/arm/cores.h b/lk/arch/arm/include/arch/arm/cores.h deleted file mode 100644 index e5ddd66..0000000 --- a/lk/arch/arm/include/arch/arm/cores.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ARM_CORES_H -#define __ARM_CORES_H - -/* - * make the gcc built in define a little easier to deal with - * to decide what core it is generating code for - * - * ARM_ARCH_LEVEL gets assigned a numeric value of the general family - * - * ARM_ARCH_* gets defined for each feature recursively - */ - -#if defined(__ARM_ARCH_7M__) -#define ARM_ARCH_7M 1 -#endif -#if defined(__ARM_ARCH_7R__) -#define ARM_ARCH_7R 1 -#endif -#if defined(__ARM_ARCH_7A__) || defined(ARM_ARCH_7R) -#define ARM_ARCH_7A 1 -#endif -#if defined(__ARM_ARCH_7__) || defined(ARM_ARCH_7A) || defined(ARM_ARCH_7M) -#define ARM_ARCH_7 1 -#ifndef ARM_ARCH_LEVEL -#define ARM_ARCH_LEVEL 7 -#endif -#endif - -#if defined(__ARM_ARCH_6M__) -#define ARM_ARCH_6M 1 -#endif -#if defined(__ARM_ARCH_6T2__) || defined(ARM_ARCH_7) -#define ARM_ARCH_6T2 1 -#endif -#if defined(__ARM_ARCH_6ZK__) -#define ARM_ARCH_6ZK 1 -#endif -#if defined(__ARM_ARCH_6Z__) || defined(ARM_ARCH_6ZK) -#define ARM_ARCH_6Z 1 -#endif -#if defined(__ARM_ARCH_6K__) || defined(ARM_ARCH_6ZK) || defined(ARM_ARCH_7) -#define ARM_ARCH_6K 1 -#endif -#if defined(__ARM_ARCH_6J__) -#define ARM_ARCH_6J 1 -#endif -#if defined(__ARM_ARCH_6__) || defined(ARM_ARCH_6J) || defined(ARM_ARCH_6K) || defined(ARM_ARCH_6Z) || defined(ARM_ARCH_6T2) || defined(ARM_ARCH_6M) -#define ARM_ARCH_6 1 -#ifndef ARM_ARCH_LEVEL -#define ARM_ARCH_LEVEL 6 -#endif -#endif - -#if defined(__ARM_ARCH_5TEJ__) -#define ARM_ARCH_5TEJ 1 -#endif -#if defined(__ARM_ARCH_5TE__) || defined(ARM_ARCH_5TEJ) || defined(ARM_ARCH_6) -#define ARM_ARCH_5TE 1 -#endif -#if defined(__ARM_ARCH_5E__) || defined(ARM_ARCH_5TE) -#define ARM_ARCH_5E 1 -#endif -#if defined(__ARM_ARCH_5T__) || defined(ARM_ARCH_5TE) -#define ARM_ARCH_5T 1 -#endif -#if defined(__ARM_ARCH_5__) || defined(ARM_ARCH_5E) || defined(ARM_ARCH_5T) -#define ARM_ARCH_5 1 -#ifndef ARM_ARCH_LEVEL -#define ARM_ARCH_LEVEL 5 -#endif -#endif - -#if defined(__ARM_ARCH_4T__) || defined(ARM_ARCH_5T) -#define ARM_ARCH_4T 1 -#endif -#if defined(__ARM_ARCH_4__) || defined(ARM_ARCH_4T) || defined(ARM_ARCH_5) -#define ARM_ARCH_4 1 -#ifndef ARM_ARCH_LEVEL -#define ARM_ARCH_LEVEL 4 -#endif -#endif - -#if 0 -/* test */ -#if ARM_ARCH_LEVEL >= 7 -#warning ARM_ARCH_LEVEL >= 7 -#endif -#if ARM_ARCH_LEVEL >= 6 -#warning ARM_ARCH_LEVEL >= 6 -#endif -#if ARM_ARCH_LEVEL >= 5 -#warning ARM_ARCH_LEVEL >= 5 -#endif -#if ARM_ARCH_LEVEL >= 4 -#warning ARM_ARCH_LEVEL >= 4 -#endif -#endif - -#endif - diff --git a/lk/arch/arm/include/arch/arm/dcc.h b/lk/arch/arm/include/arch/arm/dcc.h deleted file mode 100644 index ba1aba0..0000000 --- a/lk/arch/arm/include/arch/arm/dcc.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2008 Brian Swetland - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef __ARCH_ARM_DCC_H -#define __ARCH_ARM_DCC_H - -/* returns < 0 if no data available */ -int dcc_getc(void); - -/* returns < 0 if output register was already full */ -int dcc_putc(unsigned c); - -#endif diff --git a/lk/arch/arm/include/arch/arm/mmu.h b/lk/arch/arm/include/arch/arm/mmu.h deleted file mode 100644 index 719710c..0000000 --- a/lk/arch/arm/include/arch/arm/mmu.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ARCH_ARM_MMU_H -#define __ARCH_ARM_MMU_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -void arm_mmu_init(void); - -#define MMU_FLAG_CACHED 0x1 -#define MMU_FLAG_BUFFERED 0x2 -#define MMU_FLAG_READWRITE 0x4 -void arm_mmu_map_section(addr_t paddr, addr_t vaddr, uint flags); - - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/lk/arch/arm/include/arch/arm/ops.h b/lk/arch/arm/include/arch/arm/ops.h deleted file mode 100644 index 6e763c9..0000000 --- a/lk/arch/arm/include/arch/arm/ops.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ARCH_ARM_OPS_H -#define __ARHC_ARM_OPS_H - -#if 0 -#include - -#ifndef ASSEMBLY - -#if ARM_ISA_ARMV7 || ARM_ISA_ARMV6 -// override of some routines -__GNU_INLINE __ALWAYS_INLINE extern inline void arch_enable_ints(void) -{ - __asm__("cpsie i"); -} - -__GNU_INLINE __ALWAYS_INLINE extern inline void arch_disable_ints(void) -{ - __asm__("cpsid i"); -} -#endif - -#endif -#endif - -#endif - diff --git a/lk/arch/arm/include/arch/defines.h b/lk/arch/arm/include/arch/defines.h deleted file mode 100644 index 1d62a68..0000000 --- a/lk/arch/arm/include/arch/defines.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ARCH_CPU_H -#define __ARCH_CPU_H - -/* arm specific stuff */ -#define PAGE_SIZE 4096 - -#if ARM_CPU_ARM7 -/* irrelevant, no consistent cache */ -#define CACHE_LINE 32 -#elif ARM_CPU_ARM926 -#define CACHE_LINE 32 -#elif ARM_CPU_ARM1136 -#define CACHE_LINE 32 -#elif ARM_CPU_CORTEX_A8 -#define CACHE_LINE 64 -#else -#error unknown cpu -#endif - -#endif - diff --git a/lk/arch/arm/mmu.c b/lk/arch/arm/mmu.c deleted file mode 100644 index 74e9ecd..0000000 --- a/lk/arch/arm/mmu.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include - -#if ARM_WITH_MMU - -#define MB (1024*1024) - -/* the location of the table may be brought in from outside */ -#if WITH_EXTERNAL_TRANSLATION_TABLE -#if !defined(MMU_TRANSLATION_TABLE_ADDR) -#error must set MMU_TRANSLATION_TABLE_ADDR in the make configuration -#endif -static uint32_t *tt = (void *)MMU_TRANSLATION_TABLE_ADDR; -#else -/* the main translation table */ -static uint32_t tt[4096] __ALIGNED(16384); -#endif - -void arm_mmu_map_section(addr_t paddr, addr_t vaddr, uint flags) -{ - int index; - uint AP; - uint CB; - uint TEX = 0; - -#if defined(PLATFORM_MSM7K) - if ((paddr >= 0x88000000) && (paddr < 0xD0000000)) { - /* peripherals in the 0x88000000 - 0xD0000000 range must - * be mapped as DEVICE NON-SHARED: TEX=2, C=0, B=0 - */ - TEX = 2; - flags &= (~(MMU_FLAG_CACHED | MMU_FLAG_BUFFERED)); - } -#endif - - AP = (flags & MMU_FLAG_READWRITE) ? 0x3 : 0x2; - CB = ((flags & MMU_FLAG_CACHED) ? 0x2 : 0) | ((flags & MMU_FLAG_BUFFERED) ? 0x1 : 0); - - index = vaddr / MB; - // section mapping - tt[index] = (paddr & ~(MB-1)) | (TEX << 12) | (AP << 10) | (0<<5) | (CB << 2) | (2<<0); - - arm_invalidate_tlb(); -} - -void arm_mmu_init(void) -{ - int i; - - /* set some mmu specific control bits */ - arm_write_cr1(arm_read_cr1() & ~((1<<29)|(1<<28)|(1<<0))); // access flag disabled, TEX remap disabled, mmu disabled - - /* set up an identity-mapped translation table with cache disabled */ - for (i=0; i < 4096; i++) { - arm_mmu_map_section(i * MB, i * MB, MMU_FLAG_READWRITE); // map everything uncached - } - - /* set up the translation table base */ - arm_write_ttbr((uint32_t)tt); - - /* set up the domain access register */ - arm_write_dacr(0x00000001); - - /* turn on the mmu */ - arm_write_cr1(arm_read_cr1() | 0x1); -} - -void arch_disable_mmu(void) -{ - arm_write_cr1(arm_read_cr1() & ~(1<<0)); // access flag disabled, TEX remap disabled, mmu disabled -} - -#endif // ARM_WITH_MMU - diff --git a/lk/arch/arm/ops.S b/lk/arch/arm/ops.S deleted file mode 100644 index a858fa3..0000000 --- a/lk/arch/arm/ops.S +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include - -.text - -/* void arch_enable_ints(void); */ -FUNCTION(arch_enable_ints) - mrs r0, cpsr - bic r0, r0, #(1<<7) /* clear the I bit */ - msr cpsr_c, r0 - bx lr - -/* void arch_disable_ints(void); */ -FUNCTION(arch_disable_ints) - mrs r0, cpsr - orr r0, r0, #(1<<7) - msr cpsr_c, r0 - bx lr - -/* int atomic_swap(int *ptr, int val); */ -FUNCTION(atomic_swap) - swp r0, r2, [r1] - bx lr - -/* int atomic_add(int *ptr, int val); */ -FUNCTION(atomic_add) -#if ARM_ISA_ARMV6 || ARM_ISA_ARMV7 - /* use load/store exclusive */ -.L_loop_add: - ldrex r12, [r0] - add r2, r12, r1 - strex r3, r2, [r0] - cmp r3, #0 - bne .L_loop_add - - /* save old value */ - mov r0, r12 - bx lr -#else - /* disable interrupts, do the add, and reenable */ - mrs r2, cpsr - mov r12, r2 - orr r2, r2, #(3<<6) - msr cpsr_c, r2 - - /* ints disabled, old cpsr state in r12 */ - - /* do the add, leave the previous value in r0 */ - mov r3, r0 - ldr r0, [r3] - add r2, r0, r1 - str r2, [r3] - - /* restore interrupts and exit */ - msr cpsr_c, r12 - bx lr -#endif - -/* int atomic_and(int *ptr, int val); */ -FUNCTION(atomic_and) -#if ARM_ISA_ARMV6 || ARM_ISA_ARMV7 - /* use load/store exclusive */ -.L_loop_and: - ldrex r12, [r0] - and r2, r12, r1 - strex r3, r2, [r0] - cmp r3, #0 - bne .L_loop_and - - /* save old value */ - mov r0, r12 - bx lr -#else - /* disable interrupts, do the and, and reenable */ - mrs r2, cpsr - mov r12, r2 - orr r2, r2, #(3<<6) - msr cpsr_c, r2 - - /* ints disabled, old cpsr state in r12 */ - - /* do the and, leave the previous value in r0 */ - mov r3, r0 - ldr r0, [r3] - and r2, r0, r1 - str r2, [r3] - - /* restore interrupts and exit */ - msr cpsr_c, r12 - bx lr -#endif - -/* int atomic_or(int *ptr, int val); */ -FUNCTION(atomic_or) -#if ARM_ISA_ARMV6 || ARM_ISA_ARMV7 - /* use load/store exclusive */ -.L_loop_or: - ldrex r12, [r0] - orr r2, r12, r1 - strex r3, r2, [r0] - cmp r3, #0 - bne .L_loop_or - - /* save old value */ - mov r0, r12 - bx lr -#else - /* disable interrupts, do the or, and reenable */ - mrs r2, cpsr - mov r12, r2 - orr r2, r2, #(3<<6) - msr cpsr_c, r2 - - /* ints disabled, old cpsr state in r12 */ - - /* do the or, leave the previous value in r0 */ - mov r3, r0 - ldr r0, [r3] - orr r2, r0, r1 - str r2, [r3] - - /* restore interrupts and exit */ - msr cpsr_c, r12 - bx lr -#endif - -/* void arch_idle(); */ -FUNCTION(arch_idle) -#if ARM_CPU_CORTEX_A8 - .word 0xe320f003 /* wfi */ -#elif PLATFORM_MSM7K - /* TODO: safely handle wfi */ -#elif ARM_CPU_ARM1136 || ARM_CPU_ARM926 - mov r0, #0 - mcr p15, 0, r0, c7, c0, #4 -#elif ARM_CPU_ARM7 - /* nothing to do here */ -#else -#error unknown cpu -#endif - bx lr - -/* uint32_t arm_read_cr1(void) */ -FUNCTION(arm_read_cr1) - mrc p15, 0, r0, c1, c0, 0 - bx lr - -/* void arm_write_cr1(uint32_t val) */ -FUNCTION(arm_write_cr1) - mcr p15, 0, r0, c1, c0, 0 - bx lr - -/* uint32_t arm_read_cr1_aux(void) */ -FUNCTION(arm_read_cr1_aux) - mrc p15, 0, r0, c1, c0, 1 - bx lr - -/* void arm_write_cr1_aux(uint32_t val) */ -FUNCTION(arm_write_cr1_aux) - mcr p15, 0, r0, c1, c0, 1 - bx lr - -/* void arm_write_ttbr(uint32_t val) */ -FUNCTION(arm_write_ttbr) - mcr p15, 0, r0, c2, c0, 0 - bx lr - -/* void arm_write_dacr(uint32_t val) */ -FUNCTION(arm_write_dacr) - mcr p15, 0, r0, c3, c0, 0 - bx lr - -/* void arm_invalidate_tlb(void) */ -FUNCTION(arm_invalidate_tlb) - mov r0, #0 - mcr p15, 0, r0, c8, c7, 0 - bx lr - -/* void arch_switch_stacks_and_call(addr_t call, addr_t stack) */ -FUNCTION(arch_switch_stacks_and_call) - mov sp, r1 - bx r0 - -/*void dmb(void) */ -FUNCTION(dmb) -#if ARM_CPU_CORTEX_A8 - dmb sy -#elif ARM_CPU_ARM1136 - mov r0, #0 - mcr p15, 0, r0, c7, c10, 5 -#endif - bx lr diff --git a/lk/arch/arm/rules.mk b/lk/arch/arm/rules.mk deleted file mode 100644 index 6f56edd..0000000 --- a/lk/arch/arm/rules.mk +++ /dev/null @@ -1,142 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -# can override this in local.mk -ENABLE_THUMB?=true - -DEFINES += \ - ARM_CPU_$(ARM_CPU)=1 - -# do set some options based on the cpu core -HANDLED_CORE := false -ifeq ($(ARM_CPU),cortex-a8) -DEFINES += \ - ARM_WITH_CP15=1 \ - ARM_WITH_MMU=1 \ - ARM_ISA_ARMv7=1 \ - ARM_WITH_VFP=1 \ - ARM_WITH_NEON=1 \ - ARM_WITH_THUMB=1 \ - ARM_WITH_THUMB2=1 \ - ARM_WITH_CACHE=1 \ - ARM_WITH_L2=1 -CFLAGS += -mcpu=$(ARM_CPU) -#CFLAGS += -mcpu=arm1136jf-s # compiler doesn't understand cortex yet -HANDLED_CORE := true -#CFLAGS += -mfpu=vfp -mfloat-abi=softfp -endif -ifeq ($(ARM_CPU),arm1136j-s) -DEFINES += \ - ARM_WITH_CP15=1 \ - ARM_WITH_MMU=1 \ - ARM_ISA_ARMv6=1 \ - ARM_WITH_THUMB=1 \ - ARM_WITH_CACHE=1 \ - ARM_CPU_ARM1136=1 -CFLAGS += -mcpu=$(ARM_CPU) -HANDLED_CORE := true -endif -ifeq ($(ARM_CPU),arm1176jzf-s) -DEFINES += \ - ARM_WITH_CP15=1 \ - ARM_WITH_MMU=1 \ - ARM_ISA_ARMv6=1 \ - ARM_WITH_VFP=1 \ - ARM_WITH_THUMB=1 \ - ARM_WITH_CACHE=1 \ - ARM_CPU_ARM1136=1 -CFLAGS += -mcpu=$(ARM_CPU) -HANDLED_CORE := true -endif -ifeq ($(ARM_CPU),arm926ej-s) -DEFINES += \ - ARM_WITH_CP15=1 \ - ARM_WITH_MMU=1 \ - ARM_ISA_ARMv5E=1 \ - ARM_WITH_THUMB=1 \ - ARM_WITH_CACHE=1 \ - ARM_CPU_ARM9=1 \ - ARM_CPU_ARM926=1 -CFLAGS += -mcpu=$(ARM_CPU) -HANDLED_CORE := true -endif -ifeq ($(ARM_CPU),arm7tdmi) -DEFINES += \ - ARM_ISA_ARMv4=1 \ - ARM_WITH_THUMB=1 \ - ARM_CPU_ARM7=1 -CFLAGS += -mcpu=$(ARM_CPU) -HANDLED_CORE := true -endif - -ifneq ($(HANDLED_CORE),true) -$(warning $(LOCAL_DIR)/rules.mk doesnt have logic for arm core $(ARM_CPU)) -$(warning this is likely to be broken) -endif - -THUMBCFLAGS := -THUMBINTERWORK := -ifeq ($(ENABLE_THUMB),true) -THUMBCFLAGS := -mthumb -D__thumb__ -THUMBINTERWORK := -mthumb-interwork -endif - -INCLUDES += \ - -I$(LOCAL_DIR)/include - -BOOTOBJS += \ - $(LOCAL_DIR)/crt0.o - -OBJS += \ - $(LOCAL_DIR)/arch.Ao \ - $(LOCAL_DIR)/asm.o \ - $(LOCAL_DIR)/cache.o \ - $(LOCAL_DIR)/cache-ops.o \ - $(LOCAL_DIR)/ops.o \ - $(LOCAL_DIR)/exceptions.o \ - $(LOCAL_DIR)/faults.o \ - $(LOCAL_DIR)/mmu.o \ - $(LOCAL_DIR)/thread.o \ - $(LOCAL_DIR)/dcc.o - -# set the default toolchain to arm eabi and set a #define -TOOLCHAIN_PREFIX ?= arm-eabi- -ifeq ($(TOOLCHAIN_PREFIX),arm-none-linux-gnueabi-) -# XXX test for EABI better than this -# eabi compilers dont need this -THUMBINTERWORK:= -endif - -CFLAGS += $(THUMBINTERWORK) - -# make sure some bits were set up -MEMVARS_SET := 0 -ifneq ($(MEMBASE),) -MEMVARS_SET := 1 -endif -ifneq ($(MEMSIZE),) -MEMVARS_SET := 1 -endif -ifeq ($(MEMVARS_SET),0) -$(error missing MEMBASE or MEMSIZE variable, please set in target rules.mk) -endif - -LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(CFLAGS) $(THUMBCFLAGS) -print-libgcc-file-name) -#$(info LIBGCC = $(LIBGCC)) - -# potentially generated files that should be cleaned out with clean make rule -GENERATED += \ - $(BUILDDIR)/system-onesegment.ld \ - $(BUILDDIR)/system-twosegment.ld - -# rules for generating the linker scripts - -$(BUILDDIR)/system-onesegment.ld: $(LOCAL_DIR)/system-onesegment.ld - @echo generating $@ - @$(MKDIR) - $(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/" < $< > $@ - -$(BUILDDIR)/system-twosegment.ld: $(LOCAL_DIR)/system-twosegment.ld - @echo generating $@ - @$(MKDIR) - $(NOECHO)sed "s/%ROMBASE%/$(ROMBASE)/;s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/" < $< > $@ - diff --git a/lk/arch/arm/system-onesegment.ld b/lk/arch/arm/system-onesegment.ld deleted file mode 100644 index 9f0e7fc..0000000 --- a/lk/arch/arm/system-onesegment.ld +++ /dev/null @@ -1,82 +0,0 @@ -OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") -OUTPUT_ARCH(arm) - -ENTRY(_start) -SECTIONS -{ - . = %MEMBASE%; - - .interp : { *(.interp) } - .hash : { *(.hash) } - .dynsym : { *(.dynsym) } - .dynstr : { *(.dynstr) } - .rel.text : { *(.rel.text) *(.rel.gnu.linkonce.t*) } - .rela.text : { *(.rela.text) *(.rela.gnu.linkonce.t*) } - .rel.data : { *(.rel.data) *(.rel.gnu.linkonce.d*) } - .rela.data : { *(.rela.data) *(.rela.gnu.linkonce.d*) } - .rel.rodata : { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } - .rela.rodata : { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.ctors : { *(.rel.ctors) } - .rela.ctors : { *(.rela.ctors) } - .rel.dtors : { *(.rel.dtors) } - .rela.dtors : { *(.rela.dtors) } - .rel.init : { *(.rel.init) } - .rela.init : { *(.rela.init) } - .rel.fini : { *(.rel.fini) } - .rela.fini : { *(.rela.fini) } - .rel.bss : { *(.rel.bss) } - .rela.bss : { *(.rela.bss) } - .rel.plt : { *(.rel.plt) } - .rela.plt : { *(.rela.plt) } - .init : { *(.init) } =0x9090 - .plt : { *(.plt) } - - /* text/read-only data */ - .text : { *(.text .text.* .glue_7* .gnu.linkonce.t.*) } =0x9090 - - .rodata : { - *(.rodata .rodata.* .gnu.linkonce.r.*) - . = ALIGN(4); - __commands_start = .; - KEEP (*(.commands)) - __commands_end = .; - . = ALIGN(4); - __apps_start = .; - KEEP (*(.apps)) - __apps_end = .; - . = ALIGN(4); - __rodata_end = . ; - } - - /* writable data */ - __data_start_rom = .; /* in one segment binaries, the rom data address is on top of the ram data address */ - __data_start = .; - .data : SUBALIGN(4) { *(.data .data.* .gnu.linkonce.d.*) } - - __ctor_list = .; - .ctors : { *(.ctors) } - __ctor_end = .; - __dtor_list = .; - .dtors : { *(.dtors) } - __dtor_end = .; - .got : { *(.got.plt) *(.got) } - .dynamic : { *(.dynamic) } - - __data_end = .; - - /* unintialized data (in same segment as writable data) */ - . = ALIGN(4); - __bss_start = .; - .bss : { *(.bss .bss.*) } - - . = ALIGN(4); - _end = .; - - . = %MEMBASE% + %MEMSIZE%; - _end_of_ram = .; - - /* Strip unnecessary stuff */ - /DISCARD/ : { *(.comment .note .eh_frame) } -} diff --git a/lk/arch/arm/system-twosegment.ld b/lk/arch/arm/system-twosegment.ld deleted file mode 100644 index 3a1c04c..0000000 --- a/lk/arch/arm/system-twosegment.ld +++ /dev/null @@ -1,85 +0,0 @@ -OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") -OUTPUT_ARCH(arm) - -ENTRY(_start) -SECTIONS -{ - . = %ROMBASE%; - - .interp : { *(.interp) } - .hash : { *(.hash) } - .dynsym : { *(.dynsym) } - .dynstr : { *(.dynstr) } - .rel.text : { *(.rel.text) *(.rel.gnu.linkonce.t*) } - .rela.text : { *(.rela.text) *(.rela.gnu.linkonce.t*) } - .rel.data : { *(.rel.data) *(.rel.gnu.linkonce.d*) } - .rela.data : { *(.rela.data) *(.rela.gnu.linkonce.d*) } - .rel.rodata : { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } - .rela.rodata : { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.ctors : { *(.rel.ctors) } - .rela.ctors : { *(.rela.ctors) } - .rel.dtors : { *(.rel.dtors) } - .rela.dtors : { *(.rela.dtors) } - .rel.init : { *(.rel.init) } - .rela.init : { *(.rela.init) } - .rel.fini : { *(.rel.fini) } - .rela.fini : { *(.rela.fini) } - .rel.bss : { *(.rel.bss) } - .rela.bss : { *(.rela.bss) } - .rel.plt : { *(.rel.plt) } - .rela.plt : { *(.rela.plt) } - .init : { *(.init) } =0x9090 - .plt : { *(.plt) } - - /* text/read-only data */ - .text : { *(.text .text.* .glue_7* .gnu.linkonce.t.*) } =0x9090 - - .rodata : { - *(.rodata .rodata.* .gnu.linkonce.r.*) - . = ALIGN(4); - __commands_start = .; - KEEP (*(.commands)) - __commands_end = .; - . = ALIGN(4); - __apps_start = .; - KEEP (*(.apps)) - __apps_end = .; - . = ALIGN(4); - __rodata_end = . ; - } - - /* writable data */ - __data_start_rom = .; - . = %MEMBASE%; - __data_start = .; - .data : - AT ( ADDR (.rodata) + SIZEOF (.rodata) ) - { *(.data .data.* .gnu.linkonce.d.*) } - - __ctor_list = .; - .ctors : { *(.ctors) } - __ctor_end = .; - __dtor_list = .; - .dtors : { *(.dtors) } - __dtor_end = .; - .got : { *(.got.plt) *(.got) } - .dynamic : { *(.dynamic) } - - __data_end = .; - - /* unintialized data (in same segment as writable data) */ - . = ALIGN(4); - __bss_start = .; - .bss : { *(.bss .bss.*) } - - . = ALIGN(4); - _end = . ; - - . = %MEMBASE% + %MEMSIZE%; - _end_of_ram = . ; - - /* Strip unnecessary stuff */ - /DISCARD/ : { *(.comment .note .eh_frame) } -} diff --git a/lk/arch/arm/thread.c b/lk/arch/arm/thread.c deleted file mode 100644 index c16a432..0000000 --- a/lk/arch/arm/thread.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include - -struct context_switch_frame { - vaddr_t r4; - vaddr_t r5; - vaddr_t r6; - vaddr_t r7; - vaddr_t r8; - vaddr_t r9; - vaddr_t r10; - vaddr_t r11; - vaddr_t lr; - vaddr_t usp; - vaddr_t ulr; -}; - -extern void arm_context_switch(addr_t *old_sp, addr_t new_sp); - -static void initial_thread_func(void) __NO_RETURN; -static void initial_thread_func(void) -{ - int ret; - -// dprintf("initial_thread_func: thread %p calling %p with arg %p\n", current_thread, current_thread->entry, current_thread->arg); -// dump_thread(current_thread); - - /* exit the implicit critical section we're within */ - exit_critical_section(); - - ret = current_thread->entry(current_thread->arg); - -// dprintf("initial_thread_func: thread %p exiting with %d\n", current_thread, ret); - - thread_exit(ret); -} - -void arch_thread_initialize(thread_t *t) -{ - // create a default stack frame on the stack - vaddr_t stack_top = (vaddr_t)t->stack + t->stack_size; - - // make sure the top of the stack is 8 byte aligned for EABI compliance - stack_top = ROUNDDOWN(stack_top, 8); - - struct context_switch_frame *frame = (struct context_switch_frame *)(stack_top); - frame--; - - // fill it in - memset(frame, 0, sizeof(*frame)); - frame->lr = (vaddr_t)&initial_thread_func; - - // set the stack pointer - t->arch.sp = (vaddr_t)frame; -} - -void arch_context_switch(thread_t *oldthread, thread_t *newthread) -{ -// dprintf("arch_context_switch: old %p (%s), new %p (%s)\n", oldthread, oldthread->name, newthread, newthread->name); - arm_context_switch(&oldthread->arch.sp, newthread->arch.sp); -} - diff --git a/lk/dev/dev.c b/lk/dev/dev.c deleted file mode 100644 index 5288b51..0000000 --- a/lk/dev/dev.c +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -void dev_init(void) -{ - -} - diff --git a/lk/dev/fbcon/fbcon.c b/lk/dev/fbcon/fbcon.c deleted file mode 100644 index 61e7cb4..0000000 --- a/lk/dev/fbcon/fbcon.c +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include - -#include "font5x12.h" - -struct pos { - int x; - int y; -}; - -static struct fbcon_config *config = NULL; - -#define RGB565_BLACK 0x0000 -#define RGB565_WHITE 0xffff - -#define RGB888_BLACK 0x000000 -#define RGB888_WHITE 0xffffff - -#define FONT_WIDTH 5 -#define FONT_HEIGHT 12 - -static uint16_t BGCOLOR; -static uint16_t FGCOLOR; - -static struct pos cur_pos; -static struct pos max_pos; - -static void fbcon_drawglyph(uint16_t *pixels, uint16_t paint, unsigned stride, - unsigned *glyph) -{ - unsigned x, y, data; - stride -= FONT_WIDTH; - - data = glyph[0]; - for (y = 0; y < (FONT_HEIGHT / 2); ++y) { - for (x = 0; x < FONT_WIDTH; ++x) { - if (data & 1) - *pixels = paint; - data >>= 1; - pixels++; - } - pixels += stride; - } - - data = glyph[1]; - for (y = 0; y < (FONT_HEIGHT / 2); y++) { - for (x = 0; x < FONT_WIDTH; x++) { - if (data & 1) - *pixels = paint; - data >>= 1; - pixels++; - } - pixels += stride; - } -} - -static void fbcon_flush(void) -{ - if (config->update_start) - config->update_start(); - if (config->update_done) - while (!config->update_done()); -} - -/* TODO: Take stride into account */ -static void fbcon_scroll_up(void) -{ - unsigned short *dst = config->base; - unsigned short *src = dst + (config->width * FONT_HEIGHT); - unsigned count = config->width * (config->height - FONT_HEIGHT); - - while(count--) { - *dst++ = *src++; - } - - count = config->width * FONT_HEIGHT; - while(count--) { - *dst++ = BGCOLOR; - } - - fbcon_flush(); -} - -/* TODO: take stride into account */ -void fbcon_clear(void) -{ - unsigned count = config->width * config->height; - memset(config->base, BGCOLOR, count * ((config->bpp) / 8)); -} - - -static void fbcon_set_colors(unsigned bg, unsigned fg) -{ - BGCOLOR = bg; - FGCOLOR = fg; -} - -void fbcon_putc(char c) -{ - uint16_t *pixels; - - /* ignore anything that happens before fbcon is initialized */ - if (!config) - return; - - if((unsigned char)c > 127) - return; - if((unsigned char)c < 32) { - if(c == '\n') - goto newline; - else if (c == '\r') - cur_pos.x = 0; - return; - } - - pixels = config->base; - pixels += cur_pos.y * FONT_HEIGHT * config->width; - pixels += cur_pos.x * (FONT_WIDTH + 1); - fbcon_drawglyph(pixels, FGCOLOR, config->stride, - font5x12 + (c - 32) * 2); - - cur_pos.x++; - if (cur_pos.x < max_pos.x) - return; - -newline: - cur_pos.y++; - cur_pos.x = 0; - if(cur_pos.y >= max_pos.y) { - cur_pos.y = max_pos.y - 1; - fbcon_scroll_up(); - } else - fbcon_flush(); -} - -void fbcon_setup(struct fbcon_config *_config) -{ - uint32_t bg; - uint32_t fg; - - ASSERT(_config); - - config = _config; - - switch (config->format) { - case FB_FORMAT_RGB565: - fg = RGB565_WHITE; - bg = RGB565_BLACK; - break; - case FB_FORMAT_RGB888: - fg = RGB888_WHITE; - bg = RGB888_BLACK; - break; - default: - dprintf(CRITICAL, "unknown framebuffer pixel format\n"); - ASSERT(0); - break; - } - - fbcon_set_colors(bg, fg); - - cur_pos.x = 0; - cur_pos.y = 0; - max_pos.x = config->width / (FONT_WIDTH+1); - max_pos.y = (config->height - 1) / FONT_HEIGHT; -#if !DISPLAY_SPLASH_SCREEN - fbcon_clear(); -#endif -} - -struct fbcon_config* fbcon_display(void) -{ - return config; -} - -void diplay_image_on_screen(void) -{ - unsigned i = 0; - unsigned total_x = config->width; - unsigned total_y = config->height; - unsigned bytes_per_bpp = ((config->bpp) / 8); - unsigned image_base = ((((total_y/2) - (SPLASH_IMAGE_WIDTH / 2) - 1) * - (config->width)) + (total_x/2 - (SPLASH_IMAGE_HEIGHT / 2))); - fbcon_clear(); - -#if DISPLAY_TYPE_MIPI - if (bytes_per_bpp == 3) - { - for (i = 0; i < SPLASH_IMAGE_WIDTH; i++) - { - memcpy (config->base + ((image_base + (i * (config->width))) * bytes_per_bpp), - imageBuffer_rgb888 + (i * SPLASH_IMAGE_HEIGHT * bytes_per_bpp), - SPLASH_IMAGE_HEIGHT * bytes_per_bpp); - } - } - fbcon_flush(); - if(is_cmd_mode_enabled()) - mipi_dsi_cmd_mode_trigger(); - -#else - if (bytes_per_bpp == 2) - { - for (i = 0; i < SPLASH_IMAGE_WIDTH; i++) - { - memcpy (config->base + ((image_base + (i * (config->width))) * bytes_per_bpp), - imageBuffer + (i * SPLASH_IMAGE_HEIGHT * bytes_per_bpp), - SPLASH_IMAGE_HEIGHT * bytes_per_bpp); - } - } - fbcon_flush(); -#endif -} diff --git a/lk/dev/fbcon/font5x12.h b/lk/dev/fbcon/font5x12.h deleted file mode 100644 index e033bf6..0000000 --- a/lk/dev/fbcon/font5x12.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -unsigned font5x12[] = { - 0x00000000, 0x00000000, - 0x08421080, 0x00020084, - 0x00052940, 0x00000000, - 0x15f52800, 0x0000295f, - 0x1c52f880, 0x00023e94, - 0x08855640, 0x0004d542, - 0x04528800, 0x000b2725, - 0x00021080, 0x00000000, - 0x04211088, 0x00821042, - 0x10841082, 0x00221108, - 0x09575480, 0x00000000, - 0x3e420000, 0x00000084, - 0x00000000, 0x00223000, - 0x3e000000, 0x00000000, - 0x00000000, 0x00471000, - 0x08844200, 0x00008442, - 0x2318a880, 0x00022a31, - 0x08429880, 0x000f9084, - 0x1108c5c0, 0x000f8444, - 0x1c4443e0, 0x00074610, - 0x14a62100, 0x000423e9, - 0x26d087e0, 0x00074610, - 0x1e10c5c0, 0x00074631, - 0x088443e0, 0x00010844, - 0x1d18c5c0, 0x00074631, - 0x3d18c5c0, 0x00074610, - 0x08e20000, 0x00471000, - 0x08e20000, 0x00223000, - 0x02222200, 0x00082082, - 0x01f00000, 0x000003e0, - 0x20820820, 0x00008888, - 0x1108c5c0, 0x00020084, - 0x2b98c5c0, 0x000f05b5, - 0x2318a880, 0x0008c63f, - 0x1d2949e0, 0x0007ca52, - 0x0210c5c0, 0x00074421, - 0x252949e0, 0x0007ca52, - 0x1e1087e0, 0x000f8421, - 0x1e1087e0, 0x00008421, - 0x0210c5c0, 0x00074639, - 0x3f18c620, 0x0008c631, - 0x084211c0, 0x00071084, - 0x10842380, 0x00032508, - 0x0654c620, 0x0008c525, - 0x02108420, 0x000f8421, - 0x2b5dc620, 0x0008c631, - 0x2b59ce20, 0x0008c739, - 0x2318c5c0, 0x00074631, - 0x1f18c5e0, 0x00008421, - 0x2318c5c0, 0x01075631, - 0x1f18c5e0, 0x0008c525, - 0x1c10c5c0, 0x00074610, - 0x084213e0, 0x00021084, - 0x2318c620, 0x00074631, - 0x1518c620, 0x0002114a, - 0x2b18c620, 0x000556b5, - 0x08a54620, 0x0008c54a, - 0x08a54620, 0x00021084, - 0x088443e0, 0x000f8442, - 0x0421084e, 0x00e10842, - 0x08210420, 0x00084108, - 0x1084210e, 0x00e42108, - 0x0008a880, 0x00000000, - 0x00000000, 0x01f00000, - 0x00000104, 0x00000000, - 0x20e00000, 0x000b663e, - 0x22f08420, 0x0007c631, - 0x22e00000, 0x00074421, - 0x23e84200, 0x000f4631, - 0x22e00000, 0x0007443f, - 0x1e214980, 0x00010842, - 0x22e00000, 0x1d187a31, - 0x26d08420, 0x0008c631, - 0x08601000, 0x00071084, - 0x10c02000, 0x0c94a108, - 0x0a908420, 0x0008a4a3, - 0x084210c0, 0x00071084, - 0x2ab00000, 0x0008d6b5, - 0x26d00000, 0x0008c631, - 0x22e00000, 0x00074631, - 0x22f00000, 0x0210be31, - 0x23e00000, 0x21087a31, - 0x26d00000, 0x00008421, - 0x22e00000, 0x00074506, - 0x04f10800, 0x00064842, - 0x23100000, 0x000b6631, - 0x23100000, 0x00022951, - 0x23100000, 0x000556b5, - 0x15100000, 0x0008a884, - 0x23100000, 0x1d185b31, - 0x11f00000, 0x000f8444, - 0x06421098, 0x01821084, - 0x08421080, 0x00021084, - 0x30421083, 0x00321084, - 0x0004d640, 0x00000000, - 0x00000000, 0x00000000, -}; diff --git a/lk/dev/fbcon/rules.mk b/lk/dev/fbcon/rules.mk deleted file mode 100644 index 85c678c..0000000 --- a/lk/dev/fbcon/rules.mk +++ /dev/null @@ -1,5 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/fbcon.o - diff --git a/lk/dev/keys/gpio_keypad.c b/lk/dev/keys/gpio_keypad.c deleted file mode 100644 index 86a31c7..0000000 --- a/lk/dev/keys/gpio_keypad.c +++ /dev/null @@ -1,618 +0,0 @@ -/* - * Copyright (c) 2009, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct gpio_kp { - struct gpio_keypad_info *keypad_info; - struct timer timer; - event_t full_scan; - int current_output; - unsigned int some_keys_pressed:2; - unsigned long keys_pressed[0]; -}; - -struct gpio_qwerty_kp { - struct qwerty_keypad_info *keypad_info; - struct timer timer; - event_t full_scan; - int num_of_scans; - unsigned int some_keys_pressed:2; - unsigned long keys_pressed[0]; -}; - -static struct gpio_qwerty_kp *qwerty_keypad; -/* TODO: Support multiple keypads? */ -static struct gpio_kp *keypad; - -static void check_output(struct gpio_kp *kp, int out, int polarity) -{ - struct gpio_keypad_info *kpinfo = kp->keypad_info; - int key_index; - int in; - int gpio; - int changed = 0; - - key_index = out * kpinfo->ninputs; - for (in = 0; in < kpinfo->ninputs; in++, key_index++) { - gpio = kpinfo->input_gpios[in]; - changed = 0; - if (gpio_get(gpio) ^ !polarity) { - if (kp->some_keys_pressed < 3) - kp->some_keys_pressed++; - changed = !bitmap_set(kp->keys_pressed, key_index); - } else { - changed = bitmap_clear(kp->keys_pressed, key_index); - } - if (changed) { - int state = bitmap_test(kp->keys_pressed, key_index); - keys_post_event(kpinfo->keymap[key_index], state); - } - } - - /* sets up the right state for the next poll cycle */ - gpio = kpinfo->output_gpios[out]; - if (kpinfo->flags & GPIOKPF_DRIVE_INACTIVE) - gpio_set(gpio, !polarity); - else - gpio_config(gpio, GPIO_INPUT); -} - -static enum handler_return -gpio_keypad_timer_func(struct timer *timer, time_t now, void *arg) -{ - struct gpio_kp *kp = keypad; - struct gpio_keypad_info *kpinfo = kp->keypad_info; - int polarity = !!(kpinfo->flags & GPIOKPF_ACTIVE_HIGH); - int out; - int gpio; - - out = kp->current_output; - if (out == kpinfo->noutputs) { - out = 0; - kp->some_keys_pressed = 0; - } else { - check_output(kp, out, polarity); - out++; - } - - kp->current_output = out; - if (out < kpinfo->noutputs) { - gpio = kpinfo->output_gpios[out]; - if (kpinfo->flags & GPIOKPF_DRIVE_INACTIVE) - gpio_set(gpio, polarity); - else - gpio_config(gpio, polarity ? GPIO_OUTPUT : 0); - timer_set_oneshot(timer, kpinfo->settle_time, - gpio_keypad_timer_func, NULL); - goto done; - } - - if (/*!kp->use_irq*/ 1 || kp->some_keys_pressed) { - event_signal(&kp->full_scan, false); - timer_set_oneshot(timer, kpinfo->poll_time, - gpio_keypad_timer_func, NULL); - goto done; - } - -#if 0 - /* No keys are pressed, reenable interrupt */ - for (out = 0; out < kpinfo->noutputs; out++) { - if (gpio_keypad_flags & GPIOKPF_DRIVE_INACTIVE) - gpio_set(kpinfo->output_gpios[out], polarity); - else - gpio_config(kpinfo->output_gpios[out], polarity ? GPIO_OUTPUT : 0); - } - for (in = 0; in < kpinfo->ninputs; in++) - enable_irq(gpio_to_irq(kpinfo->input_gpios[in])); - return INT_RESCHEDULE; -#endif - -done: - return INT_RESCHEDULE; -} - -void gpio_keypad_init(struct gpio_keypad_info *kpinfo) -{ - int key_count; - int output_val; - int output_cfg; - int i; - int len; - - ASSERT(kpinfo->keymap && kpinfo->input_gpios && kpinfo->output_gpios); - key_count = kpinfo->ninputs * kpinfo->noutputs; - - len = sizeof(struct gpio_kp) + (sizeof(unsigned long) * - BITMAP_NUM_WORDS(key_count)); - keypad = malloc(len); - ASSERT(keypad); - - memset(keypad, 0, len); - keypad->keypad_info = kpinfo; - - output_val = (!!(kpinfo->flags & GPIOKPF_ACTIVE_HIGH)) ^ - (!!(kpinfo->flags & GPIOKPF_DRIVE_INACTIVE)); - output_cfg = kpinfo->flags & GPIOKPF_DRIVE_INACTIVE ? GPIO_OUTPUT : 0; - for (i = 0; i < kpinfo->noutputs; i++) { - gpio_set(kpinfo->output_gpios[i], output_val); - gpio_config(kpinfo->output_gpios[i], output_cfg); - } - for (i = 0; i < kpinfo->ninputs; i++) - gpio_config(kpinfo->input_gpios[i], GPIO_INPUT); - - keypad->current_output = kpinfo->noutputs; - - event_init(&keypad->full_scan, false, EVENT_FLAG_AUTOUNSIGNAL); - timer_initialize(&keypad->timer); - timer_set_oneshot(&keypad->timer, 0, gpio_keypad_timer_func, NULL); - - /* wait for the keypad to complete one full scan */ - event_wait(&keypad->full_scan); -} - -int i2c_ssbi_poll_for_device_ready(void) -{ - unsigned long timeout = SSBI_TIMEOUT_US; - - while (!(readl(MSM_SSBI_BASE + SSBI2_STATUS) & SSBI_STATUS_READY)) { - if (--timeout == 0) { - dprintf(INFO, "In Device ready function:Timeout, status %x\n", readl(MSM_SSBI_BASE + SSBI2_STATUS)); - return 1; - } - } - - return 0; -} - -int i2c_ssbi_poll_for_read_completed(void) -{ - unsigned long timeout = SSBI_TIMEOUT_US; - - while (!(readl(MSM_SSBI_BASE + SSBI2_STATUS) & SSBI_STATUS_RD_READY)) { - if (--timeout == 0) { - dprintf(INFO, "In read completed function:Timeout, status %x\n", readl(MSM_SSBI_BASE + SSBI2_STATUS)); - return 1; - } - } - - return 0; -} - -int i2c_ssbi_read_bytes(unsigned char *buffer, unsigned short length, - unsigned short slave_addr) -{ - int ret = 0; - unsigned char *buf = buffer; - unsigned short len = length; - unsigned short addr = slave_addr; - unsigned long read_cmd = SSBI_CMD_READ(addr); - unsigned long mode2 = readl(MSM_SSBI_BASE + SSBI2_MODE2); - - //buf = alloc(len * sizeof(8)); - if (mode2 & SSBI_MODE2_SSBI2_MODE) - writel(SSBI_MODE2_REG_ADDR_15_8(mode2, addr), - MSM_SSBI_BASE + SSBI2_MODE2); - - while (len) { - ret = i2c_ssbi_poll_for_device_ready(); - if (ret) { - dprintf (CRITICAL, "Error: device not ready\n"); - return ret; - } - - writel(read_cmd, MSM_SSBI_BASE + SSBI2_CMD); - - ret = i2c_ssbi_poll_for_read_completed(); - if (ret) { - dprintf (CRITICAL, "Error: read not completed\n"); - return ret; - } - - *buf++ = readl(MSM_SSBI_BASE + SSBI2_RD) & SSBI_RD_REG_DATA_MASK; - len--; - } - return 0; -} - -int i2c_ssbi_write_bytes(unsigned char *buffer, unsigned short length, - unsigned short slave_addr) -{ - int ret = 0; - unsigned long timeout = SSBI_TIMEOUT_US; - unsigned char *buf = buffer; - unsigned short len = length; - unsigned short addr = slave_addr; - unsigned long mode2 = readl(MSM_SSBI_BASE + SSBI2_MODE2); - - if (mode2 & SSBI_MODE2_SSBI2_MODE) - writel(SSBI_MODE2_REG_ADDR_15_8(mode2, addr), - MSM_SSBI_BASE + SSBI2_MODE2); - - while (len) { - ret = i2c_ssbi_poll_for_device_ready(); - if (ret) { - dprintf (CRITICAL, "Error: device not ready\n"); - return ret; - } - - writel(SSBI_CMD_WRITE(addr, *buf++), MSM_SSBI_BASE + SSBI2_CMD); - - while (readl(MSM_SSBI_BASE + SSBI2_STATUS) & SSBI_STATUS_MCHN_BUSY) { - if (--timeout == 0) { - dprintf(INFO, "In Device ready function:Timeout, status %x\n", readl(MSM_SSBI_BASE + SSBI2_STATUS)); - return 1; - } - } - len--; - } - return 0; -} - -int pa1_ssbi2_read_bytes(unsigned char *buffer, unsigned short length, - unsigned short slave_addr) -{ - unsigned val = 0x0; - unsigned temp = 0x0000; - unsigned char *buf = buffer; - unsigned short len = length; - unsigned short addr = slave_addr; - unsigned long timeout = SSBI_TIMEOUT_US; - - while(len) - { - val |= ((addr << PA1_SSBI2_REG_ADDR_SHIFT) | - (PA1_SSBI2_CMD_READ << PA1_SSBI2_CMD_RDWRN_SHIFT)); - writel(val, PA1_SSBI2_CMD); - while(!((temp = readl(PA1_SSBI2_RD_STATUS)) & (1 << PA1_SSBI2_TRANS_DONE_SHIFT))) { - if (--timeout == 0) { - dprintf(INFO, "In Device ready function:Timeout\n"); - return 1; - } - } - len--; - *buf++ = (temp & (PA1_SSBI2_REG_DATA_MASK << PA1_SSBI2_REG_DATA_SHIFT)); - } - return 0; -} - -int pa1_ssbi2_write_bytes(unsigned char *buffer, unsigned short length, - unsigned short slave_addr) -{ - unsigned val; - unsigned char *buf = buffer; - unsigned short len = length; - unsigned short addr = slave_addr; - unsigned temp = 0x00; - unsigned char written_data1 = 0x00; - unsigned long timeout = SSBI_TIMEOUT_US; - //unsigned char written_data2 = 0x00; - - while(len) - { - temp = 0x00; - written_data1 = 0x00; - val = (addr << PA1_SSBI2_REG_ADDR_SHIFT) | - (PA1_SSBI2_CMD_WRITE << PA1_SSBI2_CMD_RDWRN_SHIFT) | - (*buf & 0xFF); - writel(val, PA1_SSBI2_CMD); - while(!((temp = readl(PA1_SSBI2_RD_STATUS)) & (1 << PA1_SSBI2_TRANS_DONE_SHIFT))) { - if (--timeout == 0) { - dprintf(INFO, "In Device write function:Timeout\n"); - return 1; - } - } - len--; - buf++; - } - return 0; -} - -int pa2_ssbi2_read_bytes(unsigned char *buffer, unsigned short length, - unsigned short slave_addr) -{ - unsigned val = 0x0; - unsigned temp = 0x0000; - unsigned char *buf = buffer; - unsigned short len = length; - unsigned short addr = slave_addr; - unsigned long timeout = SSBI_TIMEOUT_US; - - while(len) - { - val |= ((addr << PA2_SSBI2_REG_ADDR_SHIFT) | - (PA2_SSBI2_CMD_READ << PA2_SSBI2_CMD_RDWRN_SHIFT)); - writel(val, PA2_SSBI2_CMD); - while(!((temp = readl(PA2_SSBI2_RD_STATUS)) & (1 << PA2_SSBI2_TRANS_DONE_SHIFT))) { - if (--timeout == 0) { - dprintf(INFO, "In Device ready function:Timeout\n"); - return 1; - } - } - len--; - *buf++ = (temp & (PA2_SSBI2_REG_DATA_MASK << PA2_SSBI2_REG_DATA_SHIFT)); - } - return 0; -} - -int pa2_ssbi2_write_bytes(unsigned char *buffer, unsigned short length, - unsigned short slave_addr) -{ - unsigned val; - unsigned char *buf = buffer; - unsigned short len = length; - unsigned short addr = slave_addr; - unsigned temp = 0x00; - unsigned char written_data1 = 0x00; - unsigned long timeout = SSBI_TIMEOUT_US; - - while(len) - { - temp = 0x00; - written_data1 = 0x00; - val = (addr << PA2_SSBI2_REG_ADDR_SHIFT) | - (PA2_SSBI2_CMD_WRITE << PA2_SSBI2_CMD_RDWRN_SHIFT) | - (*buf & 0xFF); - writel(val, PA2_SSBI2_CMD); - while(!((temp = readl(PA2_SSBI2_RD_STATUS)) & (1 << PA2_SSBI2_TRANS_DONE_SHIFT))) { - if (--timeout == 0) { - dprintf(INFO, "In Device write function:Timeout\n"); - return 1; - } - } - len--; - buf++; - } - return 0; -} - -int pm8058_gpio_config(int gpio, struct pm8058_gpio *param) -{ - int rc; - write_func wr_function = (qwerty_keypad->keypad_info)->wr_func; - unsigned char bank[8]; - static int dir_map[] = { - PM8058_GPIO_MODE_OFF, - PM8058_GPIO_MODE_OUTPUT, - PM8058_GPIO_MODE_INPUT, - PM8058_GPIO_MODE_BOTH, - }; - - if (param == 0) { - dprintf (INFO, "pm8058_gpio struct not defined\n"); - return -1; - } - - /* Select banks and configure the gpio */ - bank[0] = PM8058_GPIO_WRITE | - ((param->vin_sel << PM8058_GPIO_VIN_SHIFT) & - PM8058_GPIO_VIN_MASK) | - PM8058_GPIO_MODE_ENABLE; - bank[1] = PM8058_GPIO_WRITE | - ((1 << PM8058_GPIO_BANK_SHIFT) & PM8058_GPIO_BANK_MASK) | - ((dir_map[param->direction] << PM8058_GPIO_MODE_SHIFT) & - PM8058_GPIO_MODE_MASK) | - ((param->direction & PM_GPIO_DIR_OUT) ? - PM8058_GPIO_OUT_BUFFER : 0); - bank[2] = PM8058_GPIO_WRITE | - ((2 << PM8058_GPIO_BANK_SHIFT) & PM8058_GPIO_BANK_MASK) | - ((param->pull << PM8058_GPIO_PULL_SHIFT) & - PM8058_GPIO_PULL_MASK); - bank[3] = PM8058_GPIO_WRITE | - ((3 << PM8058_GPIO_BANK_SHIFT) & PM8058_GPIO_BANK_MASK) | - ((param->out_strength << PM8058_GPIO_OUT_STRENGTH_SHIFT) & - PM8058_GPIO_OUT_STRENGTH_MASK); - bank[4] = PM8058_GPIO_WRITE | - ((4 << PM8058_GPIO_BANK_SHIFT) & PM8058_GPIO_BANK_MASK) | - ((param->function << PM8058_GPIO_FUNC_SHIFT) & - PM8058_GPIO_FUNC_MASK); - - rc = (*wr_function)(bank, 5, SSBI_REG_ADDR_GPIO(gpio)); - if (rc) { - dprintf(INFO, "Failed on 1st ssbi_write(): rc=%d.\n", rc); - return 1; - } - return 0; -} - -int pm8058_gpio_config_kypd_drv(int gpio_start, int num_gpios) -{ - int rc; - struct pm8058_gpio kypd_drv = { - .direction = PM_GPIO_DIR_OUT, - .pull = PM_GPIO_PULL_NO, - .vin_sel = 2, - .out_strength = PM_GPIO_STRENGTH_LOW, - .function = PM_GPIO_FUNC_1, - .inv_int_pol = 1, - }; - - while (num_gpios--) { - rc = pm8058_gpio_config(gpio_start++, &kypd_drv); - if (rc) { - dprintf(INFO, "FAIL pm8058_gpio_config(): rc=%d.\n", rc); - return rc; - } - } - - return 0; -} - -int pm8058_gpio_config_kypd_sns(int gpio_start, int num_gpios) -{ - int rc; - struct pm8058_gpio kypd_sns = { - .direction = PM_GPIO_DIR_IN, - .pull = PM_GPIO_PULL_UP1, - .vin_sel = 2, - .out_strength = PM_GPIO_STRENGTH_NO, - .function = PM_GPIO_FUNC_NORMAL, - .inv_int_pol = 1, - }; - - while (num_gpios--) { - rc = pm8058_gpio_config(gpio_start++, &kypd_sns); - if (rc) { - dprintf(INFO, "FAIL pm8058_gpio_config(): rc=%d.\n", rc); - return rc; - } - } - - return 0; -} - -void ssbi_gpio_init(void) -{ - unsigned char kypd_cntl_init = 0x84; - unsigned char kypd_scan_init = 0x20; - int rows = (qwerty_keypad->keypad_info)->rows; - int columns = (qwerty_keypad->keypad_info)->columns; - write_func wr_function = (qwerty_keypad->keypad_info)->wr_func; - - if ((*wr_function)(&kypd_cntl_init, 1, SSBI_REG_KYPD_CNTL_ADDR)) - dprintf (CRITICAL, "Error in initializing SSBI_REG_KYPD_CNTL register\n"); - - if ((*wr_function)(&kypd_scan_init, 1, SSBI_REG_KYPD_SCAN_ADDR)) - dprintf (CRITICAL, "Error in initializing SSBI_REG_KYPD_SCAN register\n"); - - pm8058_gpio_config_kypd_sns(SSBI_OFFSET_ADDR_GPIO_KYPD_SNS, columns); - pm8058_gpio_config_kypd_drv(SSBI_OFFSET_ADDR_GPIO_KYPD_DRV, rows); -} - -static enum handler_return -scan_qwerty_keypad(struct timer *timer, time_t now, void *arg) -{ - unsigned int rows = (qwerty_keypad->keypad_info)->rows; - unsigned int columns = (qwerty_keypad->keypad_info)->columns; - unsigned int num_of_ssbi_reads = (qwerty_keypad->keypad_info)->num_of_reads; - read_func rd_function = (qwerty_keypad->keypad_info)->rd_func; - unsigned char column_new_keys = 0x00; - unsigned char column_old_keys = 0x00; - int shift = 0; - static int key_detected = 0; - - if ((*rd_function)((qwerty_keypad->keypad_info)->rec_keys, num_of_ssbi_reads, - SSBI_REG_KYPD_REC_DATA_ADDR)) - dprintf (CRITICAL, "Error in initializing SSBI_REG_KYPD_CNTL register\n"); - - if ((*rd_function)((qwerty_keypad->keypad_info)->old_keys, num_of_ssbi_reads, - SSBI_REG_KYPD_OLD_DATA_ADDR)) - dprintf (CRITICAL, "Error in initializing SSBI_REG_KYPD_CNTL register\n"); - - while (rows--) { - if (((qwerty_keypad->keypad_info)->rec_keys[rows] - != (qwerty_keypad->keypad_info)->old_keys[rows]) - && ((qwerty_keypad->keypad_info)->rec_keys[rows] != 0x00) - && ((qwerty_keypad->keypad_info)->old_keys[rows] != 0x00)) { - while (columns--) { - column_new_keys = ((qwerty_keypad->keypad_info)->rec_keys[rows]); - column_old_keys = ((qwerty_keypad->keypad_info)->old_keys[rows]); - if (((0x01 << columns) & (~column_new_keys)) - && !((0x01 << columns) & (~column_old_keys))) { - shift = (rows * 8) + columns; - if ((qwerty_keypad->keypad_info)->keymap[shift]) { - if (shift != key_detected) { - key_detected = shift; - keys_post_event((qwerty_keypad->keypad_info)->keymap[shift], 1); - event_signal(&qwerty_keypad->full_scan, false); - timer_set_oneshot(timer, (qwerty_keypad->keypad_info)->poll_time, - scan_qwerty_keypad, NULL); - return INT_RESCHEDULE; - - } - } - } - } - } - } - if (qwerty_keypad->num_of_scans < 10) - { - (qwerty_keypad->num_of_scans)++; - timer_set_oneshot(timer, (qwerty_keypad->keypad_info)->settle_time, - scan_qwerty_keypad, NULL); - return INT_RESCHEDULE; - } - - event_signal(&qwerty_keypad->full_scan, false); - return INT_RESCHEDULE; - -} - -void ssbi_keypad_init(struct qwerty_keypad_info *qwerty_kp) -{ - int len; - - len = sizeof(struct gpio_qwerty_kp); - qwerty_keypad = malloc(len); - ASSERT(qwerty_keypad); - - memset(qwerty_keypad, 0, len); - qwerty_keypad->keypad_info = qwerty_kp; - ssbi_gpio_init(); - - qwerty_keypad->num_of_scans = 0; - - event_init(&qwerty_keypad->full_scan, false, EVENT_FLAG_AUTOUNSIGNAL); - timer_initialize(&qwerty_keypad->timer); - timer_set_oneshot(&qwerty_keypad->timer, 0, scan_qwerty_keypad, NULL); - - /* wait for the keypad to complete one full scan */ - event_wait(&qwerty_keypad->full_scan); -} - -void pmic_write(unsigned address, unsigned data) -{ - write_func wr_function = &i2c_ssbi_write_bytes; - if(wr_function == NULL) - return; - if ((*wr_function)(&data, 1, address)) - dprintf (CRITICAL, "Error in initializing register\n"); - -} -void toshiba_pmic_gpio_init(unsigned gpio) -{ - pmic_write(gpio,0x85); - pmic_write(gpio,0x98); - pmic_write(gpio,0xB8); - pmic_write(gpio,0xC6); -} diff --git a/lk/dev/keys/keys.c b/lk/dev/keys/keys.c deleted file mode 100644 index 3e7c452..0000000 --- a/lk/dev/keys/keys.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -static unsigned long key_bitmap[BITMAP_NUM_WORDS(MAX_KEYS)]; - -void keys_init(void) -{ - memset(key_bitmap, 0, sizeof(key_bitmap)); -} - -void keys_post_event(uint16_t code, int16_t value) -{ - if (code >= MAX_KEYS) { - dprintf(INFO, "Invalid keycode posted: %d\n", code); - return; - } - - /* TODO: Implement an actual event queue if it becomes necessary */ - if (value) - bitmap_set(key_bitmap, code); - else - bitmap_clear(key_bitmap, code); - -// dprintf(INFO, "key state change: %d %d\n", code, value); -} - -int keys_get_state(uint16_t code) -{ - if (code >= MAX_KEYS) { - dprintf(INFO, "Invalid keycode requested: %d\n", code); - return -1; - } - return bitmap_test(key_bitmap, code); -} diff --git a/lk/dev/keys/rules.mk b/lk/dev/keys/rules.mk deleted file mode 100644 index 1e27527..0000000 --- a/lk/dev/keys/rules.mk +++ /dev/null @@ -1,10 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/keys.o - -ifeq ($(KEYS_USE_GPIO_KEYPAD),1) -OBJS += \ - $(LOCAL_DIR)/gpio_keypad.o -endif - diff --git a/lk/dev/net/smc91c96/include/dev/net/smc91c96.h b/lk/dev/net/smc91c96/include/dev/net/smc91c96.h deleted file mode 100644 index acd543e..0000000 --- a/lk/dev/net/smc91c96/include/dev/net/smc91c96.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef _DEV_NET_SMC91C96_H -#define _DEV_NET_SMC91C96_H - -void smc91c96_init(void); - -#endif - diff --git a/lk/dev/net/smc91c96/rules.mk b/lk/dev/net/smc91c96/rules.mk deleted file mode 100644 index d675117..0000000 --- a/lk/dev/net/smc91c96/rules.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -INCLUDES += \ - -I$(LOCAL_DIR)/include - -OBJS += \ - $(LOCAL_DIR)/smc91c96.o - diff --git a/lk/dev/net/smc91c96/smc91c96.c b/lk/dev/net/smc91c96/smc91c96.c deleted file mode 100644 index 0bab5d7..0000000 --- a/lk/dev/net/smc91c96/smc91c96.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include "smc91c96_p.h" - -#if !defined(SMC91C96_BASE_ADDR) || !defined(SMC91C96_IRQ) -#error need to define SMC91C96_BASE_ADDR and SMC91C96_IRQ in project -#endif - -static addr_t smc91c96_base = SMC91C96_BASE_ADDR; -static uint8_t mac_addr[6]; - -#define SMC_REG16(reg) ((volatile uint16_t *)(smc91c96_base + (reg))) -#define SMC_REG8(reg) ((volatile uint8_t *)(smc91c96_base + (reg))) - -static inline void smc_bank(int bank) -{ - *SMC_REG16(SMC_BSR) = bank; -} - -void smc91c96_init(void) -{ - int i; - - TRACE; - - // try to detect it - if ((*SMC_REG16(SMC_BSR) & 0xff00) != 0x3300) { - TRACEF("didn't see smc91c96 chip at 0x%x\n", (unsigned int)smc91c96_base); - } - - // read revision - smc_bank(3); - TRACEF("detected, revision 0x%x\n", *SMC_REG16(SMC_REV)); - - // read in the mac address - smc_bank(1); - for (i=0; i < 6; i++) { - mac_addr[i] = *SMC_REG8(SMC_IAR0 + i); - } - TRACEF("mac address %02x:%02x:%02x:%02x:%02x:%02x\n", - mac_addr[0], mac_addr[1], mac_addr[2], - mac_addr[3], mac_addr[4], mac_addr[5]); - - smc_bank(0); -} - diff --git a/lk/dev/net/smc91c96/smc91c96_p.h b/lk/dev/net/smc91c96/smc91c96_p.h deleted file mode 100644 index 0baf210..0000000 --- a/lk/dev/net/smc91c96/smc91c96_p.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __SMC91C96_P_H -#define __SMC91C96_P_H - -// LAN91C96 stuffs - -/* registers */ - -#define SMC_BSR 14 - -/* bank 0 */ -#define SMC_TCR 0 -#define SMC_EPHSR 2 -#define SMC_RCR 4 -#define SMC_ECR 6 -#define SMC_MIR 8 -#define SMC_MCR 10 - -/* bank 1 */ -#define SMC_CR 0 -#define SMC_BAR 2 -#define SMC_IAR0 4 -#define SMC_IAR1 5 -#define SMC_IAR2 6 -#define SMC_IAR3 7 -#define SMC_IAR4 8 -#define SMC_IAR5 9 -#define SMC_GPR 10 -#define SMC_CTR 12 - -/* bank 2 */ -#define SMC_MMUCR 0 -#define SMC_AUTOTX 1 -#define SMC_PNR 2 -#define SMC_ARR 3 -#define SMC_FIFO 4 -#define SMC_PTR 6 -#define SMC_DATA0 8 -#define SMC_DATA1 10 -#define SMC_IST 12 -#define SMC_ACK 12 -#define SMC_MSK 13 - -/* bank 3 */ -#define SMC_MT0 0 -#define SMC_MT1 1 -#define SMC_MT2 2 -#define SMC_MT3 3 -#define SMC_MT4 4 -#define SMC_MT5 5 -#define SMC_MT6 6 -#define SMC_MT7 7 -#define SMC_MGMT 8 -#define SMC_REV 10 -#define SMC_ERCV 12 - - -#endif - diff --git a/lk/dev/pmic/twl4030/include/dev/twl4030.h b/lk/dev/pmic/twl4030/include/dev/twl4030.h deleted file mode 100644 index f863221..0000000 --- a/lk/dev/pmic/twl4030/include/dev/twl4030.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __DEV_TWL4030_H -#define __DEV_TWL4030_H - -#include - -void twl4030_init(void); - -/* USB parts of the pmic */ -int twl4030_usb_reset(void); -int twl4030_set_usb_pullup(bool pullup); -int twl4030_init_hs(void); - -#endif - diff --git a/lk/dev/pmic/twl4030/rules.mk b/lk/dev/pmic/twl4030/rules.mk deleted file mode 100644 index e75e8ff..0000000 --- a/lk/dev/pmic/twl4030/rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -INCLUDES += -I$(LOCAL_DIR)/include - -OBJS += \ - $(LOCAL_DIR)/twl4030.o - diff --git a/lk/dev/pmic/twl4030/twl4030.c b/lk/dev/pmic/twl4030/twl4030.c deleted file mode 100644 index 66058b8..0000000 --- a/lk/dev/pmic/twl4030/twl4030.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include "twl4030_hw.h" - -// XXX move to target specific setup -#define TWL_I2C_BUS 0 - -void twl4030_init(void) -{ -} - -static int twl4030_usb_write(uint8_t address, uint8_t data) -{ - return i2c_write_reg(TWL_I2C_BUS, TWL_USB_ADDR, address, data); -} - -static int twl4030_usb_read(uint8_t address) -{ - uint8_t data; - - int err = i2c_read_reg(TWL_I2C_BUS, TWL_USB_ADDR, address, &data); - if (err < 0) - return err; - - return data; -} - -static int twl4030_usb_set_bits(uint8_t reg, uint8_t bits) -{ - return twl4030_usb_write(reg + 1, bits); -} - -static int twl4030_usb_clear_bits(uint8_t reg, uint8_t bits) -{ - return twl4030_usb_write(reg + 2, bits); -} - -static void twl4030_i2c_access(bool on) -{ - int val; - - if ((val = twl4030_usb_read(PHY_CLK_CTRL)) >= 0) { - if (on) { - /* enable DPLL to access PHY registers over I2C */ - val |= REQ_PHY_DPLL_CLK; - twl4030_usb_write(PHY_CLK_CTRL, (uint8_t)val); - - while (!(twl4030_usb_read(PHY_CLK_CTRL_STS) & PHY_DPLL_CLK)) { - spin(10); - } - if (!(twl4030_usb_read(PHY_CLK_CTRL_STS) & PHY_DPLL_CLK)) - printf("Timeout setting T2 HSUSB " "PHY DPLL clock\n"); - } else { - /* let ULPI control the DPLL clock */ - val &= ~REQ_PHY_DPLL_CLK; - twl4030_usb_write(PHY_CLK_CTRL, (uint8_t)val); - } - } - return; -} - -int twl4030_usb_reset(void) -{ - TRACE_ENTRY; -#if 0 - twl4030_usb_clear_bits(OTG_CTRL, DMPULLDOWN | DPPULLDOWN); - twl4030_usb_clear_bits(USB_INT_EN_RISE, ~0); - twl4030_usb_clear_bits(USB_INT_EN_FALL, ~0); - twl4030_usb_clear_bits(MCPC_IO_CTRL, ~TXDTYP); - twl4030_usb_set_bits(MCPC_IO_CTRL, TXDTYP); - twl4030_usb_clear_bits(OTHER_FUNC_CTRL, (BDIS_ACON_EN | FIVEWIRE_MODE)); - twl4030_usb_clear_bits(OTHER_IFC_CTRL, ~0); - twl4030_usb_clear_bits(OTHER_INT_EN_RISE, ~0); - twl4030_usb_clear_bits(OTHER_INT_EN_FALL, ~0); - twl4030_usb_clear_bits(OTHER_IFC_CTRL2, ~0); - twl4030_usb_clear_bits(REG_CTRL_EN, ULPI_I2C_CONFLICT_INTEN); - twl4030_usb_clear_bits(OTHER_FUNC_CTRL2, VBAT_TIMER_EN); -#endif - - /* Enable writing to power configuration registers */ - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, PROTECT_KEY, 0xC0); - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, PROTECT_KEY, 0x0C); - - /* put VUSB3V1 LDO in active state */ - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, VUSB_DEDICATED2, 0); - - /* input to VUSB3V1 LDO is from VBAT, not VBUS */ - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, VUSB_DEDICATED1, 0x14); - - /* turn on 3.1V regulator */ - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, VUSB3V1_DEV_GRP, 0x20); - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, VUSB3V1_TYPE, 0); - - /* turn on 1.5V regulator */ - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, VUSB1V5_DEV_GRP, 0x20); - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, VUSB1V5_TYPE, 0); - - /* turn on 1.8V regulator */ - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, VUSB1V8_DEV_GRP, 0x20); - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, VUSB1V8_TYPE, 0); - - /* disable access to power configuration registers */ - i2c_write_reg(TWL_I2C_BUS, TWL_PM_RECEIVER_ADDR, PROTECT_KEY, 0); - - /* turn on the phy */ - uint8_t pwr = twl4030_usb_read(PHY_PWR_CTRL); - pwr &= ~PHYPWD; - twl4030_usb_write(PHY_PWR_CTRL, pwr); - twl4030_usb_write(PHY_CLK_CTRL, - twl4030_usb_read(PHY_CLK_CTRL) | - (CLOCKGATING_EN | CLK32K_EN)); - - /* set DPLL i2c access mode */ - twl4030_i2c_access(true); - /* set ulpi mode */ - twl4030_usb_clear_bits(IFC_CTRL, CARKITMODE); - twl4030_usb_set_bits(POWER_CTRL, OTG_ENAB); - twl4030_usb_write(FUNC_CTRL, XCVRSELECT_HS); // set high speed mode -// twl4030_usb_write(FUNC_CTRL, XCVRSELECT_FS); // set full speed mode - twl4030_i2c_access(false); - - return 0; -} - -int twl4030_init_hs(void) -{ - return 0; -} - -int twl4030_set_usb_pullup(bool pullup) -{ - TRACE_ENTRY; - - if (pullup) { - twl4030_usb_clear_bits(OTG_CTRL, DPPULLDOWN); - twl4030_usb_set_bits(FUNC_CTRL, TERMSELECT); - } else { - twl4030_usb_clear_bits(FUNC_CTRL, TERMSELECT); - twl4030_usb_set_bits(OTG_CTRL, DPPULLDOWN); - } - - return 0; -} - - diff --git a/lk/dev/pmic/twl4030/twl4030_hw.h b/lk/dev/pmic/twl4030/twl4030_hw.h deleted file mode 100644 index d7ea926..0000000 --- a/lk/dev/pmic/twl4030/twl4030_hw.h +++ /dev/null @@ -1,369 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __TWL4030_HW_H -#define __TWL4030_HW_H - -/* TWL i2c addresses */ -#define TWL_I2C_ADDR0 0x48 -#define TWL_I2C_ADDR1 0x49 -#define TWL_I2C_ADDR2 0x4a -#define TWL_I2C_ADDR3 0x4b - -#define TWL_USB_ADDR TWL_I2C_ADDR0 -#define TWL_INTBR_ADDR TWL_I2C_ADDR1 -#define TWL_PM_RECEIVER_ADDR TWL_I2C_ADDR3 - -/* TWL registers */ -#define PROTECT_KEY 0x44 -#define VAUX1_DEV_GRP 0x72 -#define VAUX1_TYPE 0x73 -#define VAUX1_REMAP 0x74 -#define VAUX1_DEDICATED 0x75 -#define VAUX2_DEV_GRP 0x76 -#define VAUX2_TYPE 0x77 -#define VAUX2_REMAP 0x78 -#define VAUX2_DEDICATED 0x79 -#define VAUX3_DEV_GRP 0x7a -#define VAUX3_TYPE 0x7b -#define VAUX3_REMAP 0x7c -#define VAUX3_DEDICATED 0x7d -#define VAUX4_DEV_GRP 0x7e -#define VAUX4_TYPE 0x7f -#define VAUX4_REMAP 0x80 -#define VAUX4_DEDICATED 0x81 -#define VMMC1_DEV_GRP 0x82 -#define VMMC1_TYPE 0x83 -#define VMMC1_REMAP 0x84 -#define VMMC1_DEDICATED 0x85 -#define VMMC2_DEV_GRP 0x86 -#define VMMC2_TYPE 0x87 -#define VMMC2_REMAP 0x88 -#define VMMC2_DEDICATED 0x89 -#define VPLL1_DEV_GRP 0x8a -#define VPLL1_TYPE 0x8b -#define VPLL1_REMAP 0x8c -#define VPLL1_DEDICATED 0x8d -#define VPLL2_DEV_GRP 0x8e -#define VPLL2_TYPE 0x8f -#define VPLL2_REMAP 0x90 -#define VPLL2_DEDICATED 0x91 -#define VDAC_DEV_GRP 0x96 -#define VDAC_DEDICATED 0x99 -#define VDD2_DEV_GRP 0xBE -#define VDD2_TYPE 0xBF -#define VDD2_REMAP 0xC0 -#define VDD2_CFG 0xC1 -#define VSIM_DEV_GRP 0x92 -#define VSIM_TYPE 0x93 -#define VSIM_REMAP 0x94 -#define VSIM_DEDICATED 0x95 -#define PMBR1 0x92 - -#define SECONDS_REG 0x1C -#define MINUTES_REG 0x1D -#define ALARM_SECONDS_REG 0x23 -#define ALARM_MINUTES_REG 0x24 -#define ALARM_HOURS_REG 0x25 - -#define RTC_STATUS_REG 0x2A -#define RTC_INTERRUPTS_REG 0x2B - -#define PWR_ISR1 0x2E -#define PWR_IMR1 0x2F -#define PWR_ISR2 0x30 -#define PWR_IMR2 0x31 -#define PWR_EDR1 0x33 - -#define CFG_PWRANA2 0x3F -#define RTC_INTERRUPTS_REG 0x2B -#define STS_HW_CONDITIONS 0x45 - -#define P1_SW_EVENTS 0x46 -#define P2_SW_EVENTS 0x47 -#define P3_SW_EVENTS 0x48 - -#define VDD1_TRIM1 0x62 -#define VDD1_TRIM2 0x63 -#define VDD1_VFLOOR 0xBB -#define VDD1_VROOF 0xBC -#define PB_CFG 0x4A -#define PB_WORD_MSB 0x4B -#define PB_WORD_LSB 0x4C - -#define VSIM_REMAP 0x94 -#define VDAC_REMAP 0x98 -#define VINTANA1_DEV_GRP 0x9A -#define VINTANA1_REMAP 0x9C -#define VINTANA2_REMAP 0xA0 -#define VINTANA2_DEV_GRP 0x9E -#define VINTDIG_DEV_GRP 0xA2 -#define VINTDIG_REMAP 0xA4 -#define VIO_DEV_GRP 0xA6 -#define VIO_REMAP 0xA8 -#define VDD1_REMAP 0xB2 -#define VDD2_REMAP 0xC0 -#define REGEN_REMAP 0xDC -#define NRESPWRON_REMAP 0xDF -#define CLKEN_REMAP 0xE2 -#define SYSEN_REMAP 0xE5 -#define HFCLKOUT_REMAP 0xE8 -#define HFCLKOUT_DEV_GRP 0xE6 -#define T32KCLKOUT_REMAP 0xEB -#define TRITON_RESET_REMAP 0xEE -#define MAINREF_REMAP 0xF1 -#define VIBRA_CTL 0x45 - - -#define VUSB1V5_DEV_GRP 0xCC -#define VUSB1V5_TYPE 0xCD -#define VUSB1V5_REMAP 0xCE -#define VUSB1V8_DEV_GRP 0xCF -#define VUSB1V8_TYPE 0xD0 -#define VUSB1V8_REMAP 0xD1 -#define VUSB3V1_DEV_GRP 0xD2 -#define VUSB3V1_TYPE 0xD3 -#define VUSB3V1_REMAP 0xD4 -#define VUSBCP_DEV_GRP 0xD5 -#define VUSBCP_TYPE 0xD6 -#define VUSBCP_REMAP 0xD7 -#define VUSB_DEDICATED1 0xD8 -#define VUSB_DEDICATED2 0xD9 - -/* USB registers */ -#define VENDOR_ID_LO 0x0 -#define VENDOR_ID_HI 0x1 -#define PRODUCT_ID_LO 0x2 -#define PRODUCT_ID_HI 0x3 -#define FUNC_CTRL 0x4 -#define FUNC_CTRL_SET 0x5 -#define FUNC_CTRL_CLR 0x6 -# define SUSPENDM (1 << 6) -# define RESET (1 << 5) -# define OPMODE_MASK (3 << 3) /* bits 3 and 4 */ -# define OPMODE_NORMAL (0 << 3) -# define OPMODE_NONDRIVING (1 << 3) -# define OPMODE_DISABLE_BIT_NRZI (2 << 3) -# define TERMSELECT (1 << 2) -# define XCVRSELECT_MASK (3 << 0) /* bits 0 and 1 */ -# define XCVRSELECT_HS (0 << 0) -# define XCVRSELECT_FS (1 << 0) -# define XCVRSELECT_LS (2 << 0) -# define XCVRSELECT_FS4LS (3 << 0) -#define IFC_CTRL 0x7 -#define IFC_CTRL_SET 0x8 -#define IFC_CTRL_CLR 0x9 -# define INTERFACE_PROTECT_DISABLE (1 << 7) -# define AUTORESUME (1 << 4) -# define CLOCKSUSPENDM (1 << 3) -# define CARKITMODE (1 << 2) -# define FSLSSERIALMODE_3PIN (1 << 1) -#define OTG_CTRL 0xa -#define OTG_CTRL_SET 0xb -#define OTG_CTRL_CLR 0xc -#define DRVVBUS (1 << 5) -#define CHRGVBUS (1 << 4) -#define DISCHRGVBUS (1 << 3) -#define DMPULLDOWN (1 << 2) -#define DPPULLDOWN (1 << 1) -#define IDPULLUP (1 << 0) -#define USB_INT_EN_RISE 0xd -#define USB_INT_EN_RISE_SET 0xe -#define USB_INT_EN_RISE_CLR 0xf -#define USB_INT_EN_FALL 0x10 -#define USB_INT_EN_FALL_SET 0x11 -#define USB_INT_EN_FALL_CLR 0x12 -# define HOSTDISCONNECT (1 << 0) -#define USB_INT_STS 0x13 -#define USB_INT_LATCH 0x14 -#define USB_DEBUG 0x15 -#define SCRATCH_REG 0x16 -#define SCRATCH_REG_SET 0x17 -#define SCRATCH_REG_CLR 0x18 -#define CARKIT_CTRL 0x19 -#define CARKIT_CTRL_SET 0x1a -#define CARKIT_CTRL_CLR 0x1b -#define MICEN (1 << 6) -#define SPKRIGHTEN (1 << 5) -#define SPKLEFTEN (1 << 4) -#define RXDEN (1 << 3) -#define TXDEN (1 << 2) -#define IDGNDDRV (1 << 1) -#define CARKITPWR (1 << 0) -#define CARKIT_INT_DELAY 0x1c -#define CARKIT_INT_EN 0x1d -#define CARKIT_INT_EN_SET 0x1e -#define CARKIT_INT_EN_CLR 0x1f -#define CARKIT_INT_STS 0x20 -#define CARKIT_INT_LATCH 0x21 -#define CARKIT_PLS_CTRL 0x22 -#define CARKIT_PLS_CTRL_SET 0x23 -#define CARKIT_PLS_CTRL_CLR 0x24 -# define SPKRRIGHT_BIASEN (1 << 3) -# define SPKRLEFT_BIASEN (1 << 2) -# define RXPLSEN (1 << 1) -# define TXPLSEN (1 << 0) -#define TRANS_POS_WIDTH 0x25 -#define TRANS_NEG_WIDTH 0x26 -#define RCV_PLTY_RECOVERY 0x27 -#define MCPC_CTRL 0x30 -#define MCPC_CTRL_SET 0x31 -#define MCPC_CTRL_CLR 0x32 -#define RTSOL (1 << 7) -#define EXTSWR (1 << 6) -#define EXTSWC (1 << 5) -#define VOICESW (1 << 4) -#define OUT64K (1 << 3) -#define RTSCTSSW (1 << 2) -#define HS_UART (1 << 0) -#define MCPC_IO_CTRL 0x033 -#define MCPC_IO_CTRL_SET 0x034 -#define MCPC_IO_CTRL_CLR 0x035 -#define MICBIASEN (1<< 5) -#define CTS_NPU (1 << 4) -#define RXD_PU (1 << 3) -#define TXDTYP (1 << 2) -#define CTSTYP (1 << 1) -#define RTSTYP (1 << 0) -#define MCPC_CTRL2 0x036 -#define MCPC_CTRL2_SET 0x037 -#define MCPC_CTRL2_CLR 0x038 -# define MCPC_CK_EN (1 << 0) -#define OTHER_FUNC_CTRL 0x080 -#define OTHER_FUNC_CTRL_SET 0x081 -#define OTHER_FUNC_CTRL_CLR 0x082 -#define BDIS_ACON_EN (1<< 4) -#define FIVEWIRE_MODE (1 << 2) -#define OTHER_IFC_CTRL 0x083 -#define OTHER_IFC_CTRL_SET 0x084 -#define OTHER_IFC_CTRL_CLR 0x085 -# define OE_INT_EN (1 << 6) -# define CEA2011_MODE (1 << 5) -# define FSLSSERIALMODE_4PIN (1 << 4) -# define HIZ_ULPI_60MHZ_OUT (1 << 3) -# define HIZ_ULPI (1 << 2) -# define ALT_INT_REROUTE (1 << 0) -#define OTHER_INT_EN_RISE 0x086 -#define OTHER_INT_EN_RISE_SET 0x087 -#define OTHER_INT_EN_RISE_CLR 0x088 -#define OTHER_INT_EN_FALL 0x089 -#define OTHER_INT_EN_FALL_SET 0x08A -#define OTHER_INT_EN_FALL_CLR 0x08B -#define OTHER_INT_STS 0x8C -#define OTHER_INT_LATCH 0x8D -#define ID_INT_EN_RISE 0x08E -#define ID_INT_EN_RISE_SET 0x08F -#define ID_INT_EN_RISE_CLR 0x090 -#define ID_INT_EN_FALL 0x091 -#define ID_INT_EN_FALL_SET 0x092 -#define ID_INT_EN_FALL_CLR 0x093 -#define ID_INT_STS 0x094 -#define ID_INT_LATCH 0x95 -#define ID_STATUS 0x96 -#define CARKIT_SM_1_INT_EN 0x097 -#define CARKIT_SM_1_INT_EN_SET 0x098 -#define CARKIT_SM_1_INT_EN_CLR 0x099 -#define CARKIT_SM_1_INT_STS 0x09A -#define CARKIT_SM_1_INT_LATCH 0x9B -#define CARKIT_SM_2_INT_EN 0x09C -#define CARKIT_SM_2_INT_EN_SET 0x09D -#define CARKIT_SM_2_INT_EN_CLR 0x09E -#define CARKIT_SM_2_INT_STS 0x09F -#define CARKIT_SM_2_INT_LATCH 0xA0 -#define CARKIT_SM_CTRL 0x0A1 -#define CARKIT_SM_CTRL_SET 0x0A2 -#define CARKIT_SM_CTRL_CLR 0x0A3 -#define CARKIT_SM_CMD 0x0A4 -#define CARKIT_SM_CMD_SET 0x0A5 -#define CARKIT_SM_CMD_CLR 0x0A6 -#define CARKIT_SM_CMD_STS 0xA7 -#define CARKIT_SM_STATUS 0xA8 -#define CARKIT_SM_NEXT_STATUS 0xA9 -#define CARKIT_SM_ERR_STATUS 0xAA -#define CARKIT_SM_CTRL_STATE 0xAB -#define POWER_CTRL 0xAC -#define POWER_CTRL_SET 0xAD -#define POWER_CTRL_CLR 0xAE -# define OTG_ENAB (1 << 5) -#define OTHER_IFC_CTRL2 0xAF -#define OTHER_IFC_CTRL2_SET 0xB0 -#define OTHER_IFC_CTRL2_CLR 0xB1 -# define ULPI_TXEN_POL (1 << 3) -# define ULPI_4PIN_2430 (1 << 2) -#define REG_CTRL_EN 0xB2 -#define REG_CTRL_EN_SET 0xB3 -#define REG_CTRL_EN_CLR 0xB4 -#define REG_CTRL_ERROR 0xB5 -#define ULPI_I2C_CONFLICT_INTEN (1 << 0) -#define OTHER_FUNC_CTRL2 0xB8 -#define OTHER_FUNC_CTRL2_SET 0xB9 -#define OTHER_FUNC_CTRL2_CLR 0xBA -#define VBAT_TIMER_EN (1 << 0) -#define CARKIT_ANA_CTRL 0xBB -#define CARKIT_ANA_CTRL_SET 0xBC -#define CARKIT_ANA_CTRL_CLR 0xBD -#define VBUS_DEBOUNCE 0xC0 -#define ID_DEBOUNCE 0xC1 -#define TPH_DP_CON_MIN 0xC2 -#define TPH_DP_CON_MAX 0xC3 -#define TCR_DP_CON_MIN 0xC4 -#define TCR_DP_CON_MAX 0xC5 -#define TPH_DP_PD_SHORT 0xC6 -#define TPH_CMD_DLY 0xC7 -#define TPH_DET_RST 0xC8 -#define TPH_AUD_BIAS 0xC9 -#define TCR_UART_DET_MIN 0xCA -#define TCR_UART_DET_MAX 0xCB -#define TPH_ID_INT_PW 0xCD -#define TACC_ID_INT_WAIT 0xCE -#define TACC_ID_INT_PW 0xCF -#define TPH_CMD_WAIT 0xD0 -#define TPH_ACK_WAIT 0xD1 -#define TPH_DP_DISC_DET 0xD2 -#define VBAT_TIMER 0xD3 -#define CARKIT_4W_DEBUG 0xE0 -#define CARKIT_5W_DEBUG 0xE1 -#define CARKIT_5W_DEBUG 0xE1 -#define TEST_CTRL_CLR 0xEB -#define TEST_CARKIT_SET 0xEC -#define TEST_CARKIT_CLR 0xED -#define TEST_POWER_SET 0xEE -#define TEST_POWER_CLR 0xEF -#define TEST_ULPI 0xF0 -#define TXVR_EN_TEST_SET 0xF2 -#define TXVR_EN_TEST_CLR 0xF3 -#define VBUS_EN_TEST 0xF4 -#define ID_EN_TEST 0xF5 -#define PSM_EN_TEST_SET 0xF6 -#define PSM_EN_TEST_CLR 0xF7 -#define PHY_TRIM_CTRL 0xFC -#define PHY_PWR_CTRL 0xFD -# define PHYPWD (1 << 0) -#define PHY_CLK_CTRL 0xFE -# define CLOCKGATING_EN (1 << 2) -# define CLK32K_EN (1 << 1) -# define REQ_PHY_DPLL_CLK (1 << 0) -#define PHY_CLK_CTRL_STS 0xFF -# define PHY_DPLL_CLK (1 << 0) - -#endif - diff --git a/lk/dev/rules.mk b/lk/dev/rules.mk deleted file mode 100644 index cbc5ba7..0000000 --- a/lk/dev/rules.mk +++ /dev/null @@ -1,5 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/dev.o - diff --git a/lk/dev/usb/rules.mk b/lk/dev/usb/rules.mk deleted file mode 100644 index 649f0c4..0000000 --- a/lk/dev/usb/rules.mk +++ /dev/null @@ -1,5 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/usb.o - diff --git a/lk/dev/usb/usb.c b/lk/dev/usb/usb.c deleted file mode 100644 index 1b1661d..0000000 --- a/lk/dev/usb/usb.c +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include - -#define LOCAL_TRACE 0 - -#define MAX_STRINGS 8 -static usb_string strings[MAX_STRINGS]; - -static usb_config *config; - -static uint8_t active_config; -static bool usb_active = false; - -static void append_desc_data(usb_descriptor *desc, const void *dat, size_t len) -{ - uint8_t *ptr = malloc(desc->len + len); - - memcpy(ptr, desc->desc, desc->len); - memcpy(ptr + desc->len, dat, len); - free(desc->desc); - desc->desc = ptr; - desc->len += len; -} - -/* returns the interface number assigned */ -static int usb_append_interface(usb_descriptor *desc, const uint8_t *int_descr, size_t len) -{ - uint8_t *ptr = malloc(len); - int interface_num; - - // create a temporary copy of the interface - memcpy(ptr, int_descr, len); - - // find the last interface used - interface_num = ((uint8_t *)desc->desc)[4]; // current interface - - // patch our interface descriptor with the new id - ptr[2] = interface_num; - - // append it to our config desriptor - append_desc_data(desc, ptr, len); - free(ptr); - - // patch the total length of the config descriptor and set the number of interfaces - ((uint16_t *)desc->desc)[1] += len; - interface_num++; - ((uint8_t *)desc->desc)[4] = interface_num; - - return interface_num - 1; -} - -int usb_append_interface_highspeed(const uint8_t *int_descr, size_t len) -{ - return usb_append_interface(&config->highspeed.config, int_descr, len); -} - -int usb_append_interface_lowspeed(const uint8_t *int_descr, size_t len) -{ - return usb_append_interface(&config->lowspeed.config, int_descr, len); -} - -void usb_set_string_descriptor(usb_descriptor *desc, const char *string) -{ - int len = strlen(string); - ushort *data; - int datalen = len * 2 + 2; - - data = malloc(datalen); - - /* write length field */ - data[0] = 0x0300 + datalen; - - /* copy the string into the uint16_t based usb string */ - int i; - for (i = 0; i < len; i++) { - data[i + 1] = string[i]; - } - - desc->desc = (void *)data; - desc->len = datalen; -} - -static void set_usb_id(uint16_t vendor, uint16_t product) -{ - // patch the current configuration to with the vendor/product id - ((uint16_t *)config->lowspeed.device.desc)[4] = vendor; - ((uint16_t *)config->lowspeed.device.desc)[5] = product; - - ((uint16_t *)config->highspeed.device.desc)[4] = vendor; - ((uint16_t *)config->highspeed.device.desc)[5] = product; -} - -void usb_add_string(const char *string, uint8_t id) -{ - uint i; - size_t len = strlen(string); - uint16_t *strbuf = malloc(len * 2 + 2); - - /* build the usb string descriptor */ - strbuf[0] = 0x300 | (len * 2 + 2); - for (i = 0; i < len; i++) { - strbuf[i + 1] = (uint16_t)string[i]; - } - - /* find a slot to put it */ - for (i = 0; i < MAX_STRINGS; i++) { - if (strings[i].id == 0) { - strings[i].string.desc = strbuf; - strings[i].string.len = len * 2 + 2; - strings[i].id = id; - break; - } - } -} - -static int default_usb_callback(usbc_callback_op_t op, const union usb_callback_args *args) -{ - LTRACEF("op %d, args %p\n", op, args); - - /* start looking for specific things to handle */ - if (op == CB_SETUP_MSG) { - const struct usb_setup *setup = args->setup; - DEBUG_ASSERT(setup); - LTRACEF("SETUP: req_type=%#x req=%#x value=%#x index=%#x len=%#x\n", setup->request_type, setup->request, setup->value, setup->index, setup->length); - - if ((setup->request_type & TYPE_MASK) == TYPE_STANDARD) { - switch (setup->request) { - case SET_ADDRESS: - LTRACEF("SET_ADDRESS 0x%x\n", setup->value); - usbc_ep0_ack(); - break; - case SET_FEATURE: - case CLEAR_FEATURE: - // OTAY - LTRACEF("SET/CLEAR_FEATURE, feature 0x%x\n", setup->value); - usbc_ep0_ack(); - break; - case SET_DESCRIPTOR: - LTRACEF("SET_DESCRIPTOR\n"); - usbc_ep0_stall(); - break; - case GET_DESCRIPTOR: { - /* Get the right descriptors based on current speed */ - const struct usb_descriptor_speed *speed; - if (usbc_is_highspeed()) { - speed = &config->highspeed; - } else { - speed = &config->lowspeed; - } - - if ((setup->request_type & RECIP_MASK) == RECIP_DEVICE) { - switch (setup->value) { - case 0x100: /* device */ - LTRACEF("got GET_DESCRIPTOR, device descriptor\n"); - usbc_ep0_send(speed->device.desc, speed->device.len, - setup->length); - break; - case 0x200: /* CONFIGURATION */ - LTRACEF("got GET_DESCRIPTOR, config descriptor\n"); - usbc_ep0_send(speed->config.desc, speed->config.len, - setup->length); - break; - case 0x300: /* Language ID */ - LTRACEF("got GET_DESCRIPTOR, language id\n"); - usbc_ep0_send(config->langid.desc, - config->langid.len, setup->length); - break; - case (0x301)...(0x3ff): { - /* string descriptor, search our list for a match */ - uint i; - bool found = false; - uint8_t id = setup->value & 0xff; - for (i = 0; i < MAX_STRINGS; i++) { - if (strings[i].id == id) { - usbc_ep0_send(strings[i].string.desc, - strings[i].string.len, - setup->length); - found = true; - break; - } - } - if (!found) { - /* couldn't find one, stall */ - usbc_ep0_stall(); - } - break; - } - case 0x600: /* DEVICE QUALIFIER */ - LTRACEF("got GET_DESCRIPTOR, device qualifier\n"); - usbc_ep0_send(speed->device_qual.desc, - speed->device_qual.len, setup->length); - break; - case 0xa00: - /* we aint got one of these */ - LTRACEF("got GET_DESCRIPTOR, debug descriptor\n"); - usbc_ep0_stall(); - break; - default: - LTRACEF("unhandled descriptor %#x\n", setup->value); - // stall - break; - } - } else { - // interface/endpoint descriptors? let someone else handle it - // STALL - } - break; - } - - case SET_CONFIGURATION: - LTRACEF("SET_CONFIGURATION %d\n", setup->value); - active_config = setup->value; - usbc_ep0_ack(); - break; - - case GET_CONFIGURATION: - LTRACEF("GET_CONFIGURATION\n"); - usbc_ep0_send(&active_config, 1, setup->length); - break; - - case SET_INTERFACE: - LTRACEF("SET_INTERFACE %d\n", setup->value); - usbc_ep0_ack(); - break; - - case GET_INTERFACE: { - static uint8_t i = 1; - LTRACEF("GET_INTERFACE\n"); - usbc_ep0_send(&i, 1, setup->length); - break; - } - - case GET_STATUS: { - static uint16_t i = 1; // self powered - LTRACEF("GET_STATUS\n"); - usbc_ep0_send(&i, 2, setup->length); - break; - } - default: - LTRACEF("unhandled standard request 0x%x\n", setup->request); - } - } - } - - return 0; -} - -void usb_setup(usb_config *_config) -{ - ASSERT(_config); - - config = _config; - - ASSERT(usb_active == false); - - // set the default usb control callback handler - usbc_set_callback(&default_usb_callback); -} - -void usb_start(void) -{ - ASSERT(config); - ASSERT(usb_active == false); - - // go online - usbc_set_active(true); - usb_active = true; -} - -void usb_stop(void) -{ - ASSERT(usb_active == true); - - usb_active = false; - usbc_set_active(false); -} - -void usb_init(void) -{ -} - diff --git a/lk/include/app.h b/lk/include/app.h deleted file mode 100644 index f06bf27..0000000 --- a/lk/include/app.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2009 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __APP_H -#define __APP_H - -/* app support api */ -void apps_init(void); /* one time setup */ - -/* app entry point */ -struct app_descriptor; -typedef void (*app_init)(const struct app_descriptor *); -typedef void (*app_entry)(const struct app_descriptor *, void *args); - -/* app startup flags */ -#define APP_FLAG_DONT_START_ON_BOOT 0x1 - -/* each app needs to define one of these to define its startup conditions */ -struct app_descriptor { - const char *name; - app_init init; - app_entry entry; - unsigned int flags; -}; - -#define APP_START(appname) struct app_descriptor _app_##appname __SECTION(".apps") = { .name = #appname, -#define APP_END }; - -#endif - diff --git a/lk/include/arch.h b/lk/include/arch.h deleted file mode 100644 index b9f93b6..0000000 --- a/lk/include/arch.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ARCH_H -#define __ARCH_H - -#if defined(__cplusplus) -extern "C" { -#endif - -void arch_early_init(void); -void arch_init(void); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/lk/include/arch/ops.h b/lk/include/arch/ops.h deleted file mode 100644 index d5bafd0..0000000 --- a/lk/include/arch/ops.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ARCH_OPS_H -#define __ARCH_OPS_H - -#ifndef ASSEMBLY - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -void arch_enable_ints(void); -void arch_disable_ints(void); - -int atomic_swap(volatile int *ptr, int val); -int atomic_add(volatile int *ptr, int val); -int atomic_and(volatile int *ptr, int val); -int atomic_or(volatile int *ptr, int val); - -#endif // !ASSEMBLY -#define ICACHE 1 -#define DCACHE 2 -#define UCACHE (ICACHE|DCACHE) -#ifndef ASSEMBLY - -void arch_disable_cache(uint flags); -void arch_enable_cache(uint flags); - -void arch_clean_cache_range(addr_t start, size_t len); -void arch_clean_invalidate_cache_range(addr_t start, size_t len); - -void arch_idle(void); - -void arch_disable_mmu(void); - -void arch_switch_stacks_and_call(addr_t call, addr_t stack) __NO_RETURN; - -#if defined(__cplusplus) -} -#endif - -#endif // !ASSEMBLY - -#if ARCH_ARM -#include -#endif - -#endif diff --git a/lk/include/arch/thread.h b/lk/include/arch/thread.h deleted file mode 100644 index 06de51d..0000000 --- a/lk/include/arch/thread.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ARCH_THREAD_H -#define __ARCH_THREAD_H - -// give the arch code a chance to declare the arch_thread struct -#include - -struct thread; - -void arch_thread_initialize(struct thread *); -void arch_context_switch(struct thread *oldthread, struct thread *newthread); - -#endif diff --git a/lk/include/asm.h b/lk/include/asm.h deleted file mode 100644 index dadf2c4..0000000 --- a/lk/include/asm.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ASM_H -#define __ASM_H - -//#define FUNCTION(x) .global x; .type x,@function; x: -#define FUNCTION(x) .global x; x: - -#endif - diff --git a/lk/include/assert.h b/lk/include/assert.h deleted file mode 100644 index 332dfdb..0000000 --- a/lk/include/assert.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ASSERT_H -#define __ASSERT_H - -#include -#include - -#define ASSERT(x) \ - do { if (unlikely(!(x))) { panic("ASSERT FAILED at (%s:%d): %s\n", __FILE__, __LINE__, #x); } } while (0) - -#if DEBUGLEVEL > 1 -#define DEBUG_ASSERT(x) \ - do { if (unlikely(!(x))) { panic("DEBUG ASSERT FAILED at (%s:%d): %s\n", __FILE__, __LINE__, #x); } } while (0) -#else -#define DEBUG_ASSERT(x) \ - do { } while(0) -#endif - -#endif diff --git a/lk/include/bits.h b/lk/include/bits.h deleted file mode 100644 index d60e76f..0000000 --- a/lk/include/bits.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __BITS_H -#define __BITS_H - -#include - -#define clz(x) __builtin_clz(x) - -#define BIT(x, bit) ((x) & (1 << (bit))) -#define BIT_SHIFT(x, bit) (((x) >> (bit)) & 1) -#define BITS(x, high, low) ((x) & (((1<<((high)+1))-1) & ~((1<<(low))-1))) -#define BITS_SHIFT(x, high, low) (((x) >> (low)) & ((1<<((high)-(low)+1))-1)) -#define BIT_SET(x, bit) (((x) & (1 << (bit))) ? 1 : 0) - -#define BITMAP_BITS_PER_WORD (sizeof(unsigned long) * 8) -#define BITMAP_NUM_WORDS(x) (((x) / BITMAP_BITS_PER_WORD) + 1) -#define BITMAP_WORD(x) ((x) / BITMAP_BITS_PER_WORD) -#define BITMAP_BIT_IN_WORD(x) ((x) & (BITMAP_BITS_PER_WORD - 1)) - -static inline int bitmap_set(unsigned long *bitmap, int bit) -{ - unsigned long mask = 1 << BITMAP_BIT_IN_WORD(bit); - return atomic_or((int*)&bitmap[BITMAP_WORD(bit)], mask) & mask ? 1 : 0; -} - -static inline int bitmap_clear(unsigned long *bitmap, int bit) -{ - unsigned long mask = 1 << BITMAP_BIT_IN_WORD(bit); - - return atomic_and((int*)&bitmap[BITMAP_WORD(bit)], ~mask) & mask ? 1:0; -} - -static inline int bitmap_test(unsigned long *bitmap, int bit) -{ - return BIT_SET(bitmap[BITMAP_WORD(bit)], BITMAP_BIT_IN_WORD(bit)); -} - -#endif diff --git a/lk/include/compiler.h b/lk/include/compiler.h deleted file mode 100644 index cd4b243..0000000 --- a/lk/include/compiler.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __COMPILER_H -#define __COMPILER_H - -#ifndef __ASSEMBLY__ - -#if __GNUC__ -#define likely(x) __builtin_expect(!!(x), 1) -#define unlikely(x) __builtin_expect(!!(x), 0) -#define __UNUSED __attribute__((__unused__)) -#define __PACKED __attribute__((packed)) -#define __ALIGNED(x) __attribute__((aligned(x))) -#define __PRINTFLIKE(__fmt,__varargs) __attribute__((__format__ (__printf__, __fmt, __varargs))) -#define __SCANFLIKE(__fmt,__varargs) __attribute__((__format__ (__scanf__, __fmt, __varargs))) -#define __SECTION(x) __attribute((section(x))) -#define __PURE __attribute((pure)) -#define __CONST __attribute((const)) -#define __NO_RETURN __attribute__((noreturn)) -#define __MALLOC __attribute__((malloc)) -#define __WEAK __attribute__((weak)) -#define __GNU_INLINE __attribute__((gnu_inline)) -#define __GET_CALLER(x) __builtin_return_address(0) - -/* look for gcc 3.0 and above */ -#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 0) -#define __ALWAYS_INLINE __attribute__((always_inline)) -#else -#define __ALWAYS_INLINE -#endif - -/* look for gcc 3.1 and above */ -#if !defined(__DEPRECATED) // seems to be built in in some versions of the compiler -#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -#define __DEPRECATED __attribute((deprecated)) -#else -#define __DEPRECATED -#endif -#endif - -/* look for gcc 3.3 and above */ -#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) -/* the may_alias attribute was introduced in gcc 3.3; before that, there - * was no way to specify aliasiang rules on a type-by-type basis */ -#define __MAY_ALIAS __attribute__((may_alias)) - -/* nonnull was added in gcc 3.3 as well */ -#define __NONNULL(x) __attribute((nonnull x)) -#else -#define __MAY_ALIAS -#define __NONNULL(x) -#endif - -/* look for gcc 3.4 and above */ -#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -#define __WARN_UNUSED_RESULT __attribute((warn_unused_result)) -#else -#define __WARN_UNUSED_RESULT -#endif - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) -#define __EXTERNALLY_VISIBLE __attribute__((externally_visible)) -#else -#define __EXTERNALLY_VISIBLE -#endif - -#else - -#define likely(x) (x) -#define unlikely(x) (x) -#define __UNUSED -#define __PACKED -#define __ALIGNED(x) -#define __PRINTFLIKE(__fmt,__varargs) -#define __SCANFLIKE(__fmt,__varargs) -#define __SECTION(x) -#define __PURE -#define __CONST -#define __NONNULL(x) -#define __DEPRECATED -#define __WARN_UNUSED_RESULT -#define __ALWAYS_INLINE -#define __MAY_ALIAS -#define __NO_RETURN -#endif - -#endif - -#endif diff --git a/lk/include/ctype.h b/lk/include/ctype.h deleted file mode 100644 index 7f9982e..0000000 --- a/lk/include/ctype.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __CTYPE_H -#define __CTYPE_H - -int isalnum(int c); -int isalpha(int c); -int isblank(int c); -int iscntrl(int c); -int isdigit(int c); -int isgraph(int c); -int islower(int c); -int isprint(int c); -int ispunct(int c); -int isspace(int c); -int isupper(int c); -int isxdigit(int c); - -int tolower(int c); -int toupper(int c); - -#endif - diff --git a/lk/include/debug.h b/lk/include/debug.h deleted file mode 100644 index e5ebc19..0000000 --- a/lk/include/debug.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __DEBUG_H -#define __DEBUG_H - -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#if defined(DEBUG) -#define DEBUGLEVEL DEBUG -#else -#define DEBUGLEVEL 2 -#endif - -/* debug levels */ -#define CRITICAL 0 -#define ALWAYS 0 -#define INFO 1 -#define SPEW 2 - -/* output */ -void _dputc(char c); // XXX for now, platform implements -int _dputs(const char *str); -int _dprintf(const char *fmt, ...) __PRINTFLIKE(1, 2); -int _dvprintf(const char *fmt, va_list ap); - -#define dputc(level, str) do { if ((level) <= DEBUGLEVEL) { _dputc(str); } } while (0) -#define dputs(level, str) do { if ((level) <= DEBUGLEVEL) { _dputs(str); } } while (0) -#define dprintf(level, x...) do { if ((level) <= DEBUGLEVEL) { _dprintf(x); } } while (0) -#define dvprintf(level, x...) do { if ((level) <= DEBUGLEVEL) { _dvprintf(x); } } while (0) - -/* input */ -int dgetc(char *c); - -/* systemwide halts */ -void halt(void) __NO_RETURN; - -void _panic(void *caller, const char *fmt, ...) __PRINTFLIKE(2, 3) __NO_RETURN; -#define panic(x...) _panic(__GET_CALLER(), x) - -#define PANIC_UNIMPLEMENTED panic("%s unimplemented\n", __PRETTY_FUNCTION__) - -/* spin the cpu for a period of (short) time */ -void spin(uint32_t usecs); - -/* dump memory */ -void hexdump(const void *ptr, size_t len); -void hexdump8(const void *ptr, size_t len); - -/* trace routines */ -#define TRACE_ENTRY printf("%s: entry\n", __PRETTY_FUNCTION__) -#define TRACE_EXIT printf("%s: exit\n", __PRETTY_FUNCTION__) -#define TRACE_ENTRY_OBJ printf("%s: entry obj %p\n", __PRETTY_FUNCTION__, this) -#define TRACE_EXIT_OBJ printf("%s: exit obj %p\n", __PRETTY_FUNCTION__, this) -#define TRACE printf("%s:%d\n", __PRETTY_FUNCTION__, __LINE__) -#define TRACEF(x...) do { printf("%s:%d: ", __PRETTY_FUNCTION__, __LINE__); printf(x); } while (0) - -/* trace routines that work if LOCAL_TRACE is set */ -#define LTRACE_ENTRY do { if (LOCAL_TRACE) { TRACE_ENTRY; } } while (0) -#define LTRACE_EXIT do { if (LOCAL_TRACE) { TRACE_EXIT; } } while (0) -#define LTRACE do { if (LOCAL_TRACE) { TRACE; } } while (0) -#define LTRACEF(x...) do { if (LOCAL_TRACE) { TRACEF(x); } } while (0) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/lk/include/dev/ethernet.h b/lk/include/dev/ethernet.h deleted file mode 100644 index afb103e..0000000 --- a/lk/include/dev/ethernet.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __DEV_ETHERNET_H -#define __DEV_ETHERNET_H - -/* Queue an ethernet frame for send. -** -** CRC and minimum length padding are handled by the driver. -** -** Data is malloc()'d and ownership is transfered to the ethernet -** device which will free() it once the packet is transmitted. -** -*/ -int ethernet_send(void *data, unsigned length); - -status_t ethernet_init(void); /* initialize the ethernet device */ - -#endif diff --git a/lk/include/dev/fbcon.h b/lk/include/dev/fbcon.h deleted file mode 100644 index ebcf9d7..0000000 --- a/lk/include/dev/fbcon.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __DEV_FBCON_H -#define __DEV_FBCON_H - -#define FB_FORMAT_RGB565 0 -#define FB_FORMAT_RGB888 1 - -struct fbcon_config { - void *base; - unsigned width; - unsigned height; - unsigned stride; - unsigned bpp; - unsigned format; - - void (*update_start)(void); - int (*update_done)(void); -}; - -void fbcon_setup(struct fbcon_config *cfg); -void fbcon_putc(char c); -void fbcon_clear(void); -struct fbcon_config* fbcon_display(void); - -#endif /* __DEV_FBCON_H */ diff --git a/lk/include/dev/flash.h b/lk/include/dev/flash.h deleted file mode 100644 index 4fa931c..0000000 --- a/lk/include/dev/flash.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -#ifndef __DEV_FLASH_H -#define __DEV_FLASH_H - -#include - - -struct flash_info { - unsigned id; - unsigned type; - unsigned vendor; - unsigned device; - unsigned page_size; - unsigned block_size; - unsigned spare_size; - unsigned num_blocks; -}; - -void flash_init(void); -struct ptable *flash_get_ptable(void); -void flash_set_ptable(struct ptable *ptable); -struct flash_info *flash_get_info(void); - -/* flash operations */ -int flash_erase(struct ptentry *ptn); -int flash_read_ext(struct ptentry *ptn, unsigned extra_per_page, - unsigned offset, void *data, unsigned bytes); -int flash_write(struct ptentry *ptn, unsigned extra_per_page, const void *data, - unsigned bytes); - -static inline int flash_read(struct ptentry *ptn, unsigned offset, void *data, - unsigned bytes) -{ - return flash_read_ext(ptn, 0, offset, data, bytes); -} -unsigned flash_page_size(void); - - -#endif /* __DEV_FLASH_H */ diff --git a/lk/include/dev/gpio.h b/lk/include/dev/gpio.h deleted file mode 100644 index 22ca9e4..0000000 --- a/lk/include/dev/gpio.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __DEV_GPIO_H -#define __DEV_GPIO_H - -#define GPIO_INPUT 0x0000 -#define GPIO_OUTPUT 0x0001 - -#define GPIO_LEVEL 0x0000 -#define GPIO_EDGE 0x0010 - -#define GPIO_RISING 0x0020 -#define GPIO_FALLING 0x0040 - -#define GPIO_HIGH 0x0020 -#define GPIO_LOW 0x0040 - -#define GPIO_PULLUP 0x0100 -#define GPIO_PULLDOWN 0x0200 - -int gpio_config(unsigned nr, unsigned flags); -void gpio_set(unsigned nr, unsigned on); -int gpio_get(unsigned nr); - -#endif diff --git a/lk/include/dev/gpio_keypad.h b/lk/include/dev/gpio_keypad.h deleted file mode 100644 index f467729..0000000 --- a/lk/include/dev/gpio_keypad.h +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __DEV_GPIO_KEYPAD_H -#define __DEV_GPIO_KEYPAD_H - -#include - -/* unset: drive active output low, set: drive active output high */ -#define GPIOKPF_ACTIVE_HIGH (1U << 0) -#define GPIOKPF_DRIVE_INACTIVE (1U << 1) - -struct gpio_keypad_info { - /* size must be ninputs * noutputs */ - const uint16_t *keymap; - unsigned *input_gpios; - unsigned *output_gpios; - int ninputs; - int noutputs; - /* time to wait before reading inputs after driving each output */ - time_t settle_time; - time_t poll_time; - unsigned flags; -}; - -void gpio_keypad_init(struct gpio_keypad_info *kpinfo); - -//Macros for SSBI Qwerty keypad for 7x30 - -/* SSBI 2.0 controller registers */ -#define MSM_SSBI_BASE 0xAD900000 - -#define SSBI_TIMEOUT_US 100 - -#define SSBI2_CTL 0x0000 -#define SSBI2_RESET 0x0004 -#define SSBI2_CMD 0x0008 -#define SSBI2_RD 0x0010 -#define SSBI2_STATUS 0x0014 -#define SSBI2_PRIORITIES 0x0018 -#define SSBI2_MODE2 0x001C - -/* SSBI_CMD fields */ -#define SSBI_CMD_SEND_TERM_SYM (0x01 << 27) -#define SSBI_CMD_WAKEUP_SLAVE (0x01 << 26) -#define SSBI_CMD_USE_ENABLE (0x01 << 25) -#define SSBI_CMD_RDWRN (0x01 << 24) -#define SSBI_CMD_REG_ADDR_SHFT (0x10) -#define SSBI_CMD_REG_ADDR_MASK (0xFF << SSBI_CMD_REG_ADDR_SHFT) -#define SSBI_CMD_REG_DATA_SHFT (0x00) -#define SSBI_CMD_REG_DATA_MASK (0xFF << SSBI_CMD_REG_DATA_SHFT) - -/* SSBI_STATUS fields */ -#define SSBI_STATUS_DATA_IN 0x10 -#define SSBI_STATUS_RD_CLOBBERED 0x08 -#define SSBI_STATUS_RD_READY 0x04 -#define SSBI_STATUS_READY 0x02 -#define SSBI_STATUS_MCHN_BUSY 0x01 - -/* SSBI_RD fields */ -#define SSBI_RD_USE_ENABLE 0x02000000 -#define SSBI_RD_RDWRN 0x01000000 -#define SSBI_RD_REG_ADDR_SHFT 0x10 -#define SSBI_RD_REG_ADDR_MASK (0xFF << SSBI_RD_REG_ADDR_SHFT) -#define SSBI_RD_REG_DATA_SHFT (0x00) -#define SSBI_RD_REG_DATA_MASK (0xFF << SSBI_RD_REG_DATA_SHFT) - -/* SSBI_MODE2 fields */ -#define SSBI_MODE2_REG_ADDR_15_8_SHFT 0x04 -#define SSBI_MODE2_REG_ADDR_15_8_MASK (0x7F << SSBI_MODE2_REG_ADDR_15_8_SHFT) -#define SSBI_MODE2_ADDR_WIDTH_SHFT 0x01 -#define SSBI_MODE2_ADDR_WIDTH_MASK (0x07 << SSBI_MODE2_ADDR_WIDTH_SHFT) -#define SSBI_MODE2_SSBI2_MODE 0x00000001 - -//Keypad controller configurations -#define SSBI_REG_KYPD_CNTL_ADDR 0x148 -#define SSBI_REG_KYPD_SCAN_ADDR 0x149 -#define SSBI_REG_KYPD_TEST_ADDR 0x14A -#define SSBI_REG_KYPD_REC_DATA_ADDR 0x14B -#define SSBI_REG_KYPD_OLD_DATA_ADDR 0x14C - -// GPIO configurations - -#define SSBI_REG_ADDR_GPIO_BASE 0x150 -#define SSBI_OFFSET_ADDR_GPIO_KYPD_SNS 0x000 -#define SSBI_OFFSET_ADDR_GPIO_KYPD_DRV 0x008 -#define SSBI_REG_ADDR_GPIO(n) (SSBI_REG_ADDR_GPIO_BASE + n) - -#define PM_GPIO_DIR_OUT 0x01 -#define PM_GPIO_DIR_IN 0x02 -#define PM_GPIO_DIR_BOTH (PM_GPIO_DIR_OUT | PM_GPIO_DIR_IN) - -#define PM_GPIO_PULL_UP1 2 -#define PM_GPIO_PULL_UP2 3 -#define PM_GPIO_PULL_DN 4 -#define PM_GPIO_PULL_NO 5 - -#define PM_GPIO_STRENGTH_NO 0 -#define PM_GPIO_STRENGTH_HIGH 1 -#define PM_GPIO_STRENGTH_MED 2 -#define PM_GPIO_STRENGTH_LOW 3 - -#define PM_GPIO_FUNC_NORMAL 0 -#define PM_GPIO_FUNC_PAIRED 1 -#define PM_GPIO_FUNC_1 2 -#define PM_GPIO_FUNC_2 3 - -#define PM8058_GPIO_BANK_MASK 0x70 -#define PM8058_GPIO_BANK_SHIFT 4 -#define PM8058_GPIO_WRITE 0x80 - -/* Bank 0 */ -#define PM8058_GPIO_VIN_MASK 0x0E -#define PM8058_GPIO_VIN_SHIFT 1 -#define PM8058_GPIO_MODE_ENABLE 0x01 - -/* Bank 1 */ -#define PM8058_GPIO_MODE_MASK 0x0C -#define PM8058_GPIO_MODE_SHIFT 2 -#define PM8058_GPIO_OUT_BUFFER 0x02 -#define PM8058_GPIO_OUT_INVERT 0x01 - -#define PM8058_GPIO_MODE_OFF 3 -#define PM8058_GPIO_MODE_OUTPUT 2 -#define PM8058_GPIO_MODE_INPUT 0 -#define PM8058_GPIO_MODE_BOTH 1 - -/* Bank 2 */ -#define PM8058_GPIO_PULL_MASK 0x0E -#define PM8058_GPIO_PULL_SHIFT 1 - -/* Bank 3 */ -#define PM8058_GPIO_OUT_STRENGTH_MASK 0x0C -#define PM8058_GPIO_OUT_STRENGTH_SHIFT 2 - -/* Bank 4 */ -#define PM8058_GPIO_FUNC_MASK 0x0E -#define PM8058_GPIO_FUNC_SHIFT 1 - - -/* PMIC Arbiter 1: SSBI2 Configuration Micro ARM registers */ -#define PA1_SSBI2_CMD 0x00500000 -#define PA1_SSBI2_RD_STATUS 0x00500004 - -#define PA1_SSBI2_REG_ADDR_SHIFT 8 -#define PA1_SSBI2_CMD_RDWRN_SHIFT 24 -#define PA1_SSBI2_TRANS_DONE_SHIFT 27 - -#define PA1_SSBI2_REG_DATA_MASK 0xFF -#define PA1_SSBI2_REG_DATA_SHIFT 0 - -#define PA1_SSBI2_CMD_READ 1 -#define PA1_SSBI2_CMD_WRITE 0 - -/* PMIC Arbiter 2: SSBI2 Configuration Micro ARM registers */ -#define PA2_SSBI2_CMD 0x00C00000 -#define PA2_SSBI2_RD_STATUS 0x00C00004 - -#define PA2_SSBI2_REG_ADDR_SHIFT 8 -#define PA2_SSBI2_CMD_RDWRN_SHIFT 24 -#define PA2_SSBI2_TRANS_DONE_SHIFT 27 - -#define PA2_SSBI2_REG_DATA_MASK 0xFF -#define PA2_SSBI2_REG_DATA_SHIFT 0 - -#define PA2_SSBI2_CMD_READ 1 -#define PA2_SSBI2_CMD_WRITE 0 - -struct pm8058_gpio { - int direction; - int pull; - int vin_sel; /* 0..7 */ - int out_strength; - int function; - int inv_int_pol; /* invert interrupt polarity */ -}; - -typedef int (*read_func)(unsigned char *, unsigned short, unsigned short); -typedef int (*write_func)(unsigned char *, unsigned short, unsigned short); - -struct qwerty_keypad_info { - /* size must be ninputs * noutputs */ - unsigned int *keymap; - unsigned char *old_keys; - unsigned char *rec_keys; - unsigned int rows; - unsigned int columns; - unsigned int num_of_reads; - read_func rd_func; - write_func wr_func; - /* time to wait before reading inputs after driving each output */ - time_t settle_time; - time_t poll_time; - unsigned flags; -}; - -#define SSBI_CMD_READ(AD) \ - (SSBI_CMD_RDWRN | (((AD) & 0xFF) << SSBI_CMD_REG_ADDR_SHFT)) - -#define SSBI_CMD_WRITE(AD, DT) \ - ((((AD) & 0xFF) << SSBI_CMD_REG_ADDR_SHFT) | \ - (((DT) & 0xFF) << SSBI_CMD_REG_DATA_SHFT)) - -#define SSBI_MODE2_REG_ADDR_15_8(MD, AD) \ - (((MD) & 0x0F) | ((((AD) >> 8) << SSBI_MODE2_REG_ADDR_15_8_SHFT) & \ - SSBI_MODE2_REG_ADDR_15_8_MASK)) - -void ssbi_keypad_init (struct qwerty_keypad_info *); -int i2c_ssbi_read_bytes(unsigned char *buffer, unsigned short length, - unsigned short slave_addr); -int i2c_ssbi_write_bytes(unsigned char *buffer, unsigned short length, - unsigned short slave_addr); -int pa1_ssbi2_read_bytes(unsigned char *buffer, unsigned short length, - unsigned short slave_addr); -int pa1_ssbi2_write_bytes(unsigned char *buffer, unsigned short length, - unsigned short slave_addr); - -#endif /* __DEV_GPIO_KEYPAD_H */ diff --git a/lk/include/dev/i2c.h b/lk/include/dev/i2c.h deleted file mode 100644 index fef1303..0000000 --- a/lk/include/dev/i2c.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __DEV_I2C_H -#define __DEV_I2C_H - -void i2c_init(void); -void i2c_init_early(void); - -/* send and receive blocks of data */ -int i2c_transmit(int bus, uint8_t address, const void *buf, size_t count); -int i2c_receive(int bus, uint8_t address, void *buf, size_t count); - -/* a few convenience routines based on the usual way of accessing 8 byte registers on i2c slave devices */ -int i2c_write_reg(int bus, uint8_t address, uint8_t reg, uint8_t val); -int i2c_read_reg(int bus, uint8_t address, uint8_t reg, uint8_t *val); - - -#endif - diff --git a/lk/include/dev/keys.h b/lk/include/dev/keys.h deleted file mode 100644 index 6159875..0000000 --- a/lk/include/dev/keys.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2009, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __DEV_KEYS_H -#define __DEV_KEYS_H - -#include - -/* these are just the ascii values for the chars */ -#define KEY_0 0x30 -#define KEY_1 0x31 -#define KEY_2 0x32 -#define KEY_3 0x33 -#define KEY_4 0x34 -#define KEY_5 0x35 -#define KEY_6 0x36 -#define KEY_7 0x37 -#define KEY_8 0x38 -#define KEY_9 0x39 - -#define KEY_A 0x61 - -#define KEY_ESC 0x100 -#define KEY_F1 0x101 -#define KEY_F2 0x102 -#define KEY_F3 0x103 -#define KEY_F4 0x104 -#define KEY_F5 0x105 -#define KEY_F6 0x106 -#define KEY_F7 0x107 -#define KEY_F8 0x108 -#define KEY_F9 0x109 - -#define KEY_LEFT 0x110 -#define KEY_RIGHT 0x111 -#define KEY_UP 0x112 -#define KEY_DOWN 0x113 -#define KEY_CENTER 0x114 - -#define KEY_VOLUMEUP 0x115 -#define KEY_VOLUMEDOWN 0x116 -#define KEY_MUTE 0x117 -#define KEY_SOUND 0x118 - -#define KEY_SOFT1 0x11a -#define KEY_SOFT2 0x11b -#define KEY_STAR 0x11c -#define KEY_SHARP 0x11d -#define KEY_MAIL 0x11e - -#define KEY_SEND 0x120 -#define KEY_CLEAR 0x121 -#define KEY_HOME 0x122 -#define KEY_BACK 0x123 -#define KEY_MENU 0x124 - -#define MAX_KEYS 0x1ff - -void keys_init(void); -void keys_post_event(uint16_t code, int16_t value); -int keys_get_state(uint16_t code); - -#endif /* __DEV_KEYS_H */ diff --git a/lk/include/dev/uart.h b/lk/include/dev/uart.h deleted file mode 100644 index e3439dd..0000000 --- a/lk/include/dev/uart.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __DEV_UART_H -#define __DEV_UART_H - -#include - -void uart_init(void); -void uart_init_early(void); - -int uart_putc(int port, char c); -int uart_getc(int port, bool wait); -void uart_flush_tx(int port); -void uart_flush_rx(int port); -void uart_init_port(int port, uint baud); - -#endif - diff --git a/lk/include/dev/udc.h b/lk/include/dev/udc.h deleted file mode 100644 index 0d8cff1..0000000 --- a/lk/include/dev/udc.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2009, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __DEV_UDC_H -#define __DEV_UDC_H - -/* USB Device Controller Transfer Request */ -struct udc_request { - void *buf; - unsigned length; - void (*complete)(struct udc_request *req, unsigned actual, int status); - void *context; -}; - -/* endpoints are opaque handles specific to the particular device controller */ -struct udc_endpoint; - -struct udc_request *udc_request_alloc(void); -void udc_request_free(struct udc_request *req); -int udc_request_queue(struct udc_endpoint *ept, struct udc_request *req); -int udc_request_cancel(struct udc_endpoint *ept, struct udc_request *req); - -#define UDC_TYPE_BULK_IN 1 -#define UDC_TYPE_BULK_OUT 2 - -struct udc_endpoint *udc_endpoint_alloc(unsigned type, unsigned maxpkt); -void udc_endpoint_free(struct udc_endpoint *ept); - -#define UDC_EVENT_ONLINE 1 -#define UDC_EVENT_OFFLINE 2 - -struct udc_gadget { - void (*notify)(struct udc_gadget *gadget, unsigned event); - void *context; - - unsigned char ifc_class; - unsigned char ifc_subclass; - unsigned char ifc_protocol; - unsigned char ifc_endpoints; - const char *ifc_string; - unsigned flags; - - struct udc_endpoint **ept; -}; - -struct udc_device { - unsigned short vendor_id; - unsigned short product_id; - unsigned short version_id; - - const char *manufacturer; - const char *product; - const char *serialno; -}; - -int udc_init(struct udc_device *devinfo); -int udc_register_gadget(struct udc_gadget *gadget); -int udc_start(void); -int udc_stop(void); - -/* these should probably go elsewhere */ -#define GET_STATUS 0 -#define CLEAR_FEATURE 1 -#define SET_FEATURE 3 -#define SET_ADDRESS 5 -#define GET_DESCRIPTOR 6 -#define SET_DESCRIPTOR 7 -#define GET_CONFIGURATION 8 -#define SET_CONFIGURATION 9 -#define GET_INTERFACE 10 -#define SET_INTERFACE 11 -#define SYNCH_FRAME 12 - -#define TYPE_DEVICE 1 -#define TYPE_CONFIGURATION 2 -#define TYPE_STRING 3 -#define TYPE_INTERFACE 4 -#define TYPE_ENDPOINT 5 - -#define DEVICE_READ 0x80 -#define DEVICE_WRITE 0x00 -#define INTERFACE_READ 0x81 -#define INTERFACE_WRITE 0x01 -#define ENDPOINT_READ 0x82 -#define ENDPOINT_WRITE 0x02 - -struct setup_packet { - unsigned char type; - unsigned char request; - unsigned short value; - unsigned short index; - unsigned short length; -} __attribute__ ((packed)); - -#endif diff --git a/lk/include/dev/usb.h b/lk/include/dev/usb.h deleted file mode 100644 index e33bea4..0000000 --- a/lk/include/dev/usb.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __DEV_USB_H -#define __DEV_USB_H - -#include -#include - -/* top level initialization for usb client, abstracts away the interfaces */ -typedef struct { - void *desc; - size_t len; -} usb_descriptor __ALIGNED(2); - -typedef struct { - usb_descriptor string; - uint8_t id; -} usb_string; - -/* complete usb config struct, passed in to usb_setup() */ -typedef struct { - struct usb_descriptor_speed { - usb_descriptor device; - usb_descriptor device_qual; - usb_descriptor config; - } lowspeed, highspeed; - usb_descriptor langid; -} usb_config; - -void usb_init(void); - -/* external code needs to set up the usb stack via the following calls */ -void usb_setup(usb_config *config); - -/* apped new interface descriptors to the existing config if desired */ -int usb_append_interface_highspeed(const uint8_t *int_descr, size_t len); -int usb_append_interface_lowspeed(const uint8_t *int_descr, size_t len); - -void usb_add_string(const char *string, uint8_t id); - -void usb_start(void); -void usb_stop(void); - -#endif - diff --git a/lk/include/dev/usbc.h b/lk/include/dev/usbc.h deleted file mode 100644 index f566190..0000000 --- a/lk/include/dev/usbc.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __DEV_USBC_H -#define __DEV_USBC_H - -#include -#include -#include - -void usbc_init(void); - -typedef uint ep_t; - -typedef enum { - IN = 0, - OUT -} ep_dir_t; - -typedef enum { - CB_RESET, - CB_SUSPEND, - CB_RESUME, - CB_DISCONNECT, - CB_ONLINE, - CB_OFFLINE, - CB_SETUP_MSG, - - /* endpoint transfer stuff */ - CB_EP_RXCOMPLETE, - CB_EP_TXCOMPLETE, - CB_EP_TRANSFER_CANCELLED, -} usbc_callback_op_t; - -typedef struct { - void *buf; - size_t buflen; - uint bufpos; - int result; - void *extra; // extra pointer to store whatever you want -} usbc_transfer; - -enum { - USB_TRANSFER_RESULT_OK = 0, - USB_TRANSFER_RESULT_ERR = -1, - USB_TRANSFER_RESULT_CANCELLED = -2, -}; - -typedef int (*ep_callback)(ep_t endpoint, usbc_callback_op_t op, usbc_transfer *transfer); - -void usbc_setup_endpoint(ep_t ep, ep_dir_t dir, bool active, ep_callback callback, uint width, uint blocksize); -int usbc_queue_rx(ep_t ep, usbc_transfer *transfer); -int usbc_queue_tx(ep_t ep, usbc_transfer *transfer); - -/* setup arg is valid during CB_SETUP_MSG */ -union usb_callback_args { - const struct usb_setup *setup; -}; - -typedef int (*usb_callback)(usbc_callback_op_t op, const union usb_callback_args *args); - -int usbc_set_callback(usb_callback); -int usbc_set_active(bool active); - -/* called back from within a callback to handle setup responses */ -void usbc_ep0_ack(void); -void usbc_ep0_stall(void); -void usbc_ep0_send(const void *buf, size_t len, size_t maxlen); -void usbc_ep0_recv(void *buf, size_t len, ep_callback); - -bool usbc_is_highspeed(void); - -static inline void usbc_dump_transfer(const usbc_transfer *t) -{ - printf("usb transfer %p: buf %p, buflen %zd, bufpos %u, result %d\n", t, t->buf, t->buflen, t->bufpos, t->result); -} - -#endif - diff --git a/lk/include/endian.h b/lk/include/endian.h deleted file mode 100644 index 30623b2..0000000 --- a/lk/include/endian.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ENDIAN_H -#define __ENDIAN_H - -#include - -#ifndef LITTLE_ENDIAN -#define LITTLE_ENDIAN 1234 -#endif -#ifndef BIG_ENDIAN -#define BIG_ENDIAN 4321 -#endif - -#if __POWERPC__ -#include -#endif - -#if defined(ARCH_ARM) -#define BYTE_ORDER LITTLE_ENDIAN -#endif - -#ifndef BYTE_ORDER -#error "need to get the BYTE_ORDER define from somewhere" -#endif - -// define a macro that unconditionally swaps -#define SWAP_32(x) \ - (((uint32_t)(x) << 24) | (((uint32_t)(x) & 0xff00) << 8) |(((uint32_t)(x) & 0x00ff0000) >> 8) | ((uint32_t)(x) >> 24)) -#define SWAP_16(x) \ - ((((uint16_t)(x) & 0xff) << 8) | ((uint16_t)(x) >> 8)) - -// standard swap macros -#if BYTE_ORDER == BIG_ENDIAN -#define LE32(val) SWAP_32(val) -#define LE16(val) SWAP_16(val) -#define BE32(val) (val) -#define BE16(val) (val) -#else -#define LE32(val) (val) -#define LE16(val) (val) -#define BE32(val) SWAP_32(val) -#define BE16(val) SWAP_16(val) -#endif - -#define LE32SWAP(var) (var) = LE32(var); -#define LE16SWAP(var) (var) = LE16(var); -#define BE32SWAP(var) (var) = BE32(var); -#define BE16SWAP(var) (var) = BE16(var); - -/* classic network byte swap stuff */ -#define ntohs(n) BE16(n) -#define htons(h) BE16(h) -#define ntohl(n) BE32(n) -#define htonl(h) BE32(h) - -// some memory access macros -#if __POWERPC__ -#define READ_MEM_WORD(ptr) __lwbrx((word *)(ptr), 0) -#define READ_MEM_HALFWORD(ptr) __lhbrx((halfword *)(ptr), 0) -#define READ_MEM_BYTE(ptr) (*(byte *)(ptr)) -#define WRITE_MEM_WORD(ptr, data) __stwbrx(data, (word *)(ptr), 0) -#define WRITE_MEM_HALFWORD(ptr, data) __sthbrx(data, (halfword *)(ptr), 0) -#define WRITE_MEM_BYTE(ptr, data) (*(byte *)(ptr) = (data)) -#else -#define READ_MEM_WORD(ptr) SWAPIT_32(*(word *)(ptr)) -#define READ_MEM_HALFWORD(ptr) SWAPIT_16(*(halfword *)(ptr)) -#define READ_MEM_BYTE(ptr) (*(byte *)(ptr)) -#define WRITE_MEM_WORD(ptr, data) (*(word *)(ptr) = SWAPIT_32(data)) -#define WRITE_MEM_HALFWORD(ptr, data) (*(halfword *)(ptr) = SWAPIT_16(data)) -#define WRITE_MEM_BYTE(ptr, data) (*(byte *)(ptr) = (data)) -#endif - - -#endif diff --git a/lk/include/err.h b/lk/include/err.h deleted file mode 100644 index 3b8b401..0000000 --- a/lk/include/err.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __ERR_H -#define __ERR_H - -#define NO_ERROR 0 -#define ERROR -1 -#define ERR_NOT_FOUND -2 -#define ERR_NOT_READY -3 -#define ERR_NO_MSG -4 -#define ERR_NO_MEMORY -5 -#define ERR_ALREADY_STARTED -6 -#define ERR_NOT_VALID -7 -#define ERR_INVALID_ARGS -8 -#define ERR_NOT_ENOUGH_BUFFER -9 -#define ERR_NOT_SUSPENDED -10 -#define ERR_OBJECT_DESTROYED -11 -#define ERR_NOT_BLOCKED -12 -#define ERR_TIMED_OUT -13 - -#endif diff --git a/lk/include/hw/mii.h b/lk/include/hw/mii.h deleted file mode 100644 index 0ff8979..0000000 --- a/lk/include/hw/mii.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2006 Brian Swetland - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef __HW_MII_H -#define __HW_MII_H - -#define MII_REG_BCR 0x00 -#define MII_REG_BSR 0x01 -#define MII_REG_PHY_ID1 0x02 -#define MII_REG_PHY_ID2 0x03 -#define MII_REG_AUTO_ADV 0x04 -#define MII_REG_AUTO_LINK 0x05 -#define MII_REG_AUTO_EXPN 0x06 -#define MII_REG_AUTO_NEXT 0x07 -#define MII_REG_LINK_NEXT 0x08 -#define MII_REG_RXER_CNT 0x15 -#define MII_REG_ICSR 0x1b -#define MII_REG_100TX_PHY 0x1f - -#define MII_BCR_RESET 0x8000 -#define MII_BCR_LOOPBACK 0x4000 -#define MII_BCR_100MBPS 0x2000 -#define MII_BCR_AUTO_ENABLE 0x1000 -#define MII_BCR_PWR_DOWN 0x0800 -#define MII_BCR_ISOLATE 0x0400 -#define MII_BCR_AUTO_RESTART 0x0200 -#define MII_BCR_FULL_DUPLEX 0x0100 -#define MII_BCR_COL_TEST 0x0080 -#define MII_BCR_TX_DISABLE 0x0001 - -#define MII_BSR_T4 0x8000 -#define MII_BSR_100TX_FULL 0x4000 -#define MII_BSR_100TX_HALF 0x2000 -#define MII_BSR_10T_FULL 0x1000 -#define MII_BSR_10T_HALF 0x0800 -#define MII_BSR_NO_PREAMBLE 0x0040 -#define MII_BSR_AUTO_COMPLETE 0x0020 -#define MII_BSR_REMOTE_FAULT 0x0010 -#define MII_BSR_AUTO_ABLE 0x0008 -#define MII_BSR_LINK_UP 0x0004 -#define MII_BSR_JABBER 0x0002 -#define MII_BSR_EXTEND 0x0001 - -#define MII_100TX_PHY_ISOLATE 0x0040 -#define MII_100TX_MODE_MASK 0x001C -#define MII_100TX_MODE_AUTO 0x0000 -#define MII_100TX_MODE_10T_H 0x0004 -#define MII_100TX_MODE_100TX_H 0x0008 -#define MII_100TX_MODE_10T_F 0x0014 -#define MII_100TX_MODE_100TX_F 0x0018 -#define MII_100TX_MODE_ISOLATE 0x001C -#define MII_100TX_SQE_TEST 0x0002 -#define MII_100TX_NO_SCRAMBLE 0x0001 - -#endif diff --git a/lk/include/hw/usb.h b/lk/include/hw/usb.h deleted file mode 100644 index a533b7b..0000000 --- a/lk/include/hw/usb.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __HW_USB_H -#define __HW_USB_H - -#include -#include - -/* GLOBAL STATUS VALUES */ -#define STD_COMMAND 0x00 -#define SETUP_COMMAND_PHASE 0x40 -#define FUNCTION_ERROR 0x7F /* Used when we are stalling the function EP0 */ -#define HUB_ERROR 0xFF /* Used when we are stalling the HUB EP0 */ - -/* Request Types */ -#define DIR_OUT (0 << 7) -#define DIR_IN (1 << 7) -#define DIR_MASK (1 << 7) -#define TYPE_STANDARD (0 << 5) -#define TYPE_CLASS (1 << 5) -#define TYPE_VENDOR (2 << 5) -#define TYPE_MASK (3 << 5) -#define RECIP_DEVICE (0 << 0) -#define RECIP_INTERFACE (1 << 0) -#define RECIP_ENDPOINT (2 << 0) -#define RECIP_OTHER (3 << 0) -#define RECIP_MASK (0x1f << 0) - -/* 1.0 Request Values */ -#define GET_STATUS 0x00 -#define CLEAR_FEATURE 0x01 -#define SET_FEATURE 0x03 -#define SET_ADDRESS 0x05 -#define GET_DESCRIPTOR 0x06 -#define SET_DESCRIPTOR 0x07 -#define GET_CONFIGURATION 0x08 -#define SET_CONFIGURATION 0x09 -#define GET_INTERFACE 0x0A -#define SET_INTERFACE 0x0B -#define SYNCH_FRAME 0x0C - -/* Mass storage requests */ -#define MASS_STORAGE_GET_MAX_LUN 0xfe -#define MASS_STORAGE_RESET 0xff - -/* DFU requests */ -#define DFU_DETACH 0x00 -#define DFU_DNLOAD 0x01 -#define DFU_UPLOAD 0x02 -#define DFU_GETSTATUS 0x03 -#define DFU_CLRSTATUS 0x04 -#define DFU_GETSTATE 0x05 -#define DFU_ABORT 0x06 - -/* HID Request Values */ -#define GET_REPORT 0x01 -#define GET_IDLE 0x02 -#define GET_PROTOCOL 0x03 -#define SET_REPORT 0x09 -#define SET_IDLE 0x0A -#define SET_PROTOCOL 0x0B - -/* Descriptor Types */ -#define DEVICE 0x01 -#define CONFIGURATION 0x02 -#define STRING 0x03 -#define INTERFACE 0x04 -#define ENDPOINT 0x05 -#define DEVICE_QUALIFIER 0x06 -#define OTHER_SPEED_CONFIGURATION 0x07 -#define INTERFACE_POWER 0x08 -#define HID 0x21 -#define HIDREPORT 0x22 -#define HIDPHYSICAL 0x23 - -/* general USB defines */ -struct usb_setup { - uint8_t request_type; - uint8_t request; - uint16_t value; - uint16_t index; - uint16_t length; -} __PACKED; - -#endif - diff --git a/lk/include/inttypes.h b/lk/include/inttypes.h deleted file mode 100644 index f6681e3..0000000 --- a/lk/include/inttypes.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __INTTYPES_H -#define __INTTYPES_H - -#include - -#endif - diff --git a/lk/include/kernel/dpc.h b/lk/include/kernel/dpc.h deleted file mode 100644 index 9059e25..0000000 --- a/lk/include/kernel/dpc.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __KERNEL_DPC_H -#define __KERNEL_DPC_H - -#include -#include - -void dpc_init(void); - -typedef void (*dpc_callback)(void *arg); - -#define DPC_FLAG_NORESCHED 0x1 - -status_t dpc_queue(dpc_callback, void *arg, uint flags); - -#endif - diff --git a/lk/include/kernel/event.h b/lk/include/kernel/event.h deleted file mode 100644 index 8666737..0000000 --- a/lk/include/kernel/event.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __KERNEL_EVENT_H -#define __KERNEL_EVENT_H - -#include - -#define EVENT_MAGIC 'evnt' - -typedef struct event { - int magic; - bool signalled; - uint flags; - wait_queue_t wait; -} event_t; - -#define EVENT_FLAG_AUTOUNSIGNAL 1 - -/* Rules for Events: - * - Events may be signaled from interrupt context *but* the reschedule - * parameter must be false in that case. - * - Events may not be waited upon from interrupt context. - * - Events without FLAG_AUTOUNSIGNAL: - * - Wake up any waiting threads when signaled. - * - Continue to do so (no threads will wait) until unsignaled. - * - Events with FLAG_AUTOUNSIGNAL: - * - If one or more threads are waiting when signaled, one thread will - * be woken up and return. The signaled state will not be set. - * - If no threads are waiting when signaled, the Event will remain - * in the signaled state until a thread attempts to wait (at which - * time it will unsignal atomicly and return immediately) or - * event_unsignal() is called. -*/ - -void event_init(event_t *, bool initial, uint flags); -void event_destroy(event_t *); -status_t event_wait(event_t *); -status_t event_wait_timeout(event_t *, time_t); /* wait on the event with a timeout */ -status_t event_signal(event_t *, bool reschedule); -status_t event_unsignal(event_t *); - -#endif - diff --git a/lk/include/kernel/mutex.h b/lk/include/kernel/mutex.h deleted file mode 100644 index 40fe72f..0000000 --- a/lk/include/kernel/mutex.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __KERNEL_MUTEX_H -#define __KERNEL_MUTEX_H - -#include - -#define MUTEX_MAGIC 'mutx' - -typedef struct mutex { - int magic; - int count; - thread_t *holder; - wait_queue_t wait; -} mutex_t; - -/* Rules for Mutexes: - * - Mutexes are only safe to use from thread context. - * - Mutexes are non-recursive. -*/ - -void mutex_init(mutex_t *); -void mutex_destroy(mutex_t *); -status_t mutex_acquire(mutex_t *); -status_t mutex_acquire_timeout(mutex_t *, time_t); /* try to acquire the mutex with a timeout value */ -status_t mutex_release(mutex_t *); - -#endif - diff --git a/lk/include/kernel/thread.h b/lk/include/kernel/thread.h deleted file mode 100644 index 8f76291..0000000 --- a/lk/include/kernel/thread.h +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __KERNEL_THREAD_H -#define __KERNEL_THREAD_H - -#include -#include -#include -#include -#include - -enum thread_state { - THREAD_SUSPENDED = 0, - THREAD_READY, - THREAD_RUNNING, - THREAD_BLOCKED, - THREAD_SLEEPING, - THREAD_DEATH, -}; - -typedef int (*thread_start_routine)(void *arg); - -/* thread local storage */ -enum thread_tls_list { - MAX_TLS_ENTRY -}; - -#define THREAD_MAGIC 'thrd' - -typedef struct thread { - int magic; - struct list_node thread_list_node; - - /* active bits */ - struct list_node queue_node; - int priority; - enum thread_state state; - int saved_critical_section_count; - int remaining_quantum; - - /* if blocked, a pointer to the wait queue */ - struct wait_queue *blocking_wait_queue; - status_t wait_queue_block_ret; - - /* architecture stuff */ - struct arch_thread arch; - - /* stack stuff */ - void *stack; - size_t stack_size; - - /* entry point */ - thread_start_routine entry; - void *arg; - - /* return code */ - int retcode; - - /* thread local storage */ - uint32_t tls[MAX_TLS_ENTRY]; - - char name[32]; -} thread_t; - -/* thread priority */ -#define NUM_PRIORITIES 32 -#define LOWEST_PRIORITY 0 -#define HIGHEST_PRIORITY (NUM_PRIORITIES - 1) -#define DPC_PRIORITY (NUM_PRIORITIES - 2) -#define IDLE_PRIORITY LOWEST_PRIORITY -#define LOW_PRIORITY (NUM_PRIORITIES / 4) -#define DEFAULT_PRIORITY (NUM_PRIORITIES / 2) -#define HIGH_PRIORITY ((NUM_PRIORITIES / 4) * 3) - -/* stack size */ -#define DEFAULT_STACK_SIZE 8192 - -/* functions */ -void thread_init_early(void); -void thread_init(void); -void thread_become_idle(void) __NO_RETURN; -void thread_set_name(const char *name); -void thread_set_priority(int priority); -thread_t *thread_create(const char *name, thread_start_routine entry, void *arg, int priority, size_t stack_size); -status_t thread_resume(thread_t *); -void thread_exit(int retcode) __NO_RETURN; -void thread_sleep(time_t delay); - -void dump_thread(thread_t *t); -void dump_all_threads(void); - -/* scheduler routines */ -void thread_yield(void); /* give up the cpu voluntarily */ -void thread_preempt(void); /* get preempted (inserted into head of run queue) */ -void thread_block(void); /* block on something and reschedule */ - -/* called on every timer tick for the scheduler to do quantum expiration */ -enum handler_return thread_timer_tick(void); - -/* the current thread */ -extern thread_t *current_thread; - -/* the idle thread */ -extern thread_t *idle_thread; - -/* critical sections */ -extern int critical_section_count; - -static inline __ALWAYS_INLINE void enter_critical_section(void) -{ - critical_section_count++; - if (critical_section_count == 1) - arch_disable_ints(); -} - -static inline __ALWAYS_INLINE void exit_critical_section(void) -{ - critical_section_count--; - if (critical_section_count == 0) - arch_enable_ints(); -} - -static inline __ALWAYS_INLINE bool in_critical_section(void) -{ - return critical_section_count > 0; -} - -/* only used by interrupt glue */ -static inline void inc_critical_section(void) { critical_section_count++; } -static inline void dec_critical_section(void) { critical_section_count--; } - -/* thread local storage */ -static inline __ALWAYS_INLINE uint32_t tls_get(uint entry) -{ - return current_thread->tls[entry]; -} - -static inline __ALWAYS_INLINE uint32_t tls_set(uint entry, uint32_t val) -{ - uint32_t oldval = current_thread->tls[entry]; - current_thread->tls[entry] = val; - return oldval; -} - -/* wait queue stuff */ -#define WAIT_QUEUE_MAGIC 'wait' - -typedef struct wait_queue { - int magic; - struct list_node list; - int count; -} wait_queue_t; - -/* wait queue primitive */ -/* NOTE: must be inside critical section when using these */ -void wait_queue_init(wait_queue_t *); - -/* - * release all the threads on this wait queue with a return code of ERR_OBJECT_DESTROYED. - * the caller must assure that no other threads are operating on the wait queue during or - * after the call. - */ -void wait_queue_destroy(wait_queue_t *, bool reschedule); - -/* - * block on a wait queue. - * return status is whatever the caller of wait_queue_wake_*() specifies. - * a timeout other than INFINITE_TIME will set abort after the specified time - * and return ERR_TIMED_OUT. a timeout of 0 will immediately return. - */ -status_t wait_queue_block(wait_queue_t *, time_t timeout); - -/* - * release one or more threads from the wait queue. - * reschedule = should the system reschedule if any is released. - * wait_queue_error = what wait_queue_block() should return for the blocking thread. - */ -int wait_queue_wake_one(wait_queue_t *, bool reschedule, status_t wait_queue_error); -int wait_queue_wake_all(wait_queue_t *, bool reschedule, status_t wait_queue_error); - -/* - * remove the thread from whatever wait queue it's in. - * return an error if the thread is not currently blocked (or is the current thread) - */ -status_t thread_unblock_from_wait_queue(thread_t *t, bool reschedule, status_t wait_queue_error); - -/* thread level statistics */ -#define THREAD_STATS 0 -#if THREAD_STATS -struct thread_stats { - bigtime_t idle_time; - bigtime_t last_idle_timestamp; - int reschedules; - int context_switches; - int preempts; - int yields; - int interrupts; /* platform code increment this */ - int timer_ints; /* timer code increment this */ - int timers; /* timer code increment this */ -}; - -extern struct thread_stats thread_stats; - -#endif - -#endif - diff --git a/lk/include/kernel/timer.h b/lk/include/kernel/timer.h deleted file mode 100644 index 98332fd..0000000 --- a/lk/include/kernel/timer.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __KERNEL_TIMER_H -#define __KERNEL_TIMER_H - -#include -#include - -void timer_init(void); - -struct timer; -typedef enum handler_return (*timer_callback)(struct timer *, time_t now, void *arg); - -#define TIMER_MAGIC 'timr' - -typedef struct timer { - int magic; - struct list_node node; - - time_t scheduled_time; - time_t periodic_time; - - timer_callback callback; - void *arg; -} timer_t; - -/* Rules for Timers: - * - Timer callbacks occur from interrupt context - * - Timers may be programmed or canceled from interrupt or thread context - * - Timers may be canceled or reprogrammed from within their callback - * - Timers currently are dispatched from a 10ms periodic tick -*/ -void timer_initialize(timer_t *); -void timer_set_oneshot(timer_t *, time_t delay, timer_callback, void *arg); -void timer_set_periodic(timer_t *, time_t period, timer_callback, void *arg); -void timer_cancel(timer_t *); - -#endif - diff --git a/lk/include/lib/console.h b/lk/include/lib/console.h deleted file mode 100644 index 6641542..0000000 --- a/lk/include/lib/console.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __LIB_CONSOLE_H -#define __LIB_CONSOLE_H - -#include -#include - -/* command args */ -typedef struct { - const char *str; - unsigned int u; - int i; -} cmd_args; - -typedef int (*console_cmd)(int argc, const cmd_args *argv); - -/* a block of commands to register */ -typedef struct { - const char *cmd_str; - const char *help_str; - const console_cmd cmd_callback; -} cmd; - -typedef struct _cmd_block { - struct _cmd_block *next; - size_t count; - const cmd *list; -} cmd_block; - -/* register a static block of commands at init time */ -#define STATIC_COMMAND_START static const cmd _cmd_list[] = { -#define STATIC_COMMAND_END(name) }; const cmd_block _cmd_block_##name __SECTION(".commands")= { NULL, sizeof(_cmd_list) / sizeof(_cmd_list[0]), _cmd_list } - -/* external api */ -int console_init(void); -void console_start(void); -void console_register_commands(cmd_block *block); -int console_run_command(const char *string); - -#endif - diff --git a/lk/include/lib/heap.h b/lk/include/lib/heap.h deleted file mode 100644 index 54ea73b..0000000 --- a/lk/include/lib/heap.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __LIB_HEAP_H -#define __LIB_HEAP_H - -#include - -void *heap_alloc(size_t, unsigned int alignment); -void heap_free(void *); - -void heap_init(void); - - - -#endif diff --git a/lk/include/lib/ptable.h b/lk/include/lib/ptable.h deleted file mode 100644 index 07fbf80..0000000 --- a/lk/include/lib/ptable.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -#ifndef __LIB_PTABLE_H -#define __LIB_PTABLE_H - -/* flash partitions are defined in terms of blocks - * (flash erase units) - */ -#define MAX_PTENTRY_NAME 16 -#define MAX_PTABLE_PARTS 32 - -#define TYPE_MODEM_PARTITION 1 -#define TYPE_APPS_PARTITION 0 -#define PERM_NON_WRITEABLE 0 -#define PERM_WRITEABLE 1 -struct ptentry -{ - char name[MAX_PTENTRY_NAME]; - unsigned start; - unsigned length; - unsigned flags; - char type; - char perm; -}; - -struct ptable -{ - struct ptentry parts[MAX_PTABLE_PARTS]; - int count; -}; - -/* tools to populate and query the partition table */ -void ptable_init(struct ptable *ptable); -void ptable_add(struct ptable *ptable, char *name, unsigned start, - unsigned length, unsigned flags, char type, char perm); -struct ptentry *ptable_find(struct ptable *ptable, const char *name); -struct ptentry *ptable_get(struct ptable *ptable, int n); -int ptable_size(struct ptable *ptable); -void ptable_dump(struct ptable *ptable); - -#endif /* __LIB_PTABLE_H */ diff --git a/lk/include/limits.h b/lk/include/limits.h deleted file mode 100644 index ec83068..0000000 --- a/lk/include/limits.h +++ /dev/null @@ -1,121 +0,0 @@ -/* This administrivia gets added to the beginning of limits.h - if the system has its own version of limits.h. */ - -/* We use _GCC_LIMITS_H_ because we want this not to match - any macros that the system's limits.h uses for its own purposes. */ -#ifndef _GCC_LIMITS_H_ /* Terminated in limity.h. */ -#define _GCC_LIMITS_H_ - -#ifndef _LIMITS_H___ -#define _LIMITS_H___ - -/* Number of bits in a `char'. */ -#undef CHAR_BIT -#define CHAR_BIT __CHAR_BIT__ - -/* Maximum length of a multibyte character. */ -#ifndef MB_LEN_MAX -#define MB_LEN_MAX 1 -#endif - -/* Minimum and maximum values a `signed char' can hold. */ -#undef SCHAR_MIN -#define SCHAR_MIN (-SCHAR_MAX - 1) -#undef SCHAR_MAX -#define SCHAR_MAX __SCHAR_MAX__ - -/* Maximum value an `unsigned char' can hold. (Minimum is 0). */ -#undef UCHAR_MAX -#if __SCHAR_MAX__ == __INT_MAX__ -# define UCHAR_MAX (SCHAR_MAX * 2U + 1U) -#else -# define UCHAR_MAX (SCHAR_MAX * 2 + 1) -#endif - -/* Minimum and maximum values a `char' can hold. */ -#ifdef __CHAR_UNSIGNED__ -# undef CHAR_MIN -# if __SCHAR_MAX__ == __INT_MAX__ -# define CHAR_MIN 0U -# else -# define CHAR_MIN 0 -# endif -# undef CHAR_MAX -# define CHAR_MAX UCHAR_MAX -#else -# undef CHAR_MIN -# define CHAR_MIN SCHAR_MIN -# undef CHAR_MAX -# define CHAR_MAX SCHAR_MAX -#endif - -/* Minimum and maximum values a `signed short int' can hold. */ -#undef SHRT_MIN -#define SHRT_MIN (-SHRT_MAX - 1) -#undef SHRT_MAX -#define SHRT_MAX __SHRT_MAX__ - -/* Maximum value an `unsigned short int' can hold. (Minimum is 0). */ -#undef USHRT_MAX -#if __SHRT_MAX__ == __INT_MAX__ -# define USHRT_MAX (SHRT_MAX * 2U + 1U) -#else -# define USHRT_MAX (SHRT_MAX * 2 + 1) -#endif - -/* Minimum and maximum values a `signed int' can hold. */ -#undef INT_MIN -#define INT_MIN (-INT_MAX - 1) -#undef INT_MAX -#define INT_MAX __INT_MAX__ - -/* Maximum value an `unsigned int' can hold. (Minimum is 0). */ -#undef UINT_MAX -#define UINT_MAX (INT_MAX * 2U + 1U) - -/* Minimum and maximum values a `signed long int' can hold. - (Same as `int'). */ -#undef LONG_MIN -#define LONG_MIN (-LONG_MAX - 1L) -#undef LONG_MAX -#define LONG_MAX __LONG_MAX__ - -/* Maximum value an `unsigned long int' can hold. (Minimum is 0). */ -#undef ULONG_MAX -#define ULONG_MAX (LONG_MAX * 2UL + 1UL) - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -/* Minimum and maximum values a `signed long long int' can hold. */ -# undef LLONG_MIN -# define LLONG_MIN (-LLONG_MAX - 1LL) -# undef LLONG_MAX -# define LLONG_MAX __LONG_LONG_MAX__ - -/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */ -# undef ULLONG_MAX -# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) -#endif - -#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__) -/* Minimum and maximum values a `signed long long int' can hold. */ -# undef LONG_LONG_MIN -# define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL) -# undef LONG_LONG_MAX -# define LONG_LONG_MAX __LONG_LONG_MAX__ - -/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */ -# undef ULONG_LONG_MAX -# define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL) -#endif - -#endif /* _LIMITS_H___ */ -/* This administrivia gets added to the end of limits.h - if the system has its own version of limits.h. */ - -#else /* not _GCC_LIMITS_H_ */ - -#ifdef _GCC_NEXT_LIMITS_H -#include_next /* recurse down to the real one */ -#endif - -#endif /* not _GCC_LIMITS_H_ */ diff --git a/lk/include/list.h b/lk/include/list.h deleted file mode 100644 index 96cd0d4..0000000 --- a/lk/include/list.h +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __LIST_H -#define __LIST_H - -#include - -#define containerof(ptr, type, member) \ - ((type *)((addr_t)(ptr) - offsetof(type, member))) - -struct list_node { - struct list_node *prev; - struct list_node *next; -}; - -#define LIST_INITIAL_VALUE(list) { &(list), &(list) } - -static inline void list_initialize(struct list_node *list) -{ - list->prev = list->next = list; -} - -static inline void list_clear_node(struct list_node *item) -{ - item->prev = item->next = 0; -} - -static inline bool list_in_list(struct list_node *item) -{ - if (item->prev == 0 && item->next == 0) - return false; - else - return true; -} - -static inline void list_add_head(struct list_node *list, struct list_node *item) -{ - item->next = list->next; - item->prev = list; - list->next->prev = item; - list->next = item; -} - -#define list_add_after(entry, new_entry) list_add_head(entry, new_entry) - -static inline void list_add_tail(struct list_node *list, struct list_node *item) -{ - item->prev = list->prev; - item->next = list; - list->prev->next = item; - list->prev = item; -} - -#define list_add_before(entry, new_entry) list_add_tail(entry, new_entry) - -static inline void list_delete(struct list_node *item) -{ - item->next->prev = item->prev; - item->prev->next = item->next; - item->prev = item->next = 0; -} - -static inline struct list_node* list_remove_head(struct list_node *list) -{ - if(list->next != list) { - struct list_node *item = list->next; - list_delete(item); - return item; - } else { - return NULL; - } -} - -#define list_remove_head_type(list, type, element) ({\ - struct list_node *__nod = list_remove_head(list);\ - type *__t;\ - if(__nod)\ - __t = containerof(__nod, type, element);\ - else\ - __t = (type *)0;\ - __t;\ -}) - -static inline struct list_node* list_remove_tail(struct list_node *list) -{ - if(list->prev != list) { - struct list_node *item = list->prev; - list_delete(item); - return item; - } else { - return NULL; - } -} - -#define list_remove_tail_type(list, type, element) ({\ - struct list_node *__nod = list_remove_tail(list);\ - type *__t;\ - if(__nod)\ - __t = containerof(__nod, type, element);\ - else\ - __t = (type *)0;\ - __t;\ -}) - -static inline struct list_node* list_peek_head(struct list_node *list) -{ - if(list->next != list) { - return list->next; - } else { - return NULL; - } -} - -#define list_peek_head_type(list, type, element) ({\ - struct list_node *__nod = list_peek_head(list);\ - type *__t;\ - if(__nod)\ - __t = containerof(__nod, type, element);\ - else\ - __t = (type *)0;\ - __t;\ -}) - -static inline struct list_node* list_peek_tail(struct list_node *list) -{ - if(list->prev != list) { - return list->prev; - } else { - return NULL; - } -} - -#define list_peek_tail_type(list, type, element) ({\ - struct list_node *__nod = list_peek_tail(list);\ - type *__t;\ - if(__nod)\ - __t = containerof(__nod, type, element);\ - else\ - __t = (type *)0;\ - __t;\ -}) - -static inline struct list_node* list_prev(struct list_node *list, struct list_node *item) -{ - if(item->prev != list) - return item->prev; - else - return NULL; -} - -#define list_prev_type(list, item, type, element) ({\ - struct list_node *__nod = list_prev(list, item);\ - type *__t;\ - if(__nod)\ - __t = containerof(__nod, type, element);\ - else\ - __t = (type *)0;\ - __t;\ -}) - -static inline struct list_node* list_prev_wrap(struct list_node *list, struct list_node *item) -{ - if(item->prev != list) - return item->prev; - else if(item->prev->prev != list) - return item->prev->prev; - else - return NULL; -} - -#define list_prev_wrap_type(list, item, type, element) ({\ - struct list_node *__nod = list_prev_wrap(list, item);\ - type *__t;\ - if(__nod)\ - __t = containerof(__nod, type, element);\ - else\ - __t = (type *)0;\ - __t;\ -}) - -static inline struct list_node* list_next(struct list_node *list, struct list_node *item) -{ - if(item->next != list) - return item->next; - else - return NULL; -} - -#define list_next_type(list, item, type, element) ({\ - struct list_node *__nod = list_next(list, item);\ - type *__t;\ - if(__nod)\ - __t = containerof(__nod, type, element);\ - else\ - __t = (type *)0;\ - __t;\ -}) - -static inline struct list_node* list_next_wrap(struct list_node *list, struct list_node *item) -{ - if(item->next != list) - return item->next; - else if(item->next->next != list) - return item->next->next; - else - return NULL; -} - -#define list_next_wrap_type(list, item, type, element) ({\ - struct list_node *__nod = list_next_wrap(list, item);\ - type *__t;\ - if(__nod)\ - __t = containerof(__nod, type, element);\ - else\ - __t = (type *)0;\ - __t;\ -}) - -// iterates over the list, node should be struct list_node* -#define list_for_every(list, node) \ - for(node = (list)->next; node != (list); node = node->next) - -// iterates over the list in a safe way for deletion of current node -// node and temp_node should be struct list_node* -#define list_for_every_safe(list, node, temp_node) \ - for(node = (list)->next, temp_node = (node)->next;\ - node != (list);\ - node = temp_node, temp_node = (node)->next) - -// iterates over the list, entry should be the container structure type * -#define list_for_every_entry(list, entry, type, member) \ - for((entry) = containerof((list)->next, type, member);\ - &(entry)->member != (list);\ - (entry) = containerof((entry)->member.next, type, member)) - -// iterates over the list in a safe way for deletion of current node -// entry and temp_entry should be the container structure type * -#define list_for_every_entry_safe(list, entry, temp_entry, type, member) \ - for(entry = containerof((list)->next, type, member),\ - temp_entry = containerof((entry)->member.next, type, member);\ - &(entry)->member != (list);\ - entry = temp_entry, temp_entry = containerof((temp_entry)->member.next, type, member)) - -static inline bool list_is_empty(struct list_node *list) -{ - return (list->next == list) ? true : false; -} - -#endif diff --git a/lk/include/malloc.h b/lk/include/malloc.h deleted file mode 100644 index d48f6d2..0000000 --- a/lk/include/malloc.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __MALLOC_H -#define __MALLOC_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -void *malloc(size_t size) __MALLOC; -void *memalign(size_t boundary, size_t size) __MALLOC; -void *calloc(size_t count, size_t size) __MALLOC; -void free(void *ptr); - -#if defined(__cplusplus) -} -#endif - -#endif - diff --git a/lk/include/new.h b/lk/include/new.h deleted file mode 100644 index d150c18..0000000 --- a/lk/include/new.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __NEW_H -#define __NEW_H - -#include - -void *operator new(size_t); -void *operator new(size_t, void *ptr); -void *operator new[](size_t); -void *operator new[](size_t, void *ptr); -void operator delete(void *p); -void operator delete[](void *p); - -#endif diff --git a/lk/include/platform.h b/lk/include/platform.h deleted file mode 100644 index 5f7e303..0000000 --- a/lk/include/platform.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __PLATFORM_H -#define __PLATFORM_H - -time_t current_time(void); -bigtime_t current_time_hires(void); - -/* super early platform initialization, before almost everything */ -void platform_early_init(void); - -/* later init, after the kernel has come up */ -void platform_init(void); - -/* called by the arch init code to get the platform to set up any mmu mappings it may need */ -void platform_init_mmu_mappings(void); - -#endif diff --git a/lk/include/platform/debug.h b/lk/include/platform/debug.h deleted file mode 100644 index 4ab460a..0000000 --- a/lk/include/platform/debug.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __PLATFORM_DEBUG_H -#define __PLATFORM_DEBUG_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -void debug_dump_regs(void); -uint32_t debug_cycle_count(void); - -void debug_dump_memory_bytes(void *mem, int len); -void debug_dump_memory_halfwords(void *mem, int len); -void debug_dump_memory_words(void *mem, int len); - -void debug_set_trace_level(int trace_type, int level); - -void platform_halt(void) __NO_RETURN; - -#if defined(__cplusplus) -} -#endif - - -#endif - diff --git a/lk/include/platform/interrupts.h b/lk/include/platform/interrupts.h deleted file mode 100644 index 7ee25bc..0000000 --- a/lk/include/platform/interrupts.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __PLATFORM_INTERRUPTS_H -#define __PLATFORM_INTERRUPTS_H - -#include - -status_t mask_interrupt(unsigned int vector); -status_t unmask_interrupt(unsigned int vector); - -typedef enum handler_return (*int_handler)(void *arg); - -void register_int_handler(unsigned int vector, int_handler handler, void *arg); - -#endif diff --git a/lk/include/platform/timer.h b/lk/include/platform/timer.h deleted file mode 100644 index 2a6e617..0000000 --- a/lk/include/platform/timer.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __PLATFORM_TIMER_H -#define __PLATFORM_TIMER_H - -typedef enum handler_return (*platform_timer_callback)(void *arg, time_t now); - -status_t platform_set_periodic_timer(platform_timer_callback callback, void *arg, time_t interval); - -#endif - diff --git a/lk/include/printf.h b/lk/include/printf.h deleted file mode 100644 index 2d09120..0000000 --- a/lk/include/printf.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __LIB_PRINTF_H -#define __LIB_PRINTF_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -int printf(const char *fmt, ...); -int sprintf(char *str, const char *fmt, ...) __PRINTFLIKE(2, 3); -int snprintf(char *str, size_t len, const char *fmt, ...) __PRINTFLIKE(3, 4); -int vsprintf(char *str, const char *fmt, va_list ap); -int vsnprintf(char *str, size_t len, const char *fmt, va_list ap); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/lk/include/rand.h b/lk/include/rand.h deleted file mode 100644 index 907cf20..0000000 --- a/lk/include/rand.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __RAND_H -#define __RAND_H - -int rand(void); - -#endif - diff --git a/lk/include/reg.h b/lk/include/reg.h deleted file mode 100644 index b5dd528..0000000 --- a/lk/include/reg.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __REG_H -#define __REG_H - -#include - -/* low level macros for accessing memory mapped hardware registers */ -#define REG64(addr) ((volatile uint64_t *)(addr)) -#define REG32(addr) ((volatile uint32_t *)(addr)) -#define REG16(addr) ((volatile uint16_t *)(addr)) -#define REG8(addr) ((volatile uint8_t *)(addr)) - -#define RMWREG64(addr, startbit, width, val) *REG64(addr) = (*REG64(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit)) -#define RMWREG32(addr, startbit, width, val) *REG32(addr) = (*REG32(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit)) -#define RMWREG16(addr, startbit, width, val) *REG16(addr) = (*REG16(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit)) -#define RMWREG8(addr, startbit, width, val) *REG8(addr) = (*REG8(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit)) - -#define writel(v, a) (*REG32(a) = (v)) -#define readl(a) (*REG32(a)) - -#define writeb(v, a) (*REG8(a) = (v)) -#define readb(a) (*REG8(a)) -#endif diff --git a/lk/include/stdint.h b/lk/include/stdint.h deleted file mode 100644 index 0ea9e8a..0000000 --- a/lk/include/stdint.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __STDINT_H -#define __STDINT_H - -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -typedef unsigned long long uint64_t; -typedef signed char int8_t; -typedef short int16_t; -typedef int int32_t; -typedef long long int64_t; - -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -typedef int64_t int_least64_t; -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -typedef uint64_t uint_least64_t; - -typedef int8_t int_fast8_t; -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef int64_t int_fast64_t; -typedef uint8_t uint_fast8_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; -typedef uint64_t uint_fast64_t; - -typedef long intptr_t; -typedef unsigned long uintptr_t; - -typedef long long intmax_t; -typedef unsigned long long uintmax_t; - -#endif - diff --git a/lk/include/stdio.h b/lk/include/stdio.h deleted file mode 100644 index ebabfca..0000000 --- a/lk/include/stdio.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __STDIO_H -#define __STDIO_H - -#include -#include - -void putc(char c); -int puts(const char *str); -int getc(char *c); // XXX not really getc - -#endif - diff --git a/lk/include/stdlib.h b/lk/include/stdlib.h deleted file mode 100644 index fb1e1de..0000000 --- a/lk/include/stdlib.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __STDLIB_H -#define __STDLIB_H - -#include -#include -#include -#include -#include -#include - -int atoi(const char *num); -unsigned int atoui(const char *num); -long atol(const char *num); -unsigned long atoul(const char *num); - -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) - -#define ROUNDUP(a, b) (((a) + ((b)-1)) & ~((b)-1)) -#define ROUNDDOWN(a, b) ((a) & ~((b)-1)) - -/* allocate a buffer on the stack aligned and padded to the cpu's cache line size */ -#define STACKBUF_DMA_ALIGN(var, size) \ - uint8_t __##var[(size) + CACHE_LINE]; uint8_t *var = (uint8_t *)(ROUNDUP((addr_t)__##var, CACHE_LINE)) - -#endif - diff --git a/lk/include/string.h b/lk/include/string.h deleted file mode 100644 index 3dccd92..0000000 --- a/lk/include/string.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __LIB_STRING_H -#define __LIB_STRING_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void *memchr (void const *, int, size_t) __PURE; -int memcmp (void const *, const void *, size_t) __PURE; -void *memcpy (void *, void const *, size_t); -void *memmove(void *, void const *, size_t); -void *memset (void *, int, size_t); - -char *strcat(char *, char const *); -char *strchr(char const *, int) __PURE; -int strcmp(char const *, char const *) __PURE; -char *strcpy(char *, char const *); -char const *strerror(int) __CONST; -size_t strlen(char const *) __PURE; -char *strncat(char *, char const *, size_t); -int strncmp(char const *, char const *, size_t) __PURE; -char *strncpy(char *, char const *, size_t); -char *strpbrk(char const *, char const *) __PURE; -char *strrchr(char const *, int) __PURE; -size_t strspn(char const *, char const *) __PURE; -size_t strcspn(const char *s, const char *) __PURE; -char *strstr(char const *, char const *) __PURE; -char *strtok(char *, char const *); -int strcoll(const char *s1, const char *s2) __PURE; -size_t strxfrm(char *dest, const char *src, size_t n) __PURE; -char *strdup(const char *str) __MALLOC; - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* non standard */ -void *bcopy(void const *, void *, size_t); -void bzero(void *, size_t); -size_t strlcat(char *, char const *, size_t); -size_t strlcpy(char *, char const *, size_t); -int strncasecmp(char const *, char const *, size_t) __PURE; -int strnicmp(char const *, char const *, size_t) __PURE; -size_t strnlen(char const *s, size_t count) __PURE; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/lk/include/sys/types.h b/lk/include/sys/types.h deleted file mode 100644 index 510ab05..0000000 --- a/lk/include/sys/types.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __SYS_TYPES_H -#define __SYS_TYPES_H - -#ifndef __cplusplus -#define false 0 -#define true 1 -typedef int bool; -#endif - -#include -#include -#include - -typedef unsigned char uchar; -typedef unsigned short ushort; -typedef unsigned int uint; -typedef unsigned long ulong; -typedef unsigned char u_char; -typedef unsigned short u_short; -typedef unsigned int u_int; -typedef unsigned long u_long; - -#ifndef _SIZE_T_DEFINED_ -typedef unsigned long size_t; -#endif -typedef long ssize_t; -typedef long long off_t; - -typedef int status_t; - -typedef uintptr_t addr_t; -typedef uintptr_t vaddr_t; -typedef uintptr_t paddr_t; - -typedef int kobj_id; - -typedef unsigned long time_t; -typedef unsigned long long bigtime_t; -#define INFINITE_TIME ULONG_MAX - -enum handler_return { - INT_NO_RESCHEDULE = 0, - INT_RESCHEDULE, -}; - -#endif diff --git a/lk/include/target.h b/lk/include/target.h deleted file mode 100644 index ace8834..0000000 --- a/lk/include/target.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef __TARGET_H -#define __TARGET_H - -/* super early platform initialization, before almost everything */ -void target_early_init(void); - -/* later init, after the kernel has come up */ -void target_init(void); - -/* get memory address for fastboot image loading */ -void *target_get_scratch_address(void); - -/* if target is using eMMC bootup */ -int target_is_emmc_boot(void); - -#endif diff --git a/lk/include/version.h b/lk/include/version.h deleted file mode 100644 index 1722713..0000000 --- a/lk/include/version.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __VERSION_H -#define __VERSION_H - -static const char *cLK_version = "1.4.0.1"; - -#endif - diff --git a/lk/kernel/debug.c b/lk/kernel/debug.c deleted file mode 100644 index c3d7220..0000000 --- a/lk/kernel/debug.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#include -#include -#include -#include - -#if defined(WITH_LIB_CONSOLE) -#include - -static int cmd_threads(int argc, const cmd_args *argv); -static int cmd_threadstats(int argc, const cmd_args *argv); -static int cmd_threadload(int argc, const cmd_args *argv); - -STATIC_COMMAND_START -#if DEBUGLEVEL > 1 - { "threads", "list kernel threads", &cmd_threads }, -#endif -#if THREAD_STATS - { "threadstats", "thread level statistics", &cmd_threadstats }, - { "threadload", "toggle thread load display", &cmd_threadload }, -#endif -STATIC_COMMAND_END(kernel); - -#if DEBUGLEVEL > 1 -static int cmd_threads(int argc, const cmd_args *argv) -{ - printf("thread list:\n"); - dump_all_threads(); - - return 0; -} -#endif - -#if THREAD_STATS -static int cmd_threadstats(int argc, const cmd_args *argv) -{ - printf("thread stats:\n"); - printf("\ttotal idle time: %lld\n", thread_stats.idle_time); - printf("\ttotal busy time: %lld\n", current_time_hires() - thread_stats.idle_time); - printf("\treschedules: %d\n", thread_stats.reschedules); - printf("\tcontext_switches: %d\n", thread_stats.context_switches); - printf("\tpreempts: %d\n", thread_stats.preempts); - printf("\tyields: %d\n", thread_stats.yields); - printf("\tinterrupts: %d\n", thread_stats.interrupts); - printf("\ttimer interrupts: %d\n", thread_stats.timer_ints); - printf("\ttimers: %d\n", thread_stats.timers); - - return 0; -} - -static enum handler_return threadload(struct timer *t, time_t now, void *arg) -{ - static struct thread_stats old_stats; - static bigtime_t last_idle_time; - - timer_set_oneshot(t, 1000, &threadload, NULL); - - bigtime_t idle_time = thread_stats.idle_time; - if (current_thread == idle_thread) { - idle_time += current_time_hires() - thread_stats.last_idle_timestamp; - } - bigtime_t busy_time = 1000000ULL - (idle_time - last_idle_time); - - uint busypercent = (busy_time * 10000) / (1000000); - -// printf("idle_time %lld, busytime %lld\n", idle_time - last_idle_time, busy_time); - printf("LOAD: %d.%02d%%, cs %d, ints %d, timer ints %d, timers %d\n", busypercent / 100, busypercent % 100, - thread_stats.context_switches - old_stats.context_switches, - thread_stats.interrupts - old_stats.interrupts, - thread_stats.timer_ints - old_stats.timer_ints, - thread_stats.timers - old_stats.timers); - - old_stats = thread_stats; - last_idle_time = idle_time; - - return INT_NO_RESCHEDULE; -} - -static int cmd_threadload(int argc, const cmd_args *argv) -{ - static bool showthreadload = false; - static timer_t tltimer; - - enter_critical_section(); - - if (showthreadload == false) { - // start the display - timer_initialize(&tltimer); - timer_set_oneshot(&tltimer, 1000, &threadload, NULL); - showthreadload = true; - } else { - timer_cancel(&tltimer); - showthreadload = false; - } - - exit_critical_section(); - - return 0; -} - -#endif - -#endif - diff --git a/lk/kernel/dpc.c b/lk/kernel/dpc.c deleted file mode 100644 index 184ac31..0000000 --- a/lk/kernel/dpc.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include -#include - -struct dpc { - struct list_node node; - - dpc_callback cb; - void *arg; -}; - -static struct list_node dpc_list = LIST_INITIAL_VALUE(dpc_list); -static event_t dpc_event; - -static int dpc_thread_routine(void *arg); - -void dpc_init(void) -{ - event_init(&dpc_event, false, 0); - - thread_resume(thread_create("dpc", &dpc_thread_routine, NULL, DPC_PRIORITY, DEFAULT_STACK_SIZE)); -} - -status_t dpc_queue(dpc_callback cb, void *arg, uint flags) -{ - struct dpc *dpc; - - dpc = malloc(sizeof(struct dpc)); - - dpc->cb = cb; - dpc->arg = arg; - enter_critical_section(); - list_add_tail(&dpc_list, &dpc->node); - event_signal(&dpc_event, (flags & DPC_FLAG_NORESCHED) ? false : true); - exit_critical_section(); - - return NO_ERROR; -} - -static int dpc_thread_routine(void *arg) -{ - for (;;) { - event_wait(&dpc_event); - - enter_critical_section(); - struct dpc *dpc = list_remove_head_type(&dpc_list, struct dpc, node); - if (!dpc) - event_unsignal(&dpc_event); - exit_critical_section(); - - if (dpc) { -// dprintf("dpc calling %p, arg %p\n", dpc->cb, dpc->arg); - dpc->cb(dpc->arg); - - free(dpc); - } - } - - return 0; -} - - diff --git a/lk/kernel/event.c b/lk/kernel/event.c deleted file mode 100644 index 09e485a..0000000 --- a/lk/kernel/event.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include - -#if DEBUGLEVEL > 1 -#define EVENT_CHECK 1 -#endif - -void event_init(event_t *e, bool initial, uint flags) -{ -#if EVENT_CHECK -// ASSERT(e->magic != EVENT_MAGIC); -#endif - - e->magic = EVENT_MAGIC; - e->signalled = initial; - e->flags = flags; - wait_queue_init(&e->wait); -} - -void event_destroy(event_t *e) -{ - enter_critical_section(); - -#if EVENT_CHECK - ASSERT(e->magic == EVENT_MAGIC); -#endif - - e->magic = 0; - e->signalled = false; - e->flags = 0; - wait_queue_destroy(&e->wait, true); - - exit_critical_section(); -} - -status_t event_wait_timeout(event_t *e, time_t timeout) -{ - status_t ret = NO_ERROR; - - enter_critical_section(); - -#if EVENT_CHECK - ASSERT(e->magic == EVENT_MAGIC); -#endif - - if (e->signalled) { - /* signalled, we're going to fall through */ - if (e->flags & EVENT_FLAG_AUTOUNSIGNAL) { - /* autounsignal flag lets one thread fall through before unsignalling */ - e->signalled = false; - } - } else { - /* unsignalled, block here */ - ret = wait_queue_block(&e->wait, timeout); - if (ret < 0) - goto err; - } - -err: - exit_critical_section(); - - return ret; -} - -status_t event_wait(event_t *e) -{ - return event_wait_timeout(e, INFINITE_TIME); -} - -status_t event_signal(event_t *e, bool reschedule) -{ - enter_critical_section(); - -#if EVENT_CHECK - ASSERT(e->magic == EVENT_MAGIC); -#endif - - if (!e->signalled) { - if (e->flags & EVENT_FLAG_AUTOUNSIGNAL) { - /* try to release one thread and leave unsignalled if successful */ - if (wait_queue_wake_one(&e->wait, reschedule, NO_ERROR) <= 0) { - /* - * if we didn't actually find a thread to wake up, go to - * signalled state and let the next call to event_wait - * unsignal the event. - */ - e->signalled = true; - } - } else { - /* release all threads and remain signalled */ - e->signalled = true; - wait_queue_wake_all(&e->wait, reschedule, NO_ERROR); - } - } - - exit_critical_section(); - - return NO_ERROR; -} - -status_t event_unsignal(event_t *e) -{ - enter_critical_section(); - -#if EVENT_CHECK - ASSERT(e->magic == EVENT_MAGIC); -#endif - - e->signalled = false; - - exit_critical_section(); - - return NO_ERROR; -} - diff --git a/lk/kernel/main.c b/lk/kernel/main.c deleted file mode 100644 index f48ea55..0000000 --- a/lk/kernel/main.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Copyright (c) 2009, Code Aurora Forum. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -extern void *__ctor_list; -extern void *__ctor_end; -extern int __bss_start; -extern int _end; - -static int bootstrap2(void *arg); - -#if (ENABLE_NANDWRITE) -void bootstrap_nandwrite(void); -#endif - -static void call_constructors(void) -{ - void **ctor; - - ctor = &__ctor_list; - while(ctor != &__ctor_end) { - void (*func)(void); - - func = (void (*)())*ctor; - - func(); - ctor++; - } -} - -/* called from crt0.S */ -void kmain(void) __NO_RETURN __EXTERNALLY_VISIBLE; -void kmain(void) -{ - // get us into some sort of thread context - thread_init_early(); - - // early arch stuff - arch_early_init(); - - // do any super early platform initialization - platform_early_init(); - - // do any super early target initialization - target_early_init(); - - dprintf(INFO, "welcome to lk\n\n"); - - // deal with any static constructors - dprintf(SPEW, "calling constructors\n"); - call_constructors(); - - // bring up the kernel heap - dprintf(SPEW, "initializing heap\n"); - heap_init(); - - // initialize the threading system - dprintf(SPEW, "initializing threads\n"); - thread_init(); - - // initialize the dpc system - dprintf(SPEW, "initializing dpc\n"); - dpc_init(); - - // initialize kernel timers - dprintf(SPEW, "initializing timers\n"); - timer_init(); - -#if (!ENABLE_NANDWRITE) - // create a thread to complete system initialization - dprintf(SPEW, "creating bootstrap completion thread\n"); - thread_resume(thread_create("bootstrap2", &bootstrap2, NULL, DEFAULT_PRIORITY, DEFAULT_STACK_SIZE)); - - // enable interrupts - exit_critical_section(); - - // become the idle thread - thread_become_idle(); -#else - bootstrap_nandwrite(); -#endif -} - -int main(void); - -static int bootstrap2(void *arg) -{ - dprintf(SPEW, "top of bootstrap2()\n"); - - arch_init(); - - // initialize the rest of the platform - dprintf(SPEW, "initializing platform\n"); - platform_init(); - - // initialize the target - dprintf(SPEW, "initializing target\n"); - target_init(); - - dprintf(SPEW, "calling apps_init()\n"); - apps_init(); - - return 0; -} - -#if (ENABLE_NANDWRITE) -void bootstrap_nandwrite(void) -{ - dprintf(SPEW, "top of bootstrap2()\n"); - - arch_init(); - - // initialize the rest of the platform - dprintf(SPEW, "initializing platform\n"); - platform_init(); - - // initialize the target - dprintf(SPEW, "initializing target\n"); - target_init(); - - dprintf(SPEW, "calling nandwrite_init()\n"); - nandwrite_init(); - - return 0; -} -#endif diff --git a/lk/kernel/mutex.c b/lk/kernel/mutex.c deleted file mode 100644 index 4998b6a..0000000 --- a/lk/kernel/mutex.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include - -#if DEBUGLEVEL > 1 -#define MUTEX_CHECK 1 -#endif - -void mutex_init(mutex_t *m) -{ -#if MUTEX_CHECK -// ASSERT(m->magic != MUTEX_MAGIC); -#endif - - m->magic = MUTEX_MAGIC; - m->count = 0; - m->holder = 0; - wait_queue_init(&m->wait); -} - -void mutex_destroy(mutex_t *m) -{ - enter_critical_section(); - -#if MUTEX_CHECK - ASSERT(m->magic == MUTEX_MAGIC); -#endif - - if (m->holder != 0 && current_thread != m->holder) - panic("mutex_destroy: thread %p (%s) tried to release mutex %p it doesn't own. owned by %p (%s)\n", - current_thread, current_thread->name, m, m->holder, m->holder ? m->holder->name : "none"); - - m->magic = 0; - m->count = 0; - wait_queue_destroy(&m->wait, true); - exit_critical_section(); -} - -status_t mutex_acquire(mutex_t *m) -{ - status_t ret = NO_ERROR; - - if (current_thread == m->holder) - panic("mutex_acquire: thread %p (%s) tried to acquire mutex %p it already owns.\n", - current_thread, current_thread->name, m); - - enter_critical_section(); - -#if MUTEX_CHECK - ASSERT(m->magic == MUTEX_MAGIC); -#endif - -// dprintf("mutex_acquire: m %p, count %d, curr %p\n", m, m->count, current_thread); - - m->count++; - if (unlikely(m->count > 1)) { - /* - * block on the wait queue. If it returns an error, it was likely destroyed - * out from underneath us, so make sure we dont scribble thread ownership - * on the mutex. - */ - ret = wait_queue_block(&m->wait, INFINITE_TIME); - if (ret < 0) - goto err; - } - m->holder = current_thread; - -err: - exit_critical_section(); - - return ret; -} - -status_t mutex_acquire_timeout(mutex_t *m, time_t timeout) -{ - status_t ret = NO_ERROR; - - if (current_thread == m->holder) - panic("mutex_acquire_timeout: thread %p (%s) tried to acquire mutex %p it already owns.\n", - current_thread, current_thread->name, m); - - if (timeout == INFINITE_TIME) - return mutex_acquire(m); - - enter_critical_section(); - -#if MUTEX_CHECK - ASSERT(m->magic == MUTEX_MAGIC); -#endif - -// dprintf("mutex_acquire_timeout: m %p, count %d, curr %p, timeout %d\n", m, m->count, current_thread, timeout); - - m->count++; - if (unlikely(m->count > 1)) { - ret = wait_queue_block(&m->wait, timeout); - if (ret < NO_ERROR) { - /* if the acquisition timed out, back out the acquire and exit */ - if (ret == ERR_TIMED_OUT) { - /* - * XXX race: the mutex may have been destroyed after the timeout, - * but before we got scheduled again which makes messing with the - * count variable dangerous. - */ - m->count--; - goto err; - } - /* if there was a general error, it may have been destroyed out from - * underneath us, so just exit (which is really an invalid state anyway) - */ - } - } - m->holder = current_thread; - -err: - exit_critical_section(); - - return ret; -} - -status_t mutex_release(mutex_t *m) -{ - if (current_thread != m->holder) - panic("mutex_release: thread %p (%s) tried to release mutex %p it doesn't own. owned by %p (%s)\n", - current_thread, current_thread->name, m, m->holder, m->holder ? m->holder->name : "none"); - - enter_critical_section(); - -#if MUTEX_CHECK - ASSERT(m->magic == MUTEX_MAGIC); -#endif - -// dprintf("mutex_release: m %p, count %d, holder %p, curr %p\n", m, m->count, m->holder, current_thread); - - m->holder = 0; - m->count--; - if (unlikely(m->count >= 1)) { - /* release a thread */ -// dprintf("releasing thread\n"); - wait_queue_wake_one(&m->wait, true, NO_ERROR); - } - - exit_critical_section(); - - return NO_ERROR; -} - diff --git a/lk/kernel/rules.mk b/lk/kernel/rules.mk deleted file mode 100644 index 45cf94d..0000000 --- a/lk/kernel/rules.mk +++ /dev/null @@ -1,16 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -MODULES += \ - lib/libc \ - lib/debug \ - lib/heap - -OBJS += \ - $(LOCAL_DIR)/debug.o \ - $(LOCAL_DIR)/dpc.o \ - $(LOCAL_DIR)/event.o \ - $(LOCAL_DIR)/main.o \ - $(LOCAL_DIR)/mutex.o \ - $(LOCAL_DIR)/thread.o \ - $(LOCAL_DIR)/timer.o - diff --git a/lk/kernel/thread.c b/lk/kernel/thread.c deleted file mode 100644 index eeccdd6..0000000 --- a/lk/kernel/thread.c +++ /dev/null @@ -1,666 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if DEBUGLEVEL > 1 -#define THREAD_CHECKS 1 -#endif - -#if THREAD_STATS -struct thread_stats thread_stats; -#endif - -/* global thread list */ -static struct list_node thread_list; - -/* the current thread */ -thread_t *current_thread; - -/* the global critical section count */ -int critical_section_count = 1; - -/* the run queue */ -static struct list_node run_queue[NUM_PRIORITIES]; -static uint32_t run_queue_bitmap; - -/* the bootstrap thread (statically allocated) */ -static thread_t bootstrap_thread; - -/* the idle thread */ -thread_t *idle_thread; - -/* local routines */ -static void thread_resched(void); -static void idle_thread_routine(void) __NO_RETURN; - -/* run queue manipulation */ -static void insert_in_run_queue_head(thread_t *t) -{ -#if THREAD_CHECKS - ASSERT(t->magic == THREAD_MAGIC); - ASSERT(t->state == THREAD_READY); - ASSERT(!list_in_list(&t->queue_node)); - ASSERT(in_critical_section()); -#endif - - list_add_head(&run_queue[t->priority], &t->queue_node); - run_queue_bitmap |= (1<priority); -} - -static void insert_in_run_queue_tail(thread_t *t) -{ -#if THREAD_CHECKS - ASSERT(t->magic == THREAD_MAGIC); - ASSERT(t->state == THREAD_READY); - ASSERT(!list_in_list(&t->queue_node)); - ASSERT(in_critical_section()); -#endif - - list_add_tail(&run_queue[t->priority], &t->queue_node); - run_queue_bitmap |= (1<priority); -} - -static void init_thread_struct(thread_t *t, const char *name) -{ - memset(t, 0, sizeof(thread_t)); - t->magic = THREAD_MAGIC; - strlcpy(t->name, name, sizeof(t->name)); -} - -thread_t *thread_create(const char *name, thread_start_routine entry, void *arg, int priority, size_t stack_size) -{ - thread_t *t; - - t = malloc(sizeof(thread_t)); - if (!t) - return NULL; - - init_thread_struct(t, name); - - t->entry = entry; - t->arg = arg; - t->priority = priority; - t->saved_critical_section_count = 1; /* we always start inside a critical section */ - t->state = THREAD_SUSPENDED; - t->blocking_wait_queue = NULL; - t->wait_queue_block_ret = NO_ERROR; - - /* create the stack */ - t->stack = malloc(stack_size); - if (!t->stack) { - free(t); - return NULL; - } - - t->stack_size = stack_size; - - /* inheirit thread local storage from the parent */ - int i; - for (i=0; i < MAX_TLS_ENTRY; i++) - t->tls[i] = current_thread->tls[i]; - - /* set up the initial stack frame */ - arch_thread_initialize(t); - - /* add it to the global thread list */ - enter_critical_section(); - list_add_head(&thread_list, &t->thread_list_node); - exit_critical_section(); - - return t; -} - -status_t thread_resume(thread_t *t) -{ -#if THREAD_CHECKS - ASSERT(t->magic == THREAD_MAGIC); - ASSERT(t->state != THREAD_DEATH); -#endif - - if (t->state == THREAD_READY || t->state == THREAD_RUNNING) - return ERR_NOT_SUSPENDED; - - enter_critical_section(); - t->state = THREAD_READY; - insert_in_run_queue_head(t); - thread_yield(); - exit_critical_section(); - - return NO_ERROR; -} - -static void thread_cleanup_dpc(void *thread) -{ - thread_t *t = (thread_t *)thread; - -// dprintf(SPEW, "thread_cleanup_dpc: thread %p (%s)\n", t, t->name); - -#if THREAD_CHECKS - ASSERT(t->state == THREAD_DEATH); - ASSERT(t->blocking_wait_queue == NULL); - ASSERT(!list_in_list(&t->queue_node)); -#endif - - /* remove it from the master thread list */ - enter_critical_section(); - list_delete(&t->thread_list_node); - exit_critical_section(); - - /* free its stack and the thread structure itself */ - if (t->stack) - free(t->stack); - - free(t); -} - -void thread_exit(int retcode) -{ -#if THREAD_CHECKS - ASSERT(current_thread->magic == THREAD_MAGIC); - ASSERT(current_thread->state == THREAD_RUNNING); -#endif - -// dprintf("thread_exit: current %p\n", current_thread); - - enter_critical_section(); - - /* enter the dead state */ - current_thread->state = THREAD_DEATH; - current_thread->retcode = retcode; - - /* schedule a dpc to clean ourselves up */ - dpc_queue(thread_cleanup_dpc, (void *)current_thread, DPC_FLAG_NORESCHED); - - /* reschedule */ - thread_resched(); - - panic("somehow fell through thread_exit()\n"); -} - -static void idle_thread_routine(void) -{ - for(;;) - arch_idle(); -} - -/* - * Internal reschedule routine. The current thread needs to already be in whatever - * state and queues it needs to be in. This routine simply picks the next thread and - * switches to it. - */ -void thread_resched(void) -{ - thread_t *oldthread; - thread_t *newthread; - -// dprintf("thread_resched: current %p: ", current_thread); -// dump_thread(current_thread); - -#if THREAD_CHECKS - ASSERT(in_critical_section()); -#endif - -#if THREAD_STATS - thread_stats.reschedules++; -#endif - - oldthread = current_thread; - - // at the moment, can't deal with more than 32 priority levels - ASSERT(NUM_PRIORITIES <= 32); - - // should at least find the idle thread -#if THREAD_CHECKS - ASSERT(run_queue_bitmap != 0); -#endif - - int next_queue = HIGHEST_PRIORITY - __builtin_clz(run_queue_bitmap) - (32 - NUM_PRIORITIES); - //dprintf(SPEW, "bitmap 0x%x, next %d\n", run_queue_bitmap, next_queue); - - newthread = list_remove_head_type(&run_queue[next_queue], thread_t, queue_node); - -#if THREAD_CHECKS - ASSERT(newthread); -#endif - - if (list_is_empty(&run_queue[next_queue])) - run_queue_bitmap &= ~(1<= LOWEST_PRIORITY; i--) { - newthread = list_remove_head_type(&run_queue[i], thread_t, queue_node); - if (newthread) - break; - } -#endif - -// dprintf("newthread: "); -// dump_thread(newthread); - - newthread->state = THREAD_RUNNING; - - if (newthread == oldthread) - return; - - /* set up quantum for the new thread if it was consumed */ - if (newthread->remaining_quantum <= 0) { - newthread->remaining_quantum = 5; // XXX make this smarter - } - -#if THREAD_STATS - thread_stats.context_switches++; - - if (oldthread == idle_thread) { - bigtime_t now = current_time_hires(); - thread_stats.idle_time += now - thread_stats.last_idle_timestamp; - } - if (newthread == idle_thread) { - thread_stats.last_idle_timestamp = current_time_hires(); - } -#endif - -#if THREAD_CHECKS - ASSERT(critical_section_count > 0); - ASSERT(newthread->saved_critical_section_count > 0); -#endif - - /* do the switch */ - oldthread->saved_critical_section_count = critical_section_count; - current_thread = newthread; - critical_section_count = newthread->saved_critical_section_count; - arch_context_switch(oldthread, newthread); -} - -void thread_yield(void) -{ -#if THREAD_CHECKS - ASSERT(current_thread->magic == THREAD_MAGIC); - ASSERT(current_thread->state == THREAD_RUNNING); -#endif - - enter_critical_section(); - -#if THREAD_STATS - thread_stats.yields++; -#endif - - /* we are yielding the cpu, so stick ourselves into the tail of the run queue and reschedule */ - current_thread->state = THREAD_READY; - current_thread->remaining_quantum = 0; - insert_in_run_queue_tail(current_thread); - thread_resched(); - - exit_critical_section(); -} - -void thread_preempt(void) -{ -#if THREAD_CHECKS - ASSERT(current_thread->magic == THREAD_MAGIC); - ASSERT(current_thread->state == THREAD_RUNNING); -#endif - - enter_critical_section(); - -#if THREAD_STATS - if (current_thread != idle_thread) - thread_stats.preempts++; /* only track when a meaningful preempt happens */ -#endif - - /* we are being preempted, so we get to go back into the front of the run queue if we have quantum left */ - current_thread->state = THREAD_READY; - if (current_thread->remaining_quantum > 0) - insert_in_run_queue_head(current_thread); - else - insert_in_run_queue_tail(current_thread); /* if we're out of quantum, go to the tail of the queue */ - thread_resched(); - - exit_critical_section(); -} - -void thread_block(void) -{ -#if THREAD_CHECKS - ASSERT(current_thread->magic == THREAD_MAGIC); - ASSERT(current_thread->state == THREAD_BLOCKED); -#endif - - enter_critical_section(); - - /* we are blocking on something. the blocking code should have already stuck us on a queue */ - thread_resched(); - - exit_critical_section(); -} - -enum handler_return thread_timer_tick(void) -{ - if (current_thread == idle_thread) - return INT_NO_RESCHEDULE; - - current_thread->remaining_quantum--; - if (current_thread->remaining_quantum <= 0) - return INT_RESCHEDULE; - else - return INT_NO_RESCHEDULE; -} - -/* timer callback to wake up a sleeping thread */ -static enum handler_return thread_sleep_handler(timer_t *timer, time_t now, void *arg) -{ - thread_t *t = (thread_t *)arg; - -#if THREAD_CHECKS - ASSERT(t->magic == THREAD_MAGIC); - ASSERT(t->state == THREAD_SLEEPING); -#endif - - t->state = THREAD_READY; - insert_in_run_queue_head(t); - - return INT_RESCHEDULE; -} - -void thread_sleep(time_t delay) -{ - timer_t timer; - -#if THREAD_CHECKS - ASSERT(current_thread->magic == THREAD_MAGIC); - ASSERT(current_thread->state == THREAD_RUNNING); -#endif - - timer_initialize(&timer); - - enter_critical_section(); - timer_set_oneshot(&timer, delay, thread_sleep_handler, (void *)current_thread); - current_thread->state = THREAD_SLEEPING; - thread_resched(); - exit_critical_section(); -} - -void thread_init_early(void) -{ - int i; - - /* initialize the run queues */ - for (i=0; i < NUM_PRIORITIES; i++) - list_initialize(&run_queue[i]); - - /* initialize the thread list */ - list_initialize(&thread_list); - - /* create a thread to cover the current running state */ - thread_t *t = &bootstrap_thread; - init_thread_struct(t, "bootstrap"); - - /* half construct this thread, since we're already running */ - t->priority = HIGHEST_PRIORITY; - t->state = THREAD_RUNNING; - t->saved_critical_section_count = 1; - list_add_head(&thread_list, &t->thread_list_node); - current_thread = t; -} - -void thread_init(void) -{ -} - -void thread_set_name(const char *name) -{ - strlcpy(current_thread->name, name, sizeof(current_thread->name)); -} - -void thread_set_priority(int priority) -{ - if (priority < LOWEST_PRIORITY) - priority = LOWEST_PRIORITY; - if (priority > HIGHEST_PRIORITY) - priority = HIGHEST_PRIORITY; - current_thread->priority = priority; -} - -void thread_become_idle(void) -{ - thread_set_name("idle"); - thread_set_priority(IDLE_PRIORITY); - idle_thread = current_thread; - idle_thread_routine(); -} - -void dump_thread(thread_t *t) -{ - dprintf(INFO, "dump_thread: t %p (%s)\n", t, t->name); - dprintf(INFO, "\tstate %d, priority %d, remaining quantum %d, critical section %d\n", t->state, t->priority, t->remaining_quantum, t->saved_critical_section_count); - dprintf(INFO, "\tstack %p, stack_size %zd\n", t->stack, t->stack_size); - dprintf(INFO, "\tentry %p, arg %p\n", t->entry, t->arg); - dprintf(INFO, "\twait queue %p, wait queue ret %d\n", t->blocking_wait_queue, t->wait_queue_block_ret); - dprintf(INFO, "\ttls:"); - int i; - for (i=0; i < MAX_TLS_ENTRY; i++) { - dprintf(INFO, " 0x%x", t->tls[i]); - } - dprintf(INFO, "\n"); -} - -void dump_all_threads(void) -{ - thread_t *t; - - enter_critical_section(); - list_for_every_entry(&thread_list, t, thread_t, thread_list_node) { - dump_thread(t); - } - exit_critical_section(); -} - -/* wait queue */ -void wait_queue_init(wait_queue_t *wait) -{ - wait->magic = WAIT_QUEUE_MAGIC; - list_initialize(&wait->list); - wait->count = 0; -} - -static enum handler_return wait_queue_timeout_handler(timer_t *timer, time_t now, void *arg) -{ - thread_t *thread = (thread_t *)arg; - -#if THREAD_CHECKS - ASSERT(thread->magic == THREAD_MAGIC); -#endif - - if (thread_unblock_from_wait_queue(thread, false, ERR_TIMED_OUT) >= NO_ERROR) - return INT_RESCHEDULE; - - return INT_NO_RESCHEDULE; -} - -status_t wait_queue_block(wait_queue_t *wait, time_t timeout) -{ - timer_t timer; - -#if THREAD_CHECKS - ASSERT(wait->magic == WAIT_QUEUE_MAGIC); - ASSERT(current_thread->state == THREAD_RUNNING); - ASSERT(in_critical_section()); -#endif - - if (timeout == 0) - return ERR_TIMED_OUT; - - list_add_tail(&wait->list, ¤t_thread->queue_node); - wait->count++; - current_thread->state = THREAD_BLOCKED; - current_thread->blocking_wait_queue = wait; - current_thread->wait_queue_block_ret = NO_ERROR; - - /* if the timeout is nonzero or noninfinite, set a callback to yank us out of the queue */ - if (timeout != INFINITE_TIME) { - timer_initialize(&timer); - timer_set_oneshot(&timer, timeout, wait_queue_timeout_handler, (void *)current_thread); - } - - thread_block(); - - /* we don't really know if the timer fired or not, so it's better safe to try to cancel it */ - if (timeout != INFINITE_TIME) { - timer_cancel(&timer); - } - - return current_thread->wait_queue_block_ret; -} - -int wait_queue_wake_one(wait_queue_t *wait, bool reschedule, status_t wait_queue_error) -{ - thread_t *t; - int ret = 0; - -#if THREAD_CHECKS - ASSERT(wait->magic == WAIT_QUEUE_MAGIC); - ASSERT(in_critical_section()); -#endif - - t = list_remove_head_type(&wait->list, thread_t, queue_node); - if (t) { - wait->count--; -#if THREAD_CHECKS - ASSERT(t->state == THREAD_BLOCKED); -#endif - t->state = THREAD_READY; - t->wait_queue_block_ret = wait_queue_error; - t->blocking_wait_queue = NULL; - - /* if we're instructed to reschedule, stick the current thread on the head - * of the run queue first, so that the newly awakened thread gets a chance to run - * before the current one, but the current one doesn't get unnecessarilly punished. - */ - if (reschedule) { - current_thread->state = THREAD_READY; - insert_in_run_queue_head(current_thread); - } - insert_in_run_queue_head(t); - if (reschedule) - thread_resched(); - ret = 1; - } - - return ret; -} - -int wait_queue_wake_all(wait_queue_t *wait, bool reschedule, status_t wait_queue_error) -{ - thread_t *t; - int ret = 0; - -#if THREAD_CHECKS - ASSERT(wait->magic == WAIT_QUEUE_MAGIC); - ASSERT(in_critical_section()); -#endif - - if (reschedule && wait->count > 0) { - /* if we're instructed to reschedule, stick the current thread on the head - * of the run queue first, so that the newly awakened threads get a chance to run - * before the current one, but the current one doesn't get unnecessarilly punished. - */ - current_thread->state = THREAD_READY; - insert_in_run_queue_head(current_thread); - } - - /* pop all the threads off the wait queue into the run queue */ - while ((t = list_remove_head_type(&wait->list, thread_t, queue_node))) { - wait->count--; -#if THREAD_CHECKS - ASSERT(t->state == THREAD_BLOCKED); -#endif - t->state = THREAD_READY; - t->wait_queue_block_ret = wait_queue_error; - t->blocking_wait_queue = NULL; - - insert_in_run_queue_head(t); - ret++; - } - -#if THREAD_CHECKS - ASSERT(wait->count == 0); -#endif - - if (reschedule && ret > 0) - thread_resched(); - - return ret; -} - -void wait_queue_destroy(wait_queue_t *wait, bool reschedule) -{ -#if THREAD_CHECKS - ASSERT(wait->magic == WAIT_QUEUE_MAGIC); - ASSERT(in_critical_section()); -#endif - wait_queue_wake_all(wait, reschedule, ERR_OBJECT_DESTROYED); - wait->magic = 0; -} - -status_t thread_unblock_from_wait_queue(thread_t *t, bool reschedule, status_t wait_queue_error) -{ - enter_critical_section(); - -#if THREAD_CHECKS - ASSERT(t->magic == THREAD_MAGIC); -#endif - - if (t->state != THREAD_BLOCKED) - return ERR_NOT_BLOCKED; - -#if THREAD_CHECKS - ASSERT(t->blocking_wait_queue != NULL); - ASSERT(t->blocking_wait_queue->magic == WAIT_QUEUE_MAGIC); - ASSERT(list_in_list(&t->queue_node)); -#endif - - list_delete(&t->queue_node); - t->blocking_wait_queue->count--; - t->blocking_wait_queue = NULL; - t->state = THREAD_READY; - t->wait_queue_block_ret = wait_queue_error; - insert_in_run_queue_head(t); - - if (reschedule) - thread_resched(); - - exit_critical_section(); - - return NO_ERROR; -} - - diff --git a/lk/kernel/timer.c b/lk/kernel/timer.c deleted file mode 100644 index 71bc4fb..0000000 --- a/lk/kernel/timer.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include - -static struct list_node timer_queue; - -void timer_initialize(timer_t *timer) -{ - timer->magic = TIMER_MAGIC; - list_clear_node(&timer->node); - timer->scheduled_time = 0; - timer->periodic_time = 0; - timer->callback = 0; - timer->arg = 0; -} - -static void insert_timer_in_queue(timer_t *timer) -{ - timer_t *entry; - - list_for_every_entry(&timer_queue, entry, timer_t, node) { - if (entry->scheduled_time > timer->scheduled_time) { - list_add_before(&entry->node, &timer->node); - return; - } - } - - /* walked off the end of the list */ - list_add_tail(&timer_queue, &timer->node); -} - -void timer_set_oneshot(timer_t *timer, time_t delay, timer_callback callback, void *arg) -{ - time_t now; - -// TRACEF("delay %d, callback %p, arg %p\n", delay, callback, arg); - - DEBUG_ASSERT(timer->magic == TIMER_MAGIC); - - if (list_in_list(&timer->node)) { - panic("timer %p already in list\n", timer); - } - - now = current_time(); - timer->scheduled_time = now + delay; - timer->periodic_time = 0; - timer->callback = callback; - timer->arg = arg; - -// TRACEF("scheduled time %u\n", timer->scheduled_time); - - enter_critical_section(); - - insert_timer_in_queue(timer); - - exit_critical_section(); -} - -void timer_cancel(timer_t *timer) -{ - DEBUG_ASSERT(timer->magic == TIMER_MAGIC); - - enter_critical_section(); - - if (list_in_list(&timer->node)) - list_delete(&timer->node); - - exit_critical_section(); -} - -/* called at interrupt time to process any pending timers */ -static enum handler_return timer_tick(void *arg, time_t now) -{ - timer_t *timer; - enum handler_return ret = INT_NO_RESCHEDULE; - -#if THREAD_STATS - thread_stats.timer_ints++; -#endif - - for (;;) { - /* see if there's an event to process */ - timer = list_peek_head_type(&timer_queue, timer_t, node); - if (likely(!timer || now < timer->scheduled_time)) - break; - - /* process it */ - DEBUG_ASSERT(timer->magic == TIMER_MAGIC); - list_delete(&timer->node); -// timer = list_remove_head_type(&timer_queue, timer_t, node); -// ASSERT(timer); - -#if THREAD_STATS - thread_stats.timers++; -#endif - -// TRACEF("firing callback %p, arg %p\n", timer->callback, timer->arg); - if (timer->callback(timer, now, timer->arg) == INT_RESCHEDULE) - ret = INT_RESCHEDULE; - } - - /* let the scheduler have a shot to do quantum expiration, etc */ - if (thread_timer_tick() == INT_RESCHEDULE) - ret = INT_RESCHEDULE; - - return INT_RESCHEDULE; -} - -void timer_init(void) -{ - list_initialize(&timer_queue); - - /* register for a periodic timer tick */ - platform_set_periodic_timer(timer_tick, NULL, 10); /* 10ms */ -} - - diff --git a/lk/lib/console/console.c b/lk/lib/console/console.c deleted file mode 100644 index 5782530..0000000 --- a/lk/lib/console/console.c +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include - -static cmd_block *command_list = NULL; - -/* a linear array of statically defined command blocks, - defined in the linker script. - */ -extern cmd_block __commands_start; -extern cmd_block __commands_end; - -static int cmd_help(int argc, const cmd_args *argv); -static int cmd_test(int argc, const cmd_args *argv); - -STATIC_COMMAND_START - { "help", "this list", &cmd_help }, - { "test", "test the command processor", &cmd_test }, -STATIC_COMMAND_END(help); - -int console_init(void) -{ - printf("console_init: entry\n"); - - /* add all the statically defined commands to the list */ - cmd_block *block; - for (block = &__commands_start; block != &__commands_end; block++) { - console_register_commands(block); - } - - return 0; -} - -static const cmd *match_command(const char *command) -{ - cmd_block *block; - size_t i; - - for (block = command_list; block != NULL; block = block->next) { - const cmd *curr_cmd = block->list; - for (i = 0; i < block->count; i++) { - if (strcmp(command, curr_cmd[i].cmd_str) == 0) { - return &curr_cmd[i]; - } - } - } - - return NULL; -} - -static int read_line(char *buffer, int len) -{ - int pos = 0; - int escape_level = 0; - - for (;;) { - char c; - - /* loop until we get a char */ - if (getc(&c) < 0) - continue; - -// printf("c = 0x%hhx\n", c); - - if (escape_level == 0) { - switch (c) { - case '\r': - case '\n': - putc(c); - goto done; - - case 0x7f: // backspace or delete - case 0x8: - if (pos > 0) { - pos--; - puts("\x1b[1D"); // move to the left one - putc(' '); - puts("\x1b[1D"); // move to the left one - } - break; - - case 0x1b: // escape - escape_level++; - break; - - default: - buffer[pos++] = c; - putc(c); - } - } else if (escape_level == 1) { - // inside an escape, look for '[' - if (c == '[') { - escape_level++; - } else { - // we didn't get it, abort - escape_level = 0; - } - } else { // escape_level > 1 - switch (c) { - case 67: // right arrow - buffer[pos++] = ' '; - putc(' '); - break; - case 68: // left arrow - if (pos > 0) { - pos--; - puts("\x1b[1D"); // move to the left one - putc(' '); - puts("\x1b[1D"); // move to the left one - } - break; - case 65: // up arrow - case 66: // down arrow - // XXX do history here - break; - default: - break; - } - escape_level = 0; - } - - /* end of line. */ - if (pos == (len - 1)) { - puts("\nerror: line too long\n"); - pos = 0; - goto done; - } - } - -done: -// printf("returning pos %d\n", pos); - - buffer[pos] = 0; - return pos; -} - -static int tokenize_command(char *buffer, cmd_args *args, int arg_count) -{ - int pos; - int arg; - bool finished; - enum { - INITIAL = 0, - IN_SPACE, - IN_TOKEN - } state; - - pos = 0; - arg = 0; - state = INITIAL; - finished = false; - - for (;;) { - char c = buffer[pos]; - - if (c == '\0') - finished = true; - -// printf("c 0x%hhx state %d arg %d pos %d\n", c, state, arg, pos); - - switch (state) { - case INITIAL: - if (isspace(c)) { - state = IN_SPACE; - } else { - state = IN_TOKEN; - args[arg].str = &buffer[pos]; - } - break; - case IN_TOKEN: - if (finished) { - arg++; - goto done; - } - if (isspace(c)) { - arg++; - buffer[pos] = 0; - /* are we out of tokens? */ - if (arg == arg_count) - goto done; - state = IN_SPACE; - } - pos++; - break; - case IN_SPACE: - if (finished) - goto done; - if (!isspace(c)) { - state = IN_TOKEN; - args[arg].str = &buffer[pos]; - } - pos++; - break; - } - } - -done: - return arg; -} - -static void convert_args(int argc, cmd_args *argv) -{ - int i; - - for (i = 0; i < argc; i++) { - argv[i].u = atoui(argv[i].str); - argv[i].i = atoi(argv[i].str); - } -} - -static void console_loop(void) -{ - cmd_args args[16]; - char buffer[256]; - - printf("entering main console loop\n"); - - for (;;) { - puts("] "); - - int len = read_line(buffer, sizeof(buffer)); - if (len == 0) - continue; - -// printf("line = '%s'\n", buffer); - - /* tokenize the line */ - int argc = tokenize_command(buffer, args, 16); - if (argc < 0) { - printf("syntax error\n"); - continue; - } else if (argc == 0) { - continue; - } - -// printf("after tokenize: argc %d\n", argc); -// for (int i = 0; i < argc; i++) -// printf("%d: '%s'\n", i, args[i].str); - - /* convert the args */ - convert_args(argc, args); - - /* try to match the command */ - const cmd *command = match_command(args[0].str); - if (!command) { - printf("command not found\n"); - continue; - } - - int result = command->cmd_callback(argc, args); - - // XXX do something with the result - } -} - - -void console_start(void) -{ - - console_loop(); -} - -int console_run_command(const char *string) -{ - const cmd *command; - - ASSERT(string != NULL); - - command = match_command(string); - if (!command) - return -1; - - int result = command->cmd_callback(0, NULL); - - return result; -} - -void console_register_commands(cmd_block *block) -{ - ASSERT(block); - ASSERT(block->next == NULL); - - block->next = command_list; - command_list = block; -} - -static int cmd_help(int argc, const cmd_args *argv) -{ - - printf("command list:\n"); - - cmd_block *block; - size_t i; - - for (block = command_list; block != NULL; block = block->next) { - const cmd *curr_cmd = block->list; - for (i = 0; i < block->count; i++) { - printf("\t%-16s: %s\n", curr_cmd[i].cmd_str, curr_cmd[i].help_str ? curr_cmd[i].help_str : ""); - } - } - - return 0; -} - -static int cmd_test(int argc, const cmd_args *argv) -{ - int i; - - printf("argc %d, argv %p\n", argc, argv); - for (i = 0; i < argc; i++) - printf("\t%d: str '%s', i %d, u %#x\n", i, argv[i].str, argv[i].i, argv[i].u); - - return 0; -} - diff --git a/lk/lib/console/rules.mk b/lk/lib/console/rules.mk deleted file mode 100644 index ac3487d..0000000 --- a/lk/lib/console/rules.mk +++ /dev/null @@ -1,6 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -INCLUDES += -I$(LOCAL_DIR)/include - -OBJS += \ - $(LOCAL_DIR)/console.o diff --git a/lk/lib/debug/debug.c b/lk/lib/debug/debug.c deleted file mode 100644 index bdc2d02..0000000 --- a/lk/lib/debug/debug.c +++ /dev/null @@ -1,360 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -void spin(uint32_t usecs) -{ - bigtime_t start = current_time_hires(); - - while ((current_time_hires() - start) < usecs) - ; -} - -void halt(void) -{ - enter_critical_section(); // disable ints - platform_halt(); -} - -void _panic(void *caller, const char *fmt, ...) -{ - dprintf(ALWAYS, "panic (caller %p): ", caller); - - va_list ap; - va_start(ap, fmt); - _dvprintf(fmt, ap); - va_end(ap); - - halt(); -} - -int _dputs(const char *str) -{ - while(*str != 0) { - _dputc(*str++); - } - - return 0; -} - -int _dprintf(const char *fmt, ...) -{ - char buf[256]; - char ts_buf[13]; - int err; - - snprintf(ts_buf, sizeof(ts_buf), "[%u] ", current_time()); - dputs(ALWAYS, ts_buf); - - va_list ap; - va_start(ap, fmt); - err = vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); - - dputs(ALWAYS, buf); - - return err; -} - -int _dvprintf(const char *fmt, va_list ap) -{ - char buf[256]; - int err; - - err = vsnprintf(buf, sizeof(buf), fmt, ap); - - dputs(ALWAYS, buf); - - return err; -} - -void hexdump(const void *ptr, size_t len) -{ - addr_t address = (addr_t)ptr; - size_t count; - int i; - - for (count = 0 ; count < len; count += 16) { - printf("0x%08lx: ", address); - printf("%08x %08x %08x %08x |", *(const uint32_t *)address, *(const uint32_t *)(address + 4), *(const uint32_t *)(address + 8), *(const uint32_t *)(address + 12)); - for (i=0; i < 16; i++) { - char c = *(const char *)(address + i); - if (isalpha(c)) { - printf("%c", c); - } else { - printf("."); - } - } - printf("|\n"); - address += 16; - } -} - -void hexdump8(const void *ptr, size_t len) -{ - addr_t address = (addr_t)ptr; - size_t count; - int i; - - for (count = 0 ; count < len; count += 16) { - printf("0x%08lx: ", address); - for (i=0; i < 16; i++) { - printf("0x%02hhx ", *(const uint8_t *)(address + i)); - } - printf("\n"); - address += 16; - } -} - -#ifdef WITH_LIB_CONSOLE -#include - -static int cmd_display_mem(int argc, const cmd_args *argv); -static int cmd_modify_mem(int argc, const cmd_args *argv); -static int cmd_fill_mem(int argc, const cmd_args *argv); -static int cmd_reset(int argc, const cmd_args *argv); -static int cmd_memtest(int argc, const cmd_args *argv); -static int cmd_copy_mem(int argc, const cmd_args *argv); - -STATIC_COMMAND_START -#if DEBUGLEVEL > 0 - { "dw", "display memory in words", &cmd_display_mem }, - { "dh", "display memory in halfwords", &cmd_display_mem }, - { "db", "display memory in bytes", &cmd_display_mem }, - { "mw", "modify word of memory", &cmd_modify_mem }, - { "mh", "modify halfword of memory", &cmd_modify_mem }, - { "mb", "modify byte of memory", &cmd_modify_mem }, - { "fw", "fill range of memory by word", &cmd_fill_mem }, - { "fh", "fill range of memory by halfword", &cmd_fill_mem }, - { "fb", "fill range of memory by byte", &cmd_fill_mem }, - { "mc", "copy a range of memory", &cmd_copy_mem }, -#endif -#if DEBUGLEVEL > 1 - { "mtest", "simple memory test", &cmd_memtest }, -#endif -STATIC_COMMAND_END(mem); - -static int cmd_display_mem(int argc, const cmd_args *argv) -{ - int size; - - if (argc < 3) { - printf("not enough arguments\n"); - printf("%s

\n", argv[0].str); - return -1; - } - - if (strcmp(argv[0].str, "dw") == 0) { - size = 4; - } else if (strcmp(argv[0].str, "dh") == 0) { - size = 2; - } else { - size = 1; - } - - unsigned long address = argv[1].u; - size_t len = argv[2].u; - unsigned long stop = address + len; - int count = 0; - - if ((address & (size - 1)) != 0) { - printf("unaligned address, cannot display\n"); - return -1; - } - - for ( ; address < stop; address += size) { - if (count == 0) - printf("0x%08lx: ", address); - switch (size) { - case 4: - printf("%08x ", *(uint32_t *)address); - break; - case 2: - printf("%04hx ", *(uint16_t *)address); - break; - case 1: - printf("%02hhx ", *(uint8_t *)address); - break; - } - count += size; - if (count == 16) { - printf("\n"); - count = 0; - } - } - - if (count != 0) - printf("\n"); - - return 0; -} - -static int cmd_modify_mem(int argc, const cmd_args *argv) -{ - int size; - - if (argc < 3) { - printf("not enough arguments\n"); - printf("%s
\n", argv[0].str); - return -1; - } - - if (strcmp(argv[0].str, "mw") == 0) { - size = 4; - } else if (strcmp(argv[0].str, "mh") == 0) { - size = 2; - } else { - size = 1; - } - - unsigned long address = argv[1].u; - unsigned int val = argv[2].u; - - if ((address & (size - 1)) != 0) { - printf("unaligned address, cannot modify\n"); - return -1; - } - - switch (size) { - case 4: - *(uint32_t *)address = (uint32_t)val; - break; - case 2: - *(uint16_t *)address = (uint16_t)val; - break; - case 1: - *(uint8_t *)address = (uint8_t)val; - break; - } - - return 0; -} - -static int cmd_fill_mem(int argc, const cmd_args *argv) -{ - int size; - - if (argc < 4) { - printf("not enough arguments\n"); - printf("%s
\n", argv[0].str); - return -1; - } - - if (strcmp(argv[0].str, "fw") == 0) { - size = 4; - } else if (strcmp(argv[0].str, "fh") == 0) { - size = 2; - } else { - size = 1; - } - - unsigned long address = argv[1].u; - unsigned long len = argv[2].u; - unsigned long stop = address + len; - unsigned int val = argv[3].u; - - if ((address & (size - 1)) != 0) { - printf("unaligned address, cannot modify\n"); - return -1; - } - - for ( ; address < stop; address += size) { - switch (size) { - case 4: - *(uint32_t *)address = (uint32_t)val; - break; - case 2: - *(uint16_t *)address = (uint16_t)val; - break; - case 1: - *(uint8_t *)address = (uint8_t)val; - break; - } - } - - return 0; -} - -static int cmd_copy_mem(int argc, const cmd_args *argv) -{ - if (argc < 4) { - printf("not enough arguments\n"); - printf("%s \n", argv[0].str); - return -1; - } - - addr_t source = argv[1].u; - addr_t target = argv[2].u; - size_t len = argv[3].u; - - memcpy((void *)target, (const void *)source, len); - - return 0; -} - -static int cmd_memtest(int argc, const cmd_args *argv) -{ - if (argc < 3) { - printf("not enough arguments\n"); - printf("%s \n", argv[0].str); - return -1; - } - - uint32_t *ptr; - size_t len; - - ptr = (uint32_t *)argv[1].u; - len = (size_t)argv[2].u; - - size_t i; - // write out - printf("writing first pass..."); - for (i = 0; i < len / 4; i++) { - ptr[i] = i; - } - printf("done\n"); - - // verify - printf("verifying..."); - for (i = 0; i < len / 4; i++) { - if (ptr[i] != i) - printf("error at %p\n", &ptr[i]); - } - printf("done\n"); - - return 0; -} - -#endif - diff --git a/lk/lib/debug/rules.mk b/lk/lib/debug/rules.mk deleted file mode 100644 index 5cc8926..0000000 --- a/lk/lib/debug/rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/debug.o diff --git a/lk/lib/heap/heap.c b/lk/lib/heap/heap.c deleted file mode 100644 index c67bc25..0000000 --- a/lk/lib/heap/heap.c +++ /dev/null @@ -1,380 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include -#include - -#define LOCAL_TRACE 0 - -#define ROUNDUP(a, b) (((a) + ((b)-1)) & ~((b)-1)) - -#define HEAP_MAGIC 'HEAP' - -#if WITH_STATIC_HEAP - -#if !defined(HEAP_START) || !defined(HEAP_LEN) -#error WITH_STATIC_HEAP set but no HEAP_START or HEAP_LEN defined -#endif - -#else -// end of the binary -extern int _end; - -// end of memory -extern int _end_of_ram; - -#define HEAP_START ((unsigned long)&_end) -#define HEAP_LEN ((size_t)&_end_of_ram - (size_t)&_end) -#endif - -struct free_heap_chunk { - struct list_node node; - size_t len; -}; - -struct heap { - void *base; - size_t len; - struct list_node free_list; -}; - -// heap static vars -static struct heap theheap; - -// structure placed at the beginning every allocation -struct alloc_struct_begin { - unsigned int magic; - void *ptr; - size_t size; -}; - -static void dump_free_chunk(struct free_heap_chunk *chunk) -{ - dprintf(INFO, "\t\tbase %p, end 0x%lx, len 0x%zx\n", chunk, (vaddr_t)chunk + chunk->len, chunk->len); -} - -static void heap_dump(void) -{ - dprintf(INFO, "Heap dump:\n"); - dprintf(INFO, "\tbase %p, len 0x%zx\n", theheap.base, theheap.len); - dprintf(INFO, "\tfree list:\n"); - - struct free_heap_chunk *chunk; - list_for_every_entry(&theheap.free_list, chunk, struct free_heap_chunk, node) { - dump_free_chunk(chunk); - } -} - -static void heap_test(void) -{ - void *ptr[16]; - - ptr[0] = heap_alloc(8, 0); - ptr[1] = heap_alloc(32, 0); - ptr[2] = heap_alloc(7, 0); - ptr[3] = heap_alloc(0, 0); - ptr[4] = heap_alloc(98713, 0); - ptr[5] = heap_alloc(16, 0); - - heap_free(ptr[5]); - heap_free(ptr[1]); - heap_free(ptr[3]); - heap_free(ptr[0]); - heap_free(ptr[4]); - heap_free(ptr[2]); - - heap_dump(); - - int i; - for (i=0; i < 16; i++) - ptr[i] = 0; - - for (i=0; i < 32768; i++) { - unsigned int index = (unsigned int)rand() % 16; - - if ((i % (16*1024)) == 0) - printf("pass %d\n", i); - -// printf("index 0x%x\n", index); - if (ptr[index]) { -// printf("freeing ptr[0x%x] = %p\n", index, ptr[index]); - heap_free(ptr[index]); - ptr[index] = 0; - } - unsigned int align = 1 << ((unsigned int)rand() % 8); - ptr[index] = heap_alloc((unsigned int)rand() % 32768, align); -// printf("ptr[0x%x] = %p, align 0x%x\n", index, ptr[index], align); - - DEBUG_ASSERT(((addr_t)ptr[index] % align) == 0); -// heap_dump(); - } - - for (i=0; i < 16; i++) { - if (ptr[i]) - heap_free(ptr[i]); - } - - heap_dump(); -} - -// try to insert this free chunk into the free list, consuming the chunk by merging it with -// nearby ones if possible. Returns base of whatever chunk it became in the list. -static struct free_heap_chunk *heap_insert_free_chunk(struct free_heap_chunk *chunk) -{ -#if DEBUGLEVEL > INFO - vaddr_t chunk_end = (vaddr_t)chunk + chunk->len; -#endif - -// dprintf("%s: chunk ptr %p, size 0x%lx, chunk_end 0x%x\n", __FUNCTION__, chunk, chunk->len, chunk_end); - - struct free_heap_chunk *next_chunk; - struct free_heap_chunk *last_chunk; - - // walk through the list, finding the node to insert before - list_for_every_entry(&theheap.free_list, next_chunk, struct free_heap_chunk, node) { - if (chunk < next_chunk) { - DEBUG_ASSERT(chunk_end <= (vaddr_t)next_chunk); - - list_add_before(&next_chunk->node, &chunk->node); - - goto try_merge; - } - } - - // walked off the end of the list, add it at the tail - list_add_tail(&theheap.free_list, &chunk->node); - - // try to merge with the previous chunk -try_merge: - last_chunk = list_prev_type(&theheap.free_list, &chunk->node, struct free_heap_chunk, node); - if (last_chunk) { - if ((vaddr_t)last_chunk + last_chunk->len == (vaddr_t)chunk) { - // easy, just extend the previous chunk - last_chunk->len += chunk->len; - - // remove ourself from the list - list_delete(&chunk->node); - - // set the chunk pointer to the newly extended chunk, in case - // it needs to merge with the next chunk below - chunk = last_chunk; - } - } - - // try to merge with the next chunk - if (next_chunk) { - if ((vaddr_t)chunk + chunk->len == (vaddr_t)next_chunk) { - // extend our chunk - chunk->len += next_chunk->len; - - // remove them from the list - list_delete(&next_chunk->node); - } - } - - return chunk; -} - -struct free_heap_chunk *heap_create_free_chunk(void *ptr, size_t len) -{ - DEBUG_ASSERT((len % sizeof(void *)) == 0); // size must be aligned on pointer boundary - - struct free_heap_chunk *chunk = (struct free_heap_chunk *)ptr; - chunk->len = len; - - return chunk; -} - -void *heap_alloc(size_t size, unsigned int alignment) -{ - void *ptr; - - LTRACEF("size %zd, align %d\n", size, alignment); - - // alignment must be power of 2 - if (alignment & (alignment - 1)) - return NULL; - - // we always put a size field + base pointer + magic in front of the allocation - size += sizeof(struct alloc_struct_begin); - - // make sure we allocate at least the size of a struct free_heap_chunk so that - // when we free it, we can create a struct free_heap_chunk struct and stick it - // in the spot - if (size < sizeof(struct free_heap_chunk)) - size = sizeof(struct free_heap_chunk); - - // round up size to a multiple of native pointer size - size = ROUNDUP(size, sizeof(void *)); - - // deal with nonzero alignments - if (alignment > 0) { - if (alignment < 16) - alignment = 16; - - // add alignment for worst case fit - size += alignment; - } - - // critical section - enter_critical_section(); - - // walk through the list - ptr = NULL; - struct free_heap_chunk *chunk; - list_for_every_entry(&theheap.free_list, chunk, struct free_heap_chunk, node) { - DEBUG_ASSERT((chunk->len % sizeof(void *)) == 0); // len should always be a multiple of pointer size - - // is it big enough to service our allocation? - if (chunk->len >= size) { - ptr = chunk; - - // remove it from the list - struct list_node *next_node = list_next(&theheap.free_list, &chunk->node); - list_delete(&chunk->node); - - if (chunk->len > size + sizeof(struct free_heap_chunk)) { - // there's enough space in this chunk to create a new one after the allocation - struct free_heap_chunk *newchunk = heap_create_free_chunk((uint8_t *)ptr + size, chunk->len - size); - - // truncate this chunk - chunk->len -= chunk->len - size; - - // add the new one where chunk used to be - if (next_node) - list_add_before(next_node, &newchunk->node); - else - list_add_tail(&theheap.free_list, &newchunk->node); - } - - // the allocated size is actually the length of this chunk, not the size requested - DEBUG_ASSERT(chunk->len >= size); - size = chunk->len; - - ptr = (void *)((addr_t)ptr + sizeof(struct alloc_struct_begin)); - - // align the output if requested - if (alignment > 0) { - ptr = (void *)ROUNDUP((addr_t)ptr, alignment); - } - - struct alloc_struct_begin *as = (struct alloc_struct_begin *)ptr; - as--; - as->magic = HEAP_MAGIC; - as->ptr = (void *)chunk; - as->size = size; - - break; - } - } - - LTRACEF("returning ptr %p\n", ptr); - -// heap_dump(); - - exit_critical_section(); - - return ptr; -} - -void heap_free(void *ptr) -{ - if (ptr == 0) - return; - - LTRACEF("ptr %p\n", ptr); - - // check for the old allocation structure - struct alloc_struct_begin *as = (struct alloc_struct_begin *)ptr; - as--; - - DEBUG_ASSERT(as->magic == HEAP_MAGIC); - - LTRACEF("allocation was %zd bytes long at ptr %p\n", as->size, as->ptr); - - // looks good, create a free chunk and add it to the pool - enter_critical_section(); - heap_insert_free_chunk(heap_create_free_chunk(as->ptr, as->size)); - exit_critical_section(); - -// heap_dump(); -} - -void heap_init(void) -{ - LTRACE_ENTRY; - - // set the heap range - theheap.base = (void *)HEAP_START; - theheap.len = HEAP_LEN; - - LTRACEF("base %p size %zd bytes\n", theheap.base, theheap.len); - - // initialize the free list - list_initialize(&theheap.free_list); - - // create an initial free chunk - heap_insert_free_chunk(heap_create_free_chunk(theheap.base, theheap.len)); - - // dump heap info -// heap_dump(); - -// dprintf(INFO, "running heap tests\n"); -// heap_test(); -} - -#if DEBUGLEVEL > 1 -#if WITH_LIB_CONSOLE - -#include - -static int cmd_heap(int argc, const cmd_args *argv); - -STATIC_COMMAND_START - { "heap", "heap debug commands", &cmd_heap }, -STATIC_COMMAND_END(heap); - -static int cmd_heap(int argc, const cmd_args *argv) -{ - if (argc < 2) { - printf("not enough arguments\n"); - return -1; - } - - if (strcmp(argv[1].str, "info") == 0) { - heap_dump(); - } else { - printf("unrecognized command\n"); - return -1; - } - - return 0; -} - -#endif -#endif - diff --git a/lk/lib/heap/rules.mk b/lk/lib/heap/rules.mk deleted file mode 100644 index c9307ab..0000000 --- a/lk/lib/heap/rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/heap.o diff --git a/lk/lib/libc/atexit.c b/lk/lib/libc/atexit.c deleted file mode 100644 index 85d7bdf..0000000 --- a/lk/lib/libc/atexit.c +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* nulled out atexit. static object constructors call this */ -int atexit(void (*func)(void)) -{ - return 0; -} - diff --git a/lk/lib/libc/atoi.c b/lk/lib/libc/atoi.c deleted file mode 100644 index e3dd320..0000000 --- a/lk/lib/libc/atoi.c +++ /dev/null @@ -1,105 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#include -#include - -#define LONG_IS_INT 1 - -static int hexval(char c) -{ - if (c >= '0' && c <= '9') - return c - '0'; - else if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - else if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - - return 0; -} - -int atoi(const char *num) -{ -#if !LONG_IS_INT - // XXX fail -#else - return atol(num); -#endif -} - -unsigned int atoui(const char *num) -{ -#if !LONG_IS_INT - // XXX fail -#else - return atoul(num); -#endif -} - -long atol(const char *num) -{ - long value = 0; - int neg = 0; - - if (num[0] == '0' && num[1] == 'x') { - // hex - num += 2; - while (*num && isxdigit(*num)) - value = value * 16 + hexval(*num++); - } else { - // decimal - if (num[0] == '-') { - neg = 1; - num++; - } - while (*num && isdigit(*num)) - value = value * 10 + *num++ - '0'; - } - - if (neg) - value = -value; - - return value; -} - -unsigned long atoul(const char *num) -{ - unsigned long value = 0; - if (num[0] == '0' && num[1] == 'x') { - // hex - num += 2; - while (*num && isxdigit(*num)) - value = value * 16 + hexval(*num++); - } else { - // decimal - while (*num && isdigit(*num)) - value = value * 10 + *num++ - '0'; - } - - return value; -} - diff --git a/lk/lib/libc/ctype.c b/lk/lib/libc/ctype.c deleted file mode 100644 index 1509822..0000000 --- a/lk/lib/libc/ctype.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include - -#if 0 -/* XXX unimplemented for now */ -int iscntrl(int c); -int isgraph(int c); -int isprint(int c); -int ispunct(int c); -#endif - -int isblank(int c) -{ - return (c == ' ' || c == '\t'); -} - -int isspace(int c) -{ - return (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'); -} - -int islower(int c) -{ - return ((c >= 'a') && (c <= 'z')); -} - -int isupper(int c) -{ - return ((c >= 'A') && (c <= 'Z')); -} - -int isdigit(int c) -{ - return ((c >= '0') && (c <= '9')); -} - -int isalpha(int c) -{ - return isupper(c) || islower(c); -} - -int isalnum(int c) -{ - return isalpha(c) || isdigit(c); -} - -int isxdigit(int c) -{ - return isdigit(c) || ((c >= 'a') && (c <= 'f')) || ((c >= 'A') && (c <= 'F')); -} - -int tolower(int c) -{ - if ((c >= 'A') && (c <= 'Z')) - return c + ('a' - 'A'); - return c; -} - -int toupper(int c) -{ - if ((c >= 'a') && (c <= 'z')) - return c + ('A' - 'a'); - return c; -} - diff --git a/lk/lib/libc/eabi.c b/lk/lib/libc/eabi.c deleted file mode 100644 index 9d607f1..0000000 --- a/lk/lib/libc/eabi.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* some cruft we have to define when using the linux toolchain */ -#include - -#if defined(__ARM_EABI_UNWINDER__) && __ARM_EABI_UNWINDER__ - -/* Our toolchain has eabi functionality built in, but they're not really used. - * so we stub them out here. */ -_Unwind_Reason_Code __aeabi_unwind_cpp_pr0(_Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context) -{ - return _URC_FAILURE; -} - -_Unwind_Reason_Code __aeabi_unwind_cpp_pr1(_Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context) -{ - return _URC_FAILURE; -} - -_Unwind_Reason_Code __aeabi_unwind_cpp_pr2(_Unwind_State state, _Unwind_Control_Block *ucbp, _Unwind_Context *context) -{ - return _URC_FAILURE; -} - -#endif - -/* needed by some piece of EABI */ -void raise(void) -{ -} - diff --git a/lk/lib/libc/malloc.c b/lk/lib/libc/malloc.c deleted file mode 100644 index fd5fe8a..0000000 --- a/lk/lib/libc/malloc.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include - -void *malloc(size_t size) -{ - return heap_alloc(size, 0); -} - -void *memalign(size_t boundary, size_t size) -{ - return heap_alloc(size, boundary); -} - -void *calloc(size_t count, size_t size) -{ - void *ptr; - size_t realsize = count * size; - - ptr = heap_alloc(realsize, 0); - if (!ptr) - return NULL; - - memset(ptr, 0, realsize); - return ptr; -} - -void free(void *ptr) -{ - return heap_free(ptr); -} - diff --git a/lk/lib/libc/new.cpp b/lk/lib/libc/new.cpp deleted file mode 100644 index 3a5f431..0000000 --- a/lk/lib/libc/new.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2006 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include - -void *operator new(size_t s) -{ - return heap_alloc(s, 0); -} - -void *operator new[](size_t s) -{ - return heap_alloc(s, 0); -} - -void *operator new(size_t , void *p) -{ - return p; -} - -void operator delete(void *p) -{ - return heap_free(p); -} - -void operator delete[](void *p) -{ - return heap_free(p); -} - diff --git a/lk/lib/libc/printf.c b/lk/lib/libc/printf.c deleted file mode 100644 index b7bf2bb..0000000 --- a/lk/lib/libc/printf.c +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include - -void putc(char c) -{ - return _dputc(c); -} - -int puts(const char *str) -{ - return _dputs(str); -} - -int getc(char *c) -{ - return dgetc(c); -} - -int printf(const char *fmt, ...) -{ - int err; - - va_list ap; - va_start(ap, fmt); - err = _dvprintf(fmt, ap); - va_end(ap); - - return err; -} - -int sprintf(char *str, const char *fmt, ...) -{ - int err; - - va_list ap; - va_start(ap, fmt); - err = vsprintf(str, fmt, ap); - va_end(ap); - - return err; -} - -int snprintf(char *str, size_t len, const char *fmt, ...) -{ - int err; - - va_list ap; - va_start(ap, fmt); - err = vsnprintf(str, len, fmt, ap); - va_end(ap); - - return err; -} - - -#define LONGFLAG 0x00000001 -#define LONGLONGFLAG 0x00000002 -#define HALFFLAG 0x00000004 -#define HALFHALFFLAG 0x00000008 -#define SIZETFLAG 0x00000010 -#define ALTFLAG 0x00000020 -#define CAPSFLAG 0x00000040 -#define SHOWSIGNFLAG 0x00000080 -#define SIGNEDFLAG 0x00000100 -#define LEFTFORMATFLAG 0x00000200 -#define LEADZEROFLAG 0x00000400 - -static char *longlong_to_string(char *buf, unsigned long long n, int len, uint flag) -{ - int pos = len; - int negative = 0; - - if((flag & SIGNEDFLAG) && (long long)n < 0) { - negative = 1; - n = -n; - } - - buf[--pos] = 0; - - /* only do the math if the number is >= 10 */ - while(n >= 10) { - int digit = n % 10; - - n /= 10; - - buf[--pos] = digit + '0'; - } - buf[--pos] = n + '0'; - - if(negative) - buf[--pos] = '-'; - else if((flag & SHOWSIGNFLAG)) - buf[--pos] = '+'; - - return &buf[pos]; -} - -static char *longlong_to_hexstring(char *buf, unsigned long long u, int len, uint flag) -{ - int pos = len; - static const char hextable[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - static const char hextable_caps[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - const char *table; - - if((flag & CAPSFLAG)) - table = hextable_caps; - else - table = hextable; - - buf[--pos] = 0; - do { - unsigned int digit = u % 16; - u /= 16; - - buf[--pos] = table[digit]; - } while(u != 0); - - return &buf[pos]; -} - -int vsprintf(char *str, const char *fmt, va_list ap) -{ - return vsnprintf(str, INT_MAX, fmt, ap); -} - -int vsnprintf(char *str, size_t len, const char *fmt, va_list ap) -{ - char c; - unsigned char uc; - const char *s; - unsigned long long n; - void *ptr; - int flags; - unsigned int format_num; - size_t chars_written = 0; - char num_buffer[32]; - -#define OUTPUT_CHAR(c) do { (*str++ = c); chars_written++; if (chars_written + 1 == len) goto done; } while(0) -#define OUTPUT_CHAR_NOLENCHECK(c) do { (*str++ = c); chars_written++; } while(0) - - for(;;) { - /* handle regular chars that aren't format related */ - while((c = *fmt++) != 0) { - if(c == '%') - break; /* we saw a '%', break and start parsing format */ - OUTPUT_CHAR(c); - } - - /* make sure we haven't just hit the end of the string */ - if(c == 0) - break; - - /* reset the format state */ - flags = 0; - format_num = 0; - -next_format: - /* grab the next format character */ - c = *fmt++; - if(c == 0) - break; - - switch(c) { - case '0'...'9': - if (c == '0' && format_num == 0) - flags |= LEADZEROFLAG; - format_num *= 10; - format_num += c - '0'; - goto next_format; - case '.': - /* XXX for now eat numeric formatting */ - goto next_format; - case '%': - OUTPUT_CHAR('%'); - break; - case 'c': - uc = va_arg(ap, unsigned int); - OUTPUT_CHAR(uc); - break; - case 's': - s = va_arg(ap, const char *); - if(s == 0) - s = ""; - goto _output_string; - case '-': - flags |= LEFTFORMATFLAG; - goto next_format; - case '+': - flags |= SHOWSIGNFLAG; - goto next_format; - case '#': - flags |= ALTFLAG; - goto next_format; - case 'l': - if(flags & LONGFLAG) - flags |= LONGLONGFLAG; - flags |= LONGFLAG; - goto next_format; - case 'h': - if(flags & HALFFLAG) - flags |= HALFHALFFLAG; - flags |= HALFFLAG; - goto next_format; - case 'z': - flags |= SIZETFLAG; - goto next_format; - case 'D': - flags |= LONGFLAG; - /* fallthrough */ - case 'i': - case 'd': - n = (flags & LONGLONGFLAG) ? va_arg(ap, long long) : - (flags & LONGFLAG) ? va_arg(ap, long) : - (flags & HALFHALFFLAG) ? (signed char)va_arg(ap, int) : - (flags & HALFFLAG) ? (short)va_arg(ap, int) : - (flags & SIZETFLAG) ? va_arg(ap, ssize_t) : - va_arg(ap, int); - flags |= SIGNEDFLAG; - s = longlong_to_string(num_buffer, n, sizeof(num_buffer), flags); - goto _output_string; - case 'U': - flags |= LONGFLAG; - /* fallthrough */ - case 'u': - n = (flags & LONGLONGFLAG) ? va_arg(ap, unsigned long long) : - (flags & LONGFLAG) ? va_arg(ap, unsigned long) : - (flags & HALFHALFFLAG) ? (unsigned char)va_arg(ap, unsigned int) : - (flags & HALFFLAG) ? (unsigned short)va_arg(ap, unsigned int) : - (flags & SIZETFLAG) ? va_arg(ap, size_t) : - va_arg(ap, unsigned int); - s = longlong_to_string(num_buffer, n, sizeof(num_buffer), flags); - goto _output_string; - case 'p': - flags |= LONGFLAG | ALTFLAG; - goto hex; - case 'X': - flags |= CAPSFLAG; - /* fallthrough */ -hex: - case 'x': - n = (flags & LONGLONGFLAG) ? va_arg(ap, unsigned long long) : - (flags & LONGFLAG) ? va_arg(ap, unsigned long) : - (flags & HALFHALFFLAG) ? (unsigned char)va_arg(ap, unsigned int) : - (flags & HALFFLAG) ? (unsigned short)va_arg(ap, unsigned int) : - (flags & SIZETFLAG) ? va_arg(ap, size_t) : - va_arg(ap, unsigned int); - s = longlong_to_hexstring(num_buffer, n, sizeof(num_buffer), flags); - if(flags & ALTFLAG) { - OUTPUT_CHAR('0'); - OUTPUT_CHAR((flags & CAPSFLAG) ? 'X': 'x'); - } - goto _output_string; - case 'n': - ptr = va_arg(ap, void *); - if(flags & LONGLONGFLAG) - *(long long *)ptr = chars_written; - else if(flags & LONGFLAG) - *(long *)ptr = chars_written; - else if(flags & HALFHALFFLAG) - *(signed char *)ptr = chars_written; - else if(flags & HALFFLAG) - *(short *)ptr = chars_written; - else if(flags & SIZETFLAG) - *(size_t *)ptr = chars_written; - else - *(int *)ptr = chars_written; - break; - default: - OUTPUT_CHAR('%'); - OUTPUT_CHAR(c); - break; - } - - /* move on to the next field */ - continue; - - /* shared output code */ -_output_string: - if (flags & LEFTFORMATFLAG) { - /* left justify the text */ - uint count = 0; - while(*s != 0) { - OUTPUT_CHAR(*s++); - count++; - } - - /* pad to the right (if necessary) */ - for (; format_num > count; format_num--) - OUTPUT_CHAR(' '); - } else { - /* right justify the text (digits) */ - size_t string_len = strlen(s); - char outchar = (flags & LEADZEROFLAG) ? '0' : ' '; - for (; format_num > string_len; format_num--) - OUTPUT_CHAR(outchar); - - /* output the string */ - while(*s != 0) - OUTPUT_CHAR(*s++); - } - continue; - } - -done: - /* null terminate */ - OUTPUT_CHAR_NOLENCHECK('\0'); - chars_written--; /* don't count the null */ - -#undef OUTPUT_CHAR -#undef OUTPUT_CHAR_NOLENCHECK - - return chars_written; -} - - diff --git a/lk/lib/libc/pure_virtual.cpp b/lk/lib/libc/pure_virtual.cpp deleted file mode 100644 index 68cfe3b..0000000 --- a/lk/lib/libc/pure_virtual.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2006 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include - -extern "C" void __cxa_pure_virtual(void) -{ - panic("pure virtual called\n"); -} - diff --git a/lk/lib/libc/rand.c b/lk/lib/libc/rand.c deleted file mode 100644 index fe4f392..0000000 --- a/lk/lib/libc/rand.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include - -static int randseed = 12345; - -int rand(void) -{ - return (randseed = randseed * 12345 + 17); -} diff --git a/lk/lib/libc/rules.mk b/lk/lib/libc/rules.mk deleted file mode 100644 index e250cfe..0000000 --- a/lk/lib/libc/rules.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/atoi.o \ - $(LOCAL_DIR)/ctype.o \ - $(LOCAL_DIR)/printf.o \ - $(LOCAL_DIR)/malloc.o \ - $(LOCAL_DIR)/rand.o \ - $(LOCAL_DIR)/eabi.o - - -include $(LOCAL_DIR)/string/rules.mk - -ifeq ($(WITH_CPP_SUPPORT),true) -OBJS += \ - $(LOCAL_DIR)/new.o \ - $(LOCAL_DIR)/atexit.o \ - $(LOCAL_DIR)/pure_virtual.o -endif - diff --git a/lk/lib/libc/string/arch/arm/memcpy.S b/lk/lib/libc/string/arch/arm/memcpy.S deleted file mode 100644 index 3b7816d..0000000 --- a/lk/lib/libc/string/arch/arm/memcpy.S +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -.text -.align 2 - -/* void bcopy(const void *src, void *dest, size_t n); */ -FUNCTION(bcopy) - // swap args for bcopy - mov r12, r0 - mov r0, r1 - mov r1, r12 - -/* void *memcpy(void *dest, const void *src, size_t n); */ -FUNCTION(memmove) -FUNCTION(memcpy) - // check for zero length copy or the same pointer - cmp r2, #0 - cmpne r1, r0 - bxeq lr - - // save a few registers for use and the return code (input dst) - stmfd sp!, {r0, r4, r5, lr} - - // check for forwards overlap (src > dst, distance < len) - subs r3, r0, r1 - cmpgt r2, r3 - bgt .L_forwardoverlap - - // check for a short copy len. - // 20 bytes is enough so that if a 16 byte alignment needs to happen there is at least a - // wordwise copy worth of work to be done. - cmp r2, #(16+4) - blt .L_bytewise - - // see if they are similarly aligned on 4 byte boundaries - eor r3, r0, r1 - tst r3, #3 - bne .L_bytewise // dissimilarly aligned, nothing we can do (for now) - - // check for 16 byte alignment on dst. - // this will also catch src being not 4 byte aligned, since it is similarly 4 byte - // aligned with dst at this point. - tst r0, #15 - bne .L_not16bytealigned - - // check to see if we have at least 32 bytes of data to copy. - // if not, just revert to wordwise copy - cmp r2, #32 - blt .L_wordwise - -.L_bigcopy: - // copy 32 bytes at a time. src & dst need to be at least 4 byte aligned, - // and we need at least 32 bytes remaining to copy - - // save r6-r7 for use in the big copy - stmfd sp!, {r6-r7} - - sub r2, r2, #32 // subtract an extra 32 to the len so we can avoid an extra compare - -.L_bigcopy_loop: - ldmia r1!, {r4, r5, r6, r7} - stmia r0!, {r4, r5, r6, r7} - ldmia r1!, {r4, r5, r6, r7} - subs r2, r2, #32 - stmia r0!, {r4, r5, r6, r7} - bge .L_bigcopy_loop - - // restore r6-r7 - ldmfd sp!, {r6-r7} - - // see if we are done - adds r2, r2, #32 - beq .L_done - - // less then 4 bytes left? - cmp r2, #4 - blt .L_bytewise - -.L_wordwise: - // copy 4 bytes at a time. - // src & dst are guaranteed to be word aligned, and at least 4 bytes are left to copy. - subs r2, r2, #4 - -.L_wordwise_loop: - ldr r3, [r1], #4 - subs r2, r2, #4 - str r3, [r0], #4 - bge .L_wordwise_loop - - // correct the remaining len and test for completion - adds r2, r2, #4 - beq .L_done - -.L_bytewise: - // simple bytewise copy - ldrb r3, [r1], #1 - subs r2, r2, #1 - strb r3, [r0], #1 - bgt .L_bytewise - -.L_done: - // load dst for return and restore r4,r5 -#if ARM_ARCH_LEVEL >= 5 - ldmfd sp!, {r0, r4, r5, pc} -#else - ldmfd sp!, {r0, r4, r5, lr} - bx lr -#endif - -.L_not16bytealigned: - // dst is not 16 byte aligned, so we will copy up to 15 bytes to get it aligned. - // src is guaranteed to be similarly word aligned with dst. - - // set the condition flags based on the alignment. - lsl r12, r0, #28 - rsb r12, r12, #0 - msr CPSR_f, r12 // move into NZCV fields in CPSR - - // move as many bytes as necessary to get the dst aligned - ldrvsb r3, [r1], #1 // V set - ldrcsh r4, [r1], #2 // C set - ldreq r5, [r1], #4 // Z set - - strvsb r3, [r0], #1 - strcsh r4, [r0], #2 - streq r5, [r0], #4 - - ldmmiia r1!, {r3-r4} // N set - stmmiia r0!, {r3-r4} - - // fix the remaining len - sub r2, r2, r12, lsr #28 - - // test to see what we should do now - cmp r2, #32 - bge .L_bigcopy - b .L_wordwise - - // src and dest overlap 'forwards' or dst > src -.L_forwardoverlap: - - // do a bytewise reverse copy for now - add r1, r1, r2 - add r0, r0, r2 - -.L_bytewisereverse: - // simple bytewise reverse copy - ldrb r3, [r1], #-1 - subs r2, r2, #1 - strb r3, [r0], #-1 - bgt .L_bytewisereverse - - b .L_done - diff --git a/lk/lib/libc/string/arch/arm/memset.S b/lk/lib/libc/string/arch/arm/memset.S deleted file mode 100644 index b31d053..0000000 --- a/lk/lib/libc/string/arch/arm/memset.S +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -.text -.align 2 - -/* void bzero(void *s, size_t n); */ -FUNCTION(bzero) - mov r2, r1 - mov r1, #0 - -/* void *memset(void *s, int c, size_t n); */ -FUNCTION(memset) - // check for zero length - cmp r2, #0 - bxeq lr - - // save the original pointer - mov r12, r0 - - // short memsets aren't worth optimizing - cmp r2, #(32 + 16) - blt .L_bytewise - - // fill a 32 bit register with the 8 bit value - and r1, r1, #0xff - orr r1, r1, r1, lsl #8 - orr r1, r1, r1, lsl #16 - - // check for 16 byte alignment - tst r0, #15 - bne .L_not16bytealigned - -.L_bigset: - // dump some registers to make space for our values - stmfd sp!, { r4-r5 } - - // fill a bunch of registers with the set value - mov r3, r1 - mov r4, r1 - mov r5, r1 - - // prepare the count register so we can avoid an extra compare - sub r2, r2, #32 - - // 32 bytes at a time -.L_bigset_loop: - stmia r0!, { r1, r3, r4, r5 } - subs r2, r2, #32 - stmia r0!, { r1, r3, r4, r5 } - bge .L_bigset_loop - - // restore our dumped registers - ldmfd sp!, { r4-r5 } - - // see if we're done - adds r2, r2, #32 - beq .L_done - -.L_bytewise: - // bytewise memset - subs r2, r2, #1 - strb r1, [r0], #1 - bgt .L_bytewise - -.L_done: - // restore the base pointer as return value - mov r0, r12 - bx lr - -.L_not16bytealigned: - // dst is not 16 byte aligned, so we will set up to 15 bytes to get it aligned. - - // set the condition flags based on the alignment. - lsl r3, r0, #28 - rsb r3, r3, #0 - msr CPSR_f, r3 // move into NZCV fields in CPSR - - // move as many bytes as necessary to get the dst aligned - strvsb r1, [r0], #1 // V set - strcsh r1, [r0], #2 // C set - streq r1, [r0], #4 // Z set - strmi r1, [r0], #4 // N set - strmi r1, [r0], #4 // N set - - // fix the remaining len - sub r2, r2, r3, lsr #28 - - // do the large memset - b .L_bigset - diff --git a/lk/lib/libc/string/arch/arm/rules.mk b/lk/lib/libc/string/arch/arm/rules.mk deleted file mode 100644 index 89a68f4..0000000 --- a/lk/lib/libc/string/arch/arm/rules.mk +++ /dev/null @@ -1,11 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -ASM_STRING_OPS := bcopy bzero memcpy memmove memset - -OBJS += \ - $(LOCAL_DIR)/memcpy.o \ - $(LOCAL_DIR)/memset.o - -# filter out the C implementation -C_STRING_OPS := $(filter-out $(ASM_STRING_OPS),$(C_STRING_OPS)) - diff --git a/lk/lib/libc/string/bcopy.c b/lk/lib/libc/string/bcopy.c deleted file mode 100644 index 873e6f6..0000000 --- a/lk/lib/libc/string/bcopy.c +++ /dev/null @@ -1,35 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -void * -bcopy(void const *src, void *dest, size_t count) -{ - return memcpy(dest, src, count); -} - diff --git a/lk/lib/libc/string/bzero.c b/lk/lib/libc/string/bzero.c deleted file mode 100644 index 32b43bb..0000000 --- a/lk/lib/libc/string/bzero.c +++ /dev/null @@ -1,35 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -void -bzero(void *dst, size_t count) -{ - memset(dst, 0, count); -} - diff --git a/lk/lib/libc/string/memchr.c b/lk/lib/libc/string/memchr.c deleted file mode 100644 index 094c2a1..0000000 --- a/lk/lib/libc/string/memchr.c +++ /dev/null @@ -1,45 +0,0 @@ -/* -** Copyright 2001, Manuel J. Petit. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -void * -memchr(void const *buf, int c, size_t len) -{ - size_t i; - unsigned char const *b= buf; - unsigned char x= (c&0xff); - - for(i= 0; i< len; i++) { - if(b[i]== x) { - return (void*)(b+i); - } - } - - return NULL; -} - diff --git a/lk/lib/libc/string/memcmp.c b/lk/lib/libc/string/memcmp.c deleted file mode 100644 index a050bc7..0000000 --- a/lk/lib/libc/string/memcmp.c +++ /dev/null @@ -1,40 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -int -memcmp(const void *cs, const void *ct, size_t count) -{ - const unsigned char *su1, *su2; - signed char res = 0; - - for(su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) - if((res = *su1 - *su2) != 0) - break; - return res; -} diff --git a/lk/lib/libc/string/memcpy.c b/lk/lib/libc/string/memcpy.c deleted file mode 100644 index 00e547e..0000000 --- a/lk/lib/libc/string/memcpy.c +++ /dev/null @@ -1,69 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - - -#if !_ASM_MEMCPY - -typedef long word; - -#define lsize sizeof(word) -#define lmask (lsize - 1) - -void *memcpy(void *dest, const void *src, size_t count) -{ - char *d = (char *)dest; - const char *s = (const char *)src; - int len; - - if(count == 0 || dest == src) - return dest; - - if(((long)d | (long)s) & lmask) { - // src and/or dest do not align on word boundary - if((((long)d ^ (long)s) & lmask) || (count < lsize)) - len = count; // copy the rest of the buffer with the byte mover - else - len = lsize - ((long)d & lmask); // move the ptrs up to a word boundary - - count -= len; - for(; len > 0; len--) - *d++ = *s++; - } - for(len = count / lsize; len > 0; len--) { - *(word *)d = *(word *)s; - d += lsize; - s += lsize; - } - for(len = count & lmask; len > 0; len--) - *d++ = *s++; - - return dest; -} - -#endif diff --git a/lk/lib/libc/string/memmove.c b/lk/lib/libc/string/memmove.c deleted file mode 100644 index cb08a6c..0000000 --- a/lk/lib/libc/string/memmove.c +++ /dev/null @@ -1,93 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -#if !_ASM_MEMMOVE - -typedef long word; - -#define lsize sizeof(word) -#define lmask (lsize - 1) - -void * -memmove(void *dest, void const *src, size_t count) -{ - char *d = (char *)dest; - const char *s = (const char *)src; - int len; - - if(count == 0 || dest == src) - return dest; - - if((long)d < (long)s) { - if(((long)d | (long)s) & lmask) { - // src and/or dest do not align on word boundary - if((((long)d ^ (long)s) & lmask) || (count < lsize)) - len = count; // copy the rest of the buffer with the byte mover - else - len = lsize - ((long)d & lmask); // move the ptrs up to a word boundary - - count -= len; - for(; len > 0; len--) - *d++ = *s++; - } - for(len = count / lsize; len > 0; len--) { - *(word *)d = *(word *)s; - d += lsize; - s += lsize; - } - for(len = count & lmask; len > 0; len--) - *d++ = *s++; - } else { - d += count; - s += count; - if(((long)d | (long)s) & lmask) { - // src and/or dest do not align on word boundary - if((((long)d ^ (long)s) & lmask) || (count <= lsize)) - len = count; - else - len = ((long)d & lmask); - - count -= len; - for(; len > 0; len--) - *--d = *--s; - } - for(len = count / lsize; len > 0; len--) { - d -= lsize; - s -= lsize; - *(word *)d = *(word *)s; - } - for(len = count & lmask; len > 0; len--) - *--d = *--s; - } - - return dest; -} - -#endif - diff --git a/lk/lib/libc/string/memscan.c b/lk/lib/libc/string/memscan.c deleted file mode 100644 index 7d58cf2..0000000 --- a/lk/lib/libc/string/memscan.c +++ /dev/null @@ -1,41 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -void *memscan(void *addr, int c, size_t size) -{ - unsigned char *p = (unsigned char *)addr; - - while(size) { - if(*p == c) - return (void *)p; - p++; - size--; - } - return (void *)p; -} diff --git a/lk/lib/libc/string/memset.c b/lk/lib/libc/string/memset.c deleted file mode 100644 index 1abee39..0000000 --- a/lk/lib/libc/string/memset.c +++ /dev/null @@ -1,61 +0,0 @@ -/* -** Copyright 2005, Michael Noisternig. All rights reserved. -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -void * -memset(void *s, int c, size_t count) -{ - char *xs = (char *) s; - size_t len = (-(size_t)s) & (sizeof(size_t)-1); - int cc = c & 0xff; - - if ( count > len ) { - count -= len; - cc |= cc << 8; - cc |= cc << 16; - - // write to non-aligned memory byte-wise - for ( ; len > 0; len-- ) - *xs++ = c; - - // write to aligned memory dword-wise - for ( len = count/sizeof(size_t); len > 0; len-- ) { - *((size_t *)xs) = cc; - xs += sizeof(size_t); - } - - count &= sizeof(size_t)-1; - } - - // write remaining bytes - for ( ; count > 0; count-- ) - *xs++ = c; - - return s; -} diff --git a/lk/lib/libc/string/rules.mk b/lk/lib/libc/string/rules.mk deleted file mode 100644 index 1d038e6..0000000 --- a/lk/lib/libc/string/rules.mk +++ /dev/null @@ -1,42 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -C_STRING_OPS := \ - bcopy \ - bzero \ - memchr \ - memcmp \ - memcpy \ - memmove \ - memset \ - strcat \ - strchr \ - strcmp \ - strcoll \ - strcpy \ - strdup \ - strerror \ - strlcat \ - strlcpy \ - strlen \ - strncat \ - strncpy \ - strncmp \ - strnicmp \ - strnlen \ - strpbrk \ - strrchr \ - strspn \ - strstr \ - strtok \ - strxfrm - -LIBC_STRING_C_DIR := $(LOCAL_DIR) - -# include the arch specific string routines -# -# the makefile may filter out implemented versions from the C_STRING_OPS variable -include $(LOCAL_DIR)/arch/$(ARCH)/rules.mk - -OBJS += \ - $(addprefix $(LIBC_STRING_C_DIR)/,$(addsuffix .o,$(C_STRING_OPS))) - diff --git a/lk/lib/libc/string/strcat.c b/lk/lib/libc/string/strcat.c deleted file mode 100644 index 445b95a..0000000 --- a/lk/lib/libc/string/strcat.c +++ /dev/null @@ -1,42 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -char * -strcat(char *dest, char const*src) -{ - char *tmp = dest; - - while(*dest) - dest++; - while((*dest++ = *src++) != '\0') - ; - - return tmp; -} - diff --git a/lk/lib/libc/string/strchr.c b/lk/lib/libc/string/strchr.c deleted file mode 100644 index 4c6bb16..0000000 --- a/lk/lib/libc/string/strchr.c +++ /dev/null @@ -1,37 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -char * -strchr(const char *s, int c) -{ - for(; *s != (char) c; ++s) - if (*s == '\0') - return NULL; - return (char *) s; -} diff --git a/lk/lib/libc/string/strcmp.c b/lk/lib/libc/string/strcmp.c deleted file mode 100644 index 5402718..0000000 --- a/lk/lib/libc/string/strcmp.c +++ /dev/null @@ -1,41 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -int -strcmp(char const *cs, char const *ct) -{ - signed char __res; - - while(1) { - if((__res = *cs - *ct++) != 0 || !*cs++) - break; - } - - return __res; -} diff --git a/lk/lib/libc/string/strcoll.c b/lk/lib/libc/string/strcoll.c deleted file mode 100644 index 021946a..0000000 --- a/lk/lib/libc/string/strcoll.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -** Copyright 2004, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include - -int -strcoll(const char *s1, const char *s2) -{ - return strcmp(s1, s2); -} - diff --git a/lk/lib/libc/string/strcpy.c b/lk/lib/libc/string/strcpy.c deleted file mode 100644 index e6cc78e..0000000 --- a/lk/lib/libc/string/strcpy.c +++ /dev/null @@ -1,39 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -char * -strcpy(char *dest, char const *src) -{ - char *tmp = dest; - - while((*dest++ = *src++) != '\0') - ; - return tmp; -} - diff --git a/lk/lib/libc/string/strdup.c b/lk/lib/libc/string/strdup.c deleted file mode 100644 index bbfc6a3..0000000 --- a/lk/lib/libc/string/strdup.c +++ /dev/null @@ -1,43 +0,0 @@ -/* -** Copyright 2004, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -char * -strdup(const char *str) -{ - size_t len; - char *copy; - - len = strlen(str) + 1; - copy = malloc(len); - if (copy == NULL) - return NULL; - memcpy(copy, str, len); - return copy; -} - diff --git a/lk/lib/libc/string/strerror.c b/lk/lib/libc/string/strerror.c deleted file mode 100644 index 7319659..0000000 --- a/lk/lib/libc/string/strerror.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#include -#include - -char const * -strerror(int errnum) -{ - if (errnum < 0) { - return "General Error"; - } else { - return "No Error"; - } -} - diff --git a/lk/lib/libc/string/strlcat.c b/lk/lib/libc/string/strlcat.c deleted file mode 100644 index 5e3488d..0000000 --- a/lk/lib/libc/string/strlcat.c +++ /dev/null @@ -1,50 +0,0 @@ -/* -** Copyright 2002, Manuel J. Petit. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#include -#include - -size_t -strlcat(char *dst, char const *src, size_t s) -{ - size_t i; - size_t j= strnlen(dst, s); - - if(!s) { - return j+strlen(src); - } - - dst+= j; - - for(i= 0; ((i< s-1) && src[i]); i++) { - dst[i]= src[i]; - } - - dst[i]= 0; - - return j + i + strlen(src+i); -} diff --git a/lk/lib/libc/string/strlcpy.c b/lk/lib/libc/string/strlcpy.c deleted file mode 100644 index a0995a0..0000000 --- a/lk/lib/libc/string/strlcpy.c +++ /dev/null @@ -1,47 +0,0 @@ -/* -** Copyright 2002, Manuel J. Petit. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#include -#include - -size_t -strlcpy(char *dst, char const *src, size_t s) -{ - size_t i= 0; - - if(!s) { - return strlen(src); - } - - for(i= 0; ((i< s-1) && src[i]); i++) { - dst[i]= src[i]; - } - - dst[i]= 0; - - return i + strlen(src+i); -} diff --git a/lk/lib/libc/string/strlen.c b/lk/lib/libc/string/strlen.c deleted file mode 100644 index 9f87fc0..0000000 --- a/lk/lib/libc/string/strlen.c +++ /dev/null @@ -1,41 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -size_t -strlen(char const *s) -{ - size_t i; - - i= 0; - while(s[i]) { - i+= 1; - } - - return i; -} diff --git a/lk/lib/libc/string/strncat.c b/lk/lib/libc/string/strncat.c deleted file mode 100644 index fe0393d..0000000 --- a/lk/lib/libc/string/strncat.c +++ /dev/null @@ -1,48 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -char * -strncat(char *dest, char const *src, size_t count) -{ - char *tmp = dest; - - if(count > 0) { - while(*dest) - dest++; - while((*dest++ = *src++)) { - if (--count == 0) { - *dest = '\0'; - break; - } - } - } - - return tmp; -} - diff --git a/lk/lib/libc/string/strncmp.c b/lk/lib/libc/string/strncmp.c deleted file mode 100644 index 2f4d877..0000000 --- a/lk/lib/libc/string/strncmp.c +++ /dev/null @@ -1,42 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -int -strncmp(char const *cs, char const *ct, size_t count) -{ - signed char __res = 0; - - while(count > 0) { - if ((__res = *cs - *ct++) != 0 || !*cs++) - break; - count--; - } - - return __res; -} diff --git a/lk/lib/libc/string/strncpy.c b/lk/lib/libc/string/strncpy.c deleted file mode 100644 index b0bf174..0000000 --- a/lk/lib/libc/string/strncpy.c +++ /dev/null @@ -1,40 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -char * -strncpy(char *dest, char const *src, size_t count) -{ - char *tmp = dest; - - while(count-- && (*dest++ = *src++) != '\0') - ; - - return tmp; -} - diff --git a/lk/lib/libc/string/strnicmp.c b/lk/lib/libc/string/strnicmp.c deleted file mode 100644 index 0ca82b3..0000000 --- a/lk/lib/libc/string/strnicmp.c +++ /dev/null @@ -1,55 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include - -int -strnicmp(char const *s1, char const *s2, size_t len) -{ - unsigned char c1 = '\0'; - unsigned char c2 = '\0'; - - if(len > 0) { - do { - c1 = *s1; c2 = *s2; - s1++; s2++; - if(!c1) - break; - if(!c2) - break; - if(c1 == c2) - continue; - c1 = tolower(c1); - c2 = tolower(c2); - if (c1 != c2) - break; - } while(--len); - } - return (int)c1 - (int)c2; -} -#pragma weak strncasecmp=strnicmp diff --git a/lk/lib/libc/string/strnlen.c b/lk/lib/libc/string/strnlen.c deleted file mode 100644 index afd19a7..0000000 --- a/lk/lib/libc/string/strnlen.c +++ /dev/null @@ -1,38 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -size_t -strnlen(char const *s, size_t count) -{ - const char *sc; - - for(sc = s; count-- && *sc != '\0'; ++sc) - ; - return sc - s; -} diff --git a/lk/lib/libc/string/strpbrk.c b/lk/lib/libc/string/strpbrk.c deleted file mode 100644 index a97bcb6..0000000 --- a/lk/lib/libc/string/strpbrk.c +++ /dev/null @@ -1,44 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -char * -strpbrk(char const *cs, char const *ct) -{ - const char *sc1; - const char *sc2; - - for(sc1 = cs; *sc1 != '\0'; ++sc1) { - for(sc2 = ct; *sc2 != '\0'; ++sc2) { - if(*sc1 == *sc2) - return (char *)sc1; - } - } - - return NULL; -} diff --git a/lk/lib/libc/string/strrchr.c b/lk/lib/libc/string/strrchr.c deleted file mode 100644 index 5327659..0000000 --- a/lk/lib/libc/string/strrchr.c +++ /dev/null @@ -1,45 +0,0 @@ -/* -** Copyright 2001, Manuel J. Petit. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -char * -strrchr(char const *s, int c) -{ - char const *last= c?0:s; - - - while(*s) { - if(*s== c) { - last= s; - } - - s+= 1; - } - - return (char *)last; -} diff --git a/lk/lib/libc/string/strspn.c b/lk/lib/libc/string/strspn.c deleted file mode 100644 index 354c1d6..0000000 --- a/lk/lib/libc/string/strspn.c +++ /dev/null @@ -1,48 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -size_t -strspn(char const *s, char const *accept) -{ - const char *p; - const char *a; - size_t count = 0; - - for(p = s; *p != '\0'; ++p) { - for(a = accept; *a != '\0'; ++a) { - if(*p == *a) - break; - } - if(*a == '\0') - return count; - ++count; - } - - return count; -} diff --git a/lk/lib/libc/string/strstr.c b/lk/lib/libc/string/strstr.c deleted file mode 100644 index a36b3f9..0000000 --- a/lk/lib/libc/string/strstr.c +++ /dev/null @@ -1,46 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -char * -strstr(char const *s1, char const *s2) -{ - int l1, l2; - - l2 = strlen(s2); - if (!l2) - return (char *)s1; - l1 = strlen(s1); - while(l1 >= l2) { - l1--; - if (!memcmp(s1,s2,l2)) - return (char *)s1; - s1++; - } - return NULL; -} diff --git a/lk/lib/libc/string/strtok.c b/lk/lib/libc/string/strtok.c deleted file mode 100644 index b7c4585..0000000 --- a/lk/lib/libc/string/strtok.c +++ /dev/null @@ -1,51 +0,0 @@ -/* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -static char *___strtok = NULL; - -char * -strtok(char *s, char const *ct) -{ - char *sbegin, *send; - - sbegin = s ? s : ___strtok; - if (!sbegin) { - return NULL; - } - sbegin += strspn(sbegin,ct); - if (*sbegin == '\0') { - ___strtok = NULL; - return( NULL ); - } - send = strpbrk( sbegin, ct); - if (send && *send != '\0') - *send++ = '\0'; - ___strtok = send; - return (sbegin); -} diff --git a/lk/lib/libc/string/strxfrm.c b/lk/lib/libc/string/strxfrm.c deleted file mode 100644 index df005ec..0000000 --- a/lk/lib/libc/string/strxfrm.c +++ /dev/null @@ -1,42 +0,0 @@ -/* -** Copyright 2004, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include - -size_t -strxfrm(char *dest, const char *src, size_t n) -{ - size_t len = strlen(src); - - if(n) { - size_t copy_len = len < n ? len : n - 1; - memcpy(dest, src, copy_len); - dest[copy_len] = 0; - } - return len; -} - diff --git a/lk/lib/ptable/ptable.c b/lk/lib/ptable/ptable.c deleted file mode 100644 index 3ddf5fa..0000000 --- a/lk/lib/ptable/ptable.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. - * - *Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -void ptable_init(struct ptable *ptable) -{ - ASSERT(ptable); - - memset(ptable, 0, sizeof(struct ptable)); -} - -char* ptype[] = {"Apps", "Modem"}; -char* pperm[] = {"No", "Yes"}; - -void ptable_add(struct ptable *ptable, char *name, unsigned start, - unsigned length, unsigned flags, char type, char perm) -{ - struct ptentry *ptn; - - ASSERT(ptable && ptable->count < MAX_PTABLE_PARTS); - - ptn = &ptable->parts[ptable->count++]; - strncpy(ptn->name, name, MAX_PTENTRY_NAME); - ptn->start = start; - ptn->length = length; - ptn->flags = flags; - ptn->type = type; - ptn->perm = perm; -} - -void ptable_dump(struct ptable *ptable) -{ - struct ptentry *ptn; - int i; - - for (i = 0; i < ptable->count; ++i) { - ptn = &ptable->parts[i]; - dprintf(INFO, "ptn %d name='%s' start=%08x len=%08x " - "flags=%08x type=%s Writable=%s\n", i, ptn->name, ptn->start, ptn->length, - ptn->flags, ptype[ptn->type], pperm[ptn->perm]); - } -} - -struct ptentry *ptable_find(struct ptable *ptable, const char *name) -{ - struct ptentry *ptn; - int i; - - for (i = 0; i < ptable->count; ++i) { - ptn = &ptable->parts[i]; - if (!strcmp(ptn->name, name)) - return ptn; - } - - return NULL; -} - -struct ptentry *ptable_get(struct ptable *ptable, int n) -{ - if (n >= ptable->count) - return NULL; - return &ptable->parts[n]; -} - -int ptable_size(struct ptable *ptable) -{ - return ptable->count; -} diff --git a/lk/lib/ptable/rules.mk b/lk/lib/ptable/rules.mk deleted file mode 100644 index d3ff349..0000000 --- a/lk/lib/ptable/rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/ptable.o diff --git a/lk/make/build.mk b/lk/make/build.mk deleted file mode 100644 index 028dc2c..0000000 --- a/lk/make/build.mk +++ /dev/null @@ -1,30 +0,0 @@ -# comment out or override if you want to see the full output of each command -NOECHO ?= @ - -$(OUTBIN): $(OUTELF) - @echo generating image: $@ - $(NOECHO)$(SIZE) $< - $(NOCOPY)$(OBJCOPY) -O binary $< $@ - -$(OUTELF): $(ALLOBJS) $(LINKER_SCRIPT) - @echo linking $@ - $(NOECHO)$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) $(ALLOBJS) $(LIBGCC) -o $@ - -$(OUTELF).sym: $(OUTELF) - @echo generating symbols: $@ - $(NOECHO)$(OBJDUMP) -t $< | $(CPPFILT) > $@ - -$(OUTELF).lst: $(OUTELF) - @echo generating listing: $@ - $(NOECHO)$(OBJDUMP) -Mreg-names-raw -d $< | $(CPPFILT) > $@ - -$(OUTELF).debug.lst: $(OUTELF) - @echo generating listing: $@ - $(NOECHO)$(OBJDUMP) -Mreg-names-raw -S $< | $(CPPFILT) > $@ - -$(OUTELF).size: $(OUTELF) - @echo generating size map: $@ - $(NOECHO)$(NM) -S --size-sort $< > $@ - -include arch/$(ARCH)/compile.mk - diff --git a/lk/make/macros.mk b/lk/make/macros.mk deleted file mode 100644 index 13c1d9b..0000000 --- a/lk/make/macros.mk +++ /dev/null @@ -1,5 +0,0 @@ -# Find the local dir of the make file -GET_LOCAL_DIR = $(patsubst %/,%,$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))) - -# makes sure the target dir exists -MKDIR = if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi diff --git a/lk/make/module.mk b/lk/make/module.mk deleted file mode 100644 index 9e82ef3..0000000 --- a/lk/make/module.mk +++ /dev/null @@ -1,21 +0,0 @@ -# included from the main makefile to include a set of rules.mk to satisfy -# the current MODULE list. If as a byproduct of including the rules.mk -# more stuff shows up on the MODULE list, recurse - -# sort and filter out any modules that have already been included -MODULES := $(sort $(MODULES)) -MODULES := $(filter-out $(ALLMODULES),$(MODULES)) - -ifneq ($(MODULES),) - -ALLMODULES += $(MODULES) -ALLMODULES := $(sort $(ALLMODULES)) -INCMODULES := $(MODULES) -MODULES := -$(info including $(INCMODULES)) -include $(addsuffix /rules.mk,$(INCMODULES)) - -include make/module.mk - -endif - diff --git a/lk/makefile b/lk/makefile deleted file mode 100644 index d6687da..0000000 --- a/lk/makefile +++ /dev/null @@ -1,188 +0,0 @@ --include local.mk -include make/macros.mk - -# If one of our goals (from the commandline) happens to have a -# matching project/goal.mk, then we should re-invoke make with -# that project name specified... - -project-name := $(firstword $(MAKECMDGOALS)) - -ifneq ($(project-name),) -ifneq ($(wildcard project/$(project-name).mk),) -do-nothing := 1 -$(MAKECMDGOALS) _all: make-make -make-make: - @PROJECT=$(project-name) $(MAKE) $(filter-out $(project-name), $(MAKECMDGOALS)) -endif -endif - -ifeq ($(do-nothing),) - -ifeq ($(PROJECT),) -$(error No project specified. Use "make projectname" or put "PROJECT := projectname" in local.mk) -endif - -DEBUG ?= 0 - -ifndef $(BOOTLOADER_OUT) -BOOTLOADER_OUT := . -endif - -LK_TOP_DIR:= . -BUILDDIR := $(BOOTLOADER_OUT)/build-$(PROJECT) -OUTBIN := $(BUILDDIR)/lk.bin -OUTELF := $(BUILDDIR)/lk -CONFIGHEADER := $(BUILDDIR)/config.h - -INCLUDES := -I$(BUILDDIR) -Iinclude -CFLAGS := -O2 -g -fno-builtin -finline -W -Wall -Wno-multichar -Wno-unused-parameter -Wno-unused-function -include $(CONFIGHEADER) -#CFLAGS += -Werror -ifeq ($(EMMC_BOOT),1) - CFLAGS += -D_EMMC_BOOT=1 -endif -# When the host arch is ARM, ensure stack protection code is not emitted since -# it's not supported by the bootloader's libc -ifneq ($(shell uname -m | grep "arm.*"),) - CFLAGS += -fno-stack-protector -endif -CPPFLAGS := -fno-exceptions -fno-rtti -fno-threadsafe-statics -#CPPFLAGS += -Weffc++ -ASMFLAGS := -DASSEMBLY -LDFLAGS := - -CFLAGS += -ffunction-sections -fdata-sections -LDFLAGS += -gc-sections - -# top level rule -all:: $(OUTBIN) $(OUTELF).lst $(OUTELF).debug.lst $(OUTELF).sym $(OUTELF).size APPSBOOTHEADER - -# the following three object lists are identical except for the ordering -# which is bootobjs, kobjs, objs -BOOTOBJS := -OBJS := - -# a linker script needs to be declared in one of the project/target/platform files -LINKER_SCRIPT := - -# anything you add here will be deleted in make clean -GENERATED := $(CONFIGHEADER) - -# anything added to DEFINES will be put into $(BUILDDIR)/config.h -DEFINES := LK=1 - -# Anything added to SRCDEPS will become a dependency of every source file in the system. -# Useful for header files that may be included by one or more source files. -SRCDEPS := $(CONFIGHEADER) - -# these need to be filled out by the project/target/platform rules.mk files -TARGET := -PLATFORM := -ARCH := -ALLMODULES := -MODULES := - -# any rules you put here will also be built by the system before considered being complete -EXTRA_BUILDDEPS := - -# any rules you put here will be depended on in clean builds -EXTRA_CLEANDEPS := - -include project/$(PROJECT).mk -include target/$(TARGET)/rules.mk -include target/$(TARGET)/tools/makefile -include platform/$(PLATFORM)/rules.mk -include arch/$(ARCH)/rules.mk -include platform/rules.mk -include target/rules.mk -include kernel/rules.mk -include dev/rules.mk -include app/rules.mk - -# recursively include any modules in the MODULE variable, leaving a trail of included -# modules in the ALLMODULES list -include make/module.mk - -# any extra top level build dependencies that someone declared -all:: $(EXTRA_BUILDDEPS) - -ALLOBJS := \ - $(BOOTOBJS) \ - $(OBJS) - -# add some automatic configuration defines -DEFINES += \ - BOARD=$(PROJECT) \ - PROJECT_$(PROJECT)=1 \ - TARGET_$(TARGET)=1 \ - PLATFORM_$(PLATFORM)=1 \ - ARCH_$(ARCH)=1 \ - $(addsuffix =1,$(addprefix WITH_,$(ALLMODULES))) - -# debug build? -ifneq ($(DEBUG),) -DEFINES += \ - DEBUG=$(DEBUG) -endif - -ALLOBJS := $(addprefix $(BUILDDIR)/,$(ALLOBJS)) - -DEPS := $(ALLOBJS:%o=%d) - -# default to no ccache -CCACHE ?= -CC := $(CCACHE) $(TOOLCHAIN_PREFIX)gcc -LD := $(TOOLCHAIN_PREFIX)ld -OBJDUMP := $(TOOLCHAIN_PREFIX)objdump -OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy -CPPFILT := $(TOOLCHAIN_PREFIX)c++filt -SIZE := $(TOOLCHAIN_PREFIX)size -NM := $(TOOLCHAIN_PREFIX)nm - -# comment out or override if you want to see the full output of each command -NOECHO ?= @ - -# the logic to compile and link stuff is in here -include make/build.mk - -clean: $(EXTRA_CLEANDEPS) - rm -f $(ALLOBJS) $(DEPS) $(GENERATED) $(OUTBIN) $(OUTELF) $(OUTELF).lst - -spotless: - rm -rf build-* - -install: all - scp $(OUTBIN) 192.168.0.4:/tftproot - -# generate a config.h file with all of the DEFINES laid out in #define format -configheader: - -$(CONFIGHEADER): configheader - @$(MKDIR) - @echo generating $@ - @rm -f $(CONFIGHEADER).tmp; \ - echo \#ifndef __CONFIG_H > $(CONFIGHEADER).tmp; \ - echo \#define __CONFIG_H >> $(CONFIGHEADER).tmp; \ - for d in `echo $(DEFINES) | tr [:lower:] [:upper:]`; do \ - echo "#define $$d" | sed "s/=/\ /g;s/-/_/g;s/\//_/g" >> $(CONFIGHEADER).tmp; \ - done; \ - echo \#endif >> $(CONFIGHEADER).tmp; \ - if [ -f "$(CONFIGHEADER)" ]; then \ - if cmp "$(CONFIGHEADER).tmp" "$(CONFIGHEADER)"; then \ - rm -f $(CONFIGHEADER).tmp; \ - else \ - mv $(CONFIGHEADER).tmp $(CONFIGHEADER); \ - fi \ - else \ - mv $(CONFIGHEADER).tmp $(CONFIGHEADER); \ - fi - -# Empty rule for the .d files. The above rules will build .d files as a side -# effect. Only works on gcc 3.x and above, however. -%.d: - -ifeq ($(filter $(MAKECMDGOALS), clean), ) --include $(DEPS) -endif - -.PHONY: configheader -endif diff --git a/lk/platform/debug.c b/lk/platform/debug.c deleted file mode 100644 index a38ccbc..0000000 --- a/lk/platform/debug.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - - diff --git a/lk/platform/init.c b/lk/platform/init.c deleted file mode 100644 index 113cd41..0000000 --- a/lk/platform/init.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include - -/* - * default implementations of these routines, if the platform code - * chooses not to implement. - */ - -__WEAK void platform_init_mmu_mappings(void) -{ -} - -__WEAK void platform_early_init(void) -{ -} - -__WEAK void platform_init(void) -{ -} - -__WEAK void display_init(void) -{ -} - -__WEAK void display_shutdown(void) -{ -} - -__WEAK void platform_config_interleaved_mode_gpios(void) -{ -} diff --git a/lk/platform/msm_shared/debug.c b/lk/platform/msm_shared/debug.c deleted file mode 100644 index 935d886..0000000 --- a/lk/platform/msm_shared/debug.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2009, Google Inc. - * All rights reserved. - * Copyright (c) 2009, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include - -void _dputc(char c) -{ -#if WITH_DEBUG_DCC - if (c == '\n') { - while (dcc_putc('\r') < 0); - } - while (dcc_putc(c) < 0); -#endif -#if WITH_DEBUG_UART - uart_putc(0, c); -#endif -#if WITH_DEBUG_FBCON && WITH_DEV_FBCON - fbcon_putc(c); -#endif -#if WITH_DEBUG_JTAG - jtag_dputc(c); -#endif -} - -int dgetc(char *c) -{ - int n; -#if WITH_DEBUG_DCC - n = dcc_getc(); -#elif WITH_DEBUG_UART - n = uart_getc(0, 0); -#else - n = -1; -#endif - if (n < 0) { - return -1; - } else { - *c = n; - return 0; - } -} - -void platform_halt(void) -{ - dprintf(INFO, "HALT: spinning forever...\n"); - for(;;); -} - diff --git a/lk/platform/msm_shared/dmov.h b/lk/platform/msm_shared/dmov.h deleted file mode 100644 index 76ebf56..0000000 --- a/lk/platform/msm_shared/dmov.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __PLATFORM_MSM_SHARED_DMOV_H -#define __PLATFORM_MSM_SHARED_DMOV_H - -#ifdef PLATFORM_MSM7X30 -#define MSM_DMOV_BASE 0xAC400000 -#else -#define MSM_DMOV_BASE 0xA9700000 -#endif - -/* see 80-VA736-2 C pp 415-439 */ - -#define DMOV_SD0(off, ch) (MSM_DMOV_BASE + 0x0000 + (off) + ((ch) << 2)) -#define DMOV_SD1(off, ch) (MSM_DMOV_BASE + 0x0400 + (off) + ((ch) << 2)) -#define DMOV_SD2(off, ch) (MSM_DMOV_BASE + 0x0800 + (off) + ((ch) << 2)) -#define DMOV_SD3(off, ch) (MSM_DMOV_BASE + 0x0C00 + (off) + ((ch) << 2)) - -#ifdef PLATFORM_MSM7X30 -#define DMOV_SDn DMOV_SD2 -#else -#define DMOV_SDn DMOV_SD3 -#endif - - - -/* only security domain 3 is available to the ARM11 -** -** SD0 -> mARM trusted, SD1 -> mARM nontrusted, SD2 -> aDSP, SD3 -> aARM -** -*/ - -#define DMOV_CMD_PTR(ch) DMOV_SDn(0x000, ch) -#define DMOV_CMD_LIST (0 << 29) /* does not work */ -#define DMOV_CMD_PTR_LIST (1 << 29) /* works */ -#define DMOV_CMD_INPUT_CFG (2 << 29) /* untested */ -#define DMOV_CMD_OUTPUT_CFG (3 << 29) /* untested */ -#define DMOV_CMD_ADDR(addr) ((addr) >> 3) - -#define DMOV_RSLT(ch) DMOV_SDn(0x040, ch) -#define DMOV_RSLT_VALID (1 << 31) /* 0 == host has empties result fifo */ -#define DMOV_RSLT_ERROR (1 << 3) -#define DMOV_RSLT_FLUSH (1 << 2) -#define DMOV_RSLT_DONE (1 << 1) /* top pointer done */ -#define DMOV_RSLT_USER (1 << 0) /* command with FR force result */ - -#define DMOV_FLUSH0(ch) DMOV_SDn(0x080, ch) -#define DMOV_FLUSH1(ch) DMOV_SDn(0x0C0, ch) -#define DMOV_FLUSH2(ch) DMOV_SDn(0x100, ch) -#define DMOV_FLUSH3(ch) DMOV_SDn(0x140, ch) -#define DMOV_FLUSH4(ch) DMOV_SDn(0x180, ch) -#define DMOV_FLUSH5(ch) DMOV_SDn(0x1C0, ch) - -#define DMOV_STATUS(ch) DMOV_SDn(0x200, ch) -#define DMOV_STATUS_RSLT_COUNT(n) (((n) >> 29)) -#define DMOV_STATUS_CMD_COUNT(n) (((n) >> 27) & 3) -#define DMOV_STATUS_RSLT_VALID (1 << 1) -#define DMOV_STATUS_CMD_PTR_RDY (1 << 0) - -#define DMOV_ISR DMOV_SDn(0x380, 0) - -#define DMOV_CONFIG(ch) DMOV_SDn(0x300, ch) -#define DMOV_CONFIG_FORCE_TOP_PTR_RSLT (1 << 2) -#define DMOV_CONFIG_FOREC_FLUSH_RSLT (1 << 1) -#define DMOV_CONFIG_IRQ_EN (1 << 0) - -/* channel assignments - from qc/dmov_7500.h */ - -#define DMOV_NAND_CHAN 7 -#define DMOV_NAND_CRCI_CMD 5 -#define DMOV_NAND_CRCI_DATA 4 - -#define DMOV_SDC1_CHAN 8 -#define DMOV_SDC1_CRCI 6 - -#define DMOV_SDC2_CHAN 8 -#define DMOV_SDC2_CRCI 7 - -#define DMOV_TSIF_CHAN 10 -#define DMOV_TSIF_CRCI 10 - -#define DMOV_USB_CHAN 11 - -/* no client rate control ifc (eg, ram) */ -#define DMOV_NONE_CRCI 0 - - -/* If the CMD_PTR register has CMD_PTR_LIST selected, the data mover -** is going to walk a list of 32bit pointers as described below. Each -** pointer points to a *array* of dmov_s, etc structs. The last pointer -** in the list is marked with CMD_PTR_LP. The last struct in each array -** is marked with CMD_LC (see below). -*/ -#define CMD_PTR_ADDR(addr) ((addr) >> 3) -#define CMD_PTR_LP (1 << 31) /* last pointer */ -#define CMD_PTR_PT (3 << 29) /* ? */ - - -/* Single Item Mode -- seems to work as expected */ -typedef struct { - unsigned cmd; - unsigned src; - unsigned dst; - unsigned len; -} dmov_s; - -/* Scatter/Gather Mode -- does this work?*/ -typedef struct { - unsigned cmd; - unsigned src_dscr; - unsigned dst_dscr; - unsigned _reserved; -} dmov_sg; - -/* bits for the cmd field of the above structures */ - -#define CMD_LC (1 << 31) /* last command */ -#define CMD_FR (1 << 22) /* force result -- does not work? */ -#define CMD_OCU (1 << 21) /* other channel unblock */ -#define CMD_OCB (1 << 20) /* other channel block */ -#define CMD_TCB (1 << 19) /* ? */ -#define CMD_DAH (1 << 18) /* destination address hold -- does not work?*/ -#define CMD_SAH (1 << 17) /* source address hold -- does not work? */ - -#define CMD_MODE_SINGLE (0 << 0) /* dmov_s structure used */ -#define CMD_MODE_SG (1 << 0) /* untested */ -#define CMD_MODE_IND_SG (2 << 0) /* untested */ -#define CMD_MODE_BOX (3 << 0) /* untested */ - -#define CMD_DST_SWAP_BYTES (1 << 14) /* exchange each byte n with byte n+1 */ -#define CMD_DST_SWAP_SHORTS (1 << 15) /* exchange each short n with short n+1 */ -#define CMD_DST_SWAP_WORDS (1 << 16) /* exchange each word n with word n+1 */ - -#define CMD_SRC_SWAP_BYTES (1 << 11) /* exchange each byte n with byte n+1 */ -#define CMD_SRC_SWAP_SHORTS (1 << 12) /* exchange each short n with short n+1 */ -#define CMD_SRC_SWAP_WORDS (1 << 13) /* exchange each word n with word n+1 */ - -#define CMD_DST_CRCI(n) (((n) & 15) << 7) -#define CMD_SRC_CRCI(n) (((n) & 15) << 3) - - -/* NOTES: -** -** Looks like Channels 4, 5, 6, 7, 8, 10, 11 are available to the ARM11 -** -*/ -#endif /* __PLATFORM_MSM_SHARED_DMOV_H */ diff --git a/lk/platform/msm_shared/hsusb.c b/lk/platform/msm_shared/hsusb.c deleted file mode 100644 index bdd8e2e..0000000 --- a/lk/platform/msm_shared/hsusb.c +++ /dev/null @@ -1,935 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "hsusb.h" - -int charger_usb_disconnected(void); -int charger_usb_i(unsigned current); -int charger_usb_is_pc_connected(void); -int charger_usb_is_charger_connected(void); - -/* common code - factor out into a shared file */ - -struct udc_descriptor { - struct udc_descriptor *next; - unsigned short tag; /* ((TYPE << 8) | NUM) */ - unsigned short len; /* total length */ - unsigned char data[0]; -}; - -struct udc_descriptor *udc_descriptor_alloc(unsigned type, unsigned num, unsigned len) -{ - struct udc_descriptor *desc; - if ((len > 255) || (len < 2) || (num > 255) || (type > 255)) - return 0; - - if(!(desc = malloc(sizeof(struct udc_descriptor) + len))) - return 0; - - desc->next = 0; - desc->tag = (type << 8) | num; - desc->len = len; - desc->data[0] = len; - desc->data[1] = type; - - return desc; -} - -static struct udc_descriptor *desc_list = 0; -static unsigned next_string_id = 1; - -void udc_descriptor_register(struct udc_descriptor *desc) -{ - desc->next = desc_list; - desc_list = desc; -} - -unsigned udc_string_desc_alloc(const char *str) -{ - unsigned len; - struct udc_descriptor *desc; - unsigned char *data; - - if (next_string_id > 255) - return 0; - - if (!str) - return 0; - - len = strlen(str); - desc = udc_descriptor_alloc(TYPE_STRING, next_string_id, len * 2 + 2); - if (!desc) - return 0; - next_string_id++; - - /* expand ascii string to utf16 */ - data = desc->data + 2; - while (len-- > 0) { - *data++ = *str++; - *data++ = 0; - } - - udc_descriptor_register(desc); - return desc->tag & 0xff; -} - -/* end of common code */ - -__WEAK void hsusb_clock_init(void) -{ - return 0; -} - -#if 1 -#define DBG(x...) do {} while(0) -#else -#define DBG(x...) dprintf(INFO, x) -#endif - -#define DBG1(x...) dprintf(INFO, x) - -#define usb_status(a,b) - -struct usb_request { - struct udc_request req; - struct ept_queue_item *item; -}; - -struct udc_endpoint -{ - struct udc_endpoint *next; - unsigned bit; - struct ept_queue_head *head; - struct usb_request *req; - unsigned char num; - unsigned char in; - unsigned short maxpkt; -}; - -struct udc_endpoint *ept_list = 0; -struct ept_queue_head *epts = 0; - -static int usb_online = 0; -static int usb_highspeed = 0; - -static struct udc_device *the_device; -static struct udc_gadget *the_gadget; - -struct udc_endpoint *_udc_endpoint_alloc(unsigned num, unsigned in, unsigned max_pkt) -{ - struct udc_endpoint *ept; - unsigned cfg; - - ept = malloc(sizeof(*ept)); - - ept->maxpkt = max_pkt; - ept->num = num; - ept->in = !!in; - ept->req = 0; - - cfg = CONFIG_MAX_PKT(max_pkt) | CONFIG_ZLT; - - if(ept->in) { - ept->bit = EPT_TX(ept->num); - } else { - ept->bit = EPT_RX(ept->num); - if(num == 0) - cfg |= CONFIG_IOS; - } - - ept->head = epts + (num * 2) + (ept->in); - ept->head->config = cfg; - - ept->next = ept_list; - ept_list = ept; - -// arch_clean_invalidate_cache_range(ept->head, 64); - DBG("ept%d %s @%p/%p max=%d bit=%x\n", - num, in ? "in":"out", ept, ept->head, max_pkt, ept->bit); - - return ept; -} - -static unsigned ept_alloc_table = EPT_TX(0) | EPT_RX(0); - -struct udc_endpoint *udc_endpoint_alloc(unsigned type, unsigned maxpkt) -{ - struct udc_endpoint *ept; - unsigned n; - unsigned in; - - if (type == UDC_TYPE_BULK_IN) { - in = 1; - } else if (type == UDC_TYPE_BULK_OUT) { - in = 0; - } else { - return 0; - } - - for (n = 1; n < 16; n++) { - unsigned bit = in ? EPT_TX(n) : EPT_RX(n); - if (ept_alloc_table & bit) - continue; - ept = _udc_endpoint_alloc(n, in, maxpkt); - if (ept) - ept_alloc_table |= bit; - return ept; - } - return 0; -} - -void udc_endpoint_free(struct udc_endpoint *ept) -{ - /* todo */ -} - -static void endpoint_enable(struct udc_endpoint *ept, unsigned yes) -{ - unsigned n = readl(USB_ENDPTCTRL(ept->num)); - - if(yes) { - if(ept->in) { - n |= (CTRL_TXE | CTRL_TXR | CTRL_TXT_BULK); - } else { - n |= (CTRL_RXE | CTRL_RXR | CTRL_RXT_BULK); - } - - if(ept->num != 0) { - /* XXX should be more dynamic... */ - if(usb_highspeed) { - ept->head->config = CONFIG_MAX_PKT(512) | CONFIG_ZLT; - } else { - ept->head->config = CONFIG_MAX_PKT(64) | CONFIG_ZLT; - } - } - } - writel(n, USB_ENDPTCTRL(ept->num)); -} - -struct udc_request *udc_request_alloc(void) -{ - struct usb_request *req; - req = malloc(sizeof(*req)); - req->req.buf = 0; - req->req.length = 0; - req->item = memalign(32, 32); - return &req->req; -} - -void udc_request_free(struct udc_request *req) -{ - free(req); -} - -int udc_request_queue(struct udc_endpoint *ept, struct udc_request *_req) -{ - struct usb_request *req = (struct usb_request *) _req; - struct ept_queue_item *item = req->item; - unsigned phys = (unsigned) req->req.buf; - - item->next = TERMINATE; - item->info = INFO_BYTES(req->req.length) | INFO_IOC | INFO_ACTIVE; - item->page0 = phys; - item->page1 = (phys & 0xfffff000) + 0x1000; - - enter_critical_section(); - ept->head->next = (unsigned) item; - ept->head->info = 0; - ept->req = req; - -// arch_clean_invalidate_cache_range(item, 32); -// arch_clean_invalidate_cache_range(ept->head, 64); -// arch_clean_invalidate_cache_range(req->req.buf, req->req.length); - DBG("ept%d %s queue req=%p\n", - ept->num, ept->in ? "in" : "out", req); - - writel(ept->bit, USB_ENDPTPRIME); - exit_critical_section(); - return 0; -} - -static void handle_ept_complete(struct udc_endpoint *ept) -{ - struct ept_queue_item *item; - unsigned actual; - int status; - struct usb_request *req; - - DBG("ept%d %s complete req=%p\n", - ept->num, ept->in ? "in" : "out", ept->req); - - req = ept->req; - if(req) { - ept->req = 0; - - item = req->item; - - /* For some reason we are getting the notification for - * transfer completion before the active bit has cleared. - * HACK: wait for the ACTIVE bit to clear: - */ - while (readl(&(item->info)) & INFO_ACTIVE) ; - -// arch_clean_invalidate_cache_range(item, 32); -// arch_clean_invalidate_cache_range(req->req.buf, req->req.length); - - if(item->info & 0xff) { - actual = 0; - status = -1; - dprintf(INFO, "EP%d/%s FAIL nfo=%x pg0=%x\n", - ept->num, ept->in ? "in" : "out", item->info, item->page0); - } else { - actual = req->req.length - ((item->info >> 16) & 0x7fff); - status = 0; - } - if(req->req.complete) - req->req.complete(&req->req, actual, status); - } -} - -static const char *reqname(unsigned r) -{ - switch(r) { - case GET_STATUS: return "GET_STATUS"; - case CLEAR_FEATURE: return "CLEAR_FEATURE"; - case SET_FEATURE: return "SET_FEATURE"; - case SET_ADDRESS: return "SET_ADDRESS"; - case GET_DESCRIPTOR: return "GET_DESCRIPTOR"; - case SET_DESCRIPTOR: return "SET_DESCRIPTOR"; - case GET_CONFIGURATION: return "GET_CONFIGURATION"; - case SET_CONFIGURATION: return "SET_CONFIGURATION"; - case GET_INTERFACE: return "GET_INTERFACE"; - case SET_INTERFACE: return "SET_INTERFACE"; - default: return "*UNKNOWN*"; - } -} - -static struct udc_endpoint *ep0in, *ep0out; -static struct udc_request *ep0req; - -static void setup_ack(void) -{ - ep0req->complete = 0; - ep0req->length = 0; - udc_request_queue(ep0in, ep0req); -} - -static void ep0in_complete(struct udc_request *req, unsigned actual, int status) -{ - DBG("ep0in_complete %p %d %d\n", req, actual, status); - if(status == 0) { - req->length = 0; - req->complete = 0; - udc_request_queue(ep0out, req); - } -} - -static void setup_tx(void *buf, unsigned len) -{ - DBG("setup_tx %p %d\n", buf, len); - memcpy(ep0req->buf, buf, len); - ep0req->complete = ep0in_complete; - ep0req->length = len; - udc_request_queue(ep0in, ep0req); -} - -static unsigned char usb_config_value = 0; - -#define SETUP(type,request) (((type) << 8) | (request)) - -static void handle_setup(struct udc_endpoint *ept) -{ - struct setup_packet s; - - memcpy(&s, ept->head->setup_data, sizeof(s)); - writel(ept->bit, USB_ENDPTSETUPSTAT); - -#if 0 - DBG("handle_setup type=0x%02x req=0x%02x val=%d idx=%d len=%d (%s)\n", - s.type, s.request, s.value, s.index, s.length, - reqname(s.request)); -#endif - switch (SETUP(s.type,s.request)) { - case SETUP(DEVICE_READ, GET_STATUS): { - unsigned zero = 0; - if (s.length == 2) { - setup_tx(&zero, 2); - return; - } - break; - } - case SETUP(DEVICE_READ, GET_DESCRIPTOR): { - struct udc_descriptor *desc; - /* usb_highspeed? */ - for (desc = desc_list; desc; desc = desc->next) { - if (desc->tag == s.value) { - unsigned len = desc->len; - if (len > s.length) len = s.length; - setup_tx(desc->data, len); - return; - } - } - break; - } - case SETUP(DEVICE_READ, GET_CONFIGURATION): - /* disabling this causes data transaction failures on OSX. Why? */ - if ((s.value == 0) && (s.index == 0) && (s.length == 1)) { - setup_tx(&usb_config_value, 1); - return; - } - break; - case SETUP(DEVICE_WRITE, SET_CONFIGURATION): - if (s.value == 1) { - struct udc_endpoint *ept; - /* enable endpoints */ - for (ept = ept_list; ept; ept = ept->next){ - if (ept->num == 0) - continue; - endpoint_enable(ept, s.value); - } - usb_config_value = 1; -#ifdef ENABLE_BATTERY_CHARGING - if(HOST_CHARGER == TRUE) { - charger_usb_i(500); - } -#endif - the_gadget->notify(the_gadget, UDC_EVENT_ONLINE); - } else { - writel(0, USB_ENDPTCTRL(1)); - usb_config_value = 0; - the_gadget->notify(the_gadget, UDC_EVENT_OFFLINE); - } - setup_ack(); - usb_online = s.value ? 1 : 0; - usb_status(s.value ? 1 : 0, usb_highspeed); - return; - case SETUP(DEVICE_WRITE, SET_ADDRESS): - /* write address delayed (will take effect - ** after the next IN txn) - */ - writel((s.value << 25) | (1 << 24), USB_DEVICEADDR); - setup_ack(); - return; - case SETUP(INTERFACE_WRITE, SET_INTERFACE): - /* if we ack this everything hangs */ - /* per spec, STALL is valid if there is not alt func */ - goto stall; - case SETUP(ENDPOINT_WRITE, CLEAR_FEATURE): { - struct udc_endpoint *ept; - unsigned num = s.index & 15; - unsigned in = !!(s.index & 0x80); - - if ((s.value == 0) && (s.length == 0)) { - DBG("clr feat %d %d\n", num, in); - for (ept = ept_list; ept; ept = ept->next) { - if ((ept->num == num) && (ept->in == in)) { - endpoint_enable(ept, 1); - setup_ack(); - return; - } - } - } - break; - } - } - - dprintf(INFO, "STALL %s %d %d %d %d %d\n", - reqname(s.request), - s.type, s.request, s.value, s.index, s.length); - -stall: - writel((1<<16) | (1 << 0), USB_ENDPTCTRL(ept->num)); -} - -unsigned ulpi_read(unsigned reg) -{ - /* initiate read operation */ - writel(ULPI_RUN | ULPI_READ | ULPI_ADDR(reg), - USB_ULPI_VIEWPORT); - - /* wait for completion */ - while(readl(USB_ULPI_VIEWPORT) & ULPI_RUN) ; - - return ULPI_DATA_READ(readl(USB_ULPI_VIEWPORT)); -} - -void ulpi_write(unsigned val, unsigned reg) -{ - /* initiate write operation */ - writel(ULPI_RUN | ULPI_WRITE | - ULPI_ADDR(reg) | ULPI_DATA(val), - USB_ULPI_VIEWPORT); - - /* wait for completion */ - while(readl(USB_ULPI_VIEWPORT) & ULPI_RUN) ; -} - -#define USB_CLK 0x00902910 -#define USB_PHY_CLK 0x00902E20 -#define CLK_RESET_ASSERT 0x1 -#define CLK_RESET_DEASSERT 0x0 -#define CLK_RESET(x,y) writel((y), (x)); - -static int msm_otg_xceiv_reset() -{ - CLK_RESET(USB_CLK, CLK_RESET_ASSERT); - CLK_RESET(USB_PHY_CLK, CLK_RESET_ASSERT); - mdelay(20); - CLK_RESET(USB_PHY_CLK, CLK_RESET_DEASSERT); - CLK_RESET(USB_CLK, CLK_RESET_DEASSERT); - mdelay(20); - - /* select ULPI phy */ - writel(0x81000000, USB_PORTSC); - return 0; -} - -void board_usb_init(void); -void board_ulpi_init(void); - -int udc_init(struct udc_device *dev) -{ - hsusb_clock_init(); - - epts = memalign(4096, 4096); - - dprintf(INFO, "USB init ept @ %p\n", epts); - memset(epts, 0, 32 * sizeof(struct ept_queue_head)); - - //dprintf(INFO, "USB ID %08x\n", readl(USB_ID)); -// board_usb_init(); - - /* select ULPI phy */ -#ifdef PLATFORM_MSM8X60 - msm_otg_xceiv_reset(); -#else - writel(0x81000000, USB_PORTSC); -#endif - /* RESET */ - writel(0x00080002, USB_USBCMD); - - thread_sleep(20); - -// board_ulpi_init(); - -// arch_clean_invalidate_cache_range(epts, 32 * sizeof(struct ept_queue_head)); - writel((unsigned) epts, USB_ENDPOINTLISTADDR); - - /* select DEVICE mode */ - writel(0x02, USB_USBMODE); - - writel(0xffffffff, USB_ENDPTFLUSH); - thread_sleep(20); - - ep0out = _udc_endpoint_alloc(0, 0, 64); - ep0in = _udc_endpoint_alloc(0, 1, 64); - ep0req = udc_request_alloc(); - ep0req->buf = malloc(4096); - - { - /* create and register a language table descriptor */ - /* language 0x0409 is US English */ - struct udc_descriptor *desc = udc_descriptor_alloc(TYPE_STRING, 0, 4); - desc->data[2] = 0x09; - desc->data[3] = 0x04; - udc_descriptor_register(desc); - } - - the_device = dev; - return 0; -} - -enum handler_return udc_interrupt(void *arg) -{ - struct udc_endpoint *ept; - unsigned ret = INT_NO_RESCHEDULE; - unsigned n = readl(USB_USBSTS); - writel(n, USB_USBSTS); - - n &= (STS_SLI | STS_URI | STS_PCI | STS_UI | STS_UEI); - - if (n == 0) - return ret; - - if (n & STS_URI) { - writel(readl(USB_ENDPTCOMPLETE), USB_ENDPTCOMPLETE); - writel(readl(USB_ENDPTSETUPSTAT), USB_ENDPTSETUPSTAT); - writel(0xffffffff, USB_ENDPTFLUSH); - writel(0, USB_ENDPTCTRL(1)); - DBG1("-- reset --\n"); - usb_online = 0; - usb_config_value = 0; - the_gadget->notify(the_gadget, UDC_EVENT_OFFLINE); - - /* error out any pending reqs */ - for (ept = ept_list; ept; ept = ept->next) { - /* ensure that ept_complete considers - * this to be an error state - */ - if (ept->req) { - ept->req->item->info = INFO_HALTED; - handle_ept_complete(ept); - } - } - usb_status(0, usb_highspeed); - } - if (n & STS_SLI) { - DBG1("-- suspend --\n"); -#ifdef ENABLE_BATTERY_CHARGING - if(HOST_CHARGER == TRUE){ - charger_usb_i(2); - } -#endif - } - if (n & STS_PCI) { - DBG1("-- portchange --\n"); - unsigned spd = (readl(USB_PORTSC) >> 26) & 3; - if(spd == 2) { - usb_highspeed = 1; - } else { - usb_highspeed = 0; - } -#ifdef ENABLE_BATTERY_CHARGING - if(HOST_CHARGER == TRUE && usb_config_value){ - charger_usb_i(500); - } - if(HOST_CHARGER == TRUE && !usb_config_value){ - charger_usb_i(100); - } -#endif - } - if (n & STS_UEI) { - dprintf(INFO, "\n", readl(USB_ENDPTCOMPLETE)); - } -#if 0 - DBG("STS: "); - if (n & STS_UEI) DBG("ERROR "); - if (n & STS_SLI) DBG("SUSPEND "); - if (n & STS_URI) DBG("RESET "); - if (n & STS_PCI) DBG("PORTCHANGE "); - if (n & STS_UI) DBG("USB "); - DBG("\n"); -#endif - if ((n & STS_UI) || (n & STS_UEI)) { - n = readl(USB_ENDPTSETUPSTAT); - if (n & EPT_RX(0)) { - handle_setup(ep0out); - ret = INT_RESCHEDULE; - } - - n = readl(USB_ENDPTCOMPLETE); - if (n != 0) { - writel(n, USB_ENDPTCOMPLETE); - } - - for (ept = ept_list; ept; ept = ept->next){ - if (n & ept->bit) { - handle_ept_complete(ept); - ret = INT_RESCHEDULE; - } - } - } - return ret; -} - -int udc_register_gadget(struct udc_gadget *gadget) -{ - if (the_gadget) { - dprintf(CRITICAL, "only one gadget supported\n"); - return -1; - } - the_gadget = gadget; - return 0; -} - -static void udc_ept_desc_fill(struct udc_endpoint *ept, unsigned char *data) -{ - data[0] = 7; - data[1] = TYPE_ENDPOINT; - data[2] = ept->num | (ept->in ? 0x80 : 0x00); - data[3] = 0x02; /* bulk -- the only kind we support */ - data[4] = ept->maxpkt; - data[5] = ept->maxpkt >> 8; - data[6] = ept->in ? 0x00 : 0x01; -} - -static unsigned udc_ifc_desc_size(struct udc_gadget *g) -{ - return 9 + g->ifc_endpoints * 7; -} - -static void udc_ifc_desc_fill(struct udc_gadget *g, unsigned char *data) -{ - unsigned n; - - data[0] = 0x09; - data[1] = TYPE_INTERFACE; - data[2] = 0x00; /* ifc number */ - data[3] = 0x00; /* alt number */ - data[4] = g->ifc_endpoints; - data[5] = g->ifc_class; - data[6] = g->ifc_subclass; - data[7] = g->ifc_protocol; - data[8] = udc_string_desc_alloc(g->ifc_string); - - data += 9; - for (n = 0; n < g->ifc_endpoints; n++) { - udc_ept_desc_fill(g->ept[n], data); - data += 7; - } -} - -int udc_start(void) -{ - struct udc_descriptor *desc; - unsigned char *data; - unsigned size; - - dprintf(ALWAYS, "udc_start()\n"); - - if (!the_device) { - dprintf(CRITICAL, "udc cannot start before init\n"); - return -1; - } - if (!the_gadget) { - dprintf(CRITICAL, "udc has no gadget registered\n"); - return -1; - } - - /* create our device descriptor */ - desc = udc_descriptor_alloc(TYPE_DEVICE, 0, 18); - data = desc->data; - data[2] = 0x10; /* usb spec rev 2.10 */ - data[3] = 0x02; - data[4] = 0x00; /* class */ - data[5] = 0x00; /* subclass */ - data[6] = 0x00; /* protocol */ - data[7] = 0x40; /* max packet size on ept 0 */ - memcpy(data + 8, &the_device->vendor_id, sizeof(short)); - memcpy(data + 10, &the_device->product_id, sizeof(short)); - memcpy(data + 12, &the_device->version_id, sizeof(short)); - data[14] = udc_string_desc_alloc(the_device->manufacturer); - data[15] = udc_string_desc_alloc(the_device->product); - data[16] = udc_string_desc_alloc(the_device->serialno); - data[17] = 1; /* number of configurations */ - udc_descriptor_register(desc); - - /* create our configuration descriptor */ - size = 9 + udc_ifc_desc_size(the_gadget); - desc = udc_descriptor_alloc(TYPE_CONFIGURATION, 0, size); - data = desc->data; - data[0] = 0x09; - data[2] = size; - data[3] = size >> 8; - data[4] = 0x01; /* number of interfaces */ - data[5] = 0x01; /* configuration value */ - data[6] = 0x00; /* configuration string */ - data[7] = 0x80; /* attributes */ - data[8] = 0x80; /* max power (250ma) -- todo fix this */ - udc_ifc_desc_fill(the_gadget, data + 9); - udc_descriptor_register(desc); - - /* go to RUN mode (D+ pullup enable) */ - writel(0x00080001, USB_USBCMD); - register_int_handler(INT_USB_HS, udc_interrupt, (void*) 0); - unmask_interrupt(INT_USB_HS); - writel(STS_URI | STS_SLI | STS_UI | STS_PCI, USB_USBINTR); - return 0; -} - -int udc_stop(void) -{ - int val; - writel(0, USB_USBINTR); - mask_interrupt(INT_USB_HS); - - /* disable pullup */ - writel(0x00080000, USB_USBCMD); -#ifdef PLATFORM_MSM8X60 - /* Voting down PLL8 */ - val = readl(0x009034C0); - val &= ~(1<<8); - writel(val, 0x009034C0); -#endif - thread_sleep(10); - - return 0; -} - -void usb_stop_charging(unsigned stop_charging) -{ - ENABLE_CHARGING = !stop_charging; -} - -static inline unsigned is_usb_charging(void) -{ - return ENABLE_CHARGING; -} - -void usb_charger_reset(void) -{ - usb_stop_charging(TRUE); - charger_usb_disconnected(); -} - -/* Charger detection code - * Set global flags WALL_CHARGER and - * RETURN: type of charger connected - * CHG_WALL - * CHG_HOST_PC - * */ -int usb_chg_detect_type(void) -{ - int ret = CHG_UNDEFINED; - - if ((readl(USB_PORTSC) & PORTSC_LS) == PORTSC_LS) - { - if(charger_usb_is_charger_connected() == TRUE) { - WALL_CHARGER = TRUE; - HOST_CHARGER = FALSE; - charger_usb_i(1500); - ret = CHG_WALL; - } - } - else - { - if(charger_usb_is_pc_connected() == TRUE) { - WALL_CHARGER = FALSE; - HOST_CHARGER = TRUE; - ret = CHG_HOST_PC; - } - } - return ret; -} - -/* check if USB cable is connected - * - * RETURN: If cable connected return 1 - * If cable disconnected return 0 - */ -int is_usb_cable_connected(void) -{ - /*Verify B Session Valid Bit to verify vbus status*/ - if (B_SESSION_VALID & readl(USB_OTGSC)) { - return 1; - } else { - return 0; - } -} - -/* check for USB connection assuming USB is not pulled up. - * It looks for suspend state bit in PORTSC register. - * - * RETURN: If cable connected return 1 - * If cable disconnected return 0 - */ - -int usb_cable_status(void) -{ - unsigned ret = 0; - /*Verify B Session Valid Bit to verify vbus status*/ - writel(0x00080001, USB_USBCMD); - thread_sleep(100); - - /*Check reset value of suspend state bit*/ - if (!((1<<7) & readl(USB_PORTSC))) { - ret=1; - } - udc_stop(); - return ret; -} - -void usb_charger_change_state(void) -{ - int usb_connected; - - //User might have switched from host pc to wall charger. So keep checking - //every time we are in the loop - - if(ENABLE_CHARGING == TRUE) - { - usb_connected = is_usb_cable_connected(); - - if(usb_connected && !charger_connected) - { - //mdelay(20); - thread_sleep(20); - /* go to RUN mode (D+ pullup enable) */ - writel(0x00080001, USB_USBCMD); - //mdelay(10); - thread_sleep(10); - usb_chg_detect_type(); - charger_connected = TRUE; - } - else if(!usb_connected && charger_connected) - { - /* disable D+ pull-up */ - writel(0x00080000, USB_USBCMD); - - /* Applicable only for 8k target */ - /*USB Spoof Disconnect Failure - Symptoms: - In USB peripheral mode, writing '0' to Run/Stop bit of the - USBCMD register doesn't cause USB disconnection (spoof disconnect). - The PC host doesn't detect the disconnection and the phone remains - active on Windows device manager. - - Suggested Workaround: - After writing '0' to Run/Stop bit of USBCMD, also write 0x48 to ULPI - "Function Control" register. This can be done via the ULPI VIEWPORT - register (offset 0x170) by writing a value of 0x60040048. - */ - ulpi_write(0x48, 0x04); - //usb_charger_reset(); - WALL_CHARGER = FALSE; - HOST_CHARGER = FALSE; - charger_usb_i(0); - charger_usb_disconnected(); - charger_connected = FALSE; - } - if(WALL_CHARGER == TRUE || HOST_CHARGER == TRUE){ - //battery_charging_image(); - } - } - else if ((readl(USB_USBCMD) & 0x01) == 0){ - writel(0x00080001, USB_USBCMD); - } -} diff --git a/lk/platform/msm_shared/hsusb.h b/lk/platform/msm_shared/hsusb.h deleted file mode 100644 index 23cf7ce..0000000 --- a/lk/platform/msm_shared/hsusb.h +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef _MSM7200_USB_H_ -#define _MSM7200_USB_H_ - -#ifndef MSM_USB_BASE -#define MSM_USB_BASE 0xA0800000 -#endif - -#define USB_ID (MSM_USB_BASE + 0x0000) -#define USB_HWGENERAL (MSM_USB_BASE + 0x0004) -#define USB_HWHOST (MSM_USB_BASE + 0x0008) -#define USB_HWDEVICE (MSM_USB_BASE + 0x000C) -#define USB_HWTXBUF (MSM_USB_BASE + 0x0010) -#define USB_HWRXBUF (MSM_USB_BASE + 0x0014) -#define USB_SBUSCFG (MSM_USB_BASE + 0x0090) - -#define USB_CAPLENGTH (MSM_USB_BASE + 0x0100) /* 8 bit */ -#define USB_HCIVERSION (MSM_USB_BASE + 0x0102) /* 16 bit */ -#define USB_HCSPARAMS (MSM_USB_BASE + 0x0104) -#define USB_HCCPARAMS (MSM_USB_BASE + 0x0108) -#define USB_DCIVERSION (MSM_USB_BASE + 0x0120) /* 16 bit */ -#define USB_USBCMD (MSM_USB_BASE + 0x0140) -#define USB_USBSTS (MSM_USB_BASE + 0x0144) -#define USB_USBINTR (MSM_USB_BASE + 0x0148) -#define USB_FRINDEX (MSM_USB_BASE + 0x014C) -#define USB_DEVICEADDR (MSM_USB_BASE + 0x0154) -#define USB_ENDPOINTLISTADDR (MSM_USB_BASE + 0x0158) -#define USB_BURSTSIZE (MSM_USB_BASE + 0x0160) -#define USB_TXFILLTUNING (MSM_USB_BASE + 0x0164) -#define USB_ULPI_VIEWPORT (MSM_USB_BASE + 0x0170) -#define USB_ENDPTNAK (MSM_USB_BASE + 0x0178) -#define USB_ENDPTNAKEN (MSM_USB_BASE + 0x017C) -#define USB_PORTSC (MSM_USB_BASE + 0x0184) -#define USB_OTGSC (MSM_USB_BASE + 0x01A4) -#define USB_USBMODE (MSM_USB_BASE + 0x01A8) -#define USB_ENDPTSETUPSTAT (MSM_USB_BASE + 0x01AC) -#define USB_ENDPTPRIME (MSM_USB_BASE + 0x01B0) -#define USB_ENDPTFLUSH (MSM_USB_BASE + 0x01B4) -#define USB_ENDPTSTAT (MSM_USB_BASE + 0x01B8) -#define USB_ENDPTCOMPLETE (MSM_USB_BASE + 0x01BC) -#define USB_ENDPTCTRL(n) (MSM_USB_BASE + 0x01C0 + (4 * (n))) - - -#define USBCMD_RESET 2 -#define USBCMD_ATTACH 1 - -#define USBMODE_DEVICE 2 -#define USBMODE_HOST 3 - -struct ept_queue_head -{ - unsigned config; - unsigned current; /* read-only */ - - unsigned next; - unsigned info; - unsigned page0; - unsigned page1; - unsigned page2; - unsigned page3; - unsigned page4; - unsigned reserved_0; - - unsigned char setup_data[8]; - - unsigned reserved_1; - unsigned reserved_2; - unsigned reserved_3; - unsigned reserved_4; -}; - -#define CONFIG_MAX_PKT(n) ((n) << 16) -#define CONFIG_ZLT (1 << 29) /* stop on zero-len xfer */ -#define CONFIG_IOS (1 << 15) /* IRQ on setup */ - -struct ept_queue_item -{ - unsigned next; - unsigned info; - unsigned page0; - unsigned page1; - unsigned page2; - unsigned page3; - unsigned page4; - unsigned reserved; -}; - -#define TERMINATE 1 - -#define INFO_BYTES(n) ((n) << 16) -#define INFO_IOC (1 << 15) -#define INFO_ACTIVE (1 << 7) -#define INFO_HALTED (1 << 6) -#define INFO_BUFFER_ERROR (1 << 5) -#define INFO_TX_ERROR (1 << 3) - - -#define STS_NAKI (1 << 16) /* */ -#define STS_SLI (1 << 8) /* R/WC - suspend state entered */ -#define STS_SRI (1 << 7) /* R/WC - SOF recv'd */ -#define STS_URI (1 << 6) /* R/WC - RESET recv'd - write to clear */ -#define STS_FRI (1 << 3) /* R/WC - Frame List Rollover */ -#define STS_PCI (1 << 2) /* R/WC - Port Change Detect */ -#define STS_UEI (1 << 1) /* R/WC - USB Error */ -#define STS_UI (1 << 0) /* R/WC - USB Transaction Complete */ - - -/* bits used in all the endpoint status registers */ -#define EPT_TX(n) (1 << ((n) + 16)) -#define EPT_RX(n) (1 << (n)) - - -#define CTRL_TXE (1 << 23) -#define CTRL_TXR (1 << 22) -#define CTRL_TXI (1 << 21) -#define CTRL_TXD (1 << 17) -#define CTRL_TXS (1 << 16) -#define CTRL_RXE (1 << 7) -#define CTRL_RXR (1 << 6) -#define CTRL_RXI (1 << 5) -#define CTRL_RXD (1 << 1) -#define CTRL_RXS (1 << 0) - -#define CTRL_TXT_CTRL (0 << 18) -#define CTRL_TXT_ISOCH (1 << 18) -#define CTRL_TXT_BULK (2 << 18) -#define CTRL_TXT_INT (3 << 18) - -#define CTRL_RXT_CTRL (0 << 2) -#define CTRL_RXT_ISOCH (1 << 2) -#define CTRL_RXT_BULK (2 << 2) -#define CTRL_RXT_INT (3 << 2) - -#define ULPI_WAKEUP (1 << 31) -#define ULPI_RUN (1 << 30) -#define ULPI_WRITE (1 << 29) -#define ULPI_READ (0 << 29) -#define ULPI_STATE_NORMAL (1 << 27) -#define ULPI_ADDR(n) (((n) & 255) << 16) -#define ULPI_DATA(n) ((n) & 255) -#define ULPI_DATA_READ(n) (((n) >> 8) & 255) - -/* for USB charging */ -#define TRUE 1 -#define FALSE 0 -#define PORTSC_LS (3 << 10) /* Read - Port's Line status */ -#define B_SESSION_VALID (1 << 11) - -static unsigned WALL_CHARGER = FALSE; -static unsigned HOST_CHARGER = FALSE; -static unsigned ENABLE_CHARGING = TRUE; -static unsigned charger_connected = FALSE; - -enum charger_type { - CHG_HOST_PC, - CHG_WALL, - CHG_UNDEFINED, -}; - -#endif diff --git a/lk/platform/msm_shared/i2c_qup.c b/lk/platform/msm_shared/i2c_qup.c deleted file mode 100644 index 92e355f..0000000 --- a/lk/platform/msm_shared/i2c_qup.c +++ /dev/null @@ -1,840 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * QUP driver for Qualcomm MSM platforms - * - */ - -#include -#include -#include -#include - -#include -#include -#include -#include - -static struct qup_i2c_dev *dev_addr = NULL; - -/* QUP Registers */ -enum { - QUP_CONFIG = 0x0, - QUP_STATE = 0x4, - QUP_IO_MODE = 0x8, - QUP_SW_RESET = 0xC, - QUP_OPERATIONAL = 0x18, - QUP_ERROR_FLAGS = 0x1C, - QUP_ERROR_FLAGS_EN = 0x20, - QUP_MX_READ_CNT = 0x208, - QUP_MX_INPUT_CNT = 0x200, - QUP_MX_WR_CNT = 0x100, - QUP_OUT_DEBUG = 0x108, - QUP_OUT_FIFO_CNT = 0x10C, - QUP_OUT_FIFO_BASE = 0x110, - QUP_IN_READ_CUR = 0x20C, - QUP_IN_DEBUG = 0x210, - QUP_IN_FIFO_CNT = 0x214, - QUP_IN_FIFO_BASE = 0x218, - QUP_I2C_CLK_CTL = 0x400, - QUP_I2C_STATUS = 0x404, -}; - -/* QUP States and reset values */ -enum { - QUP_RESET_STATE = 0, - QUP_RUN_STATE = 1U, - QUP_STATE_MASK = 3U, - QUP_PAUSE_STATE = 3U, - QUP_STATE_VALID = 1U << 2, - QUP_I2C_MAST_GEN = 1U << 4, - QUP_OPERATIONAL_RESET = 0xFF0, - QUP_I2C_STATUS_RESET = 0xFFFFFC, -}; - -/* QUP OPERATIONAL FLAGS */ -enum { - QUP_OUT_SVC_FLAG = 1U << 8, - QUP_IN_SVC_FLAG = 1U << 9, - QUP_MX_INPUT_DONE = 1U << 11, -}; - -/* I2C mini core related values */ -enum { - I2C_MINI_CORE = 2U << 8, - I2C_N_VAL = 0xF, - -}; - -/* Packing Unpacking words in FIFOs , and IO modes*/ -enum { - QUP_WR_BLK_MODE = 1U << 10, - QUP_RD_BLK_MODE = 1U << 12, - QUP_UNPACK_EN = 1U << 14, - QUP_PACK_EN = 1U << 15, -}; - -/* QUP tags */ -enum { - QUP_OUT_NOP = 0, - QUP_OUT_START = 1U << 8, - QUP_OUT_DATA = 2U << 8, - QUP_OUT_STOP = 3U << 8, - QUP_OUT_REC = 4U << 8, - QUP_IN_DATA = 5U << 8, - QUP_IN_STOP = 6U << 8, - QUP_IN_NACK = 7U << 8, -}; - -/* Status, Error flags */ -enum { - I2C_STATUS_WR_BUFFER_FULL = 1U << 0, - I2C_STATUS_BUS_ACTIVE = 1U << 8, - I2C_STATUS_ERROR_MASK = 0x38000FC, - QUP_I2C_NACK_FLAG = 1U << 3, - QUP_IN_NOT_EMPTY = 1U << 5, - QUP_STATUS_ERROR_FLAGS = 0x7C, -}; - -void set_i2c_clk(struct qup_i2c_dev *dev) -{ - uint32_t md = 0; - uint32_t ns = 0; - - switch (dev->src_clk_freq) { - case 24000000: - ns = I2C_APPS_CLK_NS_24MHz; - md = I2C_APPS_CLK_MD_24MHz; - break; - default: - return; - } - /* Enable the GSBI8 HCLK */ - writel((GSBI8_HCLK_CTL_CLK_ENA << GSBI8_HCLK_CTL_S), - GSBIn_HCLK_CTL(dev->gsbi_number)); - clock_config(ns, - md, - GSBIn_QUP_APPS_NS(dev->gsbi_number), - GSBIn_QUP_APPS_MD(dev->gsbi_number)); -} - -void i2c_gpio_cfg(uint32_t base) -{ - switch (base) { - case GSBI8_BASE: - gpio_tlmm_config(64, 1, GPIO_OUTPUT, GPIO_NO_PULL, - GPIO_2MA, GPIO_DISABLE); - gpio_tlmm_config(65, 1, GPIO_OUTPUT, GPIO_NO_PULL, - GPIO_2MA, GPIO_DISABLE); - break; - default: - break; - } -} - -#ifdef DEBUG -static void qup_print_status(struct qup_i2c_dev *dev) -{ - unsigned val; - val = readl(dev->base + QUP_CONFIG); - dprintf(INFO, "Qup config is :0x%x\n", val); - val = readl(dev->base + QUP_STATE); - dprintf(INFO, "Qup state is :0x%x\n", val); - val = readl(dev->base + QUP_IO_MODE); - dprintf(INFO, "Qup mode is :0x%x\n", val); -} -#else -static inline void qup_print_status(struct qup_i2c_dev *dev) -{ -} -#endif - -void i2c_gpio_cfg(unsigned base); - -static irqreturn_t qup_i2c_interrupt(void) -{ - struct qup_i2c_dev *dev = dev_addr; - if (!dev) { - dprintf(CRITICAL, - "dev_addr is NULL, that means i2c_qup_init failed...\n"); - return IRQ_FAIL; - } - unsigned status = readl(dev->base + QUP_I2C_STATUS); - unsigned status1 = readl(dev->base + QUP_ERROR_FLAGS); - unsigned op_flgs = readl(dev->base + QUP_OPERATIONAL); - int err = 0; - - if (!dev->msg) - return IRQ_HANDLED; - - if (status & I2C_STATUS_ERROR_MASK) { - dprintf(CRITICAL, "QUP: I2C status flags :0x%x \n", status); - err = -status; - /* Clear Error interrupt if it's a level triggered interrupt */ - if (dev->num_irqs == 1) { - writel(QUP_RESET_STATE, dev->base + QUP_STATE); - } - goto intr_done; - } - - if (status1 & 0x7F) { - dprintf(CRITICAL, "QUP: QUP status flags :0x%x\n", status1); - err = -status1; - /* Clear Error interrupt if it's a level triggered interrupt */ - if (dev->num_irqs == 1) - writel((status1 & QUP_STATUS_ERROR_FLAGS), - dev->base + QUP_ERROR_FLAGS); - goto intr_done; - } - - if (op_flgs & QUP_OUT_SVC_FLAG) - writel(QUP_OUT_SVC_FLAG, dev->base + QUP_OPERATIONAL); - if (dev->msg->flags == I2C_M_RD) { - if ((op_flgs & QUP_MX_INPUT_DONE) || (op_flgs & QUP_IN_SVC_FLAG)) - writel(QUP_IN_SVC_FLAG, dev->base + QUP_OPERATIONAL); - else - return IRQ_HANDLED; - } - -intr_done: - dev->err = err; - return IRQ_HANDLED; -} - -static int qup_i2c_poll_writeready(struct qup_i2c_dev *dev) -{ - unsigned retries = 0; - - while (retries != 2000) { - unsigned status = readl(dev->base + QUP_I2C_STATUS); - - if (!(status & I2C_STATUS_WR_BUFFER_FULL)) { - if (!(status & I2C_STATUS_BUS_ACTIVE)) - return 0; - else /* 1-bit delay before we check for bus busy */ - udelay(dev->one_bit_t); - } - if (retries++ == 1000) - udelay(100); - } - qup_print_status(dev); - return -ETIMEDOUT; -} - -static int qup_i2c_poll_state(struct qup_i2c_dev *dev, unsigned state) -{ - unsigned retries = 0; - - dprintf(CRITICAL, "Polling Status for state:0x%x\n", state); - - while (retries != 2000) { - unsigned status = readl(dev->base + QUP_STATE); - - if ((status & (QUP_STATE_VALID | state)) == (QUP_STATE_VALID | state)) - return 0; - else if (retries++ == 1000) - udelay(100); - } - return -ETIMEDOUT; -} - -#ifdef DEBUG -static void qup_verify_fifo(struct qup_i2c_dev *dev, unsigned val, - unsigned addr, int rdwr) -{ - if (rdwr) - dprintf(INFO, "RD:Wrote 0x%x to out_ff:0x%x\n", val, addr); - else - dprintf(INFO, "WR:Wrote 0x%x to out_ff:0x%x\n", val, addr); -} -#else -static inline void qup_verify_fifo(struct qup_i2c_dev *dev, unsigned val, - unsigned addr, int rdwr) -{ -} -#endif - -static void -qup_issue_read(struct qup_i2c_dev *dev, struct i2c_msg *msg, int *idx, - unsigned carry_over) -{ - uint16_t addr = (msg->addr << 1) | 1; - /* QUP limit 256 bytes per read. By HW design, 0 in the 8-bit field is - treated as 256 byte read. */ - uint16_t rd_len = ((dev->cnt == 256) ? 0 : dev->cnt); - - if (*idx % 4) { - writel(carry_over | ((QUP_OUT_START | addr) << 16), - dev->base + QUP_OUT_FIFO_BASE); - - qup_verify_fifo(dev, carry_over | - ((QUP_OUT_START | addr) << 16), (unsigned)dev->base - + QUP_OUT_FIFO_BASE + (*idx - 2), 1); - writel((QUP_OUT_REC | rd_len), dev->base + QUP_OUT_FIFO_BASE); - - qup_verify_fifo(dev, (QUP_OUT_REC | rd_len), - (unsigned)dev->base + QUP_OUT_FIFO_BASE + (*idx + 2), - 1); - } else { - writel(((QUP_OUT_REC | rd_len) << 16) | - QUP_OUT_START | addr, dev->base + QUP_OUT_FIFO_BASE); - - qup_verify_fifo(dev, QUP_OUT_REC << 16 | rd_len << 16 | - QUP_OUT_START | addr, - (unsigned)dev->base + QUP_OUT_FIFO_BASE + (*idx), 1); - } - *idx += 4; -} - -static void -qup_issue_write(struct qup_i2c_dev *dev, struct i2c_msg *msg, int rem, - int *idx, unsigned *carry_over) -{ - int entries = dev->cnt; - int empty_sl = dev->wr_sz - ((*idx) >> 1); - int i = 0; - unsigned val = 0; - unsigned last_entry = 0; - uint16_t addr = msg->addr << 1; - - if (dev->pos == 0) { - if (*idx % 4) { - writel(*carry_over | ((QUP_OUT_START | addr) << 16), - dev->base + QUP_OUT_FIFO_BASE); - - qup_verify_fifo(dev, *carry_over | QUP_OUT_DATA << 16 | - addr << 16, (unsigned)dev->base + - QUP_OUT_FIFO_BASE + (*idx) - 2, 0); - } else - val = QUP_OUT_START | addr; - *idx += 2; - i++; - entries++; - } else { - /* Avoid setp time issue by adding 1 NOP when number of bytes are more - than FIFO/BLOCK size. setup time issue can't appear otherwise since - next byte to be written will always be ready */ - val = (QUP_OUT_NOP | 1); - *idx += 2; - i++; - entries++; - } - if (entries > empty_sl) - entries = empty_sl; - - for (; i < (entries - 1); i++) { - if (*idx % 4) { - writel(val | ((QUP_OUT_DATA | - msg->buf[dev->pos]) << 16), - dev->base + QUP_OUT_FIFO_BASE); - - qup_verify_fifo(dev, val | QUP_OUT_DATA << 16 | - msg->buf[dev->pos] << 16, (unsigned)dev->base + - QUP_OUT_FIFO_BASE + (*idx) - 2, 0); - } else - val = QUP_OUT_DATA | msg->buf[dev->pos]; - (*idx) += 2; - dev->pos++; - } - if (dev->pos < (msg->len - 1)) - last_entry = QUP_OUT_DATA; - else if (rem > 1) /* not last array entry */ - last_entry = QUP_OUT_DATA; - else - last_entry = QUP_OUT_STOP; - if ((*idx % 4) == 0) { - /* - * If read-start and read-command end up in different fifos, it - * may result in extra-byte being read due to extra-read cycle. - * Avoid that by inserting NOP as the last entry of fifo only - * if write command(s) leave 1 space in fifo. - */ - if (rem > 1) { - struct i2c_msg *next = msg + 1; - if (next->addr == msg->addr && (next->flags | I2C_M_RD) - && *idx == ((dev->wr_sz * 2) - 4)) { - writel(((last_entry | msg->buf[dev->pos]) | - ((1 | QUP_OUT_NOP) << 16)), - dev->base + QUP_OUT_FIFO_BASE); - *idx += 2; - } else - *carry_over = (last_entry | msg->buf[dev->pos]); - } else { - writel((last_entry | msg->buf[dev->pos]), - dev->base + QUP_OUT_FIFO_BASE); - - qup_verify_fifo(dev, last_entry | msg->buf[dev->pos], - (unsigned)dev->base + QUP_OUT_FIFO_BASE + - (*idx), 0); - } - } else { - writel(val | ((last_entry | msg->buf[dev->pos]) << 16), - dev->base + QUP_OUT_FIFO_BASE); - - qup_verify_fifo(dev, val | (last_entry << 16) | - (msg->buf[dev->pos] << 16), (unsigned)dev->base + - QUP_OUT_FIFO_BASE + (*idx) - 2, 0); - } - - *idx += 2; - dev->pos++; - dev->cnt = msg->len - dev->pos; -} - -static int qup_update_state(struct qup_i2c_dev *dev, unsigned state) -{ - if (qup_i2c_poll_state(dev, 0) != 0) - return -EIO; - writel(state, dev->base + QUP_STATE); - if (qup_i2c_poll_state(dev, state) != 0) - return -EIO; - return 0; -} - -static int qup_set_read_mode(struct qup_i2c_dev *dev, int rd_len) -{ - unsigned wr_mode = (dev->wr_sz < dev->out_fifo_sz) ? QUP_WR_BLK_MODE : 0; - if (rd_len > 256) { - dprintf(INFO, "HW doesn't support READs > 256 bytes\n"); - return -EPROTONOSUPPORT; - } - if (rd_len <= dev->in_fifo_sz) { - writel(wr_mode | QUP_PACK_EN | QUP_UNPACK_EN, dev->base + QUP_IO_MODE); - writel(rd_len, dev->base + QUP_MX_READ_CNT); - } else { - writel(wr_mode | QUP_RD_BLK_MODE | - QUP_PACK_EN | QUP_UNPACK_EN, dev->base + QUP_IO_MODE); - writel(rd_len, dev->base + QUP_MX_INPUT_CNT); - } - return 0; -} - -static int qup_set_wr_mode(struct qup_i2c_dev *dev, int rem) -{ - int total_len = 0; - int ret = 0; - if (dev->msg->len >= (dev->out_fifo_sz - 1)) { - total_len = dev->msg->len + 1 + (dev->msg->len / (dev->out_blk_sz - 1)); - writel(QUP_WR_BLK_MODE | QUP_PACK_EN | QUP_UNPACK_EN, - dev->base + QUP_IO_MODE); - dev->wr_sz = dev->out_blk_sz; - } else - writel(QUP_PACK_EN | QUP_UNPACK_EN, dev->base + QUP_IO_MODE); - - if (rem > 1) { - struct i2c_msg *next = dev->msg + 1; - if (next->addr == dev->msg->addr && next->flags == I2C_M_RD) { - ret = qup_set_read_mode(dev, next->len); - /* make sure read start & read command are in 1 blk */ - if ((total_len % dev->out_blk_sz) == (dev->out_blk_sz - 1)) - total_len += 3; - else - total_len += 2; - } - } - /* WRITE COUNT register valid/used only in block mode */ - if (dev->wr_sz == dev->out_blk_sz) - writel(total_len, dev->base + QUP_MX_WR_CNT); - return ret; -} - -int qup_i2c_xfer(struct qup_i2c_dev *dev, struct i2c_msg msgs[], int num) -{ - int ret; - int rem = num; - int err; - - if (dev->suspended) { - return -EIO; - } - - /* Set the GSBIn_QUP_APPS_CLK to 24MHz, then below figure out what speed to - run I2C_MASTER_CORE at. */ - if (dev->clk_state == 0) { - if (dev->clk_ctl == 0) { - set_i2c_clk(dev); - } - } - /* Initialize QUP registers during first transfer */ - if (dev->clk_ctl == 0) { - int fs_div; - int hs_div; - unsigned fifo_reg; - /* Configure the GSBI Protocol Code for i2c */ - writel((GSBI_PROTOCOL_CODE_I2C << - GSBI_CTRL_REG_PROTOCOL_CODE_S), dev->base); - - fs_div = ((dev->src_clk_freq / dev->clk_freq) / 2) - 3; - hs_div = 3; - dev->clk_ctl = ((hs_div & 0x7) << 8) | (fs_div & 0xff); - fifo_reg = readl(dev->base + QUP_IO_MODE); - if (fifo_reg & 0x3) - dev->out_blk_sz = (fifo_reg & 0x3) * 16; - else - dev->out_blk_sz = 16; - if (fifo_reg & 0x60) - dev->in_blk_sz = ((fifo_reg & 0x60) >> 5) * 16; - else - dev->in_blk_sz = 16; - /* - * The block/fifo size w.r.t. 'actual data' is 1/2 due to 'tag' - * associated with each byte written/received - */ - dev->out_blk_sz /= 2; - dev->in_blk_sz /= 2; - dev->out_fifo_sz = dev->out_blk_sz * (2 << ((fifo_reg & 0x1C) >> 2)); - dev->in_fifo_sz = dev->in_blk_sz * (2 << ((fifo_reg & 0x380) >> 7)); - dprintf(CRITICAL, "QUP IN:bl:%d, ff:%d, OUT:bl:%d, ff:%d\n", - dev->in_blk_sz, dev->in_fifo_sz, - dev->out_blk_sz, dev->out_fifo_sz); - } - - unmask_interrupt(dev->qup_irq); - writel(1, dev->base + QUP_SW_RESET); - ret = qup_i2c_poll_state(dev, QUP_RESET_STATE); - if (ret) { - dprintf(INFO, "QUP Busy:Trying to recover\n"); - goto out_err; - } - - /* Initialize QUP registers */ - writel(0, dev->base + QUP_CONFIG); - writel(QUP_OPERATIONAL_RESET, dev->base + QUP_OPERATIONAL); - writel(QUP_STATUS_ERROR_FLAGS, dev->base + QUP_ERROR_FLAGS_EN); - - writel(I2C_MINI_CORE | I2C_N_VAL, dev->base + QUP_CONFIG); - - /* Initialize I2C mini core registers */ - writel(0, dev->base + QUP_I2C_CLK_CTL); - writel(QUP_I2C_STATUS_RESET, dev->base + QUP_I2C_STATUS); - - dev->cnt = msgs->len; - dev->pos = 0; - dev->msg = msgs; - while (rem) { - int filled = FALSE; - - dev->wr_sz = dev->out_fifo_sz; - dev->err = 0; - - if (qup_i2c_poll_state(dev, QUP_I2C_MAST_GEN) != 0) { - ret = -EIO; - goto out_err; - } - - qup_print_status(dev); - /* HW limits Read upto 256 bytes in 1 read without stop */ - if (dev->msg->flags & I2C_M_RD) { - ret = qup_set_read_mode(dev, dev->cnt); - if (ret != 0) - goto out_err; - } else { - ret = qup_set_wr_mode(dev, rem); - if (ret != 0) - goto out_err; - /* Don't fill block till we get interrupt */ - if (dev->wr_sz == dev->out_blk_sz) - filled = TRUE; - } - - err = qup_update_state(dev, QUP_RUN_STATE); - if (err < 0) { - ret = err; - goto out_err; - } - - qup_print_status(dev); - writel(dev->clk_ctl, dev->base + QUP_I2C_CLK_CTL); - - do { - int idx = 0; - unsigned carry_over = 0; - - /* Transition to PAUSE state only possible from RUN */ - err = qup_update_state(dev, QUP_PAUSE_STATE); - if (err < 0) { - ret = err; - goto out_err; - } - - qup_print_status(dev); - /* This operation is Write, check the next operation and decide - mode */ - while (filled == FALSE) { - if ((msgs->flags & I2C_M_RD) && (dev->cnt == msgs->len)) - qup_issue_read(dev, msgs, &idx, carry_over); - else if (!(msgs->flags & I2C_M_RD)) - qup_issue_write(dev, msgs, rem, &idx, &carry_over); - if (idx >= (dev->wr_sz << 1)) - filled = TRUE; - /* Start new message */ - if (filled == FALSE) { - if (msgs->flags & I2C_M_RD) - filled = TRUE; - else if (rem > 1) { - /* Only combine operations with same address */ - struct i2c_msg *next = msgs + 1; - if (next->addr != msgs->addr || next->flags == 0) - filled = TRUE; - else { - rem--; - msgs++; - dev->msg = msgs; - dev->pos = 0; - dev->cnt = msgs->len; - } - } else - filled = TRUE; - } - } - err = qup_update_state(dev, QUP_RUN_STATE); - if (err < 0) { - ret = err; - goto out_err; - } - dprintf(CRITICAL, "idx:%d, rem:%d, num:%d, mode:%d\n", - idx, rem, num, dev->mode); - - qup_print_status(dev); - if (dev->err) { - if (dev->err & QUP_I2C_NACK_FLAG) { - dprintf(CRITICAL, - "I2C slave addr:0x%x not connected\n", - dev->msg->addr); - } else { - dprintf(INFO, "QUP data xfer error %d\n", dev->err); - } - ret = dev->err; - goto out_err; - } - if (dev->msg->flags & I2C_M_RD) { - int i; - unsigned dval = 0; - for (i = 0; dev->pos < dev->msg->len; i++, dev->pos++) { - unsigned rd_status = readl(dev->base + QUP_OPERATIONAL); - if (i % 2 == 0) { - if ((rd_status & QUP_IN_NOT_EMPTY) == 0) - break; - dval = readl(dev->base + QUP_IN_FIFO_BASE); - dev->msg->buf[dev->pos] = dval & 0xFF; - } else - dev->msg->buf[dev->pos] = ((dval & 0xFF0000) >> 16); - } - dev->cnt -= i; - } else - filled = FALSE; /* refill output FIFO */ - } while (dev->cnt > 0); - if (dev->cnt == 0) { - rem--; - msgs++; - if (rem) { - dev->pos = 0; - dev->cnt = msgs->len; - dev->msg = msgs; - } - } - /* Wait for I2C bus to be idle */ - ret = qup_i2c_poll_writeready(dev); - if (ret) { - dprintf(INFO, "Error waiting for write ready\n"); - goto out_err; - } - } - - ret = num; -out_err: - dev->msg = NULL; - dev->pos = 0; - dev->err = 0; - dev->cnt = 0; - mask_interrupt(dev->qup_irq); - return ret; -} - -static int set_gsbi_number(struct qup_i2c_dev *dev) -{ - switch (dev->base) { - case GSBI1_QUP_BASE: - dev->gsbi_number = 1; - break; - case GSBI2_QUP_BASE: - dev->gsbi_number = 2; - break; - case GSBI3_QUP_BASE: - dev->gsbi_number = 3; - break; - case GSBI4_QUP_BASE: - dev->gsbi_number = 4; - break; - case GSBI5_QUP_BASE: - dev->gsbi_number = 5; - break; - case GSBI6_QUP_BASE: - dev->gsbi_number = 6; - break; - case GSBI7_QUP_BASE: - dev->gsbi_number = 7; - break; - case GSBI8_QUP_BASE: - dev->gsbi_number = 8; - break; - case GSBI9_QUP_BASE: - dev->gsbi_number = 9; - break; - case GSBI10_QUP_BASE: - dev->gsbi_number = 10; - break; - case GSBI11_QUP_BASE: - dev->gsbi_number = 11; - break; - case GSBI12_QUP_BASE: - dev->gsbi_number = 12; - break; - default: - return 1; - } - return 0; -} - -static int set_qup_irq(struct qup_i2c_dev *dev) -{ - switch (dev->base) { - case GSBI1_QUP_BASE: - dev->qup_irq = GSBI1_QUP_IRQ; - break; - case GSBI2_QUP_BASE: - dev->qup_irq = GSBI2_QUP_IRQ; - break; - case GSBI3_QUP_BASE: - dev->qup_irq = GSBI3_QUP_IRQ; - break; - case GSBI4_QUP_BASE: - dev->qup_irq = GSBI4_QUP_IRQ; - break; - case GSBI5_QUP_BASE: - dev->qup_irq = GSBI5_QUP_IRQ; - break; - case GSBI6_QUP_BASE: - dev->qup_irq = GSBI6_QUP_IRQ; - break; - case GSBI7_QUP_BASE: - dev->qup_irq = GSBI7_QUP_IRQ; - break; - case GSBI8_QUP_BASE: - dev->qup_irq = GSBI8_QUP_IRQ; - break; - case GSBI9_QUP_BASE: - dev->qup_irq = GSBI9_QUP_IRQ; - break; - case GSBI10_QUP_BASE: - dev->qup_irq = GSBI10_QUP_IRQ; - break; - case GSBI11_QUP_BASE: - dev->qup_irq = GSBI11_QUP_IRQ; - break; - case GSBI12_QUP_BASE: - dev->qup_irq = GSBI12_QUP_IRQ; - break; - default: - return 1; - } - return 0; -} - -struct qup_i2c_dev *qup_i2c_init(unsigned base, - unsigned clk_freq, unsigned src_clk_freq) -{ - struct qup_i2c_dev *dev; - if (dev_addr != NULL) { - return dev_addr; - } - - dev = malloc(sizeof(struct qup_i2c_dev)); - if (!dev) { - return NULL; - } - dev = memset(dev, 0, sizeof(struct qup_i2c_dev)); - - /* This must be done for qup_i2c_interrupt to work. */ - dev_addr = dev; - - /* Initialize the GPIO for GSBIn as i2c */ - i2c_gpio_cfg(base); - - /* Configure GSBIn in i2c mode */ - writel(GSBI_CTL_PROTOCOL_CODE_I2C, base); - - /* Set the base address for GSBIn QUP The reason we add 0x80000 is to make - the GSBIn base address be the GSBIn QUP base address, which is what the - i2c driver wants. */ - dev->base = base + 0x80000; - - /* Set clk_freq and src_clk_freq for i2c. */ - dev->clk_freq = clk_freq; - dev->src_clk_freq = src_clk_freq; - - dev->num_irqs = 1; - - dev->one_bit_t = USEC_PER_SEC / dev->clk_freq; - dev->clk_ctl = 0; - - /* Set the IRQ number for GSBIn_BASE address */ - if (set_qup_irq(dev)) { - dprintf(INFO, - "Could not find a valid QUP IRQ value based on GSBIn_BASE: %d\n", - base); - dprintf(INFO, "Please double check the GSBIn_BASE address.\n"); - return NULL; - } - - /* Set the GSBI number based on GSBIn_BASE address */ - if (set_gsbi_number(dev)) { - dprintf(INFO, "Could not find a valid GSBI # based on GSBIn_BASE: %d\n", - base); - dprintf(INFO, "Please double check the GSBIn_BASE address.\n"); - return NULL; - } - - /* Register the GSBIn QUP IRQ */ - register_int_handler(dev->qup_irq, qup_i2c_interrupt, 0); - - /* Then disable it */ - mask_interrupt(dev->qup_irq); - - return dev; -} - -int qup_i2c_deinit(struct qup_i2c_dev *dev) -{ - /* Disable the qup_irq */ - mask_interrupt(dev->qup_irq); - /* Free the memory used for dev */ - free(dev); - return 0; -} diff --git a/lk/platform/msm_shared/include/i2c_qup.h b/lk/platform/msm_shared/include/i2c_qup.h deleted file mode 100644 index 2c0baa6..0000000 --- a/lk/platform/msm_shared/include/i2c_qup.h +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __I2C_QUP__ -#define __I2C_QUP__ - -/** - * struct i2c_msg - an I2C transaction segment beginning with START - * @addr: Slave address, either seven or ten bits. When this is a ten - * bit address, I2C_M_TEN must be set in @flags and the adapter - * must support I2C_FUNC_10BIT_ADDR. - * @flags: I2C_M_RD is handled by all adapters. No other flags may be - * provided unless the adapter exported the relevant I2C_FUNC_* - * flags through i2c_check_functionality(). - * @len: Number of data bytes in @buf being read from or written to the - * I2C slave address. For read transactions where I2C_M_RECV_LEN - * is set, the caller guarantees that this buffer can hold up to - * 32 bytes in addition to the initial length byte sent by the - * slave (plus, if used, the SMBus PEC); and this value will be - * incremented by the number of block data bytes received. - * @buf: The buffer into which data is read, or from which it's written. - * - * An i2c_msg is the low level representation of one segment of an I2C - * transaction. It is visible to drivers in the @i2c_transfer() procedure, - * to userspace from i2c-dev, and to I2C adapter drivers through the - * @i2c_adapter.@master_xfer() method. - * - * Except when I2C "protocol mangling" is used, all I2C adapters implement - * the standard rules for I2C transactions. Each transaction begins with a - * START. That is followed by the slave address, and a bit encoding read - * versus write. Then follow all the data bytes, possibly including a byte - * with SMBus PEC. The transfer terminates with a NAK, or when all those - * bytes have been transferred and ACKed. If this is the last message in a - * group, it is followed by a STOP. Otherwise it is followed by the next - * @i2c_msg transaction segment, beginning with a (repeated) START. - * - * Alternatively, when the adapter supports I2C_FUNC_PROTOCOL_MANGLING then - * passing certain @flags may have changed those standard protocol behaviors. - * Those flags are only for use with broken/nonconforming slaves, and with - * adapters which are known to support the specific mangling options they - * need (one or more of IGNORE_NAK, NO_RD_ACK, NOSTART, and REV_DIR_ADDR). - */ -struct i2c_msg { - unsigned short addr; /* slave address */ - unsigned short flags; -#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */ -#define I2C_M_WR 0x0000 /* write data, from master to slave */ -#define I2C_M_RD 0x0001 /* read data, from slave to master */ -#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_PROTOCOL_MANGLING */ -#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */ -#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */ -#define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */ -#define I2C_M_RECV_LEN 0x0400 /* length will be first received byte */ - unsigned short len; /* msg length */ - unsigned char *buf; /* pointer to msg data */ -}; - -struct qup_i2c_dev { - unsigned int base; - unsigned int gsbi_number; - int qup_irq; - int num_irqs; - struct i2c_msg *msg; - int pos; - int cnt; - int err; - int mode; - int clk_ctl; - int clk_freq; - int src_clk_freq; - int one_bit_t; - int out_fifo_sz; - int in_fifo_sz; - int out_blk_sz; - int in_blk_sz; - int wr_sz; - int suspended; - int clk_state; -}; - -/* Function Definitions */ -struct qup_i2c_dev *qup_i2c_init(unsigned base, - unsigned clk_freq, unsigned src_clk_freq); -int qup_i2c_deinit(struct qup_i2c_dev *dev); -int qup_i2c_xfer(struct qup_i2c_dev *dev, struct i2c_msg msgs[], int num); - -struct device { - struct device *parent; - const char *init_name; /* initial name of the device */ - void (*release) (struct device * dev); -}; - -/** - * enum irqreturn - * @IRQ_NONE interrupt was not from this device - * @IRQ_HANDLED interrupt was handled by this device - * @IRQ_WAKE_THREAD handler requests to wake the handler thread - */ -enum irqreturn { - IRQ_NONE, - IRQ_HANDLED, - IRQ_WAKE_THREAD, - IRQ_FAIL, -}; - -typedef enum irqreturn irqreturn_t; - -#define I2C_SMBUS_BLOCK_MAX 32 -union i2c_smbus_data { - unsigned char byte; - unsigned short word; - unsigned char block[I2C_SMBUS_BLOCK_MAX + 2]; -}; - -/* - * i2c_adapter is the structure used to identify a physical i2c bus along - * with the access algorithms necessary to access it. - */ -struct i2c_adapter { - struct module *owner; - unsigned int id; - unsigned int class; /* classes to allow probing for */ - const struct i2c_algorithm *algo; /* the algorithm to access the bus */ - void *algo_data; - /* data fields that are valid for all devices */ - unsigned int level; /* nesting level for lockdep */ - int timeout; /* in jiffies */ - int retries; - struct device dev; /* the adapter device */ - int nr; - char name[48]; -}; - -/* - * The following structs are for those who like to implement new bus drivers: - * i2c_algorithm is the interface to a class of hardware solutions which can - * be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584 - * to name two of the most common. - */ -struct i2c_algorithm { - /* If an adapter algorithm can't do I2C-level access, set master_xfer to - NULL. If an adapter algorithm can do SMBus access, set smbus_xfer. If - set to NULL, the SMBus protocol is simulated using common I2C messages */ - /* master_xfer should return the number of messages successfully processed, - or a negative value on error */ - int (*master_xfer) (struct i2c_adapter * adap, struct i2c_msg * msgs, - int num); - int (*smbus_xfer) (struct i2c_adapter * adap, unsigned short addr, - unsigned short flags, char read_write, - unsigned char command, int size, - union i2c_smbus_data * data); - - /* To determine what the adapter supports */ - unsigned int (*functionality) (struct i2c_adapter *); -}; - -#define EIO 5 -#define ENOMEM 12 -#define EBUSY 16 -#define ENODEV 19 -#define ENOSYS 38 -#define EPROTONOSUPPORT 93 -#define ETIMEDOUT 110 - -#define FALSE 0 -#define TRUE 1 - -#define USEC_PER_SEC 1000000L - -#define IRQF_TRIGGER_NONE 0x00000000 -#define IRQF_TRIGGER_RISING 0x00000001 -#define IRQF_TRIGGER_FALLING 0x00000002 -#define IRQF_TRIGGER_HIGH 0x00000004 -#define IRQF_TRIGGER_LOW 0x00000008 -#define IRQF_TRIGGER_MASK (IRQF_TRIGGER_HIGH | IRQF_TRIGGER_LOW | \ - IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING) -#define IRQF_TRIGGER_PROBE 0x00000010 - -/* To determine what functionality is present */ - -#define I2C_FUNC_I2C 0x00000001 -#define I2C_FUNC_10BIT_ADDR 0x00000002 -#define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_NOSTART etc. */ -#define I2C_FUNC_SMBUS_PEC 0x00000008 -#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */ -#define I2C_FUNC_SMBUS_QUICK 0x00010000 -#define I2C_FUNC_SMBUS_READ_BYTE 0x00020000 -#define I2C_FUNC_SMBUS_WRITE_BYTE 0x00040000 -#define I2C_FUNC_SMBUS_READ_BYTE_DATA 0x00080000 -#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000 -#define I2C_FUNC_SMBUS_READ_WORD_DATA 0x00200000 -#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000 -#define I2C_FUNC_SMBUS_PROC_CALL 0x00800000 -#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000 -#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000 -#define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000 /* I2C-like block xfer */ -#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */ - -#define I2C_FUNC_SMBUS_BYTE (I2C_FUNC_SMBUS_READ_BYTE | \ - I2C_FUNC_SMBUS_WRITE_BYTE) -#define I2C_FUNC_SMBUS_BYTE_DATA (I2C_FUNC_SMBUS_READ_BYTE_DATA | \ - I2C_FUNC_SMBUS_WRITE_BYTE_DATA) -#define I2C_FUNC_SMBUS_WORD_DATA (I2C_FUNC_SMBUS_READ_WORD_DATA | \ - I2C_FUNC_SMBUS_WRITE_WORD_DATA) -#define I2C_FUNC_SMBUS_BLOCK_DATA (I2C_FUNC_SMBUS_READ_BLOCK_DATA | \ - I2C_FUNC_SMBUS_WRITE_BLOCK_DATA) -#define I2C_FUNC_SMBUS_I2C_BLOCK (I2C_FUNC_SMBUS_READ_I2C_BLOCK | \ - I2C_FUNC_SMBUS_WRITE_I2C_BLOCK) - -#define I2C_FUNC_SMBUS_EMUL (I2C_FUNC_SMBUS_QUICK | \ - I2C_FUNC_SMBUS_BYTE | \ - I2C_FUNC_SMBUS_BYTE_DATA | \ - I2C_FUNC_SMBUS_WORD_DATA | \ - I2C_FUNC_SMBUS_PROC_CALL | \ - I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \ - I2C_FUNC_SMBUS_I2C_BLOCK | \ - I2C_FUNC_SMBUS_PEC) - -/* GSBI/I2C QUP APPS CLK definitions */ -#define I2C_APPS_CLK_MD_24MHz 0x000100FB -#define I2C_APPS_CLK_NS_24MHz 0x00FC005B - -#define GSBI8_HCLK_CTL_S (4) -#define GSBI8_HCLK_CTL_CLK_ENA (0x1) - -#define GSBI_CTRL_REG_PROTOCOL_CODE_S (4) -#define GSBI_PROTOCOL_CODE_I2C (0x2) - -#endif /* __I2C_QUP__ */ diff --git a/lk/platform/msm_shared/include/jtag.h b/lk/platform/msm_shared/include/jtag.h deleted file mode 100644 index e6476d7..0000000 --- a/lk/platform/msm_shared/include/jtag.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -#ifndef _JTAG_H_ -#define _JTAG_H_ - -void jtag_okay(const char *msg); -void jtag_fail(const char *msg); -void jtag_dputc(unsigned ch); -void jtag_cmd_loop(void (*do_cmd)(const char *, unsigned, unsigned, unsigned)); - - -#endif /*__JTAG_H_ */ - diff --git a/lk/platform/msm_shared/include/mddi.h b/lk/platform/msm_shared/include/mddi.h deleted file mode 100644 index d1d3a77..0000000 --- a/lk/platform/msm_shared/include/mddi.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __PLATFORM_MDDI_H -#define __PLATFORM_MDDI_H - -struct fbcon_config; - -struct __attribute__((packed)) mddi_client_caps -{ - unsigned short length; - unsigned short type; - unsigned short client_id; - - unsigned short protocol_ver; - unsigned short min_protocol_ver; - unsigned short data_rate_cap; - unsigned char interface_type_cap; - unsigned char num_alt_displays; - unsigned short postcal_data_rate; - unsigned short bitmap_width; - unsigned short bitmap_height; - unsigned short display_window_width; - unsigned short display_window_height; - unsigned cmap_size; - unsigned short cmap_rgb_width; - unsigned short rgb_cap; - unsigned char mono_cap; - unsigned char reserved1; - unsigned short ycbcr_cap; - unsigned short bayer_cap; - unsigned short alpha_cursor_planes; - unsigned client_feature_cap; - unsigned char max_video_frame_rate_cap; - unsigned char min_video_frame_rate_cap; - unsigned short min_sub_frame_rate; - unsigned short audio_buf_depth; - unsigned short audio_channel_cap; - unsigned short audio_sampe_rate_rap; - unsigned char audio_sample_res; - unsigned char mic_audio_sample_res; - unsigned short mic_sample_rate_cap; - unsigned char keyboard_data_fmt; - unsigned char pointing_device_data_fmt; - unsigned short content_protection_type; - unsigned short manufacturer_name; - unsigned short product_code; - unsigned short reserved3; - unsigned serial_no; - unsigned char week_of_manufacture; - unsigned char year_of_manufacture; - - unsigned short crc; -}; - -void mddi_remote_write(unsigned val, unsigned reg); -struct fbcon_config *mddi_init(void); - -#endif /* __PLATFORM_MDDI_H */ diff --git a/lk/platform/msm_shared/include/mipi_dsi.h b/lk/platform/msm_shared/include/mipi_dsi.h deleted file mode 100644 index 1849ec8..0000000 --- a/lk/platform/msm_shared/include/mipi_dsi.h +++ /dev/null @@ -1,449 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifndef _PLATFORM_MSM_SHARED_MIPI_DSI_H_ -#define _PLATFORM_MSM_SHARED_MIPI_DSI_H_ - -#define PASS 0 -#define FAIL 1 - -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) - -#define MIPI_DSI_BASE (0x04700000) - -#define DSI_CLKOUT_TIMING_CTRL (0x047000C0) -#define MMSS_DSI_PIXEL_MD (0x04000134) -#define MMSS_DSI_PIXEL_NS (0x04000138) -#define MMSS_DSI_PIXEL_CC (0x04000130) -#define MMSS_DSI_CC (0x0400004C) -#define MMSS_DSI_MD (0x04000050) -#define MMSS_DSI_NS (0x04000054) -#define MMSS_MISC_CC2 (0x0400005C) -#define MMSS_MISC_CC (0x04000058) -#define DSI_PHY_SW_RESET (0x04700128) -#define DSI_SOFT_RESET (0x04700114) -#define DSI_CAL_CTRL (0x047000F4) - -#define DSIPHY_REGULATOR_CTRL_0 (0x047002CC) -#define DSIPHY_REGULATOR_CTRL_1 (0x047002D0) -#define DSIPHY_REGULATOR_CTRL_2 (0x047002D4) -#define DSIPHY_REGULATOR_CTRL_3 (0x047002D8) - -#define DSIPHY_TIMING_CTRL_0 (0x04700260) -#define DSIPHY_TIMING_CTRL_1 (0x04700264) -#define DSIPHY_TIMING_CTRL_2 (0x04700268) -#define DSIPHY_TIMING_CTRL_3 (0x0470026C) -#define DSIPHY_TIMING_CTRL_4 (0x04700270) -#define DSIPHY_TIMING_CTRL_5 (0x04700274) -#define DSIPHY_TIMING_CTRL_6 (0x04700278) -#define DSIPHY_TIMING_CTRL_7 (0x0470027C) -#define DSIPHY_TIMING_CTRL_8 (0x04700280) -#define DSIPHY_TIMING_CTRL_9 (0x04700284) -#define DSIPHY_TIMING_CTRL_10 (0x04700288) - -#define DSIPHY_CTRL_0 (0x04700290) -#define DSIPHY_CTRL_1 (0x04700294) -#define DSIPHY_CTRL_2 (0x04700298) -#define DSIPHY_CTRL_3 (0x0470029C) - -#define DSIPHY_STRENGTH_CTRL_0 (0x047002A0) -#define DSIPHY_STRENGTH_CTRL_1 (0x047002A4) -#define DSIPHY_STRENGTH_CTRL_2 (0x047002A8) -#define DSIPHY_STRENGTH_CTRL_3 (0x047002AC) - -#define DSIPHY_PLL_CTRL_0 (0x04700200) -#define DSIPHY_PLL_CTRL_1 (0x04700204) -#define DSIPHY_PLL_CTRL_2 (0x04700208) -#define DSIPHY_PLL_CTRL_3 (0x0470020C) -#define DSIPHY_PLL_CTRL_4 (0x04700210) -#define DSIPHY_PLL_CTRL_5 (0x04700214) -#define DSIPHY_PLL_CTRL_6 (0x04700218) -#define DSIPHY_PLL_CTRL_7 (0x0470021C) -#define DSIPHY_PLL_CTRL_8 (0x04700220) -#define DSIPHY_PLL_CTRL_9 (0x04700224) -#define DSIPHY_PLL_CTRL_10 (0x04700228) -#define DSIPHY_PLL_CTRL_11 (0x0470022C) -#define DSIPHY_PLL_CTRL_12 (0x04700230) -#define DSIPHY_PLL_CTRL_13 (0x04700234) -#define DSIPHY_PLL_CTRL_14 (0x04700238) -#define DSIPHY_PLL_CTRL_15 (0x0470023C) -#define DSIPHY_PLL_CTRL_16 (0x04700240) -#define DSIPHY_PLL_CTRL_17 (0x04700244) -#define DSIPHY_PLL_CTRL_18 (0x04700248) -#define DSIPHY_PLL_CTRL_19 (0x0470024C) - -#define DSI_CMD_DMA_MEM_START_ADDR_PANEL (0x46000000) - -#define DSI_CLK_CTRL (0x04700118) -#define DSI_TRIG_CTRL (0x04700080) -#define DSI_CTRL (0x04700000) -#define DSI_COMMAND_MODE_DMA_CTRL (0x04700038) -#define DSI_COMMAND_MODE_MDP_CTRL (0x0470003C) -#define DSI_COMMAND_MODE_MDP_DCS_CMD_CTRL (0x04700040) -#define DSI_DMA_CMD_OFFSET (0x04700044) -#define DSI_DMA_CMD_LENGTH (0x04700048) -#define DSI_COMMAND_MODE_MDP_STREAM0_CTRL (0x04700054) -#define DSI_COMMAND_MODE_MDP_STREAM0_TOTAL (0x04700058) -#define DSI_COMMAND_MODE_MDP_STREAM1_CTRL (0x0470005C) -#define DSI_COMMAND_MODE_MDP_STREAM1_TOTAL (0x04700060) -#define DSI_ERR_INT_MASK0 (0x04700108) -#define DSI_INT_CTRL (0x0470010C) - -#define DSI_VIDEO_MODE_ACTIVE_H (0x04700020) -#define DSI_VIDEO_MODE_ACTIVE_V (0x04700024) -#define DSI_VIDEO_MODE_TOTAL (0x04700028) -#define DSI_VIDEO_MODE_HSYNC (0x0470002C) -#define DSI_VIDEO_MODE_VSYNC (0x04700030) -#define DSI_VIDEO_MODE_VSYNC_VPOS (0x04700034) - -#define DSI_MISR_CMD_CTRL (0x0470009C) -#define DSI_MISR_VIDEO_CTRL (0x047000A0) -#define DSI_EOT_PACKET_CTRL (0x047000C8) -#define DSI_VIDEO_MODE_CTRL (0x0470000C) -#define DSI_CAL_STRENGTH_CTRL (0x04700100) -#define DSI_CMD_MODE_DMA_SW_TRIGGER (0x0470008C) -#define DSI_CMD_MODE_MDP_SW_TRIGGER (0x04700090) - -#define MDP_OVERLAYPROC0_START (0x05100004) -#define MDP_DMA_P_START (0x0510000C) -#define MDP_DMA_S_START (0x05100010) -#define MDP_AXI_RDMASTER_CONFIG (0x05100028) -#define MDP_AXI_WRMASTER_CONFIG (0x05100030) -#define MDP_DISP_INTF_SEL (0x05100038) -#define MDP_MAX_RD_PENDING_CMD_CONFIG (0x0510004C) -#define MDP_INTR_ENABLE (0x05100050) -#define MDP_DSI_CMD_MODE_ID_MAP (0x051000A0) -#define MDP_DSI_CMD_MODE_TRIGGER_EN (0x051000A4) -#define MDP_OVERLAYPROC0_CFG (0x05110004) -#define MDP_DMA_P_CONFIG (0x05190000) -#define MDP_DMA_P_OUT_XY (0x05190010) -#define MDP_DMA_P_SIZE (0x05190004) -#define MDP_DMA_P_BUF_ADDR (0x05190008) -#define MDP_DMA_P_BUF_Y_STRIDE (0x0519000C) -#define MDP_DMA_P_OP_MODE (0x05190070) -#define MDP_DSI_VIDEO_EN (0x051E0000) -#define MDP_DSI_VIDEO_HSYNC_CTL (0x051E0004) -#define MDP_DSI_VIDEO_VSYNC_PERIOD (0x051E0008) -#define MDP_DSI_VIDEO_VSYNC_PULSE_WIDTH (0x051E000C) -#define MDP_DSI_VIDEO_DISPLAY_HCTL (0x051E0010) -#define MDP_DSI_VIDEO_DISPLAY_V_START (0x051E0014) -#define MDP_DSI_VIDEO_DISPLAY_V_END (0x051E0018) -#define MDP_DSI_VIDEO_BORDER_CLR (0x051E0028) -#define MDP_DSI_VIDEO_HSYNC_SKEW (0x051E0030) -#define MDP_DSI_VIDEO_CTL_POLARITY (0x051E0038) -#define MDP_DSI_VIDEO_TEST_CTL (0x051E0034) - -#define MDP_TEST_MODE_CLK (0x051F0000) -#define MDP_INTR_STATUS (0x05100054) -#define MMSS_SFPB_GPREG (0x05700058) - -//BEGINNING OF Tochiba Config- video mode - -static const unsigned char toshiba_panel_mcap_off[8] = { - 0x02, 0x00, 0x29, 0xc0, - 0xb2, 0x00, 0xff, 0xff -}; - -static const unsigned char toshiba_panel_ena_test_reg[8] = { - 0x03, 0x00, 0x29, 0xc0, - 0xEF, 0x01, 0x01, 0xff -}; - -static const unsigned char toshiba_panel_ena_test_reg_wvga[8] = { - 0x03, 0x00, 0x29, 0xc0, - 0xEF, 0x01, 0x01, 0xff -}; - -static const unsigned char toshiba_panel_num_of_2lane[8] = { - 0x03, 0x00, 0x29, 0xc0, // 63:2lane - 0xEF, 0x60, 0x63, 0xff -}; - -static const unsigned char toshiba_panel_num_of_1lane[8] = { - 0x03, 0x00, 0x29, 0xc0, // 62:1lane - 0xEF, 0x60, 0x62, 0xff -}; - -static const unsigned char toshiba_panel_non_burst_sync_pulse[8] = { - 0x03, 0x00, 0x29, 0xc0, - 0xef, 0x61, 0x09, 0xff -}; - -static const unsigned char toshiba_panel_set_DMODE_WQVGA[8] = { - 0x02, 0x00, 0x29, 0xc0, - 0xB3, 0x01, 0xFF, 0xff -}; - -static const unsigned char toshiba_panel_set_DMODE_WVGA[8] = { - 0x02, 0x00, 0x29, 0xc0, - 0xB3, 0x00, 0xFF, 0xff -}; - -static const unsigned char toshiba_panel_set_intern_WR_clk1_wvga[8] - = { - - 0x03, 0x00, 0x29, 0xC0, // 1 last packet - 0xef, 0x2f, 0xcc, 0xff, -}; - -static const unsigned char toshiba_panel_set_intern_WR_clk2_wvga[8] - = { - - 0x03, 0x00, 0x29, 0xC0, // 1 last packet - 0xef, 0x6e, 0xdd, 0xff, -}; - -static const unsigned char - toshiba_panel_set_intern_WR_clk1_wqvga[8] = { - - 0x03, 0x00, 0x29, 0xC0, // 1 last packet - 0xef, 0x2f, 0x22, 0xff, -}; - -static const unsigned char - toshiba_panel_set_intern_WR_clk2_wqvga[8] = { - - 0x03, 0x00, 0x29, 0xC0, // 1 last packet - 0xef, 0x6e, 0x33, 0xff, -}; - -static const unsigned char toshiba_panel_set_hor_addr_2A_wvga[12] = { - - 0x05, 0x00, 0x39, 0xC0, // 1 last packet - // 0x2A, 0x00, 0x08, 0x00,//100 = 64h - // 0x6b, 0xFF, 0xFF, 0xFF, - 0x2A, 0x00, 0x00, 0x01, // 0X1DF = 480-1 0X13F = 320-1 - 0xdf, 0xFF, 0xFF, 0xFF, -}; - -static const unsigned char toshiba_panel_set_hor_addr_2B_wvga[12] = { - - 0x05, 0x00, 0x39, 0xC0, // 1 last packet - // 0x2B, 0x00, 0x08, 0x00,//0X355 = 854-1; 0X1DF = 480-1 - // 0x6b, 0xFF, 0xFF, 0xFF, - 0x2B, 0x00, 0x00, 0x03, // 0X355 = 854-1; 0X1DF = 480-1 - 0x55, 0xFF, 0xFF, 0xFF, -}; - -static const unsigned char toshiba_panel_set_hor_addr_2A_wqvga[12] - = { - - 0x05, 0x00, 0x39, 0xC0, // 1 last packet - 0x2A, 0x00, 0x00, 0x00, // 0XEF = 240-1 - 0xef, 0xFF, 0xFF, 0xFF, -}; - -static const unsigned char toshiba_panel_set_hor_addr_2B_wqvga[12] - = { - - 0x05, 0x00, 0x39, 0xC0, // 1 last packet - 0x2B, 0x00, 0x00, 0x01, // 0X1aa = 427-1; - 0xaa, 0xFF, 0xFF, 0xFF, -}; - -static const unsigned char toshiba_panel_IFSEL[8] = { - 0x02, 0x00, 0x29, 0xc0, - 0x53, 0x01, 0xff, 0xff -}; - -static const unsigned char toshiba_panel_IFSEL_cmd_mode[8] = { - 0x02, 0x00, 0x29, 0xc0, - 0x53, 0x00, 0xff, 0xff -}; - -static const unsigned char toshiba_panel_exit_sleep[4] = { - 0x11, 0x00, 0x05, 0x80, // 25 Reg 0x29 < Display On>; generic write 1 - // params -}; - -static const unsigned char toshiba_panel_display_on[4] = { - // 0x29, 0x00, 0x05, 0x80,//25 Reg 0x29 < Display On>; generic write 1 - // params - 0x29, 0x00, 0x05, 0x80, // 25 Reg 0x29 < Display On>; generic write 1 - // params -}; - -//color mode off -static const unsigned char dsi_display_config_color_mode_off[4] = { - 0x00, 0x00, 0x02, 0x80, -}; - -//color mode on -static const unsigned char dsi_display_config_color_mode_on[4] = { - 0x00, 0x00, 0x12, 0x80, -}; - -//the end OF Tochiba Config- video mode - -/* NOVATEK BLUE panel */ -static char novatek_panel_sw_reset[4] = {0x01, 0x00, 0x05, 0x00}; /* DTYPE_DCS_WRITE */ -static char novatek_panel_enter_sleep[4] = {0x10, 0x00, 0x05, 0x80}; /* DTYPE_DCS_WRITE */ -static char novatek_panel_exit_sleep[4] = {0x11, 0x00, 0x05, 0x80}; /* DTYPE_DCS_WRITE */ -static char novatek_panel_display_off[4] = {0x28, 0x00, 0x05, 0x80}; /* DTYPE_DCS_WRITE */ -static char novatek_panel_display_on[4] = {0x29, 0x00, 0x05, 0x80}; /* DTYPE_DCS_WRITE */ - -static char novatek_panel_set_onelane[4] = {0xae, 0x01, 0x15, 0x80}; /* DTYPE_DCS_WRITE1 */ -static char novatek_panel_rgb_888[4] = {0x3A, 0x77, 0x15, 0x80}; /* DTYPE_DCS_WRITE1 */ -static char novatek_panel_set_twolane[4] = {0xae, 0x03, 0x15, 0x80}; /* DTYPE_DCS_WRITE1 */ - -/* commands by Novatke */ -static char novatek_panel_f4[4] = {0xf4, 0x55, 0x15, 0x80}; /* DTYPE_DCS_WRITE1 */ -static char novatek_panel_8c[20] = { /* DTYPE_DCS_LWRITE */ - 0x10, 0x00, 0x39, 0xC0, 0x8C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x08, 0x00, 0x30, 0xC0, 0xB7, 0x37}; -static char novatek_panel_ff[4] = {0xff, 0x55, 0x15, 0x80}; /* DTYPE_DCS_WRITE1 */ - -static char novatek_panel_set_width[12] = { /* DTYPE_DCS_LWRITE */ - 0x05, 0x00, 0x39, 0xC0,//1 last packet - 0x2A, 0x00, 0x00, 0x02,//clmn:0 - 0x21B=539 - 0x1B, 0xFF, 0xFF, 0xFF -}; /* 540 - 1 */ -static char novatek_panel_set_height[12] = { /* DTYPE_DCS_LWRITE */ - 0x05, 0x00, 0x39, 0xC0,//1 last packet - 0x2B, 0x00, 0x00, 0x03,//row:0 - 0x3BF=959 - 0xBF, 0xFF, 0xFF, 0xFF, -}; /* 960 - 1 */ -/* End of Novatek Blue panel commands */ - - -#define MIPI_VIDEO_MODE 1 -#define MIPI_CMD_MODE 2 - -struct mipi_dsi_phy_ctrl { - uint32_t regulator[4]; - uint32_t timing[12]; - uint32_t ctrl[4]; - uint32_t strength[4]; - uint32_t pll[21]; -}; - -struct mipi_dsi_cmd { - int size; - char *payload; -}; - -struct mipi_dsi_panel_config { - char mode; - char num_of_lanes; - struct mipi_dsi_phy_ctrl *dsi_phy_config; - struct mipi_dsi_cmd *panel_cmds; - int num_of_panel_cmds; -}; - -static struct mipi_dsi_cmd toshiba_panel_video_mode_cmds[] = { - {sizeof(toshiba_panel_mcap_off), toshiba_panel_mcap_off}, - {sizeof(toshiba_panel_ena_test_reg), toshiba_panel_ena_test_reg}, - {sizeof(toshiba_panel_num_of_1lane), toshiba_panel_num_of_1lane}, - {sizeof(toshiba_panel_non_burst_sync_pulse), toshiba_panel_non_burst_sync_pulse}, - {sizeof(toshiba_panel_set_DMODE_WVGA), toshiba_panel_set_DMODE_WVGA}, - {sizeof(toshiba_panel_set_intern_WR_clk1_wvga), toshiba_panel_set_intern_WR_clk1_wvga}, - {sizeof(toshiba_panel_set_intern_WR_clk2_wvga), toshiba_panel_set_intern_WR_clk2_wvga}, - {sizeof(toshiba_panel_set_hor_addr_2A_wvga), toshiba_panel_set_hor_addr_2A_wvga}, - {sizeof(toshiba_panel_set_hor_addr_2B_wvga), toshiba_panel_set_hor_addr_2B_wvga}, - {sizeof(toshiba_panel_IFSEL), toshiba_panel_IFSEL}, - {sizeof(toshiba_panel_exit_sleep), toshiba_panel_exit_sleep}, - {sizeof(toshiba_panel_display_on), toshiba_panel_display_on}, - {sizeof(dsi_display_config_color_mode_on), dsi_display_config_color_mode_on}, - {sizeof(dsi_display_config_color_mode_off), dsi_display_config_color_mode_off}, -}; - -static struct mipi_dsi_phy_ctrl mipi_dsi_toshiba_panel_phy_ctrl = { - /* 480*854, RGB888, 1 Lane 60 fps video mode */ - {0x03, 0x01, 0x01, 0x00}, /* regulator */ - /* timing */ - {0x50, 0x0f, 0x14, 0x19, 0x23, 0x0e, 0x12, 0x16, - 0x1b, 0x1c, 0x04}, - {0x7f, 0x00, 0x00, 0x00}, /* phy ctrl */ - {0xee, 0x03, 0x86, 0x03}, /* strength */ - /* pll control */ - -#if defined(DSI_BIT_CLK_366MHZ) - {0x41, 0xdb, 0xb2, 0xf5, 0x00, 0x50, 0x48, 0x63, - 0x31, 0x0f, 0x07, - 0x05, 0x14, 0x03, 0x03, 0x03, 0x54, 0x06, 0x10, 0x04, 0x03 }, -#elif defined(DSI_BIT_CLK_380MHZ) - {0x41, 0xf7, 0xb2, 0xf5, 0x00, 0x50, 0x48, 0x63, - 0x31, 0x0f, 0x07, - 0x05, 0x14, 0x03, 0x03, 0x03, 0x54, 0x06, 0x10, 0x04, 0x03 }, -#elif defined(DSI_BIT_CLK_400MHZ) - {0x41, 0x8f, 0xb1, 0xda, 0x00, 0x50, 0x48, 0x63, - 0x31, 0x0f, 0x07, - 0x05, 0x14, 0x03, 0x03, 0x03, 0x54, 0x06, 0x10, 0x04, 0x03 }, -#else /* 200 mhz */ - {0x41, 0x8f, 0xb1, 0xda, 0x00, 0x50, 0x48, 0x63, - 0x33, 0x1f, 0x1f /* for 1 lane ; 0x0f for 2 lanes*/, - 0x05, 0x14, 0x03, 0x03, 0x03, 0x54, 0x06, 0x10, 0x04, 0x03 }, -#endif -}; - -static struct mipi_dsi_cmd novatek_panel_cmd_mode_cmds[] = { - {sizeof(novatek_panel_sw_reset), novatek_panel_sw_reset}, - {sizeof(novatek_panel_exit_sleep), novatek_panel_exit_sleep}, - {sizeof(novatek_panel_display_on), novatek_panel_display_on}, - {sizeof(novatek_panel_f4), novatek_panel_f4}, - {sizeof(novatek_panel_8c), novatek_panel_8c}, - {sizeof(novatek_panel_ff), novatek_panel_ff}, - {sizeof(novatek_panel_set_twolane), novatek_panel_set_twolane}, - {sizeof(novatek_panel_set_width), novatek_panel_set_width}, - {sizeof(novatek_panel_set_height), novatek_panel_set_height}, - {sizeof(novatek_panel_rgb_888), novatek_panel_rgb_888} -}; - -static struct mipi_dsi_phy_ctrl mipi_dsi_novatek_panel_phy_ctrl = { - /* DSI_BIT_CLK at 500MHz, 2 lane, RGB888 */ - {0x03, 0x01, 0x01, 0x00}, /* regulator */ - /* timing */ - {0x96, 0x26, 0x23, 0x00, 0x50, 0x4B, 0x1e, - 0x28, 0x28, 0x03, 0x04}, - {0x7f, 0x00, 0x00, 0x00}, /* phy ctrl */ - {0xee, 0x02, 0x86, 0x00}, /* strength */ - /* pll control */ - {0x40, 0xf9, 0xb0, 0xda, 0x00, 0x50, 0x48, 0x63, - /* 0x30, 0x07, 0x07, --> One lane configuration */ - 0x30, 0x07, 0x03, /* --> Two lane configuration */ - 0x05, 0x14, 0x03, 0x0, 0x0, 0x54, 0x06, 0x10, 0x04, 0x0}, -}; - -struct mipi_dsi_panel_config toshiba_panel_info = { - .mode = MIPI_VIDEO_MODE, - .num_of_lanes = 1, - .dsi_phy_config = &mipi_dsi_toshiba_panel_phy_ctrl, - .panel_cmds = toshiba_panel_video_mode_cmds, - .num_of_panel_cmds = ARRAY_SIZE(toshiba_panel_video_mode_cmds), -}; - -struct mipi_dsi_panel_config novatek_panel_info = { - .mode = MIPI_CMD_MODE, - .num_of_lanes = 2, - .dsi_phy_config = &mipi_dsi_novatek_panel_phy_ctrl, - .panel_cmds = novatek_panel_cmd_mode_cmds, - .num_of_panel_cmds = ARRAY_SIZE(novatek_panel_cmd_mode_cmds), -}; - -#endif diff --git a/lk/platform/msm_shared/include/mmc.h b/lk/platform/msm_shared/include/mmc.h deleted file mode 100644 index 1d230c1..0000000 --- a/lk/platform/msm_shared/include/mmc.h +++ /dev/null @@ -1,623 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __MMC_H__ -#define __MMC_H__ - -#ifndef MMC_SLOT -#define MMC_SLOT 0 -#endif - -#define MMC_BOOT_MCI_REG(offset) ((mmc_boot_mci_base) + offset) - -/* - * Define Macros for SDCC Registers - */ -#define MMC_BOOT_MCI_POWER MMC_BOOT_MCI_REG(0x000) /* 8 bit */ - -/* MCICMD output control - 6th bit */ -#ifdef PLATFORM_MSM7X30 -#define MMC_BOOT_MCI_OPEN_DRAIN (1 << 6) -#define MMC_BOOT_MCI_PWR_OFF 0x00 -#define MMC_BOOT_MCI_PWR_UP 0x01 -#define MMC_BOOT_MCI_PWR_ON 0x01 -#else -#define MMC_BOOT_MCI_OPEN_DRAIN (1 << 6) -#define MMC_BOOT_MCI_PWR_OFF 0x00 -#define MMC_BOOT_MCI_PWR_UP 0x02 -#define MMC_BOOT_MCI_PWR_ON 0x03 -#endif - -#define MMC_BOOT_MCI_CLK MMC_BOOT_MCI_REG(0x004) /* 16 bits */ -/* Enable MCI bus clock - 0: clock disabled 1: enabled */ -#define MMC_BOOT_MCI_CLK_ENABLE (1 << 8) -/* Disable clk o/p when bus idle- 0:always enabled 1:enabled when bus active */ -#define MMC_BOOT_MCI_CLK_PWRSAVE (1 << 9) -/* Enable Widebus mode - 00: 1 bit mode 10:4 bit mode 01/11: 8 bit mode */ -#define MMC_BOOT_MCI_CLK_WIDEBUS_MODE (3 << 10) -#define MMC_BOOT_MCI_CLK_WIDEBUS_1_BIT 0 -#define MMC_BOOT_MCI_CLK_WIDEBUS_4_BIT (2 << 10) -#define MMC_BOOT_MCI_CLK_WIDEBUS_8_BIT (1 << 10) -/* Enable flow control- 0: disable 1: enable */ -#define MMC_BOOT_MCI_CLK_ENA_FLOW (1 << 12) -/* Set/clear to select rising/falling edge for data/cmd output */ -#define MMC_BOOT_MCI_CLK_INVERT_OUT (1 << 13) -/* Select to lach data/cmd coming in falling/rising/feedbk/loopbk of MCIclk */ -#define MMC_BOOT_MCI_CLK_IN_FALLING 0x0 -#define MMC_BOOT_MCI_CLK_IN_RISING (1 << 14) -#define MMC_BOOT_MCI_CLK_IN_FEEDBACK (2 << 14) -#define MMC_BOOT_MCI_CLK_IN_LOOPBACK (3 << 14) - -/* Bus Width */ -#define MMC_BOOT_BUS_WIDTH_1_BIT 0 -#define MMC_BOOT_BUS_WIDTH_4_BIT 2 -#define MMC_BOOT_BUS_WIDTH_8_BIT 3 - -#define MMC_BOOT_MCI_ARGUMENT MMC_BOOT_MCI_REG(0x008) /* 32 bits */ - -#define MMC_BOOT_MCI_CMD MMC_BOOT_MCI_REG(0x00C) /* 16 bits */ -/* Command Index: 0 -5 */ -/* Waits for response if set */ -#define MMC_BOOT_MCI_CMD_RESPONSE (1 << 6) -/* Receives a 136-bit long response if set */ -#define MMC_BOOT_MCI_CMD_LONGRSP (1 << 7) -/* If set, CPSM disables command timer and waits for interrupt */ -#define MMC_BOOT_MCI_CMD_INTERRUPT (1 << 8) -/* If set waits for CmdPend before starting to send a command */ -#define MMC_BOOT_MCI_CMD_PENDING (1 << 9) -/* CPSM is enabled if set */ -#define MMC_BOOT_MCI_CMD_ENABLE (1 << 10) -/* If set PROG_DONE status bit asserted when busy is de-asserted */ -#define MMC_BOOT_MCI_CMD_PROG_ENA (1 << 11) -/* To indicate that this is a Command with Data (for SDIO interrupts) */ -#define MMC_BOOT_MCI_CMD_DAT_CMD (1 << 12) -/* Signals the next command to be an abort (stop) command. Always read 0 */ -#define MMC_BOOT_MCI_CMD_MCIABORT (1 << 13) -/* Waits for Command Completion Signal if set */ -#define MMC_BOOT_MCI_CMD_CCS_ENABLE (1 << 14) -/* If set sends CCS disable sequence */ -#define MMC_BOOT_MCI_CMD_CCS_DISABLE (1 << 15) - -#define MMC_BOOT_MCI_RESP_CMD MMC_BOOT_MCI_REG(0x010) - -#define MMC_BOOT_MCI_RESP_0 MMC_BOOT_MCI_REG(0x014) -#define MMC_BOOT_MCI_RESP_1 MMC_BOOT_MCI_REG(0x018) -#define MMC_BOOT_MCI_RESP_2 MMC_BOOT_MCI_REG(0x01C) -#define MMC_BOOT_MCI_RESP_3 MMC_BOOT_MCI_REG(0x020) - -#define MMC_BOOT_MCI_DATA_TIMER MMC_BOOT_MCI_REG(0x024) -#define MMC_BOOT_MCI_DATA_LENGTH MMC_BOOT_MCI_REG(0x028) -#define MMC_BOOT_MCI_DATA_CTL MMC_BOOT_MCI_REG(0x02C) /* 16 bits */ -/* Data transfer enabled */ -#define MMC_BOOT_MCI_DATA_ENABLE (1 << 0) -/* Data transfer direction - 0: controller to card 1:card to controller */ -#define MMC_BOOT_MCI_DATA_DIR (1 << 1) -/* Data transfer mode - 0: block data transfer 1: stream data transfer */ -#define MMC_BOOT_MCI_DATA_MODE (1 << 2) -/* Enable DM interface - 0: DM disabled 1: DM enabled */ -#define MMC_BOOT_MCI_DATA_DM_ENABLE (1 << 3) -/* Data block length in bytes (1-4096) */ -#define MMC_BOOT_MCI_BLKSIZE_POS 4 -#define MMC_BOOT_MCI_DATA_COUNT MMC_BOOT_MCI_REG(0x030) -#define MMC_BOOT_MCI_STATUS MMC_BOOT_MCI_REG(0x034) -/* Command response received - CRC check failed */ -#define MMC_BOOT_MCI_STAT_CMD_CRC_FAIL (1 << 0) -/* Data block sent/received - CRC check failed */ -#define MMC_BOOT_MCI_STAT_DATA_CRC_FAIL (1 << 1) -/* Command resonse timeout */ -#define MMC_BOOT_MCI_STAT_CMD_TIMEOUT (1 << 2) -/* Data timeout */ -#define MMC_BOOT_MCI_STAT_DATA_TIMEOUT (1 << 3) -/* Transmit FIFO underrun error */ -#define MMC_BOOT_MCI_STAT_TX_UNDRUN (1 << 4) -/* Receive FIFO overrun error */ -#define MMC_BOOT_MCI_STAT_RX_OVRRUN (1 << 5) -/* Command response received - CRC check passed */ -#define MMC_BOOT_MCI_STAT_CMD_RESP_END (1 << 6) -/* Command sent - no response required */ -#define MMC_BOOT_MCI_STAT_CMD_SENT (1 << 7) -/* Data end - data counter zero */ -#define MMC_BOOT_MCI_STAT_DATA_END (1 << 8) -/* Start bit not detected on all data signals in wide bus mode */ -#define MMC_BOOT_MCI_STAT_START_BIT_ERR (1 << 9) -/* Data block sent/received - CRC check passed */ -#define MMC_BOOT_MCI_STAT_DATA_BLK_END (1 << 10) -/* Command transfer in progress */ -#define MMC_BOOT_MCI_STAT_CMD_ACTIVE (1 << 11) -/* Data transmit in progress */ -#define MMC_BOOT_MCI_STAT_TX_ACTIVE (1 << 12) -/* Data receive in progress */ -#define MMC_BOOT_MCI_STAT_RX_ACTIVE (1 << 13) -/* Transmit FIFO half full */ -#define MMC_BOOT_MCI_STAT_TX_FIFO_HFULL (1 << 14) -/* Receive FIFO half full */ -#define MMC_BOOT_MCI_STAT_RX_FIFO_HFULL (1 << 15) -/* Transmit FIFO full */ -#define MMC_BOOT_MCI_STAT_TX_FIFO_FULL (1 << 16) -/* Receive FIFO full */ -#define MMC_BOOT_MCI_STAT_RX_FIFO_FULL (1 << 17) -/* Transmit FIFO empty */ -#define MMC_BOOT_MCI_STAT_TX_FIFO_EMPTY (1 << 18) -/* Receive FIFO empty */ -#define MMC_BOOT_MCI_STAT_RX_FIFO_EMPTY (1 << 19) -/* Data available in transmit FIFO */ -#define MMC_BOOT_MCI_STAT_TX_DATA_AVLBL (1 << 20) -/* Data available in receive FIFO */ -#define MMC_BOOT_MCI_STAT_RX_DATA_AVLBL (1 << 21) -/* SDIO interrupt indicator for wake-up */ -#define MMC_BOOT_MCI_STAT_SDIO_INTR (1 << 22) -/* Programming done */ -#define MMC_BOOT_MCI_STAT_PROG_DONE (1 << 23) -/* CE-ATA command completion signal detected */ -#define MMC_BOOT_MCI_STAT_ATA_CMD_CMPL (1 << 24) -/* SDIO interrupt indicator for normal operation */ -#define MMC_BOOT_MCI_STAT_SDIO_INTR_OP (1 << 25) -/* Commpand completion signal timeout */ -#define MMC_BOOT_MCI_STAT_CCS_TIMEOUT (1 << 26) - -#define MMC_BOOT_MCI_STATIC_STATUS (MMC_BOOT_MCI_STAT_CMD_CRC_FAIL| \ - MMC_BOOT_MCI_STAT_DATA_CRC_FAIL| \ - MMC_BOOT_MCI_STAT_CMD_TIMEOUT| \ - MMC_BOOT_MCI_STAT_DATA_TIMEOUT| \ - MMC_BOOT_MCI_STAT_TX_UNDRUN| \ - MMC_BOOT_MCI_STAT_RX_OVRRUN| \ - MMC_BOOT_MCI_STAT_CMD_RESP_END| \ - MMC_BOOT_MCI_STAT_CMD_SENT| \ - MMC_BOOT_MCI_STAT_DATA_END| \ - MMC_BOOT_MCI_STAT_START_BIT_ERR| \ - MMC_BOOT_MCI_STAT_DATA_BLK_END| \ - MMC_BOOT_MCI_SDIO_INTR_CLR| \ - MMC_BOOT_MCI_STAT_PROG_DONE| \ - MMC_BOOT_MCI_STAT_ATA_CMD_CMPL |\ - MMC_BOOT_MCI_STAT_CCS_TIMEOUT) - -#define MMC_BOOT_MCI_CLEAR MMC_BOOT_MCI_REG(0x038) -#define MMC_BOOT_MCI_CMD_CRC_FAIL_CLR (1 << 0) -#define MMC_BOOT_MCI_DATA_CRC_FAIL_CLR (1 << 1) -#define MMC_BOOT_MCI_CMD_TIMEOUT_CLR (1 << 2) -#define MMC_BOOT_MCI_DATA_TIMEOUT_CLR (1 << 3) -#define MMC_BOOT_MCI_TX_UNDERRUN_CLR (1 << 4) -#define MMC_BOOT_MCI_RX_OVERRUN_CLR (1 << 5) -#define MMC_BOOT_MCI_CMD_RESP_END_CLR (1 << 6) -#define MMC_BOOT_MCI_CMD_SENT_CLR (1 << 7) -#define MMC_BOOT_MCI_DATA_END_CLR (1 << 8) -#define MMC_BOOT_MCI_START_BIT_ERR_CLR (1 << 9) -#define MMC_BOOT_MCI_DATA_BLK_END_CLR (1 << 10) -#define MMC_BOOT_MCI_SDIO_INTR_CLR (1 << 22) -#define MMC_BOOT_MCI_PROG_DONE_CLR (1 << 23) -#define MMC_BOOT_MCI_ATA_CMD_COMPLR_CLR (1 << 24) -#define MMC_BOOT_MCI_CCS_TIMEOUT_CLR (1 << 25) - -#define MMC_BOOT_MCI_INT_MASK0 MMC_BOOT_MCI_REG(0x03C) -#define MMC_BOOT_MCI_CMD_CRC_FAIL_MASK (1 << 0) -#define MMC_BOOT_MCI_DATA_CRC_FAIL_MASK (1 << 1) -#define MMC_BOOT_MCI_CMD_TIMEOUT_MASK (1 << 2) -#define MMC_BOOT_MCI_DATA_TIMEOUT_MASK (1 << 3) -#define MMC_BOOT_MCI_TX_OVERRUN_MASK (1 << 4) -#define MMC_BOOT_MCI_RX_OVERRUN_MASK (1 << 5) -#define MMC_BOOT_MCI_CMD_RESP_END_MASK (1 << 6) -#define MMC_BOOT_MCI_CMD_SENT_MASK (1 << 7) -#define MMC_BOOT_MCI_DATA_END_MASK (1 << 8) -#define MMC_BOOT_MCI_START_BIT_ERR_MASK (1 << 9) -#define MMC_BOOT_MCI_DATA_BLK_END_MASK (1 << 10) -#define MMC_BOOT_MCI_CMD_ACTIVE_MASK (1 << 11) -#define MMC_BOOT_MCI_TX_ACTIVE_MASK (1 << 12) -#define MMC_BOOT_MCI_RX_ACTIVE_MASK (1 << 13) -#define MMC_BOOT_MCI_TX_FIFO_HFULL_MASK (1 << 14) -#define MMC_BOOT_MCI_RX_FIFO_HFULL_MASK (1 << 15) -#define MMC_BOOT_MCI_TX_FIFO_FULL_MASK (1 << 16) -#define MMC_BOOT_MCI_RX_FIFO_FULL_MASK (1 << 17) -#define MMC_BOOT_MCI_TX_FIFO_EMPTY_MASK (1 << 18) -#define MMC_BOOT_MCI_RX_FIFO_EMPTY_MASK (1 << 19) -#define MMC_BOOT_MCI_TX_DATA_AVLBL_MASK (1 << 20) -#define MMC_BOOT_MCI_RX_DATA_AVLBL_MASK (1 << 21) -#define MMC_BOOT_MCI_SDIO_INT_MASK (1 << 22) -#define MMC_BOOT_MCI_PROG_DONE_MASK (1 << 23) -#define MMC_BOOT_MCI_ATA_CMD_COMPL_MASK (1 << 24) -#define MMC_BOOT_MCI_SDIO_INT_OPER_MASK (1 << 25) -#define MMC_BOOT_MCI_CCS_TIME_OUT_MASK (1 << 26) - -#define MMC_BOOT_MCI_INT_MASK1 MMC_BOOT_MCI_REG(0x040) - -#define MMC_BOOT_MCI_FIFO_COUNT MMC_BOOT_MCI_REG(0x044) - -#define MMC_BOOT_MCI_CCS_TIMER MMC_BOOT_MCI_REG(0x0058) - -#define MMC_BOOT_MCI_FIFO MMC_BOOT_MCI_REG(0x080) - -/* Card status */ -#define MMC_BOOT_CARD_STATUS(x) ((x>>9) & 0x0F) -#define MMC_BOOT_TRAN_STATE 4 -#define MMC_BOOT_PROG_STATE 7 - -/* SD Memory Card bus commands */ -#define CMD0_GO_IDLE_STATE 0 -#define CMD1_SEND_OP_COND 1 -#define CMD2_ALL_SEND_CID 2 -#define CMD3_SEND_RELATIVE_ADDR 3 -#define CMD4_SET_DSR 4 -#define CMD6_SWITCH_FUNC 6 -#define ACMD6_SET_BUS_WIDTH 6 /* SD card */ -#define CMD7_SELECT_DESELECT_CARD 7 -#define CMD8_SEND_EXT_CSD 8 -#define CMD8_SEND_IF_COND 8 /* SD card */ -#define CMD9_SEND_CSD 9 -#define CMD10_SEND_CID 10 -#define CMD12_STOP_TRANSMISSION 12 -#define CMD13_SEND_STATUS 13 -#define CMD15_GO_INACTIVE_STATUS 15 -#define CMD16_SET_BLOCKLEN 16 -#define CMD17_READ_SINGLE_BLOCK 17 -#define CMD18_READ_MULTIPLE_BLOCK 18 -#define CMD24_WRITE_SINGLE_BLOCK 24 -#define CMD25_WRITE_MULTIPLE_BLOCK 25 -#define CMD28_SET_WRITE_PROTECT 28 -#define CMD29_CLEAR_WRITE_PROTECT 29 -#define CMD31_SEND_WRITE_PROT_TYPE 31 -#define CMD32_ERASE_WR_BLK_START 32 -#define CMD33_ERASE_WR_BLK_END 33 -#define CMD38_ERASE 38 -#define ACMD41_SEND_OP_COND 41 /* SD card */ -#define ACMD51_SEND_SCR 51 /* SD card */ -#define CMD55_APP_CMD 55 /* SD card */ - -/* Switch Function Modes */ -#define MMC_BOOT_SWITCH_FUNC_CHECK 0 -#define MMC_BOOT_SWITCH_FUNC_SET 1 - -/* OCR Register */ -#define MMC_BOOT_OCR_17_19 (1 << 7) -#define MMC_BOOT_OCR_27_36 (0x1FF << 15) -#define MMC_BOOT_OCR_SEC_MODE (2 << 29) -#define MMC_BOOT_OCR_BUSY (1 << 31) - -/* Commands type */ -#define MMC_BOOT_CMD_BCAST (1 << 0) -#define MMC_BOOT_CMD_BCAST_W_RESP (1 << 1) -#define MMC_BOOT_CMD_ADDRESS (1 << 2) -#define MMC_BOOT_CMD_ADDR_DATA_XFER (1 << 3) - -/* Response types */ -#define MMC_BOOT_RESP_NONE 0 -#define MMC_BOOT_RESP_R1 (1 << 0) -#define MMC_BOOT_RESP_R1B (1 << 1) -#define MMC_BOOT_RESP_R2 (1 << 2) -#define MMC_BOOT_RESP_R3 (1 << 3) -#define MMC_BOOT_RESP_R6 (1 << 6) -#define MMC_BOOT_RESP_R7 (1 << 7) - -#define IS_RESP_136_BITS(x) (x & MMC_BOOT_RESP_R2) -#define CHECK_FOR_BUSY_AT_RESP(x) - -/* Card Status bits (R1 register) */ -#define MMC_BOOT_R1_AKE_SEQ_ERROR (1 << 3) -#define MMC_BOOT_R1_APP_CMD (1 << 5) -#define MMC_BOOT_R1_RDY_FOR_DATA (1 << 6) -#define MMC_BOOT_R1_CURR_STATE_IDLE (0 << 9) -#define MMC_BOOT_R1_CURR_STATE_RDY (1 << 9) -#define MMC_BOOT_R1_CURR_STATE_IDENT (2 << 9) -#define MMC_BOOT_R1_CURR_STATE_STBY (3 << 9) -#define MMC_BOOT_R1_CURR_STATE_TRAN (4 << 9) -#define MMC_BOOT_R1_CURR_STATE_DATA (5 << 9) -#define MMC_BOOT_R1_CURR_STATE_RCV (6 << 9) -#define MMC_BOOT_R1_CURR_STATE_PRG (7 << 9) -#define MMC_BOOT_R1_CURR_STATE_DIS (8 << 9) -#define MMC_BOOT_R1_ERASE_RESET (1 << 13) -#define MMC_BOOT_R1_CARD_ECC_DISABLED (1 << 14) -#define MMC_BOOT_R1_WP_ERASE_SKIP (1 << 15) -#define MMC_BOOT_R1_ERROR (1 << 19) -#define MMC_BOOT_R1_CC_ERROR (1 << 20) -#define MMC_BOOT_R1_CARD_ECC_FAILED (1 << 21) -#define MMC_BOOT_R1_ILLEGAL_CMD (1 << 22) -#define MMC_BOOT_R1_COM_CRC_ERR (1 << 23) -#define MMC_BOOT_R1_LOCK_UNLOCK_FAIL (1 << 24) -#define MMC_BOOT_R1_CARD_IS_LOCKED (1 << 25) -#define MMC_BOOT_R1_WP_VIOLATION (1 << 26) -#define MMC_BOOT_R1_ERASE_PARAM (1 << 27) -#define MMC_BOOT_R1_ERASE_SEQ_ERR (1 << 28) -#define MMC_BOOT_R1_BLOCK_LEN_ERR (1 << 29) -#define MMC_BOOT_R1_ADDR_ERR (1 << 30) -#define MMC_BOOT_R1_OUT_OF_RANGE (1 << 31) - -/* Macros for Common Errors */ -#define MMC_BOOT_E_SUCCESS 0 -#define MMC_BOOT_E_FAILURE 1 -#define MMC_BOOT_E_TIMEOUT 2 -#define MMC_BOOT_E_INVAL 3 -#define MMC_BOOT_E_CRC_FAIL 4 -#define MMC_BOOT_E_INIT_FAIL 5 -#define MMC_BOOT_E_CMD_INDX_MISMATCH 6 -#define MMC_BOOT_E_RESP_VERIFY_FAIL 7 -#define MMC_BOOT_E_NOT_SUPPORTED 8 -#define MMC_BOOT_E_CARD_BUSY 9 -#define MMC_BOOT_E_MEM_ALLOC_FAIL 10 -#define MMC_BOOT_E_CLK_ENABLE_FAIL 11 -#define MMC_BOOT_E_CMMC_DECODE_FAIL 12 -#define MMC_BOOT_E_CID_DECODE_FAIL 13 -#define MMC_BOOT_E_BLOCKLEN_ERR 14 -#define MMC_BOOT_E_ADDRESS_ERR 15 -#define MMC_BOOT_E_DATA_CRC_FAIL 16 -#define MMC_BOOT_E_DATA_TIMEOUT 17 -#define MMC_BOOT_E_RX_OVRRUN 18 -#define MMC_BOOT_E_VREG_SET_FAILED 19 -#define MMC_BOOT_E_GPIO_CFG_FAIL 20 - -/* EXT_CSD */ -#define MMC_BOOT_ACCESS_WRITE 0x3 -#define MMC_BOOT_EXT_CMMC_HS_TIMING 185 -#define MMC_BOOT_EXT_CMMC_BUS_WIDTH 183 - -#define MMC_BOOT_EXT_USER_WP 171 -#define MMC_BOOT_EXT_ERASE_GROUP_DEF 175 -#define MMC_BOOT_EXT_HC_WP_GRP_SIZE 221 -#define MMC_BOOT_EXT_HC_ERASE_GRP_SIZE 224 - -#define IS_BIT_SET_EXT_CSD(val, bit) ((ext_csd_buf[val]) & (1<<(bit))) -#define IS_ADDR_OUT_OF_RANGE(resp) ((resp >> 31) & 0x01) - -#define MMC_BOOT_US_PERM_WP_EN 2 -#define MMC_BOOT_US_PWR_WP_DIS 3 - -#define MMC_BOOT_US_PERM_WP_DIS (1<<4) -#define MMC_BOOT_US_PWR_WP_EN 1 - -/* For SD */ -#define MMC_BOOT_SD_HC_VOLT_SUPPLIED 0x000001AA -#define MMC_BOOT_SD_NEG_OCR 0x00FF8000 -#define MMC_BOOT_SD_HC_HCS 0x40000000 -#define MMC_BOOT_SD_DEV_READY 0x80000000 -#define MMC_BOOT_SD_SWITCH_HS 0x80FFFF01 - -/* Data structure definitions */ -struct mmc_boot_command -{ - unsigned int cmd_index; - unsigned int argument; - unsigned int cmd_type; - - unsigned int resp[4]; - unsigned int resp_type; - unsigned int prg_enabled; - unsigned int xfer_mode; -}; - -#define MMC_BOOT_XFER_MODE_BLOCK 0 -#define MMC_BOOT_XFER_MODE_STREAM 1 - -/* CSD Register. - * Note: not all the fields have been defined here - */ -struct mmc_boot_csd -{ - unsigned int cmmc_structure; - unsigned int card_cmd_class; - unsigned int write_blk_len; - unsigned int read_blk_len; - unsigned int r2w_factor; - unsigned int sector_size; - unsigned int c_size_mult; - unsigned int c_size; - unsigned int nsac_clk_cycle; - unsigned int taac_ns; - unsigned int tran_speed; - unsigned int erase_grp_size; - unsigned int erase_grp_mult; - unsigned int wp_grp_size; - unsigned int wp_grp_enable:1; - unsigned int perm_wp:1; - unsigned int temp_wp:1; - unsigned int erase_blk_len:1; - unsigned int read_blk_misalign:1; - unsigned int write_blk_misalign:1; - unsigned int read_blk_partial:1; - unsigned int write_blk_partial:1; -}; - -/* CID Register */ -struct mmc_boot_cid -{ - unsigned int mid; /* 8 bit manufacturer id*/ - unsigned int oid; /* 16 bits 2 character ASCII - OEM ID*/ - unsigned char pnm[7];/* 6 character ASCII - product name*/ - unsigned int prv; /* 8 bits - product revision */ - unsigned int psn; /* 32 bits - product serial number */ - unsigned int month; /* 4 bits manufacturing month */ - unsigned int year; /* 4 bits manufacturing year */ -}; - -/* SCR Register */ -struct mmc_boot_scr -{ - unsigned int scr_structure; - unsigned int mmc_spec; -#define MMC_BOOT_SCR_MMC_SPEC_V1_01 0 -#define MMC_BOOT_SCR_MMC_SPEC_V1_10 1 -#define MMC_BOOT_SCR_MMC_SPEC_V2_00 2 - unsigned int data_stat_after_erase; - unsigned int mmc_security; -#define MMC_BOOT_SCR_NO_SECURITY 0 -#define MMC_BOOT_SCR_SECURITY_UNUSED 1 -#define MMC_BOOT_SCR_SECURITY_V1_01 2 -#define MMC_BOOT_SCR_SECURITY_V2_00 3 - unsigned int mmc_bus_width; -#define MMC_BOOT_SCR_BUS_WIDTH_1_BIT (1<<0) -#define MMC_BOOT_SCR_BUS_WIDTH_4_BIT (1<<2) -}; - -struct mmc_boot_card -{ - unsigned int rca; - unsigned int ocr; - unsigned int capacity; - unsigned int type; -#define MMC_BOOT_TYPE_STD_SD 0 -#define MMC_BOOT_TYPE_SDHC 1 -#define MMC_BOOT_TYPE_SDIO 2 -#define MMC_BOOT_TYPE_MMCHC 3 -#define MMC_BOOT_TYPE_STD_MMC 4 - unsigned int status; -#define MMC_BOOT_STATUS_INACTIVE 0 -#define MMC_BOOT_STATUS_ACTIVE 1 - unsigned int rd_timeout_ns; - unsigned int wr_timeout_ns; - unsigned int rd_block_len; - unsigned int wr_block_len; - //unsigned int data_xfer_len; - struct mmc_boot_cid cid; - struct mmc_boot_csd csd; - struct mmc_boot_scr scr; -}; - -#define MMC_BOOT_XFER_MULTI_BLOCK 0 -#define MMC_BOOT_XFER_SINGLE_BLOCK 1 - -struct mmc_boot_host -{ - unsigned int mclk_rate; - unsigned int pclk_rate; - unsigned int ocr; - unsigned int cmd_retry; - unsigned int clk_enabled; -}; - - -/* MACRO used to evoke regcomp */ -#define REGCOMP_CKRTN(regx, str, errhandle) \ - do { \ - if(regcomp(regx, str, REG_EXTENDED) != 0) { \ - printf("Error building regex: %s\n", str); \ - goto errhandle; \ - } \ - } while(0); - - -#define GET_LWORD_FROM_BYTE(x) ((unsigned)*(x) | \ - ((unsigned)*(x+1) << 8) | \ - ((unsigned)*(x+2) << 16) | \ - ((unsigned)*(x+3) << 24)) - -#define PUT_LWORD_TO_BYTE(x, y) do{*(x) = y & 0xff; \ - *(x+1) = (y >> 8) & 0xff; \ - *(x+2) = (y >> 16) & 0xff; \ - *(x+3) = (y >> 24) & 0xff; }while(0) - -#define GET_PAR_NUM_FROM_POS(x) (((x & 0x0000FF00) >> 8) + (x & 0x000000FF)) - -/* Some useful define used to access the MBR/EBR table */ -#define BLOCK_SIZE 0x200 -#define TABLE_ENTRY_0 0x1BE -#define TABLE_ENTRY_1 0x1CE -#define TABLE_ENTRY_2 0x1DE -#define TABLE_ENTRY_3 0x1EE -#define TABLE_SIGNATURE 0x1FE -#define TABLE_ENTRY_SIZE 0x010 - -#define OFFSET_STATUS 0x00 -#define OFFSET_TYPE 0x04 -#define OFFSET_FIRST_SEC 0x08 -#define OFFSET_SIZE 0x0C -#define COPYBUFF_SIZE (1024 * 16) -#define BINARY_IN_TABLE_SIZE (16 * 512) -#define MAX_FILE_ENTRIES 20 - -#define MMC_MODEM_TYPE 0x06 -#define MMC_MODEM_TYPE2 0x0C -#define MMC_SBL1_TYPE 0x4D -#define MMC_SBL2_TYPE 0x51 -#define MMC_SBL3_TYPE 0x45 -#define MMC_RPM_TYPE 0x47 -#define MMC_TZ_TYPE 0x46 -#define MMC_MODEM_ST1_TYPE 0x4A -#define MMC_MODEM_ST2_TYPE 0x4B -#define MMC_EFS2_TYPE 0x4E - -#define MMC_ABOOT_TYPE 0x4C -#define MMC_BOOT_TYPE 0x48 -#define MMC_SYSTEM_TYPE 0x82 -#define MMC_USERDATA_TYPE 0x83 -#define MMC_RECOVERY_TYPE 0x60 - -#define MMC_RCA 2 - -struct mbr_entry -{ - unsigned dstatus; - unsigned dtype ; - unsigned dfirstsec; - unsigned dsize; - unsigned char name[64]; -}; - -/* Can be used to unpack array of upto 32 bits data */ -#define UNPACK_BITS(array, start, len, size_of) \ - ({ \ - unsigned int indx = (start) / (size_of); \ - unsigned int offset = (start) % (size_of); \ - unsigned int mask = (((len)<(size_of))? 1<<(len):0) - 1; \ - unsigned int unpck = array[indx] >> offset; \ - unsigned int indx2 = ((start) + (len) - 1) / (size_of); \ - if(indx2 > indx) \ - unpck |= array[indx2] << ((size_of) - offset); \ - unpck & mask; \ - }) - -#define MMC_BOOT_MAX_COMMAND_RETRY 10 -#define MMC_BOOT_RD_BLOCK_LEN 512 -#define MMC_BOOT_WR_BLOCK_LEN 512 - -/* We have 16 32-bits FIFO registers */ -#define MMC_BOOT_MCI_FIFO_COUNT 16 -#define MMC_BOOT_MCI_HFIFO_COUNT ( MMC_BOOT_MCI_FIFO_COUNT / 2 ) -#define MMC_BOOT_MCI_FIFO_SIZE ( MMC_BOOT_MCI_FIFO_COUNT * 4 ) - -/*Need to put at proper place*/ -#define SDC1_CLK 19 /* Secure Digital Card clocks */ -#define SDC1_PCLK 20 -#define SDC2_CLK 21 -#define SDC2_PCLK 22 -#define SDC3_CLK 23 -#define SDC3_PCLK 24 -#define SDC4_CLK 25 -#define SDC4_PCLK 26 - -#define MAX_PARTITIONS 64 - -#define MMC_BOOT_CHECK_PATTERN 0xAA /* 10101010b */ - -#define MMC_CLK_400KHZ 400000 -#define MMC_CLK_144KHZ 144000 -#define MMC_CLK_20MHZ 20000000 -#define MMC_CLK_25MHZ 25000000 -#define MMC_CLK_48MHZ 48000000 -#define MMC_CLK_50MHZ 49152000 - -#define MMC_CLK_ENABLE 1 -#define MMC_CLK_DISABLE 0 - -#endif - diff --git a/lk/platform/msm_shared/include/nand.h b/lk/platform/msm_shared/include/nand.h deleted file mode 100644 index 1b6b2a6..0000000 --- a/lk/platform/msm_shared/include/nand.h +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __PLATFORM_MSM_SHARED_NAND_H -#define __PLATFORM_MSM_SHARED_NAND_H - -#ifdef PLATFORM_MSM7X30 -#define MSM_NAND_BASE 0xA0200000 -#else -#define MSM_NAND_BASE 0xA0A00000 -#endif - -#define MSM_NAND_NC01_BASE 0xA0240000 -#define MSM_NAND_NC10_BASE 0xA0280000 -#define MSM_NAND_NC11_BASE 0xA02C0000 -#define EBI2_REG_BASE 0xA0000000 - -#define NC01(off) (MSM_NAND_NC01_BASE + (off)) -#define NC10(off) (MSM_NAND_NC10_BASE + (off)) -#define NC11(off) (MSM_NAND_NC11_BASE + (off)) -#define EBI2_REG(off) (EBI2_REG_BASE + (off)) - -#define NAND_REG(off) (MSM_NAND_BASE + (off)) - -#define NAND_FLASH_CMD NAND_REG(0x0000) -#define NAND_ADDR0 NAND_REG(0x0004) -#define NAND_ADDR1 NAND_REG(0x0008) -#define NAND_FLASH_CHIP_SELECT NAND_REG(0x000C) -#define NAND_EXEC_CMD NAND_REG(0x0010) -#define NAND_FLASH_STATUS NAND_REG(0x0014) -#define NAND_BUFFER_STATUS NAND_REG(0x0018) -#define NAND_DEV0_CFG0 NAND_REG(0x0020) -#define NAND_DEV0_CFG1 NAND_REG(0x0024) -#define NAND_DEV1_CFG0 NAND_REG(0x0030) -#define NAND_DEV1_CFG1 NAND_REG(0x0034) -#define NAND_SFLASHC_CMD NAND_REG(0x0038) -#define NAND_SFLASHC_EXEC_CMD NAND_REG(0x003C) -#define NAND_READ_ID NAND_REG(0x0040) -#define NAND_READ_STATUS NAND_REG(0x0044) -#define NAND_CONFIG_DATA NAND_REG(0x0050) -#define NAND_CONFIG NAND_REG(0x0054) -#define NAND_CONFIG_MODE NAND_REG(0x0058) -#define NAND_CONFIG_STATUS NAND_REG(0x0060) -#define NAND_MACRO1_REG NAND_REG(0x0064) -#define NAND_XFR_STEP1 NAND_REG(0x0070) -#define NAND_XFR_STEP2 NAND_REG(0x0074) -#define NAND_XFR_STEP3 NAND_REG(0x0078) -#define NAND_XFR_STEP4 NAND_REG(0x007C) -#define NAND_XFR_STEP5 NAND_REG(0x0080) -#define NAND_XFR_STEP6 NAND_REG(0x0084) -#define NAND_XFR_STEP7 NAND_REG(0x0088) -#define NAND_GENP_REG0 NAND_REG(0x0090) -#define NAND_GENP_REG1 NAND_REG(0x0094) -#define NAND_GENP_REG2 NAND_REG(0x0098) -#define NAND_GENP_REG3 NAND_REG(0x009C) -#define NAND_SFLASHC_STATUS NAND_REG(0x001C) -#define NAND_DEV_CMD0 NAND_REG(0x00A0) -#define NAND_DEV_CMD1 NAND_REG(0x00A4) -#define NAND_DEV_CMD2 NAND_REG(0x00A8) -#define NAND_DEV_CMD_VLD NAND_REG(0x00AC) -#define NAND_EBI2_MISR_SIG_REG NAND_REG(0x00B0) -#define NAND_ADDR2 NAND_REG(0x00C0) -#define NAND_ADDR3 NAND_REG(0x00C4) -#define NAND_ADDR4 NAND_REG(0x00C8) -#define NAND_ADDR5 NAND_REG(0x00CC) -#define NAND_DEV_CMD3 NAND_REG(0x00D0) -#define NAND_DEV_CMD4 NAND_REG(0x00D4) -#define NAND_DEV_CMD5 NAND_REG(0x00D8) -#define NAND_DEV_CMD6 NAND_REG(0x00DC) -#define NAND_SFLASHC_BURST_CFG NAND_REG(0x00E0) -#define NAND_ADDR6 NAND_REG(0x00E4) -#define NAND_EBI2_ECC_BUF_CFG NAND_REG(0x00F0) -#define NAND_FLASH_BUFFER NAND_REG(0x0100) - -/* device commands */ - -#define NAND_CMD_SOFT_RESET 0x01 -#define NAND_CMD_PAGE_READ 0x32 -#define NAND_CMD_PAGE_READ_ECC 0x33 -#define NAND_CMD_PAGE_READ_ALL 0x34 -#define NAND_CMD_SEQ_PAGE_READ 0x15 -#define NAND_CMD_PRG_PAGE 0x36 -#define NAND_CMD_PRG_PAGE_ECC 0x37 -#define NAND_CMD_PRG_PAGE_ALL 0x39 -#define NAND_CMD_BLOCK_ERASE 0x3A -#define NAND_CMD_FETCH_ID 0x0B -#define NAND_CMD_STATUS 0x0C -#define NAND_CMD_RESET 0x0D - -/* Sflash Commands */ - -#define NAND_SFCMD_DATXS 0x0 -#define NAND_SFCMD_CMDXS 0x1 -#define NAND_SFCMD_BURST 0x0 -#define NAND_SFCMD_ASYNC 0x1 -#define NAND_SFCMD_ABORT 0x1 -#define NAND_SFCMD_REGRD 0x2 -#define NAND_SFCMD_REGWR 0x3 -#define NAND_SFCMD_INTLO 0x4 -#define NAND_SFCMD_INTHI 0x5 -#define NAND_SFCMD_DATRD 0x6 -#define NAND_SFCMD_DATWR 0x7 - - -#define SFLASH_PREPCMD(numxfr, offval, delval, trnstp, mode, opcode) \ - ((numxfr<<20)|(offval<<12)|(delval<<6)|(trnstp<<5)|(mode<<4)|opcode) - -#define SFLASH_BCFG 0x20100327 - -#define CLEAN_DATA_32 0xFFFFFFFF -#define CLEAN_DATA_16 0xFFFF - -/* Onenand addresses */ - -#define ONENAND_MANUFACTURER_ID 0xF000 -#define ONENAND_DEVICE_ID 0xF001 -#define ONENAND_VERSION_ID 0xF002 -#define ONENAND_DATA_BUFFER_SIZE 0xF003 -#define ONENAND_BOOT_BUFFER_SIZE 0xF004 -#define ONENAND_AMOUNT_OF_BUFFERS 0xF005 -#define ONENAND_TECHNOLOGY 0xF006 -#define ONENAND_START_ADDRESS_1 0xF100 -#define ONENAND_START_ADDRESS_2 0xF101 -#define ONENAND_START_ADDRESS_3 0xF102 -#define ONENAND_START_ADDRESS_4 0xF103 -#define ONENAND_START_ADDRESS_5 0xF104 -#define ONENAND_START_ADDRESS_6 0xF105 -#define ONENAND_START_ADDRESS_7 0xF106 -#define ONENAND_START_ADDRESS_8 0xF107 -#define ONENAND_START_BUFFER 0xF200 -#define ONENAND_COMMAND 0xF220 -#define ONENAND_SYSTEM_CONFIG_1 0xF221 -#define ONENAND_SYSTEM_CONFIG_2 0xF222 -#define ONENAND_CONTROLLER_STATUS 0xF240 -#define ONENAND_INTERRUPT_STATUS 0xF241 -#define ONENAND_START_BLOCK_ADDRESS 0xF24C -#define ONENAND_WRITE_PROT_STATUS 0xF24E -#define ONENAND_ECC_STATUS 0xFF00 -#define ONENAND_ECC_ERRPOS_MAIN0 0xFF01 -#define ONENAND_ECC_ERRPOS_SPARE0 0xFF02 -#define ONENAND_ECC_ERRPOS_MAIN1 0xFF03 -#define ONENAND_ECC_ERRPOS_SPARE1 0xFF04 -#define ONENAND_ECC_ERRPOS_MAIN2 0xFF05 -#define ONENAND_ECC_ERRPOS_SPARE2 0xFF06 -#define ONENAND_ECC_ERRPOS_MAIN3 0xFF07 -#define ONENAND_ECC_ERRPOS_SPARE3 0xFF08 - - -/* Onenand commands */ - -#define ONENAND_CMDLOAD 0x0000 -#define ONENAND_CMDLOADSPARE 0x0013 -#define ONENAND_CMDPROG 0x0080 -#define ONENAND_CMDPROGSPARE 0x001A -#define ONENAND_CMDERAS 0x0094 - -#define ONENAND_SYSCFG1_ECCENA 0x40E0 -#define ONENAND_SYSCFG1_ECCDIS 0x41E0 -#define ONENAND_CLRINTR 0x0000 -#define ONENAND_STARTADDR1_RES 0x07FF -#define ONENAND_STARTADDR3_RES 0x07FF - -#define DEVICE_FLASHCORE_0 0 -#define DEVICE_BUFFERRAM_0 0 -#define DATARAM0_0 0x8 - -/* Flash type */ -#define FLASH_UNKNOWN_DEVICE 0x00 -#define FLASH_NAND_DEVICE 0x01 -#define FLASH_8BIT_NAND_DEVICE 0x01 -#define FLASH_16BIT_NAND_DEVICE 0x02 -#define FLASH_ONENAND_DEVICE 0x03 - -#define EBI2_CFG_REG EBI2_REG(0x0004) -#define EBI2_NAND_ADM_MUX EBI2_REG(0x005C) -#define EBI2_CHIP_SELECT_CFG0 EBI2_REG(0x0000) - -#endif /* __PLATFORM_MSM_SHARED_NAND_H */ diff --git a/lk/platform/msm_shared/include/splash.h b/lk/platform/msm_shared/include/splash.h deleted file mode 100644 index 5a1b9b6..0000000 --- a/lk/platform/msm_shared/include/splash.h +++ /dev/null @@ -1,12930 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifndef __PLATFORM_SPLASH_H -#define __PLATFORM_SPLASH_H - -#define SPLASH_IMAGE_WIDTH 113 -#define SPLASH_IMAGE_HEIGHT 228 - -#if (!DISPLAY_TYPE_MIPI) -/* This image is 228x113 raw Image resembling QuIC logo*/ -static char imageBuffer[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0x43, 0x00, 0xc6, 0x00, - 0x89, 0x01, 0x4e, 0x02, 0xf1, 0x02, 0x32, 0x03, 0x12, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, - 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, 0x32, 0x03, - 0x52, 0x03, 0x52, 0x03, - 0x52, 0x03, 0x52, 0x03, 0x53, 0x03, 0x53, 0x03, 0x53, 0x03, 0x53, 0x03, - 0x32, 0x03, 0xb0, 0x02, - 0x0c, 0x02, 0x28, 0x01, 0x84, 0x00, 0x22, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x83, 0x00, 0xa9, 0x09, 0x8e, 0x12, 0x51, 0x1b, 0x93, 0x13, - 0x94, 0x0b, 0xb4, 0x0b, - 0xb5, 0x0b, 0xb5, 0x0b, 0xb5, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x03, 0xb4, 0x03, 0xb4, 0x03, 0xb4, 0x03, - 0xb4, 0x03, 0xb4, 0x03, - 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x03, 0xb4, 0x03, - 0xb4, 0x03, 0xb4, 0x03, - 0xb4, 0x03, 0xb4, 0x03, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, - 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x03, 0xd4, 0x0b, 0xd5, 0x0b, 0xd5, 0x0b, - 0xd5, 0x0b, 0xd5, 0x0b, - 0xd5, 0x0b, 0xd5, 0x0b, 0xd5, 0x0b, 0xb4, 0x13, 0x93, 0x1b, 0x30, 0x1b, - 0x2b, 0x0a, 0x06, 0x01, - 0x42, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0xc5, 0x00, 0x4c, 0x0a, - 0x52, 0x1b, 0xb3, 0x13, - 0xb4, 0x0b, 0xb4, 0x0b, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xf5, 0x03, 0xf5, 0x03, 0xf5, 0x03, 0xf5, 0x03, 0xd5, 0x03, 0xf6, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x0b, 0xd4, 0x13, 0xb3, 0x1b, 0x30, 0x1b, 0x48, 0x01, 0x63, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x06, 0x01, - 0xae, 0x1a, 0x72, 0x1b, 0xb4, 0x0b, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xd6, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf5, 0x03, 0xf5, 0x03, 0xf5, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf5, 0x0b, 0xd4, 0x13, - 0x71, 0x23, 0xca, 0x01, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x08, - 0x49, 0x4a, 0x38, 0xc6, - 0xdf, 0xff, 0xbe, 0xf7, 0x14, 0xa5, 0xc7, 0x39, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x92, 0x94, - 0xfb, 0xde, 0xe7, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xf3, 0x9c, - 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x08, 0xd3, 0x9c, - 0xff, 0xff, 0x65, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xff, 0xff, - 0xef, 0x7b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x86, 0x31, 0xd3, 0x9c, - 0x3c, 0xe7, 0xff, 0xff, 0xba, 0xd6, 0xcf, 0x7b, 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xa2, 0x10, 0xeb, 0x5a, 0x9a, 0xd6, 0xff, 0xff, 0x7d, 0xef, 0x51, 0x8c, - 0x45, 0x29, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0x9e, 0xf7, 0x6d, 0x6b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x6b, 0x9e, 0xf7, 0x92, 0x94, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x73, - 0xff, 0xff, 0x30, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x42, - 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0xa4, 0x00, 0xae, 0x1a, 0x93, 0x1b, 0xb4, 0x0b, - 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd6, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, - 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xf4, 0x13, 0x71, 0x1b, - 0xa9, 0x01, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x2c, 0x63, 0x5d, 0xef, 0x58, 0xce, 0x30, 0x84, 0x51, 0x8c, - 0x5d, 0xef, 0xdb, 0xde, - 0x28, 0x42, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0xfb, 0xde, 0x08, 0x42, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf3, 0x9c, 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x45, 0x29, 0x79, 0xce, 0xff, 0xff, 0x51, 0x8c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x86, 0x31, 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xa2, 0x10, 0x59, 0xce, 0x7d, 0xef, 0x14, 0xa5, 0x10, 0x84, - 0xd7, 0xbd, 0xdf, 0xff, - 0x51, 0x8c, 0x41, 0x08, 0x00, 0x00, 0x61, 0x08, 0x30, 0x84, 0x9e, 0xf7, - 0xb6, 0xb5, 0x10, 0x84, - 0xb2, 0x94, 0x9e, 0xf7, 0x38, 0xc6, 0x45, 0x29, 0x00, 0x00, 0x00, 0x00, - 0x71, 0x8c, 0xff, 0xff, - 0xb6, 0xb5, 0xc3, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x18, - 0x96, 0xb5, 0xff, 0xff, - 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0x1c, 0xe7, - 0x61, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x08, 0x14, 0xa5, 0xff, 0xff, 0x14, 0xa5, - 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, - 0xeb, 0x09, 0x72, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd6, 0x03, - 0xb5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf4, 0x13, 0x50, 0x23, 0xa5, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x21, 0x18, 0xc6, - 0x7d, 0xef, 0x65, 0x29, - 0x20, 0x00, 0x20, 0x00, 0x2c, 0x63, 0x9e, 0xf7, 0x34, 0xa5, 0x00, 0x00, - 0x00, 0x00, 0x92, 0x94, - 0xfb, 0xde, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x14, 0xa5, - 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x5a, 0xdf, 0xff, - 0xbe, 0xf7, 0x38, 0xc6, - 0xc3, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xff, 0xff, - 0x10, 0x84, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, - 0x9e, 0xf7, 0xcf, 0x7b, - 0x82, 0x10, 0x00, 0x00, 0x04, 0x21, 0xd7, 0xbd, 0xfb, 0xde, 0x08, 0x42, - 0x00, 0x00, 0x86, 0x31, - 0x1c, 0xe7, 0x9a, 0xd6, 0xc3, 0x18, 0x00, 0x00, 0x61, 0x08, 0x10, 0x84, - 0xff, 0xff, 0xcf, 0x7b, - 0x00, 0x00, 0x00, 0x00, 0x92, 0x94, 0xff, 0xff, 0xbe, 0xf7, 0x69, 0x4a, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x69, 0x4a, 0xbe, 0xf7, 0xff, 0xff, 0x92, 0x94, 0x00, 0x00, - 0x00, 0x00, 0x6d, 0x6b, - 0xff, 0xff, 0xff, 0xff, 0x0c, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0x1c, 0xe7, - 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x47, 0x01, 0x31, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd6, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x15, 0x0c, - 0xd3, 0x1b, 0x8d, 0x0a, - 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xa6, 0x31, 0x7d, 0xef, 0x34, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x21, 0x38, 0xc6, - 0x3c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0x1c, 0xe7, 0xe7, 0x39, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xd7, 0xbd, 0xdb, 0xde, 0xb2, 0x94, 0x7d, 0xef, 0xcb, 0x5a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x86, 0x31, 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x75, 0xad, 0xdb, 0xde, 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xe7, 0x39, - 0x30, 0x84, 0xc7, 0x39, 0x00, 0x00, 0xaa, 0x52, 0xff, 0xff, 0xcf, 0x7b, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x86, 0x31, 0x3c, 0xe7, 0xb6, 0xb5, 0x00, 0x00, 0x00, 0x00, - 0x71, 0x8c, 0xff, 0xff, - 0xdf, 0xff, 0x59, 0xce, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xbd, - 0xdf, 0xff, 0xff, 0xff, - 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0xdf, 0xff, - 0x79, 0xce, 0x04, 0x21, - 0x00, 0x00, 0x61, 0x08, 0xb2, 0x94, 0xbe, 0xf7, 0xff, 0xff, 0x14, 0xa5, - 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x0b, 0x0a, - 0x73, 0x13, 0xb5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x16, 0x04, 0x15, 0x14, 0x51, 0x13, 0x26, 0x01, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xff, 0xff, - 0x14, 0xa5, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe3, 0x18, 0xf7, 0xbd, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x71, 0x8c, - 0x1c, 0xe7, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x14, 0xa5, - 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x18, 0x9e, 0xf7, 0xd3, 0x9c, - 0x45, 0x29, 0xbe, 0xf7, - 0xb2, 0x94, 0x61, 0x08, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xff, 0xff, - 0x10, 0x84, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc6, - 0x79, 0xce, 0x04, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x73, - 0xff, 0xff, 0x6d, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, - 0xfb, 0xde, 0x79, 0xce, - 0x00, 0x00, 0x00, 0x00, 0x92, 0x94, 0x5d, 0xef, 0x79, 0xce, 0xdf, 0xff, - 0xe7, 0x39, 0x00, 0x00, - 0xa6, 0x31, 0xbe, 0xf7, 0x79, 0xce, 0x5d, 0xef, 0x71, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x6d, 0x6b, - 0xff, 0xff, 0xb6, 0xb5, 0x9e, 0xf7, 0x4d, 0x6b, 0x00, 0x00, 0xa6, 0x31, - 0xdb, 0xde, 0xb6, 0xb5, - 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xe7, 0x00, 0xae, 0x12, 0xb4, 0x13, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x16, 0x0c, 0xd3, 0x1b, - 0xea, 0x09, 0x42, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xe7, 0x39, 0xff, 0xff, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x21, 0xf7, 0xbd, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0x1c, 0xe7, 0x08, 0x42, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf3, 0x9c, 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x4d, 0x6b, - 0x7d, 0xef, 0x0c, 0x63, 0x00, 0x00, 0x18, 0xc6, 0x79, 0xce, 0x45, 0x29, - 0x00, 0x00, 0x00, 0x00, - 0x86, 0x31, 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf7, 0xbd, 0x79, 0xce, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0x6d, 0x6b, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x65, 0x29, 0xfb, 0xde, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, - 0x71, 0x8c, 0xfb, 0xde, - 0xef, 0x7b, 0xfb, 0xde, 0x14, 0xa5, 0x61, 0x08, 0x34, 0xa5, 0xfb, 0xde, - 0xef, 0x7b, 0x1c, 0xe7, - 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x6b, 0xff, 0xff, 0x8a, 0x52, - 0x5d, 0xef, 0x96, 0xb5, - 0xc3, 0x18, 0x71, 0x8c, 0x7d, 0xef, 0x49, 0x4a, 0xff, 0xff, 0x14, 0xa5, - 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x01, 0x52, 0x23, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xf5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x37, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0xf4, 0x13, 0x6d, 0x12, 0x83, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xff, 0xff, - 0x14, 0xa5, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe3, 0x18, 0xf7, 0xbd, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x92, 0x94, - 0xfb, 0xde, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x14, 0xa5, - 0x82, 0x10, 0x00, 0x00, 0x82, 0x10, 0x38, 0xc6, 0x9a, 0xd6, 0x24, 0x21, - 0x00, 0x00, 0x4d, 0x6b, - 0xdf, 0xff, 0xeb, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xff, 0xff, - 0x10, 0x84, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xbd, - 0x79, 0xce, 0x04, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x73, - 0xff, 0xff, 0x8e, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, - 0xfb, 0xde, 0x79, 0xce, - 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0x1c, 0xe7, 0x08, 0x42, 0x71, 0x8c, - 0x3c, 0xe7, 0x92, 0x94, - 0x1c, 0xe7, 0x92, 0x94, 0xe7, 0x39, 0x1c, 0xe7, 0x92, 0x94, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x73, - 0xff, 0xff, 0x08, 0x42, 0x8e, 0x73, 0xbe, 0xf7, 0x6d, 0x6b, 0x7d, 0xef, - 0x14, 0xa5, 0x82, 0x10, - 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xcb, 0x01, 0x72, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, - 0x16, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x37, 0x04, 0x37, 0x04, 0x37, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x15, 0x14, - 0xce, 0x1a, 0xa4, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xff, 0xff, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x45, 0x29, - 0x24, 0x21, 0xf7, 0xbd, - 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0xfb, 0xde, 0x08, 0x42, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, - 0x49, 0x4a, 0x3c, 0xe7, - 0x38, 0xc6, 0x28, 0x42, 0x08, 0x42, 0x4d, 0x6b, 0x5d, 0xef, 0xd7, 0xbd, - 0x00, 0x00, 0x00, 0x00, - 0x65, 0x29, 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf7, 0xbd, 0x79, 0xce, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0x8e, 0x73, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x65, 0x29, 0xfb, 0xde, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, - 0x92, 0x94, 0xfb, 0xde, - 0x08, 0x42, 0x04, 0x21, 0x9e, 0xf7, 0xbe, 0xf7, 0xbe, 0xf7, 0x65, 0x29, - 0x08, 0x42, 0xfb, 0xde, - 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0x08, 0x42, - 0x45, 0x29, 0x79, 0xce, - 0x7d, 0xef, 0x7d, 0xef, 0xeb, 0x5a, 0x00, 0x00, 0xff, 0xff, 0x14, 0xa5, - 0x61, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x93, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x37, 0x04, 0x37, 0x04, - 0x37, 0x04, 0x36, 0x04, 0x36, 0x04, 0x15, 0x14, 0xef, 0x12, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0x3c, 0xe7, - 0xb6, 0xb5, 0x00, 0x00, - 0xa2, 0x10, 0x96, 0xb5, 0x55, 0xad, 0xdb, 0xde, 0xba, 0xd6, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x84, - 0x3c, 0xe7, 0x69, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x10, - 0xff, 0xff, 0xd3, 0x9c, - 0x61, 0x08, 0x20, 0x00, 0x30, 0x84, 0xdf, 0xff, 0x7d, 0xef, 0xfb, 0xde, - 0x1c, 0xe7, 0x1c, 0xe7, - 0xbe, 0xf7, 0xbe, 0xf7, 0xe3, 0x18, 0x00, 0x00, 0x86, 0x31, 0xff, 0xff, - 0x10, 0x84, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0xa5, - 0xfb, 0xde, 0xc7, 0x39, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x52, 0xf7, 0xbd, 0x8a, 0x52, - 0x00, 0x00, 0x49, 0x4a, - 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x39, - 0x5d, 0xef, 0x55, 0xad, - 0x00, 0x00, 0x00, 0x00, 0x92, 0x94, 0x1c, 0xe7, 0x08, 0x42, 0x00, 0x00, - 0xf3, 0x9c, 0xff, 0xff, - 0x96, 0xb5, 0x00, 0x00, 0x08, 0x42, 0x1c, 0xe7, 0x92, 0x94, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x73, - 0xff, 0xff, 0xe7, 0x39, 0x20, 0x00, 0xef, 0x7b, 0xbe, 0xf7, 0xf7, 0xbd, - 0xa2, 0x10, 0x00, 0x00, - 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xf5, 0x03, 0xf5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x15, 0x14, - 0xef, 0x12, 0xc5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xc3, 0x18, 0x96, 0xb5, 0xbe, 0xf7, 0x49, 0x4a, 0xa2, 0x10, 0xae, 0x73, - 0xff, 0xff, 0xff, 0xff, - 0xb2, 0x94, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0x9e, 0xf7, 0x75, 0xad, - 0x86, 0x31, 0xa2, 0x10, - 0x04, 0x21, 0xf3, 0x9c, 0x7d, 0xef, 0xeb, 0x5a, 0x00, 0x00, 0x24, 0x21, - 0x38, 0xc6, 0x1c, 0xe7, - 0xeb, 0x5a, 0xeb, 0x5a, 0xeb, 0x5a, 0xeb, 0x5a, 0x92, 0x94, 0x9e, 0xf7, - 0xef, 0x7b, 0x00, 0x00, - 0x86, 0x31, 0xff, 0xff, 0x92, 0x94, 0x24, 0x21, 0x24, 0x21, 0x24, 0x21, - 0x24, 0x21, 0xe3, 0x18, - 0x41, 0x08, 0xeb, 0x5a, 0xbe, 0xf7, 0xd3, 0x9c, 0x24, 0x21, 0xa2, 0x10, - 0xc7, 0x39, 0x79, 0xce, - 0xba, 0xd6, 0x86, 0x31, 0x00, 0x00, 0x45, 0x29, 0x9a, 0xd6, 0x3c, 0xe7, - 0x86, 0x31, 0xa2, 0x10, - 0xe3, 0x18, 0x14, 0xa5, 0xdf, 0xff, 0x4d, 0x6b, 0x00, 0x00, 0x00, 0x00, - 0x71, 0x8c, 0x1c, 0xe7, - 0x08, 0x42, 0x00, 0x00, 0x04, 0x21, 0x10, 0x84, 0x45, 0x29, 0x00, 0x00, - 0x08, 0x42, 0xfb, 0xde, - 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0x08, 0x42, - 0x00, 0x00, 0xc3, 0x18, - 0xae, 0x73, 0xe7, 0x39, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf3, 0x9c, - 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x02, 0x93, 0x1b, - 0xb4, 0x0b, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf5, 0x03, 0xf5, 0x03, - 0xf5, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x15, 0x14, 0x0f, 0x13, 0xc5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x4a, - 0xba, 0xd6, 0x3c, 0xe7, - 0x75, 0xad, 0xf7, 0xbd, 0xff, 0xff, 0xdf, 0xff, 0xf3, 0x9c, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xb2, 0x94, 0x9e, 0xf7, 0x59, 0xce, 0x34, 0xa5, 0x18, 0xc6, 0xdf, 0xff, - 0x92, 0x94, 0x82, 0x10, - 0x00, 0x00, 0x69, 0x4a, 0xbe, 0xf7, 0xd3, 0x9c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x65, 0x29, 0xba, 0xd6, 0xf7, 0xbd, 0xa2, 0x10, 0x86, 0x31, 0xff, 0xff, - 0x1c, 0xe7, 0x38, 0xc6, - 0x18, 0xc6, 0x18, 0xc6, 0x18, 0xc6, 0x55, 0xad, 0x86, 0x31, 0x41, 0x08, - 0x75, 0xad, 0xbe, 0xf7, - 0x18, 0xc6, 0x55, 0xad, 0x9a, 0xd6, 0x7d, 0xef, 0x4d, 0x6b, 0x20, 0x00, - 0x00, 0x00, 0x20, 0x00, - 0x2c, 0x63, 0x1c, 0xe7, 0xdb, 0xde, 0x55, 0xad, 0xf7, 0xbd, 0xbe, 0xf7, - 0x34, 0xa5, 0xc3, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0xfb, 0xde, 0x08, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xfb, 0xde, 0x92, 0x94, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x73, - 0xff, 0xff, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x93, 0x1b, 0xb4, 0x0b, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x56, 0x04, 0x35, 0x14, - 0x0f, 0x13, 0xc5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x24, 0x29, 0x71, 0x94, 0x18, 0xc6, 0xf7, 0xbd, - 0x6d, 0x6b, 0x8e, 0x73, - 0xba, 0xd6, 0xe3, 0x18, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x10, 0xaa, 0x52, - 0x14, 0xa5, 0x59, 0xce, - 0x75, 0xad, 0x0c, 0x63, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x52, - 0xd3, 0x9c, 0xa6, 0x31, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xae, 0x73, - 0x30, 0x84, 0x24, 0x21, - 0xe3, 0x18, 0xd3, 0x9c, 0xb2, 0x94, 0xb2, 0x94, 0xd3, 0x9c, 0xd3, 0x9c, - 0xd3, 0x9c, 0x30, 0x84, - 0x24, 0x21, 0x00, 0x00, 0xc3, 0x18, 0x2c, 0x63, 0x75, 0xad, 0x38, 0xc6, - 0xf3, 0x9c, 0x69, 0x4a, - 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x08, 0xa6, 0x31, - 0xf3, 0x9c, 0x38, 0xc6, - 0xb6, 0xb5, 0x0c, 0x63, 0xa2, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xaa, 0x52, 0x30, 0x84, - 0x24, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x24, 0x21, 0x30, 0x84, - 0xaa, 0x52, 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xd3, 0x9c, 0x24, 0x21, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x9c, 0x0c, 0x63, - 0x41, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd6, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf5, 0x03, 0xf5, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x37, 0x04, 0x37, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x37, 0x04, 0x37, 0x04, 0x36, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x36, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x56, 0x04, 0x35, 0x14, 0x0f, 0x13, 0xc5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd6, 0x03, 0xd6, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xf6, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xd5, 0x03, 0xf5, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x37, 0x04, 0x37, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x35, 0x14, - 0x0f, 0x13, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb6, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x0b, 0xb5, 0x03, 0xb5, 0x0b, 0xd4, 0x0b, 0xb4, 0x0b, 0xd4, 0x0b, - 0xb4, 0x13, 0xd4, 0x13, - 0xb4, 0x13, 0xb4, 0x0b, 0xd4, 0x0b, 0xd4, 0x0b, 0xf5, 0x0b, 0xd5, 0x0b, - 0xf5, 0x0b, 0xf5, 0x0b, - 0xf5, 0x03, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x37, 0x04, 0x37, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, 0x57, 0x04, 0x35, 0x14, 0x0f, 0x13, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, 0xb4, 0x13, 0x93, 0x13, - 0x93, 0x1b, 0x52, 0x1b, - 0x10, 0x13, 0x10, 0x1b, 0x10, 0x1b, 0xef, 0x12, 0xef, 0x12, 0x10, 0x1b, - 0x10, 0x13, 0x31, 0x13, - 0x72, 0x1b, 0x93, 0x1b, 0xd4, 0x1b, 0xd4, 0x13, 0xf5, 0x13, 0xf5, 0x0b, - 0xf5, 0x0b, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x35, 0x14, - 0x0f, 0x13, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb4, 0x03, 0xb4, 0x0b, 0x93, 0x0b, 0x93, 0x13, 0x93, 0x1b, - 0x51, 0x1b, 0xcf, 0x12, - 0x6d, 0x0a, 0x0b, 0x02, 0xaa, 0x01, 0x89, 0x01, 0x27, 0x01, 0x27, 0x01, - 0x07, 0x01, 0xe6, 0x00, - 0xe6, 0x00, 0x06, 0x01, 0x27, 0x01, 0x47, 0x01, 0x68, 0x01, 0xa9, 0x01, - 0x0b, 0x02, 0x6d, 0x02, - 0xef, 0x12, 0x72, 0x1b, 0xd3, 0x1b, 0xd4, 0x1b, 0xf5, 0x13, 0xf5, 0x0b, - 0x15, 0x0c, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x57, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x37, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, - 0x57, 0x04, 0x77, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x36, 0x14, 0x0f, 0x13, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb4, 0x0b, 0x93, 0x13, - 0x52, 0x1b, 0x30, 0x23, - 0x4d, 0x12, 0xa9, 0x01, 0x06, 0x01, 0xa5, 0x00, 0x63, 0x00, 0x42, 0x00, - 0x22, 0x00, 0x22, 0x00, - 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x21, 0x00, 0x42, 0x00, 0x83, 0x00, 0xc4, 0x00, 0x06, 0x01, - 0x89, 0x01, 0x8d, 0x12, - 0x51, 0x23, 0xb3, 0x23, 0xf4, 0x1b, 0xf5, 0x13, 0x16, 0x0c, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x37, 0x04, 0x57, 0x04, 0x57, 0x04, 0x56, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x57, 0x04, 0x35, 0x14, - 0x0f, 0x13, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x20, 0x00, 0x20, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb4, 0x0b, - 0x94, 0x13, 0x93, 0x13, - 0x10, 0x13, 0x8d, 0x0a, 0x69, 0x01, 0x84, 0x00, 0x43, 0x00, 0x22, 0x00, - 0x21, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x21, 0x00, 0x42, 0x00, 0x43, 0x00, 0x84, 0x00, 0x68, 0x01, - 0xae, 0x12, 0x51, 0x13, - 0xd3, 0x1b, 0x15, 0x14, 0x15, 0x0c, 0x36, 0x04, 0x36, 0x04, 0x37, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x55, 0x14, 0x0f, 0x13, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x10, 0xef, 0x7b, - 0x30, 0x84, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x34, 0xa5, 0x8e, 0x73, 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xe3, 0x18, 0x92, 0x94, 0x4d, 0x6b, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, - 0xf3, 0x9c, 0x49, 0x4a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x4a, 0x55, 0xad, - 0x45, 0x29, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc3, 0x18, 0x8a, 0x52, 0xd3, 0x9c, 0x14, 0xa5, - 0x8e, 0x73, 0x86, 0x31, - 0x00, 0x00, 0x00, 0x00, 0xcb, 0x5a, 0xd3, 0x9c, 0xe7, 0x39, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x6d, 0x6b, 0xf3, 0x9c, 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0xb2, 0x94, - 0xae, 0x73, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0x34, 0xa5, - 0x34, 0xa5, 0x34, 0xa5, - 0x34, 0xa5, 0x34, 0xa5, 0x34, 0xa5, 0x34, 0xa5, 0x4d, 0x6b, 0x41, 0x08, - 0x45, 0x29, 0x34, 0xa5, - 0x49, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x18, 0x8a, 0x52, - 0xb2, 0x94, 0x14, 0xa5, - 0x8e, 0x73, 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x18, - 0x92, 0x94, 0xae, 0x73, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x29, 0x92, 0x94, - 0xeb, 0x5a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb4, 0x0b, 0x92, 0x1b, 0xef, 0x1a, 0xeb, 0x09, 0x06, 0x01, 0x63, 0x00, - 0x42, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x21, 0x00, 0x42, 0x00, 0x84, 0x00, 0x06, 0x01, 0x0a, 0x02, 0x50, 0x1b, - 0xf4, 0x1b, 0x15, 0x14, - 0x36, 0x0c, 0x37, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, - 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x55, 0x14, - 0x0f, 0x13, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x04, 0x21, 0x18, 0xc6, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x7d, 0xef, - 0xaa, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xfb, 0xde, - 0xf3, 0x9c, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x63, 0xff, 0xff, 0x18, 0xc6, 0x04, 0x21, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x6b, 0xff, 0xff, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x61, 0x08, - 0x55, 0xad, 0x7d, 0xef, - 0x79, 0xce, 0x18, 0xc6, 0x5d, 0xef, 0x9a, 0xd6, 0x08, 0x42, 0x00, 0x00, - 0x28, 0x42, 0xdf, 0xff, - 0x30, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xde, - 0x79, 0xce, 0x45, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x29, 0xff, 0xff, 0x3c, 0xe7, 0x86, 0x31, - 0x00, 0x00, 0x00, 0x00, - 0x28, 0x42, 0xd7, 0xbd, 0xd7, 0xbd, 0x38, 0xc6, 0xff, 0xff, 0xfb, 0xde, - 0xd7, 0xbd, 0xd7, 0xbd, - 0xae, 0x73, 0x61, 0x08, 0x08, 0x42, 0xff, 0xff, 0x8e, 0x73, 0x00, 0x00, - 0x00, 0x00, 0x61, 0x08, - 0x55, 0xad, 0x5d, 0xef, 0x79, 0xce, 0x18, 0xc6, 0x5d, 0xef, 0x9a, 0xd6, - 0x08, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x86, 0x31, 0xfb, 0xde, 0xbe, 0xf7, 0x08, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xfb, 0xde, 0x92, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb4, 0x0b, 0x93, 0x13, 0x31, 0x1b, 0xeb, 0x01, - 0xe6, 0x00, 0x63, 0x00, - 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x21, 0x00, - 0x42, 0x00, 0x06, 0x01, 0x0b, 0x02, 0x92, 0x1b, 0xf4, 0x1b, 0x35, 0x14, - 0x36, 0x0c, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, 0x77, 0x04, 0x56, 0x14, 0x2f, 0x13, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x21, 0xf7, 0xbd, - 0x79, 0xce, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xde, 0x82, 0x10, - 0x00, 0x00, 0x00, 0x00, - 0x86, 0x31, 0xfb, 0xde, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x63, - 0xff, 0xff, 0xdf, 0xff, - 0x92, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, - 0x08, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x73, 0xbe, 0xf7, 0xd3, 0x9c, 0x24, 0x21, 0xe3, 0x18, - 0x0c, 0x63, 0x3c, 0xe7, - 0xd7, 0xbd, 0xa2, 0x10, 0x20, 0x00, 0x5d, 0xef, 0xb6, 0xb5, 0xc3, 0x18, - 0x00, 0x00, 0x00, 0x00, - 0x86, 0x31, 0xff, 0xff, 0xb2, 0x94, 0x61, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x84, 0xff, 0xff, - 0xdf, 0xff, 0x8e, 0x73, 0x00, 0x00, 0x00, 0x00, 0x41, 0x08, 0xc3, 0x18, - 0xc3, 0x18, 0x28, 0x42, - 0xff, 0xff, 0x71, 0x8c, 0xc3, 0x18, 0xc3, 0x18, 0x82, 0x10, 0x00, 0x00, - 0x08, 0x42, 0xff, 0xff, - 0x6d, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xdf, 0xff, 0xd3, 0x9c, - 0x24, 0x21, 0xe3, 0x18, - 0x0c, 0x63, 0x3c, 0xe7, 0xd7, 0xbd, 0xa2, 0x10, 0x00, 0x00, 0x86, 0x31, - 0xfb, 0xde, 0xff, 0xff, - 0xf7, 0xbd, 0xe3, 0x18, 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xfb, 0xde, - 0x92, 0x94, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb4, 0x0b, 0x93, 0x13, - 0x30, 0x1b, 0x2c, 0x0a, - 0xc5, 0x00, 0x42, 0x00, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x21, 0x00, - 0x43, 0x00, 0xa5, 0x00, - 0x6c, 0x12, 0x92, 0x1b, 0x35, 0x1c, 0x56, 0x0c, 0x56, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x56, 0x14, - 0x2f, 0x13, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x04, 0x21, 0x18, 0xc6, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xbe, 0xf7, - 0xdf, 0xff, 0xf3, 0x9c, 0x61, 0x08, 0x00, 0x00, 0x86, 0x31, 0xfb, 0xde, - 0x14, 0xa5, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x63, 0xdf, 0xff, 0xbe, 0xf7, 0xff, 0xff, 0x49, 0x4a, - 0x00, 0x00, 0x00, 0x00, - 0x8e, 0x73, 0xff, 0xff, 0x08, 0x42, 0x00, 0x00, 0x41, 0x08, 0x18, 0xc6, - 0xba, 0xd6, 0x86, 0x31, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xad, 0x1c, 0xe7, 0x28, 0x42, - 0x00, 0x00, 0x34, 0xa5, - 0x7d, 0xef, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x51, 0x8c, 0x7d, 0xef, - 0xcb, 0x5a, 0x00, 0x00, - 0x00, 0x00, 0xe3, 0x18, 0x79, 0xce, 0xfb, 0xde, 0x59, 0xce, 0xba, 0xd6, - 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xff, 0xff, 0x10, 0x84, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xff, 0xff, 0x6d, 0x6b, 0x00, 0x00, - 0x20, 0x00, 0x18, 0xc6, - 0xba, 0xd6, 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0xa5, - 0x1c, 0xe7, 0x28, 0x42, - 0x00, 0x00, 0x65, 0x29, 0xfb, 0xde, 0x9e, 0xf7, 0xdf, 0xff, 0x92, 0x94, - 0x61, 0x08, 0x00, 0x00, - 0x08, 0x42, 0xfb, 0xde, 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb4, 0x03, - 0xb4, 0x03, 0xb4, 0x0b, - 0x93, 0x1b, 0xcf, 0x12, 0x48, 0x01, 0x63, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x63, 0x00, 0x88, 0x01, - 0x0f, 0x13, 0x14, 0x1c, - 0x35, 0x14, 0x56, 0x0c, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x56, 0x14, 0x2f, 0x1b, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x21, 0xf7, 0xbd, - 0x79, 0xce, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd7, 0xbd, 0x59, 0xce, 0x5d, 0xef, - 0xcb, 0x5a, 0x00, 0x00, - 0x86, 0x31, 0xfb, 0xde, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x63, - 0x9e, 0xf7, 0x75, 0xad, - 0x1c, 0xe7, 0x18, 0xc6, 0x04, 0x21, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, - 0x08, 0x42, 0x00, 0x00, - 0xe3, 0x18, 0x79, 0xce, 0x9a, 0xd6, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x71, 0x8c, - 0x7d, 0xef, 0xeb, 0x5a, 0x00, 0x00, 0xcb, 0x5a, 0xdf, 0xff, 0xcf, 0x7b, - 0x00, 0x00, 0x61, 0x08, - 0x18, 0xc6, 0x79, 0xce, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x52, - 0x5d, 0xef, 0xef, 0x7b, - 0x10, 0x84, 0xdf, 0xff, 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x86, 0x31, - 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xff, 0xff, - 0x8e, 0x73, 0x00, 0x00, 0xe3, 0x18, 0x79, 0xce, 0x79, 0xce, 0xe3, 0x18, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x71, 0x8c, 0x7d, 0xef, 0xeb, 0x5a, 0x00, 0x00, 0x86, 0x31, - 0x1c, 0xe7, 0xb6, 0xb5, - 0x9a, 0xd6, 0x3c, 0xe7, 0x69, 0x4a, 0x00, 0x00, 0x08, 0x42, 0xfb, 0xde, - 0x71, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0x94, 0x13, 0x51, 0x1b, 0x0b, 0x0a, 0xc5, 0x00, - 0x22, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x42, 0x00, 0xc5, 0x00, 0x6c, 0x12, 0xd3, 0x23, 0x35, 0x14, - 0x76, 0x0c, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x56, 0x14, - 0x2f, 0x1b, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x04, 0x21, 0xf7, 0xbd, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x14, 0xa5, - 0x49, 0x4a, 0xdf, 0xff, 0x59, 0xce, 0x45, 0x29, 0x86, 0x31, 0x1c, 0xe7, - 0xf3, 0x9c, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x63, 0x7d, 0xef, 0x4d, 0x6b, 0x51, 0x8c, 0xbe, 0xf7, - 0x51, 0x8c, 0x61, 0x08, - 0x8e, 0x73, 0xff, 0xff, 0x08, 0x42, 0x00, 0x00, 0xe3, 0x18, 0x79, 0xce, - 0x79, 0xce, 0x04, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x94, 0x7d, 0xef, 0x0c, 0x63, - 0x00, 0x00, 0x45, 0x29, - 0xba, 0xd6, 0x38, 0xc6, 0x00, 0x00, 0x08, 0x42, 0xfb, 0xde, 0x14, 0xa5, - 0x20, 0x00, 0x00, 0x00, - 0x41, 0x08, 0x92, 0x94, 0xff, 0xff, 0x04, 0x21, 0x69, 0x4a, 0x3c, 0xe7, - 0x71, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xff, 0xff, 0x10, 0x84, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xff, 0xff, 0x8e, 0x73, 0x00, 0x00, - 0x04, 0x21, 0x9a, 0xd6, - 0x79, 0xce, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, - 0x7d, 0xef, 0x0c, 0x63, - 0x00, 0x00, 0x86, 0x31, 0xfb, 0xde, 0x14, 0xa5, 0xaa, 0x52, 0x7d, 0xef, - 0x9a, 0xd6, 0x61, 0x08, - 0x08, 0x42, 0xfb, 0xde, 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x0b, 0x93, 0x13, - 0x11, 0x1b, 0x69, 0x01, - 0x63, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x63, 0x00, - 0xa9, 0x01, 0x71, 0x13, 0x35, 0x1c, 0x76, 0x0c, 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x77, 0x04, 0x97, 0x04, 0x76, 0x14, 0x30, 0x1b, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x21, 0xf7, 0xbd, - 0x79, 0xce, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0xef, 0x7b, - 0xbe, 0xf7, 0x14, 0xa5, - 0x86, 0x31, 0xfb, 0xde, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x63, - 0x7d, 0xef, 0x0c, 0x63, - 0x41, 0x08, 0x79, 0xce, 0x7d, 0xef, 0xaa, 0x52, 0x8e, 0x73, 0xff, 0xff, - 0x08, 0x42, 0x00, 0x00, - 0x04, 0x21, 0x79, 0xce, 0x9a, 0xd6, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x71, 0x8c, - 0x7d, 0xef, 0x0c, 0x63, 0x00, 0x00, 0x61, 0x08, 0xd3, 0x9c, 0xff, 0xff, - 0x24, 0x21, 0xcf, 0x7b, - 0xdf, 0xff, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x65, 0x29, 0xfb, 0xde, - 0x38, 0xc6, 0x00, 0x00, - 0x82, 0x10, 0x18, 0xc6, 0x79, 0xce, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x65, 0x29, - 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xff, 0xff, - 0x8e, 0x73, 0x00, 0x00, 0xe3, 0x18, 0x79, 0xce, 0x79, 0xce, 0x04, 0x21, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x71, 0x8c, 0x7d, 0xef, 0x0c, 0x63, 0x00, 0x00, 0x86, 0x31, - 0xfb, 0xde, 0x14, 0xa5, - 0x41, 0x08, 0x30, 0x84, 0xbe, 0xf7, 0x51, 0x8c, 0x49, 0x4a, 0xfb, 0xde, - 0x71, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb4, 0x0b, - 0x73, 0x13, 0xcf, 0x12, 0x48, 0x01, 0x42, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, 0x27, 0x01, - 0x51, 0x1b, 0x35, 0x1c, - 0x56, 0x0c, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0xb7, 0x0c, 0x76, 0x1c, - 0x2f, 0x1b, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x04, 0x21, 0xf7, 0xbd, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xf3, 0x9c, - 0x82, 0x10, 0xe3, 0x18, 0xd7, 0xbd, 0xdf, 0xff, 0xef, 0x7b, 0xfb, 0xde, - 0xf3, 0x9c, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x63, 0x7d, 0xef, 0xeb, 0x5a, 0x00, 0x00, 0x8a, 0x52, - 0x5d, 0xef, 0xba, 0xd6, - 0x30, 0x84, 0xff, 0xff, 0x08, 0x42, 0x00, 0x00, 0x04, 0x21, 0x79, 0xce, - 0x79, 0xce, 0x04, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0x9e, 0xf7, 0x0c, 0x63, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x63, 0x9e, 0xf7, 0xef, 0x7b, 0x75, 0xad, 0x5d, 0xef, 0x41, 0x08, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x63, 0xdf, 0xff, 0x8e, 0x73, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x7b, - 0x7d, 0xef, 0xcb, 0x5a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x29, 0xff, 0xff, 0x10, 0x84, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xff, 0xff, 0x6d, 0x6b, 0x00, 0x00, - 0x04, 0x21, 0x79, 0xce, - 0x79, 0xce, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, - 0x7d, 0xef, 0x0c, 0x63, - 0x00, 0x00, 0x86, 0x31, 0xfb, 0xde, 0xf3, 0x9c, 0x00, 0x00, 0x24, 0x21, - 0x18, 0xc6, 0x3c, 0xe7, - 0x92, 0x94, 0x1c, 0xe7, 0x92, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, 0xb4, 0x0b, 0x93, 0x1b, 0xaf, 0x12, 0x07, 0x01, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, 0x47, 0x01, 0x0f, 0x13, 0x35, 0x1c, 0x76, 0x0c, - 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x0c, 0x76, 0x1c, 0x50, 0x1b, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x21, 0x18, 0xc6, - 0x79, 0xce, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, - 0x69, 0x4a, 0x1c, 0xe7, - 0x7d, 0xef, 0x9e, 0xf7, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x63, - 0x7d, 0xef, 0x0c, 0x63, - 0x00, 0x00, 0x41, 0x08, 0x51, 0x8c, 0xdf, 0xff, 0x1c, 0xe7, 0xff, 0xff, - 0x08, 0x42, 0x00, 0x00, - 0x82, 0x10, 0x38, 0xc6, 0x9a, 0xd6, 0x24, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x92, 0x94, - 0x5d, 0xef, 0x8a, 0x52, 0x00, 0x00, 0x00, 0x00, 0x65, 0x29, 0xba, 0xd6, - 0x3c, 0xe7, 0x1c, 0xe7, - 0xf3, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xbd, 0xff, 0xff, - 0xfb, 0xde, 0x9a, 0xd6, - 0x9a, 0xd6, 0xfb, 0xde, 0xff, 0xff, 0xd3, 0x9c, 0x61, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x65, 0x29, - 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xff, 0xff, - 0x6d, 0x6b, 0x00, 0x00, 0x82, 0x10, 0x38, 0xc6, 0x79, 0xce, 0x04, 0x21, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x92, 0x94, 0x5d, 0xef, 0x8a, 0x52, 0x00, 0x00, 0x65, 0x29, - 0xfb, 0xde, 0x14, 0xa5, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x42, 0xdf, 0xff, 0x7d, 0xef, 0xbe, 0xf7, - 0x71, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb4, 0x0b, - 0x73, 0x1b, 0xcf, 0x1a, - 0xa5, 0x00, 0x22, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0xe5, 0x00, - 0xee, 0x12, 0x55, 0x1c, 0x76, 0x0c, 0x97, 0x04, 0x98, 0x04, 0xb8, 0x0c, - 0x97, 0x0c, 0x76, 0x1c, - 0x50, 0x1b, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x04, 0x21, 0xf7, 0xbd, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xf3, 0x9c, - 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0xae, 0x73, 0xff, 0xff, 0xff, 0xff, - 0x14, 0xa5, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x63, 0x7d, 0xef, 0x0c, 0x63, 0x00, 0x00, 0x00, 0x00, - 0xc3, 0x18, 0xd7, 0xbd, - 0xff, 0xff, 0xff, 0xff, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x9c, - 0x5d, 0xef, 0x2c, 0x63, - 0x20, 0x00, 0x00, 0x00, 0x24, 0x21, 0x9a, 0xd6, 0xba, 0xd6, 0x65, 0x29, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x14, 0xa5, 0xff, 0xff, 0xdf, 0xff, 0x69, 0x4a, 0x00, 0x00, - 0x00, 0x00, 0xe3, 0x18, - 0xff, 0xff, 0xdb, 0xde, 0x75, 0xad, 0x75, 0xad, 0x75, 0xad, 0x75, 0xad, - 0xfb, 0xde, 0xfb, 0xde, - 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xff, 0xff, 0xef, 0x7b, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xff, 0xff, 0x8e, 0x73, 0x00, 0x00, - 0x00, 0x00, 0xd3, 0x9c, - 0x7d, 0xef, 0x2c, 0x63, 0x20, 0x00, 0x00, 0x00, 0x24, 0x21, 0x9a, 0xd6, - 0xba, 0xd6, 0x65, 0x29, - 0x00, 0x00, 0x65, 0x29, 0xfb, 0xde, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x51, 0x8c, - 0xdf, 0xff, 0xff, 0xff, 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, - 0xb4, 0x0b, 0x93, 0x13, 0xaf, 0x12, 0xe6, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0xe5, 0x00, 0x2f, 0x1b, - 0x55, 0x1c, 0x96, 0x14, - 0x97, 0x0c, 0x97, 0x0c, 0xb7, 0x0c, 0x96, 0x1c, 0x50, 0x23, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x18, 0xf7, 0xbd, - 0x79, 0xce, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x82, 0x10, - 0x59, 0xce, 0xff, 0xff, 0xf3, 0x9c, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x5a, - 0x7d, 0xef, 0x0c, 0x63, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, - 0x08, 0x42, 0x00, 0x00, - 0x00, 0x00, 0xa6, 0x31, 0x5d, 0xef, 0xdb, 0xde, 0x30, 0x84, 0xae, 0x73, - 0xd7, 0xbd, 0xdf, 0xff, - 0xef, 0x7b, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x52, - 0xff, 0xff, 0xdb, 0xde, - 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0xae, 0x73, 0x9e, 0xf7, 0x4d, 0x6b, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xdf, 0xff, 0x4d, 0x6b, 0x00, 0x00, - 0x00, 0x00, 0x86, 0x31, - 0xff, 0xff, 0xef, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xff, 0xff, - 0x8e, 0x73, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x31, 0x5d, 0xef, 0xdb, 0xde, - 0x30, 0x84, 0xae, 0x73, - 0xd7, 0xbd, 0xdf, 0xff, 0xef, 0x7b, 0x20, 0x00, 0x00, 0x00, 0x86, 0x31, - 0xfb, 0xde, 0x14, 0xa5, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x21, 0x18, 0xc6, 0xff, 0xff, - 0x92, 0x94, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x0b, 0x93, 0x13, 0xef, 0x12, - 0x06, 0x01, 0x22, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x26, 0x01, 0x70, 0x1b, 0x55, 0x24, 0x97, 0x14, 0xb7, 0x0c, - 0xb8, 0x14, 0x76, 0x1c, - 0x50, 0x23, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xe3, 0x18, 0x95, 0xb5, 0x18, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7d, 0xef, 0xb2, 0x94, - 0x61, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x4a, 0x1c, 0xe7, - 0xb2, 0x94, 0x00, 0x00, - 0x00, 0x00, 0xcb, 0x5a, 0xfb, 0xde, 0xcb, 0x5a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xd3, 0x9c, 0x7d, 0xef, 0xc7, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x42, 0xb6, 0xb5, - 0x5d, 0xef, 0x3c, 0xe7, 0xdb, 0xde, 0xcf, 0x7b, 0x61, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x41, 0x08, 0x3c, 0xe7, 0xb2, 0x94, 0x82, 0x10, 0x00, 0x00, - 0x61, 0x08, 0x96, 0xb5, - 0x59, 0xce, 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa6, 0x31, 0xdb, 0xde, - 0x96, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x65, 0x29, 0x7d, 0xef, 0xae, 0x73, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc7, 0x39, 0x7d, 0xef, 0x2c, 0x63, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x49, 0x4a, 0xb6, 0xb5, 0x5d, 0xef, 0x3c, 0xe7, 0xdb, 0xde, 0xcf, 0x7b, - 0x61, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x65, 0x29, 0x79, 0xce, 0xb2, 0x94, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xeb, 0x5a, 0xfb, 0xde, 0x30, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xb4, 0x0b, - 0x31, 0x1b, 0x06, 0x01, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, - 0x42, 0x00, 0x22, 0x00, - 0x42, 0x00, 0x42, 0x00, 0x22, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, - 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, - 0x47, 0x01, 0x91, 0x23, - 0x76, 0x24, 0xb7, 0x14, 0xb7, 0x14, 0x96, 0x24, 0x50, 0x23, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x18, 0x24, 0x21, - 0x41, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x21, 0x24, 0x21, - 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb4, 0x0b, 0x72, 0x13, 0xca, 0x01, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x42, 0x00, - 0x63, 0x00, 0xc5, 0x00, - 0x47, 0x01, 0x88, 0x01, 0xea, 0x01, 0xea, 0x01, 0xeb, 0x01, 0x0b, 0x02, - 0x89, 0x01, 0x47, 0x01, - 0xe5, 0x00, 0x83, 0x00, 0x62, 0x00, 0x21, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, 0xa9, 0x01, 0x54, 0x2c, 0x96, 0x1c, - 0xb7, 0x1c, 0x96, 0x24, - 0x50, 0x23, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd6, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd4, 0x0b, - 0x93, 0x13, 0x4c, 0x0a, - 0x84, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x21, 0x00, - 0x63, 0x00, 0xa4, 0x00, - 0x27, 0x01, 0x2b, 0x0a, 0xef, 0x1a, 0x50, 0x23, 0x71, 0x1b, 0xb2, 0x1b, - 0xd3, 0x1b, 0xd3, 0x1b, - 0xd3, 0x1b, 0xd3, 0x1b, 0xb3, 0x1b, 0x92, 0x1b, 0x71, 0x23, 0x0f, 0x23, - 0x4b, 0x0a, 0x47, 0x01, - 0xa4, 0x00, 0x63, 0x00, 0x41, 0x00, 0x21, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x63, 0x00, - 0x8d, 0x0a, 0x75, 0x2c, 0x97, 0x24, 0x96, 0x2c, 0x50, 0x2b, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xb3, 0x13, 0xcf, 0x12, 0xe6, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x21, 0x00, - 0x63, 0x00, 0x27, 0x01, 0x4c, 0x02, 0x51, 0x13, 0xd3, 0x1b, 0xf4, 0x13, - 0xf4, 0x13, 0x15, 0x14, - 0x15, 0x0c, 0x15, 0x0c, 0x35, 0x0c, 0x35, 0x0c, 0x35, 0x0c, 0x36, 0x0c, - 0x35, 0x0c, 0x35, 0x0c, - 0x35, 0x14, 0x15, 0x14, 0x15, 0x1c, 0x14, 0x24, 0x71, 0x1b, 0x4c, 0x02, - 0x47, 0x01, 0x83, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0xe5, 0x00, 0x4f, 0x23, - 0x76, 0x2c, 0x96, 0x2c, - 0x50, 0x2b, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd6, 0x03, - 0xd6, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xb4, 0x0b, 0x72, 0x1b, - 0x48, 0x01, 0x42, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x43, 0x00, 0x06, 0x01, 0x4b, 0x0a, 0x50, 0x1b, - 0xf4, 0x1b, 0x15, 0x14, - 0x15, 0x04, 0x36, 0x04, 0x36, 0x04, 0x37, 0x04, 0x36, 0x04, 0x56, 0x04, - 0x56, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x57, 0x04, 0x57, 0x04, 0x56, 0x04, - 0x77, 0x04, 0x56, 0x0c, - 0x56, 0x14, 0x34, 0x1c, 0x92, 0x1b, 0x6c, 0x12, 0x26, 0x01, 0x63, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x88, 0x01, 0x13, 0x2c, 0x95, 0x3c, 0x50, 0x2b, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd6, 0x03, 0xf6, 0x03, - 0xf5, 0x03, 0xd4, 0x0b, - 0x93, 0x13, 0x6d, 0x0a, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xa4, 0x00, - 0xca, 0x01, 0x71, 0x1b, - 0xd3, 0x13, 0x15, 0x14, 0x15, 0x0c, 0x36, 0x04, 0x57, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x77, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x56, 0x0c, - 0x55, 0x0c, 0x34, 0x1c, - 0x92, 0x1b, 0x2b, 0x02, 0xa4, 0x00, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, - 0xad, 0x1a, 0x74, 0x44, - 0x4f, 0x33, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd4, 0x0b, 0x10, 0x1b, 0x27, 0x01, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x42, 0x00, - 0x26, 0x01, 0xae, 0x12, 0xd3, 0x1b, 0x15, 0x14, 0x35, 0x0c, 0x36, 0x04, - 0x57, 0x04, 0x36, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x76, 0x0c, 0x56, 0x14, 0x34, 0x24, - 0xee, 0x1a, 0x47, 0x01, - 0x63, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0xa4, 0x00, 0xf2, 0x4b, 0x4f, 0x3b, 0xc4, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x82, 0x10, 0x08, 0x42, - 0x8a, 0x52, 0x8a, 0x52, 0x65, 0x29, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x65, 0x29, - 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, - 0x08, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x28, 0x42, 0x08, 0x42, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x41, 0x08, - 0x08, 0x42, 0x28, 0x42, 0x00, 0x00, 0x41, 0x08, 0x28, 0x42, 0xaa, 0x52, - 0xaa, 0x52, 0xaa, 0x52, - 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0x49, 0x4a, 0xa2, 0x10, 0x00, 0x00, - 0xaa, 0x52, 0xaa, 0x52, - 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0x8a, 0x52, 0x04, 0x21, - 0x00, 0x00, 0x82, 0x10, - 0x69, 0x4a, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0x28, 0x42, - 0xc3, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa2, 0x10, 0x49, 0x4a, 0x86, 0x31, 0x00, 0x00, - 0x00, 0x00, 0x24, 0x21, - 0x8a, 0x52, 0xe3, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x45, 0x29, 0xaa, 0x52, - 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x08, 0x86, 0x31, - 0x8a, 0x52, 0x8a, 0x52, - 0xe7, 0x39, 0x61, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd6, 0x03, 0xd6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xd5, 0x03, 0x93, 0x13, - 0x0b, 0x0a, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x43, 0x00, 0x48, 0x01, 0x30, 0x1b, 0xf4, 0x1b, - 0x15, 0x0c, 0x36, 0x04, - 0x36, 0x04, 0x56, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x56, 0x04, - 0x56, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x77, 0x04, 0x97, 0x04, - 0x77, 0x04, 0x97, 0x04, - 0x76, 0x04, 0x76, 0x0c, 0x35, 0x1c, 0x71, 0x1b, 0xa9, 0x01, 0x62, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x4a, 0x2a, - 0x2e, 0x43, 0xc4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x21, 0xb2, 0x94, 0x3c, 0xe7, 0xdf, 0xff, 0xdf, 0xff, - 0x79, 0xce, 0x8e, 0x73, - 0x61, 0x08, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xf7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x79, 0xce, - 0x5d, 0xef, 0x8a, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x21, 0x18, 0xc6, 0x79, 0xce, - 0x00, 0x00, 0x04, 0x21, - 0x79, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x1c, 0xe7, - 0x08, 0x42, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, - 0x7d, 0xef, 0xeb, 0x5a, 0x00, 0x00, 0x86, 0x31, 0xfb, 0xde, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x5d, 0xef, 0x55, 0xad, 0x24, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0x1c, 0xe7, - 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0xf3, 0x9c, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xef, 0x7b, 0xff, 0xff, 0x65, 0x29, 0x00, 0x00, - 0x00, 0x00, 0x61, 0x08, - 0xcf, 0x7b, 0x9a, 0xd6, 0xdf, 0xff, 0xff, 0xff, 0x1c, 0xe7, 0x71, 0x8c, - 0xe3, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xd5, 0x03, 0xd5, 0x13, 0x31, 0x13, 0x06, 0x01, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, - 0x68, 0x01, 0x50, 0x1b, - 0xf4, 0x13, 0x36, 0x0c, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, - 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x98, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x0c, 0x55, 0x1c, - 0xf3, 0x2b, 0x88, 0x01, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x05, 0x09, 0x6a, 0x3a, 0xc3, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x10, 0xb2, 0x94, - 0xbe, 0xf7, 0x92, 0x94, - 0xa6, 0x31, 0xc7, 0x39, 0x9a, 0xd6, 0x9e, 0xf7, 0xaa, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x71, 0x8c, - 0x3c, 0xe7, 0xeb, 0x5a, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, - 0xe3, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x79, 0xce, 0xff, 0xff, 0xba, 0xd6, 0xa2, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x21, - 0xf7, 0xbd, 0x79, 0xce, 0x00, 0x00, 0x20, 0x00, 0x04, 0x21, 0x45, 0x29, - 0x45, 0x29, 0x59, 0xce, - 0xba, 0xd6, 0x28, 0x42, 0x45, 0x29, 0x24, 0x21, 0x41, 0x08, 0x00, 0x00, - 0xff, 0xff, 0x75, 0xad, - 0xa6, 0x31, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x24, 0x21, 0x82, 0x10, - 0x00, 0x00, 0x86, 0x31, - 0xfb, 0xde, 0x75, 0xad, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x30, 0x84, - 0x7d, 0xef, 0x55, 0xad, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xfb, 0xde, 0x71, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x6d, 0x6b, - 0xff, 0xff, 0xbe, 0xf7, 0x8a, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xef, 0x7b, 0xff, 0xff, - 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x9e, 0xf7, 0xf7, 0xbd, - 0xc7, 0x39, 0xa6, 0x31, - 0x14, 0xa5, 0xbe, 0xf7, 0x51, 0x8c, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xf5, 0x03, 0xf5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xd5, 0x0b, - 0xb3, 0x1b, 0x2c, 0x0a, - 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0xa9, 0x01, 0x71, 0x1b, 0xf4, 0x13, 0x15, 0x0c, 0x36, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x0c, 0x77, 0x14, 0x76, 0x1c, 0xf3, 0x23, - 0xc9, 0x01, 0x62, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x04, 0x11, 0x83, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x65, 0x29, 0xfb, 0xde, 0xf7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa6, 0x31, 0x9a, 0xd6, - 0x96, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0xfb, 0xde, 0x08, 0x42, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xce, - 0xdf, 0xff, 0xff, 0xff, - 0x71, 0x8c, 0x61, 0x08, 0x00, 0x00, 0xe3, 0x18, 0xf7, 0xbd, 0x79, 0xce, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xbd, 0x79, 0xce, 0x04, 0x21, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf3, 0x9c, 0x82, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0x1c, 0xe7, 0x14, 0xa5, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc3, 0x18, 0x96, 0xb5, 0x7d, 0xef, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0x1c, 0xe7, - 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0xdf, 0xff, - 0x79, 0xce, 0x65, 0x29, - 0x00, 0x00, 0x00, 0x00, 0xef, 0x7b, 0xff, 0xff, 0x86, 0x31, 0x00, 0x00, - 0x00, 0x00, 0x9a, 0xd6, - 0x9a, 0xd6, 0x45, 0x29, 0x00, 0x00, 0x00, 0x00, 0x41, 0x08, 0x38, 0xc6, - 0x38, 0xc6, 0x45, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xf5, 0x03, 0xf5, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf5, 0x03, 0xb4, 0x0b, 0x72, 0x23, 0xe6, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x06, 0x01, 0x51, 0x23, - 0xf4, 0x13, 0x36, 0x0c, - 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x98, 0x04, 0x97, 0x04, 0x98, 0x04, 0xb8, 0x04, 0x97, 0x04, - 0x97, 0x0c, 0x97, 0x0c, - 0xb7, 0x14, 0x76, 0x1c, 0xb1, 0x23, 0x67, 0x01, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, - 0xef, 0x7b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x08, 0xe7, 0x39, 0x28, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x71, 0x8c, - 0xfb, 0xde, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x79, 0xce, 0xdb, 0xde, 0xfb, 0xde, 0x3c, 0xe7, 0xaa, 0x52, - 0x00, 0x00, 0x04, 0x21, - 0xf7, 0xbd, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf7, 0xbd, - 0x79, 0xce, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x14, 0xa5, - 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x86, 0x31, - 0xfb, 0xde, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x10, - 0x55, 0xad, 0x9e, 0xf7, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xfb, 0xde, 0x71, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x6d, 0x6b, - 0xff, 0xff, 0xd7, 0xbd, 0xdf, 0xff, 0xb2, 0x94, 0x82, 0x10, 0x00, 0x00, - 0x10, 0x84, 0xff, 0xff, - 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xf7, 0x55, 0xad, 0xa2, 0x10, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xa6, 0x31, 0x28, 0x42, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf5, 0x03, 0xb4, 0x13, - 0xae, 0x1a, 0x43, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0xc5, 0x00, - 0xef, 0x12, 0x14, 0x1c, 0x15, 0x0c, 0x36, 0x04, 0x56, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x98, 0x04, - 0xb7, 0x04, 0xb8, 0x0c, 0xb7, 0x0c, 0xb7, 0x0c, 0xb8, 0x14, 0x97, 0x14, - 0x75, 0x24, 0x91, 0x23, - 0xa4, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xff, 0xff, 0x6d, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0x5d, 0xef, 0xae, 0x73, - 0x49, 0x4a, 0x49, 0x4a, - 0x49, 0x4a, 0x49, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xce, - 0x18, 0xc6, 0xeb, 0x5a, - 0xbe, 0xf7, 0x18, 0xc6, 0x45, 0x29, 0x04, 0x21, 0xf7, 0xbd, 0x79, 0xce, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xbd, 0x79, 0xce, 0x04, 0x21, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd7, 0xbd, 0xaa, 0x52, 0x49, 0x4a, - 0x49, 0x4a, 0x49, 0x4a, - 0x45, 0x29, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xfb, 0xde, 0x55, 0xad, - 0xc3, 0x18, 0xc3, 0x18, - 0xc3, 0x18, 0xae, 0x73, 0x5d, 0xef, 0x55, 0xad, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xfb, 0xde, - 0x92, 0x94, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0x69, 0x4a, - 0x59, 0xce, 0x7d, 0xef, - 0xaa, 0x52, 0x00, 0x00, 0xef, 0x7b, 0xff, 0xff, 0x86, 0x31, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, - 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf5, 0x0b, 0xb3, 0x1b, 0xa9, 0x01, 0x22, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x83, 0x00, 0x4c, 0x12, 0xf4, 0x1b, 0x16, 0x0c, - 0x36, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x98, 0x0c, 0x98, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, - 0xb8, 0x0c, 0xb7, 0x14, 0xb7, 0x1c, 0x75, 0x2c, 0xad, 0x1a, 0x83, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xff, 0xff, - 0x8e, 0x73, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x71, 0x8c, - 0xdf, 0xff, 0x7d, 0xef, 0x5d, 0xef, 0x5d, 0xef, 0x5d, 0xef, 0x5d, 0xef, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x79, 0xce, 0x18, 0xc6, 0xe3, 0x18, 0x30, 0x84, 0xdf, 0xff, - 0xd3, 0x9c, 0x24, 0x21, - 0xf7, 0xbd, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0xc6, - 0x79, 0xce, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xdf, 0xff, - 0x5d, 0xef, 0x5d, 0xef, 0x5d, 0xef, 0x5d, 0xef, 0x10, 0x84, 0x00, 0x00, - 0x00, 0x00, 0x86, 0x31, - 0xfb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf7, - 0x75, 0xad, 0x45, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xfb, 0xde, 0x71, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x73, - 0xff, 0xff, 0x08, 0x42, 0x08, 0x42, 0x1c, 0xe7, 0x1c, 0xe7, 0xe3, 0x18, - 0xef, 0x7b, 0xff, 0xff, - 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf5, 0x03, 0xf4, 0x0b, 0x30, 0x13, - 0xe6, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0x68, 0x01, 0x92, 0x1b, - 0x15, 0x14, 0x56, 0x04, 0x37, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, 0x97, 0x04, 0xb7, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd7, 0x14, - 0xd7, 0x1c, 0xb6, 0x24, - 0x13, 0x34, 0xa8, 0x01, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xff, 0xff, 0x6d, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0x5d, 0xef, 0xcf, 0x7b, - 0x69, 0x4a, 0x69, 0x4a, - 0x69, 0x4a, 0x69, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xce, - 0xf7, 0xbd, 0x04, 0x21, - 0x24, 0x21, 0xf7, 0xbd, 0xbe, 0xf7, 0x2c, 0x63, 0xf7, 0xbd, 0x79, 0xce, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xbd, 0x9a, 0xd6, 0x04, 0x21, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf7, 0xbd, 0xcb, 0x5a, 0x69, 0x4a, - 0x69, 0x4a, 0x69, 0x4a, - 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xfb, 0xde, 0x38, 0xc6, - 0x2c, 0x63, 0xcf, 0x7b, - 0x1c, 0xe7, 0xdb, 0xde, 0xa6, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xfb, 0xde, - 0x92, 0x94, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x6b, 0xff, 0xff, 0x08, 0x42, - 0x61, 0x08, 0x10, 0x84, - 0xbe, 0xf7, 0x92, 0x94, 0x51, 0x8c, 0xff, 0xff, 0x86, 0x31, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, - 0x14, 0xa5, 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xd5, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf5, 0x0b, - 0xd4, 0x13, 0x8e, 0x0a, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x63, 0x00, 0x0f, 0x1b, 0x14, 0x14, 0x36, 0x0c, 0x36, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x76, 0x04, 0x77, 0x04, 0x97, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0xb8, 0x04, 0xb7, 0x04, - 0xb7, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, - 0xb8, 0x14, 0xb8, 0x14, - 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xb7, 0x24, 0x96, 0x2c, 0x2f, 0x1b, - 0xa4, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xff, 0xff, - 0xae, 0x73, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xa2, 0x10, 0xc3, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x71, 0x8c, - 0x1c, 0xe7, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x79, 0xce, 0x18, 0xc6, 0x04, 0x21, 0x00, 0x00, 0x69, 0x4a, - 0x1c, 0xe7, 0x1c, 0xe7, - 0xfb, 0xde, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf7, 0xbd, - 0x79, 0xce, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x14, 0xa5, - 0x82, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x65, 0x29, - 0xfb, 0xde, 0x14, 0xa5, 0x00, 0x00, 0x20, 0x00, 0x71, 0x8c, 0x9e, 0xf7, - 0x8e, 0x73, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xfb, 0xde, 0x71, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x73, - 0xff, 0xff, 0x08, 0x42, 0x00, 0x00, 0xc3, 0x18, 0xd7, 0xbd, 0x5d, 0xef, - 0xba, 0xd6, 0xff, 0xff, - 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x14, 0xa5, 0x82, 0x10, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x82, 0x10, 0xc3, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xb3, 0x1b, 0x0b, 0x02, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x67, 0x01, - 0xf3, 0x1b, 0x36, 0x0c, - 0x56, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0xb8, 0x04, 0xb7, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, 0xb7, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, - 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd7, 0x1c, - 0xb7, 0x2c, 0x75, 0x3c, 0xc9, 0x09, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x65, 0x29, 0xfb, 0xde, 0xd7, 0xbd, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xa6, 0x31, 0xdb, 0xde, - 0x38, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0x1c, 0xe7, 0x08, 0x42, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xce, - 0x18, 0xc6, 0x04, 0x21, - 0x00, 0x00, 0x20, 0x00, 0xef, 0x7b, 0xff, 0xff, 0xff, 0xff, 0x79, 0xce, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xbd, 0x79, 0xce, 0xe3, 0x18, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf3, 0x9c, 0x61, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x31, 0xfb, 0xde, 0x14, 0xa5, - 0x00, 0x00, 0x00, 0x00, - 0xe3, 0x18, 0x7d, 0xef, 0xba, 0xd6, 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x42, 0xfb, 0xde, - 0x92, 0x94, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x6b, 0xff, 0xff, 0x08, 0x42, - 0x00, 0x00, 0x00, 0x00, - 0xa7, 0x31, 0x7d, 0xef, 0xff, 0xff, 0xff, 0xff, 0x86, 0x31, 0x00, 0x00, - 0x00, 0x00, 0x79, 0xce, - 0x99, 0xd6, 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0x41, 0x08, 0x38, 0xc6, - 0xdb, 0xde, 0x65, 0x29, - 0x00, 0x00, 0x41, 0x08, 0xa2, 0x18, 0x61, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0x71, 0x1b, 0x68, 0x01, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x83, 0x00, 0xad, 0x12, 0x15, 0x14, 0x56, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x98, 0x04, 0x97, 0x04, 0x98, 0x04, 0xb8, 0x04, 0x98, 0x04, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb7, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xb6, 0x34, - 0x70, 0x33, 0x63, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x10, 0x14, 0xa5, - 0x9e, 0xf7, 0xcf, 0x7b, - 0x86, 0x31, 0xa6, 0x31, 0x75, 0xad, 0xbe, 0xf7, 0x4d, 0x6b, 0x00, 0x00, - 0x00, 0x00, 0x92, 0x94, - 0x5d, 0xef, 0xcf, 0x7b, 0x69, 0x4a, 0x69, 0x4a, 0x69, 0x4a, 0x69, 0x4a, - 0xc7, 0x39, 0x00, 0x00, - 0x00, 0x00, 0x9a, 0xd6, 0xf7, 0xbd, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, - 0xa2, 0x10, 0x59, 0xce, - 0xff, 0xff, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf7, 0xbd, - 0x79, 0xce, 0x04, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xf7, 0xbd, - 0xcb, 0x5a, 0x69, 0x4a, 0x69, 0x4a, 0x69, 0x4a, 0x48, 0x42, 0xe3, 0x18, - 0x00, 0x00, 0x66, 0x31, - 0xfb, 0xde, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, - 0xff, 0xff, 0xef, 0x7b, - 0x00, 0x00, 0x00, 0x00, 0xaa, 0x52, 0x92, 0x94, 0xc7, 0x39, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0xfb, 0xde, 0x71, 0x8c, 0x00, 0x00, - 0x00, 0x00, 0x8e, 0x6b, - 0xff, 0xff, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, - 0xdf, 0xff, 0xff, 0xff, - 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0xef, 0x7b, 0x9e, 0xf7, 0x34, 0xa5, - 0xa6, 0x31, 0x86, 0x31, - 0xef, 0x7b, 0xbe, 0xf7, 0xd3, 0x9c, 0x61, 0x08, 0x00, 0x00, 0xcb, 0x5a, - 0xb6, 0xb5, 0x2c, 0x63, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xf4, 0x13, 0x10, 0x1b, 0xe6, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x67, 0x01, 0x91, 0x1b, - 0x15, 0x14, 0x56, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x98, 0x04, 0x97, 0x04, 0xb8, 0x04, - 0xb8, 0x04, 0xb8, 0x04, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb7, 0x0c, - 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x24, - 0xd8, 0x24, 0xd7, 0x34, 0x75, 0x44, 0x06, 0x01, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x45, 0x29, 0xb6, 0xb5, 0x3c, 0xe7, 0xfb, 0xde, 0xfb, 0xde, - 0x1c, 0xe7, 0x51, 0x8c, - 0xa2, 0x10, 0x00, 0x00, 0x00, 0x00, 0x30, 0x84, 0x7d, 0xef, 0x3c, 0xe7, - 0xfb, 0xde, 0xfb, 0xde, - 0xfb, 0xde, 0xfb, 0xde, 0x55, 0xad, 0x00, 0x00, 0x00, 0x00, 0x38, 0xc6, - 0xb6, 0xb5, 0xe3, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x4a, 0x3c, 0xe7, 0x38, 0xc6, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xb5, 0x18, 0xc6, 0xe3, 0x18, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0x5d, 0xef, 0x1b, 0xe7, 0xfb, 0xde, - 0xfb, 0xde, 0xfb, 0xde, - 0x9a, 0xd6, 0xaa, 0x52, 0x00, 0x00, 0x65, 0x29, 0x9a, 0xd6, 0xb2, 0x94, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x45, 0x29, 0x38, 0xc6, 0xfb, 0xde, 0x82, 0x10, 0x00, 0x00, - 0x71, 0x8c, 0x7d, 0xef, - 0xeb, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc7, 0x39, 0x9a, 0xd6, - 0x50, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x9e, 0xf7, 0xe7, 0x39, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x24, 0x21, 0xd7, 0xbd, 0x9e, 0xf7, 0x65, 0x29, 0x00, 0x00, - 0x00, 0x00, 0xc3, 0x18, - 0xb2, 0x94, 0x3c, 0xe7, 0xfb, 0xe6, 0xfb, 0xe6, 0x3c, 0xe7, 0x75, 0xad, - 0x24, 0x21, 0x00, 0x00, - 0x00, 0x00, 0xcf, 0x7b, 0x9e, 0xf7, 0x30, 0x84, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, - 0xce, 0x1a, 0x84, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x62, 0x00, - 0x2b, 0x02, 0xf4, 0x1b, 0x36, 0x0c, 0x57, 0x04, 0x77, 0x04, 0x57, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x77, 0x04, - 0x98, 0x04, 0xb8, 0x04, - 0x98, 0x04, 0xb8, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, - 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xf8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xd7, 0x2c, - 0x96, 0x44, 0x8c, 0x1a, - 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x8a, 0x52, - 0xae, 0x73, 0x8e, 0x73, 0x86, 0x31, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x65, 0x29, - 0x8a, 0x52, 0x8a, 0x52, 0x8a, 0x52, 0x8a, 0x52, 0x8a, 0x52, 0x8a, 0x52, - 0xe7, 0x39, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x42, 0xe7, 0x39, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x41, 0x08, - 0xe7, 0x39, 0x28, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xe7, 0x39, - 0x08, 0x42, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8a, 0x52, 0x8a, 0x52, - 0x89, 0x52, 0x89, 0x52, 0x8a, 0x52, 0x8a, 0x52, 0x69, 0x4a, 0xe3, 0x18, - 0x00, 0x00, 0x82, 0x10, - 0x29, 0x42, 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x86, 0x31, 0x8a, 0x52, - 0xa2, 0x10, 0x00, 0x00, 0x91, 0x94, 0x7d, 0xef, 0x0c, 0x63, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa2, 0x10, 0x28, 0x42, 0x65, 0x29, 0x00, 0x00, - 0x00, 0x00, 0x24, 0x21, - 0x8a, 0x52, 0xa2, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x45, 0x29, 0x8a, 0x52, - 0x82, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0xa7, 0x31, - 0x8e, 0x73, 0xae, 0x73, - 0x49, 0x4a, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x29, - 0x8a, 0x52, 0x65, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xb5, 0x03, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, 0x4c, 0x12, 0x63, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xa4, 0x00, 0xcf, 0x0a, 0x15, 0x14, - 0x56, 0x0c, 0x57, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x98, 0x04, 0xb8, 0x04, 0x98, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xf8, 0x1c, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xd8, 0x2c, 0xb7, 0x3c, 0x91, 0x33, 0x83, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x72, 0x94, 0xf7, 0xbd, - 0x45, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xb5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x1b, - 0xc9, 0x01, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x06, 0x01, - 0x71, 0x13, 0x35, 0x0c, 0x56, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, 0xb8, 0x04, - 0x98, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xd8, 0x14, 0xb8, 0x14, - 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xf8, 0x1c, 0xd8, 0x24, - 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xd7, 0x3c, 0x13, 0x3c, - 0x26, 0x01, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0x4a, 0xe3, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xb5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x1b, 0x68, 0x01, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x67, 0x01, 0xf3, 0x23, 0x36, 0x0c, - 0x76, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0xb8, 0x04, - 0xb8, 0x04, 0xb7, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x14, 0xb8, 0x14, - 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xd8, 0x24, - 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf9, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x34, 0x54, 0x3c, 0xa8, 0x09, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf4, 0x1b, - 0x07, 0x01, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x00, 0xc9, 0x09, - 0x14, 0x24, 0x56, 0x0c, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0xb8, 0x04, 0xb8, 0x04, 0x98, 0x04, 0xb7, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x34, 0xb6, 0x44, - 0x4b, 0x1a, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb4, 0x0b, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, 0xd5, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x16, 0x04, 0xf3, 0x1b, 0x06, 0x01, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x0b, 0x0a, 0x14, 0x1c, 0x56, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x98, 0x04, - 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, 0x98, 0x04, 0xb8, 0x04, 0xb7, 0x04, - 0xb7, 0x04, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb7, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0x18, 0x35, 0xf8, 0x34, 0xf8, 0x34, 0xd7, 0x44, 0x8c, 0x22, 0x22, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb4, 0x0b, 0xd5, 0x03, - 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0xf4, 0x1b, - 0x06, 0x01, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x8d, 0x12, - 0x35, 0x1c, 0x56, 0x0c, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x98, 0x04, - 0x98, 0x04, 0x98, 0x04, - 0xb7, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x14, 0xd8, 0x14, - 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x19, 0x2d, 0x19, 0x2d, 0x19, 0x35, 0x18, 0x35, 0x18, 0x35, - 0x18, 0x3d, 0xd7, 0x4c, - 0xad, 0x22, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x21, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x73, 0x1b, 0xb5, 0x0b, 0xd5, 0x03, 0xd5, 0x03, 0xd5, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x36, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0xd4, 0x1b, 0x06, 0x01, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0xad, 0x12, 0x35, 0x1c, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x98, 0x04, 0xb8, 0x04, 0xb8, 0x04, 0xb7, 0x0c, 0xb8, 0x0c, 0xb7, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xd8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xf8, 0x1c, 0xf8, 0x1c, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x2c, - 0xf8, 0x2c, 0x18, 0x2d, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, - 0x18, 0x35, 0x18, 0x35, - 0x19, 0x35, 0x19, 0x35, 0x19, 0x3d, 0xf7, 0x4c, 0x0e, 0x2b, 0x63, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x21, 0x00, 0x22, 0x00, - 0x63, 0x00, 0x63, 0x00, - 0x84, 0x00, 0xc5, 0x00, 0xe6, 0x00, 0xe6, 0x00, 0xa5, 0x00, 0x84, 0x00, - 0x64, 0x00, 0x43, 0x00, - 0x42, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x73, 0x1b, - 0xb5, 0x0b, 0xd5, 0x03, - 0xd5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf5, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x16, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0xf4, 0x1b, - 0x06, 0x01, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x62, 0x00, 0xad, 0x12, - 0x35, 0x1c, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x98, 0x04, 0x98, 0x04, 0xb8, 0x04, 0xb8, 0x04, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb7, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, - 0xf8, 0x2c, 0x18, 0x2d, - 0x18, 0x2d, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x35, 0x18, 0x35, - 0x18, 0x3d, 0xf7, 0x4c, - 0x0e, 0x33, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, - 0xc4, 0x00, 0xe5, 0x00, - 0xc5, 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xe5, 0x00, 0xc4, 0x00, - 0x83, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x42, 0x00, - 0x63, 0x00, 0xa4, 0x00, - 0x06, 0x01, 0xa9, 0x01, 0x4c, 0x12, 0xee, 0x22, 0x30, 0x23, 0x51, 0x23, - 0x51, 0x23, 0x71, 0x23, - 0x30, 0x23, 0x30, 0x23, 0xce, 0x1a, 0x4c, 0x12, 0xa9, 0x01, 0x06, 0x01, - 0xa4, 0x00, 0x63, 0x00, - 0x21, 0x00, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x93, 0x1b, 0xb5, 0x0b, 0xd5, 0x03, 0xd5, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, - 0x16, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x56, 0x04, 0x36, 0x04, 0xf4, 0x1b, 0x06, 0x01, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x8c, 0x12, 0x35, 0x1c, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x98, 0x04, 0x97, 0x04, 0x98, 0x04, 0xb8, 0x04, - 0xb8, 0x04, 0xb8, 0x04, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, - 0xb7, 0x14, 0xb8, 0x14, - 0xd8, 0x1c, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xd8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x18, 0x2d, 0x18, 0x2d, 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, - 0x19, 0x35, 0x19, 0x35, - 0x19, 0x35, 0x39, 0x3d, 0x19, 0x3d, 0xf7, 0x4c, 0xac, 0x22, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x0a, 0x1a, 0x91, 0x2b, 0xd3, 0x1b, 0xb3, 0x1b, 0xb3, 0x1b, - 0xb3, 0x1b, 0xd3, 0x1b, - 0xd3, 0x1b, 0xb2, 0x2b, 0xce, 0x2a, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x21, 0x00, - 0xa4, 0x00, 0x68, 0x01, 0x2c, 0x02, 0x10, 0x13, 0xb3, 0x1b, 0xd4, 0x1b, - 0xd4, 0x13, 0xd4, 0x13, - 0xd4, 0x13, 0xd4, 0x13, 0xf4, 0x13, 0xf4, 0x0b, 0xf4, 0x13, 0xd4, 0x13, - 0xd4, 0x13, 0xd4, 0x13, - 0xd4, 0x1b, 0xb3, 0x1b, 0xef, 0x12, 0x2c, 0x0a, 0x68, 0x01, 0x84, 0x00, - 0x42, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x93, 0x1b, - 0xd5, 0x0b, 0xf6, 0x03, - 0xf5, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, - 0x36, 0x04, 0xf4, 0x1b, - 0x06, 0x01, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x2b, 0x0a, - 0x34, 0x1c, 0x76, 0x0c, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x98, 0x04, 0x98, 0x04, - 0xb8, 0x04, 0xb8, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x14, 0xb8, 0x14, - 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, 0x18, 0x35, - 0x18, 0x35, 0x18, 0x35, - 0x18, 0x35, 0x39, 0x35, 0x19, 0x35, 0x19, 0x3d, 0x39, 0x3d, 0x38, 0x3d, - 0x18, 0x45, 0xf7, 0x54, - 0x8c, 0x2a, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x0b, 0x12, - 0xd3, 0x1b, 0xf5, 0x0b, - 0xf5, 0x03, 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x03, 0xf5, 0x0b, 0xd4, 0x13, - 0xef, 0x1a, 0x63, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x22, 0x00, 0x63, 0x00, 0x47, 0x01, 0xae, 0x12, 0x71, 0x1b, - 0xd3, 0x1b, 0xf4, 0x0b, - 0xf5, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x03, 0xf6, 0x03, 0xf5, 0x0b, - 0xd5, 0x13, 0xd3, 0x1b, - 0x71, 0x1b, 0x8d, 0x12, 0xa9, 0x01, 0x84, 0x00, 0x22, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x02, 0x93, 0x1b, 0xd5, 0x0b, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x36, 0x04, 0x36, 0x04, 0xf4, 0x1b, 0x47, 0x01, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0xc9, 0x01, 0x34, 0x24, 0x76, 0x0c, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, 0xb8, 0x04, 0xb8, 0x04, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xd8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0x19, 0x2d, 0xf8, 0x2c, 0x18, 0x2d, - 0xf8, 0x2c, 0xf8, 0x2c, - 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, 0x18, 0x35, - 0x19, 0x3d, 0x39, 0x3d, - 0x39, 0x3d, 0x39, 0x45, 0x18, 0x45, 0xb6, 0x4c, 0x2a, 0x22, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x0b, 0x12, 0xd4, 0x13, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, - 0x16, 0x04, 0xd4, 0x13, 0x0f, 0x1b, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, 0x27, 0x01, - 0xae, 0x12, 0x92, 0x1b, - 0xd4, 0x13, 0xf5, 0x0b, 0xf5, 0x0b, 0xf5, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x0b, 0xf5, 0x0b, 0xd4, 0x13, - 0x92, 0x1b, 0xef, 0x1a, - 0x47, 0x01, 0x84, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x93, 0x1b, - 0xd5, 0x0b, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x56, 0x04, - 0x36, 0x04, 0x15, 0x1c, - 0xa9, 0x01, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x47, 0x01, - 0xf3, 0x23, 0x76, 0x0c, 0x97, 0x0c, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, - 0xb8, 0x04, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb7, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xd8, 0x14, - 0xb8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xb8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0x19, 0x2d, - 0x18, 0x2d, 0xf8, 0x2c, - 0xf8, 0x2c, 0x19, 0x2d, 0x19, 0x35, 0xf8, 0x2c, 0x18, 0x35, 0x19, 0x35, - 0x19, 0x35, 0x18, 0x3d, - 0x39, 0x3d, 0x39, 0x3d, 0x19, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x18, 0x45, - 0x18, 0x4d, 0x75, 0x4c, - 0xa8, 0x11, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xf4, 0x13, - 0xef, 0x1a, 0x63, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0xa4, 0x00, - 0xca, 0x01, 0x71, 0x23, 0xd4, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x0b, 0xd4, 0x13, 0x72, 0x23, 0x4c, 0x12, - 0xe6, 0x00, 0x22, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x2d, 0x02, 0x93, 0x1b, 0xd5, 0x0b, 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x15, 0x1c, 0x0b, 0x0a, 0x42, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x01, 0x91, 0x13, 0x76, 0x14, - 0x97, 0x0c, 0x98, 0x04, - 0x98, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, - 0xd8, 0x14, 0xd7, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xf8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x35, 0xf8, 0x34, 0x18, 0x35, - 0x18, 0x35, 0x18, 0x35, - 0x19, 0x35, 0x39, 0x35, 0x39, 0x3d, 0x18, 0x3d, 0x38, 0x3d, 0x39, 0x3d, - 0x39, 0x3d, 0x39, 0x45, - 0x39, 0x45, 0x38, 0x45, 0x18, 0x4d, 0x33, 0x4c, 0x05, 0x01, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0xe5, 0x00, 0x4c, 0x0a, 0x92, 0x1b, 0xd4, 0x13, - 0xf5, 0x0b, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0xf5, 0x0b, - 0xf4, 0x0b, 0xb3, 0x1b, 0xef, 0x1a, 0x27, 0x01, 0x42, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x02, 0xb3, 0x1b, - 0xd5, 0x0b, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x15, 0x14, - 0xae, 0x1a, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xa3, 0x00, - 0xee, 0x0a, 0x76, 0x1c, 0x97, 0x14, 0x98, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xf8, 0x1c, 0xd8, 0x1c, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xd8, 0x24, 0xf8, 0x24, - 0xf9, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, - 0xf8, 0x2c, 0x18, 0x35, - 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x35, 0x39, 0x3d, - 0x19, 0x3d, 0x38, 0x3d, - 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x38, 0x4d, - 0x17, 0x55, 0xb1, 0x43, - 0x42, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x22, 0x00, 0xc5, 0x00, - 0x0f, 0x1b, 0xb3, 0x1b, - 0xf5, 0x0b, 0xf6, 0x03, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0xf5, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x0b, - 0xd4, 0x13, 0x50, 0x1b, - 0x88, 0x01, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x2d, 0x02, 0xb3, 0x1b, 0xd5, 0x0b, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x35, 0x14, 0x30, 0x23, 0xa4, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x0b, 0x02, 0x34, 0x24, - 0x97, 0x14, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, - 0xd8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xf8, 0x1c, - 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0x18, 0x2d, 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, - 0x19, 0x3d, 0x18, 0x3d, - 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x38, 0x4d, 0xf7, 0x5c, 0x4b, 0x1a, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0x07, 0x01, 0xcf, 0x12, 0xd4, 0x1b, 0xf5, 0x0b, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0xf6, 0x03, - 0xf5, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, 0xf4, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, - 0x15, 0x04, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd4, 0x13, 0x51, 0x1b, 0xa9, 0x01, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x02, 0xb3, 0x1b, - 0xd5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x36, 0x04, - 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x35, 0x14, - 0x71, 0x1b, 0x26, 0x01, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x47, 0x01, 0xb2, 0x23, 0x76, 0x1c, 0xb7, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x14, 0xd8, 0x14, - 0xd7, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xb8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xd8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x34, - 0xf8, 0x34, 0xf8, 0x34, 0xf8, 0x2c, 0x18, 0x2d, 0x18, 0x35, 0x18, 0x35, - 0x19, 0x35, 0x19, 0x35, - 0x19, 0x35, 0x18, 0x3d, 0x19, 0x3d, 0x19, 0x3d, 0x18, 0x3d, 0x39, 0x3d, - 0x39, 0x3d, 0x39, 0x3d, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x18, 0x4d, - 0xf6, 0x64, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0xe6, 0x00, 0xcf, 0x12, 0xb3, 0x1b, - 0xd5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0xf5, 0x0b, 0xf5, 0x0b, 0xd4, 0x13, 0xb3, 0x13, 0xb3, 0x1b, 0xb3, 0x23, - 0x72, 0x1b, 0x72, 0x1b, - 0xb2, 0x23, 0xb3, 0x1b, 0xd4, 0x1b, 0xd4, 0x13, 0xf5, 0x13, 0xf5, 0x0b, - 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x15, 0x04, - 0xf4, 0x13, 0x71, 0x1b, 0x68, 0x01, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x2d, 0x02, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x56, 0x0c, 0xd3, 0x1b, 0xc9, 0x01, - 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0xad, 0x1a, - 0x76, 0x24, 0xb7, 0x14, - 0xb7, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xf8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, 0xd7, 0x3c, 0xf3, 0x23, 0x96, 0x34, 0xf7, 0x3c, - 0xf8, 0x34, 0x18, 0x35, - 0x19, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x3d, 0x39, 0x3d, 0x39, 0x3d, - 0x39, 0x3d, 0x19, 0x3d, - 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x38, 0x4d, 0x38, 0x55, 0x70, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0x84, 0x00, 0xae, 0x12, - 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd4, 0x13, 0xb3, 0x1b, 0x51, 0x1b, - 0x8d, 0x12, 0xca, 0x01, - 0x27, 0x01, 0xc6, 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xe5, 0x00, 0x27, 0x01, - 0xc9, 0x01, 0xae, 0x1a, - 0x51, 0x1b, 0x93, 0x1b, 0xd4, 0x13, 0xf5, 0x0b, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0xf5, 0x03, 0xd4, 0x13, - 0x30, 0x1b, 0x47, 0x01, - 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x02, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x76, 0x0c, - 0x35, 0x1c, 0x6c, 0x02, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x06, 0x01, 0x34, 0x2c, 0x96, 0x1c, 0xb7, 0x14, 0xb7, 0x14, - 0xd8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xf8, 0x1c, 0xd8, 0x24, - 0xd8, 0x24, 0xd8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x34, - 0x75, 0x3c, 0x07, 0x01, - 0xae, 0x0a, 0xb6, 0x44, 0xf8, 0x3c, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, - 0x19, 0x3d, 0x39, 0x3d, - 0x18, 0x3d, 0x38, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x38, 0x4d, 0x38, 0x4d, 0xd6, 0x54, - 0xc9, 0x11, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x83, 0x00, 0x0b, 0x02, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x0c, 0xf4, 0x0b, - 0xd3, 0x13, 0xef, 0x0a, - 0x0b, 0x02, 0xe6, 0x00, 0x63, 0x00, 0x42, 0x00, 0x22, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x01, 0x00, - 0x21, 0x00, 0x21, 0x00, 0x42, 0x00, 0x63, 0x00, 0xc6, 0x00, 0xeb, 0x01, - 0x10, 0x13, 0xb3, 0x13, - 0xf5, 0x13, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, - 0x16, 0x04, 0xf5, 0x0b, 0xd4, 0x13, 0xcf, 0x12, 0xc5, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x2d, 0x02, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x36, 0x04, 0x16, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x76, 0x04, 0x55, 0x14, 0x2f, 0x0b, - 0xc5, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, - 0x0f, 0x1b, 0x75, 0x2c, - 0xb7, 0x24, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xd8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xd8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xd7, 0x3c, 0xf2, 0x33, 0x85, 0x00, 0x27, 0x01, 0xf2, 0x43, - 0xf7, 0x44, 0x18, 0x3d, - 0x19, 0x35, 0x39, 0x3d, 0x39, 0x3d, 0x19, 0x3d, 0x38, 0x3d, 0x39, 0x3d, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x59, 0x45, - 0x39, 0x4d, 0x38, 0x55, - 0x18, 0x5d, 0x90, 0x3b, 0xc4, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x68, 0x01, - 0x72, 0x1b, 0xf4, 0x0b, - 0x15, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd4, 0x13, 0x92, 0x1b, 0x4c, 0x0a, 0xe5, 0x00, 0x63, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x43, 0x00, 0xe6, 0x00, 0xeb, 0x01, 0x72, 0x1b, 0xd4, 0x13, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0xf5, 0x0b, 0xb3, 0x1b, - 0x0b, 0x0a, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x02, 0xd3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x77, 0x04, - 0x56, 0x0c, 0xf3, 0x1b, 0x67, 0x01, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x47, 0x01, 0xd2, 0x2b, 0x96, 0x2c, 0xd7, 0x24, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xf8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x19, 0x35, 0xd7, 0x3c, - 0x95, 0x54, 0x84, 0x00, - 0x63, 0x00, 0x4b, 0x1a, 0xd7, 0x4c, 0x18, 0x45, 0x19, 0x3d, 0x39, 0x3d, - 0x39, 0x3d, 0x39, 0x3d, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x59, 0x45, - 0x59, 0x45, 0x59, 0x45, - 0x59, 0x45, 0x39, 0x45, 0x39, 0x4d, 0x38, 0x55, 0x74, 0x54, 0x88, 0x09, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x83, 0x00, - 0x83, 0x00, 0x84, 0x00, - 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x83, 0x00, 0x62, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x83, 0x00, - 0x83, 0x00, 0x84, 0x00, - 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x83, 0x00, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0xc5, 0x00, 0xce, 0x12, 0xd4, 0x13, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x0b, 0xd4, 0x13, 0x31, 0x13, 0x89, 0x01, - 0x84, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x21, 0x00, 0x63, 0x00, - 0x07, 0x01, 0xef, 0x12, 0xb4, 0x13, 0xf5, 0x0b, 0xf6, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf5, 0x03, 0xf5, 0x03, 0xf5, 0x0b, 0xd4, 0x13, 0x71, 0x2b, 0xe6, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x2d, 0x02, 0xd3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x76, 0x0c, 0x55, 0x1c, - 0x4b, 0x0a, 0x63, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x63, 0x00, 0x2b, 0x12, - 0x54, 0x34, 0xd7, 0x2c, 0xd8, 0x24, 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x19, 0x35, - 0x19, 0x35, 0xf8, 0x3c, 0xb5, 0x54, 0xa4, 0x00, 0x22, 0x00, 0x83, 0x00, - 0x33, 0x44, 0xf7, 0x4c, - 0x18, 0x45, 0x19, 0x3d, 0x19, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x59, 0x45, 0x59, 0x45, 0x59, 0x45, 0x59, 0x4d, - 0x38, 0x55, 0x37, 0x5d, - 0xcd, 0x2a, 0x42, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x47, 0x01, 0x8d, 0x1a, 0xae, 0x12, 0xae, 0x0a, 0xcf, 0x0a, 0xcf, 0x0a, - 0xcf, 0x0a, 0xae, 0x12, - 0x8d, 0x12, 0xea, 0x11, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x47, 0x01, 0x8d, 0x1a, 0xce, 0x12, 0xce, 0x0a, 0xce, 0x0a, 0xae, 0x0a, - 0xcf, 0x0a, 0xae, 0x12, - 0x8d, 0x1a, 0x88, 0x09, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0xea, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, - 0xd4, 0x13, 0x30, 0x13, - 0x27, 0x01, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0xe6, 0x00, - 0x8e, 0x12, 0x92, 0x1b, - 0xd4, 0x13, 0xf5, 0x0b, 0xd5, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, - 0xf5, 0x0b, 0xd4, 0x13, - 0xb2, 0x23, 0x4c, 0x12, 0x63, 0x00, 0x00, 0x00, 0x4d, 0x02, 0xd4, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x77, 0x04, 0x55, 0x14, 0x91, 0x23, 0x84, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0xa4, 0x00, 0x0f, 0x23, 0xb6, 0x34, - 0xb7, 0x2c, 0xd8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x19, 0x35, 0x19, 0x35, 0xf8, 0x3c, - 0xd6, 0x54, 0x06, 0x01, - 0x21, 0x00, 0x22, 0x00, 0x2a, 0x12, 0xd6, 0x54, 0x18, 0x4d, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x38, 0x45, 0x38, 0x45, 0x39, 0x45, 0x59, 0x45, - 0x59, 0x45, 0x59, 0x45, - 0x59, 0x4d, 0x38, 0x55, 0x38, 0x5d, 0x12, 0x4c, 0xa4, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0xca, 0x09, 0xb2, 0x23, - 0xd3, 0x1b, 0xd4, 0x13, - 0xd4, 0x0b, 0xf5, 0x13, 0xd4, 0x0b, 0xd4, 0x13, 0xb3, 0x23, 0xce, 0x22, - 0x63, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0xca, 0x09, 0xb2, 0x2b, - 0xb3, 0x13, 0xf4, 0x13, - 0xd4, 0x13, 0xf4, 0x13, 0xf5, 0x13, 0xd3, 0x13, 0xb2, 0x23, 0x2b, 0x0a, - 0x62, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x64, 0x00, - 0x10, 0x1b, 0xd4, 0x13, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf5, 0x03, 0xf4, 0x13, 0x51, 0x1b, 0x89, 0x01, 0x42, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x22, 0x00, 0xc5, 0x00, 0xad, 0x1a, 0x92, 0x2b, 0xb2, 0x23, - 0xb2, 0x23, 0xb3, 0x23, - 0xb2, 0x23, 0xb2, 0x23, 0xb3, 0x23, 0xb2, 0x23, 0x91, 0x2b, 0x0e, 0x33, - 0xe4, 0x08, 0x20, 0x00, - 0x4d, 0x02, 0xd3, 0x1b, 0x15, 0x0c, 0x16, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x98, 0x04, 0x76, 0x0c, - 0x55, 0x2c, 0xa9, 0x01, - 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0xc5, 0x00, 0x91, 0x33, 0xb6, 0x3c, 0xd7, 0x2c, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x2c, - 0x18, 0x2d, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x35, 0x18, 0x35, - 0x18, 0x35, 0x18, 0x35, - 0x19, 0x35, 0xf8, 0x44, 0xd6, 0x54, 0x47, 0x01, 0x21, 0x00, 0x21, 0x00, - 0xe5, 0x00, 0x90, 0x3b, - 0x17, 0x4d, 0x38, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x59, 0x45, - 0x59, 0x45, 0x59, 0x45, 0x59, 0x4d, 0x59, 0x4d, 0x58, 0x55, 0x38, 0x5d, - 0x33, 0x54, 0x46, 0x09, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x82, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xea, 0x01, 0xb2, 0x23, 0xd4, 0x0b, 0xf5, 0x03, 0xf5, 0x03, 0xf5, 0x03, - 0xf5, 0x03, 0xf5, 0x0b, - 0xd3, 0x1b, 0xce, 0x1a, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xea, 0x01, 0xb3, 0x1b, 0xf4, 0x0b, 0xf5, 0x03, 0x15, 0x04, 0x15, 0x04, - 0xf6, 0x03, 0xf5, 0x0b, - 0xb3, 0x1b, 0x4b, 0x0a, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x89, 0x01, 0xd3, 0x1b, 0xf5, 0x0b, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x15, 0x04, 0xf5, 0x0b, 0x72, 0x13, - 0xa9, 0x01, 0x43, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x63, 0x00, - 0xa4, 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xc5, 0x00, 0xc5, 0x00, - 0xc5, 0x00, 0xc5, 0x00, - 0xc5, 0x00, 0xa3, 0x00, 0x42, 0x00, 0x20, 0x00, 0x2d, 0x02, 0xd4, 0x1b, - 0x15, 0x0c, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0xb8, 0x04, - 0x97, 0x04, 0x97, 0x0c, 0x75, 0x1c, 0x0f, 0x13, 0xa4, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x47, 0x01, - 0xb2, 0x33, 0xb6, 0x3c, - 0xd7, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x19, 0x2d, 0xf8, 0x2c, 0x18, 0x2d, - 0x19, 0x35, 0x19, 0x35, - 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x3d, 0xf8, 0x44, - 0xd6, 0x54, 0x0a, 0x12, - 0x22, 0x00, 0x21, 0x00, 0x21, 0x00, 0x0a, 0x1a, 0xb5, 0x4c, 0x38, 0x4d, - 0x38, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x59, 0x45, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x55, - 0x38, 0x5d, 0x53, 0x54, 0x88, 0x11, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0xc7, 0x31, 0xc3, 0x08, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x0a, 0x02, 0xd3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0xf5, 0x03, 0xd4, 0x13, 0xef, 0x1a, - 0x63, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x0b, 0x02, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x0a, - 0x63, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0x84, 0x00, 0xae, 0x1a, - 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd4, 0x1b, 0x4d, 0x02, 0x84, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x01, 0x00, - 0x21, 0x00, 0x21, 0x00, - 0x01, 0x00, 0x21, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x4d, 0x02, 0xd4, 0x1b, 0x15, 0x0c, 0x36, 0x04, 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, - 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, 0x98, 0x04, 0x97, 0x0c, - 0x97, 0x14, 0x13, 0x24, - 0xa8, 0x01, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, 0x47, 0x01, 0xd2, 0x3b, 0xb6, 0x3c, 0xf7, 0x34, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, 0x18, 0x35, 0x18, 0x35, - 0x19, 0x35, 0x19, 0x3d, - 0x19, 0x3d, 0x18, 0x45, 0xf6, 0x54, 0x4b, 0x1a, 0x42, 0x00, 0x00, 0x00, - 0x01, 0x00, 0xa4, 0x00, - 0xb1, 0x43, 0xf7, 0x54, 0x38, 0x4d, 0x59, 0x45, 0x59, 0x45, 0x59, 0x45, - 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x55, 0x38, 0x5d, 0x95, 0x5c, 0x67, 0x09, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x46, 0x19, - 0x6e, 0x5b, 0xc4, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xea, 0x01, 0xd3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0xd4, 0x13, 0xef, 0x1a, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xea, 0x01, 0xd3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0xd3, 0x1b, 0x4c, 0x0a, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x47, 0x01, 0x51, 0x1b, 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x13, 0x71, 0x23, 0xe6, 0x00, - 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x02, 0xd4, 0x1b, - 0x15, 0x0c, 0x36, 0x04, - 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, 0xb8, 0x04, - 0xb8, 0x04, 0x97, 0x04, - 0xb8, 0x0c, 0xb8, 0x0c, 0x97, 0x14, 0x75, 0x24, 0xee, 0x1a, 0xc4, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x00, 0xc5, 0x00, - 0x91, 0x33, 0xb6, 0x3c, 0xd7, 0x3c, 0xf8, 0x34, 0xf8, 0x34, 0x18, 0x35, - 0x18, 0x35, 0x39, 0x35, - 0x39, 0x3d, 0x19, 0x35, 0x39, 0x3d, 0x19, 0x3d, 0x39, 0x3d, 0x18, 0x45, - 0xf7, 0x54, 0xed, 0x2a, - 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x88, 0x09, 0xf6, 0x5c, - 0x18, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x45, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x55, - 0x38, 0x55, 0xf2, 0x43, - 0x67, 0x09, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x8f, 0x53, 0xf1, 0x63, 0xe4, 0x08, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0xea, 0x01, 0xd3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x15, 0x04, 0xd4, 0x13, 0xcf, 0x12, - 0x83, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xea, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x0a, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, - 0x0b, 0x02, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0xf6, 0x03, - 0xf6, 0x0b, 0xd4, 0x1b, - 0x0b, 0x0a, 0x43, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x4d, 0x02, 0xd4, 0x1b, 0x16, 0x0c, 0x36, 0x04, 0x36, 0x04, 0x57, 0x04, - 0x36, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x98, 0x04, - 0x97, 0x04, 0x97, 0x04, 0xb7, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb7, 0x14, 0x96, 0x1c, - 0x14, 0x2c, 0xc9, 0x01, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x00, 0xe5, 0x00, 0xac, 0x22, - 0x54, 0x44, 0xd7, 0x44, - 0xf8, 0x3c, 0x18, 0x3d, 0x19, 0x3d, 0x19, 0x3d, 0x39, 0x3d, 0x39, 0x3d, - 0x19, 0x3d, 0x19, 0x3d, - 0x39, 0x3d, 0x18, 0x45, 0xf7, 0x54, 0x4f, 0x33, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x90, 0x43, 0x17, 0x55, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x55, 0xb5, 0x54, 0xc9, 0x09, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0x67, 0x09, 0x36, 0x7d, - 0x11, 0x5c, 0xe4, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xea, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0xd4, 0x13, 0xef, 0x12, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xeb, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xb3, 0x13, 0x4c, 0x0a, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x83, 0x00, 0x8d, 0x0a, 0xd4, 0x13, 0x15, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, - 0xf6, 0x03, 0x16, 0x04, 0xf5, 0x0b, 0x72, 0x1b, 0x06, 0x01, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x02, 0xf4, 0x1b, - 0x16, 0x0c, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0xb8, 0x04, 0x98, 0x04, 0xb8, 0x04, 0xb7, 0x04, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb7, 0x14, 0xb8, 0x14, 0xb7, 0x1c, 0x96, 0x2c, 0xb1, 0x2b, - 0x83, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x83, 0x00, 0xa8, 0x01, 0xf2, 0x3b, 0xd6, 0x4c, 0xf7, 0x4c, - 0xf8, 0x44, 0x18, 0x45, - 0x18, 0x3d, 0x18, 0x3d, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x38, 0x45, - 0x17, 0x55, 0xd1, 0x43, - 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x88, 0x11, - 0xb5, 0x54, 0x38, 0x55, - 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x79, 0x4d, 0x59, 0x4d, 0x58, 0x55, - 0x95, 0x54, 0x88, 0x09, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x83, 0x00, 0xf1, 0x4b, 0x78, 0x75, 0x12, 0x5c, 0xe4, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0xeb, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x03, 0xd4, 0x13, 0xef, 0x12, - 0x63, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xeb, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x0a, - 0x43, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc5, 0x00, - 0x10, 0x13, 0xd4, 0x0b, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x15, 0x04, - 0xd4, 0x13, 0x8e, 0x0a, - 0x84, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x4d, 0x02, 0xf4, 0x1b, 0x36, 0x0c, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, - 0xb8, 0x04, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, - 0xb8, 0x14, 0xb8, 0x1c, - 0xb7, 0x24, 0x76, 0x34, 0x4b, 0x12, 0x62, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x41, 0x00, 0xa4, 0x00, - 0xe9, 0x11, 0xb1, 0x3b, 0x95, 0x4c, 0xf7, 0x4c, 0x17, 0x4d, 0x18, 0x45, - 0x38, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x38, 0x45, 0x17, 0x55, 0x12, 0x44, 0x83, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x83, 0x00, 0x2f, 0x33, 0x37, 0x5d, 0x59, 0x55, 0x79, 0x4d, - 0x79, 0x4d, 0x79, 0x4d, - 0x79, 0x4d, 0x59, 0x55, 0x95, 0x54, 0x88, 0x09, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x8c, 0x2a, - 0x57, 0x6d, 0x99, 0x75, - 0x32, 0x5c, 0xe5, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x22, 0x00, - 0xea, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0xd4, 0x13, 0xef, 0x12, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xeb, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x0a, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x06, 0x01, 0x72, 0x1b, 0xf5, 0x0b, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, 0xb3, 0x1b, 0xeb, 0x01, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x02, 0xf4, 0x1b, - 0x36, 0x0c, 0x36, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x98, 0x04, 0xb7, 0x04, 0xb8, 0x0c, 0xb7, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x14, 0xb8, 0x14, - 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xb7, 0x2c, - 0x13, 0x34, 0x88, 0x01, - 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x00, 0x83, 0x00, - 0x2a, 0x1a, 0x2f, 0x2b, - 0x13, 0x44, 0xf6, 0x54, 0x17, 0x55, 0x17, 0x55, 0x18, 0x4d, 0x17, 0x55, - 0x17, 0x5d, 0x12, 0x4c, - 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0x87, 0x09, 0x94, 0x54, - 0x58, 0x5d, 0x59, 0x55, 0x79, 0x4d, 0x7a, 0x55, 0x79, 0x4d, 0x59, 0x5d, - 0xb6, 0x5c, 0xa9, 0x11, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x87, 0x09, 0xd5, 0x64, 0xb9, 0x6d, 0x99, 0x6d, 0x32, 0x54, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0xea, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x03, 0xd4, 0x13, 0xef, 0x12, - 0x63, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xeb, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x0a, - 0x43, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x47, 0x01, - 0xb3, 0x23, 0xf5, 0x0b, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, - 0x72, 0x1b, 0x68, 0x01, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x4d, 0x02, 0xf4, 0x1b, 0x36, 0x0c, 0x57, 0x04, 0x57, 0x04, 0x57, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x98, 0x04, 0x98, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb7, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd7, 0x24, 0x96, 0x34, 0x70, 0x23, 0xe5, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x83, 0x00, 0x25, 0x01, 0xc8, 0x11, - 0xac, 0x2a, 0x90, 0x43, - 0x33, 0x54, 0xb5, 0x64, 0xd5, 0x6c, 0x32, 0x64, 0x25, 0x11, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x0e, 0x33, 0x58, 0x65, 0x79, 0x55, - 0x79, 0x55, 0x7a, 0x55, - 0x79, 0x55, 0x79, 0x5d, 0xf6, 0x5c, 0x0a, 0x1a, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x63, 0x00, 0x33, 0x54, 0x99, 0x6d, - 0xba, 0x65, 0xb9, 0x6d, - 0x32, 0x5c, 0xe4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xeb, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0xd4, 0x13, 0xef, 0x12, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xea, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0xd4, 0x1b, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x22, 0x00, 0xa9, 0x01, 0xd3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0xd4, 0x0b, 0x30, 0x1b, 0x06, 0x01, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x02, 0x14, 0x1c, - 0x36, 0x0c, 0x57, 0x04, - 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, 0xb8, 0x04, 0x98, 0x04, - 0x98, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb7, 0x14, 0xd8, 0x14, 0xd8, 0x14, - 0xd8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xf8, 0x1c, 0xd8, 0x1c, 0xd8, 0x24, - 0xd7, 0x2c, 0x96, 0x3c, - 0xee, 0x2a, 0x83, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x42, 0x00, 0x62, 0x00, 0xa3, 0x00, 0xa4, 0x00, - 0xa4, 0x00, 0x83, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0xc4, 0x00, - 0xf6, 0x5c, 0x58, 0x5d, 0x79, 0x55, 0x79, 0x55, 0x9a, 0x55, 0x79, 0x5d, - 0x17, 0x65, 0x2b, 0x1a, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x83, 0x00, 0x2e, 0x3b, - 0x99, 0x75, 0xba, 0x65, 0xda, 0x65, 0xb9, 0x6d, 0x53, 0x5c, 0xe4, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xeb, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x03, 0xd4, 0x13, 0xef, 0x12, - 0x63, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xea, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd4, 0x1b, 0x4c, 0x0a, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xca, 0x09, - 0xd4, 0x1b, 0xf5, 0x0b, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf4, 0x13, - 0x10, 0x1b, 0xe5, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x02, 0x14, 0x1c, 0x36, 0x0c, 0x57, 0x04, 0x57, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x98, 0x04, - 0xb7, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, - 0xb8, 0x14, 0xb8, 0x14, - 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xf8, 0x24, 0xf8, 0x24, 0xd8, 0x2c, 0xb7, 0x34, 0xb5, 0x44, 0x4b, 0x12, - 0x63, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x21, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x0e, 0x2b, 0x37, 0x65, - 0x79, 0x5d, 0x99, 0x55, - 0x79, 0x55, 0x79, 0x5d, 0xf7, 0x5c, 0x2b, 0x1a, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x62, 0x00, 0x8c, 0x2a, 0x37, 0x6d, 0xb9, 0x6d, 0xda, 0x65, - 0xda, 0x65, 0xb9, 0x6d, - 0x53, 0x5c, 0xe4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xeb, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0xd4, 0x13, 0xef, 0x12, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xeb, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0xca, 0x09, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, - 0x16, 0x04, 0xf5, 0x13, 0x10, 0x1b, 0xc5, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x14, 0x1c, - 0x36, 0x0c, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0xb8, 0x04, 0x98, 0x04, 0xb8, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xd7, 0x34, 0x54, 0x3c, 0xe9, 0x09, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x46, 0x01, 0x53, 0x54, 0x78, 0x65, 0x79, 0x55, 0x79, 0x55, 0x79, 0x5d, - 0x17, 0x5d, 0x2a, 0x1a, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xc8, 0x11, - 0x16, 0x6d, 0xb9, 0x6d, - 0xba, 0x65, 0xfb, 0x65, 0xda, 0x65, 0xba, 0x6d, 0x53, 0x5c, 0xe4, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xea, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x03, 0xd4, 0x13, 0xef, 0x12, - 0x63, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xeb, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x0a, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0x0f, 0x1b, 0x64, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0xca, 0x09, - 0xb3, 0x1b, 0xf5, 0x0b, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf4, 0x0b, - 0x10, 0x1b, 0xc5, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x02, 0x14, 0x1c, 0x56, 0x0c, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xd8, 0x24, - 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x34, 0xd7, 0x3c, - 0x54, 0x44, 0xe9, 0x09, - 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x8c, 0x2a, - 0x37, 0x65, 0x99, 0x5d, - 0x99, 0x5d, 0x99, 0x5d, 0x58, 0x65, 0xcd, 0x2a, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x42, 0x00, - 0x87, 0x09, 0x37, 0x6d, 0xb9, 0x6d, 0xda, 0x6d, 0xda, 0x65, 0xda, 0x65, - 0xda, 0x65, 0xb9, 0x6d, - 0x53, 0x5c, 0xe4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xea, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd4, 0x13, 0xef, 0x12, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xeb, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x02, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0xa9, 0x09, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x13, 0x10, 0x1b, 0xe6, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x14, 0x1c, - 0x56, 0x0c, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, - 0x98, 0x04, 0xb7, 0x04, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xd8, 0x24, - 0xd8, 0x24, 0xf8, 0x24, 0xd8, 0x24, 0xf8, 0x2c, 0xf8, 0x24, 0xf8, 0x2c, - 0x18, 0x2d, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x34, 0xd7, 0x44, 0x74, 0x44, 0xa8, 0x09, 0x42, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x01, 0x53, 0x54, 0x78, 0x65, 0x99, 0x5d, 0x99, 0x5d, - 0x79, 0x6d, 0xed, 0x2a, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xe8, 0x19, 0xd5, 0x64, 0xb9, 0x6d, - 0xda, 0x6d, 0xda, 0x65, - 0xda, 0x65, 0xfb, 0x65, 0xdb, 0x65, 0xda, 0x75, 0x53, 0x5c, 0xe4, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xea, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd4, 0x13, 0xef, 0x12, - 0x63, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xeb, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x13, 0x4c, 0x02, - 0x43, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x48, 0x01, - 0xb3, 0x1b, 0xf5, 0x0b, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x0b, - 0x51, 0x1b, 0x47, 0x01, - 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x02, 0x14, 0x1c, 0x56, 0x0c, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, - 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x98, 0x04, - 0x97, 0x04, 0xb8, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xd8, 0x14, - 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xf8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, 0x18, 0x35, 0x18, 0x35, - 0x18, 0x3d, 0xf7, 0x44, - 0x34, 0x44, 0x0a, 0x12, 0x63, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0x4b, 0x22, 0x58, 0x6d, - 0x99, 0x5d, 0x99, 0x5d, 0x98, 0x6d, 0xed, 0x2a, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, - 0x4a, 0x22, 0xd5, 0x64, - 0xb9, 0x6d, 0xba, 0x6d, 0xda, 0x65, 0xfa, 0x65, 0xdb, 0x65, 0xdb, 0x65, - 0xfb, 0x65, 0xda, 0x75, - 0x53, 0x5c, 0xe4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xeb, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd4, 0x13, 0xef, 0x12, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xea, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x13, 0x4c, 0x02, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x06, 0x01, 0x72, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, 0x93, 0x1b, 0xaa, 0x01, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x14, 0x1c, - 0x56, 0x0c, 0x77, 0x04, - 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, 0x98, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, - 0x18, 0x2d, 0x18, 0x35, - 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, 0x18, 0x3d, 0xf7, 0x44, 0xb5, 0x4c, - 0x8c, 0x22, 0xa4, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x63, 0x00, 0x74, 0x5c, 0x79, 0x65, 0x99, 0x65, - 0x78, 0x6d, 0xed, 0x2a, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x83, 0x00, 0x6b, 0x2a, 0x78, 0x75, 0xba, 0x6d, 0xda, 0x6d, 0xda, 0x65, - 0xda, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xda, 0x75, 0x53, 0x5c, 0xe4, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xeb, 0x01, 0xd3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd4, 0x13, 0xef, 0x12, - 0x63, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xeb, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x13, 0x4c, 0x02, - 0x63, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc5, 0x00, - 0x0f, 0x13, 0xf4, 0x0b, - 0xf5, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x0b, - 0xd4, 0x13, 0x6d, 0x02, - 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x02, 0x34, 0x1c, 0x76, 0x0c, 0x77, 0x04, 0x77, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x98, 0x04, 0x97, 0x04, 0x98, 0x04, - 0xb8, 0x04, 0x98, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, - 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xd8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0x18, 0x2d, 0x18, 0x2d, 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, - 0x19, 0x3d, 0x19, 0x3d, - 0x18, 0x45, 0xf7, 0x4c, 0xf6, 0x54, 0x0e, 0x2b, 0x06, 0x01, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x4a, 0x22, - 0x57, 0x6d, 0x99, 0x65, 0x99, 0x6d, 0x2f, 0x33, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x25, 0x09, 0x6f, 0x43, 0x57, 0x6d, - 0xba, 0x6d, 0xda, 0x6d, - 0xda, 0x65, 0xdb, 0x65, 0xfa, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfa, 0x65, - 0xfb, 0x6d, 0xda, 0x75, - 0x53, 0x5c, 0xe5, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xea, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd4, 0x13, 0xcf, 0x1a, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xeb, 0x01, 0xd3, 0x1b, 0xf5, 0x0b, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x0a, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x83, 0x00, 0x8e, 0x0a, 0xd4, 0x13, 0x15, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, 0xd5, 0x13, 0x30, 0x13, 0xe6, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x35, 0x1c, - 0x76, 0x0c, 0x77, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x98, 0x04, 0xb8, 0x04, - 0xb8, 0x04, 0x98, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, - 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, 0x18, 0x2d, 0x18, 0x35, - 0x19, 0x35, 0x19, 0x35, - 0x19, 0x35, 0x19, 0x35, 0x19, 0x3d, 0x39, 0x3d, 0x19, 0x3d, 0x18, 0x45, - 0x18, 0x4d, 0xf6, 0x54, - 0xf2, 0x43, 0xa8, 0x09, 0x42, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x00, 0xf2, 0x4b, 0x78, 0x6d, - 0x78, 0x6d, 0x70, 0x43, - 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, - 0x87, 0x11, 0x53, 0x5c, - 0x98, 0x6d, 0xda, 0x6d, 0xda, 0x65, 0xdb, 0x65, 0xda, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x6d, 0xda, 0x75, 0x53, 0x5c, 0xe5, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xea, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd4, 0x13, 0xcf, 0x1a, - 0x63, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xeb, 0x01, 0xd3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x0a, - 0x63, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, - 0x0b, 0x02, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, - 0xf5, 0x0b, 0xb3, 0x1b, - 0xa9, 0x01, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x02, 0x35, 0x1c, 0x76, 0x0c, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, - 0x97, 0x04, 0xb8, 0x04, 0xb8, 0x04, 0xb7, 0x04, 0xb7, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xf8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0x18, 0x35, 0x18, 0x35, - 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, 0x19, 0x3d, 0x19, 0x3d, 0x39, 0x3d, - 0x19, 0x3d, 0x19, 0x3d, - 0x39, 0x45, 0x39, 0x45, 0x38, 0x45, 0x18, 0x4d, 0x17, 0x55, 0xd6, 0x54, - 0xcd, 0x22, 0x06, 0x01, - 0x42, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x09, 0x1a, 0xf6, 0x6c, 0x78, 0x75, 0x90, 0x43, 0x83, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x22, 0x00, - 0x25, 0x01, 0x0e, 0x33, 0x37, 0x6d, 0xb9, 0x75, 0xd9, 0x6d, 0xda, 0x65, - 0xfa, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, - 0xfb, 0x6d, 0xfa, 0x75, - 0x53, 0x5c, 0xe5, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xea, 0x01, 0xb3, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0xd4, 0x13, 0xef, 0x12, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0x0b, 0x02, 0xd4, 0x1b, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x48, 0x01, 0x51, 0x1b, 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x0b, 0x30, 0x1b, 0xa5, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x35, 0x1c, - 0x76, 0x0c, 0x97, 0x04, - 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0x97, 0x04, 0xb8, 0x04, 0x97, 0x04, - 0xb7, 0x04, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb7, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, - 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xf8, 0x1c, 0xf8, 0x1c, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x18, 0x2d, - 0x18, 0x2d, 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, - 0x19, 0x3d, 0x19, 0x3d, - 0x19, 0x3d, 0x19, 0x3d, 0x39, 0x3d, 0x19, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x4d, 0x18, 0x4d, 0x17, 0x5d, 0x33, 0x4c, 0x4b, 0x22, 0xa4, 0x00, - 0x21, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x83, 0x00, 0xd1, 0x53, - 0x78, 0x75, 0x90, 0x3b, - 0x83, 0x00, 0x21, 0x00, 0xa4, 0x00, 0x2a, 0x22, 0x74, 0x5c, 0xb9, 0x75, - 0xba, 0x6d, 0xda, 0x65, - 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0x1b, 0x66, - 0xfb, 0x6d, 0xfb, 0x6d, 0x1b, 0x6e, 0xfa, 0x75, 0x53, 0x5c, 0xe5, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xea, 0x01, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x03, 0xd4, 0x13, 0xef, 0x12, - 0x84, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x4d, 0x02, 0xd4, 0x13, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x0a, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0xa4, 0x00, 0xce, 0x1a, - 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xb3, 0x1b, 0x0b, 0x02, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x02, 0x34, 0x1c, 0x76, 0x0c, 0x97, 0x04, 0x97, 0x04, 0x98, 0x04, - 0x98, 0x04, 0xb8, 0x04, - 0xb8, 0x04, 0xb7, 0x04, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb7, 0x0c, - 0xd8, 0x14, 0xb8, 0x14, - 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xf8, 0x1c, - 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, - 0x19, 0x35, 0x19, 0x35, - 0x19, 0x3d, 0x19, 0x3d, 0x19, 0x3d, 0x19, 0x3d, 0x39, 0x3d, 0x39, 0x3d, - 0x39, 0x3d, 0x39, 0x3d, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x38, 0x4d, - 0x38, 0x55, 0x38, 0x55, - 0xd6, 0x5c, 0xb1, 0x3b, 0x0a, 0x12, 0x83, 0x00, 0x21, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x87, 0x11, 0x57, 0x7d, 0x90, 0x3b, 0xc5, 0x00, 0x2a, 0x1a, - 0x12, 0x54, 0x57, 0x6d, - 0xb9, 0x6d, 0xda, 0x6d, 0xda, 0x65, 0xfa, 0x65, 0xfa, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x6d, 0xfb, 0x6d, 0xfb, 0x6d, 0x1b, 0x6e, - 0x1b, 0x6e, 0xfa, 0x75, - 0x53, 0x5c, 0xe5, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0x00, - 0xca, 0x01, 0xb3, 0x23, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, - 0xf4, 0x0b, 0x10, 0x13, 0xc5, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x43, 0x00, - 0xcf, 0x0a, 0xf4, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xc9, 0x09, 0xd4, 0x1b, 0xf5, 0x0b, - 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd5, 0x0b, 0x51, 0x13, - 0x68, 0x01, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x22, 0x00, 0x42, 0x00, 0x42, 0x00, 0x22, 0x00, 0x21, 0x00, 0x22, 0x00, - 0x22, 0x00, 0x22, 0x00, - 0x42, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x55, 0x1c, - 0x76, 0x0c, 0x97, 0x04, - 0x98, 0x04, 0x98, 0x04, 0xb8, 0x04, 0xb8, 0x04, 0xb8, 0x0c, 0xd8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xf8, 0x1c, 0xd8, 0x1c, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0x18, 0x2d, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, 0xf8, 0x2c, - 0x18, 0x35, 0x18, 0x35, - 0x18, 0x35, 0x19, 0x35, 0x39, 0x3d, 0x19, 0x3d, 0x19, 0x3d, 0x19, 0x3d, - 0x19, 0x3d, 0x39, 0x3d, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x59, 0x45, 0x59, 0x4d, 0x39, 0x4d, 0x59, 0x4d, 0x58, 0x55, 0x38, 0x5d, - 0x17, 0x65, 0x33, 0x54, - 0x4b, 0x22, 0x05, 0x01, 0x83, 0x00, 0x21, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, - 0xb0, 0x4b, 0xf6, 0x64, - 0xd5, 0x5c, 0x98, 0x75, 0xb9, 0x6d, 0xda, 0x6d, 0xda, 0x65, 0xfa, 0x65, - 0xfb, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0x1b, 0x6e, 0x1b, 0x66, - 0xfb, 0x65, 0xfb, 0x6d, - 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0xfa, 0x75, 0x53, 0x5c, 0xe5, 0x00, - 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x68, 0x01, 0xb3, 0x23, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0x51, 0x13, - 0x26, 0x01, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x64, 0x00, 0x72, 0x1b, 0xf5, 0x0b, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x0a, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x84, 0x00, - 0x72, 0x23, 0xf5, 0x13, 0xf5, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0xd4, 0x13, 0x10, 0x1b, 0x27, 0x01, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x83, 0x00, 0x67, 0x01, 0x89, 0x01, 0xa9, 0x01, - 0xa9, 0x01, 0xa9, 0x01, - 0xa9, 0x01, 0xa9, 0x01, 0xa9, 0x01, 0x89, 0x01, 0x88, 0x09, 0x26, 0x09, - 0x42, 0x00, 0x00, 0x00, - 0x8d, 0x02, 0x35, 0x1c, 0x76, 0x0c, 0xb8, 0x04, 0xb8, 0x04, 0xb8, 0x04, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, 0xb8, 0x14, - 0xd8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x3d, - 0x19, 0x3d, 0x19, 0x3d, - 0x19, 0x3d, 0x39, 0x3d, 0x19, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x59, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x59, 0x45, 0x59, 0x45, 0x59, 0x45, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x55, 0x59, 0x55, 0x58, 0x55, 0x58, 0x5d, 0x37, 0x65, 0x94, 0x54, - 0x4f, 0x3b, 0x0a, 0x1a, - 0x25, 0x01, 0x62, 0x00, 0x21, 0x00, 0x21, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0xc9, 0x11, 0x37, 0x6d, 0xb9, 0x6d, 0xda, 0x6d, - 0xda, 0x6d, 0xfa, 0x65, - 0xfa, 0x65, 0xfa, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x6d, - 0xfb, 0x6d, 0xfb, 0x6d, - 0x1b, 0x66, 0x1b, 0x66, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0xfa, 0x75, - 0x73, 0x5c, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x22, 0x00, - 0x68, 0x01, 0x92, 0x23, 0xd5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf5, 0x03, 0x92, 0x13, 0xa9, 0x01, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x06, 0x01, - 0xb3, 0x1b, 0xf5, 0x0b, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x2b, 0x02, 0xb3, 0x1b, - 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x0b, - 0xd4, 0x13, 0xef, 0x12, - 0xc5, 0x00, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0xa5, 0x00, - 0x4c, 0x0a, 0x72, 0x1b, - 0xd3, 0x1b, 0xd4, 0x13, 0xd3, 0x13, 0xd3, 0x13, 0xd4, 0x13, 0xd4, 0x1b, - 0xd4, 0x1b, 0xb3, 0x23, - 0x91, 0x2b, 0x4c, 0x1a, 0x62, 0x00, 0x00, 0x00, 0x8d, 0x02, 0x55, 0x24, - 0x76, 0x0c, 0xb7, 0x04, - 0xb8, 0x0c, 0xb7, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, 0xd8, 0x14, - 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xf8, 0x1c, - 0xf8, 0x1c, 0xd8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x18, 0x2d, 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, - 0x19, 0x35, 0x19, 0x35, - 0x19, 0x3d, 0x19, 0x3d, 0x19, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x59, 0x45, 0x59, 0x45, - 0x59, 0x4d, 0x59, 0x45, - 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x79, 0x4d, 0x79, 0x55, - 0x79, 0x4d, 0x79, 0x55, - 0x59, 0x55, 0x38, 0x5d, 0x58, 0x65, 0xf6, 0x64, 0x53, 0x54, 0xd1, 0x4b, - 0x6b, 0x2a, 0x67, 0x09, - 0xa3, 0x00, 0x62, 0x00, 0x42, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0x88, 0x11, 0x37, 0x75, - 0xba, 0x6d, 0xfb, 0x65, 0xda, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x6d, 0xfb, 0x6d, 0xfb, 0x6d, 0x1b, 0x66, 0x1b, 0x66, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0xfa, 0x75, 0x73, 0x5c, 0xe4, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x47, 0x01, 0x92, 0x23, - 0xf4, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0xd4, 0x13, - 0x6d, 0x0a, 0x84, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, 0x2c, 0x0a, 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x03, 0xd3, 0x1b, 0x4c, 0x0a, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x06, 0x01, 0x0f, 0x1b, 0xd4, 0x13, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd4, 0x13, 0xce, 0x12, 0x27, 0x01, - 0x43, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x42, 0x00, - 0xa5, 0x00, 0x8d, 0x12, 0x92, 0x1b, 0xd4, 0x13, 0xf5, 0x0b, 0x15, 0x04, - 0x15, 0x04, 0xf5, 0x03, - 0xf6, 0x03, 0x15, 0x04, 0xf5, 0x0b, 0xd4, 0x13, 0xb2, 0x2b, 0x47, 0x01, - 0x21, 0x00, 0x00, 0x00, - 0x8e, 0x02, 0x55, 0x24, 0x76, 0x14, 0xb7, 0x0c, 0xb8, 0x0c, 0xb8, 0x0c, - 0xb8, 0x0c, 0xb8, 0x0c, - 0xd8, 0x14, 0xd8, 0x14, 0xb8, 0x14, 0xd8, 0x1c, 0xb8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x34, - 0x18, 0x35, 0x18, 0x35, - 0x19, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x3d, 0x19, 0x3d, 0x39, 0x3d, - 0x39, 0x3d, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x59, 0x45, - 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, - 0x79, 0x4d, 0x79, 0x4d, 0x79, 0x55, 0x79, 0x55, 0x79, 0x55, 0x79, 0x55, - 0x79, 0x5d, 0x79, 0x5d, - 0x78, 0x5d, 0x78, 0x65, 0x58, 0x65, 0x37, 0x6d, 0x37, 0x6d, 0x94, 0x5c, - 0xb1, 0x43, 0x4f, 0x3b, - 0x8c, 0x22, 0x6b, 0x22, 0x2a, 0x22, 0x83, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0xa8, 0x11, 0xb9, 0x7d, 0xda, 0x6d, 0xda, 0x65, - 0xfb, 0x65, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x6d, 0x1b, 0x6e, 0xfb, 0x6d, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1a, 0x76, - 0x73, 0x5c, 0xe4, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, - 0x06, 0x01, 0x30, 0x1b, 0xf4, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, 0x92, 0x1b, 0xaa, 0x01, 0x43, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, - 0x48, 0x01, 0x51, 0x1b, - 0xd5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x22, 0x00, 0x89, 0x01, - 0x92, 0x1b, 0xf5, 0x0b, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0xf5, 0x0b, - 0xd4, 0x13, 0x51, 0x1b, 0xca, 0x01, 0xa4, 0x00, 0x42, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x22, 0x00, 0x84, 0x00, 0x68, 0x01, 0x10, 0x13, 0xb3, 0x13, - 0xd5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0xf5, 0x0b, 0xd3, 0x1b, - 0x6c, 0x12, 0x62, 0x00, 0x21, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x55, 0x24, - 0x97, 0x14, 0xb7, 0x0c, - 0xb8, 0x0c, 0xb8, 0x14, 0xb7, 0x14, 0xd8, 0x14, 0xd8, 0x14, 0xd8, 0x14, - 0xd8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x18, 0x35, - 0xf8, 0x34, 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, 0x19, 0x3d, 0x19, 0x3d, - 0x19, 0x3d, 0x19, 0x3d, - 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x59, 0x45, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, - 0x79, 0x4d, 0x79, 0x4d, 0x59, 0x4d, 0x79, 0x4d, 0x7a, 0x55, 0x7a, 0x55, - 0x79, 0x55, 0x79, 0x55, - 0x79, 0x55, 0x7a, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x99, 0x55, - 0x99, 0x5d, 0x99, 0x5d, - 0x79, 0x65, 0x79, 0x65, 0x79, 0x65, 0x79, 0x65, 0x99, 0x6d, 0x78, 0x75, - 0x57, 0x7d, 0x8b, 0x2a, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0xa8, 0x11, 0x98, 0x7d, - 0xda, 0x6d, 0xfa, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, 0xfb, 0x65, - 0x1b, 0x66, 0x1b, 0x66, - 0xfb, 0x65, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, 0x3b, 0x6e, 0x1a, 0x76, 0x73, 0x5c, 0xe4, 0x00, - 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0xa5, 0x00, 0xce, 0x12, - 0xf4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x03, - 0xd4, 0x13, 0x31, 0x13, - 0x27, 0x01, 0x43, 0x00, 0x22, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x21, 0x00, - 0x42, 0x00, 0x06, 0x01, 0xef, 0x12, 0xd4, 0x13, 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x0a, - 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x84, 0x00, 0x4d, 0x0a, 0xb4, 0x1b, 0xf5, 0x0b, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0x15, 0x04, 0xd4, 0x13, - 0xb3, 0x1b, 0x8d, 0x0a, - 0x68, 0x01, 0x84, 0x00, 0x42, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x42, 0x00, 0x63, 0x00, 0x27, 0x01, - 0x6d, 0x12, 0x72, 0x1b, - 0xd4, 0x13, 0xf5, 0x0b, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, 0xd4, 0x13, 0x30, 0x13, 0x06, 0x01, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x02, 0x55, 0x2c, 0x97, 0x1c, 0xb8, 0x14, 0xb7, 0x14, 0xb8, 0x14, - 0xb8, 0x14, 0xd8, 0x14, - 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xf8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x18, 0x2d, 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, - 0x19, 0x3d, 0x18, 0x3d, - 0x19, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x38, 0x3d, 0x39, 0x3d, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x59, 0x45, 0x59, 0x45, 0x59, 0x45, - 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x79, 0x4d, 0x79, 0x4d, 0x79, 0x4d, - 0x79, 0x55, 0x79, 0x55, - 0x79, 0x55, 0x7a, 0x55, 0x79, 0x55, 0x9a, 0x55, 0x79, 0x55, 0x7a, 0x55, - 0x9a, 0x55, 0x9a, 0x55, - 0x9a, 0x55, 0x9a, 0x55, 0xba, 0x5d, 0x9a, 0x5d, 0xba, 0x5d, 0x9a, 0x5d, - 0x9a, 0x5d, 0x9a, 0x65, - 0x9a, 0x5d, 0x9a, 0x65, 0x99, 0x6d, 0x74, 0x5c, 0xe5, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0xa8, 0x11, 0x99, 0x7d, 0xda, 0x6d, 0xfb, 0x65, - 0xfb, 0x65, 0xfb, 0x6d, - 0x1b, 0x66, 0xfa, 0x65, 0xfb, 0x6d, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x3b, 0x6e, 0x1b, 0x6e, - 0x3b, 0x6e, 0x1a, 0x7e, - 0x73, 0x5c, 0xe4, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0xf5, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x0b, 0xd4, 0x13, 0x30, 0x13, 0x0b, 0x02, - 0xc5, 0x00, 0x63, 0x00, - 0x42, 0x00, 0x42, 0x00, 0x63, 0x00, 0x84, 0x00, 0x68, 0x01, 0x10, 0x13, - 0xd4, 0x13, 0xf5, 0x0b, - 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0xc5, 0x00, 0x30, 0x23, - 0xd4, 0x13, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x03, 0xf5, 0x0b, 0xd4, 0x13, 0x72, 0x13, 0xcf, 0x12, - 0xca, 0x01, 0x07, 0x01, - 0x84, 0x00, 0x84, 0x00, 0x63, 0x00, 0x63, 0x00, 0x64, 0x00, 0x84, 0x00, - 0x06, 0x01, 0xea, 0x01, - 0xae, 0x0a, 0x51, 0x13, 0xd4, 0x13, 0xf4, 0x0b, 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf4, 0x0b, - 0x71, 0x1b, 0xa9, 0x01, - 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x55, 0x2c, - 0x97, 0x1c, 0xb7, 0x14, - 0xb7, 0x14, 0xd8, 0x14, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xf8, 0x1c, - 0xf8, 0x1c, 0xf8, 0x1c, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, 0x18, 0x35, 0x19, 0x35, - 0x19, 0x35, 0x19, 0x35, - 0x19, 0x35, 0x19, 0x3d, 0x19, 0x3d, 0x19, 0x3d, 0x39, 0x3d, 0x39, 0x3d, - 0x39, 0x3d, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x59, 0x45, - 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, - 0x79, 0x4d, 0x79, 0x4d, - 0x79, 0x4d, 0x79, 0x55, 0x79, 0x55, 0x79, 0x55, 0x7a, 0x55, 0x7a, 0x55, - 0x79, 0x55, 0x99, 0x55, - 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x5d, 0x9a, 0x5d, - 0x9a, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x65, - 0xb9, 0x65, 0x78, 0x6d, - 0x0e, 0x3b, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0xa8, 0x11, 0x98, 0x7d, - 0xda, 0x6d, 0xfb, 0x65, 0xfb, 0x6d, 0xfb, 0x6d, 0x1b, 0x66, 0xfa, 0x65, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x1a, 0x7e, 0x73, 0x5c, 0xe4, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x47, 0x01, - 0x72, 0x13, 0xf5, 0x0b, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd4, 0x13, 0xd3, 0x1b, 0x51, 0x23, 0x8d, 0x12, 0x0b, 0x0a, 0xea, 0x01, - 0x6c, 0x12, 0x0f, 0x1b, - 0xb3, 0x1b, 0xd4, 0x13, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x02, - 0x43, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x27, 0x01, 0x10, 0x1b, 0xd4, 0x13, - 0x15, 0x0c, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf5, 0x0b, 0xd4, 0x13, 0xb3, 0x1b, 0x92, 0x23, 0x50, 0x23, 0xef, 0x1a, - 0xae, 0x12, 0xce, 0x1a, - 0xef, 0x1a, 0x50, 0x23, 0x92, 0x23, 0xb3, 0x1b, 0xd4, 0x13, 0xf5, 0x0b, - 0xf5, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf5, 0x0b, 0xb2, 0x1b, 0x0b, 0x0a, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xca, 0x01, 0x54, 0x34, 0x96, 0x24, 0xd7, 0x14, 0xd8, 0x14, 0xd8, 0x1c, - 0xd8, 0x1c, 0xf8, 0x1c, - 0xf8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xf8, 0x1c, 0xd8, 0x24, 0xf8, 0x24, - 0xf9, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x19, 0x35, - 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x3d, 0x19, 0x3d, 0x19, 0x3d, - 0x19, 0x3d, 0x19, 0x3d, - 0x39, 0x3d, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x79, 0x4d, - 0x7a, 0x4d, 0x59, 0x4d, 0x79, 0x4d, 0x79, 0x4d, 0x79, 0x55, 0x79, 0x55, - 0x79, 0x55, 0x7a, 0x55, - 0x7a, 0x55, 0x9a, 0x55, 0x99, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x99, 0x55, - 0x9a, 0x5d, 0x9a, 0x5d, - 0x9a, 0x5d, 0x9a, 0x5d, 0x9a, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x65, 0xba, 0x5d, 0x99, 0x6d, 0xb5, 0x64, 0x47, 0x09, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0xa8, 0x11, 0xb9, 0x7d, 0xda, 0x6d, 0xfb, 0x6d, - 0xfb, 0x6d, 0xfb, 0x6d, - 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, - 0x3b, 0x6e, 0x1a, 0x7e, - 0xd0, 0x53, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x83, 0x00, 0xae, 0x12, 0xb4, 0x13, 0xf5, 0x0b, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, - 0xf5, 0x13, 0xd4, 0x13, - 0xd4, 0x13, 0xd4, 0x13, 0xd4, 0x13, 0xf4, 0x13, 0xf5, 0x0b, 0x15, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x13, 0x4c, 0x02, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x0a, 0xd4, 0x13, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x42, 0x00, - 0x68, 0x01, 0x51, 0x1b, 0xd4, 0x13, 0xf5, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x03, - 0xf5, 0x0b, 0xf5, 0x0b, - 0xd4, 0x13, 0xd4, 0x13, 0xd4, 0x13, 0xd4, 0x13, 0xd4, 0x13, 0xd4, 0x13, - 0xd5, 0x0b, 0xf5, 0x0b, - 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x0b, 0x92, 0x1b, 0x4c, 0x0a, - 0x63, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x01, 0xd2, 0x33, - 0x96, 0x24, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, 0xf8, 0x1c, 0xd8, 0x24, - 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf9, 0x2c, 0xf9, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0x18, 0x2d, 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x35, - 0x19, 0x3d, 0x39, 0x3d, - 0x19, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x59, 0x45, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x79, 0x4d, 0x79, 0x4d, 0x79, 0x4d, - 0x79, 0x55, 0x79, 0x55, - 0x79, 0x55, 0x7a, 0x55, 0x9a, 0x55, 0x7a, 0x55, 0x9a, 0x55, 0x9a, 0x55, - 0x9a, 0x55, 0x9a, 0x55, - 0x9a, 0x55, 0xba, 0x5d, 0x9a, 0x5d, 0x9a, 0x5d, 0xba, 0x5d, 0xba, 0x5d, - 0x9a, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x65, 0xba, 0x5d, - 0xda, 0x65, 0xba, 0x65, - 0x98, 0x75, 0x0e, 0x33, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0x0a, 0x1a, 0xb9, 0x7d, - 0xfa, 0x75, 0xfb, 0x6d, 0xfb, 0x6d, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x76, 0xf9, 0x7d, 0x0d, 0x3b, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, - 0x47, 0x01, 0x92, 0x23, - 0xf4, 0x13, 0x15, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, - 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x02, - 0x43, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x0a, - 0xd4, 0x13, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xd4, 0x13, - 0xef, 0x1a, 0x64, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x63, 0x00, 0x68, 0x01, - 0x71, 0x1b, 0xf4, 0x13, - 0xf5, 0x0b, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, - 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x15, 0x04, - 0xf4, 0x0b, 0x93, 0x1b, - 0x4c, 0x0a, 0xa4, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xc5, 0x00, 0xee, 0x22, 0x96, 0x2c, 0xd7, 0x1c, 0xd8, 0x1c, 0xd8, 0x1c, - 0xd8, 0x1c, 0xd8, 0x24, - 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, - 0x19, 0x35, 0x19, 0x35, - 0x19, 0x35, 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x19, 0x3d, 0x39, 0x3d, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x59, 0x45, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x79, 0x4d, - 0x79, 0x4d, 0x79, 0x55, - 0x79, 0x4d, 0x79, 0x4d, 0x7a, 0x55, 0x7a, 0x55, 0x7a, 0x55, 0x9a, 0x55, - 0x9a, 0x55, 0x9a, 0x55, - 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x5d, 0x9a, 0x55, 0x9a, 0x5d, 0x9a, 0x5d, - 0x9a, 0x5d, 0x9a, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x65, - 0xba, 0x5d, 0xda, 0x5d, 0xda, 0x65, 0xda, 0x65, 0xb9, 0x6d, 0x57, 0x75, - 0x26, 0x09, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0xac, 0x2a, 0xd9, 0x7d, 0xfa, 0x6d, 0xfb, 0x6d, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x3b, 0x6e, - 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, - 0x1b, 0x76, 0x77, 0x75, - 0xc8, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0xca, 0x09, 0x92, 0x1b, 0xd4, 0x0b, - 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x0a, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x42, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, - 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x0b, 0xef, 0x1a, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x42, 0x00, 0x27, 0x01, 0xcf, 0x1a, 0xb3, 0x1b, 0xf5, 0x0b, - 0xf5, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0xf5, 0x0b, 0xd4, 0x13, 0x71, 0x1b, 0xca, 0x01, 0x84, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xe9, 0x09, - 0x34, 0x34, 0xb7, 0x24, - 0xd8, 0x24, 0xd8, 0x1c, 0xd8, 0x24, 0xd8, 0x24, 0xf8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, 0x18, 0x35, - 0x18, 0x35, 0x18, 0x35, - 0x18, 0x35, 0x19, 0x35, 0x18, 0x35, 0x19, 0x3d, 0x39, 0x3d, 0x19, 0x3d, - 0x39, 0x3d, 0x39, 0x3d, - 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x45, 0x39, 0x45, 0x59, 0x45, 0x59, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x59, 0x45, 0x59, 0x45, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, - 0x79, 0x4d, 0x59, 0x4d, - 0x79, 0x4d, 0x79, 0x4d, 0x79, 0x4d, 0x79, 0x55, 0x79, 0x4d, 0x79, 0x55, - 0x7a, 0x55, 0x7a, 0x55, - 0x7a, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x55, - 0x9a, 0x55, 0x9a, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0x9a, 0x5d, 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xda, 0x65, 0xda, 0x5d, 0xda, 0x65, - 0xda, 0x65, 0xda, 0x65, - 0xda, 0x65, 0xb9, 0x75, 0x90, 0x4b, 0x63, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0xac, 0x22, 0xd9, 0x7d, - 0xfa, 0x6d, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, - 0x3b, 0x6e, 0x3b, 0x6e, - 0x3b, 0x6e, 0x3b, 0x76, 0x1a, 0x7e, 0x32, 0x54, 0x83, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x84, 0x00, - 0x2c, 0x0a, 0x92, 0x1b, 0xf5, 0x13, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xb4, 0x0b, 0xb4, 0x0b, - 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd3, 0x1b, 0x4c, 0x0a, - 0x63, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xd4, 0x13, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf4, 0x13, - 0xef, 0x1a, 0x63, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x22, 0x00, 0xe6, 0x00, - 0x4c, 0x0a, 0xb3, 0x1b, 0xd4, 0x13, 0xf5, 0x0b, 0xf5, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0xf6, 0x03, 0xf6, 0x03, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf6, 0x03, 0xf5, 0x0b, 0xd4, 0x13, 0xd3, 0x1b, 0x0f, 0x13, - 0x88, 0x01, 0x43, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0xa4, 0x00, 0x70, 0x2b, 0x96, 0x34, 0xb7, 0x24, 0xd8, 0x24, - 0xd8, 0x24, 0xf8, 0x24, - 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x24, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x18, 0x35, - 0x18, 0x35, 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x3d, - 0x19, 0x3d, 0x19, 0x3d, - 0x19, 0x3d, 0x38, 0x3d, 0x39, 0x3d, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x79, 0x4d, 0x79, 0x4d, 0x79, 0x4d, 0x79, 0x55, 0x79, 0x55, - 0x79, 0x55, 0x79, 0x55, - 0x7a, 0x55, 0x7a, 0x55, 0x7a, 0x55, 0x7a, 0x55, 0x7a, 0x55, 0x9a, 0x55, - 0x9a, 0x55, 0x9a, 0x55, - 0x9a, 0x5d, 0x9a, 0x55, 0x9a, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xda, 0x5d, 0xdb, 0x5d, - 0xda, 0x65, 0xda, 0x65, - 0xda, 0x65, 0xda, 0x65, 0xdb, 0x65, 0xdb, 0x65, 0xda, 0x65, 0xda, 0x6d, - 0xf6, 0x64, 0xa8, 0x09, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0xac, 0x2a, 0xd9, 0x7d, 0xfa, 0x6d, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, 0x3b, 0x6e, 0x1b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, - 0x3b, 0x6e, 0x3b, 0x6e, - 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x3c, 0x6e, 0x3b, 0x76, 0x3b, 0x7e, - 0xfa, 0x85, 0xa8, 0x11, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0xa4, 0x00, 0x2b, 0x12, - 0xb3, 0x23, 0xd4, 0x13, - 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0xf5, 0x0b, 0xd4, 0x13, - 0x8e, 0x02, 0xcf, 0x02, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xf5, 0x0b, - 0xd3, 0x1b, 0x4c, 0x0a, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x43, 0x00, 0x2b, 0x12, 0xd4, 0x13, 0xf5, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0xd4, 0x13, 0xef, 0x1a, 0x63, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x22, 0x00, 0x84, 0x00, 0xc9, 0x01, - 0x30, 0x1b, 0xb3, 0x1b, - 0xd4, 0x13, 0xf5, 0x0b, 0x16, 0x04, 0x16, 0x04, 0xf6, 0x03, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0xf5, 0x0b, 0xd5, 0x0b, - 0xd4, 0x1b, 0x92, 0x23, - 0x2b, 0x0a, 0xe6, 0x00, 0x42, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, - 0x06, 0x01, 0x13, 0x3c, - 0x96, 0x34, 0xd8, 0x2c, 0xf8, 0x2c, 0xf8, 0x24, 0x18, 0x2d, 0xf8, 0x2c, - 0xf8, 0x2c, 0xf8, 0x2c, - 0x18, 0x2d, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, - 0x19, 0x35, 0x19, 0x35, - 0x19, 0x3d, 0x19, 0x3d, 0x19, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x3d, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x59, 0x45, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x79, 0x4d, 0x79, 0x4d, 0x79, 0x4d, - 0x79, 0x4d, 0x79, 0x4d, - 0x7a, 0x55, 0x7a, 0x55, 0x79, 0x55, 0x7a, 0x55, 0x7a, 0x55, 0x9a, 0x55, - 0x9a, 0x55, 0x9a, 0x55, - 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x5d, 0x9a, 0x5d, 0x9a, 0x5d, 0x9a, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, - 0xdb, 0x5d, 0xda, 0x5d, 0xda, 0x65, 0xda, 0x65, 0xda, 0x65, 0xda, 0x65, - 0xdb, 0x65, 0xdb, 0x65, - 0xda, 0x65, 0xda, 0x6d, 0xd9, 0x75, 0xd0, 0x43, 0xa3, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0xac, 0x2a, 0xf9, 0x7d, - 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x3c, 0x6e, - 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x3c, 0x6e, 0x3c, 0x6e, - 0x3c, 0x76, 0x3b, 0x76, - 0x1b, 0x76, 0xd9, 0x7d, 0x4e, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x63, 0x00, 0x89, 0x01, 0x10, 0x1b, 0xb3, 0x13, 0xd4, 0x13, - 0xf5, 0x0b, 0xf5, 0x0b, - 0xf5, 0x03, 0x16, 0x04, 0xf6, 0x03, 0xf6, 0x03, 0xf5, 0x03, 0x16, 0x04, - 0x15, 0x04, 0x15, 0x04, - 0xf5, 0x0b, 0xf4, 0x13, 0x93, 0x1b, 0xae, 0x0a, 0xe7, 0x00, 0x6d, 0x0a, - 0xb3, 0x1b, 0xf4, 0x0b, - 0xf4, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, 0xd4, 0x13, 0xb2, 0x23, 0x2b, 0x0a, - 0x43, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x2b, 0x12, - 0xb3, 0x23, 0xf4, 0x13, - 0xf5, 0x13, 0xf5, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, 0xf5, 0x13, 0xd3, 0x1b, - 0xee, 0x22, 0x63, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x42, 0x00, 0xc5, 0x00, 0x0b, 0x02, 0x30, 0x13, 0xb3, 0x13, - 0xd4, 0x13, 0xf5, 0x0b, - 0xf5, 0x0b, 0x16, 0x0c, 0xf6, 0x03, 0xf6, 0x03, 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, - 0x16, 0x04, 0x16, 0x04, 0x16, 0x04, 0x15, 0x04, 0x15, 0x04, 0xf5, 0x0b, - 0xf5, 0x0b, 0xd4, 0x13, - 0xb3, 0x13, 0x51, 0x13, 0x6d, 0x0a, 0x27, 0x01, 0x43, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0xa8, 0x09, 0x13, 0x3c, 0xb7, 0x3c, - 0xd8, 0x2c, 0xf8, 0x2c, - 0xf8, 0x2c, 0x18, 0x2d, 0xf8, 0x2c, 0xf8, 0x2c, 0xf8, 0x2c, 0x18, 0x2d, - 0x18, 0x35, 0x18, 0x35, - 0x18, 0x35, 0x19, 0x35, 0x19, 0x3d, 0x39, 0x3d, 0x39, 0x3d, 0x39, 0x3d, - 0x19, 0x3d, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x59, 0x45, - 0x59, 0x45, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, - 0x79, 0x4d, 0x79, 0x4d, 0x79, 0x55, 0x79, 0x55, 0x79, 0x55, 0x79, 0x55, - 0x79, 0x55, 0x9a, 0x55, - 0x79, 0x55, 0x99, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x5d, - 0x9a, 0x5d, 0x9a, 0x5d, - 0xba, 0x5d, 0x9a, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x65, 0xba, 0x5d, 0xda, 0x5d, 0xda, 0x5d, 0xda, 0x5d, - 0xda, 0x65, 0xda, 0x65, - 0xda, 0x65, 0xda, 0x65, 0xdb, 0x65, 0xfb, 0x65, 0xda, 0x65, 0xfa, 0x65, - 0xda, 0x6d, 0x77, 0x75, - 0xe9, 0x19, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x41, 0x00, 0xac, 0x2a, 0xda, 0x7d, 0x1b, 0x6e, 0x1b, 0x6e, - 0x1b, 0x6e, 0x1b, 0x6e, - 0x3b, 0x6e, 0x3b, 0x6e, 0x1b, 0x6e, 0x3c, 0x6e, 0x3b, 0x6e, 0x3c, 0x6e, - 0x3c, 0x6e, 0x3c, 0x6e, - 0x3c, 0x6e, 0x3c, 0x6e, 0x3b, 0x76, 0x3b, 0x7e, 0xd9, 0x7d, 0xd0, 0x4b, - 0xc4, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0xe6, 0x00, - 0x2b, 0x0a, 0x30, 0x1b, 0xb3, 0x1b, 0xd4, 0x13, 0xf5, 0x13, 0xf5, 0x0b, - 0xf5, 0x0b, 0xf5, 0x0b, - 0xf5, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, 0xf4, 0x13, 0xd3, 0x1b, 0x30, 0x1b, - 0xea, 0x09, 0xa5, 0x00, - 0x84, 0x00, 0x0a, 0x12, 0x30, 0x23, 0x30, 0x1b, 0x51, 0x1b, 0x51, 0x1b, - 0x51, 0x1b, 0x30, 0x1b, - 0x2f, 0x2b, 0xe9, 0x11, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x00, 0xc9, 0x19, 0x2f, 0x23, 0x30, 0x1b, 0x31, 0x1b, 0x31, 0x1b, - 0x51, 0x1b, 0x51, 0x1b, - 0x51, 0x1b, 0x30, 0x23, 0x6c, 0x22, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x42, 0x00, - 0xe6, 0x00, 0xea, 0x09, 0xae, 0x12, 0x72, 0x1b, 0xd3, 0x1b, 0xd4, 0x13, - 0xf4, 0x13, 0xf5, 0x0b, - 0xf5, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, 0xf5, 0x0b, - 0xf5, 0x0b, 0xf5, 0x0b, - 0xd4, 0x13, 0xb3, 0x13, 0x92, 0x1b, 0xef, 0x1a, 0x2b, 0x0a, 0x06, 0x01, - 0x63, 0x00, 0x21, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x62, 0x00, - 0xa9, 0x09, 0x13, 0x3c, 0xb7, 0x44, 0xd7, 0x3c, 0xf8, 0x34, 0xf8, 0x34, - 0xf8, 0x34, 0xf8, 0x34, - 0x18, 0x35, 0x18, 0x35, 0x19, 0x35, 0x19, 0x35, 0x19, 0x3d, 0x39, 0x3d, - 0x19, 0x3d, 0x18, 0x3d, - 0x38, 0x3d, 0x39, 0x45, 0x39, 0x45, 0x39, 0x45, 0x38, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x39, 0x45, - 0x39, 0x45, 0x59, 0x45, 0x39, 0x45, 0x59, 0x45, 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x79, 0x4d, 0x79, 0x55, 0x79, 0x55, 0x79, 0x4d, 0x79, 0x55, - 0x79, 0x55, 0x79, 0x55, - 0x7a, 0x55, 0x99, 0x55, 0x7a, 0x55, 0x9a, 0x55, 0x9a, 0x55, 0x9a, 0x55, - 0x9a, 0x5d, 0x9a, 0x5d, - 0x9a, 0x5d, 0x9a, 0x5d, 0x9a, 0x5d, 0x9a, 0x5d, 0x9a, 0x5d, 0x9a, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, - 0xba, 0x5d, 0xba, 0x5d, 0xba, 0x65, 0xba, 0x65, 0xba, 0x65, 0xda, 0x65, - 0xda, 0x65, 0xda, 0x65, - 0xda, 0x65, 0xda, 0x65, 0xda, 0x65, 0xda, 0x65, 0xda, 0x65, 0xda, 0x65, - 0xdb, 0x65, 0xdb, 0x65, - 0xfb, 0x65, 0xfa, 0x65, 0xfa, 0x6d, 0xb9, 0x75, 0x32, 0x5c, 0x42, 0x00, - 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0xed, 0x2a, 0xfa, 0x7d, - 0x1a, 0x76, 0x1b, 0x6e, 0x1b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x1b, 0x6e, - 0x3c, 0x6e, 0x3b, 0x6e, - 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x6e, 0x3b, 0x76, 0x3b, 0x76, - 0x3b, 0x7e, 0x1a, 0x86, - 0xb0, 0x4b, 0xe4, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x83, 0x00, 0x06, 0x01, - 0xeb, 0x01, 0xce, 0x0a, - 0x92, 0x23, 0xb3, 0x23, 0xb3, 0x1b, 0xd3, 0x1b, 0xb3, 0x1b, 0xb3, 0x1b, - 0xb2, 0x23, 0x30, 0x1b, - 0x4c, 0x0a, 0x07, 0x01, 0x63, 0x00, 0x21, 0x00, 0x21, 0x00, 0xa4, 0x00, - 0x06, 0x01, 0x27, 0x01, - 0x07, 0x01, 0x07, 0x01, 0x07, 0x01, 0x06, 0x01, 0x06, 0x01, 0x83, 0x00, - 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x83, 0x00, - 0x06, 0x01, 0x07, 0x01, - 0x07, 0x01, 0x07, 0x01, 0x07, 0x01, 0x27, 0x01, 0x06, 0x01, 0x06, 0x01, - 0xc4, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x43, 0x00, - 0xa5, 0x00, 0x48, 0x01, - 0xca, 0x01, 0xae, 0x0a, 0x51, 0x1b, 0xb2, 0x23, 0xb3, 0x23, 0xb3, 0x1b, - 0xd3, 0x1b, 0xb3, 0x1b, - 0xd3, 0x23, 0xb3, 0x23, 0xb3, 0x23, 0x92, 0x23, 0xcf, 0x12, 0x2c, 0x02, - 0x68, 0x01, 0xc5, 0x00, - 0x63, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x41, 0x00, 0xc4, 0x00, - 0x0e, 0x2b, 0x34, 0x44, - 0xb6, 0x44, 0xd6, 0x3c, 0xf7, 0x3c, 0xf8, 0x3c, 0x18, 0x3d, 0x18, 0x3d, - 0x18, 0x3d, 0x18, 0x3d, - 0x18, 0x3d, 0x18, 0x3d, 0x18, 0x45, 0x18, 0x3d, 0x38, 0x45, 0x38, 0x45, - 0x39, 0x45, 0x38, 0x45, - 0x38, 0x45, 0x38, 0x45, 0x39, 0x4d, 0x38, 0x4d, 0x39, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x4d, - 0x59, 0x4d, 0x59, 0x55, 0x59, 0x55, 0x59, 0x55, 0x79, 0x55, 0x79, 0x55, - 0x79, 0x55, 0x79, 0x55, - 0x79, 0x55, 0x79, 0x55, 0x79, 0x55, 0x79, 0x55, 0x7a, 0x5d, 0x99, 0x5d, - 0x9a, 0x5d, 0x99, 0x5d, - 0x99, 0x5d, 0x99, 0x5d, 0x9a, 0x5d, 0x9a, 0x5d, 0x99, 0x5d, 0x99, 0x5d, - 0x9a, 0x5d, 0x9a, 0x5d, - 0xba, 0x5d, 0x9a, 0x65, 0xba, 0x65, 0xba, 0x65, 0xba, 0x65, 0xba, 0x65, - 0xba, 0x65, 0xba, 0x65, - 0xda, 0x65, 0xda, 0x65, 0xda, 0x65, 0xda, 0x65, 0xda, 0x65, 0xda, 0x65, - 0xda, 0x65, 0xda, 0x65, - 0xda, 0x6d, 0xda, 0x6d, 0xdb, 0x6d, 0xfb, 0x6d, 0xda, 0x65, 0xfb, 0x6d, - 0xfa, 0x6d, 0xd9, 0x75, - 0xb8, 0x7d, 0xe9, 0x19, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0xd0, 0x4b, 0xfa, 0x7d, 0x1a, 0x76, 0x1b, 0x6e, - 0x1b, 0x76, 0x1b, 0x76, - 0x3b, 0x76, 0x1b, 0x6e, 0x3b, 0x76, 0x3b, 0x6e, 0x3b, 0x76, 0x3b, 0x76, - 0x3b, 0x76, 0x3b, 0x76, - 0x1a, 0x7e, 0xb8, 0x7d, 0xb4, 0x64, 0x4a, 0x22, 0x42, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x42, 0x00, 0x63, 0x00, 0x84, 0x00, 0xe6, 0x00, - 0x27, 0x01, 0x88, 0x01, - 0x88, 0x01, 0x27, 0x01, 0xc5, 0x00, 0x63, 0x00, 0x43, 0x00, 0x22, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x21, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x21, 0x00, 0x42, 0x00, 0x43, 0x00, - 0x63, 0x00, 0xc5, 0x00, - 0x06, 0x01, 0x47, 0x01, 0x89, 0x01, 0xa9, 0x01, 0x68, 0x01, 0x07, 0x01, - 0xc5, 0x00, 0x64, 0x00, - 0x63, 0x00, 0x42, 0x00, 0x22, 0x00, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x83, 0x00, 0x88, 0x09, 0xad, 0x1a, 0xb1, 0x33, - 0x34, 0x3c, 0xb6, 0x44, - 0xf7, 0x4c, 0xf7, 0x4c, 0xf7, 0x4c, 0xf7, 0x4c, 0xf7, 0x4c, 0xf7, 0x4c, - 0xf7, 0x54, 0x17, 0x55, - 0x17, 0x55, 0x17, 0x55, 0x18, 0x55, 0x17, 0x55, 0x17, 0x55, 0x17, 0x55, - 0x18, 0x5d, 0x17, 0x5d, - 0x17, 0x5d, 0x17, 0x5d, 0x38, 0x5d, 0x38, 0x5d, 0x38, 0x5d, 0x38, 0x5d, - 0x38, 0x5d, 0x38, 0x5d, - 0x58, 0x65, 0x58, 0x65, 0x58, 0x65, 0x58, 0x65, 0x58, 0x65, 0x58, 0x65, - 0x58, 0x65, 0x58, 0x65, - 0x78, 0x65, 0x58, 0x65, 0x78, 0x65, 0x78, 0x65, 0x78, 0x65, 0x78, 0x65, - 0x78, 0x6d, 0x79, 0x6d, - 0x79, 0x6d, 0x79, 0x6d, 0x99, 0x6d, 0x79, 0x6d, 0x79, 0x6d, 0x99, 0x6d, - 0x99, 0x6d, 0x99, 0x6d, - 0x99, 0x6d, 0x99, 0x6d, 0x99, 0x75, 0x99, 0x75, 0x99, 0x75, 0x99, 0x75, - 0x99, 0x75, 0xb9, 0x75, - 0xb9, 0x75, 0xb9, 0x75, 0xb9, 0x75, 0xba, 0x75, 0xb9, 0x75, 0xb9, 0x75, - 0xb9, 0x75, 0xb9, 0x75, - 0xda, 0x75, 0xda, 0x75, 0xd9, 0x75, 0xd9, 0x7d, 0xb8, 0x85, 0x52, 0x64, - 0xa3, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, - 0xb0, 0x53, 0xf9, 0x85, - 0xf9, 0x7d, 0xfa, 0x7d, 0xfa, 0x7d, 0x1a, 0x7e, 0x1a, 0x7e, 0x1a, 0x7e, - 0x1a, 0x7e, 0x1a, 0x7e, - 0x1a, 0x7e, 0x1a, 0x7e, 0x98, 0x75, 0xf5, 0x64, 0xf1, 0x4b, 0xab, 0x2a, - 0x05, 0x01, 0x41, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, - 0x01, 0x00, 0x21, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x21, 0x00, - 0x21, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x01, 0x00, 0x21, 0x00, 0x22, 0x00, - 0x22, 0x00, 0x42, 0x00, - 0x22, 0x00, 0x21, 0x00, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x21, 0x00, - 0x63, 0x00, 0xe5, 0x00, 0x27, 0x01, 0x88, 0x01, 0x88, 0x01, 0x88, 0x01, - 0x88, 0x01, 0x88, 0x01, - 0x88, 0x01, 0x88, 0x01, 0x88, 0x01, 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, - 0x88, 0x09, 0x88, 0x09, - 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, - 0xa8, 0x09, 0xa8, 0x09, - 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, - 0xa8, 0x09, 0xa8, 0x09, - 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, 0x88, 0x09, 0xa8, 0x09, 0x88, 0x09, - 0xa8, 0x09, 0xa8, 0x09, - 0xa8, 0x09, 0xa8, 0x09, 0x88, 0x11, 0xa8, 0x09, 0x88, 0x11, 0xa8, 0x11, - 0xa8, 0x11, 0xa8, 0x11, - 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, - 0xa8, 0x11, 0xa8, 0x11, - 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, - 0xa8, 0x11, 0xa8, 0x11, - 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, 0xa8, 0x11, - 0xa8, 0x11, 0xa8, 0x11, - 0xa8, 0x19, 0x46, 0x11, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x09, 0xa8, 0x19, 0xc8, 0x11, 0xc8, 0x11, - 0xc8, 0x11, 0xc8, 0x11, - 0xc8, 0x11, 0xc8, 0x11, 0xc8, 0x11, 0xc8, 0x11, 0xc8, 0x11, 0xc8, 0x11, - 0x87, 0x09, 0x46, 0x09, - 0xa3, 0x00, 0x21, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -#else -/* This image is 228x113 raw Image resembling QuIC logo*/ -static char imageBuffer_rgb888[] = { - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x08, 0x00, 0x30, 0x18, 0x00, - 0x48, 0x30, 0x00, 0x70, 0x48, 0x00, 0x88, 0x5c, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x60, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, - 0x90, 0x64, 0x00, 0x90, 0x64, 0x00, 0x90, 0x68, 0x00, 0x90, 0x68, 0x00, - 0x90, 0x68, 0x00, 0x90, 0x68, 0x00, 0x98, 0x68, 0x00, 0x98, 0x68, 0x00, - 0x98, 0x68, 0x00, 0x98, 0x68, 0x00, 0x90, 0x64, 0x00, 0x80, 0x54, 0x00, - 0x60, 0x40, 0x00, 0x40, 0x24, 0x00, 0x20, 0x10, 0x00, 0x10, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x18, 0x10, 0x00, 0x48, 0x34, 0x08, 0x70, 0x50, 0x10, - 0x88, 0x68, 0x18, 0x98, 0x70, 0x10, 0xa0, 0x70, 0x08, 0xa0, 0x74, 0x08, - 0xa8, 0x74, 0x08, 0xa8, 0x74, 0x08, 0xa8, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x00, - 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x00, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x00, - 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x00, 0xa0, 0x78, 0x08, - 0xa8, 0x78, 0x08, 0xa8, 0x78, 0x08, 0xa8, 0x78, 0x08, 0xa8, 0x78, 0x08, - 0xa8, 0x78, 0x08, 0xa8, 0x78, 0x08, 0xa8, 0x78, 0x08, 0xa0, 0x74, 0x10, - 0x98, 0x70, 0x18, 0x80, 0x64, 0x18, 0x58, 0x44, 0x08, 0x30, 0x20, 0x00, - 0x10, 0x08, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x28, 0x18, 0x00, 0x60, 0x48, 0x08, 0x90, 0x68, 0x18, 0x98, 0x74, 0x10, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x08, 0xa0, 0x78, 0x10, 0x98, 0x74, 0x18, 0x80, 0x64, 0x18, - 0x40, 0x28, 0x00, 0x18, 0x0c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x30, 0x20, 0x00, - 0x70, 0x54, 0x18, 0x90, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xb0, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x7c, 0x00, - 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x88, 0x6c, 0x20, 0x50, 0x38, 0x00, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x0c, 0x08, 0x48, 0x48, 0x48, 0xc0, 0xc4, 0xc0, - 0xf8, 0xf8, 0xf8, 0xf0, 0xf4, 0xf0, 0xa0, 0xa0, 0xa0, 0x38, 0x38, 0x38, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, - 0xd8, 0xdc, 0xd8, 0x38, 0x3c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0x98, 0x9c, 0x98, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x0c, 0x08, 0x98, 0x98, 0x98, 0xf8, 0xfc, 0xf8, 0x28, 0x2c, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0x78, 0x7c, 0x78, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x98, 0x98, 0x98, - 0xe0, 0xe4, 0xe0, 0xf8, 0xfc, 0xf8, 0xd0, 0xd4, 0xd0, 0x78, 0x78, 0x78, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x14, 0x10, 0x58, 0x5c, 0x58, 0xd0, 0xd0, 0xd0, 0xf8, 0xfc, 0xf8, - 0xe8, 0xec, 0xe8, 0x88, 0x88, 0x88, 0x28, 0x28, 0x28, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xf0, 0xf0, 0xf0, - 0x68, 0x6c, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x6c, 0x68, 0xf0, 0xf0, 0xf0, - 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x80, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, - 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x20, 0x14, 0x00, 0x70, 0x54, 0x18, - 0x98, 0x70, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x7c, 0x10, 0x88, 0x6c, 0x18, 0x48, 0x34, 0x00, 0x10, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x60, 0x64, 0x60, 0xe8, 0xe8, 0xe8, 0xc0, 0xc8, 0xc8, - 0x80, 0x84, 0x80, 0x88, 0x88, 0x88, 0xe8, 0xe8, 0xe8, 0xd8, 0xd8, 0xd8, - 0x40, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xd8, 0xdc, 0xd8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0x98, 0x9c, 0x98, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x28, 0x28, 0xc8, 0xcc, 0xc8, 0xf8, 0xfc, 0xf8, 0x88, 0x88, 0x88, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x14, 0x10, 0xc8, 0xc8, 0xc8, 0xe8, 0xec, 0xe8, - 0xa0, 0xa0, 0xa0, 0x80, 0x80, 0x80, 0xb8, 0xb8, 0xb8, 0xf8, 0xf8, 0xf8, - 0x88, 0x88, 0x88, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x08, 0x0c, 0x08, - 0x80, 0x84, 0x80, 0xf0, 0xf0, 0xf0, 0xb0, 0xb4, 0xb0, 0x80, 0x80, 0x80, - 0x90, 0x94, 0x90, 0xf0, 0xf0, 0xf0, 0xc0, 0xc4, 0xc0, 0x28, 0x28, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xf8, 0xfc, 0xf8, - 0xb0, 0xb4, 0xb0, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xb0, 0xb0, 0xb0, 0xf8, 0xfc, 0xf8, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0xe0, 0xe0, 0xe0, 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0xa0, 0xa0, 0xa0, - 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x10, 0x08, 0x00, 0x58, 0x3c, 0x08, 0x90, 0x6c, 0x18, - 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x7c, 0x10, 0x80, 0x68, 0x20, 0x28, 0x14, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xc0, 0xc0, 0xc0, 0xe8, 0xec, 0xe8, 0x28, 0x2c, 0x28, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x60, 0x64, 0x60, 0xf0, 0xf0, 0xf0, - 0xa0, 0xa4, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, - 0xd8, 0xdc, 0xd8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x58, 0x58, 0xf8, 0xf8, 0xf8, 0xf0, 0xf4, 0xf0, 0xc0, 0xc4, 0xc0, - 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0xf0, 0xf0, 0xf0, 0x78, 0x78, 0x78, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0xb8, 0xb8, 0xb8, - 0xd8, 0xdc, 0xd8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xe0, 0xe0, 0xe0, 0xd0, 0xd0, 0xd0, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, - 0x08, 0x0c, 0x08, 0x80, 0x80, 0x80, 0xf8, 0xfc, 0xf8, 0x78, 0x78, 0x78, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0xf8, 0xfc, 0xf8, - 0xf0, 0xf4, 0xf0, 0x48, 0x4c, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x48, 0x4c, 0x48, 0xf0, 0xf4, 0xf0, 0xf8, 0xfc, 0xf8, - 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x6c, 0x68, - 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xe0, 0xe0, 0xe0, - 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x04, 0x00, 0x38, 0x28, 0x00, 0x88, 0x64, 0x18, 0xa0, 0x74, 0x08, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x80, 0x08, 0x98, 0x78, 0x18, 0x68, 0x50, 0x08, - 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x34, 0x30, 0xe8, 0xec, 0xe8, 0xa0, 0xa4, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0xc0, 0xc4, 0xc0, - 0xe0, 0xe4, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xe0, 0xe0, 0xe0, 0x38, 0x3c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0xb8, 0xb8, 0xd8, 0xd8, 0xd8, 0x90, 0x94, 0x90, 0xe8, 0xec, 0xe8, - 0x58, 0x58, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xa8, 0xac, 0xa8, 0xd8, 0xd8, 0xd8, 0x30, 0x30, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x38, - 0x80, 0x84, 0x80, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x50, 0x54, 0x50, - 0xf8, 0xfc, 0xf8, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xe0, 0xe4, 0xe0, 0xb0, 0xb4, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xf8, 0xfc, 0xf8, - 0xf8, 0xf8, 0xf8, 0xc8, 0xc8, 0xc8, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xf8, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x08, 0x0c, 0x08, 0x90, 0x94, 0x90, 0xf0, 0xf4, 0xf0, - 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x10, 0x00, 0x58, 0x40, 0x08, 0x98, 0x6c, 0x10, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x80, 0x10, 0x88, 0x68, 0x10, - 0x30, 0x24, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x18, 0xb8, 0xbc, 0xb8, - 0xf8, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xe0, 0xe0, 0xe0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x18, - 0xf0, 0xf0, 0xf0, 0x98, 0x98, 0x98, 0x28, 0x28, 0x28, 0xf0, 0xf4, 0xf0, - 0x90, 0x94, 0x90, 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x68, 0x6c, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xc8, 0xcc, 0xc8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0xe8, 0xe8, 0xe8, - 0xc8, 0xcc, 0xc8, 0xf8, 0xf8, 0xf8, 0x38, 0x3c, 0x38, 0x00, 0x00, 0x00, - 0x30, 0x34, 0x30, 0xf0, 0xf4, 0xf0, 0xc8, 0xcc, 0xc8, 0xe8, 0xe8, 0xe8, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x6c, 0x68, - 0xf8, 0xfc, 0xf8, 0xb0, 0xb4, 0xb0, 0xf0, 0xf0, 0xf0, 0x68, 0x68, 0x68, - 0x00, 0x00, 0x00, 0x30, 0x34, 0x30, 0xd8, 0xd8, 0xd8, 0xb0, 0xb4, 0xb0, - 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x70, 0x54, 0x10, 0xa0, 0x74, 0x10, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x08, 0x98, 0x78, 0x18, - 0x50, 0x3c, 0x08, 0x10, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x3c, 0x38, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0xb8, 0xbc, 0xb8, - 0xf8, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xe0, 0xe0, 0xe0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0x98, 0x9c, 0x98, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x68, - 0xe8, 0xec, 0xe8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, - 0xc8, 0xcc, 0xc8, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x68, 0x6c, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, 0xd8, 0xdc, 0xd8, 0xc8, 0xcc, 0xc8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xd8, 0xdc, 0xd8, - 0x78, 0x7c, 0x78, 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, 0x08, 0x0c, 0x08, - 0xa0, 0xa4, 0xa0, 0xd8, 0xdc, 0xd8, 0x78, 0x7c, 0x78, 0xe0, 0xe0, 0xe0, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x6c, 0x68, - 0xf8, 0xfc, 0xf8, 0x50, 0x50, 0x50, 0xe8, 0xe8, 0xe8, 0xb0, 0xb0, 0xb0, - 0x18, 0x18, 0x18, 0x88, 0x8c, 0x88, 0xe8, 0xec, 0xe8, 0x48, 0x48, 0x48, - 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x2c, 0x00, 0x90, 0x68, 0x20, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb8, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xa0, 0x7c, 0x10, - 0x68, 0x4c, 0x10, 0x18, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x18, 0xb8, 0xbc, 0xb8, - 0xf8, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, - 0xd8, 0xdc, 0xd8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xc0, 0xc4, 0xc0, - 0xd0, 0xd0, 0xd0, 0x20, 0x24, 0x20, 0x00, 0x00, 0x00, 0x68, 0x68, 0x68, - 0xf8, 0xf8, 0xf8, 0x58, 0x5c, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xc8, 0xcc, 0xc8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xe0, 0xe0, 0xe0, - 0x40, 0x40, 0x40, 0x88, 0x8c, 0x88, 0xe0, 0xe4, 0xe0, 0x90, 0x90, 0x90, - 0xe0, 0xe0, 0xe0, 0x90, 0x90, 0x90, 0x38, 0x3c, 0x38, 0xe0, 0xe0, 0xe0, - 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x70, 0x70, 0x70, 0xf0, 0xf4, 0xf0, - 0x68, 0x6c, 0x68, 0xe8, 0xec, 0xe8, 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, - 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x38, 0x00, 0x90, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x84, 0x00, 0xb8, 0x84, 0x00, - 0xb8, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xa8, 0x80, 0x10, - 0x70, 0x58, 0x18, 0x20, 0x14, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x20, 0x24, 0x20, 0xb8, 0xbc, 0xb8, - 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xd8, 0xdc, 0xd8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x48, 0x48, 0x48, 0xe0, 0xe4, 0xe0, - 0xc0, 0xc4, 0xc0, 0x40, 0x44, 0x40, 0x40, 0x40, 0x40, 0x68, 0x68, 0x68, - 0xe8, 0xe8, 0xe8, 0xb8, 0xb8, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x2c, 0x28, 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, 0xd8, 0xdc, 0xd8, 0xc8, 0xcc, 0xc8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0xd8, 0xdc, 0xd8, - 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0xf0, 0xf0, 0xf0, 0xf0, 0xf4, 0xf0, - 0xf0, 0xf4, 0xf0, 0x28, 0x2c, 0x28, 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x28, 0x28, 0x28, 0xc8, 0xcc, 0xc8, - 0xe8, 0xec, 0xe8, 0xe8, 0xec, 0xe8, 0x58, 0x5c, 0x58, 0x00, 0x00, 0x00, - 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x70, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x84, 0x00, 0xb8, 0x84, 0x00, - 0xb8, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xa8, 0x80, 0x10, - 0x78, 0x5c, 0x10, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xe0, 0xe4, 0xe0, 0xb0, 0xb4, 0xb0, 0x00, 0x00, 0x00, - 0x10, 0x14, 0x10, 0xb0, 0xb0, 0xb0, 0xa8, 0xa8, 0xa8, 0xd8, 0xd8, 0xd8, - 0xd0, 0xd4, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, - 0xe0, 0xe4, 0xe0, 0x48, 0x4c, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x14, 0x10, 0xf8, 0xfc, 0xf8, 0x98, 0x98, 0x98, - 0x08, 0x0c, 0x08, 0x00, 0x04, 0x00, 0x80, 0x84, 0x80, 0xf8, 0xf8, 0xf8, - 0xe8, 0xec, 0xe8, 0xd8, 0xdc, 0xd8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xf0, 0xf4, 0xf0, 0xf0, 0xf4, 0xf0, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xa0, 0xa4, 0xa0, 0xd8, 0xdc, 0xd8, 0x38, 0x38, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x54, 0x50, - 0xb8, 0xbc, 0xb8, 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x48, 0x48, 0x48, - 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0xe8, 0xe8, 0xe8, 0xa8, 0xa8, 0xa8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0xe0, 0xe0, 0xe0, - 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x98, 0x9c, 0x98, 0xf8, 0xfc, 0xf8, - 0xb0, 0xb0, 0xb0, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xe0, 0xe0, 0xe0, - 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x38, 0x3c, 0x38, 0x00, 0x04, 0x00, 0x78, 0x7c, 0x78, - 0xf0, 0xf4, 0xf0, 0xb8, 0xbc, 0xb8, 0x10, 0x14, 0x10, 0x00, 0x00, 0x00, - 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xa8, 0x80, 0x10, - 0x78, 0x5c, 0x10, 0x28, 0x18, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0xb0, 0xb0, 0xb0, 0xf0, 0xf4, 0xf0, 0x48, 0x48, 0x48, - 0x10, 0x14, 0x10, 0x70, 0x74, 0x70, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, - 0x90, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xf0, 0xf0, 0xf0, 0xa8, 0xac, 0xa8, 0x30, 0x30, 0x30, 0x10, 0x14, 0x10, - 0x20, 0x20, 0x20, 0x98, 0x9c, 0x98, 0xe8, 0xec, 0xe8, 0x58, 0x5c, 0x58, - 0x00, 0x00, 0x00, 0x20, 0x24, 0x20, 0xc0, 0xc4, 0xc0, 0xe0, 0xe0, 0xe0, - 0x58, 0x5c, 0x58, 0x58, 0x5c, 0x58, 0x58, 0x5c, 0x58, 0x58, 0x5c, 0x58, - 0x90, 0x90, 0x90, 0xf0, 0xf0, 0xf0, 0x78, 0x7c, 0x78, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0x90, 0x90, 0x90, 0x20, 0x24, 0x20, - 0x20, 0x24, 0x20, 0x20, 0x24, 0x20, 0x20, 0x24, 0x20, 0x18, 0x1c, 0x18, - 0x08, 0x08, 0x08, 0x58, 0x5c, 0x58, 0xf0, 0xf4, 0xf0, 0x98, 0x98, 0x98, - 0x20, 0x24, 0x20, 0x10, 0x14, 0x10, 0x38, 0x38, 0x38, 0xc8, 0xcc, 0xc8, - 0xd0, 0xd4, 0xd0, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, - 0xd0, 0xd0, 0xd0, 0xe0, 0xe4, 0xe0, 0x30, 0x30, 0x30, 0x10, 0x14, 0x10, - 0x18, 0x1c, 0x18, 0xa0, 0xa0, 0xa0, 0xf8, 0xf8, 0xf8, 0x68, 0x68, 0x68, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xe0, 0xe0, 0xe0, - 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x80, 0x80, 0x80, - 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, - 0x70, 0x74, 0x70, 0x38, 0x3c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0xfc, 0xf8, 0x98, 0x9c, 0x98, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x40, 0x00, 0x98, 0x70, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xa8, 0x80, 0x10, - 0x78, 0x60, 0x10, 0x28, 0x18, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x48, 0x48, 0x48, 0xd0, 0xd4, 0xd0, 0xe0, 0xe4, 0xe0, - 0xa8, 0xac, 0xa8, 0xb8, 0xbc, 0xb8, 0xf8, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, - 0x98, 0x9c, 0x98, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x90, 0x94, 0x90, 0xf0, 0xf0, 0xf0, 0xc8, 0xc8, 0xc8, 0xa0, 0xa4, 0xa0, - 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x48, 0x4c, 0x48, 0xf0, 0xf4, 0xf0, 0x98, 0x98, 0x98, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x2c, 0x28, 0xd0, 0xd4, 0xd0, 0xb8, 0xbc, 0xb8, 0x10, 0x14, 0x10, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0xe0, 0xe0, 0xe0, 0xc0, 0xc4, 0xc0, - 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xa8, 0xa8, 0xa8, - 0x30, 0x30, 0x30, 0x08, 0x08, 0x08, 0xa8, 0xac, 0xa8, 0xf0, 0xf4, 0xf0, - 0xc0, 0xc0, 0xc0, 0xa8, 0xa8, 0xa8, 0xd0, 0xd0, 0xd0, 0xe8, 0xec, 0xe8, - 0x68, 0x68, 0x68, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x60, 0x64, 0x60, 0xe0, 0xe0, 0xe0, 0xd8, 0xd8, 0xd8, 0xa8, 0xa8, 0xa8, - 0xb8, 0xbc, 0xb8, 0xf0, 0xf4, 0xf0, 0xa0, 0xa4, 0xa0, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xd8, 0xdc, 0xd8, - 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, - 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x70, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb0, 0x88, 0x00, 0xa8, 0x84, 0x10, - 0x78, 0x60, 0x10, 0x28, 0x18, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x20, 0x24, 0x28, 0x88, 0x8c, 0x90, - 0xc0, 0xc0, 0xc0, 0xb8, 0xbc, 0xb8, 0x68, 0x6c, 0x68, 0x70, 0x70, 0x70, - 0xd0, 0xd4, 0xd0, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x14, 0x10, 0x50, 0x54, 0x50, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, - 0xa8, 0xac, 0xa8, 0x60, 0x60, 0x60, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x98, 0x98, 0x98, 0x30, 0x34, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x70, 0x74, 0x70, 0x80, 0x84, 0x80, 0x20, 0x24, 0x20, - 0x18, 0x1c, 0x18, 0x98, 0x98, 0x98, 0x90, 0x94, 0x90, 0x90, 0x94, 0x90, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x80, 0x84, 0x80, - 0x20, 0x24, 0x20, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x60, 0x64, 0x60, - 0xa8, 0xac, 0xa8, 0xc0, 0xc4, 0xc0, 0x98, 0x9c, 0x98, 0x48, 0x4c, 0x48, - 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x30, 0x34, 0x30, 0x98, 0x9c, 0x98, 0xc0, 0xc4, 0xc0, - 0xb0, 0xb4, 0xb0, 0x60, 0x60, 0x60, 0x10, 0x14, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x54, 0x50, 0x80, 0x84, 0x80, - 0x20, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, 0x20, 0x80, 0x84, 0x80, - 0x50, 0x54, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, - 0x98, 0x98, 0x98, 0x20, 0x24, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x98, 0x98, 0x98, 0x60, 0x60, 0x60, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xb0, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x84, 0x00, 0xb8, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x84, 0x00, 0xb8, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb0, 0x84, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb0, 0x88, 0x00, 0xa8, 0x84, 0x10, - 0x78, 0x60, 0x10, 0x28, 0x18, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x78, 0x00, - 0xb0, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb8, 0x84, 0x00, 0xb8, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xa8, 0x84, 0x10, - 0x78, 0x60, 0x10, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xb0, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x08, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x08, 0xa0, 0x78, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x78, 0x08, 0xa0, 0x74, 0x10, 0xa0, 0x78, 0x10, - 0xa0, 0x74, 0x10, 0xa0, 0x74, 0x08, 0xa0, 0x78, 0x08, 0xa0, 0x78, 0x08, - 0xa8, 0x7c, 0x08, 0xa8, 0x78, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb8, 0x84, 0x00, 0xb8, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x88, 0x00, 0xa8, 0x84, 0x10, - 0x78, 0x60, 0x10, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, - 0xa0, 0x74, 0x10, 0x98, 0x70, 0x10, 0x98, 0x70, 0x18, 0x90, 0x68, 0x18, - 0x80, 0x60, 0x10, 0x80, 0x60, 0x18, 0x80, 0x60, 0x18, 0x78, 0x5c, 0x10, - 0x78, 0x5c, 0x10, 0x80, 0x60, 0x18, 0x80, 0x60, 0x10, 0x88, 0x64, 0x10, - 0x90, 0x6c, 0x18, 0x98, 0x70, 0x18, 0xa0, 0x78, 0x18, 0xa0, 0x78, 0x10, - 0xa8, 0x7c, 0x10, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xa8, 0x84, 0x10, - 0x78, 0x60, 0x10, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x08, 0x98, 0x70, 0x08, - 0x98, 0x70, 0x10, 0x98, 0x70, 0x18, 0x88, 0x68, 0x18, 0x78, 0x58, 0x10, - 0x68, 0x4c, 0x08, 0x58, 0x40, 0x00, 0x50, 0x34, 0x00, 0x48, 0x30, 0x00, - 0x38, 0x24, 0x00, 0x38, 0x24, 0x00, 0x38, 0x20, 0x00, 0x30, 0x1c, 0x00, - 0x30, 0x1c, 0x00, 0x30, 0x20, 0x00, 0x38, 0x24, 0x00, 0x38, 0x28, 0x00, - 0x40, 0x2c, 0x00, 0x48, 0x34, 0x00, 0x58, 0x40, 0x00, 0x68, 0x4c, 0x00, - 0x78, 0x5c, 0x10, 0x90, 0x6c, 0x18, 0x98, 0x78, 0x18, 0xa0, 0x78, 0x18, - 0xa8, 0x7c, 0x10, 0xa8, 0x7c, 0x08, 0xa8, 0x80, 0x08, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb0, 0x84, 0x10, - 0x78, 0x60, 0x10, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa0, 0x74, 0x08, 0x98, 0x70, 0x10, 0x90, 0x68, 0x18, 0x80, 0x64, 0x20, - 0x68, 0x48, 0x10, 0x48, 0x34, 0x00, 0x30, 0x20, 0x00, 0x28, 0x14, 0x00, - 0x18, 0x0c, 0x00, 0x10, 0x08, 0x00, 0x10, 0x04, 0x00, 0x10, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x18, 0x10, 0x00, - 0x20, 0x18, 0x00, 0x30, 0x20, 0x00, 0x48, 0x30, 0x00, 0x68, 0x50, 0x10, - 0x88, 0x68, 0x20, 0x98, 0x74, 0x20, 0xa0, 0x7c, 0x18, 0xa8, 0x7c, 0x10, - 0xb0, 0x80, 0x08, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb0, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x88, 0x00, 0xa8, 0x84, 0x10, - 0x78, 0x60, 0x10, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa0, 0x74, 0x08, 0xa0, 0x70, 0x10, 0x98, 0x70, 0x10, - 0x80, 0x60, 0x10, 0x68, 0x50, 0x08, 0x48, 0x2c, 0x00, 0x20, 0x10, 0x00, - 0x18, 0x08, 0x00, 0x10, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x18, 0x08, 0x00, - 0x20, 0x10, 0x00, 0x40, 0x2c, 0x00, 0x70, 0x54, 0x10, 0x88, 0x68, 0x10, - 0x98, 0x78, 0x18, 0xa8, 0x80, 0x10, 0xa8, 0x80, 0x08, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xa8, 0x88, 0x10, - 0x78, 0x60, 0x10, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x14, 0x10, 0x78, 0x7c, 0x78, 0x80, 0x84, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xa4, 0xa0, 0x70, 0x70, 0x70, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x1c, 0x18, 0x90, 0x90, 0x90, 0x68, 0x68, 0x68, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x3c, 0x38, 0x98, 0x9c, 0x98, 0x48, 0x48, 0x48, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x48, 0x48, 0xa8, 0xa8, 0xa8, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x50, 0x50, 0x50, - 0x98, 0x98, 0x98, 0xa0, 0xa0, 0xa0, 0x70, 0x70, 0x70, 0x30, 0x30, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x58, 0x58, 0x98, 0x98, 0x98, - 0x38, 0x3c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x68, 0x6c, 0x68, 0x98, 0x9c, 0x98, 0x28, 0x2c, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x90, 0x94, 0x90, - 0x70, 0x74, 0x70, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x3c, 0x38, 0xa0, 0xa4, 0xa0, 0xa0, 0xa4, 0xa0, 0xa0, 0xa4, 0xa0, - 0xa0, 0xa4, 0xa0, 0xa0, 0xa4, 0xa0, 0xa0, 0xa4, 0xa0, 0xa0, 0xa4, 0xa0, - 0x68, 0x68, 0x68, 0x08, 0x08, 0x08, 0x28, 0x28, 0x28, 0xa0, 0xa4, 0xa0, - 0x48, 0x48, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x50, 0x50, 0x50, 0x90, 0x94, 0x90, 0xa0, 0xa0, 0xa0, - 0x70, 0x70, 0x70, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x1c, 0x18, 0x90, 0x90, 0x90, 0x70, 0x74, 0x70, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x28, 0x28, 0x90, 0x90, 0x90, 0x58, 0x5c, 0x58, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa0, 0x74, 0x08, 0x90, 0x70, 0x18, 0x78, 0x5c, 0x18, 0x58, 0x3c, 0x08, - 0x30, 0x20, 0x00, 0x18, 0x0c, 0x00, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x20, 0x10, 0x00, 0x30, 0x20, 0x00, - 0x50, 0x40, 0x00, 0x80, 0x68, 0x18, 0xa0, 0x7c, 0x18, 0xa8, 0x80, 0x10, - 0xb0, 0x84, 0x08, 0xb8, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xa8, 0x88, 0x10, - 0x78, 0x60, 0x10, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xc0, 0xc0, 0xc0, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xe8, 0xec, 0xe8, - 0x50, 0x54, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0x98, 0x9c, 0x98, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0xf8, 0xfc, 0xf8, 0xc0, 0xc0, 0xc0, - 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x6c, 0x68, 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x0c, 0x08, 0xa8, 0xa8, 0xa8, 0xe8, 0xec, 0xe8, - 0xc8, 0xcc, 0xc8, 0xc0, 0xc0, 0xc0, 0xe8, 0xe8, 0xe8, 0xd0, 0xd0, 0xd0, - 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x40, 0x44, 0x40, 0xf8, 0xf8, 0xf8, - 0x80, 0x84, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xc8, 0xcc, 0xc8, 0x28, 0x28, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, 0xf8, 0xfc, 0xf8, - 0xe0, 0xe4, 0xe0, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x44, 0x40, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xc0, 0xc4, 0xc0, - 0xf8, 0xfc, 0xf8, 0xd8, 0xdc, 0xd8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, - 0x70, 0x74, 0x70, 0x08, 0x0c, 0x08, 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, - 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c, 0x08, - 0xa8, 0xa8, 0xa8, 0xe8, 0xe8, 0xe8, 0xc8, 0xcc, 0xc8, 0xc0, 0xc0, 0xc0, - 0xe8, 0xe8, 0xe8, 0xd0, 0xd0, 0xd0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xf0, 0xf4, 0xf0, - 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa0, 0x74, 0x08, 0x98, 0x70, 0x10, - 0x88, 0x64, 0x18, 0x58, 0x3c, 0x00, 0x30, 0x1c, 0x00, 0x18, 0x0c, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x10, 0x08, 0x00, 0x30, 0x20, 0x00, 0x58, 0x40, 0x00, 0x90, 0x70, 0x18, - 0xa0, 0x7c, 0x18, 0xa8, 0x84, 0x10, 0xb0, 0x84, 0x08, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, 0xb0, 0x88, 0x10, - 0x78, 0x64, 0x10, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, - 0xd8, 0xdc, 0xd8, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0xf8, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, - 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x70, 0x70, 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0xf0, 0xf4, 0xf0, 0x98, 0x98, 0x98, - 0x20, 0x24, 0x20, 0x18, 0x1c, 0x18, 0x60, 0x60, 0x60, 0xe0, 0xe4, 0xe0, - 0xb8, 0xb8, 0xb8, 0x10, 0x14, 0x10, 0x00, 0x04, 0x00, 0xe8, 0xe8, 0xe8, - 0xb0, 0xb4, 0xb0, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xf8, 0xfc, 0xf8, 0x90, 0x94, 0x90, 0x08, 0x0c, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xf8, 0xfc, 0xf8, - 0xf8, 0xf8, 0xf8, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x40, 0x44, 0x40, - 0xf8, 0xfc, 0xf8, 0x88, 0x8c, 0x88, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, - 0x68, 0x6c, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xf8, 0xf8, 0x98, 0x98, 0x98, 0x20, 0x24, 0x20, 0x18, 0x1c, 0x18, - 0x60, 0x60, 0x60, 0xe0, 0xe4, 0xe0, 0xb8, 0xb8, 0xb8, 0x10, 0x14, 0x10, - 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xf8, 0xfc, 0xf8, - 0xb8, 0xbc, 0xb8, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa0, 0x74, 0x08, 0x98, 0x70, 0x10, 0x80, 0x64, 0x18, 0x60, 0x44, 0x08, - 0x28, 0x18, 0x00, 0x10, 0x08, 0x00, 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, 0x18, 0x08, 0x00, 0x28, 0x14, 0x00, - 0x60, 0x4c, 0x10, 0x90, 0x70, 0x18, 0xa8, 0x84, 0x18, 0xb0, 0x88, 0x08, - 0xb0, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb0, 0x88, 0x10, - 0x78, 0x64, 0x10, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xc0, 0xc0, 0xc0, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xf0, 0xf4, 0xf0, - 0xf8, 0xf8, 0xf8, 0x98, 0x9c, 0x98, 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0xf8, 0xf8, 0xf8, 0xf0, 0xf4, 0xf0, - 0xf8, 0xfc, 0xf8, 0x48, 0x48, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x70, 0x70, 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x08, 0xc0, 0xc0, 0xc0, 0xd0, 0xd4, 0xd0, 0x30, 0x30, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0xa8, 0xa8, - 0xe0, 0xe0, 0xe0, 0x40, 0x44, 0x40, 0x00, 0x00, 0x00, 0xa0, 0xa4, 0xa0, - 0xe8, 0xec, 0xe8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x88, 0xe8, 0xec, 0xe8, 0x58, 0x58, 0x58, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x1c, 0x18, 0xc8, 0xcc, 0xc8, 0xd8, 0xdc, 0xd8, - 0xc8, 0xc8, 0xc8, 0xd0, 0xd4, 0xd0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, - 0x68, 0x6c, 0x68, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xc0, 0xc0, 0xc0, - 0xd0, 0xd4, 0xd0, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xa0, 0xa4, 0xa0, 0xe0, 0xe0, 0xe0, 0x40, 0x44, 0x40, - 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, 0xd8, 0xdc, 0xd8, 0xf0, 0xf0, 0xf0, - 0xf8, 0xf8, 0xf8, 0x90, 0x90, 0x90, 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, - 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x00, 0xa0, 0x74, 0x08, - 0x98, 0x70, 0x18, 0x78, 0x58, 0x10, 0x40, 0x28, 0x00, 0x18, 0x0c, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x18, 0x0c, 0x00, 0x40, 0x30, 0x00, 0x78, 0x60, 0x10, 0xa0, 0x80, 0x18, - 0xa8, 0x84, 0x10, 0xb0, 0x88, 0x08, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb0, 0x88, 0x10, - 0x78, 0x64, 0x18, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xb8, 0xb8, 0xb8, - 0xc8, 0xc8, 0xc8, 0xe8, 0xe8, 0xe8, 0x58, 0x58, 0x58, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0xf0, 0xf0, 0xf0, 0xa8, 0xac, 0xa8, - 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, - 0x70, 0x70, 0x70, 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x18, 0x1c, 0x18, 0xc8, 0xcc, 0xc8, 0xd0, 0xd0, 0xd0, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xe8, 0xec, 0xe8, 0x58, 0x5c, 0x58, 0x00, 0x00, 0x00, 0x58, 0x58, 0x58, - 0xf8, 0xf8, 0xf8, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x08, 0x0c, 0x08, - 0xc0, 0xc0, 0xc0, 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0x54, 0x50, 0xe8, 0xe8, 0xe8, 0x78, 0x7c, 0x78, - 0x80, 0x80, 0x80, 0xf8, 0xf8, 0xf8, 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, - 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x18, 0xc8, 0xcc, 0xc8, - 0xc8, 0xcc, 0xc8, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xe8, 0xec, 0xe8, 0x58, 0x5c, 0x58, - 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xe0, 0xe0, 0xe0, 0xb0, 0xb4, 0xb0, - 0xd0, 0xd0, 0xd0, 0xe0, 0xe4, 0xe0, 0x48, 0x4c, 0x48, 0x00, 0x00, 0x00, - 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa0, 0x70, 0x10, 0x88, 0x68, 0x18, - 0x58, 0x40, 0x08, 0x28, 0x18, 0x00, 0x10, 0x04, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x28, 0x18, 0x00, 0x60, 0x4c, 0x10, - 0x98, 0x78, 0x20, 0xa8, 0x84, 0x10, 0xb0, 0x8c, 0x08, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb0, 0x88, 0x10, - 0x78, 0x64, 0x18, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x48, 0x48, 0x48, 0xf8, 0xf8, 0xf8, 0xc8, 0xc8, 0xc8, 0x28, 0x28, 0x28, - 0x30, 0x30, 0x30, 0xe0, 0xe0, 0xe0, 0x98, 0x9c, 0x98, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0xe8, 0xec, 0xe8, 0x68, 0x68, 0x68, - 0x88, 0x88, 0x88, 0xf0, 0xf4, 0xf0, 0x88, 0x88, 0x88, 0x08, 0x0c, 0x08, - 0x70, 0x70, 0x70, 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x18, 0x1c, 0x18, 0xc8, 0xcc, 0xc8, 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, - 0xe8, 0xec, 0xe8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, - 0xd0, 0xd4, 0xd0, 0xc0, 0xc4, 0xc0, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, - 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x90, 0x90, 0x90, 0xf8, 0xfc, 0xf8, 0x20, 0x20, 0x20, - 0x48, 0x4c, 0x48, 0xe0, 0xe4, 0xe0, 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x38, 0xf8, 0xfc, 0xf8, - 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0xd0, 0xd0, 0xd0, - 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xe8, 0xec, 0xe8, 0x60, 0x60, 0x60, - 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, - 0x50, 0x54, 0x50, 0xe8, 0xec, 0xe8, 0xd0, 0xd0, 0xd0, 0x08, 0x0c, 0x08, - 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x08, 0x98, 0x70, 0x10, 0x88, 0x60, 0x18, 0x48, 0x2c, 0x00, - 0x18, 0x0c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x0c, 0x00, - 0x48, 0x34, 0x00, 0x88, 0x6c, 0x10, 0xa8, 0x84, 0x18, 0xb0, 0x8c, 0x08, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb0, 0x8c, 0x10, - 0x80, 0x64, 0x18, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x10, 0x10, 0x10, 0x78, 0x7c, 0x78, 0xf0, 0xf4, 0xf0, 0xa0, 0xa0, 0xa0, - 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0xe8, 0xec, 0xe8, 0x60, 0x60, 0x60, - 0x08, 0x08, 0x08, 0xc8, 0xcc, 0xc8, 0xe8, 0xec, 0xe8, 0x50, 0x54, 0x50, - 0x70, 0x70, 0x70, 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xc8, 0xcc, 0xc8, 0xd0, 0xd0, 0xd0, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xe8, 0xec, 0xe8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x08, 0x0c, 0x08, - 0x98, 0x98, 0x98, 0xf8, 0xfc, 0xf8, 0x20, 0x24, 0x20, 0x78, 0x78, 0x78, - 0xf8, 0xf8, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x2c, 0x28, 0xd8, 0xdc, 0xd8, 0xc0, 0xc4, 0xc0, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0xc0, 0xc0, 0xc0, 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, - 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, - 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x18, 0xc8, 0xcc, 0xc8, - 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xe8, 0xec, 0xe8, 0x60, 0x60, 0x60, - 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, - 0x08, 0x08, 0x08, 0x80, 0x84, 0x80, 0xf0, 0xf4, 0xf0, 0x88, 0x88, 0x88, - 0x48, 0x48, 0x48, 0xd8, 0xdc, 0xd8, 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa0, 0x74, 0x08, - 0x98, 0x6c, 0x10, 0x78, 0x58, 0x10, 0x40, 0x28, 0x00, 0x10, 0x08, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x18, 0x0c, 0x00, 0x38, 0x24, 0x00, 0x88, 0x68, 0x18, 0xa8, 0x84, 0x18, - 0xb0, 0x88, 0x08, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x94, 0x08, 0xb0, 0x8c, 0x18, - 0x78, 0x64, 0x18, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0x98, 0x9c, 0x98, - 0x10, 0x10, 0x10, 0x18, 0x1c, 0x18, 0xb8, 0xb8, 0xb8, 0xf8, 0xf8, 0xf8, - 0x78, 0x7c, 0x78, 0xd8, 0xdc, 0xd8, 0x98, 0x9c, 0x98, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0xe8, 0xec, 0xe8, 0x58, 0x5c, 0x58, - 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0xe8, 0xe8, 0xe8, 0xd0, 0xd4, 0xd0, - 0x80, 0x84, 0x80, 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xc8, 0xcc, 0xc8, 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xf0, 0xf0, 0xf0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x60, 0x60, 0xf0, 0xf0, 0xf0, 0x78, 0x7c, 0x78, 0xa8, 0xac, 0xa8, - 0xe8, 0xe8, 0xe8, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x60, 0x60, 0xf8, 0xf8, 0xf8, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0xe8, 0xec, 0xe8, 0x58, 0x58, 0x58, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, - 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, - 0x68, 0x6c, 0x68, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0xc8, 0xcc, 0xc8, - 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xe8, 0xec, 0xe8, 0x60, 0x60, 0x60, - 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0x98, 0x9c, 0x98, - 0x00, 0x00, 0x00, 0x20, 0x24, 0x20, 0xc0, 0xc0, 0xc0, 0xe0, 0xe4, 0xe0, - 0x90, 0x90, 0x90, 0xe0, 0xe0, 0xe0, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa0, 0x74, 0x08, 0x98, 0x70, 0x18, - 0x78, 0x54, 0x10, 0x38, 0x20, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x38, 0x28, 0x00, 0x78, 0x60, 0x10, - 0xa8, 0x84, 0x18, 0xb0, 0x8c, 0x08, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x08, 0xb0, 0x8c, 0x18, - 0x80, 0x68, 0x18, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xc0, 0xc0, 0xc0, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x48, 0x4c, 0x48, 0xe0, 0xe0, 0xe0, - 0xe8, 0xec, 0xe8, 0xf0, 0xf0, 0xf0, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0xe8, 0xec, 0xe8, 0x60, 0x60, 0x60, - 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x88, 0x88, 0x88, 0xf8, 0xf8, 0xf8, - 0xe0, 0xe0, 0xe0, 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0xc0, 0xc4, 0xc0, 0xd0, 0xd0, 0xd0, 0x20, 0x24, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, - 0xe8, 0xe8, 0xe8, 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x2c, 0x28, 0xd0, 0xd4, 0xd0, 0xe0, 0xe4, 0xe0, 0xe0, 0xe0, 0xe0, - 0x98, 0x9c, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0xbc, 0xb8, 0xf8, 0xfc, 0xf8, 0xd8, 0xdc, 0xd8, 0xd0, 0xd0, 0xd0, - 0xd0, 0xd0, 0xd0, 0xd8, 0xdc, 0xd8, 0xf8, 0xfc, 0xf8, 0x98, 0x98, 0x98, - 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, - 0xf8, 0xfc, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, - 0x68, 0x6c, 0x68, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xc0, 0xc4, 0xc0, - 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, 0xe8, 0xe8, 0xe8, 0x50, 0x50, 0x50, - 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x40, 0xf8, 0xf8, 0xf8, - 0xe8, 0xec, 0xe8, 0xf0, 0xf4, 0xf0, 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa0, 0x74, 0x08, 0x98, 0x6c, 0x18, 0x78, 0x58, 0x18, - 0x28, 0x14, 0x00, 0x10, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x28, 0x1c, 0x00, - 0x70, 0x5c, 0x10, 0xa8, 0x88, 0x18, 0xb0, 0x8c, 0x08, 0xb8, 0x90, 0x00, - 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x08, 0xb8, 0x90, 0x08, 0xb0, 0x8c, 0x18, - 0x80, 0x68, 0x18, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x20, 0x20, 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0x98, 0x9c, 0x98, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x74, 0x70, - 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0xe8, 0xec, 0xe8, 0x60, 0x60, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xb8, 0xb8, 0xb8, - 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x98, 0x98, 0x98, 0xe8, 0xe8, 0xe8, 0x60, 0x64, 0x60, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, 0x20, 0xd0, 0xd0, 0xd0, - 0xd0, 0xd4, 0xd0, 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xa0, 0xa0, 0xa0, 0xf8, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, - 0x48, 0x4c, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x18, - 0xf8, 0xfc, 0xf8, 0xd8, 0xd8, 0xd8, 0xa8, 0xac, 0xa8, 0xa8, 0xac, 0xa8, - 0xa8, 0xac, 0xa8, 0xa8, 0xac, 0xa8, 0xd8, 0xdc, 0xd8, 0xd8, 0xdc, 0xd8, - 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xf8, 0xfc, 0xf8, 0x78, 0x7c, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, - 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x98, 0x98, - 0xe8, 0xec, 0xe8, 0x60, 0x64, 0x60, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x24, 0x20, 0xd0, 0xd0, 0xd0, 0xd0, 0xd4, 0xd0, 0x28, 0x2c, 0x28, - 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, - 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xf8, 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa0, 0x74, 0x08, 0x98, 0x70, 0x10, 0x78, 0x54, 0x10, 0x30, 0x1c, 0x00, - 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, - 0x28, 0x1c, 0x00, 0x78, 0x64, 0x18, 0xa8, 0x88, 0x18, 0xb0, 0x90, 0x10, - 0xb8, 0x90, 0x08, 0xb8, 0x90, 0x08, 0xb8, 0x94, 0x08, 0xb0, 0x90, 0x18, - 0x80, 0x68, 0x20, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x1c, 0x18, 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, - 0xc8, 0xc8, 0xc8, 0xf8, 0xfc, 0xf8, 0x98, 0x9c, 0x98, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x58, 0x5c, 0x58, 0xe8, 0xec, 0xe8, 0x60, 0x60, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x38, - 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0x34, 0x30, 0xe8, 0xe8, 0xe8, 0xd8, 0xd8, 0xd8, - 0x80, 0x84, 0x80, 0x70, 0x74, 0x70, 0xb8, 0xb8, 0xb8, 0xf8, 0xf8, 0xf8, - 0x78, 0x7c, 0x78, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0x54, 0x50, 0xf8, 0xfc, 0xf8, 0xd8, 0xd8, 0xd8, - 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x74, 0x70, - 0xf0, 0xf0, 0xf0, 0x68, 0x68, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0xf8, 0xf8, 0xf8, - 0x68, 0x68, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xf8, 0xfc, 0xf8, 0x78, 0x7c, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, - 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x34, 0x30, - 0xe8, 0xe8, 0xe8, 0xd8, 0xd8, 0xd8, 0x80, 0x84, 0x80, 0x70, 0x74, 0x70, - 0xb8, 0xb8, 0xb8, 0xf8, 0xf8, 0xf8, 0x78, 0x7c, 0x78, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, 0x20, - 0xc0, 0xc0, 0xc0, 0xf8, 0xfc, 0xf8, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x08, - 0x98, 0x70, 0x10, 0x78, 0x5c, 0x10, 0x30, 0x20, 0x00, 0x10, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x30, 0x24, 0x00, 0x80, 0x6c, 0x18, 0xa8, 0x88, 0x20, - 0xb8, 0x90, 0x10, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xb0, 0x8c, 0x18, - 0x80, 0x68, 0x20, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x1c, 0x18, 0xa8, 0xb0, 0xb0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xec, 0xe8, 0x90, 0x94, 0x90, - 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x4c, 0x48, 0xe0, 0xe0, 0xe0, 0x90, 0x94, 0x90, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x58, 0x58, 0x58, 0xd8, 0xdc, 0xd8, 0x58, 0x58, 0x58, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x98, 0x98, 0x98, 0xe8, 0xec, 0xe8, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x40, 0xb0, 0xb4, 0xb0, - 0xe8, 0xe8, 0xe8, 0xe0, 0xe4, 0xe0, 0xd8, 0xd8, 0xd8, 0x78, 0x78, 0x78, - 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0xe0, 0xe4, 0xe0, 0x90, 0x94, 0x90, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x08, 0x0c, 0x08, 0xb0, 0xb0, 0xb0, - 0xc8, 0xc8, 0xc8, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x34, 0x30, 0xd8, 0xd8, 0xd8, - 0xb0, 0xb0, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, - 0xe8, 0xec, 0xe8, 0x70, 0x74, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0xe8, 0xec, 0xe8, - 0x60, 0x64, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x48, 0x48, 0xb0, 0xb4, 0xb0, 0xe8, 0xe8, 0xe8, 0xe0, 0xe4, 0xe0, - 0xd8, 0xd8, 0xd8, 0x78, 0x78, 0x78, 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, 0xc8, 0xcc, 0xc8, 0x90, 0x94, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x5c, 0x58, 0xd8, 0xdc, 0xd8, 0x80, 0x84, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, 0xa0, 0x74, 0x08, - 0x88, 0x64, 0x18, 0x30, 0x20, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x10, 0x04, 0x00, - 0x10, 0x08, 0x00, 0x10, 0x08, 0x00, 0x10, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x38, 0x28, 0x00, 0x88, 0x70, 0x20, - 0xb0, 0x8c, 0x20, 0xb8, 0x94, 0x10, 0xb8, 0x94, 0x10, 0xb0, 0x90, 0x20, - 0x80, 0x68, 0x20, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x1c, 0x18, 0x20, 0x24, 0x20, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x24, 0x20, - 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa0, 0x74, 0x08, 0x90, 0x6c, 0x10, - 0x50, 0x38, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x18, 0x0c, 0x00, 0x28, 0x18, 0x00, - 0x38, 0x28, 0x00, 0x40, 0x30, 0x00, 0x50, 0x3c, 0x00, 0x50, 0x3c, 0x00, - 0x58, 0x3c, 0x00, 0x58, 0x40, 0x00, 0x48, 0x30, 0x00, 0x38, 0x28, 0x00, - 0x28, 0x1c, 0x00, 0x18, 0x10, 0x00, 0x10, 0x0c, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x48, 0x34, 0x00, - 0xa0, 0x88, 0x28, 0xb0, 0x90, 0x18, 0xb8, 0x94, 0x18, 0xb0, 0x90, 0x20, - 0x80, 0x68, 0x20, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa0, 0x78, 0x08, 0x98, 0x70, 0x10, 0x60, 0x48, 0x08, - 0x20, 0x10, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x0c, 0x00, 0x20, 0x14, 0x00, - 0x38, 0x24, 0x00, 0x58, 0x44, 0x08, 0x78, 0x5c, 0x18, 0x80, 0x68, 0x20, - 0x88, 0x6c, 0x18, 0x90, 0x74, 0x18, 0x98, 0x78, 0x18, 0x98, 0x78, 0x18, - 0x98, 0x78, 0x18, 0x98, 0x78, 0x18, 0x98, 0x74, 0x18, 0x90, 0x70, 0x18, - 0x88, 0x6c, 0x20, 0x78, 0x60, 0x20, 0x58, 0x48, 0x08, 0x38, 0x28, 0x00, - 0x20, 0x14, 0x00, 0x18, 0x0c, 0x00, 0x08, 0x08, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x0c, 0x00, - 0x68, 0x50, 0x08, 0xa8, 0x8c, 0x28, 0xb8, 0x90, 0x20, 0xb0, 0x90, 0x28, - 0x80, 0x68, 0x28, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0x98, 0x74, 0x10, 0x78, 0x58, 0x10, 0x30, 0x1c, 0x00, - 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x18, 0x0c, 0x00, 0x38, 0x24, 0x00, 0x60, 0x48, 0x00, 0x88, 0x68, 0x10, - 0x98, 0x78, 0x18, 0xa0, 0x7c, 0x10, 0xa0, 0x7c, 0x10, 0xa8, 0x80, 0x10, - 0xa8, 0x80, 0x08, 0xa8, 0x80, 0x08, 0xa8, 0x84, 0x08, 0xa8, 0x84, 0x08, - 0xa8, 0x84, 0x08, 0xb0, 0x84, 0x08, 0xa8, 0x84, 0x08, 0xa8, 0x84, 0x08, - 0xa8, 0x84, 0x10, 0xa8, 0x80, 0x10, 0xa8, 0x80, 0x18, 0xa0, 0x80, 0x20, - 0x88, 0x6c, 0x18, 0x60, 0x48, 0x00, 0x38, 0x28, 0x00, 0x18, 0x10, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x28, 0x1c, 0x00, 0x78, 0x68, 0x20, 0xb0, 0x8c, 0x28, 0xb0, 0x90, 0x28, - 0x80, 0x68, 0x28, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x74, 0x00, 0xb0, 0x78, 0x00, 0xb0, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa0, 0x74, 0x08, 0x90, 0x6c, 0x18, 0x40, 0x28, 0x00, 0x10, 0x08, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x08, 0x00, 0x30, 0x20, 0x00, - 0x58, 0x48, 0x08, 0x80, 0x68, 0x18, 0xa0, 0x7c, 0x18, 0xa8, 0x80, 0x10, - 0xa8, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x88, 0x00, 0xb0, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb0, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb0, 0x88, 0x08, - 0xb0, 0x88, 0x10, 0xa0, 0x84, 0x18, 0x90, 0x70, 0x18, 0x60, 0x4c, 0x10, - 0x30, 0x24, 0x00, 0x18, 0x0c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x40, 0x30, 0x00, 0x98, 0x80, 0x28, 0xa8, 0x90, 0x38, - 0x80, 0x68, 0x28, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xb0, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xa0, 0x78, 0x08, - 0x98, 0x70, 0x10, 0x68, 0x4c, 0x08, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x20, 0x14, 0x00, 0x50, 0x38, 0x00, 0x88, 0x6c, 0x18, - 0x98, 0x78, 0x10, 0xa8, 0x80, 0x10, 0xa8, 0x80, 0x08, 0xb0, 0x84, 0x00, - 0xb8, 0x88, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb0, 0x88, 0x08, 0xa8, 0x88, 0x08, 0xa0, 0x84, 0x18, - 0x90, 0x70, 0x18, 0x58, 0x44, 0x00, 0x20, 0x14, 0x00, 0x10, 0x08, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x68, 0x54, 0x18, 0xa0, 0x8c, 0x40, - 0x78, 0x68, 0x30, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa0, 0x78, 0x08, - 0x80, 0x60, 0x18, 0x38, 0x24, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x30, 0x24, 0x00, 0x70, 0x54, 0x10, 0x98, 0x78, 0x18, 0xa8, 0x80, 0x10, - 0xa8, 0x84, 0x08, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb0, 0x84, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb0, 0x8c, 0x08, - 0xb0, 0x88, 0x10, 0xa0, 0x84, 0x20, 0x70, 0x5c, 0x18, 0x38, 0x28, 0x00, - 0x18, 0x0c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x20, 0x14, 0x00, 0x90, 0x7c, 0x48, - 0x78, 0x68, 0x38, 0x20, 0x18, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x40, 0x40, 0x40, - 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x28, 0x2c, 0x28, 0x08, 0x08, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, - 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, - 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x44, 0x40, 0x40, 0x40, 0x40, 0x08, 0x08, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, - 0x40, 0x40, 0x40, 0x40, 0x44, 0x40, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, - 0x40, 0x44, 0x40, 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, - 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, 0x48, 0x48, 0x48, - 0x10, 0x14, 0x10, 0x00, 0x00, 0x00, 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, - 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, - 0x50, 0x50, 0x50, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, - 0x48, 0x4c, 0x48, 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, 0x50, 0x54, 0x50, - 0x50, 0x54, 0x50, 0x40, 0x44, 0x40, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x10, 0x48, 0x48, 0x48, - 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, 0x20, - 0x50, 0x50, 0x50, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x50, 0x54, 0x50, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x30, 0x30, 0x30, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, - 0x38, 0x3c, 0x38, 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x78, 0x00, 0xb0, 0x78, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x78, 0x00, 0x98, 0x70, 0x10, - 0x58, 0x40, 0x08, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x08, 0x00, 0x40, 0x28, 0x00, - 0x80, 0x64, 0x18, 0xa0, 0x7c, 0x18, 0xa8, 0x80, 0x08, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb0, 0x88, 0x00, 0xb0, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb0, 0x8c, 0x00, 0xb0, 0x8c, 0x08, 0xa8, 0x84, 0x18, 0x88, 0x6c, 0x18, - 0x48, 0x34, 0x00, 0x10, 0x0c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x50, 0x48, 0x28, - 0x70, 0x64, 0x40, 0x20, 0x18, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x90, 0x94, 0x90, 0xe0, 0xe4, 0xe0, - 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xc8, 0xcc, 0xc8, 0x70, 0x70, 0x70, - 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, - 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xb8, 0xbc, 0xb8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc8, 0xcc, 0xc8, 0xe8, 0xe8, 0xe8, 0x50, 0x50, 0x50, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, - 0xc0, 0xc0, 0xc0, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, - 0xc8, 0xcc, 0xc8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, - 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xe0, 0xe0, 0xe0, - 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, - 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, - 0xe8, 0xec, 0xe8, 0x58, 0x5c, 0x58, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xd8, 0xdc, 0xd8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, - 0xf8, 0xfc, 0xf8, 0xe8, 0xe8, 0xe8, 0xa8, 0xa8, 0xa8, 0x20, 0x24, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xe0, 0xe0, 0xe0, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x98, 0x9c, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x7c, 0x78, 0xf8, 0xfc, 0xf8, - 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c, 0x08, - 0x78, 0x78, 0x78, 0xd0, 0xd0, 0xd0, 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xf8, - 0xe0, 0xe0, 0xe0, 0x88, 0x8c, 0x88, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x10, 0x88, 0x64, 0x10, - 0x30, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x10, 0x08, 0x00, 0x40, 0x2c, 0x00, 0x80, 0x68, 0x18, - 0xa0, 0x7c, 0x10, 0xb0, 0x84, 0x08, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x08, 0xa8, 0x88, 0x18, - 0x98, 0x7c, 0x28, 0x40, 0x30, 0x00, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x28, 0x20, 0x08, - 0x50, 0x4c, 0x38, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x10, 0x90, 0x94, 0x90, 0xf0, 0xf4, 0xf0, 0x90, 0x90, 0x90, - 0x30, 0x34, 0x30, 0x38, 0x38, 0x38, 0xd0, 0xd0, 0xd0, 0xf0, 0xf0, 0xf0, - 0x50, 0x54, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xe0, 0xe4, 0xe0, 0x58, 0x5c, 0x58, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc8, 0xcc, 0xc8, 0xf8, 0xfc, 0xf8, 0xd0, 0xd4, 0xd0, - 0x10, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, - 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x20, 0x20, 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xc8, 0xc8, 0xc8, - 0xd0, 0xd4, 0xd0, 0x40, 0x44, 0x40, 0x28, 0x28, 0x28, 0x20, 0x24, 0x20, - 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa8, 0xac, 0xa8, - 0x30, 0x34, 0x30, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x20, 0x24, 0x20, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xd8, 0xdc, 0xd8, 0xa8, 0xac, 0xa8, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0x28, 0x80, 0x84, 0x80, 0xe8, 0xec, 0xe8, 0xa8, 0xa8, 0xa8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x38, 0xd8, 0xdc, 0xd8, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x6c, 0x68, - 0xf8, 0xfc, 0xf8, 0xf0, 0xf4, 0xf0, 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x7c, 0x78, 0xf8, 0xfc, 0xf8, - 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x68, - 0xf0, 0xf0, 0xf0, 0xb8, 0xbc, 0xb8, 0x38, 0x38, 0x38, 0x30, 0x34, 0x30, - 0xa0, 0xa0, 0xa0, 0xf0, 0xf4, 0xf0, 0x88, 0x88, 0x88, 0x08, 0x08, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x78, 0x08, 0x98, 0x74, 0x18, 0x60, 0x44, 0x08, - 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x48, 0x34, 0x00, 0x88, 0x6c, 0x18, 0xa0, 0x7c, 0x10, - 0xa8, 0x80, 0x08, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x08, 0xb8, 0x8c, 0x10, - 0xb0, 0x8c, 0x18, 0x98, 0x7c, 0x20, 0x48, 0x38, 0x00, 0x10, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x20, 0x20, 0x10, 0x18, 0x10, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x2c, 0x28, 0xd8, 0xdc, 0xd8, 0xb8, 0xbc, 0xb8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x34, 0x30, 0xd0, 0xd0, 0xd0, - 0xb0, 0xb0, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xd8, 0xdc, 0xd8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc8, 0xcc, 0xc8, 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xf8, - 0x88, 0x8c, 0x88, 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x18, - 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, - 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0x98, 0x9c, 0x98, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xe0, 0xe0, 0xe0, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xb0, 0xb0, 0xb0, 0xe8, 0xec, 0xe8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xe0, 0xe0, 0xe0, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xc8, 0xcc, 0xc8, 0x28, 0x2c, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x7c, 0x78, 0xf8, 0xfc, 0xf8, - 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xd0, 0xd0, - 0xd0, 0xd0, 0xd0, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x08, 0xc0, 0xc4, 0xc0, 0xc0, 0xc4, 0xc0, 0x28, 0x28, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x7c, 0x00, 0xa0, 0x74, 0x08, 0x90, 0x6c, 0x20, 0x30, 0x1c, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x30, 0x20, 0x00, 0x88, 0x68, 0x20, 0xa0, 0x7c, 0x10, 0xb0, 0x84, 0x08, - 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, - 0xc0, 0x94, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x08, 0xb8, 0x90, 0x08, - 0xb8, 0x94, 0x10, 0xb0, 0x8c, 0x18, 0x88, 0x74, 0x20, 0x38, 0x2c, 0x00, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x3c, 0x38, 0xf8, 0xf8, 0xf8, 0x78, 0x7c, 0x78, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x38, 0x3c, 0x38, - 0x40, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xd8, 0xdc, 0xd8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc8, 0xcc, 0xc8, 0xd8, 0xd8, 0xd8, 0xd8, 0xdc, 0xd8, - 0xe0, 0xe4, 0xe0, 0x50, 0x54, 0x50, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, - 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, - 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x14, 0x10, 0xa8, 0xa8, 0xa8, 0xf0, 0xf0, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x6c, 0x68, - 0xf8, 0xfc, 0xf8, 0xb8, 0xb8, 0xb8, 0xf8, 0xf8, 0xf8, 0x90, 0x94, 0x90, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xf8, 0xfc, 0xf8, - 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf4, 0xf0, - 0xa8, 0xa8, 0xa8, 0x10, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0x34, 0x30, 0x40, 0x44, 0x40, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x7c, 0x00, 0xa0, 0x74, 0x10, 0x70, 0x54, 0x18, 0x18, 0x08, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x28, 0x18, 0x00, - 0x78, 0x5c, 0x10, 0xa0, 0x80, 0x18, 0xa8, 0x80, 0x08, 0xb0, 0x84, 0x00, - 0xb0, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, - 0xb8, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, 0xb8, 0x94, 0x08, - 0xc0, 0x94, 0x10, 0xb8, 0x90, 0x10, 0xa8, 0x8c, 0x20, 0x88, 0x70, 0x20, - 0x20, 0x14, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, 0x68, 0x6c, 0x68, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xe8, 0xe8, 0xe8, 0x70, 0x74, 0x70, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc8, 0xcc, 0xc8, 0xc0, 0xc0, 0xc0, 0x58, 0x5c, 0x58, - 0xf0, 0xf4, 0xf0, 0xc0, 0xc0, 0xc0, 0x28, 0x28, 0x28, 0x20, 0x20, 0x20, - 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, - 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xb8, 0xb8, 0xb8, - 0x50, 0x54, 0x50, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xd8, 0xdc, 0xd8, 0xa8, 0xa8, 0xa8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x70, 0x74, 0x70, 0xe8, 0xe8, 0xe8, 0xa8, 0xa8, 0xa8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, - 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x48, 0x4c, 0x48, 0xc8, 0xc8, 0xc8, 0xe8, 0xec, 0xe8, - 0x50, 0x54, 0x50, 0x00, 0x00, 0x00, 0x78, 0x7c, 0x78, 0xf8, 0xfc, 0xf8, - 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, - 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x7c, 0x08, 0x98, 0x74, 0x18, 0x48, 0x34, 0x00, 0x10, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x10, 0x00, 0x60, 0x48, 0x10, - 0xa0, 0x7c, 0x18, 0xb0, 0x80, 0x08, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x08, 0xc0, 0x90, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x10, 0xb8, 0x94, 0x18, 0xa8, 0x8c, 0x28, - 0x68, 0x54, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xf8, 0xf8, 0xf8, 0xe8, 0xec, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, - 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc8, 0xcc, 0xc8, 0xc0, 0xc0, 0xc0, 0x18, 0x1c, 0x18, - 0x80, 0x84, 0x80, 0xf8, 0xf8, 0xf8, 0x98, 0x98, 0x98, 0x20, 0x24, 0x20, - 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, - 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, - 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, - 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xd8, 0xdc, 0xd8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, - 0xf8, 0xfc, 0xf8, 0xf0, 0xf0, 0xf0, 0xa8, 0xac, 0xa8, 0x28, 0x28, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xe0, 0xe0, 0xe0, - 0xe0, 0xe0, 0xe0, 0x18, 0x1c, 0x18, 0x78, 0x7c, 0x78, 0xf8, 0xfc, 0xf8, - 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, - 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x78, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x7c, 0x08, 0x80, 0x64, 0x10, 0x30, 0x1c, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x40, 0x2c, 0x00, 0x90, 0x70, 0x18, - 0xa8, 0x80, 0x10, 0xb0, 0x88, 0x00, 0xb8, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x98, 0x10, 0xb8, 0x98, 0x10, 0xb8, 0x98, 0x18, 0xb0, 0x94, 0x20, - 0x98, 0x80, 0x30, 0x40, 0x34, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x40, 0x40, 0xf8, 0xfc, 0xf8, 0x68, 0x6c, 0x68, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xe8, 0xe8, 0xe8, 0x78, 0x78, 0x78, 0x48, 0x4c, 0x48, 0x48, 0x4c, 0x48, - 0x48, 0x4c, 0x48, 0x48, 0x4c, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc8, 0xcc, 0xc8, 0xb8, 0xbc, 0xb8, 0x20, 0x20, 0x20, - 0x20, 0x24, 0x20, 0xb8, 0xbc, 0xb8, 0xf0, 0xf4, 0xf0, 0x60, 0x64, 0x60, - 0xb8, 0xbc, 0xb8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, - 0xd0, 0xd0, 0xd0, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xb8, 0xbc, 0xb8, - 0x58, 0x58, 0x58, 0x48, 0x4c, 0x48, 0x48, 0x4c, 0x48, 0x48, 0x4c, 0x48, - 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, - 0xd8, 0xdc, 0xd8, 0xc0, 0xc4, 0xc0, 0x60, 0x64, 0x60, 0x78, 0x78, 0x78, - 0xe0, 0xe0, 0xe0, 0xd8, 0xd8, 0xd8, 0x30, 0x34, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, - 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x6c, 0x68, - 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x08, 0x0c, 0x08, 0x80, 0x80, 0x80, - 0xf0, 0xf4, 0xf0, 0x90, 0x90, 0x90, 0x88, 0x88, 0x88, 0xf8, 0xfc, 0xf8, - 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, - 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x70, 0x50, 0x08, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x78, 0x60, 0x18, 0xa0, 0x80, 0x10, - 0xb0, 0x84, 0x08, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb0, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xb8, 0x94, 0x00, - 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xb8, 0x94, 0x20, - 0xb0, 0x90, 0x28, 0x78, 0x64, 0x18, 0x20, 0x14, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x3c, 0x38, 0xf8, 0xfc, 0xf8, 0x70, 0x74, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x14, 0x10, - 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xe0, 0xe0, 0xe0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc8, 0xcc, 0xc8, 0xc0, 0xc0, 0xc0, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x48, 0x4c, 0x48, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xd8, 0xdc, 0xd8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, - 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xa0, 0xa0, 0xa0, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, - 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x88, 0x8c, 0x88, 0xf0, 0xf0, 0xf0, 0x70, 0x70, 0x70, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, - 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, - 0xb8, 0xb8, 0xb8, 0xe8, 0xe8, 0xe8, 0xd0, 0xd4, 0xd0, 0xf8, 0xfc, 0xf8, - 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, - 0xa0, 0xa0, 0xa0, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x74, 0x18, 0x58, 0x40, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x38, 0x2c, 0x00, 0x98, 0x7c, 0x18, 0xb0, 0x84, 0x08, - 0xb0, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xb8, 0x94, 0x00, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xb8, 0x98, 0x18, - 0xb8, 0x94, 0x28, 0xa8, 0x8c, 0x38, 0x48, 0x38, 0x08, 0x08, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x2c, 0x28, 0xd8, 0xdc, 0xd8, 0xb8, 0xb8, 0xb8, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x34, 0x30, 0xd8, 0xd8, 0xd8, - 0xc0, 0xc4, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, - 0xe0, 0xe0, 0xe0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc8, 0xcc, 0xc8, 0xc0, 0xc0, 0xc0, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x78, 0x7c, 0x78, 0xf8, 0xfc, 0xf8, - 0xf8, 0xfc, 0xf8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, - 0xc8, 0xcc, 0xc8, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0x98, 0x9c, 0x98, - 0x08, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x2c, 0x30, - 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x1c, 0x18, 0xe8, 0xec, 0xe8, 0xd0, 0xd4, 0xd0, 0x28, 0x2c, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, - 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x70, 0x68, - 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x34, 0x30, 0xe8, 0xec, 0xe8, 0xf8, 0xfc, 0xf8, 0xf8, 0xfc, 0xf8, - 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xcc, 0xc8, - 0xc8, 0xd0, 0xd0, 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x08, 0xc0, 0xc4, 0xc0, 0xd8, 0xd8, 0xd8, 0x28, 0x2c, 0x28, - 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x10, 0x14, 0x18, 0x08, 0x0c, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x88, 0x6c, 0x18, 0x40, 0x2c, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x18, 0x10, 0x00, 0x68, 0x54, 0x10, 0xa8, 0x80, 0x10, 0xb0, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, - 0xc0, 0x98, 0x20, 0xb0, 0x94, 0x30, 0x80, 0x6c, 0x30, 0x18, 0x0c, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x14, 0x10, 0xa0, 0xa0, 0xa0, 0xf0, 0xf0, 0xf0, 0x78, 0x78, 0x78, - 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0xa8, 0xac, 0xa8, 0xf0, 0xf4, 0xf0, - 0x68, 0x68, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x90, - 0xe8, 0xe8, 0xe8, 0x78, 0x78, 0x78, 0x48, 0x4c, 0x48, 0x48, 0x4c, 0x48, - 0x48, 0x4c, 0x48, 0x48, 0x4c, 0x48, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xd0, 0xd0, 0xd0, 0xb8, 0xbc, 0xb8, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x10, 0xc8, 0xc8, 0xc8, - 0xf8, 0xfc, 0xf8, 0xc8, 0xcc, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, - 0xc8, 0xcc, 0xc8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfc, 0xf8, 0xb8, 0xbc, 0xb8, - 0x58, 0x58, 0x58, 0x48, 0x4c, 0x48, 0x48, 0x4c, 0x48, 0x48, 0x4c, 0x48, - 0x40, 0x48, 0x40, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x30, 0x2c, 0x30, - 0xd8, 0xdc, 0xd8, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x84, 0x80, 0xf8, 0xfc, 0xf8, 0x78, 0x7c, 0x78, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x54, 0x50, 0x90, 0x90, 0x90, - 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xd8, 0xdc, 0xd8, - 0x88, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x68, - 0xf8, 0xfc, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x84, 0x80, 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xf8, - 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x7c, 0x78, - 0xf0, 0xf0, 0xf0, 0xa0, 0xa4, 0xa0, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, - 0x78, 0x7c, 0x78, 0xf0, 0xf4, 0xf0, 0x98, 0x98, 0x98, 0x08, 0x0c, 0x08, - 0x00, 0x00, 0x00, 0x58, 0x58, 0x58, 0xb0, 0xb4, 0xb0, 0x60, 0x64, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa0, 0x7c, 0x10, - 0x80, 0x60, 0x18, 0x30, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x38, 0x2c, 0x00, 0x88, 0x70, 0x18, 0xa8, 0x80, 0x10, 0xb0, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, - 0xc0, 0x98, 0x20, 0xb8, 0x98, 0x30, 0xa8, 0x8c, 0x40, 0x30, 0x20, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0xb0, 0xb4, 0xb0, 0xe0, 0xe4, 0xe0, - 0xd8, 0xdc, 0xd8, 0xd8, 0xdc, 0xd8, 0xe0, 0xe0, 0xe0, 0x88, 0x88, 0x88, - 0x10, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x84, 0x80, - 0xe8, 0xec, 0xe8, 0xe0, 0xe4, 0xe0, 0xd8, 0xdc, 0xd8, 0xd8, 0xdc, 0xd8, - 0xd8, 0xdc, 0xd8, 0xd8, 0xdc, 0xd8, 0xa8, 0xa8, 0xa8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc0, 0xc4, 0xc0, 0xb0, 0xb4, 0xb0, 0x18, 0x1c, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x4c, 0x48, - 0xe0, 0xe4, 0xe0, 0xc0, 0xc4, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb4, 0xb0, - 0xc0, 0xc0, 0xc0, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xe8, 0xe8, 0xe8, - 0xd8, 0xe0, 0xe0, 0xd8, 0xdc, 0xd8, 0xd8, 0xdc, 0xd8, 0xd8, 0xdc, 0xd8, - 0xd0, 0xd0, 0xd0, 0x50, 0x54, 0x50, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, - 0xd0, 0xd0, 0xd0, 0x90, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0xc0, 0xc4, 0xc0, 0xd8, 0xdc, 0xd8, - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x88, 0xe8, 0xec, 0xe8, - 0x58, 0x5c, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0xd0, 0xd0, 0xd0, - 0x80, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x68, - 0xf0, 0xf0, 0xf0, 0x38, 0x3c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x20, 0x24, 0x20, 0xb8, 0xb8, 0xb8, 0xf0, 0xf0, 0xf0, - 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, - 0x90, 0x94, 0x90, 0xe0, 0xe4, 0xe0, 0xd8, 0xdc, 0xe0, 0xd8, 0xdc, 0xe0, - 0xe0, 0xe4, 0xe0, 0xa8, 0xac, 0xa8, 0x20, 0x24, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0xf0, 0xf0, 0xf0, 0x80, 0x84, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, - 0x70, 0x58, 0x18, 0x20, 0x10, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, - 0x58, 0x44, 0x00, 0xa0, 0x7c, 0x18, 0xb0, 0x84, 0x08, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xb8, 0x98, 0x28, 0xb0, 0x90, 0x40, 0x60, 0x50, 0x18, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x50, 0x50, 0x50, - 0x70, 0x74, 0x70, 0x70, 0x70, 0x70, 0x30, 0x30, 0x30, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x2c, 0x28, - 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, - 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x38, 0x3c, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x38, 0x3c, 0x38, 0x08, 0x08, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, - 0x38, 0x3c, 0x38, 0x40, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x38, - 0x40, 0x40, 0x40, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, - 0x48, 0x50, 0x50, 0x48, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, - 0x48, 0x4c, 0x48, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, - 0x48, 0x44, 0x40, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x30, 0x30, 0x30, 0x50, 0x50, 0x50, - 0x10, 0x14, 0x10, 0x00, 0x00, 0x00, 0x88, 0x90, 0x90, 0xe8, 0xec, 0xe8, - 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x10, 0x40, 0x44, 0x40, - 0x28, 0x2c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, 0x20, - 0x50, 0x50, 0x50, 0x10, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x50, 0x50, 0x50, - 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x38, 0x34, 0x30, 0x70, 0x70, 0x70, 0x70, 0x74, 0x70, - 0x48, 0x48, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x50, 0x50, 0x50, 0x28, 0x2c, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, - 0x60, 0x48, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x14, 0x00, - 0x78, 0x58, 0x08, 0xa8, 0x80, 0x10, 0xb0, 0x88, 0x08, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x90, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x28, 0xc0, 0x98, 0x28, 0xb8, 0x94, 0x38, 0x88, 0x70, 0x30, - 0x18, 0x10, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x90, 0xb8, 0xbc, 0xb8, - 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x74, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x18, - 0x48, 0x38, 0x00, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x30, 0x20, 0x00, - 0x88, 0x6c, 0x10, 0xa8, 0x84, 0x08, 0xb0, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x90, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xb8, 0x98, 0x38, 0x98, 0x80, 0x38, - 0x30, 0x24, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x48, 0x48, 0x18, 0x1c, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x74, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x18, - 0x40, 0x2c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x38, 0x2c, 0x00, - 0x98, 0x7c, 0x20, 0xb0, 0x84, 0x08, 0xb0, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x00, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc8, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x30, 0xa0, 0x88, 0x38, - 0x40, 0x34, 0x08, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa0, 0x7c, 0x18, - 0x38, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x48, 0x38, 0x08, - 0xa0, 0x80, 0x20, 0xb0, 0x88, 0x08, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x90, 0x00, 0xb8, 0x94, 0x00, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x30, 0xb0, 0x94, 0x40, - 0x58, 0x48, 0x18, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, 0x98, 0x7c, 0x18, - 0x30, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x58, 0x40, 0x08, - 0xa0, 0x80, 0x18, 0xb0, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x90, 0x00, - 0xc0, 0x94, 0x00, 0xb8, 0x94, 0x00, 0xb8, 0x94, 0x00, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x30, 0xc0, 0x9c, 0x30, 0xc0, 0x9c, 0x30, 0xb8, 0x98, 0x40, - 0x60, 0x50, 0x20, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa0, 0x74, 0x08, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xa0, 0x7c, 0x18, - 0x30, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x68, 0x50, 0x10, - 0xa8, 0x84, 0x18, 0xb0, 0x88, 0x08, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x90, 0x00, - 0xb8, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc8, 0xa0, 0x28, 0xc8, 0xa0, 0x28, 0xc8, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x38, 0xb8, 0x98, 0x48, - 0x68, 0x54, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa8, 0x74, 0x08, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xa0, 0x78, 0x18, - 0x30, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x68, 0x54, 0x10, - 0xa8, 0x84, 0x18, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xb8, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x98, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xb8, 0x9c, 0x48, - 0x70, 0x60, 0x28, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x10, 0x04, 0x00, 0x18, 0x0c, 0x00, 0x18, 0x0c, 0x00, - 0x20, 0x10, 0x00, 0x28, 0x18, 0x00, 0x30, 0x1c, 0x00, 0x30, 0x1c, 0x00, - 0x28, 0x14, 0x00, 0x20, 0x10, 0x00, 0x20, 0x0c, 0x00, 0x18, 0x08, 0x00, - 0x10, 0x08, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x6c, 0x18, 0xa8, 0x74, 0x08, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xa0, 0x7c, 0x18, - 0x30, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x68, 0x54, 0x10, - 0xa8, 0x84, 0x18, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x38, 0xb8, 0x9c, 0x48, - 0x70, 0x60, 0x30, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x20, 0x18, 0x00, 0x28, 0x1c, 0x00, - 0x28, 0x18, 0x00, 0x28, 0x18, 0x00, 0x28, 0x18, 0x00, 0x28, 0x18, 0x00, - 0x28, 0x1c, 0x00, 0x20, 0x18, 0x00, 0x18, 0x10, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x18, 0x0c, 0x00, 0x20, 0x14, 0x00, - 0x30, 0x20, 0x00, 0x48, 0x34, 0x00, 0x60, 0x48, 0x10, 0x70, 0x5c, 0x20, - 0x80, 0x64, 0x20, 0x88, 0x68, 0x20, 0x88, 0x68, 0x20, 0x88, 0x6c, 0x20, - 0x80, 0x64, 0x20, 0x80, 0x64, 0x20, 0x70, 0x58, 0x18, 0x60, 0x48, 0x10, - 0x48, 0x34, 0x00, 0x30, 0x20, 0x00, 0x20, 0x14, 0x00, 0x18, 0x0c, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x70, 0x18, 0xa8, 0x74, 0x08, 0xa8, 0x78, 0x00, - 0xa8, 0x78, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x88, 0x00, 0xb0, 0x84, 0x00, 0xa0, 0x7c, 0x18, - 0x30, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x60, 0x50, 0x10, - 0xa8, 0x84, 0x18, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xb8, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, 0xb8, 0x9c, 0x48, - 0x60, 0x54, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x50, 0x40, 0x18, 0x88, 0x70, 0x28, 0x98, 0x78, 0x18, - 0x98, 0x74, 0x18, 0x98, 0x74, 0x18, 0x98, 0x74, 0x18, 0x98, 0x78, 0x18, - 0x98, 0x78, 0x18, 0x90, 0x74, 0x28, 0x70, 0x58, 0x28, 0x18, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x20, 0x14, 0x00, 0x40, 0x2c, 0x00, 0x60, 0x44, 0x00, 0x80, 0x60, 0x10, - 0x98, 0x74, 0x18, 0xa0, 0x78, 0x18, 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x10, - 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x10, 0xa0, 0x7c, 0x10, 0xa0, 0x7c, 0x08, - 0xa0, 0x7c, 0x10, 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x10, - 0xa0, 0x78, 0x18, 0x98, 0x74, 0x18, 0x78, 0x5c, 0x10, 0x60, 0x44, 0x08, - 0x40, 0x2c, 0x00, 0x20, 0x10, 0x00, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x70, 0x18, 0xa8, 0x78, 0x08, 0xb0, 0x7c, 0x00, - 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb0, 0x84, 0x00, 0xa0, 0x7c, 0x18, - 0x30, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x58, 0x44, 0x08, - 0xa0, 0x84, 0x18, 0xb0, 0x8c, 0x08, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x90, 0x00, - 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc8, 0xa4, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc0, 0xa4, 0x38, 0xc0, 0xa0, 0x40, 0xb8, 0x9c, 0x50, - 0x60, 0x50, 0x28, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x40, 0x10, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x00, - 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x18, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x10, 0x04, 0x00, 0x18, 0x0c, 0x00, 0x38, 0x28, 0x00, - 0x70, 0x54, 0x10, 0x88, 0x6c, 0x18, 0x98, 0x78, 0x18, 0xa0, 0x7c, 0x08, - 0xa8, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa8, 0x78, 0x10, 0x98, 0x78, 0x18, - 0x88, 0x6c, 0x18, 0x68, 0x50, 0x10, 0x48, 0x34, 0x00, 0x20, 0x10, 0x00, - 0x10, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x70, 0x18, 0xa8, 0x78, 0x08, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xa0, 0x7c, 0x18, - 0x38, 0x28, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x48, 0x38, 0x00, - 0xa0, 0x84, 0x20, 0xb0, 0x8c, 0x08, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, - 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc8, 0xa0, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc0, 0xa0, 0x40, 0xb0, 0x94, 0x48, - 0x50, 0x44, 0x20, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x40, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x60, 0x18, 0x18, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x18, 0x0c, 0x00, 0x38, 0x24, 0x00, 0x70, 0x54, 0x10, 0x90, 0x70, 0x18, - 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, 0x90, 0x70, 0x18, 0x78, 0x5c, 0x18, - 0x38, 0x28, 0x00, 0x20, 0x10, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x40, 0x00, 0x98, 0x70, 0x18, 0xa8, 0x78, 0x08, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb0, 0x88, 0x00, 0xb0, 0x84, 0x00, 0xa8, 0x80, 0x18, - 0x48, 0x34, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x38, 0x28, 0x00, - 0x98, 0x7c, 0x20, 0xb0, 0x8c, 0x08, 0xb8, 0x90, 0x08, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x98, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x94, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x28, 0xc8, 0xa0, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc8, 0xa0, 0x28, 0xc8, 0xa0, 0x30, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc0, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x38, 0xc0, 0xa0, 0x40, 0xc0, 0xa0, 0x48, 0xa8, 0x8c, 0x48, - 0x40, 0x34, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa0, 0x7c, 0x10, 0x78, 0x5c, 0x18, 0x18, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x20, 0x14, 0x00, - 0x50, 0x38, 0x00, 0x88, 0x6c, 0x20, 0xa0, 0x78, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x90, 0x6c, 0x20, 0x60, 0x48, 0x10, 0x30, 0x1c, 0x00, 0x10, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x44, 0x00, 0x98, 0x70, 0x18, 0xa8, 0x78, 0x08, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xa8, 0x80, 0x18, - 0x58, 0x40, 0x08, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x30, 0x20, 0x00, - 0x88, 0x70, 0x10, 0xb0, 0x8c, 0x10, 0xb8, 0x90, 0x08, 0xc0, 0x90, 0x00, - 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, - 0xc0, 0x98, 0x10, 0xb8, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x30, - 0xc0, 0x9c, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa4, 0x30, 0xc8, 0xa4, 0x38, 0xc0, 0xa0, 0x38, - 0xc0, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc0, 0xa4, 0x40, 0xc0, 0xa0, 0x48, 0x98, 0x84, 0x48, - 0x28, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x28, 0x1c, 0x00, 0x60, 0x48, 0x08, - 0x90, 0x70, 0x18, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x7c, 0x08, 0x98, 0x74, 0x18, 0x78, 0x5c, 0x18, 0x38, 0x24, 0x00, - 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x44, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x78, 0x08, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xa8, 0x80, 0x10, - 0x70, 0x54, 0x18, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x14, 0x00, - 0x70, 0x5c, 0x08, 0xb0, 0x8c, 0x18, 0xb8, 0x90, 0x10, 0xc0, 0x90, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc8, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, 0xc0, 0xa4, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc0, 0xa4, 0x48, 0xb8, 0xa0, 0x50, 0x88, 0x74, 0x40, - 0x10, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x04, 0x00, 0x28, 0x18, 0x00, 0x78, 0x60, 0x18, 0x98, 0x74, 0x18, - 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, 0x80, 0x68, 0x18, - 0x40, 0x30, 0x00, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x44, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x78, 0x08, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xa8, 0x84, 0x10, - 0x80, 0x64, 0x20, 0x20, 0x14, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x40, 0x00, 0xa0, 0x84, 0x20, 0xb8, 0x90, 0x10, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc0, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc0, 0xa4, 0x48, 0xb8, 0x9c, 0x58, 0x58, 0x48, 0x18, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x38, 0x20, 0x00, 0x78, 0x58, 0x10, 0xa0, 0x78, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa0, 0x7c, 0x08, - 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x88, 0x68, 0x18, 0x48, 0x34, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x44, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x78, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xa8, 0x84, 0x10, - 0x88, 0x6c, 0x18, 0x30, 0x24, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x38, 0x28, 0x00, 0x90, 0x74, 0x20, 0xb0, 0x8c, 0x18, 0xb8, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xb8, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x94, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x30, - 0xc0, 0x9c, 0x30, 0xc0, 0x9c, 0x30, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc0, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc0, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc0, 0xa0, 0x48, 0xb0, 0x9c, 0x60, 0x28, 0x1c, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x30, 0x1c, 0x00, - 0x78, 0x58, 0x10, 0x98, 0x74, 0x18, 0xa8, 0x78, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, 0x98, 0x74, 0x10, - 0x98, 0x74, 0x18, 0x98, 0x74, 0x20, 0x90, 0x6c, 0x18, 0x90, 0x6c, 0x18, - 0x90, 0x74, 0x20, 0x98, 0x74, 0x18, 0xa0, 0x78, 0x18, 0xa0, 0x78, 0x10, - 0xa8, 0x7c, 0x10, 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x80, 0x00, - 0xa0, 0x7c, 0x10, 0x88, 0x6c, 0x18, 0x40, 0x2c, 0x00, 0x10, 0x08, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x44, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb0, 0x88, 0x08, - 0x98, 0x78, 0x18, 0x48, 0x38, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x0c, 0x00, 0x68, 0x54, 0x18, 0xb0, 0x8c, 0x20, 0xb8, 0x94, 0x10, - 0xb8, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xb8, 0x98, 0x38, 0x98, 0x7c, 0x20, - 0xb0, 0x90, 0x30, 0xb8, 0x9c, 0x38, 0xc0, 0x9c, 0x30, 0xc0, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc0, 0xa4, 0x48, 0xc0, 0xa4, 0x50, 0x80, 0x6c, 0x40, 0x10, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x20, 0x10, 0x00, 0x70, 0x54, 0x10, - 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x98, 0x74, 0x18, 0x88, 0x68, 0x18, 0x68, 0x50, 0x10, 0x50, 0x38, 0x00, - 0x38, 0x24, 0x00, 0x30, 0x18, 0x00, 0x28, 0x18, 0x00, 0x28, 0x18, 0x00, - 0x28, 0x1c, 0x00, 0x38, 0x24, 0x00, 0x48, 0x38, 0x00, 0x70, 0x54, 0x18, - 0x88, 0x68, 0x18, 0x98, 0x70, 0x18, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x7c, 0x00, 0xa0, 0x78, 0x10, 0x80, 0x64, 0x18, 0x38, 0x28, 0x00, - 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x44, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb0, 0x8c, 0x08, - 0xa8, 0x84, 0x18, 0x60, 0x4c, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x30, 0x20, 0x00, 0xa0, 0x84, 0x28, 0xb0, 0x90, 0x18, - 0xb8, 0x94, 0x10, 0xb8, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x30, 0xa8, 0x8c, 0x38, 0x38, 0x20, 0x00, - 0x70, 0x54, 0x08, 0xb0, 0x94, 0x40, 0xc0, 0x9c, 0x38, 0xc0, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, - 0xc0, 0xa0, 0x38, 0xc0, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc0, 0xa4, 0x48, - 0xc0, 0xa4, 0x48, 0xb0, 0x98, 0x50, 0x48, 0x38, 0x10, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x18, 0x10, 0x00, 0x58, 0x40, 0x00, 0x98, 0x74, 0x18, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x08, 0xa0, 0x7c, 0x08, 0x98, 0x78, 0x10, 0x78, 0x5c, 0x08, - 0x58, 0x40, 0x00, 0x30, 0x1c, 0x00, 0x18, 0x0c, 0x00, 0x10, 0x08, 0x00, - 0x10, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x18, 0x0c, 0x00, - 0x30, 0x18, 0x00, 0x58, 0x3c, 0x00, 0x80, 0x60, 0x10, 0x98, 0x74, 0x10, - 0xa8, 0x7c, 0x10, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, 0x78, 0x58, 0x10, - 0x28, 0x18, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x44, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb0, 0x8c, 0x00, - 0xa8, 0x88, 0x10, 0x78, 0x64, 0x08, 0x28, 0x18, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x78, 0x60, 0x18, 0xa8, 0x8c, 0x28, - 0xb8, 0x94, 0x20, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xb8, 0x98, 0x38, 0x90, 0x7c, 0x30, 0x28, 0x10, 0x00, - 0x38, 0x24, 0x00, 0x90, 0x7c, 0x40, 0xb8, 0x9c, 0x40, 0xc0, 0xa0, 0x38, - 0xc8, 0xa0, 0x30, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, - 0xc0, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa4, 0x48, 0xc0, 0xa4, 0x50, - 0xc0, 0xa0, 0x58, 0x80, 0x70, 0x38, 0x20, 0x18, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x04, 0x00, 0x40, 0x2c, 0x00, 0x90, 0x6c, 0x18, 0xa0, 0x7c, 0x08, - 0xa8, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x90, 0x70, 0x18, 0x60, 0x48, 0x08, 0x28, 0x1c, 0x00, - 0x18, 0x0c, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x18, 0x08, 0x00, 0x30, 0x1c, 0x00, 0x58, 0x3c, 0x00, - 0x90, 0x6c, 0x18, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0x98, 0x74, 0x18, - 0x58, 0x40, 0x08, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x44, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, - 0xb0, 0x88, 0x08, 0x98, 0x7c, 0x18, 0x38, 0x2c, 0x00, 0x08, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x38, 0x28, 0x00, 0x90, 0x78, 0x28, - 0xb0, 0x90, 0x28, 0xb8, 0x98, 0x20, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc8, 0xa0, 0x30, 0xb8, 0x98, 0x38, 0xa8, 0x90, 0x50, 0x20, 0x10, 0x00, - 0x18, 0x0c, 0x00, 0x58, 0x48, 0x18, 0xb8, 0x98, 0x48, 0xc0, 0xa0, 0x40, - 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x48, 0xc0, 0xa4, 0x50, - 0xa0, 0x8c, 0x50, 0x40, 0x30, 0x08, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x18, 0x10, 0x00, 0x18, 0x10, 0x00, 0x20, 0x10, 0x00, - 0x20, 0x10, 0x00, 0x20, 0x10, 0x00, 0x20, 0x10, 0x00, 0x20, 0x10, 0x00, - 0x18, 0x10, 0x00, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x18, 0x10, 0x00, 0x18, 0x10, 0x00, 0x20, 0x10, 0x00, - 0x20, 0x10, 0x00, 0x20, 0x10, 0x00, 0x20, 0x10, 0x00, 0x20, 0x10, 0x00, - 0x18, 0x10, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x28, 0x18, 0x00, 0x70, 0x58, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x88, 0x64, 0x10, 0x48, 0x30, 0x00, 0x20, 0x10, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x0c, 0x00, - 0x38, 0x20, 0x00, 0x78, 0x5c, 0x10, 0xa0, 0x74, 0x10, 0xa8, 0x7c, 0x08, - 0xb0, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x88, 0x6c, 0x28, 0x30, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x44, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb8, 0x88, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb0, 0x8c, 0x08, 0xa8, 0x88, 0x18, 0x58, 0x48, 0x08, 0x18, 0x0c, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x18, 0x0c, 0x00, 0x58, 0x44, 0x10, - 0xa0, 0x88, 0x30, 0xb8, 0x98, 0x28, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc0, 0x9c, 0x38, 0xa8, 0x94, 0x50, 0x20, 0x14, 0x00, - 0x10, 0x04, 0x00, 0x18, 0x10, 0x00, 0x98, 0x84, 0x40, 0xb8, 0x9c, 0x48, - 0xc0, 0xa0, 0x40, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc0, 0xa4, 0x50, 0xb8, 0xa4, 0x58, - 0x68, 0x58, 0x28, 0x10, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x38, 0x28, 0x00, 0x68, 0x50, 0x18, 0x70, 0x54, 0x10, 0x70, 0x54, 0x08, - 0x78, 0x58, 0x08, 0x78, 0x58, 0x08, 0x78, 0x58, 0x08, 0x70, 0x54, 0x10, - 0x68, 0x50, 0x10, 0x50, 0x3c, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x38, 0x28, 0x00, 0x68, 0x50, 0x18, 0x70, 0x58, 0x10, 0x70, 0x58, 0x08, - 0x70, 0x58, 0x08, 0x70, 0x54, 0x08, 0x78, 0x58, 0x08, 0x70, 0x54, 0x10, - 0x68, 0x50, 0x18, 0x40, 0x30, 0x08, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, 0x80, 0x64, 0x10, - 0x38, 0x24, 0x00, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x30, 0x1c, 0x00, 0x70, 0x50, 0x10, 0x90, 0x70, 0x18, - 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xa8, 0x78, 0x08, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x90, 0x74, 0x20, 0x60, 0x48, 0x10, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x48, 0x00, 0xa0, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x8c, 0x00, 0xa8, 0x88, 0x10, 0x88, 0x70, 0x20, 0x20, 0x10, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x20, 0x14, 0x00, - 0x78, 0x60, 0x20, 0xb0, 0x94, 0x30, 0xb8, 0x94, 0x28, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc0, 0x9c, 0x38, 0xb0, 0x98, 0x50, 0x30, 0x20, 0x00, - 0x08, 0x04, 0x00, 0x10, 0x04, 0x00, 0x50, 0x44, 0x10, 0xb0, 0x98, 0x50, - 0xc0, 0xa0, 0x48, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc0, 0xa4, 0x40, 0xc0, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x48, 0xc0, 0xa4, 0x50, 0xc0, 0xa4, 0x58, 0x90, 0x80, 0x48, - 0x20, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x50, 0x38, 0x08, 0x90, 0x74, 0x20, 0x98, 0x78, 0x18, 0xa0, 0x78, 0x10, - 0xa0, 0x78, 0x08, 0xa8, 0x7c, 0x10, 0xa0, 0x78, 0x08, 0xa0, 0x78, 0x10, - 0x98, 0x74, 0x20, 0x70, 0x58, 0x20, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x50, 0x38, 0x08, 0x90, 0x74, 0x28, 0x98, 0x74, 0x10, 0xa0, 0x7c, 0x10, - 0xa0, 0x78, 0x10, 0xa0, 0x7c, 0x10, 0xa8, 0x7c, 0x10, 0x98, 0x78, 0x10, - 0x90, 0x74, 0x20, 0x58, 0x44, 0x08, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x0c, 0x00, - 0x80, 0x60, 0x18, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x7c, 0x00, 0xa0, 0x7c, 0x10, 0x88, 0x68, 0x18, 0x48, 0x30, 0x00, - 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x28, 0x18, 0x00, 0x68, 0x54, 0x18, - 0x90, 0x70, 0x28, 0x90, 0x74, 0x20, 0x90, 0x74, 0x20, 0x98, 0x74, 0x20, - 0x90, 0x74, 0x20, 0x90, 0x74, 0x20, 0x98, 0x74, 0x20, 0x90, 0x74, 0x20, - 0x88, 0x70, 0x28, 0x70, 0x60, 0x30, 0x20, 0x1c, 0x08, 0x00, 0x04, 0x00, - 0x68, 0x48, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x80, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x90, 0x00, 0xb0, 0x8c, 0x08, 0xa8, 0x88, 0x28, 0x48, 0x34, 0x00, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x28, 0x18, 0x00, 0x88, 0x70, 0x30, 0xb0, 0x94, 0x38, 0xb8, 0x98, 0x28, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc0, 0x9c, 0x40, 0xb0, 0x98, 0x50, 0x38, 0x28, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x28, 0x1c, 0x00, 0x80, 0x70, 0x38, - 0xb8, 0xa0, 0x48, 0xc0, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc0, 0xa8, 0x50, 0xc0, 0xa4, 0x58, 0x98, 0x84, 0x50, 0x30, 0x28, 0x08, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x90, 0x74, 0x20, 0xa0, 0x78, 0x08, 0xa8, 0x7c, 0x00, - 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x70, 0x58, 0x18, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa0, 0x7c, 0x08, 0xa8, 0x7c, 0x00, - 0xa8, 0x80, 0x00, 0xa8, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x74, 0x18, 0x58, 0x48, 0x08, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x48, 0x30, 0x00, - 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x80, 0x00, - 0xa8, 0x7c, 0x08, 0x90, 0x6c, 0x10, 0x48, 0x34, 0x00, 0x18, 0x08, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x0c, 0x00, - 0x20, 0x14, 0x00, 0x28, 0x18, 0x00, 0x28, 0x18, 0x00, 0x28, 0x18, 0x00, - 0x28, 0x18, 0x00, 0x28, 0x18, 0x00, 0x28, 0x18, 0x00, 0x28, 0x18, 0x00, - 0x28, 0x18, 0x00, 0x18, 0x14, 0x00, 0x10, 0x08, 0x00, 0x00, 0x04, 0x00, - 0x68, 0x44, 0x00, 0xa0, 0x78, 0x18, 0xa8, 0x80, 0x08, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x08, 0xa8, 0x8c, 0x18, 0x78, 0x60, 0x10, - 0x20, 0x14, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x04, 0x00, 0x38, 0x28, 0x00, 0x90, 0x74, 0x30, 0xb0, 0x94, 0x38, - 0xb8, 0x98, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc8, 0xa0, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x38, 0xc0, 0x9c, 0x40, 0xb0, 0x98, 0x50, 0x50, 0x40, 0x10, - 0x10, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x50, 0x40, 0x18, - 0xa8, 0x94, 0x48, 0xc0, 0xa4, 0x48, 0xc0, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x50, - 0xc0, 0xa4, 0x58, 0x98, 0x88, 0x50, 0x40, 0x30, 0x10, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, - 0x38, 0x38, 0x30, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x50, 0x40, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x40, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x20, 0x10, 0x00, 0x70, 0x54, 0x18, - 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x18, 0x68, 0x48, 0x00, 0x20, 0x10, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x48, 0x00, 0xa0, 0x78, 0x18, 0xa8, 0x80, 0x08, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x90, 0x00, 0xb8, 0x90, 0x08, 0xb8, 0x90, 0x10, 0x98, 0x80, 0x20, - 0x40, 0x34, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x38, 0x28, 0x00, 0x90, 0x78, 0x38, - 0xb0, 0x94, 0x38, 0xb8, 0x9c, 0x30, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, - 0xc8, 0xa0, 0x38, 0xc0, 0xa0, 0x40, 0xb0, 0x9c, 0x50, 0x58, 0x48, 0x18, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x14, 0x00, - 0x88, 0x74, 0x40, 0xb8, 0x9c, 0x50, 0xc0, 0xa4, 0x48, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x50, 0xc0, 0xa4, 0x58, - 0xa8, 0x90, 0x58, 0x38, 0x2c, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x30, 0x28, 0x18, - 0x70, 0x6c, 0x58, 0x20, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x38, 0x28, 0x00, 0x88, 0x68, 0x18, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x10, - 0x88, 0x6c, 0x20, 0x30, 0x1c, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x48, 0x00, 0xa0, 0x78, 0x18, 0xa8, 0x80, 0x08, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xb8, 0x90, 0x10, 0xa8, 0x8c, 0x20, - 0x70, 0x5c, 0x18, 0x20, 0x18, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x28, 0x18, 0x00, - 0x88, 0x70, 0x30, 0xb0, 0x94, 0x38, 0xb8, 0x98, 0x38, 0xc0, 0x9c, 0x30, - 0xc0, 0x9c, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa4, 0x30, - 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x30, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc0, 0xa0, 0x40, 0xb8, 0x9c, 0x50, 0x68, 0x5c, 0x28, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x40, 0x30, 0x08, 0xb0, 0x9c, 0x58, 0xc0, 0xa0, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x50, 0xc0, 0xa4, 0x50, 0x90, 0x7c, 0x40, - 0x38, 0x2c, 0x08, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x78, 0x70, 0x50, - 0x88, 0x7c, 0x60, 0x20, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x80, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x58, 0x10, 0x18, 0x10, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x58, 0x40, 0x00, 0x98, 0x74, 0x18, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x08, 0xa0, 0x78, 0x18, - 0x58, 0x40, 0x08, 0x18, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x48, 0x00, 0xa0, 0x78, 0x18, 0xb0, 0x80, 0x08, 0xb0, 0x84, 0x00, - 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, 0xb0, 0x84, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x10, 0xb0, 0x90, 0x18, - 0xa0, 0x80, 0x28, 0x48, 0x38, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, - 0x28, 0x1c, 0x00, 0x60, 0x54, 0x20, 0xa0, 0x88, 0x40, 0xb8, 0x98, 0x40, - 0xc0, 0x9c, 0x38, 0xc0, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc0, 0xa0, 0x40, 0xb8, 0x9c, 0x50, 0x78, 0x68, 0x30, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x80, 0x70, 0x40, 0xb8, 0xa0, 0x50, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x50, 0xa8, 0x94, 0x50, 0x48, 0x38, 0x08, - 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x38, 0x2c, 0x08, 0xb0, 0xa4, 0x78, - 0x88, 0x80, 0x58, 0x20, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x74, 0x10, 0x60, 0x48, 0x08, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x10, 0x00, 0x68, 0x50, 0x08, 0xa0, 0x78, 0x10, - 0xa8, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0x90, 0x6c, 0x18, - 0x30, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x48, 0x00, 0xa0, 0x7c, 0x18, 0xb0, 0x80, 0x08, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xb8, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xb8, 0x94, 0x18, - 0xb0, 0x90, 0x28, 0x88, 0x74, 0x28, 0x18, 0x10, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x18, 0x10, 0x00, 0x40, 0x34, 0x00, 0x90, 0x7c, 0x38, - 0xb0, 0x98, 0x48, 0xb8, 0x9c, 0x48, 0xc0, 0x9c, 0x40, 0xc0, 0xa0, 0x40, - 0xc0, 0xa0, 0x38, 0xc0, 0xa0, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc0, 0xa4, 0x40, 0xb8, 0xa0, 0x50, 0x88, 0x78, 0x40, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x40, 0x30, 0x10, 0xa8, 0x94, 0x50, 0xc0, 0xa4, 0x50, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, - 0xc8, 0xa8, 0x48, 0xc0, 0xa8, 0x50, 0xa8, 0x90, 0x50, 0x40, 0x30, 0x08, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x18, 0x10, 0x00, 0x88, 0x7c, 0x48, 0xc0, 0xac, 0x70, - 0x90, 0x80, 0x58, 0x20, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x28, 0x18, 0x00, 0x80, 0x60, 0x10, 0xa0, 0x78, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x70, 0x50, 0x08, - 0x20, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x48, 0x00, 0xa0, 0x7c, 0x18, 0xb0, 0x84, 0x08, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x18, - 0xb8, 0x94, 0x20, 0xb0, 0x8c, 0x30, 0x58, 0x48, 0x10, 0x10, 0x0c, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x20, 0x14, 0x00, - 0x48, 0x3c, 0x10, 0x88, 0x74, 0x38, 0xa8, 0x90, 0x48, 0xb8, 0x9c, 0x48, - 0xb8, 0xa0, 0x48, 0xc0, 0xa0, 0x40, 0xc0, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc0, 0xa4, 0x40, 0xb8, 0xa0, 0x50, 0x90, 0x80, 0x40, - 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x10, 0x00, 0x78, 0x64, 0x30, 0xb8, 0xa4, 0x58, - 0xc8, 0xa8, 0x50, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, - 0xc8, 0xac, 0x48, 0xc8, 0xa8, 0x50, 0xa8, 0x90, 0x50, 0x40, 0x30, 0x08, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x60, 0x50, 0x28, 0xb8, 0xa8, 0x68, 0xc8, 0xb0, 0x70, - 0x90, 0x84, 0x58, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x30, 0x20, 0x00, 0x90, 0x6c, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0x98, 0x74, 0x18, 0x58, 0x3c, 0x00, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x48, 0x00, 0xa0, 0x7c, 0x18, 0xb0, 0x84, 0x08, 0xb0, 0x84, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x90, 0x00, 0xb8, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xb8, 0x94, 0x28, 0x98, 0x80, 0x30, 0x40, 0x30, 0x00, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x18, 0x10, 0x00, 0x50, 0x44, 0x18, 0x78, 0x64, 0x28, - 0x98, 0x80, 0x40, 0xb0, 0x9c, 0x50, 0xb8, 0xa0, 0x50, 0xb8, 0xa0, 0x50, - 0xc0, 0xa0, 0x48, 0xb8, 0xa0, 0x50, 0xb8, 0xa0, 0x58, 0x90, 0x80, 0x48, - 0x20, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x38, 0x30, 0x08, 0xa0, 0x90, 0x50, - 0xc0, 0xa8, 0x58, 0xc8, 0xa8, 0x50, 0xc8, 0xac, 0x48, 0xd0, 0xac, 0x50, - 0xc8, 0xac, 0x48, 0xc8, 0xa8, 0x58, 0xb0, 0x94, 0x58, 0x48, 0x34, 0x10, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x38, 0x30, 0x08, 0xa8, 0x98, 0x60, 0xc8, 0xb4, 0x68, 0xc8, 0xb0, 0x68, - 0x90, 0x84, 0x50, 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x38, 0x28, 0x00, 0x98, 0x74, 0x20, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0x90, 0x6c, 0x18, 0x40, 0x2c, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x48, 0x00, 0xa0, 0x7c, 0x18, 0xb0, 0x84, 0x08, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x90, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xb8, 0x98, 0x20, 0xb0, 0x90, 0x30, 0x80, 0x6c, 0x20, - 0x28, 0x1c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x18, 0x10, 0x00, - 0x28, 0x24, 0x00, 0x40, 0x38, 0x10, 0x60, 0x54, 0x28, 0x80, 0x70, 0x40, - 0x98, 0x84, 0x50, 0xa8, 0x94, 0x60, 0xa8, 0x98, 0x68, 0x90, 0x84, 0x60, - 0x28, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x70, 0x60, 0x30, - 0xc0, 0xa8, 0x60, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xd0, 0xac, 0x50, - 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x58, 0xb0, 0x9c, 0x58, 0x50, 0x40, 0x18, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x0c, 0x00, - 0x98, 0x84, 0x50, 0xc8, 0xb0, 0x68, 0xd0, 0xb4, 0x60, 0xc8, 0xb4, 0x68, - 0x90, 0x84, 0x58, 0x20, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x04, 0x00, 0x48, 0x34, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa0, 0x78, 0x08, 0x80, 0x64, 0x18, 0x30, 0x20, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x48, 0x00, 0xa0, 0x80, 0x18, 0xb0, 0x84, 0x08, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x90, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xb8, 0x98, 0x28, 0xb0, 0x90, 0x38, - 0x70, 0x5c, 0x28, 0x18, 0x10, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x10, 0x0c, 0x00, - 0x18, 0x14, 0x00, 0x20, 0x14, 0x00, 0x20, 0x14, 0x00, 0x18, 0x10, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x20, 0x18, 0x00, - 0xb0, 0x9c, 0x58, 0xc0, 0xa8, 0x58, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xd0, 0xb0, 0x50, 0xc8, 0xac, 0x58, 0xb8, 0xa0, 0x60, 0x58, 0x44, 0x18, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x18, 0x10, 0x00, 0x70, 0x64, 0x38, - 0xc8, 0xb0, 0x70, 0xd0, 0xb4, 0x60, 0xd0, 0xb8, 0x60, 0xc8, 0xb4, 0x68, - 0x98, 0x88, 0x58, 0x20, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x50, 0x38, 0x08, 0xa0, 0x78, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x7c, 0x10, 0x80, 0x60, 0x18, 0x28, 0x1c, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa0, 0x80, 0x18, 0xb0, 0x84, 0x08, 0xb8, 0x88, 0x00, - 0xb8, 0x88, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, - 0xb8, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x98, 0x28, 0xb8, 0x94, 0x30, - 0xa8, 0x94, 0x40, 0x58, 0x48, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x70, 0x60, 0x28, 0xb8, 0xa4, 0x60, 0xc8, 0xac, 0x58, 0xc8, 0xb0, 0x50, - 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x58, 0xb8, 0x9c, 0x58, 0x58, 0x44, 0x18, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x60, 0x50, 0x28, 0xb8, 0xa4, 0x68, - 0xc8, 0xb4, 0x68, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xc8, 0xb4, 0x68, - 0x98, 0x88, 0x58, 0x20, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x50, 0x38, 0x08, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x10, 0x80, 0x60, 0x18, 0x28, 0x18, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa0, 0x80, 0x18, 0xb0, 0x84, 0x08, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x94, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xb8, 0x98, 0x30, 0xa0, 0x88, 0x38, 0x48, 0x3c, 0x08, 0x10, 0x08, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x30, 0x28, 0x00, 0x98, 0x88, 0x50, 0xc0, 0xac, 0x60, 0xc8, 0xac, 0x50, - 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x58, 0xb8, 0xa0, 0x58, 0x50, 0x44, 0x18, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x40, 0x38, 0x10, 0xb0, 0xa0, 0x68, 0xc8, 0xb4, 0x68, - 0xd0, 0xb4, 0x60, 0xd8, 0xbc, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb4, 0x68, - 0x98, 0x88, 0x58, 0x20, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x60, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x04, 0x00, 0x50, 0x38, 0x08, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x7c, 0x08, 0x80, 0x60, 0x18, 0x28, 0x18, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa0, 0x80, 0x18, 0xb0, 0x88, 0x08, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, - 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x30, 0xb8, 0x98, 0x38, 0xa0, 0x88, 0x40, 0x48, 0x3c, 0x08, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x60, 0x50, 0x28, 0xb8, 0xa4, 0x60, 0xc8, 0xb0, 0x58, - 0xc8, 0xb0, 0x58, 0xc8, 0xb0, 0x58, 0xc0, 0xa8, 0x60, 0x68, 0x58, 0x28, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x08, 0x00, - 0x38, 0x30, 0x08, 0xb8, 0xa4, 0x68, 0xc8, 0xb4, 0x68, 0xd0, 0xb8, 0x68, - 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xc8, 0xb4, 0x68, - 0x98, 0x88, 0x58, 0x20, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x00, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x48, 0x34, 0x08, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x10, 0x80, 0x60, 0x18, 0x30, 0x1c, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa0, 0x80, 0x18, 0xb0, 0x88, 0x08, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x90, 0x00, 0xb8, 0x94, 0x00, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x30, 0xb8, 0x98, 0x40, 0xa0, 0x8c, 0x40, - 0x40, 0x34, 0x08, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x20, 0x00, 0x98, 0x88, 0x50, 0xc0, 0xac, 0x60, - 0xc8, 0xb0, 0x58, 0xc8, 0xb0, 0x58, 0xc8, 0xac, 0x68, 0x68, 0x5c, 0x28, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x40, 0x3c, 0x18, - 0xa8, 0x98, 0x60, 0xc8, 0xb4, 0x68, 0xd0, 0xb8, 0x68, 0xd0, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xb8, 0x60, 0xd0, 0xb8, 0x70, - 0x98, 0x88, 0x58, 0x20, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x10, 0x60, 0x48, 0x00, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x04, 0x00, 0x40, 0x28, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0x88, 0x68, 0x18, 0x38, 0x28, 0x00, - 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa0, 0x80, 0x18, 0xb0, 0x88, 0x08, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x98, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x38, 0xb8, 0x9c, 0x40, - 0xa0, 0x84, 0x40, 0x50, 0x40, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x58, 0x48, 0x20, 0xc0, 0xa8, 0x68, - 0xc8, 0xb0, 0x58, 0xc8, 0xb0, 0x58, 0xc0, 0xb0, 0x68, 0x68, 0x5c, 0x28, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x50, 0x48, 0x20, 0xa8, 0x98, 0x60, - 0xc8, 0xb4, 0x68, 0xd0, 0xb4, 0x68, 0xd0, 0xb8, 0x60, 0xd0, 0xbc, 0x60, - 0xd8, 0xb8, 0x60, 0xd8, 0xb8, 0x60, 0xd8, 0xbc, 0x60, 0xd0, 0xb8, 0x70, - 0x98, 0x88, 0x58, 0x20, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x10, 0x60, 0x48, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x30, 0x20, 0x00, 0x90, 0x6c, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0x98, 0x70, 0x18, 0x50, 0x34, 0x00, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa0, 0x80, 0x18, 0xb0, 0x88, 0x08, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x90, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x38, - 0xb8, 0x9c, 0x40, 0xa8, 0x94, 0x48, 0x60, 0x50, 0x20, 0x20, 0x14, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x0c, 0x00, 0xa0, 0x8c, 0x58, - 0xc8, 0xac, 0x60, 0xc8, 0xb0, 0x60, 0xc0, 0xac, 0x68, 0x68, 0x5c, 0x28, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x18, 0x10, 0x00, 0x58, 0x4c, 0x28, 0xc0, 0xac, 0x70, 0xd0, 0xb4, 0x68, - 0xd0, 0xb8, 0x68, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd0, 0xb8, 0x70, - 0x98, 0x88, 0x58, 0x20, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x10, 0x60, 0x48, 0x00, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x28, 0x18, 0x00, 0x78, 0x60, 0x10, 0xa0, 0x7c, 0x08, - 0xa8, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, 0x68, 0x4c, 0x00, - 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa0, 0x84, 0x18, 0xb0, 0x8c, 0x08, 0xb8, 0x8c, 0x00, - 0xb8, 0x8c, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x90, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc0, 0xa0, 0x40, 0xb8, 0x9c, 0x48, 0xb0, 0x9c, 0x50, 0x70, 0x60, 0x28, - 0x30, 0x20, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x50, 0x48, 0x20, - 0xb8, 0xa8, 0x68, 0xc8, 0xb0, 0x60, 0xc8, 0xb0, 0x68, 0x78, 0x64, 0x30, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x28, 0x24, 0x08, - 0x78, 0x6c, 0x40, 0xb8, 0xa8, 0x68, 0xd0, 0xb4, 0x68, 0xd0, 0xb8, 0x68, - 0xd0, 0xb8, 0x60, 0xd8, 0xb8, 0x60, 0xd0, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd0, 0xbc, 0x60, 0xd8, 0xbc, 0x68, 0xd0, 0xb8, 0x70, - 0x98, 0x88, 0x58, 0x28, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x78, 0x58, 0x18, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x10, 0x00, 0x70, 0x50, 0x08, 0xa0, 0x78, 0x10, - 0xa8, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, 0xa8, 0x78, 0x10, 0x80, 0x64, 0x10, - 0x30, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa8, 0x84, 0x18, 0xb0, 0x8c, 0x08, 0xb8, 0x8c, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x00, 0xc0, 0x90, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa0, 0x38, 0xc0, 0xa0, 0x40, 0xc0, 0xa0, 0x48, 0xb0, 0x9c, 0x50, - 0x90, 0x7c, 0x40, 0x40, 0x34, 0x08, 0x10, 0x08, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x18, 0x00, - 0x90, 0x7c, 0x48, 0xc0, 0xac, 0x68, 0xc0, 0xac, 0x68, 0x80, 0x6c, 0x40, - 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x10, 0x08, 0x00, 0x38, 0x30, 0x10, 0x98, 0x88, 0x58, - 0xc0, 0xb0, 0x68, 0xd0, 0xb8, 0x68, 0xd0, 0xb8, 0x60, 0xd8, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x68, 0xd0, 0xb8, 0x70, - 0x98, 0x88, 0x58, 0x28, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x78, 0x58, 0x18, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x3c, 0x00, 0x98, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x58, 0x40, 0x00, 0x98, 0x74, 0x18, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0x98, 0x74, 0x18, - 0x48, 0x34, 0x00, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa8, 0x84, 0x18, 0xb0, 0x8c, 0x08, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xb8, 0x94, 0x00, - 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, - 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc0, 0xa4, 0x40, 0xc0, 0xa0, 0x48, - 0xb8, 0xa0, 0x50, 0xb0, 0x98, 0x50, 0x68, 0x58, 0x20, 0x30, 0x20, 0x00, - 0x10, 0x08, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x48, 0x40, 0x18, 0xb0, 0x9c, 0x68, 0xc0, 0xac, 0x70, 0x80, 0x70, 0x40, - 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x28, 0x24, 0x00, 0x70, 0x60, 0x30, 0xb8, 0xa4, 0x68, 0xc8, 0xb4, 0x70, - 0xc8, 0xb8, 0x68, 0xd0, 0xb8, 0x60, 0xd0, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x68, 0xd0, 0xbc, 0x70, - 0x98, 0x88, 0x58, 0x28, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x40, 0x00, 0xa0, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x40, 0x28, 0x00, 0x88, 0x68, 0x18, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x08, - 0x80, 0x64, 0x18, 0x28, 0x14, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa8, 0x84, 0x18, 0xb0, 0x8c, 0x08, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x90, 0x00, - 0xc0, 0x94, 0x00, 0xb8, 0x90, 0x00, 0xb8, 0x94, 0x00, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x48, 0xc0, 0xa0, 0x48, 0xb8, 0xa0, 0x58, 0x98, 0x84, 0x48, - 0x58, 0x48, 0x20, 0x20, 0x14, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x18, 0x10, 0x00, 0x88, 0x78, 0x50, 0xc0, 0xac, 0x70, 0x80, 0x70, 0x38, - 0x18, 0x10, 0x00, 0x08, 0x04, 0x00, 0x20, 0x14, 0x00, 0x50, 0x44, 0x20, - 0xa0, 0x8c, 0x58, 0xc8, 0xb4, 0x70, 0xd0, 0xb4, 0x68, 0xd0, 0xb8, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xc0, 0x60, - 0xd8, 0xbc, 0x68, 0xd8, 0xbc, 0x68, 0xd8, 0xc0, 0x68, 0xd0, 0xbc, 0x70, - 0x98, 0x88, 0x58, 0x28, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x3c, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, 0x20, 0x10, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x68, 0x48, 0x00, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x20, 0x14, 0x00, 0x70, 0x58, 0x18, - 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x74, 0x18, 0x58, 0x40, 0x00, 0x18, 0x0c, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa0, 0x84, 0x18, 0xb0, 0x8c, 0x08, 0xb8, 0x90, 0x00, - 0xb8, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x00, 0xb8, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, 0xc0, 0x98, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc0, 0xa4, 0x48, 0xc0, 0xa4, 0x50, 0xc0, 0xa4, 0x50, - 0xb0, 0x98, 0x58, 0x88, 0x74, 0x38, 0x50, 0x40, 0x10, 0x18, 0x10, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x38, 0x30, 0x10, 0xb8, 0xa8, 0x78, 0x80, 0x70, 0x38, - 0x28, 0x18, 0x00, 0x50, 0x44, 0x18, 0x90, 0x80, 0x50, 0xb8, 0xa8, 0x68, - 0xc8, 0xb4, 0x68, 0xd0, 0xb8, 0x68, 0xd0, 0xb8, 0x60, 0xd0, 0xbc, 0x60, - 0xd0, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x68, 0xd8, 0xbc, 0x68, - 0xd8, 0xbc, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd0, 0xbc, 0x70, - 0x98, 0x88, 0x58, 0x28, 0x1c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x50, 0x38, 0x00, 0x98, 0x74, 0x20, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xa0, 0x7c, 0x08, 0x80, 0x60, 0x10, 0x28, 0x18, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x00, - 0x78, 0x58, 0x08, 0xa0, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x48, 0x38, 0x08, - 0xa0, 0x78, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x78, 0x08, 0x88, 0x68, 0x10, 0x40, 0x2c, 0x00, 0x10, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x10, 0x04, 0x00, 0x10, 0x08, 0x00, 0x10, 0x08, 0x00, 0x10, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x10, 0x04, 0x00, 0x10, 0x04, 0x00, 0x10, 0x04, 0x00, - 0x10, 0x08, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa8, 0x88, 0x18, 0xb0, 0x8c, 0x08, 0xb8, 0x90, 0x00, - 0xc0, 0x90, 0x00, 0xc0, 0x90, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x08, 0xc0, 0x98, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc8, 0xa4, 0x48, 0xc8, 0xa8, 0x48, - 0xc0, 0xa8, 0x50, 0xc0, 0xa4, 0x58, 0xb8, 0xa0, 0x60, 0x98, 0x84, 0x50, - 0x58, 0x48, 0x20, 0x28, 0x20, 0x00, 0x18, 0x10, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x80, 0x74, 0x48, 0xb0, 0x9c, 0x60, - 0xa8, 0x98, 0x58, 0xc0, 0xb0, 0x70, 0xc8, 0xb4, 0x68, 0xd0, 0xb8, 0x68, - 0xd0, 0xb8, 0x60, 0xd0, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd0, 0xbc, 0x70, - 0x98, 0x88, 0x58, 0x28, 0x1c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x40, 0x2c, 0x00, 0x98, 0x74, 0x20, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x7c, 0x08, 0x88, 0x68, 0x10, 0x30, 0x24, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x0c, 0x00, - 0x90, 0x6c, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x20, 0x10, 0x00, - 0x90, 0x6c, 0x20, 0xa8, 0x7c, 0x10, 0xa8, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa0, 0x78, 0x10, 0x80, 0x60, 0x18, 0x38, 0x24, 0x00, - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x10, 0x00, 0x38, 0x2c, 0x00, - 0x48, 0x30, 0x00, 0x48, 0x34, 0x00, 0x48, 0x34, 0x00, 0x48, 0x34, 0x00, - 0x48, 0x34, 0x00, 0x48, 0x34, 0x00, 0x48, 0x34, 0x00, 0x48, 0x30, 0x00, - 0x40, 0x30, 0x08, 0x30, 0x24, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x50, 0x00, 0xa8, 0x84, 0x18, 0xb0, 0x8c, 0x08, 0xc0, 0x94, 0x00, - 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x00, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, - 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x50, 0xc8, 0xa8, 0x50, 0xc0, 0xa8, 0x50, 0xc0, 0xa8, 0x58, - 0xb8, 0xa4, 0x60, 0xa0, 0x90, 0x50, 0x78, 0x68, 0x38, 0x50, 0x40, 0x18, - 0x28, 0x24, 0x00, 0x10, 0x0c, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x48, 0x38, 0x10, 0xb8, 0xa4, 0x68, - 0xc8, 0xb4, 0x68, 0xd0, 0xb8, 0x68, 0xd0, 0xb8, 0x68, 0xd0, 0xbc, 0x60, - 0xd0, 0xbc, 0x60, 0xd0, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x68, 0xd8, 0xbc, 0x68, 0xd8, 0xbc, 0x68, - 0xd8, 0xc0, 0x60, 0xd8, 0xc0, 0x60, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd0, 0xbc, 0x70, - 0x98, 0x8c, 0x58, 0x20, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x40, 0x2c, 0x00, 0x90, 0x70, 0x20, 0xa8, 0x78, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x7c, 0x00, 0x90, 0x70, 0x10, 0x48, 0x34, 0x00, 0x10, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x30, 0x20, 0x00, - 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x58, 0x44, 0x00, 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x10, - 0x28, 0x18, 0x00, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x28, 0x14, 0x00, 0x60, 0x48, 0x08, 0x90, 0x6c, 0x18, - 0x98, 0x78, 0x18, 0xa0, 0x78, 0x10, 0x98, 0x78, 0x10, 0x98, 0x78, 0x10, - 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x18, 0xa0, 0x78, 0x18, 0x98, 0x74, 0x20, - 0x88, 0x70, 0x28, 0x60, 0x48, 0x18, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x50, 0x00, 0xa8, 0x88, 0x20, 0xb0, 0x8c, 0x08, 0xb8, 0x94, 0x00, - 0xc0, 0x94, 0x08, 0xb8, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x98, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, - 0xc8, 0xa8, 0x50, 0xc0, 0xa4, 0x58, 0xc0, 0xa8, 0x60, 0xb0, 0x9c, 0x60, - 0x98, 0x88, 0x50, 0x88, 0x78, 0x48, 0x58, 0x4c, 0x28, 0x38, 0x2c, 0x08, - 0x18, 0x14, 0x00, 0x10, 0x0c, 0x00, 0x10, 0x08, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x40, 0x30, 0x10, 0xb8, 0xa4, 0x70, - 0xd0, 0xb4, 0x68, 0xd8, 0xbc, 0x60, 0xd0, 0xb8, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x68, 0xd8, 0xbc, 0x68, 0xd8, 0xbc, 0x68, - 0xd8, 0xc0, 0x60, 0xd8, 0xc0, 0x60, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd0, 0xbc, 0x70, - 0x98, 0x8c, 0x58, 0x20, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x38, 0x28, 0x00, 0x90, 0x70, 0x20, 0xa0, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x68, 0x4c, 0x08, 0x20, 0x10, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x60, 0x44, 0x08, - 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x30, 0x20, 0x00, 0x78, 0x60, 0x18, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x70, 0x58, 0x10, 0x38, 0x24, 0x00, 0x18, 0x08, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, - 0x28, 0x14, 0x00, 0x68, 0x50, 0x10, 0x90, 0x70, 0x18, 0xa0, 0x78, 0x10, - 0xa8, 0x7c, 0x08, 0xa8, 0x80, 0x00, 0xa8, 0x80, 0x00, 0xa8, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x90, 0x74, 0x28, 0x38, 0x28, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x50, 0x00, 0xa8, 0x88, 0x20, 0xb0, 0x8c, 0x10, 0xb8, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x08, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x18, - 0xc0, 0x94, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, - 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x58, 0xc8, 0xac, 0x58, - 0xc0, 0xac, 0x58, 0xc0, 0xac, 0x60, 0xc0, 0xa8, 0x60, 0xb8, 0xa4, 0x68, - 0xb8, 0xa4, 0x68, 0xa0, 0x90, 0x58, 0x88, 0x74, 0x40, 0x78, 0x68, 0x38, - 0x60, 0x50, 0x20, 0x58, 0x4c, 0x20, 0x50, 0x44, 0x20, 0x18, 0x10, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x34, 0x10, 0xc8, 0xb4, 0x78, - 0xd0, 0xb8, 0x68, 0xd0, 0xb8, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xbc, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd0, 0xc0, 0x70, - 0x98, 0x8c, 0x58, 0x20, 0x1c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x30, 0x20, 0x00, 0x80, 0x64, 0x18, 0xa0, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0x90, 0x70, 0x18, 0x50, 0x34, 0x00, - 0x18, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x40, 0x28, 0x00, 0x88, 0x68, 0x18, - 0xa8, 0x78, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x04, 0x00, 0x48, 0x30, 0x00, 0x90, 0x70, 0x18, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x88, 0x68, 0x18, 0x50, 0x38, 0x00, 0x20, 0x14, 0x00, - 0x10, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x10, 0x04, 0x00, 0x20, 0x10, 0x00, 0x40, 0x2c, 0x00, - 0x80, 0x60, 0x10, 0x98, 0x74, 0x10, 0xa8, 0x78, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0x98, 0x78, 0x18, - 0x60, 0x4c, 0x10, 0x10, 0x0c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa8, 0x88, 0x20, 0xb8, 0x90, 0x10, 0xb8, 0x94, 0x08, - 0xc0, 0x94, 0x08, 0xc0, 0x94, 0x10, 0xb8, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, - 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x30, - 0xc0, 0x9c, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, - 0xd0, 0xac, 0x50, 0xd0, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xc8, 0xac, 0x50, 0xd0, 0xac, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x50, 0xc8, 0xb0, 0x50, 0xc8, 0xb0, 0x58, 0xc8, 0xb0, 0x58, - 0xc8, 0xac, 0x60, 0xc8, 0xac, 0x60, 0xc8, 0xac, 0x60, 0xc8, 0xac, 0x60, - 0xc8, 0xb0, 0x68, 0xc0, 0xac, 0x70, 0xb8, 0xa8, 0x78, 0x58, 0x50, 0x28, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x40, 0x34, 0x10, 0xc0, 0xb0, 0x78, - 0xd0, 0xb8, 0x68, 0xd0, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xc0, 0x60, 0xd8, 0xc0, 0x60, - 0xd8, 0xbc, 0x60, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc4, 0x68, 0xd0, 0xc0, 0x70, - 0x98, 0x8c, 0x58, 0x20, 0x1c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x28, 0x14, 0x00, 0x70, 0x58, 0x10, 0xa0, 0x7c, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, 0xa0, 0x78, 0x10, 0x88, 0x64, 0x10, - 0x38, 0x24, 0x00, 0x18, 0x08, 0x00, 0x10, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x10, 0x08, 0x00, 0x30, 0x20, 0x00, 0x78, 0x5c, 0x10, 0xa0, 0x78, 0x10, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x20, 0x10, 0x00, 0x68, 0x48, 0x08, 0xa0, 0x74, 0x18, - 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x98, 0x74, 0x18, 0x68, 0x50, 0x08, - 0x40, 0x2c, 0x00, 0x20, 0x10, 0x00, 0x10, 0x08, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, - 0x18, 0x0c, 0x00, 0x38, 0x24, 0x00, 0x68, 0x4c, 0x10, 0x90, 0x6c, 0x18, - 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, 0xa0, 0x78, 0x10, 0x80, 0x64, 0x10, - 0x30, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa8, 0x88, 0x28, 0xb8, 0x90, 0x18, 0xc0, 0x94, 0x10, - 0xb8, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x94, 0x10, 0xc0, 0x98, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc0, 0xa0, 0x38, - 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc0, 0xa4, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xc8, 0xac, 0x50, 0xd0, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xd0, 0xb0, 0x50, - 0xc8, 0xac, 0x50, 0xd0, 0xac, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb4, 0x58, 0xd0, 0xb0, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x60, - 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x60, 0xc8, 0xb0, 0x68, 0xa0, 0x8c, 0x58, - 0x28, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x40, 0x34, 0x10, 0xc8, 0xb0, 0x78, - 0xd0, 0xb8, 0x68, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x68, - 0xd8, 0xc0, 0x60, 0xd0, 0xbc, 0x60, 0xd8, 0xbc, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc4, 0x68, 0xd0, 0xc0, 0x78, - 0x98, 0x8c, 0x58, 0x20, 0x1c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x0c, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x80, 0x64, 0x10, 0x58, 0x40, 0x00, 0x28, 0x18, 0x00, 0x18, 0x0c, 0x00, - 0x10, 0x08, 0x00, 0x10, 0x08, 0x00, 0x18, 0x0c, 0x00, 0x20, 0x10, 0x00, - 0x40, 0x2c, 0x00, 0x80, 0x60, 0x10, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x28, 0x18, 0x00, 0x80, 0x64, 0x20, - 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x90, 0x6c, 0x10, 0x78, 0x58, 0x10, 0x50, 0x38, 0x00, 0x38, 0x20, 0x00, - 0x20, 0x10, 0x00, 0x20, 0x10, 0x00, 0x18, 0x0c, 0x00, 0x18, 0x0c, 0x00, - 0x20, 0x0c, 0x00, 0x20, 0x10, 0x00, 0x30, 0x20, 0x00, 0x50, 0x3c, 0x00, - 0x70, 0x54, 0x08, 0x88, 0x68, 0x10, 0xa0, 0x78, 0x10, 0xa0, 0x7c, 0x08, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x7c, 0x08, 0x88, 0x6c, 0x18, 0x48, 0x34, 0x00, - 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x4c, 0x00, 0xa8, 0x88, 0x28, 0xb8, 0x90, 0x18, 0xb8, 0x94, 0x10, - 0xb8, 0x94, 0x10, 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x9c, 0x18, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, - 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xd0, 0xac, 0x50, 0xd0, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xb0, 0x50, - 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x60, 0xc8, 0xb4, 0x60, 0xc0, 0xac, 0x68, - 0x70, 0x60, 0x38, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x40, 0x34, 0x10, 0xc0, 0xb0, 0x78, - 0xd0, 0xb8, 0x68, 0xd8, 0xbc, 0x60, 0xd8, 0xbc, 0x68, 0xd8, 0xbc, 0x68, - 0xd8, 0xc0, 0x60, 0xd0, 0xbc, 0x60, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd0, 0xc0, 0x78, - 0x98, 0x8c, 0x58, 0x20, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x38, 0x28, 0x00, 0x90, 0x6c, 0x10, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x98, 0x78, 0x18, 0x88, 0x68, 0x20, 0x68, 0x50, 0x10, - 0x58, 0x40, 0x08, 0x50, 0x3c, 0x00, 0x60, 0x4c, 0x10, 0x78, 0x60, 0x18, - 0x98, 0x74, 0x18, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x00, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x38, 0x24, 0x00, - 0x80, 0x60, 0x18, 0xa0, 0x78, 0x10, 0xa8, 0x80, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, 0x98, 0x74, 0x18, 0x90, 0x70, 0x20, - 0x80, 0x68, 0x20, 0x78, 0x5c, 0x18, 0x70, 0x54, 0x10, 0x70, 0x58, 0x18, - 0x78, 0x5c, 0x18, 0x80, 0x68, 0x20, 0x90, 0x70, 0x20, 0x98, 0x74, 0x18, - 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x7c, 0x08, 0x90, 0x74, 0x18, 0x58, 0x40, 0x08, 0x18, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x38, 0x00, 0xa0, 0x88, 0x30, 0xb0, 0x90, 0x20, 0xb8, 0x98, 0x10, - 0xc0, 0x98, 0x10, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x9c, 0x18, - 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc8, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc8, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, - 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, - 0xd0, 0xac, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, - 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xd0, 0xac, 0x50, - 0xd0, 0xac, 0x50, 0xd0, 0xb0, 0x50, 0xc8, 0xb0, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x50, 0xc8, 0xb0, 0x50, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, - 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x60, 0xd0, 0xb4, 0x58, 0xc8, 0xb0, 0x68, - 0xa8, 0x94, 0x60, 0x38, 0x28, 0x08, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x40, 0x34, 0x10, 0xc8, 0xb4, 0x78, - 0xd0, 0xb8, 0x68, 0xd8, 0xbc, 0x68, 0xd8, 0xbc, 0x68, 0xd8, 0xbc, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd0, 0xc0, 0x78, - 0x80, 0x78, 0x50, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x18, 0x10, 0x00, 0x70, 0x54, 0x10, 0xa0, 0x74, 0x10, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x10, 0xa0, 0x78, 0x10, - 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x10, 0xa0, 0x7c, 0x10, - 0xa8, 0x7c, 0x08, 0xa8, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x10, 0x60, 0x48, 0x00, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x08, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x08, 0x00, - 0x40, 0x2c, 0x00, 0x88, 0x68, 0x18, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x10, - 0xa0, 0x78, 0x10, 0xa0, 0x78, 0x10, 0xa8, 0x78, 0x08, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, - 0x90, 0x70, 0x18, 0x60, 0x48, 0x08, 0x18, 0x0c, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x2c, 0x00, 0x90, 0x78, 0x30, 0xb0, 0x90, 0x20, 0xc0, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, - 0xc0, 0x9c, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc8, 0x9c, 0x28, 0xc8, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xc8, 0xac, 0x50, 0xd0, 0xac, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xac, 0x50, - 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x50, 0xd0, 0xb4, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x60, 0xd0, 0xb4, 0x58, 0xd0, 0xb8, 0x60, 0xd0, 0xb4, 0x60, - 0xc0, 0xb0, 0x70, 0x70, 0x60, 0x30, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x50, 0x40, 0x18, 0xc8, 0xb4, 0x78, - 0xd0, 0xbc, 0x70, 0xd8, 0xbc, 0x68, 0xd8, 0xbc, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x70, 0xc8, 0xbc, 0x78, - 0x68, 0x60, 0x38, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x38, 0x28, 0x00, 0x90, 0x70, 0x20, - 0xa0, 0x7c, 0x10, 0xa8, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x00, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x08, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x20, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x18, 0x0c, 0x00, 0x40, 0x2c, 0x00, 0x88, 0x6c, 0x18, 0xa0, 0x7c, 0x10, - 0xa8, 0x7c, 0x08, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa8, 0x80, 0x00, 0xa0, 0x7c, 0x08, 0x98, 0x70, 0x18, - 0x60, 0x48, 0x08, 0x20, 0x14, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x28, 0x18, 0x00, 0x70, 0x5c, 0x20, 0xb0, 0x90, 0x28, 0xb8, 0x98, 0x18, - 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, - 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xd0, 0xac, 0x50, 0xd0, 0xac, 0x50, - 0xd0, 0xac, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x60, - 0xd0, 0xb4, 0x58, 0xd0, 0xb8, 0x58, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, - 0xc8, 0xb4, 0x68, 0xb8, 0xa8, 0x70, 0x30, 0x24, 0x08, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x60, 0x54, 0x28, 0xc8, 0xb8, 0x78, - 0xd0, 0xbc, 0x68, 0xd8, 0xbc, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc4, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc0, 0x70, 0xb8, 0xac, 0x70, - 0x40, 0x38, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x08, 0x00, 0x50, 0x38, 0x08, - 0x90, 0x70, 0x18, 0xa0, 0x78, 0x08, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x7c, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x08, 0x78, 0x5c, 0x18, 0x18, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x10, 0x08, 0x00, 0x38, 0x24, 0x00, 0x78, 0x58, 0x18, - 0x98, 0x74, 0x18, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, 0x88, 0x6c, 0x18, 0x50, 0x38, 0x00, - 0x20, 0x10, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x48, 0x3c, 0x08, 0xa0, 0x84, 0x30, 0xb8, 0x94, 0x20, - 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x18, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, 0xd0, 0xac, 0x50, 0xd0, 0xac, 0x50, - 0xd0, 0xac, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb0, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb8, 0x60, - 0xd0, 0xb8, 0x58, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xc8, 0xb4, 0x70, 0x80, 0x70, 0x48, 0x18, 0x0c, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x60, 0x54, 0x20, 0xc8, 0xb8, 0x78, - 0xd0, 0xbc, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x70, 0xd0, 0xc0, 0x78, 0x90, 0x84, 0x50, - 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x10, 0x00, - 0x60, 0x44, 0x08, 0x90, 0x70, 0x18, 0xa8, 0x7c, 0x10, 0xa8, 0x7c, 0x08, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0xa0, 0x74, 0x08, 0xa0, 0x74, 0x08, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x7c, 0x10, 0x78, 0x5c, 0x18, 0x18, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x04, 0x00, 0x30, 0x1c, 0x00, - 0x60, 0x48, 0x08, 0x98, 0x74, 0x18, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x98, 0x78, 0x18, 0x78, 0x60, 0x10, 0x40, 0x30, 0x00, 0x18, 0x08, 0x00, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x20, 0x14, 0x00, 0x80, 0x6c, 0x28, 0xb0, 0x90, 0x30, - 0xb8, 0x94, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x98, 0x20, 0xc0, 0x9c, 0x20, - 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x20, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, - 0xc8, 0xa0, 0x38, 0xc0, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, - 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xd0, 0xac, 0x50, 0xd0, 0xac, 0x50, 0xd0, 0xac, 0x50, 0xd0, 0xac, 0x50, - 0xd0, 0xac, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb8, 0x58, 0xd8, 0xb8, 0x58, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd8, 0xb8, 0x60, 0xd8, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x68, 0xb0, 0x9c, 0x60, 0x40, 0x34, 0x08, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x60, 0x54, 0x28, 0xc8, 0xb8, 0x78, - 0xd0, 0xbc, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xe0, 0xc4, 0x68, - 0xd8, 0xc4, 0x70, 0xd8, 0xc4, 0x78, 0xd0, 0xbc, 0x80, 0x40, 0x34, 0x10, - 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x20, 0x14, 0x00, 0x58, 0x44, 0x10, 0x98, 0x74, 0x20, 0xa0, 0x78, 0x10, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x70, 0x50, 0x00, 0x78, 0x58, 0x00, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x7c, 0x08, - 0x98, 0x78, 0x18, 0x60, 0x48, 0x08, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x08, 0x00, 0x58, 0x44, 0x10, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xa0, 0x78, 0x10, 0x78, 0x5c, 0x18, 0x18, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x04, 0x00, - 0x20, 0x10, 0x00, 0x48, 0x38, 0x00, 0x80, 0x64, 0x18, 0x98, 0x74, 0x18, - 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xa8, 0x7c, 0x08, 0xa8, 0x78, 0x08, 0xa0, 0x78, 0x18, 0x90, 0x70, 0x20, - 0x58, 0x44, 0x08, 0x30, 0x1c, 0x00, 0x10, 0x08, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x30, 0x20, 0x00, 0x98, 0x80, 0x38, - 0xb0, 0x90, 0x30, 0xc0, 0x98, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x20, - 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, - 0xd0, 0xac, 0x50, 0xd0, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xd0, 0xac, 0x50, - 0xd0, 0xac, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, - 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd8, 0xb8, 0x58, 0xd0, 0xb8, 0x58, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd8, 0xb8, 0x60, 0xd8, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x68, 0xc8, 0xb8, 0x70, 0x80, 0x78, 0x40, - 0x18, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x60, 0x54, 0x28, 0xc8, 0xbc, 0x78, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xe0, 0xc4, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, - 0xe0, 0xc4, 0x68, 0xe0, 0xc4, 0x68, 0xe0, 0xc4, 0x70, 0xd8, 0xc4, 0x70, - 0xd8, 0xc0, 0x70, 0xc8, 0xb8, 0x78, 0x70, 0x68, 0x40, 0x08, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x18, 0x0c, 0x00, 0x48, 0x30, 0x00, 0x80, 0x60, 0x18, - 0x98, 0x74, 0x10, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xa8, 0x7c, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x80, 0x00, 0xa8, 0x80, 0x00, - 0xa8, 0x7c, 0x08, 0xa0, 0x7c, 0x10, 0x98, 0x70, 0x18, 0x70, 0x54, 0x08, - 0x38, 0x1c, 0x00, 0x68, 0x4c, 0x08, 0x98, 0x74, 0x18, 0xa0, 0x7c, 0x08, - 0xa0, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x90, 0x74, 0x20, 0x58, 0x44, 0x08, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x58, 0x44, 0x10, 0x98, 0x74, 0x20, 0xa0, 0x7c, 0x10, - 0xa8, 0x7c, 0x10, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x10, 0x98, 0x78, 0x18, 0x70, 0x5c, 0x20, 0x18, 0x0c, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x28, 0x18, 0x00, 0x58, 0x40, 0x00, - 0x80, 0x64, 0x10, 0x98, 0x74, 0x10, 0xa0, 0x78, 0x10, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x08, 0xb0, 0x80, 0x08, 0xb0, 0x7c, 0x00, 0xb0, 0x7c, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, - 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xb0, 0x80, 0x00, 0xa8, 0x80, 0x00, - 0xa8, 0x80, 0x00, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa0, 0x78, 0x10, - 0x98, 0x74, 0x10, 0x88, 0x68, 0x10, 0x68, 0x4c, 0x08, 0x38, 0x24, 0x00, - 0x18, 0x08, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x40, 0x34, 0x08, - 0x98, 0x80, 0x38, 0xb8, 0x94, 0x38, 0xc0, 0x98, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0x9c, 0x28, 0xc0, 0x9c, 0x28, - 0xc0, 0x9c, 0x28, 0xc0, 0xa0, 0x28, 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, - 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, - 0xc8, 0xa4, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x40, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xd0, 0xb0, 0x50, - 0xc8, 0xac, 0x50, 0xc8, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x60, 0xd0, 0xb4, 0x58, 0xd0, 0xb8, 0x58, - 0xd0, 0xb8, 0x58, 0xd0, 0xb8, 0x58, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd8, 0xb8, 0x60, 0xd8, 0xbc, 0x60, - 0xd0, 0xb8, 0x60, 0xd0, 0xbc, 0x60, 0xd0, 0xb8, 0x68, 0xb8, 0xac, 0x70, - 0x48, 0x3c, 0x18, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x60, 0x54, 0x28, 0xd0, 0xb8, 0x78, - 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc0, 0x68, 0xe0, 0xc4, 0x68, - 0xd8, 0xc4, 0x68, 0xe0, 0xc4, 0x68, 0xe0, 0xc4, 0x68, 0xe0, 0xc4, 0x68, - 0xe0, 0xc4, 0x68, 0xe0, 0xc4, 0x68, 0xd8, 0xc4, 0x70, 0xd8, 0xc4, 0x78, - 0xc8, 0xb8, 0x78, 0x80, 0x78, 0x48, 0x20, 0x18, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x30, 0x1c, 0x00, - 0x58, 0x44, 0x08, 0x80, 0x64, 0x18, 0x98, 0x74, 0x18, 0xa0, 0x78, 0x10, - 0xa8, 0x7c, 0x10, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa0, 0x7c, 0x10, - 0x98, 0x78, 0x18, 0x80, 0x64, 0x18, 0x50, 0x3c, 0x08, 0x28, 0x14, 0x00, - 0x20, 0x10, 0x00, 0x50, 0x40, 0x10, 0x80, 0x64, 0x20, 0x80, 0x64, 0x18, - 0x88, 0x68, 0x18, 0x88, 0x68, 0x18, 0x88, 0x68, 0x18, 0x80, 0x64, 0x18, - 0x78, 0x64, 0x28, 0x48, 0x3c, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x08, 0x00, 0x48, 0x38, 0x18, 0x78, 0x64, 0x20, 0x80, 0x64, 0x18, - 0x88, 0x64, 0x18, 0x88, 0x64, 0x18, 0x88, 0x68, 0x18, 0x88, 0x68, 0x18, - 0x88, 0x68, 0x18, 0x80, 0x64, 0x20, 0x60, 0x4c, 0x20, 0x10, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, - 0x30, 0x1c, 0x00, 0x50, 0x3c, 0x08, 0x70, 0x54, 0x10, 0x90, 0x6c, 0x18, - 0x98, 0x78, 0x18, 0xa0, 0x78, 0x10, 0xa0, 0x7c, 0x10, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, - 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, 0xa8, 0x7c, 0x08, - 0xa0, 0x78, 0x10, 0x98, 0x74, 0x10, 0x90, 0x70, 0x18, 0x78, 0x5c, 0x18, - 0x58, 0x44, 0x08, 0x30, 0x20, 0x00, 0x18, 0x0c, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, - 0x48, 0x34, 0x08, 0x98, 0x80, 0x38, 0xb8, 0x94, 0x40, 0xb8, 0x98, 0x38, - 0xc0, 0x9c, 0x30, 0xc0, 0x9c, 0x30, 0xc0, 0x9c, 0x30, 0xc0, 0x9c, 0x30, - 0xc0, 0xa0, 0x30, 0xc0, 0xa0, 0x30, 0xc8, 0xa0, 0x30, 0xc8, 0xa0, 0x30, - 0xc8, 0xa0, 0x38, 0xc8, 0xa4, 0x38, 0xc8, 0xa0, 0x38, 0xc0, 0xa0, 0x38, - 0xc0, 0xa4, 0x38, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc0, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa4, 0x40, - 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, 0xc8, 0xa4, 0x40, 0xc8, 0xa8, 0x40, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xc8, 0xac, 0x48, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xd0, 0xac, 0x50, 0xc8, 0xb0, 0x50, 0xd0, 0xac, 0x50, 0xd0, 0xb0, 0x50, - 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x50, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, - 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, - 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x58, 0xd0, 0xb4, 0x60, 0xd0, 0xb4, 0x60, - 0xd0, 0xb4, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd8, 0xb8, 0x60, 0xd8, 0xb8, 0x60, - 0xd8, 0xbc, 0x60, 0xd0, 0xbc, 0x60, 0xd0, 0xbc, 0x68, 0xc8, 0xb4, 0x70, - 0x90, 0x84, 0x58, 0x10, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x68, 0x5c, 0x28, 0xd0, 0xbc, 0x78, - 0xd0, 0xc0, 0x70, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x68, 0xd8, 0xc4, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc0, 0x68, 0xe0, 0xc4, 0x68, 0xd8, 0xc4, 0x68, - 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, 0xd8, 0xc4, 0x68, - 0xd8, 0xc4, 0x70, 0xd8, 0xc4, 0x70, 0xd8, 0xc4, 0x78, 0xd0, 0xc0, 0x80, - 0x80, 0x74, 0x48, 0x20, 0x1c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x18, 0x10, 0x00, 0x30, 0x20, 0x00, 0x58, 0x3c, 0x00, 0x70, 0x58, 0x08, - 0x90, 0x70, 0x20, 0x98, 0x74, 0x20, 0x98, 0x74, 0x18, 0x98, 0x78, 0x18, - 0x98, 0x74, 0x18, 0x98, 0x74, 0x18, 0x90, 0x74, 0x20, 0x80, 0x64, 0x18, - 0x60, 0x48, 0x08, 0x38, 0x20, 0x00, 0x18, 0x0c, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x20, 0x14, 0x00, 0x30, 0x20, 0x00, 0x38, 0x24, 0x00, - 0x38, 0x20, 0x00, 0x38, 0x20, 0x00, 0x38, 0x20, 0x00, 0x30, 0x20, 0x00, - 0x30, 0x20, 0x00, 0x18, 0x10, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x18, 0x10, 0x00, 0x30, 0x20, 0x00, 0x38, 0x20, 0x00, - 0x38, 0x20, 0x00, 0x38, 0x20, 0x00, 0x38, 0x20, 0x00, 0x38, 0x24, 0x00, - 0x30, 0x20, 0x00, 0x30, 0x20, 0x00, 0x20, 0x18, 0x00, 0x08, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x18, 0x08, 0x00, 0x28, 0x14, 0x00, 0x40, 0x28, 0x00, - 0x50, 0x38, 0x00, 0x70, 0x54, 0x08, 0x88, 0x68, 0x18, 0x90, 0x74, 0x20, - 0x98, 0x74, 0x20, 0x98, 0x74, 0x18, 0x98, 0x78, 0x18, 0x98, 0x74, 0x18, - 0x98, 0x78, 0x20, 0x98, 0x74, 0x20, 0x98, 0x74, 0x20, 0x90, 0x70, 0x20, - 0x78, 0x58, 0x10, 0x60, 0x44, 0x00, 0x40, 0x2c, 0x00, 0x28, 0x18, 0x00, - 0x18, 0x0c, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x08, 0x08, 0x00, 0x20, 0x18, 0x00, 0x70, 0x60, 0x28, 0xa0, 0x84, 0x40, - 0xb0, 0x94, 0x40, 0xb0, 0x98, 0x38, 0xb8, 0x9c, 0x38, 0xc0, 0x9c, 0x38, - 0xc0, 0xa0, 0x38, 0xc0, 0xa0, 0x38, 0xc0, 0xa0, 0x38, 0xc0, 0xa0, 0x38, - 0xc0, 0xa0, 0x38, 0xc0, 0xa0, 0x38, 0xc0, 0xa0, 0x40, 0xc0, 0xa0, 0x38, - 0xc0, 0xa4, 0x40, 0xc0, 0xa4, 0x40, 0xc8, 0xa4, 0x40, 0xc0, 0xa4, 0x40, - 0xc0, 0xa4, 0x40, 0xc0, 0xa4, 0x40, 0xc8, 0xa4, 0x48, 0xc0, 0xa4, 0x48, - 0xc8, 0xa4, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x48, - 0xc8, 0xa8, 0x48, 0xc8, 0xa8, 0x50, 0xc8, 0xa8, 0x50, 0xc8, 0xa8, 0x50, - 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, 0xc8, 0xac, 0x50, - 0xd0, 0xac, 0x58, 0xc8, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xc8, 0xb0, 0x58, - 0xc8, 0xb0, 0x58, 0xc8, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, - 0xc8, 0xb0, 0x58, 0xc8, 0xb0, 0x58, 0xd0, 0xb0, 0x58, 0xd0, 0xb0, 0x58, - 0xd0, 0xb4, 0x58, 0xd0, 0xb0, 0x60, 0xd0, 0xb4, 0x60, 0xd0, 0xb4, 0x60, - 0xd0, 0xb4, 0x60, 0xd0, 0xb4, 0x60, 0xd0, 0xb4, 0x60, 0xd0, 0xb4, 0x60, - 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, - 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, 0xd0, 0xb8, 0x60, - 0xd0, 0xb8, 0x68, 0xd0, 0xb8, 0x68, 0xd8, 0xb8, 0x68, 0xd8, 0xbc, 0x68, - 0xd0, 0xb8, 0x60, 0xd8, 0xbc, 0x68, 0xd0, 0xbc, 0x68, 0xc8, 0xb8, 0x70, - 0xc0, 0xb4, 0x78, 0x48, 0x3c, 0x18, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x80, 0x78, 0x48, 0xd0, 0xbc, 0x78, - 0xd0, 0xc0, 0x70, 0xd8, 0xc0, 0x68, 0xd8, 0xc0, 0x70, 0xd8, 0xc0, 0x70, - 0xd8, 0xc4, 0x70, 0xd8, 0xc0, 0x68, 0xd8, 0xc4, 0x70, 0xd8, 0xc4, 0x68, - 0xd8, 0xc4, 0x70, 0xd8, 0xc4, 0x70, 0xd8, 0xc4, 0x70, 0xd8, 0xc4, 0x70, - 0xd0, 0xc0, 0x78, 0xc0, 0xb4, 0x78, 0xa0, 0x94, 0x60, 0x50, 0x48, 0x20, - 0x10, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x10, 0x08, 0x00, 0x18, 0x0c, 0x00, - 0x20, 0x10, 0x00, 0x30, 0x1c, 0x00, 0x38, 0x24, 0x00, 0x40, 0x30, 0x00, - 0x40, 0x30, 0x00, 0x38, 0x24, 0x00, 0x28, 0x18, 0x00, 0x18, 0x0c, 0x00, - 0x18, 0x08, 0x00, 0x10, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x10, 0x08, 0x00, 0x18, 0x08, 0x00, 0x18, 0x0c, 0x00, 0x28, 0x18, 0x00, - 0x30, 0x20, 0x00, 0x38, 0x28, 0x00, 0x48, 0x30, 0x00, 0x48, 0x34, 0x00, - 0x40, 0x2c, 0x00, 0x38, 0x20, 0x00, 0x28, 0x18, 0x00, 0x20, 0x0c, 0x00, - 0x18, 0x0c, 0x00, 0x10, 0x08, 0x00, 0x10, 0x04, 0x00, 0x08, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x18, 0x10, 0x00, 0x40, 0x30, 0x08, - 0x68, 0x54, 0x18, 0x88, 0x74, 0x30, 0xa0, 0x84, 0x38, 0xb0, 0x94, 0x40, - 0xb8, 0x9c, 0x48, 0xb8, 0x9c, 0x48, 0xb8, 0x9c, 0x48, 0xb8, 0x9c, 0x48, - 0xb8, 0x9c, 0x48, 0xb8, 0x9c, 0x48, 0xb8, 0x9c, 0x50, 0xb8, 0xa0, 0x50, - 0xb8, 0xa0, 0x50, 0xb8, 0xa0, 0x50, 0xc0, 0xa0, 0x50, 0xb8, 0xa0, 0x50, - 0xb8, 0xa0, 0x50, 0xb8, 0xa0, 0x50, 0xc0, 0xa0, 0x58, 0xb8, 0xa0, 0x58, - 0xb8, 0xa0, 0x58, 0xb8, 0xa0, 0x58, 0xc0, 0xa4, 0x58, 0xc0, 0xa4, 0x58, - 0xc0, 0xa4, 0x58, 0xc0, 0xa4, 0x58, 0xc0, 0xa4, 0x58, 0xc0, 0xa4, 0x58, - 0xc0, 0xa8, 0x60, 0xc0, 0xa8, 0x60, 0xc0, 0xa8, 0x60, 0xc0, 0xa8, 0x60, - 0xc0, 0xa8, 0x60, 0xc0, 0xa8, 0x60, 0xc0, 0xa8, 0x60, 0xc0, 0xa8, 0x60, - 0xc0, 0xac, 0x60, 0xc0, 0xa8, 0x60, 0xc0, 0xac, 0x60, 0xc0, 0xac, 0x60, - 0xc0, 0xac, 0x60, 0xc0, 0xac, 0x60, 0xc0, 0xac, 0x68, 0xc8, 0xac, 0x68, - 0xc8, 0xac, 0x68, 0xc8, 0xac, 0x68, 0xc8, 0xb0, 0x68, 0xc8, 0xac, 0x68, - 0xc8, 0xac, 0x68, 0xc8, 0xb0, 0x68, 0xc8, 0xb0, 0x68, 0xc8, 0xb0, 0x68, - 0xc8, 0xb0, 0x68, 0xc8, 0xb0, 0x68, 0xc8, 0xb0, 0x70, 0xc8, 0xb0, 0x70, - 0xc8, 0xb0, 0x70, 0xc8, 0xb0, 0x70, 0xc8, 0xb0, 0x70, 0xc8, 0xb4, 0x70, - 0xc8, 0xb4, 0x70, 0xc8, 0xb4, 0x70, 0xc8, 0xb4, 0x70, 0xd0, 0xb4, 0x70, - 0xc8, 0xb4, 0x70, 0xc8, 0xb4, 0x70, 0xc8, 0xb4, 0x70, 0xc8, 0xb4, 0x70, - 0xd0, 0xb8, 0x70, 0xd0, 0xb8, 0x70, 0xc8, 0xb8, 0x70, 0xc8, 0xb8, 0x78, - 0xc0, 0xb4, 0x80, 0x90, 0x88, 0x60, 0x18, 0x14, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x80, 0x74, 0x50, 0xc8, 0xbc, 0x80, - 0xc8, 0xbc, 0x78, 0xd0, 0xbc, 0x78, 0xd0, 0xbc, 0x78, 0xd0, 0xc0, 0x78, - 0xd0, 0xc0, 0x78, 0xd0, 0xc0, 0x78, 0xd0, 0xc0, 0x78, 0xd0, 0xc0, 0x78, - 0xd0, 0xc0, 0x78, 0xd0, 0xc0, 0x78, 0xc0, 0xb0, 0x70, 0xa8, 0x9c, 0x60, - 0x88, 0x7c, 0x48, 0x58, 0x54, 0x28, 0x28, 0x20, 0x00, 0x08, 0x08, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, 0x10, 0x04, 0x00, 0x10, 0x04, 0x00, - 0x10, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x04, 0x00, 0x10, 0x04, 0x00, 0x10, 0x04, 0x00, 0x10, 0x08, 0x00, - 0x10, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, - 0x18, 0x0c, 0x00, 0x28, 0x1c, 0x00, 0x38, 0x24, 0x00, 0x40, 0x30, 0x00, - 0x40, 0x30, 0x00, 0x40, 0x30, 0x00, 0x40, 0x30, 0x00, 0x40, 0x30, 0x00, - 0x40, 0x30, 0x00, 0x40, 0x30, 0x00, 0x40, 0x30, 0x00, 0x40, 0x30, 0x08, - 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, - 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, - 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, 0x40, 0x34, 0x08, 0x40, 0x34, 0x08, - 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, - 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, 0x40, 0x34, 0x08, 0x40, 0x34, 0x08, - 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, 0x40, 0x30, 0x08, - 0x40, 0x34, 0x08, 0x40, 0x30, 0x08, 0x40, 0x34, 0x08, 0x40, 0x34, 0x08, - 0x40, 0x34, 0x08, 0x40, 0x34, 0x08, 0x40, 0x30, 0x10, 0x40, 0x34, 0x08, - 0x40, 0x30, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, - 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, - 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, - 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, - 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, - 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, - 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, 0x40, 0x34, 0x10, - 0x40, 0x34, 0x18, 0x30, 0x28, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x20, 0x08, 0x40, 0x34, 0x18, - 0x40, 0x38, 0x10, 0x40, 0x38, 0x10, 0x40, 0x38, 0x10, 0x40, 0x38, 0x10, - 0x40, 0x38, 0x10, 0x40, 0x38, 0x10, 0x40, 0x38, 0x10, 0x40, 0x38, 0x10, - 0x40, 0x38, 0x10, 0x40, 0x38, 0x10, 0x38, 0x30, 0x08, 0x30, 0x28, 0x08, - 0x18, 0x14, 0x00, 0x08, 0x04, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#endif - -#endif diff --git a/lk/platform/msm_shared/include/uart_dm.h b/lk/platform/msm_shared/include/uart_dm.h deleted file mode 100644 index bf386c4..0000000 --- a/lk/platform/msm_shared/include/uart_dm.h +++ /dev/null @@ -1,273 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __UART_DM_H__ -#define __UART_DM_H__ - -#define MSM_BOOT_UART_DM_EXTR_BITS(value, start_pos, end_pos) \ - ((value << (32 - end_pos))\ - >> (32 - (end_pos - start_pos))) - -/* GPIO pins - 2 wire using UART2 */ -#define MSM_BOOT_UART_DM_RX_GPIO 117 -#define MSM_BOOT_UART_DM_TX_GPIO 118 - - -/* UART Parity Mode */ -enum MSM_BOOT_UART_DM_PARITY_MODE -{ - MSM_BOOT_UART_DM_NO_PARITY, - MSM_BOOT_UART_DM_ODD_PARITY, - MSM_BOOT_UART_DM_EVEN_PARITY, - MSM_BOOT_UART_DM_SPACE_PARITY -}; - -/* UART Stop Bit Length */ -enum MSM_BOOT_UART_DM_STOP_BIT_LEN -{ - MSM_BOOT_UART_DM_SBL_9_16, - MSM_BOOT_UART_DM_SBL_1, - MSM_BOOT_UART_DM_SBL_1_9_16, - MSM_BOOT_UART_DM_SBL_2 -}; - -/* UART Bits per Char */ -enum MSM_BOOT_UART_DM_BITS_PER_CHAR -{ - MSM_BOOT_UART_DM_5_BPS, - MSM_BOOT_UART_DM_6_BPS, - MSM_BOOT_UART_DM_7_BPS, - MSM_BOOT_UART_DM_8_BPS -}; - -/* 8-N-1 Configuration */ -#define MSM_BOOT_UART_DM_8_N_1_MODE (MSM_BOOT_UART_DM_NO_PARITY | \ - (MSM_BOOT_UART_DM_SBL_1 << 2) | \ - (MSM_BOOT_UART_DM_8_BPS << 4)) - -/* CSR is used to further divide fundamental frequency. - * Using EE we are dividing gsbi_uart_clk by 2 so as to get - * 115.2k bit rate for fundamental frequency of 3.6864 MHz */ -#define MSM_BOOT_UART_DM_RX_TX_BIT_RATE 0xEE - -/* - * Define Macros for GSBI and UARTDM Registers - */ - -/* Clocks */ - -#define MSM_BOOT_CLK_CTL_BASE 0x00900000 - -#define MSM_BOOT_PLL_ENABLE_SC0 (MSM_BOOT_CLK_CTL_BASE + 0x34C0) - -#define MSM_BOOT_PLL8_STATUS (MSM_BOOT_CLK_CTL_BASE + 0x3158) - -#define MSM_BOOT_GSBIn_HCLK_CTL(n) (MSM_BOOT_CLK_CTL_BASE + 0x29A0 +\ - ( 32 * n )) - -#define MSM_BOOT_GSBIn_UART_APPS_MD(n) (MSM_BOOT_CLK_CTL_BASE + 0x29B0 +\ - ( 32 * n)) - -#define MSM_BOOT_GSBIn_UART_APPS_NS(n) (MSM_BOOT_CLK_CTL_BASE + 0x29B4 +\ - (32 * n)) - -#define MSM_BOOT_UART_DM_GSBI_HCLK_CTL MSM_BOOT_GSBIn_HCLK_CTL(12) - -#define MSM_BOOT_UART_DM_APPS_MD MSM_BOOT_GSBIn_UART_APPS_MD(12) - -#define MSM_BOOT_UART_DM_APPS_NS MSM_BOOT_GSBIn_UART_APPS_NS(12) - - -/* Using GSBI12 for UART */ -#define MSM_BOOT_GSBI_BASE 0x19C00000 - -#define MSM_BOOT_GSBI_CTRL_REG MSM_BOOT_GSBI_BASE - -#define MSM_BOOT_UART_DM_BASE (MSM_BOOT_GSBI_BASE+0x40000) - -#define MSM_BOOT_UART_DM_REG(offset) (MSM_BOOT_UART_DM_BASE + offset) - -/* UART Operational Mode Register */ -#define MSM_BOOT_UART_DM_MR1 MSM_BOOT_UART_DM_REG(0x0000) -#define MSM_BOOT_UART_DM_MR2 MSM_BOOT_UART_DM_REG(0x0004) -#define MSM_BOOT_UART_DM_RXBRK_ZERO_CHAR_OFF (1 << 8) -#define MSM_BOOT_UART_DM_LOOPBACK (1 << 7) - -/* UART Clock Selection Register */ -#define MSM_BOOT_UART_DM_CSR MSM_BOOT_UART_DM_REG(0x0008) - -/* UART DM TX FIFO Registers - 4 */ -#define MSM_BOOT_UART_DM_TF(x) MSM_BOOT_UART_DM_REG(0x0070+(4*x)) - -/* UART Command Register */ -#define MSM_BOOT_UART_DM_CR MSM_BOOT_UART_DM_REG(0x0010) -#define MSM_BOOT_UART_DM_CR_RX_ENABLE (1 << 0) -#define MSM_BOOT_UART_DM_CR_RX_DISABLE (1 << 1) -#define MSM_BOOT_UART_DM_CR_TX_ENABLE (1 << 2) -#define MSM_BOOT_UART_DM_CR_TX_DISABLE (1 << 3) - -/* UART Channel Command */ -#define MSM_BOOT_UART_DM_CR_CH_CMD_LSB(x) ((x & 0x0f) << 4) -#define MSM_BOOT_UART_DM_CR_CH_CMD_MSB(x) ((x >> 4 ) << 11 ) -#define MSM_BOOT_UART_DM_CR_CH_CMD(x) (MSM_BOOT_UART_DM_CR_CH_CMD_LSB(x) | \ - MSM_BOOT_UART_DM_CR_CH_CMD_MSB(x)) -#define MSM_BOOT_UART_DM_CMD_NULL MSM_BOOT_UART_DM_CR_CH_CMD(0) -#define MSM_BOOT_UART_DM_CMD_RESET_RX MSM_BOOT_UART_DM_CR_CH_CMD(1) -#define MSM_BOOT_UART_DM_CMD_RESET_TX MSM_BOOT_UART_DM_CR_CH_CMD(2) -#define MSM_BOOT_UART_DM_CMD_RESET_ERR_STAT MSM_BOOT_UART_DM_CR_CH_CMD(3) -#define MSM_BOOT_UART_DM_CMD_RES_BRK_CHG_INT MSM_BOOT_UART_DM_CR_CH_CMD(4) -#define MSM_BOOT_UART_DM_CMD_START_BRK MSM_BOOT_UART_DM_CR_CH_CMD(5) -#define MSM_BOOT_UART_DM_CMD_STOP_BRK MSM_BOOT_UART_DM_CR_CH_CMD(6) -#define MSM_BOOT_UART_DM_CMD_RES_CTS_N MSM_BOOT_UART_DM_CR_CH_CMD(7) -#define MSM_BOOT_UART_DM_CMD_RES_STALE_INT MSM_BOOT_UART_DM_CR_CH_CMD(8) -#define MSM_BOOT_UART_DM_CMD_PACKET_MODE MSM_BOOT_UART_DM_CR_CH_CMD(9) -#define MSM_BOOT_UART_DM_CMD_MODE_RESET MSM_BOOT_UART_DM_CR_CH_CMD(C) -#define MSM_BOOT_UART_DM_CMD_SET_RFR_N MSM_BOOT_UART_DM_CR_CH_CMD(D) -#define MSM_BOOT_UART_DM_CMD_RES_RFR_N MSM_BOOT_UART_DM_CR_CH_CMD(E) -#define MSM_BOOT_UART_DM_CMD_RES_TX_ERR MSM_BOOT_UART_DM_CR_CH_CMD(10) -#define MSM_BOOT_UART_DM_CMD_CLR_TX_DONE MSM_BOOT_UART_DM_CR_CH_CMD(11) -#define MSM_BOOT_UART_DM_CMD_RES_BRKSTRT_INT MSM_BOOT_UART_DM_CR_CH_CMD(12) -#define MSM_BOOT_UART_DM_CMD_RES_BRKEND_INT MSM_BOOT_UART_DM_CR_CH_CMD(13) -#define MSM_BOOT_UART_DM_CMD_RES_PER_FRM_INT MSM_BOOT_UART_DM_CR_CH_CMD(14) - -/*UART General Command */ -#define MSM_BOOT_UART_DM_CR_GENERAL_CMD(x) ((x) << 8) - -#define MSM_BOOT_UART_DM_GCMD_NULL MSM_BOOT_UART_DM_CR_GENERAL_CMD(0) -#define MSM_BOOT_UART_DM_GCMD_CR_PROT_EN MSM_BOOT_UART_DM_CR_GENERAL_CMD(1) -#define MSM_BOOT_UART_DM_GCMD_CR_PROT_DIS MSM_BOOT_UART_DM_CR_GENERAL_CMD(2) -#define MSM_BOOT_UART_DM_GCMD_RES_TX_RDY_INT MSM_BOOT_UART_DM_CR_GENERAL_CMD(3) -#define MSM_BOOT_UART_DM_GCMD_SW_FORCE_STALE MSM_BOOT_UART_DM_CR_GENERAL_CMD(4) -#define MSM_BOOT_UART_DM_GCMD_ENA_STALE_EVT MSM_BOOT_UART_DM_CR_GENERAL_CMD(5) -#define MSM_BOOT_UART_DM_GCMD_DIS_STALE_EVT MSM_BOOT_UART_DM_CR_GENERAL_CMD(6) - -/* UART Interrupt Mask Register */ -#define MSM_BOOT_UART_DM_IMR MSM_BOOT_UART_DM_REG(0x0014) -#define MSM_BOOT_UART_DM_TXLEV (1 << 0) -#define MSM_BOOT_UART_DM_RXHUNT (1 << 1) -#define MSM_BOOT_UART_DM_RXBRK_CHNG (1 << 2) -#define MSM_BOOT_UART_DM_RXSTALE (1 << 3) -#define MSM_BOOT_UART_DM_RXLEV (1 << 4) -#define MSM_BOOT_UART_DM_DELTA_CTS (1 << 5) -#define MSM_BOOT_UART_DM_CURRENT_CTS (1 << 6) -#define MSM_BOOT_UART_DM_TX_READY (1 << 7) -#define MSM_BOOT_UART_DM_TX_ERROR (1 << 8) -#define MSM_BOOT_UART_DM_TX_DONE (1 << 9) -#define MSM_BOOT_UART_DM_RXBREAK_START (1 << 10) -#define MSM_BOOT_UART_DM_RXBREAK_END (1 << 11) -#define MSM_BOOT_UART_DM_PAR_FRAME_ERR_IRQ (1 << 12) - -#define MSM_BOOT_UART_DM_IMR_ENABLED (MSM_BOOT_UART_DM_TX_READY | \ - MSM_BOOT_UART_DM_TXLEV | \ - MSM_BOOT_UART_DM_RXLEV | \ - MSM_BOOT_UART_DM_RXSTALE) - -/* UART Interrupt Programming Register */ -#define MSM_BOOT_UART_DM_IPR MSM_BOOT_UART_DM_REG(0x0018) -#define MSM_BOOT_UART_DM_STALE_TIMEOUT_LSB 0x0f -#define MSM_BOOT_UART_DM_STALE_TIMEOUT_MSB 0 /* Not used currently */ - -/* UART Transmit/Receive FIFO Watermark Register */ -#define MSM_BOOT_UART_DM_TFWR MSM_BOOT_UART_DM_REG(0x001C) -/* Interrupt is generated when FIFO level is less than or equal to this value */ -#define MSM_BOOT_UART_DM_TFW_VALUE 0 - -#define MSM_BOOT_UART_DM_RFWR MSM_BOOT_UART_DM_REG(0x0020) -/*Interrupt generated when no of words in RX FIFO is greater than this value */ -#define MSM_BOOT_UART_DM_RFW_VALUE 0 - -/* UART Hunt Character Register */ -#define MSM_BOOT_UART_DM_HCR MSM_BOOT_UART_DM_REG(0x0024) - -/* Used for RX transfer initialization */ -#define MSM_BOOT_UART_DM_DMRX MSM_BOOT_UART_DM_REG(0x0034) - -/* Default DMRX value - any value bigger than FIFO size would be fine */ -#define MSM_BOOT_UART_DM_DMRX_DEF_VALUE 0x220 - -/* Register to enable IRDA function */ -#define MSM_BOOT_UART_DM_IRDA MSM_BOOT_UART_DM_REG(0x0038) - -/* UART Data Mover Enable Register */ -#define MSM_BOOT_UART_DM_DMEN MSM_BOOT_UART_DM_REG(0x003C) - -/* Number of characters for Transmission */ -#define MSM_BOOT_UART_DM_NO_CHARS_FOR_TX MSM_BOOT_UART_DM_REG(0x0040) - -/* UART RX FIFO Base Address */ -#define MSM_BOOT_UART_DM_BADR MSM_BOOT_UART_DM_REG(0x0044) - -/* UART Status Register */ -#define MSM_BOOT_UART_DM_SR MSM_BOOT_UART_DM_REG(0x0008) -#define MSM_BOOT_UART_DM_SR_RXRDY (1 << 0) -#define MSM_BOOT_UART_DM_SR_RXFULL (1 << 1) -#define MSM_BOOT_UART_DM_SR_TXRDY (1 << 2) -#define MSM_BOOT_UART_DM_SR_TXEMT (1 << 3) -#define MSM_BOOT_UART_DM_SR_UART_OVERRUN (1 << 4) -#define MSM_BOOT_UART_DM_SR_PAR_FRAME_ERR (1 << 5) -#define MSM_BOOT_UART_DM_RX_BREAK (1 << 6) -#define MSM_BOOT_UART_DM_HUNT_CHAR (1 << 7) -#define MSM_BOOT_UART_DM_RX_BRK_START_LAST (1 << 8) - -/* UART Receive FIFO Registers - 4 in numbers */ -#define MSM_BOOT_UART_DM_RF(x) MSM_BOOT_UART_DM_REG(0x0070+(4*x)) - -/* UART Masked Interrupt Status Register */ -#define MSM_BOOT_UART_DM_MISR MSM_BOOT_UART_DM_REG(0x0010) - -/* UART Interrupt Status Register */ -#define MSM_BOOT_UART_DM_ISR MSM_BOOT_UART_DM_REG(0x0014) - -/* Number of characters received since the end of last RX transfer */ -#define MSM_BOOT_UART_DM_RX_TOTAL_SNAP MSM_BOOT_UART_DM_REG(0x0038) - -/* UART TX FIFO Status Register */ -#define MSM_BOOT_UART_DM_TXFS MSM_BOOT_UART_DM_REG(0x004C) -#define MSM_BOOT_UART_DM_TXFS_STATE_LSB(x) MSM_BOOT_UART_DM_EXTR_BITS(x,0,6) -#define MSM_BOOT_UART_DM_TXFS_STATE_MSB(x) MSM_BOOT_UART_DM_EXTR_BITS(x,14,31) -#define MSM_BOOT_UART_DM_TXFS_BUF_STATE(x) MSM_BOOT_UART_DM_EXTR_BITS(x,7,9) -#define MSM_BOOT_UART_DM_TXFS_ASYNC_STATE(x) MSM_BOOT_UART_DM_EXTR_BITS(x,10,13) - -/* UART RX FIFO Status Register */ -#define MSM_BOOT_UART_DM_RXFS MSM_BOOT_UART_DM_REG(0x0050) -#define MSM_BOOT_UART_DM_RXFS_STATE_LSB(x) MSM_BOOT_UART_DM_EXTR_BITS(x,0,6) -#define MSM_BOOT_UART_DM_RXFS_STATE_MSB(x) MSM_BOOT_UART_DM_EXTR_BITS(x,14,31) -#define MSM_BOOT_UART_DM_RXFS_BUF_STATE(x) MSM_BOOT_UART_DM_EXTR_BITS(x,7,9) -#define MSM_BOOT_UART_DM_RXFS_ASYNC_STATE(x) MSM_BOOT_UART_DM_EXTR_BITS(x,10,13) - - - -/* Macros for Common Errors */ -#define MSM_BOOT_UART_DM_E_SUCCESS 0 -#define MSM_BOOT_UART_DM_E_FAILURE 1 -#define MSM_BOOT_UART_DM_E_TIMEOUT 2 -#define MSM_BOOT_UART_DM_E_INVAL 3 -#define MSM_BOOT_UART_DM_E_MALLOC_FAIL 4 -#define MSM_BOOT_UART_DM_E_RX_NOT_READY 5 - -#endif /* __UART_DM_H__*/ diff --git a/lk/platform/msm_shared/jtag.c b/lk/platform/msm_shared/jtag.c deleted file mode 100644 index ca45404..0000000 --- a/lk/platform/msm_shared/jtag.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#define STATUS_NOMSG 0 -#define STATUS_OKAY 1 -#define STATUS_FAIL 2 -#define STATUS_PRINT 3 - -volatile unsigned _jtag_cmd = 0; -volatile unsigned _jtag_msg = 0; -unsigned char _jtag_cmd_buffer[128]; -unsigned char _jtag_msg_buffer[128]; - -volatile unsigned _jtag_arg0 = 0; -volatile unsigned _jtag_arg1 = 0; -volatile unsigned _jtag_arg2 = 0; - - -void jtag_hook(void); - -static void jtag_msg(unsigned status, const char *msg) -{ - unsigned char *out = _jtag_msg_buffer; - while((*out++ = *msg++) != 0) ; - _jtag_msg = status; - do { - jtag_hook(); - } while(_jtag_msg != 0); -} - -void jtag_okay(const char *msg) -{ - if(msg == 0) msg = "OKAY"; - jtag_msg(STATUS_OKAY, msg); -} - -void jtag_fail(const char *msg) -{ - if(msg == 0) msg = "FAIL"; - jtag_msg(STATUS_FAIL, msg); -} - -int jtag_cmd_pending() -{ - jtag_hook(); - return (int) _jtag_cmd; -} - -void jtag_cmd_loop(void (*do_cmd)(const char *, unsigned, unsigned, unsigned)) -{ - unsigned n; - for(;;) { - if(jtag_cmd_pending()){ - do_cmd((const char*) _jtag_cmd_buffer, _jtag_arg0, _jtag_arg1, _jtag_arg2); - for(n = 0; n < 256; n++) _jtag_cmd_buffer[n] = 0; - _jtag_arg0 = 0; - _jtag_arg1 = 0; - _jtag_arg2 = 0; - _jtag_cmd = 0; - } - } -} - -static char jtag_putc_buffer[128]; -static unsigned jtag_putc_count = 0; - -static void jtag_push_buffer(void) -{ - jtag_putc_buffer[jtag_putc_count] = 0; - jtag_putc_count = 0; - jtag_msg(STATUS_PRINT, jtag_putc_buffer); -} - -void jtag_dputc(unsigned c) -{ - if((c < 32) || (c > 127)) { - if(c == '\n') { - jtag_push_buffer(); - } - return; - } - - jtag_putc_buffer[jtag_putc_count++] = c; - if(jtag_putc_count == 127) { - jtag_push_buffer(); - } -} - diff --git a/lk/platform/msm_shared/jtag_hook.S b/lk/platform/msm_shared/jtag_hook.S deleted file mode 100644 index df41bbb..0000000 --- a/lk/platform/msm_shared/jtag_hook.S +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -.global jtag_hook, func - -jtag_hook: - bx lr - diff --git a/lk/platform/msm_shared/lcdc.c b/lk/platform/msm_shared/lcdc.c deleted file mode 100644 index 675c5fb..0000000 --- a/lk/platform/msm_shared/lcdc.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include - -#if PLATFORM_MSM7X30 -#define MSM_MDP_BASE1 0xA3F00000 -#define LCDC_BASE 0xC0000 -#elif PLATFORM_MSM8X60 -#define MSM_MDP_BASE1 0x05100000 -#define LCDC_BASE 0xC0000 -#define LCDC_FB_ADDR 0x43E00000 -#else -#define MSM_MDP_BASE1 0xAA200000 -#define LCDC_BASE 0xE0000 -#endif - -#define LCDC_PIXCLK_IN_PS 26 -#define LCDC_FB_PHYS 0x16600000 -#define LCDC_FB_BPP 16 - -#define BIT(x) (1<<(x)) -#define DMA_DSTC0G_8BITS (BIT(1)|BIT(0)) -#define DMA_DSTC1B_8BITS (BIT(3)|BIT(2)) -#define DMA_DSTC2R_8BITS (BIT(5)|BIT(4)) -#define CLR_G 0x0 -#define CLR_B 0x1 -#define CLR_R 0x2 -#define MDP_GET_PACK_PATTERN(a,x,y,z,bit) (((a)<<(bit*3))|((x)<<(bit*2))|((y)< -#include -#include -#include -#include -#include -#include -#include - -#include "mddi_hw.h" - -static mddi_llentry *mlist = NULL; -static mddi_llentry *mlist_remote_write = NULL; - -#define MDDI_MAX_REV_PKT_SIZE 0x60 -#define MDDI_REV_PKT_BUF_SIZE 256 -static void *rev_pkt_buf; - -/* functions provided by the target specific panel code */ -void panel_init(struct mddi_client_caps *client_caps); -void panel_poweron(void); -void panel_backlight(int on); - -/* forward decls */ -static void mddi_start_update(void); -static int mddi_update_done(void); - -static struct fbcon_config fb_cfg = { - .format = FB_FORMAT_RGB565, - .bpp = 16, - .update_start = mddi_start_update, - .update_done = mddi_update_done, -}; - -static void printcaps(struct mddi_client_caps *c) -{ - if ((c->length != 0x4a) || (c->type != 0x42)) { - dprintf(INFO, "bad caps header\n"); - memset(c, 0, sizeof(*c)); - return; - } - - dprintf(INFO, "mddi: bm: %d,%d win %d,%d rgb %x\n", - c->bitmap_width, c->bitmap_height, - c->display_window_width, c->display_window_height, - c->rgb_cap); - dprintf(INFO, "mddi: vend %x prod %x\n", - c->manufacturer_name, c->product_code); -} - -/* TODO: add timeout */ -static int mddi_wait_status(unsigned statmask) -{ - while ((readl(MDDI_STAT) & statmask) == 0); - return 0; -} - -/* TODO: add timeout */ -static int mddi_wait_interrupt(unsigned intmask) -{ - while ((readl(MDDI_INT) & intmask) == 0); - return 0; -} - -void mddi_remote_write(unsigned val, unsigned reg) -{ - mddi_llentry *ll; - mddi_register_access *ra; - - ll = mlist_remote_write; - - ra = &(ll->u.r); - ra->length = 14 + 4; - ra->type = TYPE_REGISTER_ACCESS; - ra->client_id = 0; - ra->rw_info = MDDI_WRITE | 1; - ra->crc = 0; - - ra->reg_addr = reg; - ra->reg_data = val; - - ll->flags = 1; - ll->header_count = 14; - ll->data_count = 4; - ll->data = &ra->reg_data; - ll->next = (void *) 0; - ll->reserved = 0; - - writel((unsigned) ll, MDDI_PRI_PTR); - - mddi_wait_status(MDDI_STAT_PRI_LINK_LIST_DONE); -} - -static void mddi_start_update(void) -{ - writel((unsigned) mlist, MDDI_PRI_PTR); -} - -static int mddi_update_done(void) -{ - return !!(readl(MDDI_STAT) & MDDI_STAT_PRI_LINK_LIST_DONE); -} - -static void mddi_do_cmd(unsigned cmd) -{ - writel(cmd, MDDI_CMD); - mddi_wait_interrupt(MDDI_INT_NO_REQ_PKTS_PENDING); -} - -static void mddi_init_rev_encap(void) -{ - memset(rev_pkt_buf, 0xee, MDDI_REV_PKT_BUF_SIZE); - writel((unsigned) rev_pkt_buf, MDDI_REV_PTR); - writel((unsigned) rev_pkt_buf, MDDI_REV_PTR); - writel(MDDI_REV_PKT_BUF_SIZE, MDDI_REV_SIZE); - writel(MDDI_REV_PKT_BUF_SIZE, MDDI_REV_ENCAP_SZ); - mddi_do_cmd(CMD_FORCE_NEW_REV_PTR); -} - -static void mddi_set_auto_hibernate(unsigned on) -{ - writel(CMD_POWER_DOWN, MDDI_CMD); - mddi_wait_interrupt(MDDI_INT_IN_HIBERNATION); - mddi_do_cmd(CMD_HIBERNATE | !!on); -} - -void mddi_set_caps(mddi_client_caps *c) -{ - /* Hardcoding the capability values */ - c->length = 74; - c->type = 66; - c->client_id = 0; - c->protocol_ver = 1; - c->min_protocol_ver = 1; - c->data_rate_cap = 400; - c->interface_type_cap = 0; - c->num_alt_displays = 1; - c->postcal_data_rate = 400; - c->bitmap_width = TARGET_XRES; - c->bitmap_height = TARGET_YRES; - c->display_window_width = TARGET_XRES; - c->display_window_height = TARGET_YRES; - c->cmap_size = 0; - c->cmap_rgb_width = 0; - c->rgb_cap = 34592; - c->mono_cap = 0; - c->reserved1 = 0; - c->ycbcr_cap = 0; - c->bayer_cap = 0; - c->alpha_cursor_planes = 0; - c->client_feature_cap = 4489216; - c->max_video_frame_rate_cap = 60; - c->min_video_frame_rate_cap = 0; - c->min_sub_frame_rate = 0; - c->audio_buf_depth = 0; - c->audio_channel_cap = 0; - c->audio_sampe_rate_rap = 0; - c->audio_sample_res = 0; - c->mic_audio_sample_res = 0; - c->mic_sample_rate_cap = 0; - c->keyboard_data_fmt = 0; - c->pointing_device_data_fmt = 0; - c->content_protection_type = 0; - c->manufacturer_name = 53859; - c->product_code = 34594; - c->reserved3 = 0; - c->serial_no = 1; - c->week_of_manufacture = 0; - c->year_of_manufacture = 0; - c->crc = 53536; -} - -static void mddi_get_caps(struct mddi_client_caps *caps) -{ - unsigned timeout = 100000; - unsigned n; - - writel(0xffffffff, MDDI_INT); - mddi_do_cmd(CMD_LINK_ACTIVE); - - /* sometimes this will fail -- do it three times for luck... */ - mddi_do_cmd(CMD_RTD_MEASURE); - thread_sleep(1);//mdelay(1); - - mddi_do_cmd(CMD_RTD_MEASURE); - thread_sleep(1);//mdelay(1); - - mddi_do_cmd(CMD_RTD_MEASURE); - thread_sleep(1);//mdelay(1); - - mddi_do_cmd(CMD_GET_CLIENT_CAP); - - do { - n = readl(MDDI_INT); - } while (!(n & MDDI_INT_REV_DATA_AVAIL) && (--timeout)); - - if (timeout == 0) - dprintf(INFO, "timeout\n"); - - memcpy(caps, rev_pkt_buf, sizeof(struct mddi_client_caps)); -} - -static unsigned mddi_init_regs(void) -{ - mddi_do_cmd(CMD_RESET); - - mddi_do_cmd(CMD_PERIODIC_REV_ENC); - - writel(0x0001, MDDI_VERSION); - writel(0x3C00, MDDI_BPS); - writel(0x0003, MDDI_SPM); - - writel(0x0005, MDDI_TA1_LEN); - writel(0x001A, MDDI_TA2_LEN); - writel(0x0096, MDDI_DRIVE_HI); - writel(0x0050, MDDI_DRIVE_LO); - writel(0x003C, MDDI_DISP_WAKE); - writel(0x0004, MDDI_REV_RATE_DIV); - - /* needs to settle for 5uS */ - if (readl(MDDI_PAD_CTL) == 0) { - writel(0x08000, MDDI_PAD_CTL); - udelay(5); - } - - writel(0xA850F, MDDI_PAD_CTL); - writel(0x60006, MDDI_DRIVER_START_CNT); - - mddi_init_rev_encap(); - - /* disable hibernate */ - mddi_do_cmd(CMD_HIBERNATE | 0); - - return readl(MDDI_CORE_VER) & 0xffff; -} - -struct fbcon_config *mddi_init(void) -{ - unsigned n; - struct mddi_client_caps client_caps; - - dprintf(INFO, "mddi_init()\n"); - - rev_pkt_buf = memalign(32, MDDI_REV_PKT_BUF_SIZE); - mlist_remote_write = memalign(32, sizeof(struct mddi_llentry)); - - n = mddi_init_regs(); - dprintf(INFO, "mddi version: 0x%08x\n", n); - - //mddi_get_caps(&client_caps); - //if(!(client_caps.length == 0x4a && client_caps.type == 0x42)) - { - mddi_set_caps(&client_caps); - } - - fb_cfg.width = client_caps.bitmap_width; - fb_cfg.stride = fb_cfg.width; - fb_cfg.height = client_caps.bitmap_height; - - panel_init(&client_caps); - - panel_backlight(0); - panel_poweron(); - - /* v > 8? v > 8 && < 0x19 ? */ - writel(2, MDDI_TEST); - - dprintf(INFO, "panel is %d x %d\n", fb_cfg.width, fb_cfg.height); - - fb_cfg.base = - memalign(4096, fb_cfg.width * fb_cfg.height * (fb_cfg.bpp / 8)); - - mlist = memalign(32, sizeof(mddi_llentry) * (fb_cfg.height / 8)); - dprintf(INFO, "FB @ %p mlist @ %x\n", fb_cfg.base, (unsigned) mlist); - - for(n = 0; n < (fb_cfg.height / 8); n++) { - unsigned y = n * 8; - unsigned pixels = fb_cfg.width * 8; - mddi_video_stream *vs = &(mlist[n].u.v); - - vs->length = sizeof(mddi_video_stream) - 2 + (pixels * 2); - vs->type = TYPE_VIDEO_STREAM; - vs->client_id = 0; - vs->format = 0x5565; // FORMAT_16BPP; - vs->pixattr = PIXATTR_BOTH_EYES | PIXATTR_TO_ALL; - - vs->left = 0; - vs->right = fb_cfg.width - 1; - vs->top = y; - vs->bottom = y + 7; - - vs->start_x = 0; - vs->start_y = y; - - vs->pixels = pixels; - vs->crc = 0; - vs->reserved = 0; - - mlist[n].header_count = sizeof(mddi_video_stream) - 2; - mlist[n].data_count = pixels * 2; - mlist[n].reserved = 0; - mlist[n].data = fb_cfg.base + (y * fb_cfg.width * 2); - mlist[n].next = &mlist[n + 1]; - mlist[n].flags = 0; - } - - mlist[n-1].flags = 1; - mlist[n-1].next = 0; - - mddi_set_auto_hibernate(1); - mddi_do_cmd(CMD_LINK_ACTIVE); - - panel_backlight(1); - - return &fb_cfg; -} diff --git a/lk/platform/msm_shared/mddi_hw.h b/lk/platform/msm_shared/mddi_hw.h deleted file mode 100644 index 016ee54..0000000 --- a/lk/platform/msm_shared/mddi_hw.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __PLATFORM_MSM7K_MDDI_HW_H -#define __PLATFORM_MSM7K_MDDI_HW_H - -#ifdef TARGET_MSM7630_SURF -#define MSM_MDDI_BASE 0xAD600000 -#else -#define MSM_MDDI_BASE 0xAA600000 -#endif - -#if MDP4 -#define MSM_MDP_BASE1 0xA3F00000 -#define LCDC_BASE 0xC0000 -#else -#define MSM_MDP_BASE1 0xAA200000 -#define LCDC_BASE 0xE0000 -#endif - -enum { /* display configuration for MDP4 */ - PRIMARY_INTF_SEL, - SECONDARY_INTF_SEL, - EXTERNAL_INTF_SEL -}; - -#define outp32(port, val) (*((volatile unsigned *) (port)) = ((unsigned) (val))) - -/* see 80-VA736-2 C pp 776-787 */ - -#define MDDI_REG(off) (MSM_MDDI_BASE + (off)) - -#define MDDI_CMD MDDI_REG(0x0000) -#define MDDI_VERSION MDDI_REG(0x0004) -#define MDDI_PRI_PTR MDDI_REG(0x0008) -#define MDDI_SEC_PTR MDDI_REG(0x000C) -#define MDDI_BPS MDDI_REG(0x0010) -#define MDDI_SPM MDDI_REG(0x0014) -#define MDDI_INT MDDI_REG(0x0018) - -#define MDDI_INT_PRI_PTR_READ (1 << 0) -#define MDDI_INT_SEC_PTR_READ (1 << 1) -#define MDDI_INT_REV_DATA_AVAIL (1 << 2) -#define MDDI_INT_DISP_REQ (1 << 3) -#define MDDI_INT_PRI_UNDERFLOW (1 << 4) -#define MDDI_INT_SEC_UNDERFLOW (1 << 5) -#define MDDI_INT_REV_OVERFLOW (1 << 6) -#define MDDI_INT_CRC_ERROR (1 << 7) -#define MDDI_INT_MDDI_IN (1 << 8) -#define MDDI_INT_PRI_OVERWRITE (1 << 9) -#define MDDI_INT_SEC_OVERWRITE (1 << 10) -#define MDDI_INT_REV_OVERWRITE (1 << 11) -#define MDDI_INT_DMA_FAILURE (1 << 12) -#define MDDI_INT_LINK_ACTIVE (1 << 13) -#define MDDI_INT_IN_HIBERNATION (1 << 14) -#define MDDI_INT_PRI_LINK_LIST_DONE (1 << 15) -#define MDDI_INT_SEC_LINK_LIST_DONE (1 << 16) -#define MDDI_INT_NO_REQ_PKTS_PENDING (1 << 17) -#define MDDI_INT_RTD_FAILURE (1 << 18) -#define MDDI_INT_REV_PKT_RECEIVED (1 << 19) -#define MDDI_INT_REV_PKTS_AVAIL (1 << 20) - -#define MDDI_INTEN MDDI_REG(0x001C) -#define MDDI_REV_PTR MDDI_REG(0x0020) -#define MDDI_REV_SIZE MDDI_REG(0x0024) -#define MDDI_STAT MDDI_REG(0x0028) - -#define MDDI_STAT_LINK_ACTIVE (1 << 0) -#define MDDI_STAT_NEW_REV_PTR (1 << 1) -#define MDDI_STAT_NEW_PRI_PTR (1 << 2) -#define MDDI_STAT_NEW_SEC_PTR (1 << 3) -#define MDDI_STAT_IN_HIBERNATION (1 << 4) -#define MDDI_STAT_PRI_LINK_LIST_DONE (1 << 5) -#define MDDI_STAT_SEC_LINK_LIST_DONE (1 << 6) -#define MDDI_STAT_SEND_TIMING_PKT (1 << 7) -#define MDDI_STAT_SEND_REV_ENCAP_WITH_FLAGS (1 << 8) -#define MDDI_STAT_SEND_POWER_DOWN (1 << 9) -#define MDDI_STAT_DO_HANDSHAKE (1 << 10) -#define MDDI_STAT_RTD_MEAS_FAIL (1 << 11) -#define MDDI_STAT_CLIENT_WAKEUP_REQ (1 << 12) -#define MDDI_STAT_DMA_ABORT (1 << 13) -#define MDDI_STAT_REV_OVERFLOW_RESET (1 << 14) -#define MDDI_STAT_FORCE_NEW_REV_PTR (1 << 15) -#define MDDI_STAT_CRC_ERRORS (1 << 16) - -#define MDDI_REV_RATE_DIV MDDI_REG(0x002C) -#define MDDI_REV_CRC_ERR MDDI_REG(0x0030) -#define MDDI_TA1_LEN MDDI_REG(0x0034) -#define MDDI_TA2_LEN MDDI_REG(0x0038) -#define MDDI_TEST_BUS MDDI_REG(0x003C) -#define MDDI_TEST MDDI_REG(0x0040) -#define MDDI_REV_PKT_CNT MDDI_REG(0x0044) -#define MDDI_DRIVE_HI MDDI_REG(0x0048) -#define MDDI_DRIVE_LO MDDI_REG(0x004C) -#define MDDI_DISP_WAKE MDDI_REG(0x0050) -#define MDDI_REV_ENCAP_SZ MDDI_REG(0x0054) -#define MDDI_RTD_VAL MDDI_REG(0x0058) -#define MDDI_MDP_VID_FMT_DES MDDI_REG(0x005C) -#define MDDI_MDP_VID_PIX_ATTR MDDI_REG(0x0060) -#define MDDI_MDP_VID_CLIENTID MDDI_REG(0x0064) -#define MDDI_PAD_CTL MDDI_REG(0x0068) -#define MDDI_DRIVER_START_CNT MDDI_REG(0x006C) -#define MDDI_NEXT_PRI_PTR MDDI_REG(0x0070) -#define MDDI_NEXT_SEC_PTR MDDI_REG(0x0074) -#define MDDI_MISR_CTL MDDI_REG(0x0078) -#define MDDI_MISR_DATA MDDI_REG(0x007C) -#define MDDI_SF_CNT MDDI_REG(0x0080) -#define MDDI_MF_CNT MDDI_REG(0x0084) -#define MDDI_CURR_REV_PTR MDDI_REG(0x0088) -#define MDDI_CORE_VER MDDI_REG(0x008C) -#define MDDI_PAD_IO_CTL MDDI_REG(0x00a0) -#define MDDI_PAD_CAL MDDI_REG(0x00a4) - - -#define CMD_POWER_DOWN 0x0100 -#define CMD_POWER_UP 0x0200 -#define CMD_HIBERNATE 0x0300 -#define CMD_RESET 0x0400 -#define CMD_IGNORE 0x0501 -#define CMD_LISTEN 0x0500 -#define CMD_REV_ENC_REQ 0x0600 -#define CMD_RTD_MEASURE 0x0700 -#define CMD_LINK_ACTIVE 0x0900 -#define CMD_PERIODIC_REV_ENC 0x0A00 -#define CMD_FORCE_NEW_REV_PTR 0x0C00 - -#define CMD_GET_CLIENT_CAP 0x0601 -#define CMD_GET_CLIENT_STATUS 0x0602 - -#if 1 -#define FORMAT_18BPP 0x5666 -#define FORMAT_24BPP 0x5888 -#define FORMAT_16BPP 0x5565 -#else -#define FORMAT_MONOCHROME (0 << 13) -#define FORMAT_PALETTE (1 << 13) -#define FORMAT_RGB (2 << 13) -#define FORMAT_YCBCR422 (3 << 13) -#define FORMAT_BAYER (4 << 13) -#endif - -#define PIXATTR_BOTH_EYES 3 -#define PIXATTR_LEFT_EYE 2 -#define PIXATTR_RIGHT_EYE 1 -#define PIXATTR_ALT_DISPLAY 0 - -#define PIXATTR_PROGRESSIVE 0 -#define PIXATTR_INTERLACED (1 << 2) -#define PIXATTR_ALTERNATE (1 << 3) - -#define PIXATTR_IGNORE_LRTB (1 << 5) - -#define PIXATTR_TO_REFRESH (0 << 6) -#define PIXATTR_TO_OFFLINE (1 << 6) -#define PIXATTR_TO_ALL (3 << 6) - -#define PIXATTR_LAST_ROW (1 << 15) - -#define TYPE_VIDEO_STREAM 16 -#define TYPE_CLIENT_CAPS 66 -#define TYPE_REGISTER_ACCESS 146 -#define TYPE_CLIENT_STATUS 70 - -typedef struct mddi_video_stream mddi_video_stream; -typedef struct mddi_register_access mddi_register_access; -typedef struct mddi_client_caps mddi_client_caps; - -typedef struct mddi_llentry mddi_llentry; - -struct __attribute__((packed)) mddi_video_stream -{ - unsigned short length; /* length in bytes excluding this field */ - unsigned short type; /* MDDI_TYPE_VIDEO_STREAM */ - unsigned short client_id; /* set to zero */ - - unsigned short format; - unsigned short pixattr; - - unsigned short left; - unsigned short top; - unsigned short right; - unsigned short bottom; - - unsigned short start_x; - unsigned short start_y; - - unsigned short pixels; - - unsigned short crc; - unsigned short reserved; -}; - -struct __attribute__((packed)) mddi_register_access -{ - unsigned short length; - unsigned short type; - unsigned short client_id; - - unsigned short rw_info; /* flag below | count of reg_data */ -#define MDDI_WRITE (0 << 14) -#define MDDI_READ (2 << 14) -#define MDDI_READ_RESP (3 << 14) - - unsigned reg_addr; - unsigned short crc; /* 16 bit crc of the above */ - - unsigned reg_data; /* "list" of 3byte data values */ -}; - -struct __attribute__((packed)) mddi_llentry { - unsigned short flags; - unsigned short header_count; - unsigned short data_count; - void *data; - mddi_llentry *next; - unsigned short reserved; - union { - mddi_video_stream v; - mddi_register_access r; - unsigned _[12]; - } u; -}; - -#endif /* __PLATFORM_MSM7K_MDDI_HW_H */ diff --git a/lk/platform/msm_shared/mipi_dsi.c b/lk/platform/msm_shared/mipi_dsi.c deleted file mode 100644 index 4d2a515..0000000 --- a/lk/platform/msm_shared/mipi_dsi.c +++ /dev/null @@ -1,652 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -#include -#include -#include - -#define MIPI_FB_ADDR 0x43E00000 - -#if DISPLAY_MIPI_PANEL_TOSHIBA -static struct fbcon_config mipi_fb_cfg = { - .height = TSH_MIPI_FB_HEIGHT, - .width = TSH_MIPI_FB_WIDTH, - .stride = TSH_MIPI_FB_WIDTH, - .format = FB_FORMAT_RGB888, - .bpp = 24, - .update_start = NULL, - .update_done = NULL, -}; -#elif DISPLAY_MIPI_PANEL_NOVATEK_BLUE -static struct fbcon_config mipi_fb_cfg = { - .height = NOV_MIPI_FB_HEIGHT, - .width = NOV_MIPI_FB_WIDTH, - .stride = NOV_MIPI_FB_WIDTH, - .format = FB_FORMAT_RGB888, - .bpp = 24, - .update_start = NULL, - .update_done = NULL, -}; -#else -static struct fbcon_config mipi_fb_cfg = { - .height = 0, - .width = 0, - .stride = 0, - .format = 0, - .bpp = 0, - .update_start = NULL, - .update_done = NULL, -}; -#endif - -static int cmd_mode_status = 0; - -void configure_dsicore_dsiclk() -{ - unsigned char mnd_mode, root_en, clk_en; - unsigned long src_sel = 0x3; // dsi_phy_pll0_src - unsigned long pre_div_func = 0x00; // predivide by 1 - unsigned long pmxo_sel; - - writel(pre_div_func << 14 | src_sel, MMSS_DSI_NS); - mnd_mode = 0; // Bypass MND - root_en = 1; - clk_en = 1; - pmxo_sel = 0; - - writel((pmxo_sel << 8) | (mnd_mode << 6), MMSS_DSI_CC); - writel(readl(MMSS_DSI_CC) | root_en << 2, MMSS_DSI_CC); - writel(readl(MMSS_DSI_CC) | clk_en, MMSS_DSI_CC); -} - -void configure_dsicore_byteclk(void) -{ - writel(0x00400401, MMSS_MISC_CC2); // select pxo -} - -void configure_dsicore_pclk(void) -{ - unsigned char mnd_mode, root_en, clk_en; - unsigned long src_sel = 0x3; // dsi_phy_pll0_src - unsigned long pre_div_func = 0x01; // predivide by 2 - - writel(pre_div_func << 12 | src_sel, MMSS_DSI_PIXEL_NS); - - mnd_mode = 0; // Bypass MND - root_en = 1; - clk_en = 1; - writel(mnd_mode << 6, MMSS_DSI_PIXEL_CC); - writel(readl(MMSS_DSI_PIXEL_CC) | root_en << 2, MMSS_DSI_PIXEL_CC); - writel(readl(MMSS_DSI_PIXEL_CC) | clk_en, MMSS_DSI_PIXEL_CC); -} - -int mipi_dsi_phy_ctrl_config(struct mipi_dsi_panel_config *pinfo) -{ - - unsigned char lane_1 = 1; - unsigned char lane_2 = 2; - unsigned i; - unsigned off = 0; - struct mipi_dsi_phy_ctrl *pd; - - writel(0x00000001, DSI_PHY_SW_RESET); - mdelay(50); - writel(0x00000000, DSI_PHY_SW_RESET); - - pd = (pinfo->dsi_phy_config); - - off = 0x02cc; /* regulator ctrl 0 */ - for (i = 0; i < 4; i++) { - writel(pd->regulator[i], MIPI_DSI_BASE + off); - off += 4; - } - - off = 0x0260; /* phy timig ctrl 0 */ - for (i = 0; i < 11; i++) { - writel(pd->timing[i], MIPI_DSI_BASE + off); - off += 4; - } - - // T_CLK_POST, T_CLK_PRE for CLK lane P/N HS 200 mV timing length should > - // data lane HS timing length - writel(0xa1e, DSI_CLKOUT_TIMING_CTRL); - - off = 0x0290; /* ctrl 0 */ - for (i = 0; i < 4; i++) { - writel(pd->ctrl[i], MIPI_DSI_BASE + off); - off += 4; - } - - off = 0x02a0; /* strength 0 */ - for (i = 0; i < 4; i++) { - writel(pd->strength[i], MIPI_DSI_BASE + off); - off += 4; - } - - off = 0x0204; /* pll ctrl 1, skip 0 */ - for (i = 1; i < 21; i++) { - writel(pd->pll[i], MIPI_DSI_BASE + off); - off += 4; - } - - /* pll ctrl 0 */ - writel(pd->pll[0], MIPI_DSI_BASE + 0x200); - writel((pd->pll[0] | 0x01), MIPI_DSI_BASE + 0x200); - - return (0); -} - -struct mipi_dsi_panel_config *get_panel_info(void) -{ -#if DISPLAY_MIPI_PANEL_TOSHIBA - return &toshiba_panel_info; -#elif DISPLAY_MIPI_PANEL_NOVATEK_BLUE - return &novatek_panel_info; -#endif - return NULL; - -} - -int dsi_cmd_dma_trigger_for_panel() -{ - unsigned long ReadValue; - unsigned long count = 0; - int status = 0; - - writel(0x03030303, DSI_INT_CTRL); - mdelay(10); - writel(0x1, DSI_CMD_MODE_DMA_SW_TRIGGER); - ReadValue = readl(DSI_INT_CTRL) & 0x00000001; - while (ReadValue != 0x00000001) { - ReadValue = readl(DSI_INT_CTRL) & 0x00000001; - count++; - if (count > 0xffff) { - status = FAIL; - printf("\n\nThis command mode dma test is failed"); - return status; - } - } - - writel((readl(DSI_INT_CTRL) | 0x01000001), DSI_INT_CTRL); - printf - ("\n\nThis command mode is tested successfully, continue on next command mode test"); - return status; -} - -int mipi_dsi_cmds_tx(struct mipi_dsi_cmd *cmds, int count) -{ - int ret = 0; - struct mipi_dsi_cmd *cm; - int i = 0; - - cm = cmds; - for (i = 0; i < count; i++) { - memcpy(DSI_CMD_DMA_MEM_START_ADDR_PANEL, (cm->payload), cm->size); - writel(DSI_CMD_DMA_MEM_START_ADDR_PANEL, DSI_DMA_CMD_OFFSET); - writel(cm->size, DSI_DMA_CMD_LENGTH); // reg 0x48 for this build - ret += dsi_cmd_dma_trigger_for_panel(); - mdelay(10); - cm++; - } - return ret; -} - -int mipi_dsi_panel_initialize(struct mipi_dsi_panel_config *pinfo) -{ - unsigned char DMA_STREAM1 = 0; // for mdp display processor path - unsigned char EMBED_MODE1 = 1; // from frame buffer - unsigned char POWER_MODE2 = 1; // from frame buffer - unsigned char PACK_TYPE1 = 1; // long packet - unsigned char VC1 = 0; - unsigned char DT1 = 0; // non embedded mode - unsigned short WC1 = 0; // for non embedded mode only - int status = 0; - unsigned char DLNx_EN; - unsigned char lane_1 = 1; - unsigned char lane_2 = 2; - - switch (pinfo->num_of_lanes) { - default: - case 1: - DLNx_EN = 1; // 1 lane - break; - case 2: - DLNx_EN = 3; // 2 lane - break; - case 3: - DLNx_EN = 7; // 3 lane - break; - } - - writel(0x0001, DSI_SOFT_RESET); - writel(0x0000, DSI_SOFT_RESET); - - writel((0 << 16) | 0x3f, DSI_CLK_CTRL); // reg:0x118 - writel(DMA_STREAM1 << 8 | 0x04, DSI_TRIG_CTRL); // reg 0x80 dma trigger: sw - // trigger 0x4; dma stream1 - writel(0 << 30 | DLNx_EN << 4 | 0x105, DSI_CTRL); // reg 0x00 for this - // build - writel(EMBED_MODE1 << 28 | POWER_MODE2 << 26 - | PACK_TYPE1 << 24 | VC1 << 22 | DT1 << 16 | WC1, - DSI_COMMAND_MODE_DMA_CTRL); - - status = mipi_dsi_cmds_tx(pinfo->panel_cmds, pinfo->num_of_panel_cmds); - - return status; -} - -int config_dsi_video_mode(unsigned short disp_width, unsigned short disp_height, - unsigned short img_width, unsigned short img_height, - unsigned short hsync_porch0_fp, - unsigned short hsync_porch0_bp, - unsigned short vsync_porch0_fp, - unsigned short vsync_porch0_bp, - unsigned short hsync_width, - unsigned short vsync_width, unsigned short dst_format, - unsigned short traffic_mode, - unsigned short datalane_num) -{ - - unsigned char DST_FORMAT; - unsigned char TRAFIC_MODE; - unsigned char DLNx_EN; - // video mode data ctrl - int status = 0; - unsigned long low_pwr_stop_mode = 0; - unsigned char eof_bllp_pwr = 0x9; - unsigned char interleav = 0; - - // disable mdp first - writel(0x00000000, MDP_DSI_VIDEO_EN); - - writel(0x00000000, DSI_CLK_CTRL); - writel(0x00000000, DSI_CLK_CTRL); - writel(0x00000000, DSI_CLK_CTRL); - writel(0x00000000, DSI_CLK_CTRL); - writel(0x00000002, DSI_CLK_CTRL); - writel(0x00000006, DSI_CLK_CTRL); - writel(0x0000000e, DSI_CLK_CTRL); - writel(0x0000001e, DSI_CLK_CTRL); - writel(0x0000003e, DSI_CLK_CTRL); - - writel(0, DSI_CTRL); - - writel(0, DSI_ERR_INT_MASK0); - - DST_FORMAT = 0; // RGB565 - printf("\nDSI_Video_Mode - Dst Format: RGB565"); - - DLNx_EN = 1; // 1 lane with clk programming - printf("\nData Lane: 1 lane\n"); - - TRAFIC_MODE = 0; // non burst mode with sync pulses - printf("\nTraffic mode: non burst mode with sync pulses\n"); - - writel(0x02020202, DSI_INT_CTRL); - - writel(((img_width + hsync_porch0_bp) << 16) | hsync_porch0_bp, - DSI_VIDEO_MODE_ACTIVE_H); - - writel(((img_height + vsync_porch0_bp) << 16) | (vsync_porch0_bp), - DSI_VIDEO_MODE_ACTIVE_V); - - writel(((img_height + vsync_porch0_fp + vsync_porch0_bp) << 16) - | img_width + hsync_porch0_fp + hsync_porch0_bp, - DSI_VIDEO_MODE_TOTAL); - - writel((hsync_width << 16) | 0, DSI_VIDEO_MODE_HSYNC); - - writel(0 << 16 | 0, DSI_VIDEO_MODE_VSYNC); - - writel(vsync_width << 16 | 0, DSI_VIDEO_MODE_VSYNC_VPOS); - - writel(1, DSI_EOT_PACKET_CTRL); - - writel(0x00000100, DSI_MISR_VIDEO_CTRL); - - writel(low_pwr_stop_mode << 16 | eof_bllp_pwr << 12 | TRAFIC_MODE << 8 - | DST_FORMAT << 4 | 0x0, DSI_VIDEO_MODE_CTRL); - - writel(0x67, DSI_CAL_STRENGTH_CTRL); - - writel(0x80006711, DSI_CAL_CTRL); - - writel(0x00010100, DSI_MISR_VIDEO_CTRL); - - writel(0x00010100, DSI_INT_CTRL); - writel(0x02010202, DSI_INT_CTRL); - - writel(0x02030303, DSI_INT_CTRL); - - writel(interleav << 30 | 0 << 24 | 0 << 20 | DLNx_EN << 4 - | 0x103, DSI_CTRL); - mdelay(10); - - return status; -} - -int config_dsi_cmd_mode(unsigned short disp_width, unsigned short disp_height, - unsigned short img_width, unsigned short img_height, - unsigned short dst_format, - unsigned short traffic_mode, - unsigned short datalane_num) -{ - unsigned char DST_FORMAT; - unsigned char TRAFIC_MODE; - unsigned char DLNx_EN; - // video mode data ctrl - int status = 0; - unsigned long low_pwr_stop_mode = 0; - unsigned char eof_bllp_pwr = 0x9; - unsigned char interleav = 0; - unsigned char ystride = 0x03; - // disable mdp first - - writel(0x00000000, DSI_CLK_CTRL); - writel(0x00000000, DSI_CLK_CTRL); - writel(0x00000000, DSI_CLK_CTRL); - writel(0x00000000, DSI_CLK_CTRL); - writel(0x00000002, DSI_CLK_CTRL); - writel(0x00000006, DSI_CLK_CTRL); - writel(0x0000000e, DSI_CLK_CTRL); - writel(0x0000001e, DSI_CLK_CTRL); - writel(0x0000003e, DSI_CLK_CTRL); - - writel(0x10000000, DSI_ERR_INT_MASK0); - - // writel(0, DSI_CTRL); - - // writel(0, DSI_ERR_INT_MASK0); - - DST_FORMAT = 8; // RGB888 - printf("\nDSI_Cmd_Mode - Dst Format: RGB888"); - - DLNx_EN = 3; // 2 lane with clk programming - printf("\nData Lane: 2 lane\n"); - - TRAFIC_MODE = 0; // non burst mode with sync pulses - printf("\nTraffic mode: non burst mode with sync pulses\n"); - - writel(0x02020202, DSI_INT_CTRL); - - writel(0x00100000 | DST_FORMAT, DSI_COMMAND_MODE_MDP_CTRL); - writel((img_width * ystride + 1) << 16 | 0x0039, - DSI_COMMAND_MODE_MDP_STREAM0_CTRL); - writel((img_width * ystride + 1) << 16 | 0x0039, - DSI_COMMAND_MODE_MDP_STREAM1_CTRL); - writel(img_height << 16 | img_width, DSI_COMMAND_MODE_MDP_STREAM0_TOTAL); - writel(img_height << 16 | img_width, DSI_COMMAND_MODE_MDP_STREAM1_TOTAL); - writel(0xEE, DSI_CAL_STRENGTH_CTRL); - writel(0x80000000, DSI_CAL_CTRL); - writel(0x40, DSI_TRIG_CTRL); - writel(0x13c2c, DSI_COMMAND_MODE_MDP_DCS_CMD_CTRL); - writel(interleav << 30 | 0 << 24 | 0 << 20 | DLNx_EN << 4 | 0x105, - DSI_CTRL); - mdelay(10); - writel(0x10000000, DSI_COMMAND_MODE_DMA_CTRL); - writel(0x10000000, DSI_MISR_CMD_CTRL); - writel(0x00000040, DSI_ERR_INT_MASK0); - writel(0x1, DSI_EOT_PACKET_CTRL); - // writel(0x0, MDP_OVERLAYPROC0_START); - writel(0x00000001, MDP_DMA_P_START); - mdelay(10); - writel(0x1, DSI_CMD_MODE_MDP_SW_TRIGGER); - - status = 1; - return status; -} - -int mdp_setup_dma_p_video_mode(unsigned short disp_width, - unsigned short disp_height, - unsigned short img_width, - unsigned short img_height, - unsigned short hsync_porch0_fp, - unsigned short hsync_porch0_bp, - unsigned short vsync_porch0_fp, - unsigned short vsync_porch0_bp, - unsigned short hsync_width, - unsigned short vsync_width, - unsigned long input_img_addr, - unsigned short img_width_full_size, - unsigned short pack_pattern, - unsigned char ystride) -{ - - // unsigned long mdp_intr_status; - int status = FAIL; - unsigned long hsync_period; - unsigned long vsync_period; - unsigned long vsync_period_intmd; - - printf("\nHi setup MDP4.1 for DSI Video Mode\n"); - - hsync_period = img_width + hsync_porch0_fp + hsync_porch0_bp + 1; - vsync_period_intmd = img_height + vsync_porch0_fp + vsync_porch0_bp + 1; - vsync_period = vsync_period_intmd * hsync_period; - - // ----- programming MDP_AXI_RDMASTER_CONFIG -------- - /* MDP_AXI_RDMASTER_CONFIG set all master to read from AXI port 0, that's - the only port connected */ - writel(0x00290000, MDP_AXI_RDMASTER_CONFIG); - writel(0x00000004, MDP_AXI_WRMASTER_CONFIG); - writel(0x00007777, MDP_MAX_RD_PENDING_CMD_CONFIG); - writel(0x00000049, MDP_DISP_INTF_SEL); - writel(0x0000000b, MDP_OVERLAYPROC0_CFG); - - // ------------- programming MDP_DMA_P_CONFIG --------------------- - writel(pack_pattern << 8 | 0xbf | (0 << 25), MDP_DMA_P_CONFIG); // rgb888 - - writel(0x00000000, MDP_DMA_P_OUT_XY); - writel(img_height << 16 | img_width, MDP_DMA_P_SIZE); - writel(input_img_addr, MDP_DMA_P_BUF_ADDR); - writel(img_width_full_size * ystride, MDP_DMA_P_BUF_Y_STRIDE); - writel(0x00ff0000, MDP_DMA_P_OP_MODE); - writel(hsync_period << 16 | hsync_width, MDP_DSI_VIDEO_HSYNC_CTL); - writel(vsync_period, MDP_DSI_VIDEO_VSYNC_PERIOD); - writel(vsync_width * hsync_period, MDP_DSI_VIDEO_VSYNC_PULSE_WIDTH); - writel((img_width + hsync_porch0_bp - 1) << 16 | hsync_porch0_bp, - MDP_DSI_VIDEO_DISPLAY_HCTL); - writel(vsync_porch0_bp * hsync_period, MDP_DSI_VIDEO_DISPLAY_V_START); - writel((img_height + vsync_porch0_bp) * hsync_period, - MDP_DSI_VIDEO_DISPLAY_V_END); - writel(0x00ABCDEF, MDP_DSI_VIDEO_BORDER_CLR); - writel(0x00000000, MDP_DSI_VIDEO_HSYNC_SKEW); - writel(0x00000000, MDP_DSI_VIDEO_CTL_POLARITY); - // end of cmd mdp - - writel(0x00000001, MDP_DSI_VIDEO_EN); // MDP_DSI_EN ENABLE - - status = PASS; - return status; -} - -int mipi_dsi_video_config(unsigned short num_of_lanes) -{ - - int status = 0; - unsigned long ReadValue; - unsigned long count = 0; - unsigned long low_pwr_stop_mode = 0; // low power mode 0x1111 start from - // bit16, high spd mode 0x0 - unsigned char eof_bllp_pwr = 0x9; // bit 12, 15, 1:low power stop mode or - // let cmd mode eng send packets in hs - // or lp mode - unsigned short display_wd = mipi_fb_cfg.width; - unsigned short display_ht = mipi_fb_cfg.height; - unsigned short image_wd = mipi_fb_cfg.width; - unsigned short image_ht = mipi_fb_cfg.height; - unsigned short hsync_porch_fp = MIPI_HSYNC_FRONT_PORCH_DCLK; - unsigned short hsync_porch_bp = MIPI_HSYNC_BACK_PORCH_DCLK; - unsigned short vsync_porch_fp = MIPI_VSYNC_FRONT_PORCH_LINES; - unsigned short vsync_porch_bp = MIPI_VSYNC_BACK_PORCH_LINES; - unsigned short hsync_width = MIPI_HSYNC_PULSE_WIDTH; - unsigned short vsync_width = MIPI_VSYNC_PULSE_WIDTH; - unsigned short dst_format = 0; - unsigned short traffic_mode = 0; - unsigned short pack_pattern = 0x12; - unsigned char ystride = 3; - - low_pwr_stop_mode = 0x1111; // low pwr mode bit16:HSA, bit20:HBA, - // bit24:HFP, bit28:PULSE MODE, need enough - // time for swithc from LP to HS - eof_bllp_pwr = 0x9; // low power stop mode or let cmd mode eng send - // packets in hs or lp mode - - status += config_dsi_video_mode(display_wd, display_ht, image_wd, image_ht, - hsync_porch_fp, hsync_porch_bp, - vsync_porch_fp, vsync_porch_bp, hsync_width, - vsync_width, dst_format, traffic_mode, - num_of_lanes); - - status += - mdp_setup_dma_p_video_mode(display_wd, display_ht, image_wd, image_ht, - hsync_porch_fp, hsync_porch_bp, - vsync_porch_fp, vsync_porch_bp, hsync_width, - vsync_width, MIPI_FB_ADDR, image_wd, - pack_pattern, ystride); - - ReadValue = readl(DSI_INT_CTRL) & 0x00010000; - while (ReadValue != 0x00010000) { - ReadValue = readl(DSI_INT_CTRL) & 0x00010000; - count++; - if (count > 0xffff) { - status = FAIL; - printf("\nToshiba Video 565 pulse 1 lane test is failed\n"); - return status; - } - } - - printf("\nToshiba Video 565 pulse 1 lane is tested successfully \n"); - return status; -} - -int mipi_dsi_cmd_config(unsigned short num_of_lanes) -{ - - int status = 0; - unsigned long ReadValue; - unsigned long count = 0; - unsigned long input_img_addr = MIPI_FB_ADDR; - unsigned long low_pwr_stop_mode = 0; // low power mode 0x1111 start from - // bit16, high spd mode 0x0 - unsigned char eof_bllp_pwr = 0x9; // bit 12, 15, 1:low power stop mode or - // let cmd mode eng send packets in hs - // or lp mode - unsigned short display_wd = mipi_fb_cfg.width; - unsigned short display_ht = mipi_fb_cfg.height; - unsigned short image_wd = mipi_fb_cfg.width; - unsigned short image_ht = mipi_fb_cfg.height; - unsigned short hsync_porch_fp = MIPI_HSYNC_FRONT_PORCH_DCLK; - unsigned short hsync_porch_bp = MIPI_HSYNC_BACK_PORCH_DCLK; - unsigned short vsync_porch_fp = MIPI_VSYNC_FRONT_PORCH_LINES; - unsigned short vsync_porch_bp = MIPI_VSYNC_BACK_PORCH_LINES; - unsigned short hsync_width = MIPI_HSYNC_PULSE_WIDTH; - unsigned short vsync_width = MIPI_VSYNC_PULSE_WIDTH; - unsigned short dst_format = 0; - unsigned short traffic_mode = 0; - unsigned short pack_pattern = 0x12; - unsigned char ystride = 3; - - writel(0x03ffffff, MDP_INTR_ENABLE); - writel(0x0000000b, MDP_OVERLAYPROC0_CFG); - - // ------------- programming MDP_DMA_P_CONFIG --------------------- - writel(pack_pattern << 8 | 0x3f | (0 << 25), MDP_DMA_P_CONFIG); // rgb888 - - writel(0x00000000, MDP_DMA_P_OUT_XY); - writel(image_ht << 16 | image_wd, MDP_DMA_P_SIZE); - writel(input_img_addr, MDP_DMA_P_BUF_ADDR); - - writel(image_wd * ystride, MDP_DMA_P_BUF_Y_STRIDE); - - writel(0x00000000, MDP_DMA_P_OP_MODE); - - writel(0x10, MDP_DSI_CMD_MODE_ID_MAP); - writel(0x01, MDP_DSI_CMD_MODE_TRIGGER_EN); - - writel(0x0001a000, MDP_AXI_RDMASTER_CONFIG); - writel(0x00000004, MDP_AXI_WRMASTER_CONFIG); - writel(0x00007777, MDP_MAX_RD_PENDING_CMD_CONFIG); - writel(0x8a, MDP_DISP_INTF_SEL); - - return status; -} - -int is_cmd_mode_enabled(void) -{ - return cmd_mode_status; -} - -void mipi_dsi_cmd_mode_trigger(void) -{ - int status = 0; - unsigned short display_wd = mipi_fb_cfg.width; - unsigned short display_ht = mipi_fb_cfg.height; - unsigned short image_wd = mipi_fb_cfg.width; - unsigned short image_ht = mipi_fb_cfg.height; - unsigned short dst_format = 0; - unsigned short traffic_mode = 0; - struct mipi_dsi_panel_config *panel_info = &novatek_panel_info; - status += mipi_dsi_cmd_config(panel_info->num_of_lanes); - mdelay(50); - config_dsi_cmd_mode(display_wd, display_ht, image_wd, image_ht, - dst_format, traffic_mode, - panel_info->num_of_lanes /* num_of_lanes */ ); -} - -void mipi_dsi_shutdown(void) -{ - writel(0, DSI_CTRL); - writel(0x00000001, DSI_PHY_SW_RESET); - writel(0x0, DSI_INT_CTRL); - writel(0x00000000, MDP_DSI_VIDEO_EN); -} - -struct fbcon_config *mipi_init(void) -{ - int status = 0; - unsigned char num_of_lanes = 1; - struct mipi_dsi_panel_config *panel_info = get_panel_info(); - writel(0x00001800, MMSS_SFPB_GPREG); - configure_dsicore_dsiclk(); - configure_dsicore_byteclk(); - configure_dsicore_pclk(); - mipi_dsi_phy_ctrl_config(panel_info); - status += mipi_dsi_panel_initialize(panel_info); - mipi_fb_cfg.base = MIPI_FB_ADDR; - - if (panel_info->mode == MIPI_VIDEO_MODE) - status += mipi_dsi_video_config(panel_info->num_of_lanes); - - if (panel_info->mode == MIPI_CMD_MODE) - cmd_mode_status = 1; - - return &mipi_fb_cfg; -} diff --git a/lk/platform/msm_shared/mmc.c b/lk/platform/msm_shared/mmc.c deleted file mode 100644 index ecdd90f..0000000 --- a/lk/platform/msm_shared/mmc.c +++ /dev/null @@ -1,2796 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include "mmc.h" -#include - -#ifndef NULL -#define NULL 0 -#endif - -#define ROUND_TO_PAGE(x,y) (((x) + (y)) & (~(y))) - -/* data access time unit in ns */ -static const unsigned int taac_unit[] = -{ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000 }; -/* data access time value x 10 */ -static const unsigned int taac_value[] = -{ 0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80 }; - -/* data transfer rate in kbit/s */ -static const unsigned int xfer_rate_unit[] = -{ 100, 1000, 10000, 100000, 0, 0, 0, 0 }; -/* data transfer rate value x 10*/ -static const unsigned int xfer_rate_value[] = -{ 0, 10, 12, 13, 15, 20, 26, 30, 35, 40, 45, 52, 55, 60, 70, 80 }; - -char *ext3_partitions[] = {"system", "userdata", "persist"}; -unsigned int ext3_count = 0; - -static unsigned mmc_sdc_clk[] = { SDC1_CLK, SDC2_CLK, SDC3_CLK, SDC4_CLK}; -static unsigned mmc_sdc_pclk[] = { SDC1_PCLK, SDC2_PCLK, SDC3_PCLK, SDC4_PCLK}; - -unsigned char mmc_slot = 0; -unsigned int mmc_boot_mci_base = 0; - -static unsigned char ext_csd_buf[512]; -static unsigned char wp_status_buf[8]; - -int mmc_clock_enable_disable(unsigned id, unsigned enable); -int mmc_clock_get_rate(unsigned id); -int mmc_clock_set_rate(unsigned id, unsigned rate); -void mdelay(unsigned msecs); - -struct mmc_boot_host mmc_host; -struct mmc_boot_card mmc_card; -struct mbr_entry mbr[MAX_PARTITIONS]; -unsigned mmc_partition_count = 0; - -static void mbr_fill_name (struct mbr_entry *mbr_ent, unsigned int type); -unsigned int mmc_read (unsigned long long data_addr, unsigned int* out, unsigned int data_len); -static unsigned int mmc_wp(unsigned int addr, unsigned int size, unsigned char set_clear_wp); - -unsigned int SWAP_ENDIAN(unsigned int val) -{ - return ((val & 0xFF) << 24) | - (((val >> 8) & 0xFF) << 16) | - (((val >> 16) & 0xFF) << 8) | - (val >> 24); -} - -/* - * Function to enable and set master and peripheral clock for - * MMC card. - */ -static unsigned int mmc_boot_enable_clock( struct mmc_boot_host* host, - unsigned int mclk) -{ - unsigned int mmc_clk = 0; - -#ifndef PLATFORM_MSM8X60 - int mmc_signed_ret = 0; - unsigned SDC_CLK = mmc_sdc_clk[mmc_slot - 1]; - unsigned SDC_PCLK = mmc_sdc_pclk[mmc_slot - 1]; - - if( host == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - if( !host->clk_enabled ) - { - /* set clock */ - if( mmc_clock_enable_disable(SDC_PCLK, MMC_CLK_ENABLE) < 0 ) - { - dprintf(CRITICAL, "Failure enabling PCLK!\n"); - goto error_pclk; - } - - if( mmc_clock_enable_disable(SDC_CLK, MMC_CLK_ENABLE) < 0 ) - { - dprintf(CRITICAL, "Failure enabling MMC Clock!\n"); - goto error; - } - host->clk_enabled = 1; - } - if( host->mclk_rate != mclk ) - { - if( mmc_clock_set_rate(SDC_CLK, mclk) < 0 ) - { - dprintf(CRITICAL, "Failure setting clock rate for MCLK - clk_rate: %d\n!", mclk ); - goto error_mclk; - } - - if( ( mmc_signed_ret = mmc_clock_get_rate(SDC_CLK) ) < 0 ) - { - dprintf(CRITICAL, "Failure getting clock rate for MCLK - clk_rate: %d\n!", host->mclk_rate ); - goto error_mclk; - } - - host->mclk_rate = (unsigned int)mmc_signed_ret; - } - - if( ( mmc_signed_ret = mmc_clock_get_rate(SDC_PCLK) ) < 0 ) - { - dprintf(CRITICAL, "Failure getting clock rate for PCLK - clk_rate: %d\n!", host->pclk_rate ); - goto error_pclk; - } - - host->pclk_rate = ( unsigned int )mmc_signed_ret; - dprintf(INFO, "Clock rate - mclk: %dHz pclk: %dHz\n", host->mclk_rate, host->pclk_rate ); -#else - clock_set_enable(mclk); - host->mclk_rate = mclk; - host->pclk_rate = mclk; - host->clk_enabled = 1; -#endif - //enable mci clock - mmc_clk |= MMC_BOOT_MCI_CLK_ENABLE; - //enable flow control - mmc_clk |= MMC_BOOT_MCI_CLK_ENA_FLOW; - //latch data and command using feedback clock - mmc_clk |= MMC_BOOT_MCI_CLK_IN_FEEDBACK; - writel( mmc_clk, MMC_BOOT_MCI_CLK ); - return MMC_BOOT_E_SUCCESS; - -#ifndef PLATFORM_MSM8X60 -error_pclk: - mmc_clock_enable_disable(SDC_PCLK, MMC_CLK_DISABLE); -error_mclk: - mmc_clock_enable_disable(SDC_CLK, MMC_CLK_DISABLE); -error: - return MMC_BOOT_E_CLK_ENABLE_FAIL; -#endif -} - - -/* Sets a timeout for read operation. - */ -static unsigned int mmc_boot_set_read_timeout( struct mmc_boot_host* host, - struct mmc_boot_card* card ) -{ - unsigned int timeout_ns = 0; - - if( ( host == NULL ) || ( card == NULL ) ) - { - return MMC_BOOT_E_INVAL; - } - - if( (card->type == MMC_BOOT_TYPE_MMCHC) || (card->type == MMC_BOOT_TYPE_SDHC) ) - { - card->rd_timeout_ns = 100000000; - } - else if( (card->type == MMC_BOOT_TYPE_STD_SD) || (card->type == MMC_BOOT_TYPE_STD_MMC) ) - { - timeout_ns = 10 * ( (card->csd.taac_ns ) + - ( card->csd.nsac_clk_cycle / (host->mclk_rate/1000000000))); - card->rd_timeout_ns = timeout_ns; - } - else - { - return MMC_BOOT_E_NOT_SUPPORTED; - } - - dprintf(INFO, " Read timeout set: %d ns\n", card->rd_timeout_ns ); - - return MMC_BOOT_E_SUCCESS; -} - -/* Sets a timeout for write operation. - */ -static unsigned int mmc_boot_set_write_timeout( struct mmc_boot_host* host, - struct mmc_boot_card* card ) -{ - unsigned int timeout_ns = 0; - - if( ( host == NULL ) || ( card == NULL ) ) - { - return MMC_BOOT_E_INVAL; - } - - if( (card->type == MMC_BOOT_TYPE_MMCHC) || (card->type == MMC_BOOT_TYPE_SDHC) ) - { - card->wr_timeout_ns = 100000000; - } - else if( card->type == MMC_BOOT_TYPE_STD_SD || (card->type == MMC_BOOT_TYPE_STD_MMC) ) - { - timeout_ns = 10 * ( ( card->csd.taac_ns ) + - ( card->csd.nsac_clk_cycle / ( host->mclk_rate/1000000000 ) ) ); - timeout_ns = timeout_ns << card->csd.r2w_factor; - card->wr_timeout_ns = timeout_ns; - } - else - { - return MMC_BOOT_E_NOT_SUPPORTED; - } - - dprintf(INFO, " Write timeout set: %d ns\n", card->wr_timeout_ns ); - - return MMC_BOOT_E_SUCCESS; -} - - -/* - * Decodes CSD response received from the card. Note that we have defined only - * few of the CSD elements in csd structure. We'll only decode those values. - */ -static unsigned int mmc_boot_decode_and_save_csd( struct mmc_boot_card* card, - unsigned int* raw_csd ) -{ - unsigned int mmc_sizeof = 0; - unsigned int mmc_unit = 0; - unsigned int mmc_value = 0; - unsigned int mmc_temp = 0; - - struct mmc_boot_csd mmc_csd; - - if( ( card == NULL ) || ( raw_csd == NULL ) ) - { - return MMC_BOOT_E_INVAL; - } - - /* CSD register is little bit differnet for CSD version 2.0 High Capacity - * and CSD version 1.0/2.0 Standard memory cards. In Version 2.0 some of - * the fields have fixed values and it's not necessary for host to refer - * these fields in CSD sent by card */ - - mmc_sizeof = sizeof(unsigned int) * 8; - - mmc_csd.cmmc_structure = UNPACK_BITS( raw_csd, 126, 2, mmc_sizeof ); - - /* cmmc_structure- 0: Version 1.0 1: Version 2.0 */ - if( mmc_csd.cmmc_structure ) - { - mmc_csd.card_cmd_class = UNPACK_BITS( raw_csd, 84, 12, mmc_sizeof ); - mmc_csd.write_blk_len = 512; /* Fixed value is 9 = 2^9 = 512 */ - mmc_csd.read_blk_len = 512; /* Fixed value is 9 = 512 */ - mmc_csd.r2w_factor = UNPACK_BITS( raw_csd, 26, 3, mmc_sizeof ); /* Fixed value: 010b */ - mmc_csd.c_size_mult = 0; /* not there in version 2.0 */ - mmc_csd.c_size = UNPACK_BITS( raw_csd, 62, 12, mmc_sizeof ); - mmc_csd.nsac_clk_cycle = UNPACK_BITS( raw_csd, 104, 8, mmc_sizeof) * 100; - - mmc_unit = UNPACK_BITS( raw_csd, 112, 3, mmc_sizeof ); - mmc_value = UNPACK_BITS( raw_csd, 115, 4, mmc_sizeof ); - mmc_csd.taac_ns = ( taac_value[mmc_value] * taac_unit[mmc_unit]) / 10; - - mmc_csd.erase_blk_len = 1; - mmc_csd.read_blk_misalign = 0; - mmc_csd.write_blk_misalign = 0; - mmc_csd.read_blk_partial = 0; - mmc_csd.write_blk_partial = 0; - - mmc_unit = UNPACK_BITS( raw_csd, 96, 3, mmc_sizeof ); - mmc_value = UNPACK_BITS( raw_csd, 99, 4, mmc_sizeof ); - mmc_csd.tran_speed = ( xfer_rate_value[mmc_value] * xfer_rate_unit[mmc_unit]) / 10; - - /* Calculate card capcity now itself */ - card->capacity = ( 1 + mmc_csd.c_size ) * 512000; - } - else - { - mmc_csd.card_cmd_class = UNPACK_BITS( raw_csd, 84, 12, mmc_sizeof ); - - mmc_temp = UNPACK_BITS( raw_csd, 22, 4, mmc_sizeof ); - mmc_csd.write_blk_len = ( mmc_temp > 8 && mmc_temp < 12 )? ( 1 << mmc_temp ) : 512; - - mmc_temp = UNPACK_BITS( raw_csd, 80, 4, mmc_sizeof ); - mmc_csd.read_blk_len = ( mmc_temp > 8 && mmc_temp < 12 )? ( 1 << mmc_temp ) : 512; - - mmc_unit = UNPACK_BITS( raw_csd, 112, 3, mmc_sizeof ); - mmc_value = UNPACK_BITS( raw_csd, 115, 4, mmc_sizeof ); - mmc_csd.taac_ns = ( taac_value[mmc_value] * taac_unit[mmc_unit]) / 10; - - mmc_unit = UNPACK_BITS( raw_csd, 96, 3, mmc_sizeof ); - mmc_value = UNPACK_BITS( raw_csd, 99, 4, mmc_sizeof ); - mmc_csd.tran_speed = ( xfer_rate_value[mmc_value] * xfer_rate_unit[mmc_unit]) / 10; - - mmc_csd.nsac_clk_cycle = UNPACK_BITS( raw_csd, 104, 8, mmc_sizeof ) * 100; - - mmc_csd.r2w_factor = UNPACK_BITS( raw_csd, 26, 3, mmc_sizeof ); - mmc_csd.sector_size = UNPACK_BITS( raw_csd, 39, 7, mmc_sizeof ) + 1; - - mmc_csd.erase_blk_len = UNPACK_BITS( raw_csd, 46, 1, mmc_sizeof ); - mmc_csd.read_blk_misalign = UNPACK_BITS( raw_csd, 77, 1, mmc_sizeof ); - mmc_csd.write_blk_misalign = UNPACK_BITS( raw_csd, 78, 1, mmc_sizeof ); - mmc_csd.read_blk_partial = UNPACK_BITS( raw_csd, 79, 1, mmc_sizeof ); - mmc_csd.write_blk_partial = UNPACK_BITS( raw_csd, 21, 1, mmc_sizeof ); - - mmc_csd.c_size_mult = UNPACK_BITS( raw_csd, 47, 3, mmc_sizeof ); - mmc_csd.c_size = UNPACK_BITS( raw_csd, 62, 12, mmc_sizeof ); - mmc_temp = ( 1 << ( mmc_csd.c_size_mult + 2 ) ) * ( mmc_csd.c_size + 1 ); - card->capacity = mmc_temp * mmc_csd.read_blk_len; - } - - mmc_csd.erase_grp_size = UNPACK_BITS( raw_csd, 42, 5, mmc_sizeof ); - mmc_csd.erase_grp_mult = UNPACK_BITS( raw_csd, 37, 5, mmc_sizeof ); - mmc_csd.wp_grp_size = UNPACK_BITS( raw_csd, 32, 5, mmc_sizeof ); - mmc_csd.wp_grp_enable = UNPACK_BITS( raw_csd, 31, 1, mmc_sizeof ); - mmc_csd.perm_wp = UNPACK_BITS( raw_csd, 13, 1, mmc_sizeof ); - mmc_csd.temp_wp = UNPACK_BITS( raw_csd, 12, 1, mmc_sizeof ); - - /* save the information in card structure */ - memcpy( (struct mmc_boot_csd *)&card->csd, (struct mmc_boot_csd *)&mmc_csd, - sizeof(struct mmc_boot_csd) ); - - dprintf(INFO, "Decoded CSD fields:\n" ); - dprintf(INFO, "cmmc_structure: %d\n", mmc_csd.cmmc_structure ); - dprintf(INFO, "card_cmd_class: %x\n", mmc_csd.card_cmd_class ); - dprintf(INFO, "write_blk_len: %d\n", mmc_csd.write_blk_len ); - dprintf(INFO, "read_blk_len: %d\n", mmc_csd.read_blk_len ); - dprintf(INFO, "r2w_factor: %d\n", mmc_csd.r2w_factor ); - dprintf(INFO, "sector_size: %d\n", mmc_csd.sector_size ); - dprintf(INFO, "c_size_mult:%d\n", mmc_csd.c_size_mult ); - dprintf(INFO, "c_size: %d\n", mmc_csd.c_size ); - dprintf(INFO, "nsac_clk_cycle: %d\n", mmc_csd.nsac_clk_cycle ); - dprintf(INFO, "taac_ns: %d\n", mmc_csd.taac_ns ); - dprintf(INFO, "tran_speed: %d kbps\n", mmc_csd.tran_speed ); - dprintf(INFO, "erase_blk_len: %d\n", mmc_csd.erase_blk_len ); - dprintf(INFO, "read_blk_misalign: %d\n", mmc_csd.read_blk_misalign ); - dprintf(INFO, "write_blk_misalign: %d\n", mmc_csd.write_blk_misalign ); - dprintf(INFO, "read_blk_partial: %d\n", mmc_csd.read_blk_partial ); - dprintf(INFO, "write_blk_partial: %d\n", mmc_csd.write_blk_partial ); - dprintf(INFO, "Card Capacity: %d Bytes\n", card->capacity ); - - return MMC_BOOT_E_SUCCESS; - -} - -/* - * Decode CID sent by the card. - */ -static unsigned int mmc_boot_decode_and_save_cid( struct mmc_boot_card* card, - unsigned int* raw_cid ) -{ - struct mmc_boot_cid mmc_cid; - unsigned int mmc_sizeof = 0; - int i = 0; - - if( ( card == NULL ) || ( raw_cid == NULL ) ) - { - return MMC_BOOT_E_INVAL; - } - - mmc_sizeof = sizeof( unsigned int ) * 8; - mmc_cid.mid = UNPACK_BITS( raw_cid, 120, 8, mmc_sizeof ); - mmc_cid.oid = UNPACK_BITS( raw_cid, 104, 16, mmc_sizeof ); - - for( i = 0; i < 6; i++ ) - { - mmc_cid.pnm[i] = (unsigned char) UNPACK_BITS(raw_cid, \ - (104 - 8 * (i+1)), 8, mmc_sizeof ); - } - mmc_cid.pnm[6] = 0; - - mmc_cid.prv = UNPACK_BITS( raw_cid, 48, 8, mmc_sizeof ); - mmc_cid.psn = UNPACK_BITS( raw_cid, 16, 32, mmc_sizeof ); - mmc_cid.month = UNPACK_BITS( raw_cid, 12, 4, mmc_sizeof ); - mmc_cid.year = UNPACK_BITS( raw_cid, 8, 4, mmc_sizeof ); - - /* save it in card database */ - memcpy( ( struct mmc_boot_cid * )&card->cid, \ - ( struct mmc_boot_cid * )&mmc_cid, \ - sizeof( struct mmc_boot_cid ) ); - - dprintf(INFO, "Decoded CID fields:\n" ); - dprintf(INFO, "Manufacturer ID: %x\n", mmc_cid.mid ); - dprintf(INFO, "OEM ID: 0x%x\n", mmc_cid.oid ); - dprintf(INFO, "Product Name: %s\n", mmc_cid.pnm ); - dprintf(INFO, "Product revision: %d.%d\n", (mmc_cid.prv >> 4), (mmc_cid.prv & 0xF) ); - dprintf(INFO, "Product serial number: %X\n", mmc_cid.psn ); - dprintf(INFO, "Manufacturing date: %d %d\n", mmc_cid.month, mmc_cid.year + 1997 ); - - return MMC_BOOT_E_SUCCESS; -} - -/* - * Sends specified command to a card and waits for a response. - */ -static unsigned int mmc_boot_send_command( struct mmc_boot_command* cmd ) -{ - unsigned int mmc_cmd = 0; - unsigned int mmc_status = 0; - unsigned int mmc_resp = 0; - unsigned int mmc_return = MMC_BOOT_E_SUCCESS; - unsigned int cmd_index = 0; - int i = 0; - - /* basic check */ - if( cmd == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - /* 1. Write command argument to MMC_BOOT_MCI_ARGUMENT register */ - writel( cmd->argument, MMC_BOOT_MCI_ARGUMENT ); - - /* 2. Set appropriate fields and write MMC_BOOT_MCI_CMD */ - /* 2a. Write command index in CMD_INDEX field */ - cmd_index = cmd->cmd_index; - mmc_cmd |= cmd->cmd_index; - /* 2b. Set RESPONSE bit to 1 for all cmds except CMD0 */ - if( cmd_index != CMD0_GO_IDLE_STATE ) - { - mmc_cmd |= MMC_BOOT_MCI_CMD_RESPONSE; - } - - /* 2c. Set LONGRESP bit to 1 for CMD2, CMD9 and CMD10 */ - if( IS_RESP_136_BITS(cmd->resp_type) ) - { - mmc_cmd |= MMC_BOOT_MCI_CMD_LONGRSP; - } - - /* 2d. Set INTERRUPT bit to 1 to disable command timeout */ - - /* 2e. Set PENDING bit to 1 for CMD12 in the beginning of stream - mode data transfer*/ - if( cmd->xfer_mode == MMC_BOOT_XFER_MODE_STREAM ) - { - mmc_cmd |= MMC_BOOT_MCI_CMD_PENDING; - } - - /* 2f. Set ENABLE bit to 1 */ - mmc_cmd |= MMC_BOOT_MCI_CMD_ENABLE; - - /* 2g. Set PROG_ENA bit to 1 for CMD12, CMD13 issued at the end of - write data transfer */ - if( ( cmd_index == CMD12_STOP_TRANSMISSION || - cmd_index == CMD13_SEND_STATUS ) && cmd->prg_enabled ) - { - mmc_cmd |= MMC_BOOT_MCI_CMD_PROG_ENA; - } - - /* 2h. Set MCIABORT bit to 1 for CMD12 when working with SDIO card */ - /* 2i. Set CCS_ENABLE bit to 1 for CMD61 when Command Completion Signal - of CE-ATA device is enabled */ - - /* 2j. clear all static status bits */ - writel( MMC_BOOT_MCI_STATIC_STATUS, MMC_BOOT_MCI_CLEAR ); - - /* 2k. Write to MMC_BOOT_MCI_CMD register */ - writel( mmc_cmd, MMC_BOOT_MCI_CMD ); - - dprintf(INFO, "Command sent: CMD%d MCI_CMD_REG:%x MCI_ARG:%x\n", - cmd_index, mmc_cmd, cmd->argument ); - - /* 3. Wait for interrupt or poll on the following bits of MCI_STATUS - register */ - do{ - /* 3a. Read MCI_STATUS register */ - while(readl( MMC_BOOT_MCI_STATUS ) \ - & MMC_BOOT_MCI_STAT_CMD_ACTIVE); - - mmc_status = readl( MMC_BOOT_MCI_STATUS ); - - /* 3b. CMD_SENT bit supposed to be set to 1 only after CMD0 is sent - - no response required. */ - if( ( cmd->resp_type == MMC_BOOT_RESP_NONE ) && - (mmc_status & MMC_BOOT_MCI_STAT_CMD_SENT ) ) - { - break; - } - - /* 3c. If CMD_TIMEOUT bit is set then no response was received */ - else if( mmc_status & MMC_BOOT_MCI_STAT_CMD_TIMEOUT ) - { - mmc_return = MMC_BOOT_E_TIMEOUT; - break; - } - - /* 3d. If CMD_RESPONSE_END bit is set to 1 then command's response was - received and CRC check passed - Spcial case for ACMD41: it seems to always fail CRC even if - the response is valid - */ - else if (( mmc_status & MMC_BOOT_MCI_STAT_CMD_RESP_END ) || (cmd_index == CMD1_SEND_OP_COND) - || (cmd_index == CMD8_SEND_IF_COND)) - { - /* 3i. Read MCI_RESP_CMD register to verify that response index is - equal to command index */ - mmc_resp = readl( MMC_BOOT_MCI_RESP_CMD ) & 0x3F; - - /* However, long response does not contain the command index field. - * In that case, response index field must be set to 111111b (0x3F) */ - if( ( mmc_resp == cmd_index ) || - ( cmd->resp_type == MMC_BOOT_RESP_R2 || - cmd->resp_type == MMC_BOOT_RESP_R3 || - cmd->resp_type == MMC_BOOT_RESP_R6 || - cmd->resp_type == MMC_BOOT_RESP_R7 ) ) - { - /* 3j. If resp index is equal to cmd index, read command resp - from MCI_RESPn registers - - MCI_RESP0/1/2/3 for CMD2/9/10 - - MCI_RESP0 for all other registers */ - if( IS_RESP_136_BITS( cmd->resp_type ) ) - { - for( i = 0; i < 4; i++ ) - { - cmd->resp[3-i] = readl( MMC_BOOT_MCI_RESP_0 + ( i * 4 ) ); - - } - } - else - { - cmd->resp[0] = readl( MMC_BOOT_MCI_RESP_0 ); - } - } - else - { - /* command index mis-match */ - mmc_return = MMC_BOOT_E_CMD_INDX_MISMATCH; - } - - dprintf(INFO, "Command response received: %X\n", cmd->resp[0] ); - break; - } - - /* 3e. If CMD_CRC_FAIL bit is set to 1 then cmd's response was recvd, - but CRC check failed. */ - else if( ( mmc_status & MMC_BOOT_MCI_STAT_CMD_CRC_FAIL ) ) - { - if(cmd_index == ACMD41_SEND_OP_COND) - { - cmd->resp[0] = readl( MMC_BOOT_MCI_RESP_0); - } - else - mmc_return = MMC_BOOT_E_CRC_FAIL; - break; - } - - }while(1); - - return mmc_return; -} - -/* - * Reset all the cards to idle condition (CMD 0) - */ -static unsigned int mmc_boot_reset_cards( void ) -{ - struct mmc_boot_command cmd; - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - cmd.cmd_index = CMD0_GO_IDLE_STATE; - cmd.argument = 0; // stuff bits - ignored - cmd.cmd_type = MMC_BOOT_CMD_BCAST; - cmd.resp_type = MMC_BOOT_RESP_NONE; - - /* send command */ - return mmc_boot_send_command( &cmd ); -} - -/* - * Send CMD1 to know whether the card supports host VDD profile or not. - */ -static unsigned int mmc_boot_send_op_cond( struct mmc_boot_host* host, - struct mmc_boot_card* card ) -{ - struct mmc_boot_command cmd; - unsigned int mmc_resp = 0; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( ( host == NULL ) || ( card == NULL ) ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD1 format: - * [31] Busy bit - * [30:29] Access mode - * [28:24] reserved - * [23:15] 2.7-3.6 - * [14:8] 2.0-2.6 - * [7] 1.7-1.95 - * [6:0] reserved - */ - - cmd.cmd_index = CMD1_SEND_OP_COND; - cmd.argument = host->ocr; - cmd.cmd_type = MMC_BOOT_CMD_BCAST_W_RESP; - cmd.resp_type = MMC_BOOT_RESP_R3; - - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* Now it's time to examine response */ - mmc_resp = cmd.resp[0]; - - /* Response contains card's ocr. Update card's information */ - card->ocr = mmc_resp; - - /* Check the response for busy status */ - if( !( mmc_resp & MMC_BOOT_OCR_BUSY ) ) - { - return MMC_BOOT_E_CARD_BUSY; - } - - if(mmc_resp & MMC_BOOT_OCR_SEC_MODE) - { - card->type = MMC_BOOT_TYPE_MMCHC; - } - else - { - card->type = MMC_BOOT_TYPE_STD_MMC; - } - return MMC_BOOT_E_SUCCESS; -} - -/* - * Request any card to send its uniquie card identification (CID) number (CMD2). - */ -static unsigned int mmc_boot_all_send_cid( struct mmc_boot_card* card ) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD2 Format: - * [31:0] stuff bits - */ - cmd.cmd_index = CMD2_ALL_SEND_CID; - cmd.argument = 0; - cmd.cmd_type = MMC_BOOT_CMD_BCAST_W_RESP; - cmd.resp_type = MMC_BOOT_RESP_R2; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* Response contains card's 128 bits CID register */ - mmc_ret = mmc_boot_decode_and_save_cid( card, cmd.resp ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - return MMC_BOOT_E_SUCCESS; -} - -/* - * Ask any card to send it's relative card address (RCA).This RCA number is - * shorter than CID and is used by the host to address the card in future (CMD3) - */ -static unsigned int mmc_boot_send_relative_address( struct mmc_boot_card* card ) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD3 Format: - * [31:0] stuff bits - */ - if(card->type == MMC_BOOT_TYPE_SDHC || card->type == MMC_BOOT_TYPE_STD_SD) - { - cmd.cmd_index = CMD3_SEND_RELATIVE_ADDR; - cmd.argument = 0; - cmd.cmd_type = MMC_BOOT_CMD_BCAST_W_RESP; - cmd.resp_type = MMC_BOOT_RESP_R6; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - /* For sD, card will send RCA. Store it */ - card->rca = (cmd.resp[0] >> 16); - } - else - { - cmd.cmd_index = CMD3_SEND_RELATIVE_ADDR; - cmd.argument = (MMC_RCA << 16); - card->rca = (cmd.argument >> 16); - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - } - - return MMC_BOOT_E_SUCCESS; -} - -/* - * Requests card to send it's CSD register's contents. (CMD9) - */ -static unsigned int mmc_boot_send_csd( struct mmc_boot_card* card ) -{ - struct mmc_boot_command cmd; - unsigned int mmc_arg = 0; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD9 Format: - * [31:16] RCA - * [15:0] stuff bits - */ - mmc_arg |= card->rca << 16; - - cmd.cmd_index = CMD9_SEND_CSD; - cmd.argument = mmc_arg; - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R2; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* Response contains card's 128 bits CSD register */ - /* Decode and save the register */ - mmc_ret = mmc_boot_decode_and_save_csd( card, cmd.resp ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - return MMC_BOOT_E_SUCCESS; -} - -/* - * Selects a card by sending CMD7 to the card with its RCA. - * If RCA field is set as 0 ( or any other address ), - * the card will be de-selected. (CMD7) - */ -static unsigned int mmc_boot_select_card( struct mmc_boot_card* card, - unsigned int rca ) -{ - struct mmc_boot_command cmd; - unsigned int mmc_arg = 0; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD7 Format: - * [31:16] RCA - * [15:0] stuff bits - */ - mmc_arg |= rca << 16; - - cmd.cmd_index = CMD7_SELECT_DESELECT_CARD; - cmd.argument = mmc_arg; - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - /* If we are deselecting card, we do not get response */ - if( rca == card->rca && rca) - { - if(card->type == MMC_BOOT_TYPE_SDHC || card->type == MMC_BOOT_TYPE_STD_SD) - cmd.resp_type = MMC_BOOT_RESP_R1B; - else - cmd.resp_type = MMC_BOOT_RESP_R1; - } - else - { - cmd.resp_type = MMC_BOOT_RESP_NONE; - } - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* As of now no need to look into a response. If it's required - * we'll explore later on */ - - return MMC_BOOT_E_SUCCESS; -} - -/* - * Send command to set block length. - */ -static unsigned int mmc_boot_set_block_len( struct mmc_boot_card* card, - unsigned int block_len ) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD16 Format: - * [31:0] block length - */ - - cmd.cmd_index = CMD16_SET_BLOCKLEN; - cmd.argument = block_len; - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* If blocklength is larger than 512 bytes, - * the card sets BLOCK_LEN_ERROR bit. */ - if( cmd.resp[0] & MMC_BOOT_R1_BLOCK_LEN_ERR ) - { - return MMC_BOOT_E_BLOCKLEN_ERR; - } - return MMC_BOOT_E_SUCCESS; -} - -/* - * Requests the card to stop transmission of data. - */ -static unsigned int mmc_boot_send_stop_transmission( struct mmc_boot_card* card, - unsigned int prg_enabled ) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD12 Format: - * [31:0] stuff bits - */ - - cmd.cmd_index = CMD12_STOP_TRANSMISSION; - cmd.argument = 0; - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1B; - cmd.xfer_mode = MMC_BOOT_XFER_MODE_BLOCK; - cmd.prg_enabled = prg_enabled; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - return MMC_BOOT_E_SUCCESS; -} - -/* - * Get the card's current status - */ -static unsigned int mmc_boot_get_card_status( struct mmc_boot_card* card, - unsigned int prg_enabled, unsigned int* status ) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD13 Format: - * [31:16] RCA - * [15:0] stuff bits - */ - cmd.cmd_index = CMD13_SEND_STATUS; - cmd.argument = card->rca << 16; - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1; - cmd.prg_enabled = prg_enabled; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* Checking ADDR_OUT_OF_RANGE error in CMD13 response */ - if(IS_ADDR_OUT_OF_RANGE(cmd.resp[0])) - { - return MMC_BOOT_E_FAILURE; - } - - *status = cmd.resp[0]; - return MMC_BOOT_E_SUCCESS; -} - -/* - * Decode type of error caused during read and write - */ -static unsigned int mmc_boot_status_error(unsigned mmc_status) -{ - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* If DATA_CRC_FAIL bit is set to 1 then CRC error was detected by - card/device during the data transfer */ - if( mmc_status & MMC_BOOT_MCI_STAT_DATA_CRC_FAIL ) - { - mmc_ret = MMC_BOOT_E_DATA_CRC_FAIL; - } - /* If DATA_TIMEOUT bit is set to 1 then the data transfer time exceeded - the data timeout period without completing the transfer */ - else if( mmc_status & MMC_BOOT_MCI_STAT_DATA_TIMEOUT ) - { - mmc_ret = MMC_BOOT_E_DATA_TIMEOUT; - } - /* If RX_OVERRUN bit is set to 1 then SDCC2 tried to receive data from - the card before empty storage for new received data was available. - Verify that bit FLOW_ENA in MCI_CLK is set to 1 during the data xfer.*/ - else if( mmc_status & MMC_BOOT_MCI_STAT_RX_OVRRUN ) - { - /* Note: We've set FLOW_ENA bit in MCI_CLK to 1. so no need to verify - for now */ - mmc_ret = MMC_BOOT_E_RX_OVRRUN; - } - /* If TX_UNDERRUN bit is set to 1 then SDCC2 tried to send data to - the card before new data for sending was available. Verify that bit - FLOW_ENA in MCI_CLK is set to 1 during the data xfer.*/ - else if( mmc_status & MMC_BOOT_MCI_STAT_TX_UNDRUN ) - { - /* Note: We've set FLOW_ENA bit in MCI_CLK to 1.so skipping it now*/ - mmc_ret = MMC_BOOT_E_RX_OVRRUN; - } - return mmc_ret; -} - -/* - * Send ext csd command. - */ -static unsigned int mmc_boot_send_ext_cmd (struct mmc_boot_card* card, unsigned char* buf) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - unsigned int mmc_reg = 0; - unsigned int mmc_status = 0; - unsigned int* mmc_ptr = (unsigned int *)buf; - unsigned int mmc_count = 0; - unsigned int read_error; - - memset(buf,0, 512); - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - /* set block len */ - if( (card->type != MMC_BOOT_TYPE_MMCHC) && (card->type != MMC_BOOT_TYPE_SDHC) ) - { - mmc_ret = mmc_boot_set_block_len( card, 512); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure setting block length for Card (RCA:%s)\n", - mmc_ret, (char *)(card->rca) ); - return mmc_ret; - } - } - - /* Set the FLOW_ENA bit of MCI_CLK register to 1 */ - mmc_reg = readl( MMC_BOOT_MCI_CLK ); - mmc_reg |= MMC_BOOT_MCI_CLK_ENA_FLOW ; - writel( mmc_reg, MMC_BOOT_MCI_CLK ); - - /* Write data timeout period to MCI_DATA_TIMER register. */ - /* Data timeout period should be in card bus clock periods */ - mmc_reg =0xFFFFFFFF; - writel( mmc_reg, MMC_BOOT_MCI_DATA_TIMER ); - writel( 512, MMC_BOOT_MCI_DATA_LENGTH ); - - /* Set appropriate fields and write the MCI_DATA_CTL register. */ - /* Set ENABLE bit to 1 to enable the data transfer. */ - mmc_reg = MMC_BOOT_MCI_DATA_ENABLE | MMC_BOOT_MCI_DATA_DIR | (512 << MMC_BOOT_MCI_BLKSIZE_POS); - writel( mmc_reg, MMC_BOOT_MCI_DATA_CTL ); - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - /* CMD8 */ - cmd.cmd_index = CMD8_SEND_EXT_CSD; - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1; - cmd.xfer_mode = MMC_BOOT_XFER_MODE_BLOCK; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - read_error = MMC_BOOT_MCI_STAT_DATA_CRC_FAIL | \ - MMC_BOOT_MCI_STAT_DATA_TIMEOUT | \ - MMC_BOOT_MCI_STAT_RX_OVRRUN; - - /* Read the transfer data from SDCC2 FIFO. If Data Mover is not used - read the data from the MCI_FIFO register as long as RXDATA_AVLBL - bit of MCI_STATUS register is set to 1 and bits DATA_CRC_FAIL, - DATA_TIMEOUT, RX_OVERRUN of MCI_STATUS register are cleared to 0. - Continue the reads until the whole transfer data is received */ - - do - { - mmc_ret = MMC_BOOT_E_SUCCESS; - mmc_status = readl( MMC_BOOT_MCI_STATUS ); - - if( mmc_status & read_error ) - { - mmc_ret = mmc_boot_status_error(mmc_status); - break; - } - - if( mmc_status & MMC_BOOT_MCI_STAT_RX_DATA_AVLBL ) - { - unsigned read_count = 1; - if ( mmc_status & MMC_BOOT_MCI_STAT_RX_FIFO_HFULL) - { - read_count = MMC_BOOT_MCI_HFIFO_COUNT; - } - - for (int i=0; i= 512) - break; - } - else if( mmc_status & MMC_BOOT_MCI_STAT_DATA_END ) - { - break; - } - }while(1); - - return MMC_BOOT_E_SUCCESS; - -} - -/* - * Switch command - */ -static unsigned int mmc_boot_switch_cmd (struct mmc_boot_card* card, - unsigned access, - unsigned index, - unsigned value) -{ - - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD6 Format: - * [31:26] set to 0 - * [25:24] access - * [23:16] index - * [15:8] value - * [7:3] set to 0 - * [2:0] cmd set - */ - cmd.cmd_index = CMD6_SWITCH_FUNC; - cmd.argument |= (access << 24); - cmd.argument |= (index << 16); - cmd.argument |= (value << 8); - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1B; - - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - return MMC_BOOT_E_SUCCESS; -} - -/* - * A command to set the data bus width for card. Set width to either - */ -static unsigned int mmc_boot_set_bus_width( struct mmc_boot_card* card, - unsigned int width ) -{ - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - unsigned int mmc_reg = 0; - unsigned int mmc_width = 0; - unsigned int status; - - if( width != MMC_BOOT_BUS_WIDTH_1_BIT) - { - mmc_width = width-1; - } - - - do - { - mmc_ret = mmc_boot_get_card_status(card, 1, &status); - if(mmc_ret != MMC_BOOT_E_SUCCESS) - { - return mmc_ret; - } - }while(MMC_BOOT_CARD_STATUS(status) == MMC_BOOT_PROG_STATE); - - if(MMC_BOOT_CARD_STATUS(status) != MMC_BOOT_TRAN_STATE) - return MMC_BOOT_E_FAILURE; - - mmc_ret = mmc_boot_switch_cmd(card, MMC_BOOT_ACCESS_WRITE, MMC_BOOT_EXT_CMMC_BUS_WIDTH, mmc_width); - - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* set MCI_CLK accordingly */ - mmc_reg = readl( MMC_BOOT_MCI_CLK ); - mmc_reg &= ~MMC_BOOT_MCI_CLK_WIDEBUS_MODE; - if ( width == MMC_BOOT_BUS_WIDTH_1_BIT ) - { - mmc_reg |= MMC_BOOT_MCI_CLK_WIDEBUS_1_BIT; - } - else if (width == MMC_BOOT_BUS_WIDTH_4_BIT ) - { - mmc_reg |= MMC_BOOT_MCI_CLK_WIDEBUS_4_BIT; - } - else if (width == MMC_BOOT_BUS_WIDTH_8_BIT ) - { - mmc_reg |= MMC_BOOT_MCI_CLK_WIDEBUS_8_BIT; - } - writel( mmc_reg, MMC_BOOT_MCI_CLK ); - - mdelay(10); // Giving some time to card to stabilize. - - return MMC_BOOT_E_SUCCESS; -} - - -/* - * A command to start data read from card. Either a single block or - * multiple blocks can be read. Multiple blocks read will continuously - * transfer data from card to host unless requested to stop by issuing - * CMD12 - STOP_TRANSMISSION. - */ -static unsigned int mmc_boot_send_read_command( struct mmc_boot_card* card, - unsigned int xfer_type, - unsigned int data_addr ) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD17/18 Format: - * [31:0] Data Address - */ - if( xfer_type == MMC_BOOT_XFER_MULTI_BLOCK ) - { - cmd.cmd_index = CMD18_READ_MULTIPLE_BLOCK; - } - else - { - cmd.cmd_index = CMD17_READ_SINGLE_BLOCK; - } - - cmd.argument = data_addr; - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* Response contains 32 bit Card status. Here we'll check - BLOCK_LEN_ERROR and ADDRESS_ERROR */ - if( cmd.resp[0] & MMC_BOOT_R1_BLOCK_LEN_ERR ) - { - return MMC_BOOT_E_BLOCKLEN_ERR; - } - /* Misaligned address not matching block length */ - if( cmd.resp[0] & MMC_BOOT_R1_ADDR_ERR ) - { - return MMC_BOOT_E_ADDRESS_ERR; - } - - return MMC_BOOT_E_SUCCESS; -} - -/* - * A command to start data write to card. Either a single block or - * multiple blocks can be written. Multiple block write will continuously - * transfer data from host to card unless requested to stop by issuing - * CMD12 - STOP_TRANSMISSION. - */ -static unsigned int mmc_boot_send_write_command( struct mmc_boot_card* card, - unsigned int xfer_type, - unsigned int data_addr ) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( card == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* CMD24/25 Format: - * [31:0] Data Address - */ - if( xfer_type == MMC_BOOT_XFER_MULTI_BLOCK ) - { - cmd.cmd_index = CMD25_WRITE_MULTIPLE_BLOCK; - } - else - { - cmd.cmd_index = CMD24_WRITE_SINGLE_BLOCK; - } - - cmd.argument = data_addr; - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* Response contains 32 bit Card status. Here we'll check - BLOCK_LEN_ERROR and ADDRESS_ERROR */ - if( cmd.resp[0] & MMC_BOOT_R1_BLOCK_LEN_ERR ) - { - return MMC_BOOT_E_BLOCKLEN_ERR; - } - /* Misaligned address not matching block length */ - if( cmd.resp[0] & MMC_BOOT_R1_ADDR_ERR ) - { - return MMC_BOOT_E_ADDRESS_ERR; - } - - return MMC_BOOT_E_SUCCESS; -} - - -/* - * Write data_len data to address specified by data_addr. data_len is - * multiple of blocks for block data transfer. - */ -static unsigned int mmc_boot_write_to_card( struct mmc_boot_host* host, - struct mmc_boot_card* card, - unsigned long long data_addr, - unsigned int data_len, - unsigned int* in ) -{ - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - unsigned int mmc_status = 0; - unsigned int* mmc_ptr = in; - unsigned int mmc_count = 0; - unsigned int mmc_reg = 0; - unsigned int addr; - unsigned int xfer_type; - unsigned int write_error; - unsigned int status; - - if( ( host == NULL ) || ( card == NULL ) ) - { - return MMC_BOOT_E_INVAL; - } - - /* Set block length. High Capacity MMC/SD card uses fixed 512 bytes block - length. So no need to send CMD16. */ - if( (card->type != MMC_BOOT_TYPE_MMCHC) && (card->type != MMC_BOOT_TYPE_SDHC) ) - { - mmc_ret = mmc_boot_set_block_len( card, card->wr_block_len ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure setting block length for Card\ - (RCA:%s)\n", mmc_ret, (char *)(card->rca) ); - return mmc_ret; - } - } - - /* use multi-block mode to transfer for data larger than a block */ - xfer_type = (data_len > card->rd_block_len) ? MMC_BOOT_XFER_MULTI_BLOCK : - MMC_BOOT_XFER_SINGLE_BLOCK; - - /* For MMCHC/SDHC data address is specified in unit of 512B */ - addr = ( (card->type != MMC_BOOT_TYPE_MMCHC) && (card->type != MMC_BOOT_TYPE_SDHC) ) - ? (unsigned int) data_addr : (unsigned int) (data_addr / 512); - - /* Set the FLOW_ENA bit of MCI_CLK register to 1 */ - mmc_reg = readl( MMC_BOOT_MCI_CLK ); - mmc_reg |= MMC_BOOT_MCI_CLK_ENA_FLOW ; - writel( mmc_reg, MMC_BOOT_MCI_CLK ); - - /* Write data timeout period to MCI_DATA_TIMER register */ - /* Data timeout period should be in card bus clock periods */ - /*TODO: Fix timeout value*/ - mmc_reg = 0xFFFFFFFF; - writel( mmc_reg, MMC_BOOT_MCI_DATA_TIMER ); - - /* Write the total size of the transfer data to MCI_DATA_LENGTH register */ - writel( data_len, MMC_BOOT_MCI_DATA_LENGTH ); - - /* Send command to the card/device in order to start the write data xfer. - The possible commands are CMD24/25/53/60/61 */ - mmc_ret = mmc_boot_send_write_command( card, xfer_type, addr ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure sending write command to the\ - Card(RCA:%x)\n", mmc_ret, card->rca ); - return mmc_ret; - } - - /* Set appropriate fields and write the MCI_DATA_CTL register */ - /* Set ENABLE bit to 1 to enable the data transfer. */ - mmc_reg = 0; - mmc_reg |= MMC_BOOT_MCI_DATA_ENABLE; - /* Clear DIRECTION bit to 0 to enable transfer from host to card */ - /* Clear MODE bit to 0 to enable block oriented data transfer. For - MMC cards only, if stream data transfer mode is desired, set - MODE bit to 1. */ - /* Set DM_ENABLE bit to 1 in order to enable DMA, otherwise set 0 */ - /* Write size of block to be used during the data transfer to - BLOCKSIZE field */ - mmc_reg |= card->wr_block_len << MMC_BOOT_MCI_BLKSIZE_POS; - writel( mmc_reg, MMC_BOOT_MCI_DATA_CTL ); - - write_error = MMC_BOOT_MCI_STAT_DATA_CRC_FAIL | \ - MMC_BOOT_MCI_STAT_DATA_TIMEOUT | \ - MMC_BOOT_MCI_STAT_TX_UNDRUN; - - /* Write the transfer data to SDCC3 FIFO */ - /* If Data Mover is used for data transfer, prepare a command list entry - and enable the Data Mover to work with SDCC2 */ - /* If Data Mover is NOT used for data xfer: */ - do - { - mmc_ret = MMC_BOOT_E_SUCCESS; - mmc_status = readl( MMC_BOOT_MCI_STATUS ); - - if( mmc_status & write_error ) - { - mmc_ret = mmc_boot_status_error(mmc_status); - break; - } - - /* Write the data in MCI_FIFO register as long as TXFIFO_FULL bit of - MCI_STATUS register is 0. Continue the writes until the whole - transfer data is written. */ - if (((data_len-mmc_count) >= MMC_BOOT_MCI_FIFO_SIZE/2) && - ( mmc_status & MMC_BOOT_MCI_STAT_TX_FIFO_HFULL )) - { - for (int i=0; i < MMC_BOOT_MCI_HFIFO_COUNT; i++ ) - { - /* FIFO contains 16 32-bit data buffer on 16 sequential addresses*/ - writel( *mmc_ptr, MMC_BOOT_MCI_FIFO + - ( mmc_count % MMC_BOOT_MCI_FIFO_SIZE ) ); - mmc_ptr++; - /* increase mmc_count by word size */ - mmc_count += sizeof( unsigned int ); - } - - } - else if( !( mmc_status & MMC_BOOT_MCI_STAT_TX_FIFO_FULL ) && (mmc_count != data_len)) - { - /* FIFO contains 16 32-bit data buffer on 16 sequential addresses*/ - writel( *mmc_ptr, MMC_BOOT_MCI_FIFO + - ( mmc_count % MMC_BOOT_MCI_FIFO_SIZE ) ); - mmc_ptr++; - /* increase mmc_count by word size */ - mmc_count += sizeof( unsigned int ); - } - else if((mmc_status & MMC_BOOT_MCI_STAT_DATA_END)) - { - break; //success - } - - } while(1); - - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure on data transfer from the \ - Card(RCA:%x)\n", mmc_ret, card->rca ); - /* In case of any failure happening for multi block transfer */ - if( xfer_type == MMC_BOOT_XFER_MULTI_BLOCK ) - mmc_boot_send_stop_transmission( card, 1 ); - return mmc_ret; - } - - /* Send command to the card/device in order to poll the de-assertion of - card/device BUSY condition. It is important to set PROG_ENA bit in - MCI_CLK register before sending the command. Possible commands are - CMD12/13. */ - if( xfer_type == MMC_BOOT_XFER_MULTI_BLOCK ) - { - mmc_ret = mmc_boot_send_stop_transmission( card, 1 ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure sending Stop Transmission \ - command to the Card(RCA:%x)\n", mmc_ret, card->rca ); - return mmc_ret; - } - } - else - { - mmc_ret = mmc_boot_get_card_status( card, 1, &status ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure getting card status of Card(RCA:%x)\n", - mmc_ret, card->rca ); - return mmc_ret; - } - } - - /* Wait for interrupt or poll on PROG_DONE bit of MCI_STATUS register. If - PROG_DONE bit is set to 1 it means that the card finished it programming - and stopped driving DAT0 line to 0 */ - do - { - mmc_status = readl( MMC_BOOT_MCI_STATUS ); - if( mmc_status & MMC_BOOT_MCI_STAT_PROG_DONE ) - { - break; - } - } while(1); - - return MMC_BOOT_E_SUCCESS; -} - - -/* - * Adjust the interface speed to optimal speed - */ -static unsigned int mmc_boot_adjust_interface_speed( struct mmc_boot_host* host, - struct mmc_boot_card* card ) -{ - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - unsigned int status; - - - do - { - mmc_ret = mmc_boot_get_card_status(card, 1, &status); - if(mmc_ret != MMC_BOOT_E_SUCCESS) - { - return mmc_ret; - } - }while(MMC_BOOT_CARD_STATUS(status) == MMC_BOOT_PROG_STATE); - - if(MMC_BOOT_CARD_STATUS(status) != MMC_BOOT_TRAN_STATE) - return MMC_BOOT_E_FAILURE; - - /* Setting HS_TIMING in EXT_CSD (CMD6) */ - mmc_ret = mmc_boot_switch_cmd(card, MMC_BOOT_ACCESS_WRITE, MMC_BOOT_EXT_CMMC_HS_TIMING, 1); - - if(mmc_ret!= MMC_BOOT_E_SUCCESS) - { - return mmc_ret; - } -#ifdef PLATFORM_MSM8X60 - mmc_ret = mmc_boot_enable_clock( host, MMC_CLK_48MHZ); -#else - mmc_ret = mmc_boot_enable_clock( host, MMC_CLK_50MHZ); -#endif - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return MMC_BOOT_E_CLK_ENABLE_FAIL; - } - return MMC_BOOT_E_SUCCESS; -} - -/* - * Reads a data of data_len from the address specified. data_len - * should be multiple of block size for block data transfer. - */ -static unsigned int mmc_boot_read_from_card( struct mmc_boot_host* host, - struct mmc_boot_card* card, - unsigned long long data_addr, - unsigned int data_len, - unsigned int* out ) -{ - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - unsigned int mmc_status = 0; - unsigned int* mmc_ptr = out; - unsigned int mmc_count = 0; - unsigned int mmc_reg = 0; - unsigned int xfer_type; - unsigned int addr = 0; - unsigned int read_error; - - if( ( host == NULL ) || ( card == NULL ) ) - { - return MMC_BOOT_E_INVAL; - } - - /* Set block length. High Capacity MMC/SD card uses fixed 512 bytes block - length. So no need to send CMD16. */ - if( (card->type != MMC_BOOT_TYPE_MMCHC) && (card->type != MMC_BOOT_TYPE_SDHC) ) - { - mmc_ret = mmc_boot_set_block_len( card, card->rd_block_len ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure setting block length for Card (RCA:%s)\n", - mmc_ret, (char *)(card->rca) ); - return mmc_ret; - } - } - - /* use multi-block mode to transfer for data larger than a block */ - xfer_type = (data_len > card->rd_block_len) ? MMC_BOOT_XFER_MULTI_BLOCK : - MMC_BOOT_XFER_SINGLE_BLOCK; - - /* Set the FLOW_ENA bit of MCI_CLK register to 1 */ - /* Note: It's already enabled */ - - /* If Data Mover is used for data transfer then prepare Command - List Entry and enable the Data mover to work with SDCC2 */ - /* Note: Data Mover not used */ - - /* Write data timeout period to MCI_DATA_TIMER register. */ - /* Data timeout period should be in card bus clock periods */ - mmc_reg = (unsigned long)(card->rd_timeout_ns / 1000000) * - (host->mclk_rate / 1000); - mmc_reg += 1000; // add some extra clock cycles to be safe - mmc_reg = mmc_reg/2; - writel( mmc_reg, MMC_BOOT_MCI_DATA_TIMER ); - - /* Write the total size of the transfer data to MCI_DATA_LENGTH - register. For block xfer it must be multiple of the block - size. */ - writel( data_len, MMC_BOOT_MCI_DATA_LENGTH ); - - /* For MMCHC/SDHC data address is specified in unit of 512B */ - addr = ( (card->type != MMC_BOOT_TYPE_MMCHC) && (card->type != MMC_BOOT_TYPE_SDHC) ) - ? (unsigned int) data_addr :(unsigned int) (data_addr / 512); - - /* Set appropriate fields and write the MCI_DATA_CTL register. */ - /* Set ENABLE bit to 1 to enable the data transfer. */ - mmc_reg = 0; - mmc_reg |= MMC_BOOT_MCI_DATA_ENABLE; - /* Clear DIRECTION bit to 1 to enable transfer from card to host */ - mmc_reg |= MMC_BOOT_MCI_DATA_DIR; - /* Clear MODE bit to 0 to enable block oriented data transfer. For - MMC cards only, if stream data transfer mode is desired, set - MODE bit to 1. */ - /* Set DM_ENABLE bit to 1 in order to enable DMA, otherwise set 0 */ - /* Write size of block to be used during the data transfer to - BLOCKSIZE field */ - mmc_reg |= (card->rd_block_len << MMC_BOOT_MCI_BLKSIZE_POS); - writel( mmc_reg, MMC_BOOT_MCI_DATA_CTL ); - - /* Send command to the card/device in order to start the read data - transfer. Possible commands: CMD17/18/53/60/61. */ - mmc_ret = mmc_boot_send_read_command( card, xfer_type, addr ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure sending read command to the Card(RCA:%x)\n", - mmc_ret, card->rca ); - return mmc_ret; - } - - read_error = MMC_BOOT_MCI_STAT_DATA_CRC_FAIL | \ - MMC_BOOT_MCI_STAT_DATA_TIMEOUT | \ - MMC_BOOT_MCI_STAT_RX_OVRRUN; - - /* Read the transfer data from SDCC2 FIFO. If Data Mover is not used - read the data from the MCI_FIFO register as long as RXDATA_AVLBL - bit of MCI_STATUS register is set to 1 and bits DATA_CRC_FAIL, - DATA_TIMEOUT, RX_OVERRUN of MCI_STATUS register are cleared to 0. - Continue the reads until the whole transfer data is received */ - - do - { - mmc_ret = MMC_BOOT_E_SUCCESS; - mmc_status = readl( MMC_BOOT_MCI_STATUS ); - - if( mmc_status & read_error ) - { - mmc_ret = mmc_boot_status_error(mmc_status); - break; - } - - if( mmc_status & MMC_BOOT_MCI_STAT_RX_DATA_AVLBL ) - { - unsigned read_count = 1; - if ( mmc_status & MMC_BOOT_MCI_STAT_RX_FIFO_HFULL) - { - read_count = MMC_BOOT_MCI_HFIFO_COUNT; - } - - for (int i=0; irca ); - return mmc_ret; - } - - /* In case a multiple block transfer was performed, send CMD12 to the - card/device in order to indicate the end of read data transfer */ - if( xfer_type == MMC_BOOT_XFER_MULTI_BLOCK ) - { - mmc_ret = mmc_boot_send_stop_transmission( card, 0 ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure sending Stop Transmission \ - command to the Card(RCA:%x)\n", mmc_ret, card->rca ); - return mmc_ret; - } - } - - return MMC_BOOT_E_SUCCESS; -} - -/* - * Initialize host structure, set and enable clock-rate and power mode. - */ -unsigned int mmc_boot_init( struct mmc_boot_host* host ) -{ - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - unsigned int mmc_pwr = 0; - - - host->ocr = MMC_BOOT_OCR_27_36 | MMC_BOOT_OCR_SEC_MODE; - host->cmd_retry = MMC_BOOT_MAX_COMMAND_RETRY; - host->clk_enabled = 0; - - /* clock frequency should be less than 400KHz in identification mode */ - mmc_ret = mmc_boot_enable_clock( host, MMC_CLK_400KHZ); - - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return MMC_BOOT_E_CLK_ENABLE_FAIL; - } - - /* set power mode*/ - /* give some time to reach minimum voltate */ - mdelay(2); - mmc_pwr &= ~MMC_BOOT_MCI_PWR_UP; - mmc_pwr |= MMC_BOOT_MCI_PWR_ON; - mmc_pwr |= MMC_BOOT_MCI_PWR_UP; - writel( mmc_pwr, MMC_BOOT_MCI_POWER ); - /* some more time to stabilize voltage */ - mdelay(2); - - return MMC_BOOT_E_SUCCESS; -} - -/* - * Performs card identification process by getting card's unique identification - * number (CID) and relative card address (RCA). After that card will be in - * stand-by state. - */ -static unsigned int mmc_boot_identify_card( struct mmc_boot_host* host, - struct mmc_boot_card* card) -{ - unsigned int mmc_return = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( ( host == NULL ) || ( card == NULL ) ) - { - return MMC_BOOT_E_INVAL; - } - - /* Ask card to send its unique card identification (CID) number (CMD2) */ - mmc_return = mmc_boot_all_send_cid( card ); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No. %d: Failure getting card's CID number!\n", - mmc_return ); - return mmc_return; - } - - /* Ask card to send a relative card address (RCA) (CMD3) */ - mmc_return = mmc_boot_send_relative_address( card ); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No. %d: Failure getting card's RCA!\n", - mmc_return ); - return mmc_return; - } - - /* Set the card status as active */ - card->status = MMC_BOOT_STATUS_ACTIVE; - - /* Get card's CSD register (CMD9) */ - mmc_return = mmc_boot_send_csd( card ); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure getting card's CSD information!\n", - mmc_return ); - return mmc_return; - } - - /* Once CSD is received, set read and write timeout value now itself */ - mmc_return = mmc_boot_set_read_timeout( host, card ); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure setting Read Timeout value!\n", - mmc_return ); - return mmc_return; - } - - mmc_return = mmc_boot_set_write_timeout( host, card ); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure setting Write Timeout value!\n", - mmc_return ); - return mmc_return; - } - - return MMC_BOOT_E_SUCCESS; -} - -static unsigned int mmc_boot_send_app_cmd(unsigned int rca) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - cmd.cmd_index = CMD55_APP_CMD; - cmd.argument = (rca << 16); - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1; - - mmc_ret = mmc_boot_send_command(&cmd); - - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - return MMC_BOOT_E_SUCCESS; -} - -static unsigned int mmc_boot_sd_init_card(struct mmc_boot_card* card) -{ - unsigned int i,mmc_ret; - unsigned int ocr_cmd_arg; - struct mmc_boot_command cmd; - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* Send CMD8 to set interface condition */ - for(i=0;i<3;i++) - { - cmd.cmd_index = CMD8_SEND_IF_COND; - cmd.argument = MMC_BOOT_SD_HC_VOLT_SUPPLIED; - cmd.cmd_type = MMC_BOOT_CMD_BCAST_W_RESP; - cmd.resp_type = MMC_BOOT_RESP_R7; - - mmc_ret = mmc_boot_send_command(&cmd); - if( mmc_ret == MMC_BOOT_E_SUCCESS ) - { - if(cmd.resp[0] != MMC_BOOT_SD_HC_VOLT_SUPPLIED) - return MMC_BOOT_E_FAILURE; - /* Set argument for ACMD41 */ - ocr_cmd_arg = MMC_BOOT_SD_NEG_OCR | MMC_BOOT_SD_HC_HCS; - break; - } - mdelay(1); - } - - /* Send ACMD41 to set operating condition */ - /* Try for a max of 1 sec as per spec */ - for(i=0;i<20;i++) - { - mmc_ret = mmc_boot_send_app_cmd(0); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - cmd.cmd_index = ACMD41_SEND_OP_COND; - cmd.argument = ocr_cmd_arg; - cmd.cmd_type = MMC_BOOT_CMD_BCAST_W_RESP; - cmd.resp_type = MMC_BOOT_RESP_R3; - - mmc_ret = mmc_boot_send_command(&cmd); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - else if (cmd.resp[0] & MMC_BOOT_SD_DEV_READY) - { - /* Check for HC */ - if(cmd.resp[0] & (1 << 30)) - { - card->type = MMC_BOOT_TYPE_SDHC; - } - else - { - card->type = MMC_BOOT_TYPE_STD_SD; - } - break; - } - mdelay(50); - } - return MMC_BOOT_E_SUCCESS; -} - -/* - * Routine to initialize MMC card. It resets a card to idle state, verify operating - * voltage and set the card inready state. - */ -static unsigned int mmc_boot_init_card( struct mmc_boot_host* host, - struct mmc_boot_card* card ) -{ - unsigned int mmc_retry = 0; - unsigned int mmc_return = MMC_BOOT_E_SUCCESS; - - /* basic check */ - if( ( host == NULL ) || ( card == NULL ) ) - { - return MMC_BOOT_E_INVAL; - } - - /* 1. Card Reset - CMD0 */ - mmc_return = mmc_boot_reset_cards(); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.:%d: Failure resetting MMC cards!\n", mmc_return); - return mmc_return; - } - - /* 2. Card Initialization process */ - - /* Send CMD1 to identify and reject cards that do not match host's VDD range - profile. Cards sends its OCR register in response. - */ - mmc_retry = 0; - do - { - mmc_return = mmc_boot_send_op_cond( host, card ); - /* Card returns busy status. We'll retry again! */ - if( mmc_return == MMC_BOOT_E_CARD_BUSY ) - { - mmc_retry++; - mdelay(200); - continue; - } - else if( mmc_return == MMC_BOOT_E_SUCCESS ) - { - break; - } - else - { - dprintf(CRITICAL, "Error No. %d: Failure Initializing MMC Card!\n", - mmc_return ); - - /* Check for sD card */ - mmc_return = mmc_boot_sd_init_card(card); - return mmc_return; - } - }while( mmc_retry < host->cmd_retry ); - - /* If card still returned busy status we are out of luck. - * Card cannot be initialized */ - if( mmc_return == MMC_BOOT_E_CARD_BUSY ) - { - dprintf(CRITICAL, "Error No. %d: Card has busy status set. \ - Initialization not completed\n", mmc_return ); - return MMC_BOOT_E_CARD_BUSY; - } - return MMC_BOOT_E_SUCCESS; -} - - -static unsigned int mmc_boot_set_sd_bus_width(struct mmc_boot_card* card, unsigned int width) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - unsigned int sd_reg; - - mmc_ret = mmc_boot_send_app_cmd(card->rca); - - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* Send ACMD6 to set bus width */ - cmd.cmd_index = ACMD6_SET_BUS_WIDTH; - /* 10 => 4 bit wide */ - cmd.argument = (1<<1); - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1; - - mmc_ret = mmc_boot_send_command(&cmd); - - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* set MCI_CLK accordingly */ - sd_reg = readl( MMC_BOOT_MCI_CLK ); - sd_reg &= ~MMC_BOOT_MCI_CLK_WIDEBUS_MODE; - if ( width == MMC_BOOT_BUS_WIDTH_1_BIT ) - { - sd_reg |= MMC_BOOT_MCI_CLK_WIDEBUS_1_BIT; - } - else if (width == MMC_BOOT_BUS_WIDTH_4_BIT ) - { - sd_reg |= MMC_BOOT_MCI_CLK_WIDEBUS_4_BIT; - } - else if (width == MMC_BOOT_BUS_WIDTH_8_BIT ) - { - sd_reg |= MMC_BOOT_MCI_CLK_WIDEBUS_8_BIT; - } - writel( sd_reg, MMC_BOOT_MCI_CLK ); - - mdelay(10); // Giving some time to card to stabilize. - - return MMC_BOOT_E_SUCCESS; -} - -static unsigned int mmc_boot_set_sd_hs(struct mmc_boot_host* host, struct mmc_boot_card* card) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret; - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* Send CMD6 function mode 1 to set high speed */ - /* Not using mode 0 to read current consumption */ - cmd.cmd_index = CMD6_SWITCH_FUNC; - cmd.argument = MMC_BOOT_SD_SWITCH_HS; - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1; - - mmc_ret = mmc_boot_send_command(&cmd); - - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - mdelay(1); - -#ifdef PLATFORM_MSM8X60 - mmc_ret = mmc_boot_enable_clock( host, MMC_CLK_48MHZ); -#else - mmc_ret = mmc_boot_enable_clock( host, MMC_CLK_50MHZ); -#endif - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return MMC_BOOT_E_CLK_ENABLE_FAIL; - } - - return MMC_BOOT_E_SUCCESS; -} - -/* - * Performs initialization and identification of all the MMC cards connected - * to the host. - */ - -static unsigned int mmc_boot_init_and_identify_cards( struct mmc_boot_host* host, struct mmc_boot_card* card ) -{ - unsigned int mmc_return = MMC_BOOT_E_SUCCESS; - unsigned int status; - - /* Basic check */ - if( host == NULL ) - { - return MMC_BOOT_E_INVAL; - } - - /* Initialize MMC card structure */ - card->status = MMC_BOOT_STATUS_INACTIVE; - card->rd_block_len = MMC_BOOT_RD_BLOCK_LEN; - card->wr_block_len = MMC_BOOT_WR_BLOCK_LEN; - - /* Start initialization process (CMD0 & CMD1) */ - mmc_return = mmc_boot_init_card( host, card ); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - return mmc_return; - } - - /* Start card identification process (CMD2, CMD3 & CMD9)*/ - mmc_return = mmc_boot_identify_card( host, card ); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - return mmc_return; - } - - /* Select the card (CMD7) */ - mmc_return = mmc_boot_select_card( card, card->rca ); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure selecting the Card with RCA: %x\n", - mmc_return, card->rca ); - return mmc_return; - } - - if(card->type == MMC_BOOT_TYPE_SDHC || card->type == MMC_BOOT_TYPE_STD_SD) - { - mmc_return = mmc_boot_set_sd_hs(host, card); - if(mmc_return != MMC_BOOT_E_SUCCESS) - { - return mmc_return; - } - - mmc_return = mmc_boot_set_sd_bus_width(card, MMC_BOOT_BUS_WIDTH_4_BIT); - if(mmc_return != MMC_BOOT_E_SUCCESS) - { - return mmc_return; - } - } - else - { - /* set interface speed */ - mmc_return = mmc_boot_adjust_interface_speed( host, card ); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Error adjusting interface speed!\n", - mmc_return ); - return mmc_return; - } - - /* enable wide bus */ - mmc_return = mmc_boot_set_bus_width( card, MMC_BOOT_BUS_WIDTH_4_BIT ); - if( mmc_return != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "Error No.%d: Failure to set wide bus for Card(RCA:%x)\n", - mmc_return, card->rca ); - return mmc_return; - } - } - - /* Just checking whether we're in TRAN state after changing speed and bus width */ - mmc_return = mmc_boot_get_card_status(card, 1, &status); - if(mmc_return != MMC_BOOT_E_SUCCESS) - { - return mmc_return; - } - - if(MMC_BOOT_CARD_STATUS(status) != MMC_BOOT_TRAN_STATE) - return MMC_BOOT_E_FAILURE; - - return MMC_BOOT_E_SUCCESS; -} - -/* - * Read MBR from MMC card and fill partition table. - */ -static unsigned int mmc_boot_read_MBR(void) -{ - unsigned char buffer[MMC_BOOT_RD_BLOCK_LEN]; - unsigned int dtype; - unsigned int dfirstsec; - unsigned int EBR_first_sec; - unsigned int EBR_current_sec; - int ret = 0; - int idx, i; - - /* Print out the MBR first */ - ret = mmc_boot_read_from_card( &mmc_host, &mmc_card, 0, \ - MMC_BOOT_RD_BLOCK_LEN, \ - (unsigned int *)buffer); - if (ret) - { - return ret; - } - - /* Check to see if signature exists */ - if ((buffer[TABLE_SIGNATURE] != 0x55) || \ - (buffer[TABLE_SIGNATURE + 1] != 0xAA)) - { - return -1; - } - - /* Print out the first 4 partition */ - idx = TABLE_ENTRY_0; - for (i = 0; i < 4; i++) - { - mbr[mmc_partition_count].dstatus = \ - buffer[idx + i * TABLE_ENTRY_SIZE + OFFSET_STATUS]; - mbr[mmc_partition_count].dtype = \ - buffer[idx + i * TABLE_ENTRY_SIZE + OFFSET_TYPE]; - mbr[mmc_partition_count].dfirstsec = \ - GET_LWORD_FROM_BYTE(&buffer[idx + \ - i * TABLE_ENTRY_SIZE + \ - OFFSET_FIRST_SEC]); - mbr[mmc_partition_count].dsize = \ - GET_LWORD_FROM_BYTE(&buffer[idx + \ - i * TABLE_ENTRY_SIZE + \ - OFFSET_SIZE]); - dtype = mbr[mmc_partition_count].dtype; - dfirstsec = mbr[mmc_partition_count].dfirstsec; - mbr_fill_name(&mbr[mmc_partition_count], \ - mbr[mmc_partition_count].dtype); - mmc_partition_count++; - if (mmc_partition_count == MAX_PARTITIONS) - return ret; - } - - /* See if the last partition is EBR, if not, parsing is done */ - if (dtype != 0x05) - { - return ret; - } - - EBR_first_sec = dfirstsec; - EBR_current_sec = dfirstsec; - - ret = mmc_boot_read_from_card( &mmc_host, &mmc_card, \ - (EBR_first_sec * 512), \ - MMC_BOOT_RD_BLOCK_LEN, \ - (unsigned int *)buffer); - if (ret) - { - return ret; - } - /* Loop to parse the EBR */ - for (i = 0;; i++) - { - if ((buffer[TABLE_SIGNATURE] != 0x55) || (buffer[TABLE_SIGNATURE + 1] != 0xAA)) - { - break; - } - mbr[mmc_partition_count].dstatus = \ - buffer[TABLE_ENTRY_0 + OFFSET_STATUS]; - mbr[mmc_partition_count].dtype = \ - buffer[TABLE_ENTRY_0 + OFFSET_TYPE]; - mbr[mmc_partition_count].dfirstsec = \ - GET_LWORD_FROM_BYTE(&buffer[TABLE_ENTRY_0 + \ - OFFSET_FIRST_SEC]) + \ - EBR_current_sec; - mbr[mmc_partition_count].dsize = \ - GET_LWORD_FROM_BYTE(&buffer[TABLE_ENTRY_0 + \ - OFFSET_SIZE]); - mbr_fill_name(&(mbr[mmc_partition_count]), \ - mbr[mmc_partition_count].dtype); - mmc_partition_count++; - if (mmc_partition_count == MAX_PARTITIONS) - return ret; - - dfirstsec = GET_LWORD_FROM_BYTE(&buffer[TABLE_ENTRY_1 + OFFSET_FIRST_SEC]); - if(dfirstsec == 0) - { - /* Getting to the end of the EBR tables */ - break; - } - /* More EBR to follow - read in the next EBR sector */ - ret = mmc_boot_read_from_card( &mmc_host, &mmc_card, \ - ((EBR_first_sec + dfirstsec) * 512), \ - MMC_BOOT_RD_BLOCK_LEN, \ - (unsigned int *)buffer); - if (ret) - { - return ret; - } - EBR_current_sec = EBR_first_sec + dfirstsec; - } - return ret; -} - - -/* - * Entry point to MMC boot process - */ -unsigned int mmc_boot_main(unsigned char slot, unsigned int base) -{ - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - - memset( (struct mmc_boot_host*)&mmc_host, 0, sizeof( struct mmc_boot_host ) ); - memset( (struct mmc_boot_card*)&mmc_card, 0, sizeof(struct mmc_boot_card) ); - - mmc_slot = slot; - mmc_boot_mci_base = base; - -#ifndef PLATFORM_MSM8X60 - /* Waiting for modem to come up */ - while (readl(MSM_SHARED_BASE + 0x14) != 1); -#endif - /* Initialize necessary data structure and enable/set clock and power */ - dprintf(INFO," Initializing MMC host data structure and clock!\n" ); - mmc_ret = mmc_boot_init( &mmc_host ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "MMC Boot: Error Initializing MMC Card!!!\n" ); - return MMC_BOOT_E_FAILURE; - } - - /* Initialize and identify cards connected to host */ - mmc_ret = mmc_boot_init_and_identify_cards( &mmc_host, &mmc_card ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "MMC Boot: Failure detecting MMC card!!!\n" ); - return MMC_BOOT_E_FAILURE; - } - - mmc_display_csd(); - mmc_display_ext_csd(); - - /* Read MBR of the card */ - mmc_ret = mmc_boot_read_MBR(); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - dprintf(CRITICAL, "MMC Boot: MBR read failed!\n" ); - return MMC_BOOT_E_FAILURE; - } - - return MMC_BOOT_E_SUCCESS; -} - -/* - * MMC write function - */ -unsigned int mmc_write (unsigned long long data_addr, unsigned int data_len, unsigned int* in) -{ - int val = 0; - unsigned int write_size = ((unsigned)(0xFFFFFF/512))*512; - unsigned offset = 0; - unsigned int *sptr = in; - - if(data_len % 512) - data_len = ROUND_TO_PAGE(data_len, 511); - - while(data_len > write_size) - { - val = mmc_boot_write_to_card( &mmc_host, &mmc_card, \ - data_addr + offset, \ - write_size, sptr); - if(val) - { - return val; - } - - sptr += (write_size/sizeof(unsigned)); - offset += write_size; - data_len -= write_size; - } - if (data_len) - { - val = mmc_boot_write_to_card( &mmc_host, &mmc_card, \ - data_addr + offset, \ - data_len, sptr); - } - return val; -} - -/* - * MMC read function - */ -unsigned int mmc_read (unsigned long long data_addr, unsigned int* out, unsigned int data_len) -{ - int val = 0; - val = mmc_boot_read_from_card( &mmc_host, &mmc_card, data_addr, data_len, out); - return val; -} - -/* - * Fill name for android partition found. - */ -static void mbr_fill_name (struct mbr_entry *mbr_ent, unsigned int type) -{ - switch(type) - { - memset(mbr_ent->name, 0, 64); - case MMC_MODEM_TYPE: - case MMC_MODEM_TYPE2: - /* if there are more than one with type "modem", mmc_ptn_offset will return the first one */ - memcpy(mbr_ent->name,"modem",5); - break; - case MMC_SBL1_TYPE: - memcpy(mbr_ent->name,"sbl1",4); - break; - case MMC_SBL2_TYPE: - memcpy(mbr_ent->name,"sbl2",4); - break; - case MMC_SBL3_TYPE: - memcpy(mbr_ent->name,"sbl3",4); - break; - case MMC_RPM_TYPE: - memcpy(mbr_ent->name,"rpm",3); - break; - case MMC_TZ_TYPE: - memcpy(mbr_ent->name,"tz",2); - break; - case MMC_ABOOT_TYPE: - memcpy(mbr_ent->name,"aboot",5); - break; - case MMC_BOOT_TYPE: - memcpy(mbr_ent->name,"boot",4); - break; - case MMC_MODEM_ST1_TYPE: - memcpy(mbr_ent->name,"modem_st1",9); - break; - case MMC_MODEM_ST2_TYPE: - memcpy(mbr_ent->name,"modem_st2",9); - break; - case MMC_EFS2_TYPE: - memcpy(mbr_ent->name,"efs2",4); - break; - case MMC_USERDATA_TYPE: - strcpy((char *)mbr_ent->name,(const char *)ext3_partitions[ext3_count]); - ext3_count++; - break; - case MMC_RECOVERY_TYPE: - memcpy(mbr_ent->name,"recovery",8); - break; - }; -} - -/* - * Returns offset of given partition - */ -unsigned long long mmc_ptn_offset (unsigned char * name) -{ - unsigned n; - for(n = 0; n < mmc_partition_count; n++) { - if(!strcmp((const char *)mbr[n].name, (const char *)name)) { - return (mbr[n].dfirstsec * MMC_BOOT_RD_BLOCK_LEN); - } - } - return 0; -} - -unsigned long long mmc_ptn_size (unsigned char * name) -{ - unsigned n; - for(n = 0; n < mmc_partition_count; n++) { - if(!strcmp((const char *)mbr[n].name, (const char *)name)) { - return (mbr[n].dsize * MMC_BOOT_RD_BLOCK_LEN); - } - } - return 0; -} - -/* - * Function to read registers from MMC or SD card - */ -static unsigned int mmc_boot_read_reg(struct mmc_boot_card *card, - unsigned int data_len, - unsigned int command, unsigned int addr, - unsigned int *out) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - unsigned int mmc_status = 0; - unsigned int* mmc_ptr = out; - unsigned int mmc_count = 0; - unsigned int mmc_reg = 0; - unsigned int xfer_type; - unsigned int read_error; - - /* Set the FLOW_ENA bit of MCI_CLK register to 1 */ - mmc_reg = readl( MMC_BOOT_MCI_CLK ); - mmc_reg |= MMC_BOOT_MCI_CLK_ENA_FLOW ; - writel( mmc_reg, MMC_BOOT_MCI_CLK ); - - /* Write data timeout period to MCI_DATA_TIMER register. */ - /* Data timeout period should be in card bus clock periods */ - mmc_reg =0xFFFFFFFF; - writel( mmc_reg, MMC_BOOT_MCI_DATA_TIMER ); - writel( data_len, MMC_BOOT_MCI_DATA_LENGTH ); - - /* Set appropriate fields and write the MCI_DATA_CTL register. */ - /* Set ENABLE bit to 1 to enable the data transfer. */ - mmc_reg = MMC_BOOT_MCI_DATA_ENABLE | MMC_BOOT_MCI_DATA_DIR | (data_len << MMC_BOOT_MCI_BLKSIZE_POS); - writel( mmc_reg, MMC_BOOT_MCI_DATA_CTL ); - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - cmd.cmd_index = command; - cmd.argument = addr; - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1; - - /* send command */ - mmc_ret = mmc_boot_send_command( &cmd ); - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - read_error = MMC_BOOT_MCI_STAT_DATA_CRC_FAIL | \ - MMC_BOOT_MCI_STAT_DATA_TIMEOUT | \ - MMC_BOOT_MCI_STAT_RX_OVRRUN; - - do - { - mmc_ret = MMC_BOOT_E_SUCCESS; - mmc_status = readl( MMC_BOOT_MCI_STATUS ); - - if( mmc_status & read_error ) - { - mmc_ret = mmc_boot_status_error(mmc_status); - break; - } - - if( mmc_status & MMC_BOOT_MCI_STAT_RX_DATA_AVLBL ) - { - unsigned read_count = 1; - if ( mmc_status & MMC_BOOT_MCI_STAT_RX_FIFO_HFULL) - { - read_count = MMC_BOOT_MCI_HFIFO_COUNT; - } - - for (int i=0; irca ); - return mmc_ret; - } - - return MMC_BOOT_E_SUCCESS; -} - -/* - * Function to set/clear power-on write protection for the user area partitions - */ -static unsigned int mmc_boot_set_clr_power_on_wp_user(struct mmc_boot_card* card, - unsigned int addr, - unsigned int size, - unsigned char set_clear_wp) -{ - struct mmc_boot_command cmd; - unsigned int mmc_ret = MMC_BOOT_E_SUCCESS; - unsigned int wp_group_size, loop_count; - unsigned int status; - - memset( (struct mmc_boot_command *)&cmd, 0, - sizeof(struct mmc_boot_command) ); - - /* Disabling PERM_WP for USER AREA (CMD6) */ - mmc_ret = mmc_boot_switch_cmd(card, MMC_BOOT_ACCESS_WRITE, - MMC_BOOT_EXT_USER_WP, - MMC_BOOT_US_PERM_WP_DIS); - - if(mmc_ret != MMC_BOOT_E_SUCCESS) - { - return mmc_ret; - } - - /* Sending CMD13 to check card status */ - do - { - mmc_ret = mmc_boot_get_card_status( card, 0 ,&status); - if(MMC_BOOT_CARD_STATUS(status) == MMC_BOOT_TRAN_STATE) - break; - } while( (mmc_ret == MMC_BOOT_E_SUCCESS) && - (MMC_BOOT_CARD_STATUS(status) == MMC_BOOT_PROG_STATE)); - - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - mmc_ret = mmc_boot_send_ext_cmd (card,ext_csd_buf); - - if(mmc_ret != MMC_BOOT_E_SUCCESS) - { - return mmc_ret; - } - - /* Make sure power-on write protection for user area is not disabled - and permanent write protection for user area is not enabled */ - - if((IS_BIT_SET_EXT_CSD(MMC_BOOT_EXT_USER_WP, MMC_BOOT_US_PERM_WP_EN)) || - (IS_BIT_SET_EXT_CSD(MMC_BOOT_EXT_USER_WP, MMC_BOOT_US_PWR_WP_DIS))) - { - return MMC_BOOT_E_FAILURE; - } - - if(ext_csd_buf[MMC_BOOT_EXT_ERASE_GROUP_DEF]) - { - /* wp_group_size = 512KB * HC_WP_GRP_SIZE * HC_ERASE_GRP_SIZE. - Getting write protect group size in sectors here. */ - - wp_group_size = (512*1024) * ext_csd_buf[MMC_BOOT_EXT_HC_WP_GRP_SIZE] * - ext_csd_buf[MMC_BOOT_EXT_HC_ERASE_GRP_SIZE] / - MMC_BOOT_WR_BLOCK_LEN; - } - else - { - /* wp_group_size = (WP_GRP_SIZE + 1) * (ERASE_GRP_SIZE + 1) - * (ERASE_GRP_MULT + 1). - This is defined as the number of write blocks directly */ - - wp_group_size = (card->csd.erase_grp_size + 1) * - (card->csd.erase_grp_mult + 1) * - (card->csd.wp_grp_size + 1); - } - - if(wp_group_size == 0) - { - return MMC_BOOT_E_FAILURE; - } - - /* Setting POWER_ON_WP for USER AREA (CMD6) */ - - mmc_ret = mmc_boot_switch_cmd(card, MMC_BOOT_ACCESS_WRITE, - MMC_BOOT_EXT_USER_WP, - MMC_BOOT_US_PWR_WP_EN); - - if(mmc_ret != MMC_BOOT_E_SUCCESS) - { - return mmc_ret; - } - - /* Sending CMD13 to check card status */ - do - { - mmc_ret = mmc_boot_get_card_status( card, 0 ,&status); - if(MMC_BOOT_CARD_STATUS(status) == MMC_BOOT_TRAN_STATE) - break; - } while( (mmc_ret == MMC_BOOT_E_SUCCESS) && - (MMC_BOOT_CARD_STATUS(status) == MMC_BOOT_PROG_STATE)); - - if( mmc_ret != MMC_BOOT_E_SUCCESS ) - { - return mmc_ret; - } - - /* Calculating the loop count for sending SET_WRITE_PROTECT (CMD28) - or CLEAR_WRITE_PROTECT (CMD29). - We are write protecting the partitions in blocks of write protect - group sizes only */ - - if(size % wp_group_size) - { - loop_count = (size / wp_group_size) + 1; - } - else - { - loop_count = (size / wp_group_size); - } - - if(set_clear_wp) - cmd.cmd_index = CMD28_SET_WRITE_PROTECT; - else - cmd.cmd_index = CMD29_CLEAR_WRITE_PROTECT; - - cmd.cmd_type = MMC_BOOT_CMD_ADDRESS; - cmd.resp_type = MMC_BOOT_RESP_R1B; - - for(int i=0;i -#include -#include -#include -#include -#include -#include - -#include "dmov.h" - -#define VERBOSE 0 -#define VERIFY_WRITE 0 - -static void *flash_spare; -static void *flash_data; -void platform_config_interleaved_mode_gpios(void); - -typedef struct dmov_ch dmov_ch; -struct dmov_ch -{ - volatile unsigned cmd; - volatile unsigned result; - volatile unsigned status; - volatile unsigned config; -}; - -static void dmov_prep_ch(dmov_ch *ch, unsigned id) -{ - ch->cmd = DMOV_CMD_PTR(id); - ch->result = DMOV_RSLT(id); - ch->status = DMOV_STATUS(id); - ch->config = DMOV_CONFIG(id); -} - -#define SRC_CRCI_NAND_CMD CMD_SRC_CRCI(DMOV_NAND_CRCI_CMD) -#define DST_CRCI_NAND_CMD CMD_DST_CRCI(DMOV_NAND_CRCI_CMD) -#define SRC_CRCI_NAND_DATA CMD_SRC_CRCI(DMOV_NAND_CRCI_DATA) -#define DST_CRCI_NAND_DATA CMD_DST_CRCI(DMOV_NAND_CRCI_DATA) - -#define NAND_CFG0_RAW 0xA80420C0 -#define NAND_CFG1_RAW 0x5045D - -static unsigned CFG0, CFG1; -static unsigned CFG0_M, CFG1_M; -static unsigned CFG0_A, CFG1_A; - -#define CFG1_WIDE_FLASH (1U << 1) - -#define paddr(n) ((unsigned) (n)) - -static int dmov_exec_cmdptr(unsigned id, unsigned *ptr) -{ - dmov_ch ch; - unsigned n; - - dmov_prep_ch(&ch, id); - - writel(DMOV_CMD_PTR_LIST | DMOV_CMD_ADDR(paddr(ptr)), ch.cmd); - - while(!(readl(ch.status) & DMOV_STATUS_RSLT_VALID)) ; - - n = readl(ch.status); - while(DMOV_STATUS_RSLT_COUNT(n)) { - n = readl(ch.result); - if(n != 0x80000002) { - dprintf(CRITICAL, "ERROR: result: %x\n", n); - dprintf(CRITICAL, "ERROR: flush: %x %x %x %x\n", - readl(DMOV_FLUSH0(DMOV_NAND_CHAN)), - readl(DMOV_FLUSH1(DMOV_NAND_CHAN)), - readl(DMOV_FLUSH2(DMOV_NAND_CHAN)), - readl(DMOV_FLUSH3(DMOV_NAND_CHAN))); - } - n = readl(ch.status); - } - - return 0; -} - -static struct flash_info flash_info; -static unsigned flash_pagesize = 0; -static int interleaved_mode = 0; - -struct flash_identification { - unsigned flash_id; - unsigned mask; - unsigned density; - unsigned widebus; - unsigned pagesize; - unsigned blksize; - unsigned oobsize; - unsigned onenand; -}; - -static struct flash_identification supported_flash[] = -{ - /* Flash ID ID Mask Density(MB) Wid Pgsz Blksz oobsz onenand Manuf */ - {0x00000000, 0xFFFFFFFF, 0, 0, 0, 0, 0, 0}, /*ONFI*/ - {0x1500aaec, 0xFF00FFFF, (256<<20), 0, 2048, (2048<<6), 64, 0}, /*Sams*/ - {0x5500baec, 0xFF00FFFF, (256<<20), 1, 2048, (2048<<6), 64, 0}, /*Sams*/ - {0x1500aa98, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64, 0}, /*Tosh*/ - {0x5500ba98, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64, 0}, /*Tosh*/ - {0xd580b12c, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64, 0}, /*Micr*/ - {0x5590bc2c, 0xFFFFFFFF, (512<<20), 1, 2048, (2048<<6), 64, 0}, /*Micr*/ - {0x1580aa2c, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64, 0}, /*Micr*/ - {0x1590aa2c, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64, 0}, /*Micr*/ - {0x1590ac2c, 0xFFFFFFFF, (512<<20), 0, 2048, (2048<<6), 64, 0}, /*Micr*/ - {0x5580baad, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64, 0}, /*Hynx*/ - {0x5510baad, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64, 0}, /*Hynx*/ - {0x004000ec, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64, 1}, /*Sams*/ - {0x005c00ec, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64, 1}, /*Sams*/ - {0x005800ec, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64, 1}, /*Sams*/ - {0x6600bcec, 0xFF00FFFF, (512<<20), 1, 4096, (4096<<6), 128, 0}, /*Sams*/ - /* Note: Width flag is 0 for 8 bit Flash and 1 for 16 bit flash */ - /* Note: Onenand flag is 0 for NAND Flash and 1 for OneNAND flash */ - /* Note: The First row will be filled at runtime during ONFI probe */ -}; -static void set_nand_configuration(char type) -{ - if(type == TYPE_MODEM_PARTITION) - { - CFG0 = CFG0_M; - CFG1 = CFG1_M; - } - else - { - CFG0 = CFG0_A; - CFG1 = CFG1_A; - } -} - -static void flash_nand_read_id(dmov_s *cmdlist, unsigned *ptrlist) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - unsigned *data = ptrlist + 4; - - data[0] = 0 | 4; - data[1] = NAND_CMD_FETCH_ID; - data[2] = 1; - data[3] = 0; - data[4] = 0; - data[5] = 0; - data[6] = 0; - data[7] = 0xAAD40000; /* Default value for CFG0 for reading device id */ - - /* Read NAND device id */ - cmd[0].cmd = 0 | CMD_OCB; - cmd[0].src = paddr(&data[7]); - cmd[0].dst = NAND_DEV0_CFG0; - cmd[0].len = 4; - - cmd[1].cmd = 0; - cmd[1].src = NAND_SFLASHC_BURST_CFG; - cmd[1].dst = paddr(&data[5]); - cmd[1].len = 4; - - cmd[2].cmd = 0; - cmd[2].src = paddr(&data[6]); - cmd[2].dst = NAND_SFLASHC_BURST_CFG; - cmd[2].len = 4; - - cmd[3].cmd = 0; - cmd[3].src = paddr(&data[0]); - cmd[3].dst = NAND_FLASH_CHIP_SELECT; - cmd[3].len = 4; - - cmd[4].cmd = DST_CRCI_NAND_CMD; - cmd[4].src = paddr(&data[1]); - cmd[4].dst = NAND_FLASH_CMD; - cmd[4].len = 4; - - cmd[5].cmd = 0; - cmd[5].src = paddr(&data[2]); - cmd[5].dst = NAND_EXEC_CMD; - cmd[5].len = 4; - - cmd[6].cmd = SRC_CRCI_NAND_DATA; - cmd[6].src = NAND_FLASH_STATUS; - cmd[6].dst = paddr(&data[3]); - cmd[6].len = 4; - - cmd[7].cmd = 0; - cmd[7].src = NAND_READ_ID; - cmd[7].dst = paddr(&data[4]); - cmd[7].len = 4; - - cmd[8].cmd = CMD_OCU | CMD_LC; - cmd[8].src = paddr(&data[5]); - cmd[8].dst = NAND_SFLASHC_BURST_CFG; - cmd[8].len = 4; - - ptr[0] = (paddr(cmd) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "status: %x\n", data[3]); -#endif - - flash_info.id = data[4]; - flash_info.vendor = data[4] & 0xff; - flash_info.device = (data[4] >> 8) & 0xff; - return; -} - -static int flash_nand_block_isbad(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - unsigned *data = ptrlist + 4; - char buf[4]; - unsigned cwperpage; - - cwperpage = (flash_pagesize >> 9); - - /* Check first page of this block */ - if(page & 63) - page = page - (page & 63); - - /* Check bad block marker */ - data[0] = NAND_CMD_PAGE_READ; /* command */ - - /* addr0 */ - if (CFG1 & CFG1_WIDE_FLASH) - data[1] = (page << 16) | ((528*(cwperpage-1)) >> 1); - else - data[1] = (page << 16) | (528*(cwperpage-1)); - - data[2] = (page >> 16) & 0xff; /* addr1 */ - data[3] = 0 | 4; /* chipsel */ - data[4] = NAND_CFG0_RAW & ~(7U << 6); /* cfg0 */ - data[5] = NAND_CFG1_RAW | (CFG1 & CFG1_WIDE_FLASH); /* cfg1 */ - data[6] = 1; - data[7] = CLEAN_DATA_32; /* flash status */ - data[8] = CLEAN_DATA_32; /* buf status */ - - cmd[0].cmd = DST_CRCI_NAND_CMD | CMD_OCB; - cmd[0].src = paddr(&data[0]); - cmd[0].dst = NAND_FLASH_CMD; - cmd[0].len = 16; - - cmd[1].cmd = 0; - cmd[1].src = paddr(&data[4]); - cmd[1].dst = NAND_DEV0_CFG0; - cmd[1].len = 8; - - cmd[2].cmd = 0; - cmd[2].src = paddr(&data[6]); - cmd[2].dst = NAND_EXEC_CMD; - cmd[2].len = 4; - - cmd[3].cmd = SRC_CRCI_NAND_DATA; - cmd[3].src = NAND_FLASH_STATUS; - cmd[3].dst = paddr(&data[7]); - cmd[3].len = 8; - - cmd[4].cmd = CMD_OCU | CMD_LC; - cmd[4].src = NAND_FLASH_BUFFER + (flash_pagesize - (528*(cwperpage-1))); - cmd[4].dst = paddr(&buf); - cmd[4].len = 4; - - ptr[0] = (paddr(cmd) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "status: %x\n", data[7]); -#endif - - /* we fail if there was an operation error, a mpu error, or the - ** erase success bit was not set. - */ - if(data[7] & 0x110) return -1; - - /* Check for bad block marker byte */ - if (CFG1 & CFG1_WIDE_FLASH) { - if (buf[0] != 0xFF || buf[1] != 0xFF) - return 1; - } else { - if (buf[0] != 0xFF) - return 1; - } - - return 0; -} - -static int flash_nand_block_isbad_interleave(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - unsigned *data = ptrlist + 4; - char buf01[4]; - char buf10[4]; - unsigned cwperpage; - - cwperpage = ((flash_pagesize >> 1)>> 9); - - /* Check first page of this block */ - if(page & 63) - page = page - (page & 63); - - /* Check bad block marker */ - data[0] = NAND_CMD_PAGE_READ; /* command */ - - /* addr0 */ - if (CFG1 & CFG1_WIDE_FLASH) - data[1] = (page << 16) | ((528*(cwperpage-1)) >> 1); - else - data[1] = (page << 16) | (528*(cwperpage-1)); - - data[2] = (page >> 16) & 0xff; /* addr1 */ - data[3] = 0 | 4; /* chipsel CS0 */ - data[4] = 0 | 5; /* chipsel CS1 */ - data[5] = NAND_CFG0_RAW & ~(7U << 6); /* cfg0 */ - data[6] = NAND_CFG1_RAW | (CFG1 & CFG1_WIDE_FLASH); /* cfg1 */ - data[7] = 1; - data[8] = CLEAN_DATA_32; /* NC01 flash status */ - data[9] = CLEAN_DATA_32; /* NC01 buf01 status */ - data[10] = CLEAN_DATA_32; /* NC10 flash status */ - data[11] = CLEAN_DATA_32; /* NC10 buf10 status */ - data[12] = 0x00000A3C; /* adm_mux_data_ack_req_nc01 */ - data[13] = 0x0000053C; /* adm_mux_cmd_ack_req_nc01 */ - data[14] = 0x00000F28; /* adm_mux_data_ack_req_nc10 */ - data[15] = 0x00000F14; /* adm_mux_cmd_ack_req_nc10 */ - data[16] = 0x00000FC0; /* adm_default_mux */ - data[17] = 0x00000805; /* enable CS1 */ - data[18] = 0x00000801; /* disable CS1 */ - - /* enable CS1 */ - cmd[0].cmd = 0; - cmd[0].src = paddr(data[17]); - cmd[0].dst = EBI2_CHIP_SELECT_CFG0; - cmd[0].len = 4; - - /* Reading last code word from NC01 */ - /* 0xF14 */ - cmd[1].cmd = 0; - cmd[1].src = paddr(data[15]); - cmd[1].dst = EBI2_NAND_ADM_MUX; - cmd[1].len = 4; - - cmd[2].cmd = DST_CRCI_NAND_CMD; - cmd[2].src = paddr(&data[0]); - cmd[2].dst = NC01(NAND_FLASH_CMD); - cmd[2].len = 16; - - cmd[3].cmd = 0; - cmd[3].src = paddr(&data[5]); - cmd[3].dst = NC01(NAND_DEV0_CFG0); - cmd[3].len = 8; - - cmd[4].cmd = 0; - cmd[4].src = paddr(&data[7]); - cmd[4].dst = NC01(NAND_EXEC_CMD); - cmd[4].len = 4; - - /* 0xF28 */ - cmd[5].cmd = 0; - cmd[5].src = paddr(data[14]); - cmd[5].dst = EBI2_NAND_ADM_MUX; - cmd[5].len = 4; - - cmd[6].cmd = SRC_CRCI_NAND_DATA; - cmd[6].src = NC01(NAND_FLASH_STATUS); - cmd[6].dst = paddr(&data[8]); - cmd[6].len = 8; - - cmd[7].cmd = 0; - cmd[7].src = NC01(NAND_FLASH_BUFFER) + (flash_pagesize - (528*(cwperpage-1))); - cmd[7].dst = paddr(&buf01); - cmd[7].len = 4; - - /* Reading last code word from NC10 */ - /* 0x53C */ - cmd[8].cmd = 0; - cmd[8].src = paddr(data[13]); - cmd[8].dst = EBI2_NAND_ADM_MUX; - cmd[8].len = 4; - - cmd[9].cmd = DST_CRCI_NAND_CMD; - cmd[9].src = paddr(&data[0]); - cmd[9].dst = NC10(NAND_FLASH_CMD); - cmd[9].len = 12; - - cmd[10].cmd = 0; - cmd[10].src = paddr(&data[4]); - cmd[10].dst = NC10(NAND_FLASH_CHIP_SELECT); - cmd[10].len = 4; - - cmd[11].cmd = 0; - cmd[11].src = paddr(&data[5]); - cmd[11].dst = NC10(NAND_DEV1_CFG0); - cmd[11].len = 8; - - cmd[12].cmd = 0; - cmd[12].src = paddr(&data[7]); - cmd[12].dst = NC10(NAND_EXEC_CMD); - cmd[12].len = 4; - - /* 0xA3C */ - cmd[13].cmd = 0; - cmd[13].src = paddr(data[12]); - cmd[13].dst = EBI2_NAND_ADM_MUX; - cmd[13].len = 4; - - cmd[14].cmd = SRC_CRCI_NAND_DATA; - cmd[14].src = NC10(NAND_FLASH_STATUS); - cmd[14].dst = paddr(&data[10]); - cmd[14].len = 8; - - cmd[15].cmd = 0; - cmd[15].src = NC10(NAND_FLASH_BUFFER) + (flash_pagesize - (528*(cwperpage-1))); - cmd[15].dst = paddr(&buf10); - cmd[15].len = 4; - - cmd[16].cmd = 0; - cmd[16].src = paddr(&data[16]); - cmd[16].dst = EBI2_NAND_ADM_MUX; - cmd[16].len = 4; - - /* setting default value */ - cmd[17].cmd = CMD_OCU | CMD_LC; - cmd[17].src = paddr(&data[18]); - cmd[17].dst = EBI2_CHIP_SELECT_CFG0; - cmd[17].len = 4; - - ptr[0] = (paddr(cmd) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "NC01 status: %x\n", data[8]); - dprintf(INFO, "NC10 status: %x\n", data[10]); -#endif - - /* we fail if there was an operation error, a mpu error, or the - ** erase success bit was not set. - */ - if((data[8] & 0x110) || (data[10] & 0x110)) return -1; - - /* Check for bad block marker byte */ - if (CFG1 & CFG1_WIDE_FLASH) { - if ((buf01[0] != 0xFF || buf01[1] != 0xFF) || - (buf10[0] != 0xFF || buf10[1] != 0xFF)) - return 1; - } else { - if (buf01[0] != 0xFF || buf10[0] != 0xFF) - return 1; - } - - return 0; -} - -static int flash_nand_erase_block(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - unsigned *data = ptrlist + 4; - int isbad = 0; - - /* only allow erasing on block boundaries */ - if(page & 63) return -1; - - /* Check for bad block and erase only if block is not marked bad */ - isbad = flash_nand_block_isbad(cmdlist, ptrlist, page); - - if (isbad) { - dprintf(INFO, "skipping @ %d (bad block)\n", page >> 6); - return -1; - } - - /* Erase block */ - data[0] = NAND_CMD_BLOCK_ERASE; - data[1] = page; - data[2] = 0; - data[3] = 0 | 4; - data[4] = 1; - data[5] = 0xeeeeeeee; - data[6] = CFG0 & (~(7 << 6)); /* CW_PER_PAGE = 0 */ - data[7] = CFG1; - data[8] = 0x00000020; - data[9] = 0x000000C0; - - cmd[0].cmd = DST_CRCI_NAND_CMD | CMD_OCB; - cmd[0].src = paddr(&data[0]); - cmd[0].dst = NAND_FLASH_CMD; - cmd[0].len = 16; - - cmd[1].cmd = 0; - cmd[1].src = paddr(&data[6]); - cmd[1].dst = NAND_DEV0_CFG0; - cmd[1].len = 8; - - cmd[2].cmd = 0; - cmd[2].src = paddr(&data[4]); - cmd[2].dst = NAND_EXEC_CMD; - cmd[2].len = 4; - - cmd[3].cmd = SRC_CRCI_NAND_DATA; - cmd[3].src = NAND_FLASH_STATUS; - cmd[3].dst = paddr(&data[5]); - cmd[3].len = 4; - - cmd[4].cmd = 0; - cmd[4].src = paddr(&data[8]); - cmd[4].dst = NAND_FLASH_STATUS; - cmd[4].len = 4; - - cmd[5].cmd = CMD_OCU | CMD_LC; - cmd[5].src = paddr(&data[9]); - cmd[5].dst = NAND_READ_STATUS; - cmd[5].len = 4; - - ptr[0] = (paddr(cmd) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "status: %x\n", data[5]); -#endif - - /* we fail if there was an operation error, a mpu error, or the - ** erase success bit was not set. - */ - if(data[5] & 0x110) return -1; - if(!(data[5] & 0x80)) return -1; - - return 0; -} - -static int flash_nand_erase_block_interleave(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - unsigned *data = ptrlist + 4; - int isbad = 0; - - /* only allow erasing on block boundaries */ - if(page & 63) return -1; - - /* Check for bad block and erase only if block is not marked bad */ - isbad = flash_nand_block_isbad(cmdlist, ptrlist, page); - - if (isbad) { - dprintf(INFO, "skipping @ %d (bad block)\n", page >> 6); - return -1; - } - - /* Erase block */ - data[0] = NAND_CMD_BLOCK_ERASE; - data[1] = page; - data[2] = 0; - data[3] = 0 | 4; /* chipselect CS0 */ - data[4] = 0 | 5; /* chipselect CS1 */ - data[5] = 1; - data[6] = 0xeeeeeeee; - data[7] = 0xeeeeeeee; - data[8] = CFG0 & (~(7 << 6)); /* CW_PER_PAGE = 0 */ - data[9] = CFG1; - data[10] = 0x00000A3C; /* adm_mux_data_ack_req_nc01 */ - data[11] = 0x0000053C; /* adm_mux_cmd_ack_req_nc01 */ - data[12] = 0x00000F28; /* adm_mux_data_ack_req_nc10 */ - data[13] = 0x00000F14; /* adm_mux_cmd_ack_req_nc10 */ - data[14] = 0x00000FC0; /* adm_default_mux */ - data[15] = 0x00000805; /* enable CS1 */ - data[16] = 0x00000801; /* disable CS1 */ - - /* enable CS1 */ - cmd[0].cmd = 0 | CMD_OCB; - cmd[0].src = paddr(data[15]); - cmd[0].dst = EBI2_CHIP_SELECT_CFG0; - cmd[0].len = 4; - - /* Reading last code word from NC01 */ - /* 0xF14 */ - cmd[1].cmd = 0; - cmd[1].src = paddr(data[13]); - cmd[1].dst = EBI2_NAND_ADM_MUX; - cmd[1].len = 4; - - cmd[2].cmd = DST_CRCI_NAND_CMD; - cmd[2].src = paddr(&data[0]); - cmd[2].dst = NC01(NAND_FLASH_CMD); - cmd[2].len = 16; - - cmd[3].cmd = 0; - cmd[3].src = paddr(&data[8]); - cmd[3].dst = NC01(NAND_DEV0_CFG0); - cmd[3].len = 8; - - cmd[4].cmd = 0; - cmd[4].src = paddr(&data[5]); - cmd[4].dst = NC01(NAND_EXEC_CMD); - cmd[4].len = 4; - - /* 0xF28 */ - cmd[5].cmd = 0; - cmd[5].src = paddr(data[12]); - cmd[5].dst = EBI2_NAND_ADM_MUX; - cmd[5].len = 4; - - cmd[6].cmd = SRC_CRCI_NAND_DATA; - cmd[6].src = NC01(NAND_FLASH_STATUS); - cmd[6].dst = paddr(&data[6]); - cmd[6].len = 4; - - /* Reading last code word from NC10 */ - /* 0x53C */ - cmd[7].cmd = 0; - cmd[7].src = paddr(data[11]); - cmd[7].dst = EBI2_NAND_ADM_MUX; - cmd[7].len = 4; - - cmd[8].cmd = DST_CRCI_NAND_CMD; - cmd[8].src = paddr(&data[0]); - cmd[8].dst = NC10(NAND_FLASH_CMD); - cmd[8].len = 12; - - cmd[9].cmd = 0; - cmd[9].src = paddr(&data[4]); - cmd[9].dst = NC10(NAND_FLASH_CHIP_SELECT); - cmd[9].len = 4; - - cmd[10].cmd = 0; - cmd[10].src = paddr(&data[8]); - cmd[10].dst = NC10(NAND_DEV1_CFG0); - cmd[10].len = 8; - - cmd[11].cmd = 0; - cmd[11].src = paddr(&data[5]); - cmd[11].dst = NC10(NAND_EXEC_CMD); - cmd[11].len = 4; - - /* 0xA3C */ - cmd[12].cmd = 0; - cmd[12].src = paddr(data[10]); - cmd[12].dst = EBI2_NAND_ADM_MUX; - cmd[12].len = 4; - - cmd[13].cmd = SRC_CRCI_NAND_DATA; - cmd[13].src = NC10(NAND_FLASH_STATUS); - cmd[13].dst = paddr(&data[7]); - cmd[13].len = 4; - - /* adm default mux state */ - /* 0xFCO */ - cmd[14].cmd = 0; - cmd[14].src = paddr(data[14]); - cmd[14].dst = EBI2_NAND_ADM_MUX; - cmd[14].len = 4; - - /* disable CS1 */ - cmd[15].cmd = CMD_OCU | CMD_LC; - cmd[15].src = paddr(data[16]); - cmd[15].dst = EBI2_CHIP_SELECT_CFG0; - cmd[15].len = 4; - - ptr[0] = (paddr(cmd) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "NC01 status: %x\n", data[6]); - dprintf(INFO, "NC10 status: %x\n", data[7]); -#endif - - /* we fail if there was an operation error, a mpu error, or the - ** erase success bit was not set. - */ - if(data[6] & 0x110 || data[7] & 0x110) return -1; - if(!(data[6] & 0x80) || !(data[7] & 0x80)) return -1; - - return 0; -} - -struct data_flash_io { - unsigned cmd; - unsigned addr0; - unsigned addr1; - unsigned chipsel; - unsigned cfg0; - unsigned cfg1; - unsigned exec; - unsigned ecc_cfg; - unsigned ecc_cfg_save; - unsigned clrfstatus; - unsigned clrrstatus; - struct { - unsigned flash_status; - unsigned buffer_status; - } result[8]; -}; - -struct interleave_data_flash_io { - uint32_t cmd; - uint32_t addr0; - uint32_t addr1; - uint32_t chipsel_cs0; - uint32_t chipsel_cs1; - uint32_t cfg0; - uint32_t cfg1; - uint32_t exec; - uint32_t ecc_cfg; - uint32_t ecc_cfg_save; - uint32_t ebi2_chip_select_cfg0; - uint32_t adm_mux_data_ack_req_nc01; - uint32_t adm_mux_cmd_ack_req_nc01; - uint32_t adm_mux_data_ack_req_nc10; - uint32_t adm_mux_cmd_ack_req_nc10; - uint32_t adm_default_mux; - uint32_t default_ebi2_chip_select_cfg0; - struct { - uint32_t flash_status; - } result[16]; -}; - -static int _flash_nand_read_page(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page, void *_addr, void *_spareaddr) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - struct data_flash_io *data = (void*) (ptrlist + 4); - unsigned addr = (unsigned) _addr; - unsigned spareaddr = (unsigned) _spareaddr; - unsigned n; - int isbad = 0; - unsigned cwperpage; - cwperpage = (flash_pagesize >> 9); - - /* Check for bad block and read only from a good block */ - isbad = flash_nand_block_isbad(cmdlist, ptrlist, page); - if (isbad) - return -2; - - data->cmd = NAND_CMD_PAGE_READ_ECC; - data->addr0 = page << 16; - data->addr1 = (page >> 16) & 0xff; - data->chipsel = 0 | 4; /* flash0 + undoc bit */ - - /* GO bit for the EXEC register */ - data->exec = 1; - - data->cfg0 = CFG0; - data->cfg1 = CFG1; - - data->ecc_cfg = 0x203; - - /* save existing ecc config */ - cmd->cmd = CMD_OCB; - cmd->src = NAND_EBI2_ECC_BUF_CFG; - cmd->dst = paddr(&data->ecc_cfg_save); - cmd->len = 4; - cmd++; - - for(n = 0; n < cwperpage; n++) { - /* write CMD / ADDR0 / ADDR1 / CHIPSEL regs in a burst */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->cmd); - cmd->dst = NAND_FLASH_CMD; - cmd->len = ((n == 0) ? 16 : 4); - cmd++; - - if (n == 0) { - /* block on cmd ready, set configuration */ - cmd->cmd = 0; - cmd->src = paddr(&data->cfg0); - cmd->dst = NAND_DEV0_CFG0; - cmd->len = 8; - cmd++; - - /* set our ecc config */ - cmd->cmd = 0; - cmd->src = paddr(&data->ecc_cfg); - cmd->dst = NAND_EBI2_ECC_BUF_CFG; - cmd->len = 4; - cmd++; - } - /* kick the execute register */ - cmd->cmd = 0; - cmd->src = paddr(&data->exec); - cmd->dst = NAND_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* block on data ready, then read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_FLASH_STATUS; - cmd->dst = paddr(&data->result[n]); - cmd->len = 8; - cmd++; - - /* read data block */ - cmd->cmd = 0; - cmd->src = NAND_FLASH_BUFFER; - cmd->dst = addr + n * 516; - cmd->len = ((n < (cwperpage -1 )) ? 516 : (512 - ((cwperpage - 1) << 2))); - cmd++; - } - - /* read extra data */ - cmd->cmd = 0; - cmd->src = NAND_FLASH_BUFFER + 500; - cmd->dst = spareaddr; - cmd->len = 16; - cmd++; - - /* restore saved ecc config */ - cmd->cmd = CMD_OCU | CMD_LC; - cmd->src = paddr(&data->ecc_cfg_save); - cmd->dst = NAND_EBI2_ECC_BUF_CFG; - cmd->len = 4; - - ptr[0] = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "read page %d: status: %x %x %x %x\n", - page, data[5], data[6], data[7], data[8]); - for(n = 0; n < 4; n++) { - ptr = (unsigned*)(addr + 512 * n); - dprintf(INFO, "data%d: %x %x %x %x\n", n, ptr[0], ptr[1], ptr[2], ptr[3]); - ptr = (unsigned*)(spareaddr + 16 * n); - dprintf(INFO, "spare data%d %x %x %x %x\n", n, ptr[0], ptr[1], ptr[2], ptr[3]); - } -#endif - - /* if any of the writes failed (0x10), or there was a - ** protection violation (0x100), we lose - */ - for(n = 0; n < cwperpage; n++) { - if (data->result[n].flash_status & 0x110) { - return -1; - } - } - - return 0; -} - -static int flash_nand_read_page_interleave(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page, void *_addr, void *_spareaddr) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - struct interleave_data_flash_io *data = (void*) (ptrlist + 4); - unsigned addr = (unsigned) _addr; - unsigned spareaddr = (unsigned) _spareaddr; - unsigned n; - int isbad = 0; - unsigned cwperpage; - cwperpage = (flash_pagesize >> 9); - - /* Check for bad block and read only from a good block */ - isbad = flash_nand_block_isbad(cmdlist, ptrlist, page); - if (isbad) - return -2; - - data->cmd = NAND_CMD_PAGE_READ_ECC; - data->addr0 = page << 16; - data->addr1 = (page >> 16) & 0xff; - data->chipsel_cs0 = 0 | 4; /* flash0 + undoc bit */ - data->chipsel_cs1 = 0 | 5; /* flash0 + undoc bit */ - data->ebi2_chip_select_cfg0 = 0x00000805; - data->adm_mux_data_ack_req_nc01 = 0x00000A3C; - data->adm_mux_cmd_ack_req_nc01 = 0x0000053C; - data->adm_mux_data_ack_req_nc10 = 0x00000F28; - data->adm_mux_cmd_ack_req_nc10 = 0x00000F14; - data->adm_default_mux = 0x00000FC0; - data->default_ebi2_chip_select_cfg0 = 0x00000801; - - /* GO bit for the EXEC register */ - data->exec = 1; - - data->cfg0 = CFG0; - data->cfg1 = CFG1; - - data->ecc_cfg = 0x203; - - for (n = 0; n < cwperpage; n++) { - /* flash + buffer status return words */ - data->result[n].flash_status = 0xeeeeeeee; - - if (n == 0) { - /* enable CS1 */ - cmd->cmd = CMD_OCB; - cmd->src = paddr(&data->ebi2_chip_select_cfg0); - cmd->dst = EBI2_CHIP_SELECT_CFG0; - cmd->len = 4; - cmd++; - - /* save existing ecc config */ - cmd->cmd = 0; - cmd->src = NAND_EBI2_ECC_BUF_CFG; - cmd->dst = paddr(&data->ecc_cfg_save); - cmd->len = 4; - cmd++; - - /* NC01, NC10 --> ADDR0/ADDR1 */ - cmd->cmd = 0; - cmd->src = paddr(&data->addr0); - cmd->dst = NC11(NAND_ADDR0); - cmd->len = 8; - cmd++; - - /* Select the CS0, - * for NC01! - */ - cmd->cmd = 0; - cmd->src = paddr(&data->chipsel_cs0); - cmd->dst = NC01(NAND_FLASH_CHIP_SELECT); - cmd->len = 4; - cmd++; - - /* Select the CS1, - * for NC10! - */ - cmd->cmd = 0; - cmd->src = paddr(&data->chipsel_cs1); - cmd->dst = NC10(NAND_FLASH_CHIP_SELECT); - cmd->len = 4; - cmd++; - - cmd->cmd = 0; - cmd->src = paddr(&data->cfg0); - cmd->dst = NC01(NAND_DEV0_CFG0); - cmd->len = 8; - cmd++; - - /* config DEV1 for CS1 */ - cmd->cmd = 0; - cmd->src = paddr(&data->cfg0); - cmd->dst = NC10(NAND_DEV1_CFG0); - cmd->len = 8; - cmd++; - - cmd->cmd = 0; - cmd->src = paddr(&data->ecc_cfg); - cmd->dst = NC11(NAND_EBI2_ECC_BUF_CFG); - cmd->len = 4; - cmd++; - - /* if 'only' the last code word */ - if (n == cwperpage - 1) { - /* MASK CMD ACK/REQ --> NC01 (0x53C)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_cmd_ack_req_nc01); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* CMD */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->cmd); - cmd->dst = NC10(NAND_FLASH_CMD); - cmd->len = 4; - cmd++; - - /* kick the execute register for NC10 */ - cmd->cmd = 0; - cmd->src = paddr(&data->exec); - cmd->dst = NC10(NAND_EXEC_CMD); - cmd->len = 4; - cmd++; - - /* MASK DATA ACK/REQ --> NC01 (0xA3C)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_data_ack_req_nc01); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* block on data ready from NC10, then - * read the status register - */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NC10(NAND_FLASH_STATUS); - cmd->dst = paddr(&data->result[n]); - /* NAND_FLASH_STATUS + - * NAND_BUFFER_STATUS - */ - cmd->len = 4; - cmd++; - } else { - /* MASK CMD ACK/REQ --> NC10 (0xF14)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_cmd_ack_req_nc10); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* CMD */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->cmd); - cmd->dst = NC01(NAND_FLASH_CMD); - cmd->len = 4; - cmd++; - - /* kick the execute register for NC01*/ - cmd->cmd = 0; - cmd->src = paddr(&data->exec); - cmd->dst = NC01(NAND_EXEC_CMD); - cmd->len = 4; - cmd++; - } - } - - - if (n % 2 == 0) { - /* MASK CMD ACK/REQ --> NC01 (0x53C)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_cmd_ack_req_nc01); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* CMD */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->cmd); - cmd->dst = NC10(NAND_FLASH_CMD); - cmd->len = 4; - cmd++; - - /* kick the execute register for NC10 */ - cmd->cmd = 0; - cmd->src = paddr(&data->exec); - cmd->dst = NC10(NAND_EXEC_CMD); - cmd->len = 4; - cmd++; - - /* MASK DATA ACK/REQ --> NC10 (0xF28)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_data_ack_req_nc10); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* block on data ready from NC01, then - * read the status register - */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NC01(NAND_FLASH_STATUS); - cmd->dst = paddr(&data->result[n]); - /* NAND_FLASH_STATUS + - * NAND_BUFFER_STATUS - */ - cmd->len = 4; - cmd++; - - /* read data block */ - cmd->cmd = 0; - cmd->src = NC01(NAND_FLASH_BUFFER); - cmd->dst = addr + n * 516; - cmd->len = ((n < (cwperpage -1 )) ? 516 : (512 - ((cwperpage - 1) << 2))); - cmd++; - } else { - if (n != cwperpage - 1) { - /* MASK CMD ACK/REQ --> - * NC10 (0xF14) - */ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_cmd_ack_req_nc10); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* CMD */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->cmd); - cmd->dst = NC01(NAND_FLASH_CMD); - cmd->len = 4; - cmd++; - - /* EXEC */ - cmd->cmd = 0; - cmd->src = paddr(&data->exec); - cmd->dst = NC01(NAND_EXEC_CMD); - cmd->len = 4; - cmd++; - - /* MASK DATA ACK/REQ --> - * NC01 (0xA3C) - */ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_data_ack_req_nc01); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* block on data ready from NC10 - * then read the status register - */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NC10(NAND_FLASH_STATUS); - cmd->dst = paddr(&data->result[n]); - /* NAND_FLASH_STATUS + - * NAND_BUFFER_STATUS - */ - cmd->len = 4; - cmd++; - } else { - /* MASK DATA ACK/REQ -> - * NC01 (0xA3C) - */ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_data_ack_req_nc01); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* block on data ready from NC10 - * then read the status register - */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NC10(NAND_FLASH_STATUS); - cmd->dst = paddr(&data->result[n]); - /* NAND_FLASH_STATUS + - * NAND_BUFFER_STATUS - */ - cmd->len = 4; - cmd++; - } - /* read data block */ - cmd->cmd = 0; - cmd->src = NC10(NAND_FLASH_BUFFER); - cmd->dst = addr + n * 516; - cmd->len = ((n < (cwperpage -1 )) ? 516 : (512 - ((cwperpage - 1) << 2))); - cmd++; - - if (n == (cwperpage - 1)) { - /* Use NC10 for reading the - * last codeword!!! - */ - cmd->cmd = 0; - cmd->src = NC10(NAND_FLASH_BUFFER) + - (512 - ((cwperpage -1) << 2)); - cmd->dst = spareaddr; - cmd->len = 16; - cmd++; - } - } - } - /* restore saved ecc config */ - cmd->cmd = CMD_OCU | CMD_LC; - cmd->src = paddr(&data->ecc_cfg_save); - cmd->dst = NAND_EBI2_ECC_BUF_CFG; - cmd->len = 4; - - /* ADM --> Default mux state (0xFC0) */ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_default_mux); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* disable CS1 */ - cmd->cmd = 0; - cmd->src = paddr(&data->default_ebi2_chip_select_cfg0); - cmd->dst = EBI2_CHIP_SELECT_CFG0; - cmd->len = 4; - cmd++; - - ptr[0] = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "read page %d: status: %x %x %x %x %x %x %x %x \ - %x %x %x %x %x %x %x %x \n", page, - data->result[0].flash_status[0], - data->result[1].flash_status[1], - data->result[2].flash_status[2], - data->result[3].flash_status[3], - data->result[4].flash_status[4], - data->result[5].flash_status[5], - data->result[6].flash_status[6], - data->result[7].flash_status[7], - data->result[8].flash_status[8], - data->result[9].flash_status[9], - data->result[10].flash_status[10], - data->result[11].flash_status[11], - data->result[12].flash_status[12], - data->result[13].flash_status[13], - data->result[14].flash_status[14], - data->result[15].flash_status[15]); - - for(n = 0; n < 4; n++) { - ptr = (unsigned*)(addr + 512 * n); - dprintf(INFO, "data%d: %x %x %x %x\n", n, ptr[0], ptr[1], ptr[2], ptr[3]); - ptr = (unsigned*)(spareaddr + 16 * n); - dprintf(INFO, "spare data%d %x %x %x %x\n", n, ptr[0], ptr[1], ptr[2], ptr[3]); - } -#endif - - /* if any of the writes failed (0x10), or there was a - ** protection violation (0x100), we lose - */ - for(n = 0; n < cwperpage; n++) { - if (data->result[n].flash_status & 0x110) { - return -1; - } - } - - return 0; -} - -static int _flash_nand_write_page(dmov_s *cmdlist, unsigned *ptrlist, unsigned page, - const void *_addr, const void *_spareaddr, unsigned raw_mode) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - struct data_flash_io *data = (void*) (ptrlist + 4); - unsigned addr = (unsigned) _addr; - unsigned spareaddr = (unsigned) _spareaddr; - unsigned n; - unsigned cwperpage; - cwperpage = (flash_pagesize >> 9); - unsigned modem_partition = 0; - if (CFG0 == CFG0_M) - { - modem_partition = 1; - } - - data->cmd = NAND_CMD_PRG_PAGE; - data->addr0 = page << 16; - data->addr1 = (page >> 16) & 0xff; - data->chipsel = 0 | 4; /* flash0 + undoc bit */ - data->clrfstatus = 0x00000020; - data->clrrstatus = 0x000000C0; - - if (!raw_mode){ - data->cfg0 = CFG0; - data->cfg1 = CFG1; - }else{ - data->cfg0 = (NAND_CFG0_RAW & ~(7 << 6)) |((cwperpage-1) << 6); - data->cfg1 = NAND_CFG1_RAW | (CFG1 & CFG1_WIDE_FLASH); - } - - /* GO bit for the EXEC register */ - data->exec = 1; - - if (modem_partition) - data->ecc_cfg = 0x1FF; - else - data->ecc_cfg = 0x203; - - /* save existing ecc config */ - cmd->cmd = CMD_OCB; - cmd->src = NAND_EBI2_ECC_BUF_CFG; - cmd->dst = paddr(&data->ecc_cfg_save); - cmd->len = 4; - cmd++; - - for(n = 0; n < cwperpage; n++) { - /* write CMD / ADDR0 / ADDR1 / CHIPSEL regs in a burst */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->cmd); - cmd->dst = NAND_FLASH_CMD; - cmd->len = ((n == 0) ? 16 : 4); - cmd++; - - if (n == 0) { - /* set configuration */ - cmd->cmd = 0; - cmd->src = paddr(&data->cfg0); - cmd->dst = NAND_DEV0_CFG0; - cmd->len = 8; - cmd++; - - /* set our ecc config */ - cmd->cmd = 0; - cmd->src = paddr(&data->ecc_cfg); - cmd->dst = NAND_EBI2_ECC_BUF_CFG; - cmd->len = 4; - cmd++; - } - - /* write data block */ - cmd->cmd = 0; - cmd->dst = NAND_FLASH_BUFFER; - if (!raw_mode){ - if(modem_partition){ - cmd->src = addr + n * 512; - cmd->len = 512; - }else{ - cmd->src = addr + n * 516; - cmd->len = ((n < (cwperpage - 1)) ? 516 : (512 - ((cwperpage - 1) << 2))); - } - }else{ - cmd->src = addr; - cmd->len = 528; - } - cmd++; - - if ((n == (cwperpage - 1)) && (!raw_mode) && (!modem_partition)) { - /* write extra data */ - cmd->cmd = 0; - cmd->src = spareaddr; - cmd->dst = NAND_FLASH_BUFFER + (512 - ((cwperpage - 1) << 2)); - cmd->len = (cwperpage << 2); - cmd++; - } - - /* kick the execute register */ - cmd->cmd = 0; - cmd->src = paddr(&data->exec); - cmd->dst = NAND_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* block on data ready, then read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_FLASH_STATUS; - cmd->dst = paddr(&data->result[n]); - cmd->len = 8; - cmd++; - - cmd->cmd = 0; - cmd->src = paddr(&data->clrfstatus); - cmd->dst = NAND_FLASH_STATUS; - cmd->len = 4; - cmd++; - - cmd->cmd = 0; - cmd->src = paddr(&data->clrrstatus); - cmd->dst = NAND_READ_STATUS; - cmd->len = 4; - cmd++; - } - - /* restore saved ecc config */ - cmd->cmd = CMD_OCU | CMD_LC; - cmd->src = paddr(&data->ecc_cfg_save); - cmd->dst = NAND_EBI2_ECC_BUF_CFG; - cmd->len = 4; - - ptr[0] = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "write page %d: status: %x %x %x %x\n", - page, data[5], data[6], data[7], data[8]); -#endif - - /* if any of the writes failed (0x10), or there was a - ** protection violation (0x100), or the program success - ** bit (0x80) is unset, we lose - */ - for(n = 0; n < cwperpage; n++) { - if(data->result[n].flash_status & 0x110) return -1; - if(!(data->result[n].flash_status & 0x80)) return -1; - } - -#if VERIFY_WRITE - n = _flash_read_page(cmdlist, ptrlist, page, flash_data, - flash_data + 2048); - if (n != 0) - return -1; - if (memcmp(flash_data, _addr, 2048) || - memcmp(flash_data + 2048, _spareaddr, 16)) { - dprintf(CRITICAL, "verify error @ page %d\n", page); - return -1; - } -#endif - return 0; -} - -static int flash_nand_write_page_interleave(dmov_s *cmdlist, unsigned *ptrlist, unsigned page, - const void *_addr, const void *_spareaddr, unsigned raw_mode) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - struct interleave_data_flash_io *data = (void*) (ptrlist + 4); - unsigned addr = (unsigned) _addr; - unsigned spareaddr = (unsigned) _spareaddr; - unsigned n; - unsigned cwperpage, cwcount; - - cwperpage = (flash_pagesize >> 9) * 2; /* double for interleave mode */ - cwcount = (cwperpage << 1); - - data->cmd = NAND_CMD_PRG_PAGE; - data->addr0 = page << 16; - data->addr1 = (page >> 16) & 0xff; - data->chipsel_cs0 = 0 | 4; /* flash0 + undoc bit */ - data->chipsel_cs1 = 0 | 5; /* flash0 + undoc bit */ - data->ebi2_chip_select_cfg0 = 0x00000805; - data->adm_mux_data_ack_req_nc01 = 0x00000A3C; - data->adm_mux_cmd_ack_req_nc01 = 0x0000053C; - data->adm_mux_data_ack_req_nc10 = 0x00000F28; - data->adm_mux_cmd_ack_req_nc10 = 0x00000F14; - data->adm_default_mux = 0x00000FC0; - data->default_ebi2_chip_select_cfg0 = 0x00000801; - - if (!raw_mode){ - data->cfg0 = CFG0; - data->cfg1 = CFG1; - }else{ - data->cfg0 = (NAND_CFG0_RAW & ~(7 << 6)) |((cwcount-1) << 6); - data->cfg1 = NAND_CFG1_RAW | (CFG1 & CFG1_WIDE_FLASH); - } - - /* GO bit for the EXEC register */ - data->exec = 1; - data->ecc_cfg = 0x203; - - for (n = 0; n < cwperpage; n++) { - /* status return words */ - data->result[n].flash_status = 0xeeeeeeee; - - if (n == 0) { - /* enable CS1 */ - cmd->cmd = CMD_OCB; - cmd->src = paddr(&data->ebi2_chip_select_cfg0); - cmd->dst = EBI2_CHIP_SELECT_CFG0; - cmd->len = 4; - cmd++; - - /* save existing ecc config */ - cmd->cmd = 0; - cmd->src = NC11(NAND_EBI2_ECC_BUF_CFG); - cmd->dst = paddr(&data->ecc_cfg_save); - cmd->len = 4; - cmd++; - - cmd->cmd = 0; - cmd->src = paddr(&data->ecc_cfg); - cmd->dst = NC11(NAND_EBI2_ECC_BUF_CFG); - cmd->len = 4; - cmd++; - - cmd->cmd = 0; - cmd->src = paddr(&data->addr0); - cmd->dst = NC11(NAND_ADDR0); - cmd->len = 8; - cmd++; - - /* enable CS0 */ - cmd->cmd = 0; - cmd->src = paddr(&data->chipsel_cs0); - cmd->dst = NC01(NAND_FLASH_CHIP_SELECT); - cmd->len = 4; - cmd++; - - /* enable CS1 */ - cmd->cmd = 0; - cmd->src = paddr(&data->chipsel_cs1); - cmd->dst = NC10(NAND_FLASH_CHIP_SELECT); - cmd->len = 4; - cmd++; - - cmd->cmd = 0; - cmd->src =paddr(&data->cfg0); - cmd->dst = NC01(NAND_DEV0_CFG0); - cmd->len = 8; - cmd++; - - /* config CFG1 for CS1 */ - cmd->cmd = 0; - cmd->src =paddr(&data->cfg0); - cmd->dst = NC10(NAND_DEV1_CFG0); - cmd->len = 8; - cmd++; - } - - if (n % 2 == 0) { - /* MASK CMD ACK/REQ --> NC10 (0xF14)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_cmd_ack_req_nc10); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* CMD */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->cmd); - cmd->dst = NC01(NAND_FLASH_CMD); - cmd->len = 4; - cmd++; - } else { - /* MASK CMD ACK/REQ --> NC01 (0x53C)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_cmd_ack_req_nc01); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* CMD */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->cmd); - cmd->dst = NC10(NAND_FLASH_CMD); - cmd->len = 4; - cmd++; - } - - cmd->cmd = 0; - if (!raw_mode){ - cmd->src = addr + n * 516; - cmd->len = ((n < (cwperpage - 1)) ? 516 : (512 - ((cwperpage - 1) << 2))); - }else{ - cmd->src = addr; - cmd->len = 528; - } - - if (n % 2 == 0) - cmd->dst = NC01(NAND_FLASH_BUFFER); - else - cmd->dst = NC10(NAND_FLASH_BUFFER); - cmd++; - - if ((n == (cwperpage - 1)) && (!raw_mode)) { - /* write extra data */ - cmd->cmd = 0; - cmd->src = spareaddr; - cmd->dst = NC10(NAND_FLASH_BUFFER) + (512 - ((cwperpage - 1) << 2)); - cmd->len = (cwperpage << 2); - cmd++; - } - - if (n % 2 == 0) { - /* kick the NC01 execute register */ - cmd->cmd = 0; - cmd->src = paddr(&data->exec); - cmd->dst = NC01(NAND_EXEC_CMD); - cmd->len = 4; - cmd++; - if (n != 0) { - /* MASK DATA ACK/REQ --> NC01 (0xA3C)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_data_ack_req_nc01); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* block on data ready from NC10, then - * read the status register - */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NC10(NAND_FLASH_STATUS); - cmd->dst = paddr(&data->result[n-1]); - cmd->len = 4; - cmd++; - } - } else { - /* kick the execute register */ - cmd->cmd = 0; - cmd->src = paddr(&data->exec); - cmd->dst = NC10(NAND_EXEC_CMD); - cmd->len = 4; - cmd++; - - /* MASK DATA ACK/REQ --> NC10 (0xF28)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_data_ack_req_nc10); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* block on data ready from NC01, then - * read the status register - */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NC01(NAND_FLASH_STATUS); - cmd->dst = paddr(&data->result[n-1]); - cmd->len = 4; - cmd++; - } - } - - /* MASK DATA ACK/REQ --> NC01 (0xA3C)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_mux_data_ack_req_nc01); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* we should process outstanding request */ - /* block on data ready, then - * read the status register - */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NC10(NAND_FLASH_STATUS); - cmd->dst = paddr(&data->result[n-1]); - cmd->len = 4; - cmd++; - - /* restore saved ecc config */ - cmd->cmd = 0; - cmd->src = paddr(&data->ecc_cfg_save); - cmd->dst = NAND_EBI2_ECC_BUF_CFG; - cmd->len = 4; - - /* MASK DATA ACK/REQ --> NC01 (0xFC0)*/ - cmd->cmd = 0; - cmd->src = paddr(&data->adm_default_mux); - cmd->dst = EBI2_NAND_ADM_MUX; - cmd->len = 4; - cmd++; - - /* disable CS1 */ - cmd->cmd = CMD_OCU | CMD_LC; - cmd->src = paddr(&data->default_ebi2_chip_select_cfg0); - cmd->dst = EBI2_CHIP_SELECT_CFG0; - cmd->len = 4; - cmd++; - - ptr[0] = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE -dprintf(INFO, "write page %d: status: %x %x %x %x %x %x %x %x \ - %x %x %x %x %x %x %x %x \n", page, - data->result[0].flash_status[0], - data->result[1].flash_status[1], - data->result[2].flash_status[2], - data->result[3].flash_status[3], - data->result[4].flash_status[4], - data->result[5].flash_status[5], - data->result[6].flash_status[6], - data->result[7].flash_status[7], - data->result[8].flash_status[8], - data->result[9].flash_status[9], - data->result[10].flash_status[10], - data->result[11].flash_status[11], - data->result[12].flash_status[12], - data->result[13].flash_status[13], - data->result[14].flash_status[14], - data->result[15].flash_status[15]); -#endif - - /* if any of the writes failed (0x10), or there was a - ** protection violation (0x100), or the program success - ** bit (0x80) is unset, we lose - */ - for(n = 0; n < cwperpage; n++) { - if(data->result[n].flash_status & 0x110) return -1; - if(!(data->result[n].flash_status & 0x80)) return -1; - } - -#if VERIFY_WRITE - n = _flash_read_page(cmdlist, ptrlist, page, flash_data, - flash_data + 2048); - if (n != 0) - return -1; - if (memcmp(flash_data, _addr, 2048) || - memcmp(flash_data + 2048, _spareaddr, 16)) { - dprintf(CRITICAL, "verify error @ page %d\n", page); - return -1; - } -#endif - return 0; -} - -char empty_buf[528]; -static int flash_nand_mark_badblock(dmov_s *cmdlist, unsigned *ptrlist, unsigned page) -{ - memset(empty_buf,0,528); - /* Going to first page of the block */ - if(page & 63) - page = page - (page & 63); - return _flash_nand_write_page(cmdlist, ptrlist, page, empty_buf, 0, 1); -} - -unsigned nand_cfg0; -unsigned nand_cfg1; - -static int flash_nand_read_config(dmov_s *cmdlist, unsigned *ptrlist) -{ - static unsigned CFG0_TMP, CFG1_TMP; - cmdlist[0].cmd = CMD_OCB; - cmdlist[0].src = NAND_DEV0_CFG0; - cmdlist[0].dst = paddr(&CFG0_TMP); - cmdlist[0].len = 4; - - cmdlist[1].cmd = CMD_OCU | CMD_LC; - cmdlist[1].src = NAND_DEV0_CFG1; - cmdlist[1].dst = paddr(&CFG1_TMP); - cmdlist[1].len = 4; - - *ptrlist = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptrlist); - - if((CFG0_TMP == 0) || (CFG1_TMP == 0)) { - return -1; - } - - CFG0_A = CFG0_TMP; - CFG1_A = CFG1_TMP; - if (flash_info.type == FLASH_16BIT_NAND_DEVICE) { - nand_cfg1 |= CFG1_WIDE_FLASH; - } - dprintf(INFO, "nandcfg: %x %x (initial)\n", CFG0, CFG1); - - CFG0_A = (((flash_pagesize >> 9) - 1) << 6) /* 4/8 cw/pg for 2/4k */ - | (516 << 9) /* 516 user data bytes */ - | (10 << 19) /* 10 parity bytes */ - | (5 << 27) /* 5 address cycles */ - | (0 << 30) /* Do not read status before data */ - | (1 << 31) /* Send read cmd */ - /* 0 spare bytes for 16 bit nand or 1 spare bytes for 8 bit */ - | ((nand_cfg1 & CFG1_WIDE_FLASH) ? (0 << 23) : (1 << 23)); - CFG1_A = (0 << 0) /* Enable ecc */ - | (7 << 2) /* 8 recovery cycles */ - | (0 << 5) /* Allow CS deassertion */ - | ((flash_pagesize - (528 * ((flash_pagesize >> 9) - 1)) + 1) << 6) /* Bad block marker location */ - | (0 << 16) /* Bad block in user data area */ - | (2 << 17) /* 6 cycle tWB/tRB */ - | (nand_cfg1 & CFG1_WIDE_FLASH); /* preserve wide flash flag */ - - dprintf(INFO, "nandcfg(Apps): %x %x (used)\n", CFG0_A, CFG1_A); - - CFG0_M = CFG0_TMP; - CFG1_M = CFG1_TMP; - if (flash_info.type == FLASH_16BIT_NAND_DEVICE) { - nand_cfg1 |= CFG1_WIDE_FLASH; - } - CFG0_M = (((flash_pagesize >> 9) - 1) << 6) /* 4/8 cw/pg for 2/4k */ - | (512 << 9) /* 512 user data bytes */ - | (10 << 19) /* 10 parity bytes */ - | (5 << 27) /* 5 address cycles */ - | (0 << 30) /* Do not read status before data */ - | (1 << 31) /* Send read cmd */ - | ((nand_cfg1 & CFG1_WIDE_FLASH) ? (4 << 23) : (5 << 23)); - CFG1_M = (0 << 0) /* Enable ecc */ - | (7 << 2) /* 8 recovery cycles */ - | (0 << 5) /* Allow CS deassertion */ - | ((flash_pagesize - (528 * ((flash_pagesize >> 9) - 1)) + 1) << 6) /* Bad block marker location */ - | (0 << 16) /* Bad block in user data area */ - | (2 << 17) /* 6 cycle tWB/tRB */ - | (nand_cfg1 & CFG1_WIDE_FLASH); /* preserve wide flash flag */ - dprintf(INFO, "nandcfg(Modem): %x %x (used)\n", CFG0_M, CFG1_M); - return 0; -} - -/* OneNAND programming functions */ - -static void flash_onenand_read_id(dmov_s *cmdlist, unsigned *ptrlist) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - unsigned *data = ptrlist + 4; - - data[0] = SFLASH_BCFG; - data[1] = SFLASH_PREPCMD(8, 0, 0, NAND_SFCMD_DATXS, NAND_SFCMD_ASYNC, NAND_SFCMD_REGRD); - data[2] = (ONENAND_DEVICE_ID << 16) | (ONENAND_MANUFACTURER_ID); - data[3] = (ONENAND_DATA_BUFFER_SIZE << 16) | (ONENAND_VERSION_ID); - data[4] = (ONENAND_AMOUNT_OF_BUFFERS << 16) | (ONENAND_BOOT_BUFFER_SIZE); - data[5] = (CLEAN_DATA_16 << 16) | (ONENAND_TECHNOLOGY); - data[6] = CLEAN_DATA_32; //status - data[7] = CLEAN_DATA_32; //register read - data[8] = CLEAN_DATA_32; //register read - data[9] = CLEAN_DATA_32; //register read - data[10] = CLEAN_DATA_32; //register read - data[11] = 1; - data[12] = 0 | 4; - - /* Setup controller in SFLASH mode */ - cmd[0].cmd = 0 | CMD_OCB; - cmd[0].src = paddr(&data[0]); - cmd[0].dst = NAND_SFLASHC_BURST_CFG; - cmd[0].len = 4; - - /* Enable data mover for controller */ - cmd[1].cmd = 0; - cmd[1].src = paddr(&data[12]); - cmd[1].dst = NAND_FLASH_CHIP_SELECT; - cmd[1].len = 4; - - /* Setup SFLASHC_CMD with xfers in async mode */ - cmd[2].cmd = DST_CRCI_NAND_CMD; - cmd[2].src = paddr(&data[1]); - cmd[2].dst = NAND_SFLASHC_CMD; - cmd[2].len = 4; - - /* Setup to read device information */ - cmd[3].cmd = 0; - cmd[3].src = paddr(&data[2]); - cmd[3].dst = NAND_ADDR0; - cmd[3].len = 8; - - cmd[4].cmd = 0; - cmd[4].src = paddr(&data[4]); - cmd[4].dst = NAND_ADDR2; - cmd[4].len = 8; - - /* Set execute bit */ - cmd[5].cmd = 0; - cmd[5].src = paddr(&data[11]); - cmd[5].dst = NAND_SFLASHC_EXEC_CMD; - cmd[5].len = 4; - - /* Check status */ - cmd[6].cmd = SRC_CRCI_NAND_DATA; - cmd[6].src = NAND_SFLASHC_STATUS; - cmd[6].dst = paddr(&data[6]); - cmd[6].len = 4; - - /* Read result device registers */ - cmd[7].cmd = 0 | CMD_OCU | CMD_LC; - cmd[7].src = NAND_GENP_REG0; - cmd[7].dst = paddr(&data[7]); - cmd[7].len = 16; - - ptr[0] = (paddr(cmd) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "status: %x\n", data[6]); -#endif - - flash_info.id = data[7]; - flash_info.vendor = data[7] & CLEAN_DATA_16; - flash_info.device = (data[7] >> 16) & CLEAN_DATA_16; - return; -} - - -struct data_onenand_erase { - unsigned sfbcfg; - unsigned sfcmd[4]; - unsigned sfexec; - unsigned sfstat[4]; - unsigned addr0; - unsigned addr1; - unsigned addr2; - unsigned addr3; - unsigned addr4; - unsigned addr5; - unsigned addr6; - unsigned data0; - unsigned data1; - unsigned data2; - unsigned data3; - unsigned data4; - unsigned data5; - unsigned data6; -}; - - -static int _flash_onenand_read_page(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page, void *_addr, - void *_spareaddr, unsigned raw_mode); - - -static int flash_onenand_block_isbad(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page) -{ - unsigned char page_data[2112]; - unsigned char *oobptr = &(page_data[2048]); - - /* Going to first page of the block */ - if(page & 63) - page = page - (page & 63); - - /* Reading page in raw mode */ - if (_flash_onenand_read_page(cmdlist, ptrlist,page, page_data, 0, 1)) - return 1; - - /* Checking if block is bad */ - if ((oobptr[0] != 0xFF) || (oobptr[1] != 0xFF) || - (oobptr[16] != 0xFF) || (oobptr[17] != 0xFF) || - (oobptr[32] != 0xFF) || (oobptr[33] != 0xFF) || - (oobptr[48] != 0xFF) || (oobptr[49] != 0xFF) - ) - { - return 1; - } - return 0; -} - -static int flash_onenand_erase_block(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - struct data_onenand_erase *data = (void *)ptrlist + 4; - int isbad = 0; - unsigned erasesize = (flash_pagesize << 6); - unsigned onenand_startaddr1 = DEVICE_FLASHCORE_0 | (page * flash_pagesize)/erasesize; - unsigned onenand_startaddr8 = 0x0000; - unsigned onenand_startaddr2 = DEVICE_BUFFERRAM_0 << 15; - unsigned onenand_startbuffer = DATARAM0_0 << 8; - - unsigned controller_status; - unsigned interrupt_status; - unsigned ecc_status; - - if((page * flash_pagesize) & (erasesize-1)) return -1; - - /* Check for bad block and erase only if block is not marked bad */ - isbad = flash_onenand_block_isbad(cmdlist, ptrlist, page); - if (isbad) - { - dprintf(INFO, "skipping @ %d (bad block)\n", page >> 6); - return -1; - } - - /*Erase block*/ - onenand_startaddr1 = DEVICE_FLASHCORE_0 | - ((page * flash_pagesize) / (erasesize)); - onenand_startaddr8 = 0x0000; - onenand_startaddr2 = DEVICE_BUFFERRAM_0 << 15; - onenand_startbuffer = DATARAM0_0 << 8; - - - data->sfbcfg = SFLASH_BCFG; - data->sfcmd[0] = SFLASH_PREPCMD(7, 0, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_REGWR); - data->sfcmd[1] = SFLASH_PREPCMD(0, 0, 32, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_INTHI); - data->sfcmd[2] = SFLASH_PREPCMD(3, 7, 0, - NAND_SFCMD_DATXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_REGRD); - data->sfcmd[3] = SFLASH_PREPCMD(4, 10, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_REGWR); - data->sfexec = 1; - data->sfstat[0] = CLEAN_DATA_32; - data->sfstat[1] = CLEAN_DATA_32; - data->sfstat[2] = CLEAN_DATA_32; - data->sfstat[3] = CLEAN_DATA_32; - data->addr0 = (ONENAND_INTERRUPT_STATUS << 16) | - (ONENAND_SYSTEM_CONFIG_1); - data->addr1 = (ONENAND_START_ADDRESS_8 << 16) | - (ONENAND_START_ADDRESS_1); - data->addr2 = (ONENAND_START_BUFFER << 16) | - (ONENAND_START_ADDRESS_2); - data->addr3 = (ONENAND_ECC_STATUS << 16) | - (ONENAND_COMMAND); - data->addr4 = (ONENAND_CONTROLLER_STATUS << 16) | - (ONENAND_INTERRUPT_STATUS); - data->addr5 = (ONENAND_INTERRUPT_STATUS << 16) | - (ONENAND_SYSTEM_CONFIG_1); - data->addr6 = (ONENAND_START_ADDRESS_3 << 16) | - (ONENAND_START_ADDRESS_1); - data->data0 = (ONENAND_CLRINTR << 16) | - (ONENAND_SYSCFG1_ECCENA); - data->data1 = (onenand_startaddr8 << 16) | - (onenand_startaddr1); - data->data2 = (onenand_startbuffer << 16) | - (onenand_startaddr2); - data->data3 = (CLEAN_DATA_16 << 16) | - (ONENAND_CMDERAS); - data->data4 = (CLEAN_DATA_16 << 16) | - (CLEAN_DATA_16); - data->data5 = (ONENAND_CLRINTR << 16) | - (ONENAND_SYSCFG1_ECCENA); - data->data6 = (ONENAND_STARTADDR3_RES << 16) | - (ONENAND_STARTADDR1_RES); - - /***************************************************************/ - /* Write the necessary address registers in the onenand device */ - /***************************************************************/ - - /* Enable and configure the SFlash controller */ - cmd->cmd = 0 | CMD_OCB; - cmd->src = paddr(&data->sfbcfg); - cmd->dst = NAND_SFLASHC_BURST_CFG; - cmd->len = 4; - cmd++; - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[0]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Write the ADDR0 and ADDR1 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->addr0); - cmd->dst = NAND_ADDR0; - cmd->len = 8; - cmd++; - - /* Write the ADDR2 ADDR3 ADDR4 ADDR5 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->addr2); - cmd->dst = NAND_ADDR2; - cmd->len = 16; - cmd++; - - /* Write the ADDR6 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->addr6); - cmd->dst = NAND_ADDR6; - cmd->len = 4; - cmd++; - - /* Write the GENP0, GENP1, GENP2, GENP3, GENP4 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->data0); - cmd->dst = NAND_GENP_REG0; - cmd->len = 16; - cmd++; - - /* Write the FLASH_DEV_CMD4,5,6 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->data4); - cmd->dst = NAND_DEV_CMD4; - cmd->len = 12; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[0]); - cmd->len = 4; - cmd++; - - /***************************************************************/ - /* Wait for the interrupt from the Onenand device controller */ - /***************************************************************/ - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[1]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[1]); - cmd->len = 4; - cmd++; - - /***************************************************************/ - /* Read the necessary status registers from the onenand device */ - /***************************************************************/ - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[2]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[2]); - cmd->len = 4; - cmd++; - - /* Read the GENP3 register */ - cmd->cmd = 0; - cmd->src = NAND_GENP_REG3; - cmd->dst = paddr(&data->data3); - cmd->len = 4; - cmd++; - - /* Read the DEVCMD4 register */ - cmd->cmd = 0; - cmd->src = NAND_DEV_CMD4; - cmd->dst = paddr(&data->data4); - cmd->len = 4; - cmd++; - - /***************************************************************/ - /* Restore the necessary registers to proper values */ - /***************************************************************/ - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[3]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA | CMD_OCU | CMD_LC; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[3]); - cmd->len = 4; - cmd++; - - ptr[0] = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - - ecc_status = (data->data3 >> 16) & 0x0000FFFF; - interrupt_status = (data->data4 >> 0) & 0x0000FFFF; - controller_status = (data->data4 >> 16) & 0x0000FFFF; - -#if VERBOSE - dprintf(INFO, "\n%s: sflash status %x %x %x %x\n", __func__, - data->sfstat[0], - data->sfstat[1], - data->sfstat[2], - data->sfstat[3]); - - dprintf(INFO, "%s: controller_status = %x\n", __func__, - controller_status); - dprintf(INFO, "%s: interrupt_status = %x\n", __func__, - interrupt_status); - dprintf(INFO, "%s: ecc_status = %x\n", __func__, - ecc_status); -#endif - /* Check for errors, protection violations etc */ - if ((controller_status != 0) - || (data->sfstat[0] & 0x110) - || (data->sfstat[1] & 0x110) - || (data->sfstat[2] & 0x110) - || (data->sfstat[3] & 0x110)) { - dprintf(CRITICAL, "%s: ECC/MPU/OP error\n", __func__); - return -1; - } - - -#if VERBOSE - dprintf(INFO, "status: %x\n", data[5]); -#endif - - return 0; -} - - -struct data_onenand_read { - unsigned sfbcfg; - unsigned sfcmd[9]; - unsigned sfexec; - unsigned sfstat[9]; - unsigned addr0; - unsigned addr1; - unsigned addr2; - unsigned addr3; - unsigned addr4; - unsigned addr5; - unsigned addr6; - unsigned data0; - unsigned data1; - unsigned data2; - unsigned data3; - unsigned data4; - unsigned data5; - unsigned data6; - unsigned macro[5]; -}; - - -static int _flash_onenand_read_page(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page, void *_addr, void *_spareaddr, - unsigned raw_mode) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - struct data_onenand_read *data = (void*) (ptrlist + 4); - unsigned addr = (unsigned) _addr; - unsigned curr_addr = (unsigned) _addr; - unsigned spareaddr = (unsigned) _spareaddr; - unsigned i; - unsigned erasesize = (flash_pagesize<<6); - unsigned writesize = flash_pagesize; - - unsigned onenand_startaddr1 = DEVICE_FLASHCORE_0 | - ((unsigned)(page * flash_pagesize) / erasesize); - unsigned onenand_startaddr8 = (((unsigned)(page * flash_pagesize) & - (erasesize - 1)) / writesize) << 2; - unsigned onenand_startaddr2 = DEVICE_BUFFERRAM_0 << 15; - unsigned onenand_startbuffer = DATARAM0_0 << 8; - unsigned onenand_sysconfig1 = (raw_mode == 1) ? ONENAND_SYSCFG1_ECCDIS :\ - ONENAND_SYSCFG1_ECCENA; - - unsigned controller_status; - unsigned interrupt_status; - unsigned ecc_status; - if (raw_mode != 1) - { - int isbad = 0; - isbad = flash_onenand_block_isbad(cmdlist, ptrlist, page); - if (isbad) - return -2; - } - - //static int oobfree_offset[8] = {2, 14, 18, 30, 34, 46, 50, 62}; - //static int oobfree_length[8] = {3, 2, 3, 2, 3, 2, 3, 2}; - - data->sfbcfg = SFLASH_BCFG; - data->sfcmd[0] = SFLASH_PREPCMD(7, 0, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_REGWR); - data->sfcmd[1] = SFLASH_PREPCMD(0, 0, 32, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_INTHI); - data->sfcmd[2] = SFLASH_PREPCMD(3, 7, 0, - NAND_SFCMD_DATXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_REGRD); - data->sfcmd[3] = SFLASH_PREPCMD(256, 0, 0, - NAND_SFCMD_DATXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_DATRD); - data->sfcmd[4] = SFLASH_PREPCMD(256, 0, 0, - NAND_SFCMD_DATXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_DATRD); - data->sfcmd[5] = SFLASH_PREPCMD(256, 0, 0, - NAND_SFCMD_DATXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_DATRD); - data->sfcmd[6] = SFLASH_PREPCMD(256, 0, 0, - NAND_SFCMD_DATXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_DATRD); - data->sfcmd[7] = SFLASH_PREPCMD(32, 0, 0, - NAND_SFCMD_DATXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_DATRD); - data->sfcmd[8] = SFLASH_PREPCMD(4, 10, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_REGWR); - data->sfexec = 1; - data->sfstat[0] = CLEAN_DATA_32; - data->sfstat[1] = CLEAN_DATA_32; - data->sfstat[2] = CLEAN_DATA_32; - data->sfstat[3] = CLEAN_DATA_32; - data->sfstat[4] = CLEAN_DATA_32; - data->sfstat[5] = CLEAN_DATA_32; - data->sfstat[6] = CLEAN_DATA_32; - data->sfstat[7] = CLEAN_DATA_32; - data->sfstat[8] = CLEAN_DATA_32; - - data->addr0 = (ONENAND_INTERRUPT_STATUS << 16) | - (ONENAND_SYSTEM_CONFIG_1); - data->addr1 = (ONENAND_START_ADDRESS_8 << 16) | - (ONENAND_START_ADDRESS_1); - data->addr2 = (ONENAND_START_BUFFER << 16) | - (ONENAND_START_ADDRESS_2); - data->addr3 = (ONENAND_ECC_STATUS << 16) | - (ONENAND_COMMAND); - data->addr4 = (ONENAND_CONTROLLER_STATUS << 16) | - (ONENAND_INTERRUPT_STATUS); - data->addr5 = (ONENAND_INTERRUPT_STATUS << 16) | - (ONENAND_SYSTEM_CONFIG_1); - data->addr6 = (ONENAND_START_ADDRESS_3 << 16) | - (ONENAND_START_ADDRESS_1); - data->data0 = (ONENAND_CLRINTR << 16) | - (onenand_sysconfig1); - data->data1 = (onenand_startaddr8 << 16) | - (onenand_startaddr1); - data->data2 = (onenand_startbuffer << 16) | - (onenand_startaddr2); - data->data3 = (CLEAN_DATA_16 << 16) | - (ONENAND_CMDLOADSPARE); - data->data4 = (CLEAN_DATA_16 << 16) | - (CLEAN_DATA_16); - data->data5 = (ONENAND_CLRINTR << 16) | - (ONENAND_SYSCFG1_ECCENA); - data->data6 = (ONENAND_STARTADDR3_RES << 16) | - (ONENAND_STARTADDR1_RES); - data->macro[0] = 0x0200; - data->macro[1] = 0x0300; - data->macro[2] = 0x0400; - data->macro[3] = 0x0500; - data->macro[4] = 0x8010; - - /*************************************************************/ - /* Write necessary address registers in the onenand device */ - /*************************************************************/ - - /* Enable and configure the SFlash controller */ - cmd->cmd = 0 | CMD_OCB; - cmd->src = paddr(&data->sfbcfg); - cmd->dst = NAND_SFLASHC_BURST_CFG; - cmd->len = 4; - cmd++; - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[0]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Write the ADDR0 and ADDR1 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->addr0); - cmd->dst = NAND_ADDR0; - cmd->len = 8; - cmd++; - - /* Write the ADDR2 ADDR3 ADDR4 ADDR5 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->addr2); - cmd->dst = NAND_ADDR2; - cmd->len = 16; - cmd++; - - /* Write the ADDR6 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->addr6); - cmd->dst = NAND_ADDR6; - cmd->len = 4; - cmd++; - - /* Write the GENP0, GENP1, GENP2, GENP3 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->data0); - cmd->dst = NAND_GENP_REG0; - cmd->len = 16; - cmd++; - - /* Write the FLASH_DEV_CMD4,5,6 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->data4); - cmd->dst = NAND_DEV_CMD4; - cmd->len = 12; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[0]); - cmd->len = 4; - cmd++; - - /*************************************************************/ - /* Wait for the interrupt from the Onenand device controller */ - /*************************************************************/ - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[1]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[1]); - cmd->len = 4; - cmd++; - - - /*************************************************************/ - /* Read necessary status registers from the onenand device */ - /*************************************************************/ - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[2]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[2]); - cmd->len = 4; - cmd++; - - /* Read the GENP3 register */ - cmd->cmd = 0; - cmd->src = NAND_GENP_REG3; - cmd->dst = paddr(&data->data3); - cmd->len = 4; - cmd++; - - /* Read the DEVCMD4 register */ - cmd->cmd = 0; - cmd->src = NAND_DEV_CMD4; - cmd->dst = paddr(&data->data4); - cmd->len = 4; - cmd++; - - - /*************************************************************/ - /* Read the data ram area from the onenand buffer ram */ - /*************************************************************/ - - if (addr) { - - data->data3 = (CLEAN_DATA_16 << 16) | - (ONENAND_CMDLOAD); - - for (i = 0; i < 4; i++) { - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[3+i]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Write the MACRO1 register */ - cmd->cmd = 0; - cmd->src = paddr(&data->macro[i]); - cmd->dst = NAND_MACRO1_REG; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data rdy, & read status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[3+i]); - cmd->len = 4; - cmd++; - - /* Transfer nand ctlr buf contents to usr buf */ - cmd->cmd = 0; - cmd->src = NAND_FLASH_BUFFER; - cmd->dst = curr_addr; - cmd->len = 512; - curr_addr += 512; - cmd++; - } - } - - /* Read oob bytes in Raw Mode */ - if (raw_mode == 1) - { - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[7]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Write the MACRO1 register */ - cmd->cmd = 0; - cmd->src = paddr(&data->macro[4]); - cmd->dst = NAND_MACRO1_REG; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data rdy, & read status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[7]); - cmd->len = 4; - cmd++; - - /* Transfer nand ctlr buf contents to usr buf */ - cmd->cmd = 0; - cmd->src = NAND_FLASH_BUFFER; - cmd->dst = curr_addr; - cmd->len = 64; - curr_addr += 64; - cmd++; - } - - /*************************************************************/ - /* Restore the necessary registers to proper values */ - /*************************************************************/ - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[8]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA | CMD_OCU | CMD_LC; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[8]); - cmd->len = 4; - cmd++; - - - ptr[0] = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - - - ecc_status = (data->data3 >> 16) & - 0x0000FFFF; - interrupt_status = (data->data4 >> 0) & - 0x0000FFFF; - controller_status = (data->data4 >> 16) & - 0x0000FFFF; - -#if VERBOSE - dprintf(INFO, "\n%s: sflash status %x %x %x %x %x %x %x" - "%x %x\n", __func__, - data->sfstat[0], - data->sfstat[1], - data->sfstat[2], - data->sfstat[3], - data->sfstat[4], - data->sfstat[5], - data->sfstat[6], - data->sfstat[7]); - - dprintf(INFO, "%s: controller_status = %x\n", __func__, - controller_status); - dprintf(INFO, "%s: interrupt_status = %x\n", __func__, - interrupt_status); - dprintf(INFO, "%s: ecc_status = %x\n", __func__, - ecc_status); -#endif - /* Check for errors, protection violations etc */ - if ((controller_status != 0) - || (data->sfstat[0] & 0x110) - || (data->sfstat[1] & 0x110) - || (data->sfstat[2] & 0x110) - || ((data->sfstat[3] & 0x110) && - (addr)) - || ((data->sfstat[4] & 0x110) && - (addr)) - || ((data->sfstat[5] & 0x110) && - (addr)) - || ((data->sfstat[6] & 0x110) && - (addr))) { - dprintf(INFO, "%s: ECC/MPU/OP error\n", __func__); - return -1; - } - -#if VERBOSE - dprintf(INFO, "read page %d: status: %x %x %x %x\n", - page, data[5], data[6], data[7], data[8]); - for(n = 0; n < 4; n++) { - ptr = (unsigned*)(addr + 512 * n); - dprintf(INFO, "data%d: %x %x %x %x\n", n, ptr[0], ptr[1], ptr[2], ptr[3]); - ptr = (unsigned*)(spareaddr + 16 * n); - dprintf(INFO, "spare data%d %x %x %x %x\n", n, ptr[0], ptr[1], ptr[2], ptr[3]); - } -#endif - - return 0; -} - - -struct data_onenand_write { - unsigned sfbcfg; - unsigned sfcmd[9]; - unsigned sfexec; - unsigned sfstat[9]; - unsigned addr0; - unsigned addr1; - unsigned addr2; - unsigned addr3; - unsigned addr4; - unsigned addr5; - unsigned addr6; - unsigned data0; - unsigned data1; - unsigned data2; - unsigned data3; - unsigned data4; - unsigned data5; - unsigned data6; - unsigned macro[5]; -}; - -static int _flash_onenand_write_page(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page, const void *_addr, - const void *_spareaddr, unsigned raw_mode) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - struct data_onenand_write *data = (void*) (ptrlist + 4); - unsigned addr = (unsigned) _addr; - unsigned addr_curr = (unsigned) _addr; - char * spareaddr = (char *) _spareaddr; - unsigned i, j, k; - - unsigned erasesize = (flash_pagesize<<6); - unsigned writesize = flash_pagesize; - - unsigned onenand_startaddr1 = (page * flash_pagesize) / erasesize; - unsigned onenand_startaddr8 = (((unsigned)(page * flash_pagesize) & - (erasesize-1)) / writesize) << 2; - unsigned onenand_startaddr2 = DEVICE_BUFFERRAM_0 << 15; - unsigned onenand_startbuffer = DATARAM0_0 << 8; - unsigned onenand_sysconfig1 = (raw_mode == 1) ? ONENAND_SYSCFG1_ECCDIS :\ - ONENAND_SYSCFG1_ECCENA; - - unsigned controller_status; - unsigned interrupt_status; - unsigned ecc_status; - - char flash_oob[64]; - - unsigned oobfree_offset[8] = {2, 14, 18, 30, 34, 46, 50, 62}; - unsigned oobfree_length[8] = {3, 2, 3, 2, 3, 2, 3, 2}; - - for (i = 0; i < 64; i++) - flash_oob[i] = 0xFF; - - data->sfbcfg = SFLASH_BCFG; - data->sfcmd[0] = SFLASH_PREPCMD(256, 0, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_DATWR); - data->sfcmd[1] = SFLASH_PREPCMD(256, 0, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_DATWR); - data->sfcmd[2] = SFLASH_PREPCMD(256, 0, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_DATWR); - data->sfcmd[3] = SFLASH_PREPCMD(256, 0, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_DATWR); - data->sfcmd[4] = SFLASH_PREPCMD(32, 0, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_DATWR); - data->sfcmd[5] = SFLASH_PREPCMD(7, 0, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_REGWR); - data->sfcmd[6] = SFLASH_PREPCMD(0, 0, 32, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_INTHI); - data->sfcmd[7] = SFLASH_PREPCMD(3, 7, 0, - NAND_SFCMD_DATXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_REGRD); - data->sfcmd[8] = SFLASH_PREPCMD(4, 10, 0, - NAND_SFCMD_CMDXS, - NAND_SFCMD_ASYNC, - NAND_SFCMD_REGWR); - data->sfexec = 1; - - data->sfstat[0] = CLEAN_DATA_32; - data->sfstat[1] = CLEAN_DATA_32; - data->sfstat[2] = CLEAN_DATA_32; - data->sfstat[3] = CLEAN_DATA_32; - data->sfstat[4] = CLEAN_DATA_32; - data->sfstat[5] = CLEAN_DATA_32; - data->sfstat[6] = CLEAN_DATA_32; - data->sfstat[7] = CLEAN_DATA_32; - data->sfstat[8] = CLEAN_DATA_32; - data->addr0 = (ONENAND_INTERRUPT_STATUS << 16) | - (ONENAND_SYSTEM_CONFIG_1); - data->addr1 = (ONENAND_START_ADDRESS_8 << 16) | - (ONENAND_START_ADDRESS_1); - data->addr2 = (ONENAND_START_BUFFER << 16) | - (ONENAND_START_ADDRESS_2); - data->addr3 = (ONENAND_ECC_STATUS << 16) | - (ONENAND_COMMAND); - data->addr4 = (ONENAND_CONTROLLER_STATUS << 16) | - (ONENAND_INTERRUPT_STATUS); - data->addr5 = (ONENAND_INTERRUPT_STATUS << 16) | - (ONENAND_SYSTEM_CONFIG_1); - data->addr6 = (ONENAND_START_ADDRESS_3 << 16) | - (ONENAND_START_ADDRESS_1); - data->data0 = (ONENAND_CLRINTR << 16) | - (onenand_sysconfig1); - data->data1 = (onenand_startaddr8 << 16) | - (onenand_startaddr1); - data->data2 = (onenand_startbuffer << 16) | - (onenand_startaddr2); - data->data3 = (CLEAN_DATA_16 << 16) | - (ONENAND_CMDPROGSPARE); - data->data3 = (CLEAN_DATA_16 << 16) | - (ONENAND_CMDPROGSPARE); - data->data4 = (CLEAN_DATA_16 << 16) | - (CLEAN_DATA_16); - data->data5 = (ONENAND_CLRINTR << 16) | - (ONENAND_SYSCFG1_ECCENA); - data->data6 = (ONENAND_STARTADDR3_RES << 16) | - (ONENAND_STARTADDR1_RES); - data->macro[0] = 0x0200; - data->macro[1] = 0x0300; - data->macro[2] = 0x0400; - data->macro[3] = 0x0500; - data->macro[4] = 0x8010; - - - /*************************************************************/ - /* Write the data ram area in the onenand buffer ram */ - /*************************************************************/ - - /* Enable and configure the SFlash controller */ - cmd->cmd = 0 | CMD_OCB; - cmd->src = paddr(&data->sfbcfg); - cmd->dst = NAND_SFLASHC_BURST_CFG; - cmd->len = 4; - cmd++; - - if (addr) { - data->data3 = (CLEAN_DATA_16 << 16) | - (ONENAND_CMDPROG); - - for (i = 0; i < 4; i++) { - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[i]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Trnsfr usr buf contents to nand ctlr buf */ - cmd->cmd = 0; - cmd->src = paddr(addr_curr); - cmd->dst = NAND_FLASH_BUFFER; - cmd->len = 512; - if(!raw_mode) - addr_curr += 512; - cmd++; - - /* Write the MACRO1 register */ - cmd->cmd = 0; - cmd->src = paddr(&data->macro[i]); - cmd->dst = NAND_MACRO1_REG; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data rdy, & read status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[i]); - cmd->len = 4; - cmd++; - - } - } - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[4]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - if (spareaddr) - { - // Auto mode - for (i = 0, k = 0; i < 8; i++) { - for (j = 0; j < oobfree_length[i]; j++) { - flash_oob[j+oobfree_offset[i]] = spareaddr[k]; - k++; - } - } - - cmd->cmd = 0; - cmd->src = paddr(&flash_oob); - cmd->dst = NAND_FLASH_BUFFER; - cmd->len = 64; - cmd++; - } - - if (raw_mode){ - cmd->cmd = 0; - cmd->src = paddr(addr_curr); - cmd->dst = NAND_FLASH_BUFFER; - cmd->len = 64; - cmd++; - } - - /* Write the MACRO1 register */ - cmd->cmd = 0; - cmd->src = paddr(&data->macro[4]); - cmd->dst = NAND_MACRO1_REG; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[4]); - cmd->len = 4; - cmd++; - - /*************************************************************/ - /* Write necessary address registers in the onenand device */ - /*************************************************************/ - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[5]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Write the ADDR0 and ADDR1 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->addr0); - cmd->dst = NAND_ADDR0; - cmd->len = 8; - cmd++; - - /* Write the ADDR2 ADDR3 ADDR4 ADDR5 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->addr2); - cmd->dst = NAND_ADDR2; - cmd->len = 16; - cmd++; - - /* Write the ADDR6 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->addr6); - cmd->dst = NAND_ADDR6; - cmd->len = 4; - cmd++; - - /* Write the GENP0, GENP1, GENP2, GENP3 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->data0); - cmd->dst = NAND_GENP_REG0; - cmd->len = 16; - cmd++; - - /* Write the FLASH_DEV_CMD4,5,6 registers */ - cmd->cmd = 0; - cmd->src = paddr(&data->data4); - cmd->dst = NAND_DEV_CMD4; - cmd->len = 12; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[5]); - cmd->len = 4; - cmd++; - - /*************************************************************/ - /* Wait for the interrupt from the Onenand device controller */ - /*************************************************************/ - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[6]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[6]); - cmd->len = 4; - cmd++; - - /*************************************************************/ - /* Read necessary status registers from the onenand device */ - /*************************************************************/ - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[7]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[7]); - cmd->len = 4; - cmd++; - - /* Read the GENP3 register */ - cmd->cmd = 0; - cmd->src = NAND_GENP_REG3; - cmd->dst = paddr(&data->data3); - cmd->len = 4; - cmd++; - - /* Read the DEVCMD4 register */ - cmd->cmd = 0; - cmd->src = NAND_DEV_CMD4; - cmd->dst = paddr(&data->data4); - cmd->len = 4; - cmd++; - - - /*************************************************************/ - /* Restore the necessary registers to proper values */ - /*************************************************************/ - - /* Block on cmd ready and write CMD register */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->sfcmd[8]); - cmd->dst = NAND_SFLASHC_CMD; - cmd->len = 4; - cmd++; - - /* Kick the execute command */ - cmd->cmd = 0; - cmd->src = paddr(&data->sfexec); - cmd->dst = NAND_SFLASHC_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* Block on data ready, and read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA | CMD_OCU | CMD_LC; - cmd->src = NAND_SFLASHC_STATUS; - cmd->dst = paddr(&data->sfstat[8]); - cmd->len = 4; - cmd++; - - - ptr[0] = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - - ecc_status = (data->data3 >> 16) & 0x0000FFFF; - interrupt_status = (data->data4 >> 0)&0x0000FFFF; - controller_status = (data->data4 >> 16)&0x0000FFFF; - -#if VERBOSE - dprintf(INFO, "\n%s: sflash status %x %x %x %x %x %x %x %x %x\n", __func__, - data->sfstat[0], - data->sfstat[1], - data->sfstat[2], - data->sfstat[3], - data->sfstat[4], - data->sfstat[5], - data->sfstat[6], - data->sfstat[7], - data->sfstat[8]); - - dprintf(INFO, "%s: controller_status = %x\n", __func__, - controller_status); - dprintf(INFO, "%s: interrupt_status = %x\n", __func__, - interrupt_status); - dprintf(INFO, "%s: ecc_status = %x\n", __func__, - ecc_status); -#endif - /* Check for errors, protection violations etc */ - if ((controller_status != 0) - || (data->sfstat[5] & 0x110) - || (data->sfstat[6] & 0x110) - || (data->sfstat[7] & 0x110) - || (data->sfstat[8] & 0x110) - || ((data->sfstat[0] & 0x110) && - (addr)) - || ((data->sfstat[1] & 0x110) && - (addr)) - || ((data->sfstat[2] & 0x110) && - (addr)) - || ((data->sfstat[3] & 0x110) && - (addr))) { - dprintf(CRITICAL, "%s: ECC/MPU/OP error\n", __func__); - return -1; - } - - - return 0; -} - -static int flash_onenand_mark_badblock(dmov_s *cmdlist, unsigned *ptrlist, unsigned page) -{ - memset(empty_buf,0,528); - /* Going to first page of the block */ - if(page & 63) - page = page - (page & 63); - return _flash_onenand_write_page(cmdlist, ptrlist, page, empty_buf, 0, 1); -} - -static int flash_mark_badblock(dmov_s *cmdlist, unsigned *ptrlist, unsigned page) -{ - switch(flash_info.type) { - case FLASH_8BIT_NAND_DEVICE: - case FLASH_16BIT_NAND_DEVICE: - return flash_nand_mark_badblock(cmdlist, ptrlist, page); - case FLASH_ONENAND_DEVICE: - return flash_onenand_mark_badblock(cmdlist, ptrlist, page); - default: - return -1; - } -} - - -/* Wrapper functions */ -static void flash_read_id(dmov_s *cmdlist, unsigned *ptrlist) -{ - int dev_found = 0; - unsigned index; - - // Try to read id - flash_nand_read_id(cmdlist, ptrlist); - // Check if we support the device - for (index=1; - index < (sizeof(supported_flash)/sizeof(struct flash_identification)); - index++) - { - if ((flash_info.id & supported_flash[index].mask) == - (supported_flash[index].flash_id & - (supported_flash[index].mask))) { - dev_found = 1; - break; - } - } - - if(!dev_found) { - flash_onenand_read_id(cmdlist, ptrlist); - for (index=1; - index < (sizeof(supported_flash)/sizeof(struct flash_identification)); - index++) - { - if ((flash_info.id & supported_flash[index].mask) == - (supported_flash[index].flash_id & - (supported_flash[index].mask))) { - dev_found = 1; - break; - } - } - } - - - - if(dev_found) { - if (supported_flash[index].widebus) - flash_info.type = FLASH_16BIT_NAND_DEVICE; - else - flash_info.type = FLASH_8BIT_NAND_DEVICE; - if (supported_flash[index].onenand) - flash_info.type = FLASH_ONENAND_DEVICE; - flash_info.page_size = supported_flash[index].pagesize; - flash_pagesize = flash_info.page_size; - flash_info.block_size = supported_flash[index].blksize; - flash_info.spare_size = supported_flash[index].oobsize; - if (flash_info.block_size && flash_info.page_size) - { - flash_info.num_blocks = supported_flash[index].density; - flash_info.num_blocks /= (flash_info.block_size); - } - else - { - flash_info.num_blocks = 0; - } - ASSERT(flash_info.num_blocks); - return; - } - - // Assume 8 bit nand device for backward compatability - if (dev_found == 0) { - dprintf(INFO, "Device not supported. Assuming 8 bit NAND device\n"); - flash_info.type = FLASH_8BIT_NAND_DEVICE; - } - dprintf(INFO, "nandid: 0x%x maker=0x%02x device=0x%02x page_size=%d\n", - flash_info.id, flash_info.vendor, flash_info.device, - flash_info.page_size); - dprintf(INFO, " spare_size=%d block_size=%d num_blocks=%d\n", - flash_info.spare_size, flash_info.block_size, - flash_info.num_blocks); -} - -static int flash_erase_block(dmov_s *cmdlist, unsigned *ptrlist, unsigned page) -{ - switch(flash_info.type) { - case FLASH_8BIT_NAND_DEVICE: - case FLASH_16BIT_NAND_DEVICE: - return flash_nand_erase_block(cmdlist, ptrlist, page); - case FLASH_ONENAND_DEVICE: - return flash_onenand_erase_block(cmdlist, ptrlist, page); - default: - return -1; - } -} - -static int _flash_read_page(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page, void *_addr, void *_spareaddr) -{ - switch(flash_info.type) { - case FLASH_8BIT_NAND_DEVICE: - case FLASH_16BIT_NAND_DEVICE: - if(interleaved_mode) - return flash_nand_read_page_interleave(cmdlist, ptrlist, page, _addr, _spareaddr); - else - return _flash_nand_read_page(cmdlist, ptrlist, page, _addr, _spareaddr); - case FLASH_ONENAND_DEVICE: - return _flash_onenand_read_page(cmdlist, ptrlist, page, _addr, _spareaddr, 0); - default: - return -1; - } -} - -static int _flash_block_isbad(dmov_s *cmdlist, unsigned *ptrlist, unsigned page) -{ - switch(flash_info.type) { - case FLASH_8BIT_NAND_DEVICE: - case FLASH_16BIT_NAND_DEVICE: - return flash_nand_block_isbad(cmdlist, ptrlist, page); - case FLASH_ONENAND_DEVICE: - return flash_onenand_block_isbad(cmdlist, ptrlist, page); - default: - return -1; - } -} - -static int _flash_write_page(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page, const void *_addr, - const void *_spareaddr) -{ - switch(flash_info.type) { - case FLASH_8BIT_NAND_DEVICE: - case FLASH_16BIT_NAND_DEVICE: - if(interleaved_mode) - return flash_nand_write_page_interleave(cmdlist, ptrlist, page, _addr, _spareaddr, 0); - else - return _flash_nand_write_page(cmdlist, ptrlist, page, _addr, _spareaddr, 0); - case FLASH_ONENAND_DEVICE: - return _flash_onenand_write_page(cmdlist, ptrlist, page, _addr, _spareaddr, 0); - default: - return -1; - } -} - -static unsigned *flash_ptrlist; -static dmov_s *flash_cmdlist; - -static struct ptable *flash_ptable = NULL; - -void flash_init(void) -{ - ASSERT(flash_ptable == NULL); - - flash_ptrlist = memalign(32, 1024); - flash_cmdlist = memalign(32, 1024); - flash_data = memalign(32, 4096 + 128); - flash_spare = memalign(32, 128); - - flash_read_id(flash_cmdlist, flash_ptrlist); - if((FLASH_8BIT_NAND_DEVICE == flash_info.type) - ||(FLASH_16BIT_NAND_DEVICE == flash_info.type)) { - if(flash_nand_read_config(flash_cmdlist, flash_ptrlist)) { - dprintf(CRITICAL, "ERROR: could not read CFG0/CFG1 state\n"); - ASSERT(0); - } - } -} - -struct ptable *flash_get_ptable(void) -{ - return flash_ptable; -} - -void flash_set_ptable(struct ptable *new_ptable) -{ - ASSERT(flash_ptable == NULL && new_ptable != NULL); - flash_ptable = new_ptable; -} - -struct flash_info *flash_get_info(void) -{ - return &flash_info; -} - -int flash_erase(struct ptentry *ptn) -{ - unsigned block = ptn->start; - unsigned count = ptn->length; - - set_nand_configuration(ptn->type); - while(count-- > 0) { - if(flash_erase_block(flash_cmdlist, flash_ptrlist, block * 64)) { - dprintf(INFO, "cannot erase @ %d (bad block?)\n", block); - } - block++; - } - return 0; -} - -int flash_read_ext(struct ptentry *ptn, unsigned extra_per_page, - unsigned offset, void *data, unsigned bytes) -{ - unsigned page = (ptn->start * 64) + (offset / flash_pagesize); - unsigned lastpage = (ptn->start + ptn->length) * 64; - unsigned count = (bytes + flash_pagesize - 1 + extra_per_page) / (flash_pagesize + extra_per_page); - unsigned *spare = (unsigned*) flash_spare; - unsigned errors = 0; - unsigned char *image = data; - unsigned current_block = (page - (page & 63)) >> 6; - unsigned start_block = ptn->start; - int result = 0; - int isbad = 0; - int start_block_count = 0; - - ASSERT(ptn->type == TYPE_APPS_PARTITION); - set_nand_configuration(TYPE_APPS_PARTITION); - - if(offset & (flash_pagesize - 1)) - return -1; - -// Adjust page offset based on number of bad blocks from start to current page - if (start_block < current_block) - { - start_block_count = (current_block - start_block); - while (start_block_count && (start_block < (ptn->start + ptn->length))) { - isbad = _flash_block_isbad(flash_cmdlist, flash_ptrlist, start_block*64); - if (isbad) - page += 64; - else - start_block_count--; - start_block++; - } - } - - while((page < lastpage) && !start_block_count) { - if(count == 0) { - dprintf(INFO, "flash_read_image: success (%d errors)\n", errors); - return 0; - } - - result = _flash_read_page(flash_cmdlist, flash_ptrlist, page, image, spare); - - if (result == -1) { - // bad page, go to next page - page++; - errors++; - continue; - } - else if (result == -2) { - // bad block, go to next block same offset - page += 64; - errors++; - continue; - } - - page++; - image += flash_pagesize; - memcpy(image, spare, extra_per_page); - image += extra_per_page; - count -= 1; - } - - /* could not find enough valid pages before we hit the end */ - dprintf(INFO, "flash_read_image: failed (%d errors)\n", errors); - return 0xffffffff; -} - -int flash_write(struct ptentry *ptn, unsigned extra_per_page, const void *data, - unsigned bytes) -{ - unsigned page = ptn->start * 64; - unsigned lastpage = (ptn->start + ptn->length) * 64; - unsigned *spare = (unsigned*) flash_spare; - const unsigned char *image = data; - unsigned wsize = flash_pagesize + extra_per_page; - unsigned n; - int r; - - if ((flash_info.type == FLASH_ONENAND_DEVICE) && (ptn->type == TYPE_MODEM_PARTITION)) - { - dprintf(CRITICAL, "flash_write_image: feature not supported\n"); - return -1; - } - - set_nand_configuration(ptn->type); - for(n = 0; n < 16; n++) spare[n] = 0xffffffff; - - while(bytes > 0) { - if(bytes < wsize) { - dprintf(CRITICAL, "flash_write_image: image undersized (%d < %d)\n", bytes, wsize); - return -1; - } - if(page >= lastpage) { - dprintf(CRITICAL, "flash_write_image: out of space\n"); - return -1; - } - - if((page & 63) == 0) { - if(flash_erase_block(flash_cmdlist, flash_ptrlist, page)) { - dprintf(INFO, "flash_write_image: bad block @ %d\n", page >> 6); - page += 64; - continue; - } - } - - if(extra_per_page) { - r = _flash_write_page(flash_cmdlist, flash_ptrlist, page, image, image + flash_pagesize); - } else { - r = _flash_write_page(flash_cmdlist, flash_ptrlist, page, image, spare); - } - if(r) { - dprintf(INFO, "flash_write_image: write failure @ page %d (src %d)\n", page, image - (const unsigned char *)data); - image -= (page & 63) * wsize; - bytes += (page & 63) * wsize; - page &= ~63; - if(flash_erase_block(flash_cmdlist, flash_ptrlist, page)) { - dprintf(INFO, "flash_write_image: erase failure @ page %d\n", page); - } - if (ptn->type != TYPE_MODEM_PARTITION) { - flash_mark_badblock(flash_cmdlist, flash_ptrlist, page); - } - dprintf(INFO, "flash_write_image: restart write @ page %d (src %d)\n", page, image - (const unsigned char *)data); - page += 64; - continue; - } - page++; - image += wsize; - bytes -= wsize; - } - - /* erase any remaining pages in the partition */ - page = (page + 63) & (~63); - while(page < lastpage){ - if(flash_erase_block(flash_cmdlist, flash_ptrlist, page)) { - dprintf(INFO, "flash_write_image: bad block @ %d\n", page >> 6); - } - page += 64; - } - - dprintf(INFO, "flash_write_image: success\n"); - return 0; -} - -#if 0 -static int flash_read_page(unsigned page, void *data, void *extra) -{ - return _flash_read_page(flash_cmdlist, flash_ptrlist, - page, data, extra); -} -#endif - -unsigned flash_page_size(void) -{ - return flash_pagesize; -} - -void enable_interleave_mode(int status) -{ - interleaved_mode = status; - if(status) - { - flash_pagesize *= 2; - platform_config_interleaved_mode_gpios(); - } - return; -} diff --git a/lk/platform/msm_shared/proc_comm.c b/lk/platform/msm_shared/proc_comm.c deleted file mode 100644 index 48d2040..0000000 --- a/lk/platform/msm_shared/proc_comm.c +++ /dev/null @@ -1,368 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include -#ifndef PLATFORM_MSM8X60 -#define ACPU_CLK 0 /* Applications processor clock */ -#define ADM_CLK 1 /* Applications data mover clock */ -#define ADSP_CLK 2 /* ADSP clock */ -#define EBI1_CLK 3 /* External bus interface 1 clock */ -#define EBI2_CLK 4 /* External bus interface 2 clock */ -#define ECODEC_CLK 5 /* External CODEC clock */ -#define EMDH_CLK 6 /* External MDDI host clock */ -#define GP_CLK 7 /* General purpose clock */ -#define GRP_CLK 8 /* Graphics clock */ -#define I2C_CLK 9 /* I2C clock */ -#define ICODEC_RX_CLK 10 /* Internal CODEX RX clock */ -#define ICODEC_TX_CLK 11 /* Internal CODEX TX clock */ -#define IMEM_CLK 12 /* Internal graphics memory clock */ -#define MDC_CLK 13 /* MDDI client clock */ -#define MDP_CLK 14 /* Mobile display processor clock */ -#define PBUS_CLK 15 /* Peripheral bus clock */ -#define PCM_CLK 16 /* PCM clock */ -#define PMDH_CLK 17 /* Primary MDDI host clock */ -#define SDAC_CLK 18 /* Stereo DAC clock */ -#define SDC1_CLK 19 /* Secure Digital Card clocks */ -#define SDC1_PCLK 20 -#define SDC2_CLK 21 -#define SDC2_PCLK 22 -#define SDC3_CLK 23 -#define SDC3_PCLK 24 -#define SDC4_CLK 25 -#define SDC4_PCLK 26 -#define TSIF_CLK 27 /* Transport Stream Interface clocks */ -#define TSIF_REF_CLK 28 -#define TV_DAC_CLK 29 /* TV clocks */ -#define TV_ENC_CLK 30 -#define UART1_CLK 31 /* UART clocks */ -#define UART2_CLK 32 -#define UART3_CLK 33 -#define UART1DM_CLK 34 -#define UART2DM_CLK 35 -#define USB_HS_CLK 36 /* High speed USB core clock */ -#define USB_HS_PCLK 37 /* High speed USB pbus clock */ -#define USB_OTG_CLK 38 /* Full speed USB clock */ -#define VDC_CLK 39 /* Video controller clock */ -#define VFE_CLK 40 /* Camera / Video Front End clock */ -#define VFE_MDC_CLK 41 /* VFE MDDI client clock */ - -/* qsd8k adds... */ -#define MDP_LCDC_PCLK_CLK 42 -#define MDP_LCDC_PAD_PCLK_CLK 43 -#define MDP_VSYNC_CLK 44 - -#define P_USB_HS_CORE_CLK 53 /* High speed USB 1 core clock */ -/* msm7x30 adds... */ -#define PMDH_P_CLK 82 -#define MDP_P_CLK 86 - -enum { - PCOM_CMD_IDLE = 0x0, - PCOM_CMD_DONE, - PCOM_RESET_APPS, - PCOM_RESET_CHIP, - PCOM_CONFIG_NAND_MPU, - PCOM_CONFIG_USB_CLKS, - PCOM_GET_POWER_ON_STATUS, - PCOM_GET_WAKE_UP_STATUS, - PCOM_GET_BATT_LEVEL, - PCOM_CHG_IS_CHARGING, - PCOM_POWER_DOWN, - PCOM_USB_PIN_CONFIG, - PCOM_USB_PIN_SEL, - PCOM_SET_RTC_ALARM, - PCOM_NV_READ, - PCOM_NV_WRITE, - PCOM_GET_UUID_HIGH, - PCOM_GET_UUID_LOW, - PCOM_GET_HW_ENTROPY, - PCOM_RPC_GPIO_TLMM_CONFIG_REMOTE, - PCOM_CLKCTL_RPC_ENABLE, - PCOM_CLKCTL_RPC_DISABLE, - PCOM_CLKCTL_RPC_RESET, - PCOM_CLKCTL_RPC_SET_FLAGS, - PCOM_CLKCTL_RPC_SET_RATE, - PCOM_CLKCTL_RPC_MIN_RATE, - PCOM_CLKCTL_RPC_MAX_RATE, - PCOM_CLKCTL_RPC_RATE, - PCOM_CLKCTL_RPC_PLL_REQUEST, - PCOM_CLKCTL_RPC_ENABLED, - PCOM_VREG_SWITCH, - PCOM_VREG_SET_LEVEL, - PCOM_GPIO_TLMM_CONFIG_GROUP, - PCOM_GPIO_TLMM_UNCONFIG_GROUP, - PCOM_NV_READ_HIGH_BITS, - PCOM_NV_WRITE_HIGH_BITS, - PCOM_RPC_GPIO_TLMM_CONFIG_EX = 0x25, - PCOM_RESERVED_101 = 0x65, - PCOM_MSM_HSUSB_PHY_RESET, - PCOM_GET_BATT_MV_LEVEL, - PCOM_CHG_USB_IS_PC_CONNECTED, - PCOM_CHG_USB_IS_CHARGER_CONNECTED, - PCOM_CHG_USB_IS_DISCONNECTED, - PCOM_CHG_USB_I_AVAILABLE, - PCOM_NUM_CMDS, -}; - -enum { - PCOM_INVALID_STATUS = 0x0, - PCOM_READY, - PCOM_CMD_RUNNING, - PCOM_CMD_SUCCESS, - PCOM_CMD_FAIL, -}; - -#ifndef PLATFORM_MSM7X30 -#define MSM_A2M_INT(n) (MSM_CSR_BASE + 0x400 + (n) * 4) -#endif -static inline void notify_other_proc_comm(void) -{ -#ifndef PLATFORM_MSM7X30 - writel(1, MSM_A2M_INT(6)); -#else - writel(1<<6, (MSM_GCC_BASE + 0x8)); -#endif -} - -#define APP_COMMAND (MSM_SHARED_BASE + 0x00) -#define APP_STATUS (MSM_SHARED_BASE + 0x04) -#define APP_DATA1 (MSM_SHARED_BASE + 0x08) -#define APP_DATA2 (MSM_SHARED_BASE + 0x0C) - -#define MDM_COMMAND (MSM_SHARED_BASE + 0x10) -#define MDM_STATUS (MSM_SHARED_BASE + 0x14) -#define MDM_DATA1 (MSM_SHARED_BASE + 0x18) -#define MDM_DATA2 (MSM_SHARED_BASE + 0x1C) - -int msm_proc_comm(unsigned cmd, unsigned *data1, unsigned *data2) -{ - int ret = -1; - unsigned status; - -// dprintf(INFO, "proc_comm(%d,%d,%d)\n", -// cmd, data1 ? *data1 : 0, data2 ? *data2 : 0); - while (readl(MDM_STATUS) != PCOM_READY) { - /* XXX check for A9 reset */ - } - - writel(cmd, APP_COMMAND); - if (data1) - writel(*data1, APP_DATA1); - if (data2) - writel(*data2, APP_DATA2); - -// dprintf(INFO, "proc_comm tx\n"); - notify_other_proc_comm(); - while (readl(APP_COMMAND) != PCOM_CMD_DONE) { - /* XXX check for A9 reset */ - } - - status = readl(APP_STATUS); -// dprintf(INFO, "proc_comm status %d\n", status); - - if (status != PCOM_CMD_FAIL) { - if (data1) - *data1 = readl(APP_DATA1); - if (data2) - *data2 = readl(APP_DATA2); - ret = 0; - } - - return ret; -} - -static int clock_enable(unsigned id) -{ - return msm_proc_comm(PCOM_CLKCTL_RPC_ENABLE, &id, 0); -} - -static int clock_disable(unsigned id) -{ - return msm_proc_comm(PCOM_CLKCTL_RPC_DISABLE, &id, 0); -} - -static int clock_set_rate(unsigned id, unsigned rate) -{ - return msm_proc_comm(PCOM_CLKCTL_RPC_SET_RATE, &id, &rate); -} - -static int clock_get_rate(unsigned id) -{ - if (msm_proc_comm(PCOM_CLKCTL_RPC_RATE, &id, 0)) { - return -1; - } else { - return (int) id; - } -} - -void usb_clock_init() -{ - clock_enable(USB_HS_PCLK); - clock_enable(USB_HS_CLK); - clock_enable(P_USB_HS_CORE_CLK); -} - -void lcdc_clock_init(unsigned rate) -{ - clock_set_rate(MDP_LCDC_PCLK_CLK, rate); - clock_enable(MDP_LCDC_PCLK_CLK); - clock_enable(MDP_LCDC_PAD_PCLK_CLK); -} - -void mdp_clock_init (unsigned rate) -{ - clock_set_rate(MDP_CLK, rate); - clock_enable(MDP_CLK); - clock_enable(MDP_P_CLK); -} - -void uart3_clock_init(void) -{ - clock_enable(UART3_CLK); - clock_set_rate(UART3_CLK, 19200000 / 4); -} - -void uart2_clock_init(void) -{ - clock_enable(UART2_CLK); - clock_set_rate(UART2_CLK, 19200000); -} - -void mddi_clock_init(unsigned num, unsigned rate) -{ - unsigned clock_id; - - if (num == 0) - clock_id = PMDH_CLK; - else - clock_id = EMDH_CLK; - - clock_enable(clock_id); - clock_set_rate(clock_id, rate); -#ifdef PLATFORM_MSM7X30 - clock_enable (PMDH_P_CLK); -#endif -} - -void reboot(unsigned reboot_reason) -{ - msm_proc_comm(PCOM_RESET_CHIP, &reboot_reason, 0); - for (;;) ; -} - -/* Apps processor calls this API to tell modem processor that a PC USB - * is connected return true if the USB HOST PC charger charging is - * supported */ -int charger_usb_is_pc_connected(void) -{ - unsigned charging_supported = 0; - unsigned m = 0; - msm_proc_comm(PCOM_CHG_USB_IS_PC_CONNECTED, &charging_supported, &m); - return charging_supported; -} - -/* Apps processor calls this API to tell modem processor that a USB Wall - * charger is connected returns true if the USB WALL charger charging is - * supported */ -int charger_usb_is_charger_connected(void) -{ - unsigned charging_supported = 0; - unsigned m = 0; - msm_proc_comm(PCOM_CHG_USB_IS_CHARGER_CONNECTED, &charging_supported, &m); - return charging_supported; -} - -/* Apps processor calls this API to tell modem processor that a USB cable is - * disconnected return true is charging is supported in the system */ -int charger_usb_disconnected(void) -{ - unsigned charging_supported = 0; - unsigned m = 0; - msm_proc_comm(PCOM_CHG_USB_IS_DISCONNECTED, &charging_supported, &m); - return charging_supported; -} - -/* current parameter passed is the amount of current that the charger needs - * to draw from USB */ -int charger_usb_i(unsigned current) -{ - unsigned charging_supported = 0; - msm_proc_comm(PCOM_CHG_USB_I_AVAILABLE, ¤t, &charging_supported); - return charging_supported; -} - -int mmc_clock_enable_disable (unsigned id, unsigned enable) -{ - if(enable) - { - return clock_enable(id); //Enable mmc clock rate - } - else - { - return clock_disable(id); //Disable mmc clock rate - } -} - -int mmc_clock_set_rate(unsigned id, unsigned rate) -{ - return clock_set_rate(id, rate); //Set mmc clock rate -} - -int mmc_clock_get_rate(unsigned id) -{ - return clock_get_rate(id); //Get mmc clock rate -} - -int gpio_tlmm_config(unsigned config, unsigned disable) -{ - return msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, &disable); -} - -int vreg_set_level(unsigned id, unsigned mv) -{ - return msm_proc_comm(PCOM_VREG_SET_LEVEL, &id, &mv); -} - -int vreg_enable(unsigned id) -{ - int enable = 1; - return msm_proc_comm(PCOM_VREG_SWITCH, &id, &enable); - -} - -int vreg_disable(unsigned id) -{ - int enable = 0; - return msm_proc_comm(PCOM_VREG_SWITCH, &id, &enable); -} -#endif diff --git a/lk/platform/msm_shared/rules.mk b/lk/platform/msm_shared/rules.mk deleted file mode 100644 index 6b895da..0000000 --- a/lk/platform/msm_shared/rules.mk +++ /dev/null @@ -1,31 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -INCLUDES += \ - -I$(LOCAL_DIR)/include - -DEFINES += $(TARGET_XRES) -DEFINES += $(TARGET_YRES) - -OBJS += \ - $(LOCAL_DIR)/timer.o \ - $(LOCAL_DIR)/proc_comm.o \ - $(LOCAL_DIR)/debug.o \ - $(LOCAL_DIR)/smem.o \ - $(LOCAL_DIR)/smem_ptable.o \ - $(LOCAL_DIR)/hsusb.o \ - $(LOCAL_DIR)/jtag_hook.o \ - $(LOCAL_DIR)/jtag.o \ - $(LOCAL_DIR)/lcdc.o \ - $(LOCAL_DIR)/mddi.o \ - $(LOCAL_DIR)/mmc.o - -ifeq ($(PLATFORM),msm8x60) - OBJS += $(LOCAL_DIR)/mipi_dsi.o \ - $(LOCAL_DIR)/i2c_qup.o -endif - -ifeq ($(PLATFORM),msm8x60) - OBJS += $(LOCAL_DIR)/uart_dm.o -else - OBJS += $(LOCAL_DIR)/uart.o -endif diff --git a/lk/platform/msm_shared/smem.c b/lk/platform/msm_shared/smem.c deleted file mode 100644 index 63df5c3..0000000 --- a/lk/platform/msm_shared/smem.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2009, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "smem.h" - -static struct smem *smem = (void *)(MSM_SHARED_BASE); - -/* buf MUST be 4byte aligned, and len MUST be a multiple of 8. */ -unsigned smem_read_alloc_entry(smem_mem_type_t type, void *buf, int len) -{ - struct smem_alloc_info *ainfo; - unsigned *dest = buf; - unsigned src; - unsigned size; - - if (((len & 0x3) != 0) || (((unsigned)buf & 0x3) != 0)) - return 1; - - if (type < SMEM_FIRST_VALID_TYPE || type > SMEM_LAST_VALID_TYPE) - return 1; - - /* TODO: Use smem spinlocks */ - ainfo = &smem->alloc_info[type]; - if (readl(&ainfo->allocated) == 0) - return 1; - - size = readl(&ainfo->size); - - if (size != (unsigned)((len + 7) & ~0x00000007)) - return 1; - - src = MSM_SHARED_BASE + readl(&ainfo->offset); - for (; len > 0; src += 4, len -= 4) - *(dest++) = readl(src); - - return 0; -} - -unsigned smem_read_alloc_entry_offset(smem_mem_type_t type, void *buf, int len, int offset) -{ - struct smem_alloc_info *ainfo; - unsigned *dest = buf; - unsigned src; - unsigned size = len; - - if (((len & 0x3) != 0) || (((unsigned)buf & 0x3) != 0)) - return 1; - - if (type < SMEM_FIRST_VALID_TYPE || type > SMEM_LAST_VALID_TYPE) - return 1; - - ainfo = &smem->alloc_info[type]; - if (readl(&ainfo->allocated) == 0) - return 1; - - src = MSM_SHARED_BASE + readl(&ainfo->offset) + offset; - for (; size > 0; src += 4, size -= 4) - *(dest++) = readl(src); - - return 0; -} diff --git a/lk/platform/msm_shared/smem.h b/lk/platform/msm_shared/smem.h deleted file mode 100644 index 7e78293..0000000 --- a/lk/platform/msm_shared/smem.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (c) 2009, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __PLATFORM_MSM_SHARED_SMEM_H -#define __PLATFORM_MSM_SHARED_SMEM_H - -#include - -struct smem_proc_comm -{ - unsigned command; - unsigned status; - unsigned data1; - unsigned data2; -}; - -struct smem_heap_info -{ - unsigned initialized; - unsigned free_offset; - unsigned heap_remaining; - unsigned reserved; -}; - -struct smem_alloc_info -{ - unsigned allocated; - unsigned offset; - unsigned size; - unsigned reserved; -}; - -struct smem { - struct smem_proc_comm proc_comm[4]; - unsigned version_info[32]; - struct smem_heap_info heap_info; - struct smem_alloc_info alloc_info[128]; -}; - -struct smem_board_info_v3 -{ - unsigned format; - unsigned msm_id; - unsigned msm_version; - char build_id[32]; - unsigned raw_msm_id; - unsigned raw_msm_version; - unsigned hw_platform; -}; - -struct smem_board_info_v4 -{ - struct smem_board_info_v3 board_info_v3; - unsigned platform_version; - unsigned buffer_align; //Need for 8 bytes alignment while reading from shared memory. -}; - -struct smem_board_info_v5 -{ - struct smem_board_info_v3 board_info_v3; - unsigned platform_version; - unsigned fused_chip; -}; - -/* chip information */ -enum { - UNKNOWN = 0, - MDM9200 = 57, - MDM9600 = 58, -}; - -enum platform -{ - HW_PLATFORM_UNKNOWN = 0, - HW_PLATFORM_SURF = 1, - HW_PLATFORM_FFA = 2, - HW_PLATFORM_FLUID = 3, - HW_PLATFORM_SVLTE = 4, - HW_PLATFORM_32BITS = 0x7FFFFFFF -}; - - -typedef enum { - SMEM_SPINLOCK_ARRAY = 7, - - SMEM_AARM_PARTITION_TABLE = 9, - - SMEM_APPS_BOOT_MODE = 106, - - SMEM_BOARD_INFO_LOCATION = 137, - - SMEM_USABLE_RAM_PARTITION_TABLE = 402, - - SMEM_POWER_ON_STATUS_INFO = 403, - - SMEM_FIRST_VALID_TYPE = SMEM_SPINLOCK_ARRAY, - SMEM_LAST_VALID_TYPE = SMEM_POWER_ON_STATUS_INFO, -} smem_mem_type_t; - -/* Note: buf MUST be 4byte aligned, and max_len MUST be a multiple of 4. */ -unsigned smem_read_alloc_entry(smem_mem_type_t type, void *buf, int max_len); - -/* SMEM RAM Partition */ -enum { - DEFAULT_ATTRB = ~0x0, - READ_ONLY = 0x0, - READWRITE, -}; - -enum { - DEFAULT_CATEGORY = ~0x0, - SMI = 0x0, - EBI1, - EBI2, - QDSP6, - IRAM, - IMEM, - EBI0_CS0, - EBI0_CS1, - EBI1_CS0, - EBI1_CS1, -}; - -enum { - DEFAULT_DOMAIN = 0x0, - APPS_DOMAIN, - MODEM_DOMAIN, - SHARED_DOMAIN, -}; - -enum { - SYS_MEMORY = 1, /* system memory*/ - BOOT_REGION_MEMORY1, /* boot loader memory 1*/ - BOOT_REGION_MEMORY2, /* boot loader memory 2,reserved*/ - APPSBL_MEMORY, /* apps boot loader memory*/ - APPS_MEMORY, /* apps usage memory*/ -}; - -struct smem_ram_ptn { - char name[16]; - unsigned start; - unsigned size; - - /* RAM Partition attribute: READ_ONLY, READWRITE etc. */ - unsigned attr; - - /* RAM Partition category: EBI0, EBI1, IRAM, IMEM */ - unsigned category; - - /* RAM Partition domain: APPS, MODEM, APPS & MODEM (SHARED) etc. */ - unsigned domain; - - /* RAM Partition type: system, bootloader, appsboot, apps etc. */ - unsigned type; - - /* reserved for future expansion without changing version number */ - unsigned reserved2, reserved3, reserved4, reserved5; -} __attribute__ ((__packed__)); - -struct smem_ram_ptable { -#define _SMEM_RAM_PTABLE_MAGIC_1 0x9DA5E0A8 -#define _SMEM_RAM_PTABLE_MAGIC_2 0xAF9EC4E2 - unsigned magic[2]; - unsigned version; - unsigned reserved1; - unsigned len; - struct smem_ram_ptn parts[32]; - unsigned buf; -} __attribute__ ((__packed__)); - -/* Power on reason/status info */ -#define PWR_ON_EVENT_USB_CHG 0x20 - -#endif /* __PLATFORM_MSM_SHARED_SMEM_H */ diff --git a/lk/platform/msm_shared/smem_ptable.c b/lk/platform/msm_shared/smem_ptable.c deleted file mode 100644 index 60d0e26..0000000 --- a/lk/platform/msm_shared/smem_ptable.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2009, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include - -#include "smem.h" - -struct smem_ptn { - char name[16]; - unsigned start; - unsigned size; - unsigned attr; -} __attribute__ ((__packed__)); - -struct smem_ptable { -#define _SMEM_PTABLE_MAGIC_1 0x55ee73aa -#define _SMEM_PTABLE_MAGIC_2 0xe35ebddb - unsigned magic[2]; - unsigned version; - unsigned len; - struct smem_ptn parts[16]; -} __attribute__ ((__packed__)); - -/* partition table from SMEM */ -static struct smem_ptable smem_ptable; -static unsigned smem_apps_flash_start; - -static void dump_smem_ptable(void) -{ - int i; - - for (i = 0; i < 16; i++) { - struct smem_ptn *p = &smem_ptable.parts[i]; - if (p->name[0] == '\0') - continue; - dprintf(SPEW, "%d: %s offs=0x%08x size=0x%08x attr: 0x%08x\n", - i, p->name, p->start, p->size, p->attr); - } -} - -void smem_ptable_init(void) -{ - unsigned i; - - smem_apps_flash_start = 0xffffffff; - - i = smem_read_alloc_entry(SMEM_AARM_PARTITION_TABLE, - &smem_ptable, sizeof(smem_ptable)); - if (i != 0) - return; - - if (smem_ptable.magic[0] != _SMEM_PTABLE_MAGIC_1 || - smem_ptable.magic[1] != _SMEM_PTABLE_MAGIC_2) - return; - - dump_smem_ptable(); - dprintf(INFO, "smem ptable found: ver: %d len: %d\n", - smem_ptable.version, smem_ptable.len); - - for (i = 0; i < smem_ptable.len; i++) { - if (!strcmp(smem_ptable.parts[i].name, "0:APPS")) - break; - } - if (i == smem_ptable.len) - return; - - smem_apps_flash_start = smem_ptable.parts[i].start; -} - -unsigned smem_get_apps_flash_start(void) -{ - return smem_apps_flash_start; -} - -void smem_add_modem_partitions(struct ptable *flash_ptable) -{ - int i; - - if (smem_ptable.magic[0] != _SMEM_PTABLE_MAGIC_1 || - smem_ptable.magic[1] != _SMEM_PTABLE_MAGIC_2) - return; - - for (i = 0; i < 16; i++) - { - char * token; - char * pname = NULL; - struct smem_ptn *p = &smem_ptable.parts[i]; - if (p->name[0] == '\0') - continue; - token = strtok(p->name, ":"); - while (token) - { - pname = token; - token = strtok (NULL, ":"); - } - if(pname) - { - ptable_add(flash_ptable, pname, p->start, - p->size, 0, TYPE_MODEM_PARTITION, PERM_WRITEABLE); - } - } -} - -/* RAM Partition table from SMEM */ -int smem_ram_ptable_init(struct smem_ram_ptable *smem_ram_ptable) -{ - unsigned i; - - i = smem_read_alloc_entry(SMEM_USABLE_RAM_PARTITION_TABLE, - smem_ram_ptable, sizeof(struct smem_ram_ptable)); - if (i != 0) - return 0; - - if (smem_ram_ptable->magic[0] != _SMEM_RAM_PTABLE_MAGIC_1 || - smem_ram_ptable->magic[1] != _SMEM_RAM_PTABLE_MAGIC_2) - return 0; - - dprintf(INFO, "smem ram ptable found: ver: %d len: %d\n", - smem_ram_ptable->version, smem_ram_ptable->len); - - return 1; -} - - diff --git a/lk/platform/msm_shared/timer.c b/lk/platform/msm_shared/timer.c deleted file mode 100644 index c264bc1..0000000 --- a/lk/platform/msm_shared/timer.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include - -#include -#include -#include -#include -#include - -#if PLATFORM_MSM7X30 || PLATFORM_MSM8X60 - -#define MSM_GPT_BASE (MSM_TMR_BASE + 0x4) -#define MSM_DGT_BASE (MSM_TMR_BASE + 0x24) -#define GPT_REG(off) (MSM_GPT_BASE + (off)) -#define DGT_REG(off) (MSM_DGT_BASE + (off)) -#define SPSS_TIMER_STATUS (MSM_TMR_BASE + 0x88) - -#define GPT_MATCH_VAL GPT_REG(0x0000) -#define GPT_COUNT_VAL GPT_REG(0x0004) -#define GPT_ENABLE GPT_REG(0x0008) -#define GPT_ENABLE_CLR_ON_MATCH_EN 2 -#define GPT_ENABLE_EN 1 -#define GPT_CLEAR GPT_REG(0x000C) - -#define DGT_MATCH_VAL DGT_REG(0x0000) -#define DGT_COUNT_VAL DGT_REG(0x0004) -#define DGT_ENABLE DGT_REG(0x0008) -#define DGT_ENABLE_CLR_ON_MATCH_EN 2 -#define DGT_ENABLE_EN 1 -#define DGT_CLEAR DGT_REG(0x000C) -#define DGT_CLK_CTL DGT_REG(0x0010) - -#define HW_REVISION_NUMBER 0xABC00270 - - -#else -#define GPT_REG(off) (MSM_GPT_BASE + (off)) - -#define GPT_MATCH_VAL GPT_REG(0x0000) -#define GPT_COUNT_VAL GPT_REG(0x0004) -#define GPT_ENABLE GPT_REG(0x0008) -#define GPT_ENABLE_CLR_ON_MATCH_EN 2 -#define GPT_ENABLE_EN 1 -#define GPT_CLEAR GPT_REG(0x000C) - -#define DGT_MATCH_VAL GPT_REG(0x0010) -#define DGT_COUNT_VAL GPT_REG(0x0014) -#define DGT_ENABLE GPT_REG(0x0018) -#define DGT_ENABLE_CLR_ON_MATCH_EN 2 -#define DGT_ENABLE_EN 1 -#define DGT_CLEAR GPT_REG(0x001C) - -#define SPSS_TIMER_STATUS GPT_REG(0x0034) -#endif - -#if defined PLATFORM_QSD8K -#define DGT_HZ 4800000 /* Uses TCXO/4 (19.2 MHz / 4) */ -#elif defined PLATFORM_MSM7X30 -#if _EMMC_BOOT -#define DGT_HZ 19200000 /* Uses TCXO (19.2 MHz) */ -#else -#define DGT_HZ 6144000 /* Uses LPXO/4 (24.576 MHz / 4) */ -#endif -#elif defined PLATFORM_MSM8X60 -#define DGT_HZ 6750000 /* Uses LPXO/4 (27.0 MHz / 4) */ -#else -#define DGT_HZ 19200000 /* Uses TCXO (19.2 MHz) */ -#endif - - -static platform_timer_callback timer_callback; -static void *timer_arg; -static time_t timer_interval; - -static volatile uint32_t ticks; - -static enum handler_return timer_irq(void *arg) -{ - ticks += timer_interval; - return timer_callback(timer_arg, ticks); -} - -status_t platform_set_periodic_timer( - platform_timer_callback callback, - void *arg, time_t interval) -{ -#ifdef PLATFORM_MSM7X30 - unsigned val = 0; - //Check for the hardware revision - val = readl(HW_REVISION_NUMBER); - val = (val >> 28) & 0x0F; - if(val >= 1) - writel(1, DGT_CLK_CTL); -#endif -#ifdef PLATFORM_MSM8X60 - writel(3, DGT_CLK_CTL); -#endif - enter_critical_section(); - - timer_callback = callback; - timer_arg = arg; - timer_interval = interval; - - writel(timer_interval * (DGT_HZ / 1000), DGT_MATCH_VAL); - writel(0, DGT_CLEAR); - writel(DGT_ENABLE_EN | DGT_ENABLE_CLR_ON_MATCH_EN, DGT_ENABLE); - - register_int_handler(INT_DEBUG_TIMER_EXP, timer_irq, 0); - unmask_interrupt(INT_DEBUG_TIMER_EXP); - - exit_critical_section(); - return 0; -} - - -time_t current_time(void) -{ - return ticks; -} - -void platform_init_timer(void) -{ - writel(0, DGT_ENABLE); -} - -static void wait_for_timer_op(void) -{ - //cedesmith: this will hang on htcleo so removed PLATFORM_QSD8K -#if PLATFORM_MSM7X30 || PLATFORM_MSM8X60 - while(readl(SPSS_TIMER_STATUS)) ; -#endif -} - -void platform_uninit_timer(void) -{ - writel(0, DGT_ENABLE); - wait_for_timer_op(); - writel(0, DGT_CLEAR); - wait_for_timer_op(); -} - -void mdelay(unsigned msecs) -{ - msecs *= 33; - - writel(0, GPT_CLEAR); - writel(0, GPT_ENABLE); - while(readl(GPT_COUNT_VAL) != 0) ; - - writel(GPT_ENABLE_EN, GPT_ENABLE); - while(readl(GPT_COUNT_VAL) < msecs) ; - - writel(0, GPT_ENABLE); - writel(0, GPT_CLEAR); -} - -void udelay(unsigned usecs) -{ - usecs = (usecs * 33 + 1000 - 33) / 1000; - - writel(0, GPT_CLEAR); - writel(0, GPT_ENABLE); - while(readl(GPT_COUNT_VAL) != 0); - - writel(GPT_ENABLE_EN, GPT_ENABLE); - while(readl(GPT_COUNT_VAL) < usecs); - - writel(0, GPT_ENABLE); - writel(0, GPT_CLEAR); -} diff --git a/lk/platform/msm_shared/uart.c b/lk/platform/msm_shared/uart.c deleted file mode 100644 index 7f5c7e2..0000000 --- a/lk/platform/msm_shared/uart.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include -#include -#include - -#define UART_MR1 0x0000 - -#define UART_MR1_AUTO_RFR_LEVEL0(n) (((n) & 0x3f) << 8) -#define UART_MR1_RX_RDY_CTL (1 << 7) -#define UART_MR1_CTS_CTL (1 << 6) -#define UART_MR1_AUTO_RFR_LEVEL1(n) ((n) & 0x3f) - -#define UART_MR2 0x0004 -#define UART_MR2_ERROR_MODE (1 << 6) -#define UART_MR2_BITS_PER_CHAR_5 (0 << 4) -#define UART_MR2_BITS_PER_CHAR_6 (1 << 4) -#define UART_MR2_BITS_PER_CHAR_7 (2 << 4) -#define UART_MR2_BITS_PER_CHAR_8 (3 << 4) -#define UART_MR2_STOP_BIT_LEN_0563 (0 << 2) -#define UART_MR2_STOP_BIT_LEN_1000 (1 << 2) -#define UART_MR2_STOP_BIT_LEN_1563 (2 << 2) -#define UART_MR2_STOP_BIT_LEN_2000 (3 << 2) -#define UART_MR2_PARITY_MODE_NONE (0) -#define UART_MR2_PARITY_MODE_ODD (1) -#define UART_MR2_PARITY_MODE_EVEN (2) -#define UART_MR2_PARITY_MODE_SPACE (3) - -#define UART_CSR 0x0008 -#define UART_CSR_115200 0xFF -#define UART_CSR_57600 0xEE -#define UART_CSR_38400 0xDD -#define UART_CSR_19200 0xBB - -#define UART_TF 0x000C - -#define UART_CR 0x0010 -#define UART_CR_CMD_NULL (0 << 4) -#define UART_CR_CMD_RESET_RX (1 << 4) -#define UART_CR_CMD_RESET_TX (2 << 4) -#define UART_CR_CMD_RESET_ERR (3 << 4) -#define UART_CR_CMD_RESET_BCI (4 << 4) -#define UART_CR_CMD_START_BREAK (5 << 4) -#define UART_CR_CMD_STOP_BREAK (6 << 4) -#define UART_CR_CMD_RESET_CTS_N (7 << 4) -#define UART_CR_CMD_PACKET_MODE (9 << 4) -#define UART_CR_CMD_MODE_RESET (12<< 4) -#define UART_CR_CMD_SET_RFR_N (13<< 4) -#define UART_CR_CMD_RESET_RFR_ND (14<< 4) -#define UART_CR_TX_DISABLE (1 << 3) -#define UART_CR_TX_ENABLE (1 << 3) -#define UART_CR_RX_DISABLE (1 << 3) -#define UART_CR_RX_ENABLE (1 << 3) - -#define UART_IMR 0x0014 -#define UART_IMR_RXLEV (1 << 4) -#define UART_IMR_TXLEV (1 << 0) - -#define UART_IPR 0x0018 -#define UART_TFWR 0x001C -#define UART_RFWR 0x0020 -#define UART_HCR 0x0024 - -#define UART_MREG 0x0028 -#define UART_NREG 0x002C -#define UART_DREG 0x0030 -#define UART_MNDREG 0x0034 -#define UART_IRDA 0x0038 -#define UART_MISR_MODE 0x0040 -#define UART_MISR_RESET 0x0044 -#define UART_MISR_EXPORT 0x0048 -#define UART_MISR_VAL 0x004C -#define UART_TEST_CTRL 0x0050 - -#define UART_SR 0x0008 -#define UART_SR_HUNT_CHAR (1 << 7) -#define UART_SR_RX_BREAK (1 << 6) -#define UART_SR_PAR_FRAME_ERR (1 << 5) -#define UART_SR_OVERRUN (1 << 4) -#define UART_SR_TX_EMPTY (1 << 3) -#define UART_SR_TX_READY (1 << 2) -#define UART_SR_RX_FULL (1 << 1) -#define UART_SR_RX_READY (1 << 0) - -#define UART_RF 0x000C -#define UART_MISR 0x0010 -#define UART_ISR 0x0014 - - -static unsigned uart_ready = 0; -#if PLATFORM_MSM7X30 -static unsigned uart_base = MSM_UART2_BASE; -#else -static unsigned uart_base = MSM_UART3_BASE; -#endif - -#define uwr(v,a) writel(v, uart_base + (a)) -#define urd(a) readl(uart_base + (a)) - -void uart_init(void) -{ - uwr(0x0A, UART_CR); /* disable TX and RX */ - - uwr(0x30, UART_CR); /* reset error status */ - uwr(0x10, UART_CR); /* reset receiver */ - uwr(0x20, UART_CR); /* reset transmitter */ - -#if PLATFORM_QSD8K || PLATFORM_MSM7X30 - /* TCXO */ - uwr(0x06, UART_MREG); - uwr(0xF1, UART_NREG); - uwr(0x0F, UART_DREG); - uwr(0x1A, UART_MNDREG); -#else - /* TCXO/4 */ - uwr(0xC0, UART_MREG); - uwr(0xAF, UART_NREG); - uwr(0x80, UART_DREG); - uwr(0x19, UART_MNDREG); -#endif - - uwr(0x10, UART_CR); /* reset RX */ - uwr(0x20, UART_CR); /* reset TX */ - uwr(0x30, UART_CR); /* reset error status */ - uwr(0x40, UART_CR); /* reset RX break */ - uwr(0x70, UART_CR); /* rest? */ - uwr(0xD0, UART_CR); /* reset */ - - uwr(0x7BF, UART_IPR); /* stale timeout = 630 * bitrate */ - uwr(0, UART_IMR); - uwr(115, UART_RFWR); /* RX watermark = 58 * 2 - 1 */ - uwr(10, UART_TFWR); /* TX watermark */ - - uwr(0, UART_RFWR); - - uwr(UART_CSR_115200, UART_CSR); - uwr(0, UART_IRDA); - uwr(0x1E, UART_HCR); -// uwr(0x7F4, UART_MR1); /* RFS/ CTS/ 500chr RFR */ - uwr(16, UART_MR1); - uwr(0x34, UART_MR2); /* 8N1 */ - - uwr(0x05, UART_CR); /* enable TX & RX */ - - uart_ready = 1; -} - -static int _uart_putc(int port, char c) -{ - if (!uart_ready) - return -1; - while (!(urd(UART_SR) & UART_SR_TX_READY)) ; - uwr(c, UART_TF); - return 0; -} - -int uart_putc (int port, char c) -{ - if(c == '\n') - { - _uart_putc(0, '\r'); - } - _uart_putc(0, c); -} - -int uart_getc(int port, bool wait) -{ - if (!uart_ready) - return -1; - while (!(urd(UART_SR) & UART_SR_RX_READY)) - if (!wait) - return -1; - - return urd(UART_RF); -} - diff --git a/lk/platform/msm_shared/uart_dm.c b/lk/platform/msm_shared/uart_dm.c deleted file mode 100644 index 9e06cd0..0000000 --- a/lk/platform/msm_shared/uart_dm.c +++ /dev/null @@ -1,526 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "uart_dm.h" - - -#ifndef NULL -#define NULL 0 -#endif - -/* Note: - * This is a basic implementation of UART_DM protocol. More focus has been - * given on simplicity than efficiency. Few of the things to be noted are: - * - RX path may not be suitable for multi-threaded scenaraio because of the - * use of static variables. TX path shouldn't have any problem though. If - * multi-threaded support is required, a simple data-structure can - * be maintained for each thread. - * - Right now we are using polling method than interrupt based. - * - We are using legacy UART protocol without Data Mover. - * - Not all interrupts and error events are handled. - * - While waiting Watchdog hasn't been taken into consideration. - */ - - -#define PACK_CHARS_INTO_WORDS(a, cnt, word) { \ - word = 0; \ - for(int j=0; j < (int)cnt; j++) \ - { \ - word |= (a[j] & 0xff) \ - << (j * 8); \ - } \ - } - - -/* Static Function Prototype Declarations */ -static unsigned int msm_boot_uart_config_gpios(void); -static unsigned int msm_boot_uart_dm_config_clock(void); -static unsigned int msm_boot_uart_dm_gsbi_init(void); -static unsigned int msm_boot_uart_replace_lr_with_cr(char* data_in, - int num_of_chars, - char *data_out, - int *num_of_chars_out); -static unsigned int msm_boot_uart_dm_init(void); -static unsigned int msm_boot_uart_dm_read(unsigned int* data, - int wait); -static unsigned int msm_boot_uart_dm_write(char* data, - unsigned int num_of_chars); -static unsigned int msm_boot_uart_dm_init_rx_transfer(void); -static unsigned int msm_boot_uart_dm_reset(void); - - -/* Extern functions */ -void clock_config(unsigned int ns, unsigned int md, - unsigned int ns_addr, unsigned int md_addr); - -void gpio_tlmm_config(uint32_t gpio, uint8_t func, - uint8_t dir, uint8_t pull, - uint8_t drvstr, uint32_t enable ); - -void udelay(unsigned usecs); - - -/* - * Helper function to replace Line Feed char "\n" with - * Carriage Return "\r\n". - * Currently keeping it simple than efficient - */ -static unsigned int msm_boot_uart_replace_lr_with_cr(char* data_in, - int num_of_chars, - char *data_out, - int *num_of_chars_out ) -{ - int i = 0, j = 0; - - if ((data_in == NULL) || (data_out == NULL) || (num_of_chars < 0)) - { - return MSM_BOOT_UART_DM_E_INVAL; - } - - for (i=0, j=0; i < num_of_chars; i++, j++) - { - if ( data_in[i] == '\n' ) - { - data_out[j++] = '\r'; - } - - data_out[j] = data_in[i]; - } - - *num_of_chars_out = j; - - return MSM_BOOT_UART_DM_E_SUCCESS; -} - - -static unsigned int msm_boot_uart_dm_config_gpios(void) -{ - /* GPIO Pin: MSM_BOOT_UART_DM_RX_GPIO (117) - Function: 2 - Direction: IN - Pull: No PULL - Drive Strength: 8 ma - Output Enable: Disable - */ - gpio_tlmm_config(MSM_BOOT_UART_DM_RX_GPIO, 2, GPIO_INPUT, - GPIO_NO_PULL, GPIO_8MA, GPIO_DISABLE); - - /* GPIO Pin: MSM_BOOT_UART_DM_TX_GPIO (118) - Function: 2 - Direction: OUT - Pull: No PULL - Drive Strength: 8 ma - Output Enable: Disable - */ - gpio_tlmm_config(MSM_BOOT_UART_DM_TX_GPIO, 2, GPIO_OUTPUT, - GPIO_NO_PULL, GPIO_8MA, GPIO_DISABLE); - - return MSM_BOOT_UART_DM_E_SUCCESS; -} - - - -static unsigned int msm_boot_uart_dm_config_clock(void) -{ - unsigned int curr_value = 0; - - /* Vote for PLL8 to be enabled */ - curr_value = readl(MSM_BOOT_PLL_ENABLE_SC0); - curr_value |= (1 << 8); - writel(curr_value, MSM_BOOT_PLL_ENABLE_SC0); - - /* Proceed only after PLL is enabled */ - while (!(readl(MSM_BOOT_PLL8_STATUS) & (1<<16))); - - /* PLL8 is enabled. Enable gsbi_uart_clk */ - - /* GSBI clock frequencies for UART protocol - * Operating mode gsbi_uart_clk - * UART up to 115.2 Kbps 1.8432 MHz - * UART up to 460.8 Kbps 7.3728 MHz - * UART up to 4 Mbit/s 64 MHz - * - - * Choosing lowest supported value - * Rate (KHz) NS MD - * 3686400 0xFD940043 0x0006FD8E - */ - - clock_config(0xFD940043, 0x0006FD8E, - MSM_BOOT_UART_DM_APPS_NS, - MSM_BOOT_UART_DM_APPS_MD); - - /* Enable gsbi_pclk */ - writel(0x10, MSM_BOOT_UART_DM_GSBI_HCLK_CTL); - - return MSM_BOOT_UART_DM_E_SUCCESS; -} - - -/* - * Initialize and configure GSBI for operation - */ -static unsigned int msm_boot_uart_dm_gsbi_init(void) -{ - /* Configure the clock block */ - msm_boot_uart_dm_config_clock(); - - /* Configure TLMM/GPIO to provide connectivity between GSBI - product ports and chip pads */ - msm_boot_uart_dm_config_gpios(); - - - /* Configure Data Mover for GSBI operation. - * Currently not supported. */ - - /* Configure GSBI for UART_DM protocol. - * I2C on 2 ports, UART (without HS flow control) on the other 2. */ - writel(0x60, MSM_BOOT_GSBI_CTRL_REG); - - return MSM_BOOT_UART_DM_E_SUCCESS; -} - -/* - * Reset the UART - */ -static unsigned int msm_boot_uart_dm_reset(void) -{ - writel(MSM_BOOT_UART_DM_CMD_RESET_RX, MSM_BOOT_UART_DM_CR); - writel(MSM_BOOT_UART_DM_CMD_RESET_TX, MSM_BOOT_UART_DM_CR); - writel(MSM_BOOT_UART_DM_CMD_RESET_ERR_STAT, MSM_BOOT_UART_DM_CR); - writel(MSM_BOOT_UART_DM_CMD_RES_TX_ERR, MSM_BOOT_UART_DM_CR); - writel(MSM_BOOT_UART_DM_CMD_RES_STALE_INT, MSM_BOOT_UART_DM_CR); - - return MSM_BOOT_UART_DM_E_SUCCESS; -} - - -/* - * Initialize UART_DM - configure clock and required registers. - */ -static unsigned int msm_boot_uart_dm_init(void) -{ - /* Configure GSB12 for uart dm */ - msm_boot_uart_dm_gsbi_init(); - - - /* Configure clock selection register for tx and rx rates. - * Selecting 115.2k for both RX and TX */ - writel(MSM_BOOT_UART_DM_RX_TX_BIT_RATE, MSM_BOOT_UART_DM_CSR); - - /* Configure UART mode registers MR1 and MR2 */ - /* Hardware flow control isn't supported */ - writel(0x0, MSM_BOOT_UART_DM_MR1); - - /* 8-N-1 configuration: 8 data bits - No parity - 1 stop bit */ - writel(MSM_BOOT_UART_DM_8_N_1_MODE, MSM_BOOT_UART_DM_MR2); - - /* Configure Interrupt Mask register IMR */ - writel(MSM_BOOT_UART_DM_IMR_ENABLED, MSM_BOOT_UART_DM_IMR); - - /* Configure Tx and Rx watermarks configuration registers */ - /* TX watermark value is set to 0 - interrupt is generated when - * FIFO level is less than or equal to 0 */ - writel(MSM_BOOT_UART_DM_TFW_VALUE, MSM_BOOT_UART_DM_TFWR); - - /* RX watermark value*/ - writel(MSM_BOOT_UART_DM_RFW_VALUE, MSM_BOOT_UART_DM_RFWR); - - /* Configure Interrupt Programming Register*/ - /* Set initial Stale timeout value*/ - writel(MSM_BOOT_UART_DM_STALE_TIMEOUT_LSB, MSM_BOOT_UART_DM_IPR); - - /* Configure IRDA if required */ - /* Disabling IRDA mode */ - writel(0x0, MSM_BOOT_UART_DM_IRDA); - - /* Configure and enable sim interface if required */ - - /* Configure hunt character value in HCR register */ - /* Keep it in reset state */ - writel(0x0, MSM_BOOT_UART_DM_HCR); - - /* Configure Rx FIFO base address */ - /* Both TX/RX shares same SRAM and default is half-n-half. - * Sticking with default value now. - * As such RAM size is (2^RAM_ADDR_WIDTH, 32-bit entries). - * We have found RAM_ADDR_WIDTH = 0x7f */ - - /* Issue soft reset command */ - msm_boot_uart_dm_reset(); - - /* Enable/Disable Rx/Tx DM interfaces */ - /* Data Mover not currently utilized. */ - writel(0x0, MSM_BOOT_UART_DM_DMEN); - - - /* Enable transmitter and receiver */ - writel(MSM_BOOT_UART_DM_CR_RX_ENABLE, MSM_BOOT_UART_DM_CR); - writel(MSM_BOOT_UART_DM_CR_TX_ENABLE, MSM_BOOT_UART_DM_CR); - - /* Initialize Receive Path */ - msm_boot_uart_dm_init_rx_transfer(); - - return MSM_BOOT_UART_DM_E_SUCCESS; -} - - -/* - * Initialize Receive Path - */ -static unsigned int msm_boot_uart_dm_init_rx_transfer(void) -{ - writel(MSM_BOOT_UART_DM_GCMD_DIS_STALE_EVT, MSM_BOOT_UART_DM_CR); - writel(MSM_BOOT_UART_DM_CMD_RES_STALE_INT, MSM_BOOT_UART_DM_CR); - writel(MSM_BOOT_UART_DM_DMRX_DEF_VALUE, MSM_BOOT_UART_DM_DMRX); - writel(MSM_BOOT_UART_DM_GCMD_ENA_STALE_EVT, MSM_BOOT_UART_DM_CR); - - return MSM_BOOT_UART_DM_E_SUCCESS; -} - -/* - * UART Receive operation - * Reads a word from the RX FIFO. - */ -static unsigned int msm_boot_uart_dm_read(unsigned int* data, int wait) -{ - static int rx_last_snap_count = 0; - static int rx_chars_read_since_last_xfer = 0; - - if (data == NULL) - { - return MSM_BOOT_UART_DM_E_INVAL; - } - - - - /* We will be polling RXRDY status bit */ - while (!(readl(MSM_BOOT_UART_DM_SR) & MSM_BOOT_UART_DM_SR_RXRDY)) - { - /* if this is not a blocking call, we'll just return */ - if (!wait) - { - return MSM_BOOT_UART_DM_E_RX_NOT_READY; - } - } - - /* Check for Overrun error. We'll just reset Error Status */ - if (readl(MSM_BOOT_UART_DM_SR) & MSM_BOOT_UART_DM_SR_UART_OVERRUN) - { - writel(MSM_BOOT_UART_DM_CMD_RESET_ERR_STAT, MSM_BOOT_UART_DM_CR); - } - - /* RX FIFO is ready; read a word. */ - *data = readl(MSM_BOOT_UART_DM_RF(0)); - - /* increment the total count of chars we've read so far */ - rx_chars_read_since_last_xfer += 4; - - /* Rx transfer ends when one of the conditions is met: - * - The number of characters received since the end of the previous xfer - * equals the value written to DMRX at Transfer Initialization - * - A stale event occurred - */ - - /* If RX transfer has not ended yet */ - if (rx_last_snap_count == 0) - { - /* Check if we've received stale event */ - if (readl(MSM_BOOT_UART_DM_MISR) & MSM_BOOT_UART_DM_RXSTALE) - { - /* Send command to reset stale interrupt */ - writel(MSM_BOOT_UART_DM_CMD_RES_STALE_INT, MSM_BOOT_UART_DM_CR); - } - - /* Check if we haven't read more than DMRX value */ - else if ((unsigned int)rx_chars_read_since_last_xfer < - readl(MSM_BOOT_UART_DM_DMRX)) - { - /* We can still continue reading before initializing RX transfer */ - return MSM_BOOT_UART_DM_E_SUCCESS; - } - - /* If we've reached here it means RX xfer end conditions been met */ - - /* Read UART_DM_RX_TOTAL_SNAP register to know how many valid chars - * we've read so far since last transfer */ - rx_last_snap_count = readl(MSM_BOOT_UART_DM_RX_TOTAL_SNAP); - - } - - /* If there are still data left in FIFO we'll read them before - * initializing RX Transfer again */ - if ((rx_last_snap_count - rx_chars_read_since_last_xfer) >= 0 ) - { - return MSM_BOOT_UART_DM_E_SUCCESS; - } - - msm_boot_uart_dm_init_rx_transfer(); - rx_last_snap_count = 0; - rx_chars_read_since_last_xfer = 0; - - return MSM_BOOT_UART_DM_E_SUCCESS; -} - - -/* - * UART transmit operation - */ -static unsigned int msm_boot_uart_dm_write(char* data, - unsigned int num_of_chars) -{ - unsigned int tx_word_count = 0; - unsigned int tx_char_left = 0, tx_char = 0; - unsigned int tx_word = 0; - int i = 0; - char* tx_data = NULL; - char new_data[1024]; - - if ((data == NULL) || (num_of_chars <= 0)) - { - return MSM_BOOT_UART_DM_E_INVAL; - } - - /* Replace line-feed (/n) with carriage-return + line-feed (/r/n) */ - - msm_boot_uart_replace_lr_with_cr(data, num_of_chars, new_data, &i); - - tx_data = new_data; - num_of_chars = i; - - /* Write to NO_CHARS_FOR_TX register number of characters - * to be transmitted. However, before writing TX_FIFO must - * be empty as indicated by TX_READY interrupt in IMR register - */ - - /* Check if transmit FIFO is empty. - * If not we'll wait for TX_READY interrupt. */ - if (!(readl(MSM_BOOT_UART_DM_SR) & MSM_BOOT_UART_DM_SR_TXEMT)) - { - while (!(readl(MSM_BOOT_UART_DM_ISR) & MSM_BOOT_UART_DM_TX_READY)) - { - udelay(1); - /* Kick watchdog? */ - } - } - - /* We are here. FIFO is ready to be written. */ - /* Write number of characters to be written */ - writel(num_of_chars, MSM_BOOT_UART_DM_NO_CHARS_FOR_TX); - - /* Clear TX_READY interrupt */ - writel(MSM_BOOT_UART_DM_GCMD_RES_TX_RDY_INT, MSM_BOOT_UART_DM_CR); - - /* We use four-character word FIFO. So we need to divide data into - * four characters and write in UART_DM_TF register */ - tx_word_count = (num_of_chars % 4)? ((num_of_chars / 4) + 1) : - (num_of_chars / 4); - tx_char_left = num_of_chars; - - for (i = 0; i < (int)tx_word_count; i++) - { - tx_char = (tx_char_left < 4)? tx_char_left : 4; - PACK_CHARS_INTO_WORDS(tx_data, tx_char, tx_word); - - /* Wait till TX FIFO has space */ - while (!(readl(MSM_BOOT_UART_DM_SR) & MSM_BOOT_UART_DM_SR_TXRDY)) - { - udelay(1); - } - - /* TX FIFO has space. Write the chars */ - writel(tx_word, MSM_BOOT_UART_DM_TF(0)); - tx_char_left = num_of_chars - (i+1)*4; - tx_data = tx_data + 4; - } - - return MSM_BOOT_UART_DM_E_SUCCESS; -} - - -/* Defining functions that's exposed to outside world and in coformance to - * existing uart implemention. These functions are being called to initialize - * UART and print debug messages in bootloader. */ - -void uart_init(void) -{ - char *data = "Android Bootloader - UART_DM Initialized!!!\n"; - - msm_boot_uart_dm_init(); - msm_boot_uart_dm_write(data, 44); - -} - -/* UART_DM uses four character word FIFO where as UART core - * uses a character FIFO. so it's really inefficient to try - * to write single character. But that's how dprintf has been - * implemented. - */ -int uart_putc(int port, char c) -{ - - msm_boot_uart_dm_write(&c, 1); - - return 0; -} - -/* UART_DM uses four character word FIFO whereas uart_getc - * is supposed to read only one character. So we need to - * read a word and keep track of each character in the word. - */ -int uart_getc(int port, bool wait) -{ - int byte; - static unsigned int word = 0; - - if (!word) - { - /* Read from FIFO only if it's a first read or all the four - * characters out of a word have been read */ - if (msm_boot_uart_dm_read( &word, wait) != MSM_BOOT_UART_DM_E_SUCCESS) - { - return -1; - } - - } - - byte = (int) word & 0xff; - word = word >> 8; - - return byte; -} - diff --git a/lk/platform/qsd8k/acpuclock.c b/lk/platform/qsd8k/acpuclock.c deleted file mode 100644 index d2de674..0000000 --- a/lk/platform/qsd8k/acpuclock.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * Copyright (c) 2009, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#define A11S_CLK_CNTL 0xAC100100 -#define A11S_CLK_SEL 0xAC100104 - -#define SCPLL_CTL 0xA8800004 -#define SCPLL_CTLE 0xA8800010 -#define SCPLL_STAT 0xA8800018 - -void acpu_clock_init(void) -{ - unsigned val; - - /* Init Scorpion PLL */ - writel(0x0, SCPLL_CTL); - writel(0x00400002, SCPLL_CTL); - writel(0x00600004, SCPLL_CTL); - thread_sleep(1); - while(readl(SCPLL_STAT) & 0x2); - writel(0x0, SCPLL_CTL); - - /* Enable pll */ - while(readl(SCPLL_STAT) & 0x1); - val = readl(SCPLL_CTL); - val &= ~(0x7); - val |= 0x2; - writel(val, SCPLL_CTL); - thread_sleep(1); - val = readl(SCPLL_CTL); - val |= 0x7; - writel(val, SCPLL_CTL); - thread_sleep(1); - - /* For Scorpion PLL, must first SHOT to 384MHz then HOP to 768MHz */ - - /* Set pll to 384 MHz */ - while(readl(SCPLL_STAT) & 0x3); - val = readl(SCPLL_CTLE); - val &= ~(0x3F << 3); - val |= (0xA << 3); - val &= ~(0x3 << 0); - val |= (4 << 0); // SHOT method - writel(val, SCPLL_CTLE); - writel(0x00600007, SCPLL_CTL); - thread_sleep(1); - - /* HOP to 768MHz */ - while(readl(SCPLL_STAT) & 0x3); - val = readl(SCPLL_CTLE); - val &= ~(0x3F << 3); - val |= (0x14 << 3); // Use 0x1A instead of 0x14 for 998MHz - val &= ~(0x3 << 0); - val |= (5 << 0); // HOP method - writel(val, SCPLL_CTLE); - writel(0x00600007, SCPLL_CTL); - thread_sleep(1); - - val = readl(A11S_CLK_SEL); - val &= ~(0x3 << 1); - val |= (1 << 1); - writel(val, A11S_CLK_SEL); -} - diff --git a/lk/platform/qsd8k/arch_init.S b/lk/platform/qsd8k/arch_init.S deleted file mode 100644 index 1e93696..0000000 --- a/lk/platform/qsd8k/arch_init.S +++ /dev/null @@ -1,648 +0,0 @@ -/* - * Copyright (c) 2008-2009, Code Aurora Forum. All rights reserved. - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -/* TODO: - * - style cleanup - * - do we need to do *all* of this at boot? - */ - -.text -.code 32 - -#define DSB .byte 0x4f, 0xf0, 0x7f, 0xf5 -#define ISB .byte 0x6f, 0xf0, 0x7f, 0xf5 - -/* - ; LVT Ring Osc counter - ; used to determine sense amp settings - ; Clobbers registers r0, r4, r5, r6, r7, r9, r10, r11 -*/ -.equ CLK_CTL_BASE, 0xA8600000 -.equ A_GLBL_CLK_ENA, 0x0000 -.equ A_PRPH_WEB_NS_REG,0x0080 -.equ A_MSM_CLK_RINGOSC,0x00D0 -.equ A_TCXO_CNT, 0x00D4 -.equ A_TCXO_CNT_DONE, 0x00D8 -.equ A_RINGOSC_CNT, 0x00DC -.equ A_MISC_CLK_CTL, 0x0108 -.equ CLK_TEST, 0xA8600114 -.equ SPSS_CSR_BASE, 0xAC100000 -.equ A_SCRINGOSC, 0x0510 - -//;; Number of TCXO cycles to count ring oscillations -.equ TCXO_CNT_VAL, 0x100 - -//; Raptor addresses -.equ TCSR_SPARE2, 0xA8700060 - - -.globl SET_SA -SET_SA: - //; no stack at this point and any registers we use will be 0'd - //; after we return - LDR r0, =TCSR_SPARE2 - LDR r1, [r0] - LDR r0, = 0x010F - AND r2, r1, r0 //; concerned with bits [8, 3:0] - - //;-------------------------------------------------------------------- - //; Fuse bits used to determine sense amp settings - //;-------------------------------------------------------------------- - - LDR r0, = 0x0105 - AND r4, r2, r0 //; mask off all but L1 ACC2, L1 ACC1 and L1 ACC0 - //;set to default of FC00 - LDR r5, =PVR0F0_6bits //; point to PVR0F0 - LDR r3, =PVR2F0_6bits //; point to PVR2F0 - -ck_0: - //; if L1_[2:0] == 000 then ACC setting = FC00 - LDR r1, = 0x0 - CMP r4, r1 - BNE ck_1 - B WRITE_L1_SA_SETTINGS - -ck_1: - //; if L1_[2:0] == 001 then ACC setting = FC00 - LDR r1, = 0x01 - CMP r4, r1 - BNE ck_2 - B WRITE_L1_SA_SETTINGS - -ck_2: - //; if L1_[2:0] == 010 then ACC setting = 7C00 - LDR r1, = 0x04 - CMP r4, r1 - BNE ck_3 - LDR r5, =PVR0F0_5bits //; point to PVR0F0 - LDR r3, =PVR2F0_5bits //; point to PVR2F0 - B WRITE_L1_SA_SETTINGS - -ck_3: - //; if L1_[2:0] == 011 then ACC setting = FC00 - LDR r1, = 0x05 - CMP r4, r1 - BNE ck_4 - LDR r5, =PVR0F0_6bits //; point to PVR0F0 - LDR r3, =PVR2F0_6bits //; point to PVR2F0 - B WRITE_L1_SA_SETTINGS - -ck_4: - //; if L1_[2:0] == 0100 then ACC setting = 3C00 - LDR r1, = 0x0100 - CMP r4, r1 - BNE ck_5 - LDR r5, =PVR0F0_4bits //; point to PVR0F0 - LDR r3, =PVR2F0_4bits //; point to PVR2F0 - B WRITE_L1_SA_SETTINGS - -ck_5: - //; if L1_[2:0] == 0101 then ACC setting = 0400 - LDR r1, = 0x0101 - CMP r4, r1 - BNE ck_6 - LDR r5, =PVR0F0_1bits //; point to PVR0F0 - LDR r3, =PVR2F0_1bits //; point to PVR2F0 - B WRITE_L1_SA_SETTINGS - -ck_6: - //; if L1_[2:0] == 0110 then ACC setting = 0C00 - LDR r1, = 0x0104 - CMP r4, r1 - BNE ck_7 - LDR r5, =PVR0F0_2bits //; point to PVR0F0 - LDR r3, =PVR2F0_2bits //; point to PVR2F0 - B WRITE_L1_SA_SETTINGS - -ck_7: - //; if L1_[2:0] == 0111 then ACC setting = 1C00 - LDR r1, = 0x0105 - CMP r4, r1 - LDREQ r5, =PVR0F0_3bits //; point to PVR0F0 - LDREQ r3, =PVR2F0_3bits //; point to PVR2F0 - -WRITE_L1_SA_SETTINGS: - - LDR r5, [r5] - LDR r3, [r3] - - //;WCP15_PVR0F0 r5 - MCR p15,0x0,r5,c15,c15,0 //; write R5 to PVR0F0 - - //;WCP15_PVR2F0 r3 - MCR p15,0x2,r3,c15,c15,0 //; write R3 to PVR2F0 - - AND r4, r2, #0x000A //; mask off all but L2 array SA settings - LDR r5, =HVT_010102 //; point to L2VR3F1 setting - //;it gets ovewritten if its one of the other two cases - //; if L2_1 and L2_0 == 0 ACC setting = 010102 - LDR r1, = 0x0000 - CMP r4, r1 - BEQ WRITE_L2_SA_SETTINGS - - //; if L2_1 = 0 & L2_0 = 1 ACC setting = 010102 - LDR R1, = 0x0002 - CMP r4, r1 - BEQ WRITE_L2_SA_SETTINGS - - //; if L2_1 = 1 & L2_0 = 0 ACC setting = 010101 - LDR r5, =HVT_010101 - LDR R1, = 0x0008 - CMP r4, r1 - BEQ WRITE_L2_SA_SETTINGS - - //; else L2_1 = 1 & L2_0 = 1 ACC setting = 212102 - LDR r5, =HVT_212102 - - -WRITE_L2_SA_SETTINGS: - //;WCP15_L2VR3F1 r4 - LDR r5, [r5] - MCR p15,0x3,r5,c15,c15,1 //;write r4 to L2VR3F1 - - LDR r0, =0 //;make sure the registers we touched - LDR r1, =0 //;are cleared when we return - LDR r2, =0 - LDR r3, =0 - LDR r4, =0 - LDR r5, =0 - - //; routine complete - B _cpu_early_init_complete - -//; L1 SA settings according to LVT speed -PVR0F0_0bits: -.word 0x38000000 //; PVR0F0 -PVR2F0_0bits: -.word 0x00000000 //; PVR2F0 0 bits set - -PVR0F0_1bits: -.word 0x38000400 //; PVR0F0 -PVR2F0_1bits: -.word 0x04000000 //; PVR2F0 1 bits set - -PVR0F0_2bits: -.word 0x38000C00 //; PVR0F0 -PVR2F0_2bits: -.word 0x0C000000 //; PVR2F0 2 bits set - -PVR0F0_3bits: -.word 0x38001C00 //; PVR0F0 -PVR2F0_3bits: -.word 0x1C000000 //; PVR2F0 3 bits set - -PVR0F0_4bits: -.word 0x38003C00 //; PVR0F0 -PVR2F0_4bits: -.word 0x3C000000 //; PVR2F0 4 bits set - -PVR0F0_5bits: -.word 0x38007C00 //; PVR0F0 -PVR2F0_5bits: -.word 0x7C000000 //; PVR2F0 5 bits set - -PVR0F0_6bits: -.word 0x3800FC00 //; PVR0F0 -PVR2F0_6bits: -.word 0xFC000000 //; PVR2F0 6 bits set - -//; L2 SA settings according to HVT speed -HVT_212102: -.word 0x00212102 //; L2VR3F1 - -HVT_010102: -.word 0x00010102 //; L2VR3F1 - -HVT_010101: -.word 0x00010101 //; L2VR3F1 - - -.ltorg - - -.globl __cpu_early_init -__cpu_early_init: - //; Zero out r0 for use throughout this code. All other GPRs - //; (r1-r3) are set throughout this code to help establish - //; a consistent startup state for any code that follows. - //; Users should add code at the end of this routine to establish - //; their own stack address (r13), add translation page tables, enable - //; the caches, etc. - MOV r0, #0x0 - - - //; Remove hardcoded cache settings. appsbl_handler.s calls Set_SA - //; API to dynamically configure cache for slow/nominal/fast parts - - //; DCIALL to invalidate L2 cache bank (needs to be run 4 times, once per bank) - //; This must be done early in code (prior to enabling the caches) - MOV r1, #0x2 - MCR p15, 0, r1, c9, c0, 6 //; DCIALL bank D ([15:14] == 2'b00) - ORR r1, r1, #0x00004000 - MCR p15, 0, r1, c9, c0, 6 //; DCIALL bank C ([15:14] == 2'b01) - ADD r1, r1, #0x00004000 - MCR p15, 0, r1, c9, c0, 6 //; DCIALL bank B ([15:14] == 2'b10) - ADD r1, r1, #0x00004000 - MCR p15, 0, r1, c9, c0, 6 //; DCIALL bank A ([15:14] == 2'b11) - - //; Initialize the BPCR - setup Global History Mask (GHRM) to all 1's - //; and have all address bits (AM) participate. - //; Different settings can be used to improve performance - // MOVW r1, #0x01FF -.word 0xe30011ff // hardcoded MOVW instruction due to lack of compiler support - // MOVT r1, #0x01FF -.word 0xe34011ff // hardcoded MOVT instruction due to lack of compiler support - MCR p15, 7, r1, c15, c0, 2 //; WCP15_BPCR - - - //; Initialize all I$ Victim Registers to 0 for startup - MCR p15, 0, r0, c9, c1, 0 //; WCP15_ICVIC0 r0 - MCR p15, 0, r0, c9, c1, 1 //; WCP15_ICVIC1 r0 - MCR p15, 0, r0, c9, c1, 2 //; WCP15_ICVIC2 r0 - MCR p15, 0, r0, c9, c1, 3 //; WCP15_ICVIC3 r0 - MCR p15, 0, r0, c9, c1, 4 //; WCP15_ICVIC4 r0 - MCR p15, 0, r0, c9, c1, 5 //; WCP15_ICVIC5 r0 - MCR p15, 0, r0, c9, c1, 6 //; WCP15_ICVIC5 r0 - MCR p15, 0, r0, c9, c1, 7 //; WCP15_ICVIC7 r0 - - //; Initialize all I$ Locked Victim Registers (Unlocked Floors) to 0 - MCR p15, 1, r0, c9, c1, 0 //; WCP15_ICFLOOR0 r0 - MCR p15, 1, r0, c9, c1, 1 //; WCP15_ICFLOOR1 r0 - MCR p15, 1, r0, c9, c1, 2 //; WCP15_ICFLOOR2 r0 - MCR p15, 1, r0, c9, c1, 3 //; WCP15_ICFLOOR3 r0 - MCR p15, 1, r0, c9, c1, 4 //; WCP15_ICFLOOR4 r0 - MCR p15, 1, r0, c9, c1, 5 //; WCP15_ICFLOOR5 r0 - MCR p15, 1, r0, c9, c1, 6 //; WCP15_ICFLOOR6 r0 - MCR p15, 1, r0, c9, c1, 7 //; WCP15_ICFLOOR7 r0 - - //; Initialize all D$ Victim Registers to 0 - MCR p15, 2, r0, c9, c1, 0 //; WP15_DCVIC0 r0 - MCR p15, 2, r0, c9, c1, 1 //; WP15_DCVIC1 r0 - MCR p15, 2, r0, c9, c1, 2 //; WP15_DCVIC2 r0 - MCR p15, 2, r0, c9, c1, 3 //; WP15_DCVIC3 r0 - MCR p15, 2, r0, c9, c1, 4 //; WP15_DCVIC4 r0 - MCR p15, 2, r0, c9, c1, 5 //; WP15_DCVIC5 r0 - MCR p15, 2, r0, c9, c1, 6 //; WP15_DCVIC6 r0 - MCR p15, 2, r0, c9, c1, 7 //; WP15_DCVIC7 r0 - - //; Initialize all D$ Locked VDCtim Registers (Unlocked Floors) to 0 - MCR p15, 3, r0, c9, c1, 0 //; WCP15_DCFLOOR0 r0 - MCR p15, 3, r0, c9, c1, 1 //; WCP15_DCFLOOR1 r0 - MCR p15, 3, r0, c9, c1, 2 //; WCP15_DCFLOOR2 r0 - MCR p15, 3, r0, c9, c1, 3 //; WCP15_DCFLOOR3 r0 - MCR p15, 3, r0, c9, c1, 4 //; WCP15_DCFLOOR4 r0 - MCR p15, 3, r0, c9, c1, 5 //; WCP15_DCFLOOR5 r0 - MCR p15, 3, r0, c9, c1, 6 //; WCP15_DCFLOOR6 r0 - MCR p15, 3, r0, c9, c1, 7 //; WCP15_DCFLOOR7 r0 - - //; Initialize ASID to zero - MCR p15, 0, r0, c13, c0, 1 //; WCP15_CONTEXTIDR r0 - - //; ICIALL to invalidate entire I-Cache - MCR p15, 0, r0, c7, c5, 0 //; ICIALLU - - //; DCIALL to invalidate entire D-Cache - MCR p15, 0, r0, c9, c0, 6 //; DCIALL r0 - - //; Initialize ADFSR to zero - MCR p15, 0, r0, c5, c1, 0 //; ADFSR r0 - - //; Initialize EFSR to zero - MCR p15, 7, r0, c15, c0, 1 //; EFSR r0 - - //; The VBAR (Vector Base Address Register) should be initialized - //; early in your code. We are setting it to zero - MCR p15, 0, r0, c12, c0, 0 //; WCP15_VBAR r0 - - //; Ensure the MCR's above have completed their operation before continuing - DSB - ISB - - //;------------------------------------------------------------------- - //; There are a number of registers that must be set prior to enabling - //; the MMU. The DCAR is one of these registers. We are setting - //; it to zero (no access) to easily detect improper setup in subsequent - //; code sequences - //;------------------------------------------------------------------- - //; Setup DACR (Domain Access Control Register) to zero - MCR p15, 0, r0, c3, c0, 0 //; WCP15_DACR r0 - - //; Setup DCLKCR to allow normal D-Cache line fills - MCR p15, 1, r0, c9, c0, 7 //; WCP15_DCLKCR r0 - - //; Setup the TLBLKCR - //; Victim = 6'b000000; Floor = 6'b000000; - //; IASIDCFG = 2'b00 (State-Machine); IALLCFG = 2'b01 (Flash); BNA = 1'b0; - MOV r1, #0x02 - MCR p15, 0, r1, c10, c1, 3 //; WCP15_TLBLKCR r1 - - //;Make sure TLBLKCR is complete before continuing - ISB - - //; Invalidate the UTLB - MCR p15, 0, r0, c8, c7, 0 //; UTLBIALL - - //; Make sure UTLB request has been presented to macro before continuing - ISB - - // Disable predecode repair cache on certain Scorpion revisions - // (Raptor V2 and earlier, or Halcyon V1) - MRC p15, 0, r1, c0, c0, 0 //; MIDR - BIC r2, r1, #0xf7 //; check for Raptor2 or below - LDR r3, =0x510f0000 - CMP r2, r3 - BEQ DPRC - BIC r2, r1, #0xf0 //; check for Halcyon V1 - LDR r3, =0x511f0000 - CMP r2, r3 - BNE SYSI2 - -DPRC: - MRC p15, 0, r1, c15, c15, 2 //; PVR0F2 - ORR r1, r1, #0x10 //; enable bit 4 - MCR p15, 0, r1, c15, c15, 2 //; disable predecode repair cache - -SYSI2: - //; setup L2CR1 to some default Instruction and data prefetching values - //; Users may want specific settings for various performance enhancements - MOV r2, #0x33 - MCR p15, 3, r2, c15, c0, 3 //; WCP15_L2CR1 r0 - - - //; Enable Z bit to enable branch prediction (default is off) - MRC p15, 0, r2, c1, c0, 0 //; RCP15_SCTLR r2 - ORR r2, r2, #0x00000800 - MCR p15, 0, r2, c1, c0, 0 //; WCP15_SCTLR r2 - - //; Make sure Link stack is initialized with branch and links to sequential addresses - //; This aids in creating a predictable startup environment - BL SEQ1 -SEQ1: BL SEQ2 -SEQ2: BL SEQ3 -SEQ3: BL SEQ4 -SEQ4: BL SEQ5 -SEQ5: BL SEQ6 -SEQ6: BL SEQ7 -SEQ7: BL SEQ8 -SEQ8: - - //; REMOVE FOLLOWING THREE INSTRUCTIONS WHEN POWER COLLAPSE IS ENA - //;Make sure the DBGOSLSR[LOCK] bit is cleared to allow access to the debug registers - //; Writing anything but the "secret code" to the DBGOSLAR clears the DBGOSLSR[LOCK] bit - MCR p14, 0, r0, c1, c0, 4 //; WCP14_DBGOSLAR r0 - - - //; Read the DBGPRSR to clear the DBGPRSR[STICKYPD] - //; Any read to DBGPRSR clear the STICKYPD bit - //; ISB guarantees the read completes before attempting to - //; execute a CP14 instruction. - MRC p14, 0, r3, c1, c5, 4 //; RCP14_DBGPRSR r3 - ISB - - //; Initialize the Watchpoint Control Registers to zero (optional) - //;;; MCR p14, 0, r0, c0, c0, 7 ; WCP14_DBGWCR0 r0 - //;;; MCR p14, 0, r0, c0, c1, 7 ; WCP14_DBGWCR1 r0 - - - //;---------------------------------------------------------------------- - //; The saved Program Status Registers (SPSRs) should be setup - //; prior to any automatic mode switches. The following - //; code sets these registers up to a known state. Users will need to - //; customize these settings to meet their needs. - //;---------------------------------------------------------------------- - MOV r2, #0x1f - MOV r1, #0xd7 //;ABT mode - msr cpsr_c, r1 //;ABT mode - msr spsr_cxfs, r2 //;clear the spsr - MOV r1, #0xdb //;UND mode - msr cpsr_c, r1 //;UND mode - msr spsr_cxfs, r2 //;clear the spsr - MOV r1, #0xd1 //;FIQ mode - msr cpsr_c, r1 //;FIQ mode - msr spsr_cxfs, r2 //;clear the spsr - MOV r1, #0xd2 //;IRQ mode - msr cpsr_c, r1 //;IRQ mode - msr spsr_cxfs, r2 //;clear the spsr - MOV r1, #0xd6 //;Monitor mode - msr cpsr_c, r1 //;Monitor mode - msr spsr_cxfs, r2 //;clear the spsr - MOV r1, #0xd3 //;SVC mode - msr cpsr_c, r1 //;SVC mode - msr spsr_cxfs, r2 //;clear the spsr - - - //;---------------------------------------------------------------------- - //; Enabling Error reporting is something users may want to do at - //; some other point in time. We have chosen some default settings - //; that should be reviewed. Most of these registers come up in an - //; unpredictable state after reset. - //;---------------------------------------------------------------------- -//;Start of error and control setting - - //; setup L2CR0 with various L2/TCM control settings - //; enable out of order bus attributes and error reporting - //; this register comes up unpredictable after reset - // MOVW r1, #0x0F0F -.word 0xe3001f0f // hardcoded MOVW instruction due to lack of compiler support - // MOVT r1, #0xC005 -.word 0xe34c1005 // hardcoded MOVW instruction due to lack of compiler support - MCR p15, 3, r1, c15, c0, 1 //; WCP15_L2CR0 r1 - - //; setup L2CPUCR - //; MOV r2, #0xFF - //; Enable I and D cache parity - //;L2CPUCR[7:5] = 3~Rh7 ~V enable parity error reporting for modified, - //;tag, and data parity errors - MOV r2, #0xe0 - MCR p15, 3, r2, c15, c0, 2 //; WCP15_L2CPUCR r2 - - //; setup SPCR - //; enable all error reporting (reset value is unpredicatble for most bits) - MOV r3, #0x0F - MCR p15, 0, r3, c9, c7, 0 //; WCP15_SPCR r3 - - //; setup DMACHCRs (reset value unpredictable) - //; control setting and enable all error reporting - MOV r1, #0x0F - - //; DMACHCR0 = 0000000F - MOV r2, #0x00 //; channel 0 - MCR p15, 0, r2, c11, c0, 0 //; WCP15_DMASELR r2 - MCR p15, 0, r1, c11, c0, 2 //; WCP15_DMACHCR r1 - - //; DMACHCR1 = 0000000F - MOV r2, #0x01 //; channel 1 - MCR p15, 0, r2, c11, c0, 0 //; WCP15_DMASELR r2 - MCR p15, 0, r1, c11, c0, 2 //; WCP15_DMACHCR r1 - - //; DMACHCR2 = 0000000F - MOV r2, #0x02 //; channel 2 - MCR p15, 0, r2, c11, c0, 0 //; WCP15_DMASELR r2 - MCR p15, 0, r1, c11, c0, 2 //; WCP15_DMACHCR r1 - - //; DMACHCR3 = 0000000F - MOV r2, #0x03 //; channel 3 - MCR p15, 0, r2, c11, c0, 0 //; WCP15_DMASELR r2 - MCR p15, 0, r1, c11, c0, 2 //; WCP15_DMACHCR r1 - - //; Set ACTLR (reset unpredictable) - //; Set AVIVT control, error reporting, etc. - //; MOV r3, #0x07 - //; Enable I and D cache parity - //;ACTLR[2:0] = 3'h7 - enable parity error reporting from L2/I$/D$) - //;ACTLR[5:4] = 2'h3 - enable parity - //;ACTLR[19:18] =2'h3 - always generate and check parity(when MMU disabled). - //;Value to be written #0xC0037 - // MOVW r3, #0x0037 -.word 0xe3003037 // hardcoded MOVW instruction due to lack of compiler support - // MOVT r3, #0x000C -.word 0xe340300c // hardcoded MOVW instruction due to lack of compiler support - //; read the version_id to determine if d-cache should be disabled - LDR r2, = 0xa8e00270 //;Read HW_REVISION_NUMBER, HWIO_HW_REVISION_NUMBER_ADDR - LDR r2,[r2] - AND r2,r2,#0xf0000000 //;hw_revision mask off bits 28-31 - //;if HW_revision is 1.0 or older, (revision==0) - CMP r2,#0 - //; Disable d-cache on older QSD8650 (Rev 1.0) silicon - //;orreq r3, r3, #0x4000 //;disable dcache - //;MCR p15, 0, r3, c1, c0, 1 //; WCP15_ACTLR r3 - -//;End of error and control setting - - //;---------------------------------------------------------------------- - //; Unlock ETM and read StickyPD to halt the ETM clocks from running. - //; This is required for power saving whether the ETM is used or not. - //;---------------------------------------------------------------------- - - //;Clear ETMOSLSR[LOCK] bit - MOV r1, #0x00000000 - MCR p14, 1, r1, c1, c0, 4 //; WCP14_ETMOSLAR r1 - - //;Clear ETMPDSR[STICKYPD] bit - MRC p14, 1, r2, c1, c5, 4 //; RCP14_ETMPDSR r2 - -/* -#ifdef APPSBL_ETM_ENABLE - ;---------------------------------------------------------------------- - ; Optionally Enable the ETM (Embedded Trace Macro) which is used for debug - ;---------------------------------------------------------------------- - - ; enable ETM clock if disabled - MRC p15, 7, r1, c15, c0, 5 ; RCP15_CPMR r1 - ORR r1, r1, #0x00000008 - MCR p15, 7, r1, c15, c0, 5 ; WCP15_CPMR r1 - ISB - - ; set trigger event to counter1 being zero - MOV r3, #0x00000040 - MCR p14, 1, r3, c0, c2, 0 ; WCP14_ETMTRIGGER r3 - - ; clear ETMSR - MOV r2, #0x00000000 - MCR p14, 1, r2, c0, c4, 0 ; WCP14_ETMSR r2 - - ; clear trace enable single address comparator usage - MCR p14, 1, r2, c0, c7, 0 ; WCP14_ETMTECR2 r2 - - ; set trace enable to always - MOV r2, #0x0000006F - MCR p14, 1, r2, c0, c8, 0 ; WCP14_ETMTEEVR r2 - - ; clear trace enable address range comparator usage and exclude nothing - MOV r2, #0x01000000 - MCR p14, 1, r2, c0, c9, 0 ; WCP14_ETMTECR1 r2 - - ; set view data to always - MOV r2, #0x0000006F - MCR p14, 1, r2, c0, c12, 0 ; WCP14_ETMVDEVR r2 - - ; clear view data single address comparator usage - MOV r2, #0x00000000 - MCR p14, 1, r2, c0, c13, 0 ; WCP14_ETMVDCR1 r2 - - ; clear view data address range comparator usage and exclude nothing - MOV r2, #0x00010000 - MCR p14, 1, r2, c0, c15, 0 ; WCP14_ETMVDCR3 r2 - - ; set counter1 to 194 - MOV r2, #0x000000C2 - MCR p14, 1, r2, c0, c0, 5 ; WCP14_ETMCNTRLDVR1 r2 - - ; set counter1 to never reload - MOV r2, #0x0000406F - MCR p14, 1, r2, c0, c8, 5 ; WCP14_ETMCNTRLDEVR1 r2 - - ; set counter1 to decrement every cycle - MOV r2, #0x0000006F - MCR p14, 1, r2, c0, c4, 5 ; WCP14_ETMCNTENR1 r2 - - ; Set trace synchronization frequency 1024 bytes - MOV r2, #0x00000400 - MCR p14, 1, r2, c0, c8, 7 ; WCP14_ETMSYNCFR r2 - - ; Program etm control register - ; - Set the CPU to ETM clock ratio to 1:1 - ; - Set the ETM to perform data address tracing - MOV r2, #0x00002008 - MCR p14, 1, r2, c0, c0, 0 ; WCP14_ETMCR r2 - ISB -#endif *//* APPSBL_ETM_ENABLE */ - -/* -#ifdef APPSBL_VFP_ENABLE - ;---------------------------------------------------------------------- - ; Perform the following operations if you intend to make use of - ; the VFP/Neon unit. Note that the FMXR instruction requires a CPU ID - ; indicating the VFP unit is present (i.e.Cortex-A8). . - ; Some tools will require full double precision floating point support - ; which will become available in Scorpion pass 2 - ;---------------------------------------------------------------------- - ; allow full access to CP 10 and 11 space for VFP/NEON use - MRC p15, 0, r1, c1, c0, 2 ; Read CP Access Control Register - ORR r1, r1, #0x00F00000 ; enable full access for p10,11 - MCR p15, 0, r1, c1, c0, 2 ; Write CPACR - - ;make sure the CPACR is complete before continuing - ISB - - ; Enable VFP itself (certain OSes may want to dynamically set/clear - ; the enable bit based on the application being executed - MOV r1, #0x40000000 - FMXR FPEXC, r1 -#endif *//* APPSBL_VFP_ENABLE */ - - /* we have no stack, so just tail-call into the SET_SA routine... */ - b SET_SA - - -.ltorg diff --git a/lk/platform/qsd8k/gpio.c b/lk/platform/qsd8k/gpio.c deleted file mode 100644 index 0b1272b..0000000 --- a/lk/platform/qsd8k/gpio.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "gpio_hw.h" - -typedef struct gpioregs gpioregs; - -struct gpioregs -{ - unsigned out; - unsigned in; - unsigned int_status; - unsigned int_clear; - unsigned int_en; - unsigned int_edge; - unsigned int_pos; - unsigned oe; -}; - -static gpioregs GPIO_REGS[] = { - { - .out = GPIO_OUT_0, - .in = GPIO_IN_0, - .int_status = GPIO_INT_STATUS_0, - .int_clear = GPIO_INT_CLEAR_0, - .int_en = GPIO_INT_EN_0, - .int_edge = GPIO_INT_EDGE_0, - .int_pos = GPIO_INT_POS_0, - .oe = GPIO_OE_0, - }, - { - .out = GPIO_OUT_1, - .in = GPIO_IN_1, - .int_status = GPIO_INT_STATUS_1, - .int_clear = GPIO_INT_CLEAR_1, - .int_en = GPIO_INT_EN_1, - .int_edge = GPIO_INT_EDGE_1, - .int_pos = GPIO_INT_POS_1, - .oe = GPIO_OE_1, - }, - { - .out = GPIO_OUT_2, - .in = GPIO_IN_2, - .int_status = GPIO_INT_STATUS_2, - .int_clear = GPIO_INT_CLEAR_2, - .int_en = GPIO_INT_EN_2, - .int_edge = GPIO_INT_EDGE_2, - .int_pos = GPIO_INT_POS_2, - .oe = GPIO_OE_2, - }, - { - .out = GPIO_OUT_3, - .in = GPIO_IN_3, - .int_status = GPIO_INT_STATUS_3, - .int_clear = GPIO_INT_CLEAR_3, - .int_en = GPIO_INT_EN_3, - .int_edge = GPIO_INT_EDGE_3, - .int_pos = GPIO_INT_POS_3, - .oe = GPIO_OE_3, - }, - { - .out = GPIO_OUT_4, - .in = GPIO_IN_4, - .int_status = GPIO_INT_STATUS_4, - .int_clear = GPIO_INT_CLEAR_4, - .int_en = GPIO_INT_EN_4, - .int_edge = GPIO_INT_EDGE_4, - .int_pos = GPIO_INT_POS_4, - .oe = GPIO_OE_4, - }, - { - .out = GPIO_OUT_5, - .in = GPIO_IN_5, - .int_status = GPIO_INT_STATUS_5, - .int_clear = GPIO_INT_CLEAR_5, - .int_en = GPIO_INT_EN_5, - .int_edge = GPIO_INT_EDGE_5, - .int_pos = GPIO_INT_POS_5, - .oe = GPIO_OE_5, - }, - { - .out = GPIO_OUT_6, - .in = GPIO_IN_6, - .int_status = GPIO_INT_STATUS_6, - .int_clear = GPIO_INT_CLEAR_6, - .int_en = GPIO_INT_EN_6, - .int_edge = GPIO_INT_EDGE_6, - .int_pos = GPIO_INT_POS_6, - .oe = GPIO_OE_6, - }, - { - .out = GPIO_OUT_7, - .in = GPIO_IN_7, - .int_status = GPIO_INT_STATUS_7, - .int_clear = GPIO_INT_CLEAR_7, - .int_en = GPIO_INT_EN_7, - .int_edge = GPIO_INT_EDGE_7, - .int_pos = GPIO_INT_POS_7, - .oe = GPIO_OE_7, - }, -}; - -static gpioregs *find_gpio(unsigned n, unsigned *bit) -{ - if(n > 164) return 0; - if(n > 152) { - *bit = 1 << (n - 153); - return GPIO_REGS + 7; - } - if(n > 121) { - *bit = 1 << (n - 122); - return GPIO_REGS + 6; - } - if(n > 103) { - *bit = 1 << (n - 104); - return GPIO_REGS + 5; - } - if(n > 94) { - *bit = 1 << (n - 95); - return GPIO_REGS + 4; - } - if(n > 67) { - *bit = 1 << (n - 68); - return GPIO_REGS + 3; - } - if(n > 42) { - *bit = 1 << (n - 43); - return GPIO_REGS + 2; - } - if(n > 15) { - *bit = 1 << (n - 16); - return GPIO_REGS + 1; - } - *bit = 1 << n; - return GPIO_REGS + 0; -} - -int gpio_config(unsigned n, unsigned flags) -{ - gpioregs *r; - unsigned b; - unsigned v; - - if ((r = find_gpio(n, &b)) == 0) - return -1; - - v = readl(r->oe); - if (flags & GPIO_OUTPUT) { - writel(v | b, r->oe); - } else { - writel(v & (~b), r->oe); - } - return 0; -} - -void gpio_set(unsigned n, unsigned on) -{ - gpioregs *r; - unsigned b; - unsigned v; - - if((r = find_gpio(n, &b)) == 0) return; - - v = readl(r->out); - if(on) { - writel(v | b, r->out); - } else { - writel(v & (~b), r->out); - } -} - -int gpio_get(unsigned n) -{ - gpioregs *r; - unsigned b; - - if((r = find_gpio(n, &b)) == 0) return 0; - - return (readl(r->in) & b) ? 1 : 0; -} - - diff --git a/lk/platform/qsd8k/gpio_hw.h b/lk/platform/qsd8k/gpio_hw.h deleted file mode 100644 index 3ef40f6..0000000 --- a/lk/platform/qsd8k/gpio_hw.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __PLATFORM_QSD8K_GPIO_HW_H -#define __PLATFORM_QSD8K_GPIO_HW_H - -#define MSM_GPIO1_BASE 0xA9000000 -#define MSM_GPIO2_BASE 0xA9100000 - -#define GPIO1_REG(off) (MSM_GPIO1_BASE + 0x800 + (off)) -#define GPIO2_REG(off) (MSM_GPIO2_BASE + 0xC00 + (off)) - -/* output value */ -#define GPIO_OUT_0 GPIO1_REG(0x00) /* gpio 15-0 */ -#define GPIO_OUT_1 GPIO2_REG(0x00) /* gpio 42-16 */ -#define GPIO_OUT_2 GPIO1_REG(0x04) /* gpio 67-43 */ -#define GPIO_OUT_3 GPIO1_REG(0x08) /* gpio 94-68 */ -#define GPIO_OUT_4 GPIO1_REG(0x0C) /* gpio 103-95 */ -#define GPIO_OUT_5 GPIO1_REG(0x10) /* gpio 121-104 */ -#define GPIO_OUT_6 GPIO1_REG(0x14) /* gpio 152-122 */ -#define GPIO_OUT_7 GPIO1_REG(0x18) /* gpio 164-153 */ - -/* same pin map as above, output enable */ -#define GPIO_OE_0 GPIO1_REG(0x20) -#define GPIO_OE_1 GPIO2_REG(0x08) -#define GPIO_OE_2 GPIO1_REG(0x24) -#define GPIO_OE_3 GPIO1_REG(0x28) -#define GPIO_OE_4 GPIO1_REG(0x2C) -#define GPIO_OE_5 GPIO1_REG(0x30) -#define GPIO_OE_6 GPIO1_REG(0x34) -#define GPIO_OE_7 GPIO1_REG(0x38) - -/* same pin map as above, input read */ -#define GPIO_IN_0 GPIO1_REG(0x50) -#define GPIO_IN_1 GPIO2_REG(0x20) -#define GPIO_IN_2 GPIO1_REG(0x54) -#define GPIO_IN_3 GPIO1_REG(0x58) -#define GPIO_IN_4 GPIO1_REG(0x5C) -#define GPIO_IN_5 GPIO1_REG(0x60) -#define GPIO_IN_6 GPIO1_REG(0x64) -#define GPIO_IN_7 GPIO1_REG(0x68) - -/* same pin map as above, 1=edge 0=level interrup */ -#define GPIO_INT_EDGE_0 GPIO1_REG(0x70) -#define GPIO_INT_EDGE_1 GPIO2_REG(0x50) -#define GPIO_INT_EDGE_2 GPIO1_REG(0x74) -#define GPIO_INT_EDGE_3 GPIO1_REG(0x78) -#define GPIO_INT_EDGE_4 GPIO1_REG(0x7C) -#define GPIO_INT_EDGE_5 GPIO1_REG(0x80) -#define GPIO_INT_EDGE_6 GPIO1_REG(0x84) -#define GPIO_INT_EDGE_7 GPIO1_REG(0x88) - -/* same pin map as above, 1=positive 0=negative */ -#define GPIO_INT_POS_0 GPIO1_REG(0x90) -#define GPIO_INT_POS_1 GPIO2_REG(0x58) -#define GPIO_INT_POS_2 GPIO1_REG(0x94) -#define GPIO_INT_POS_3 GPIO1_REG(0x98) -#define GPIO_INT_POS_4 GPIO1_REG(0x9C) -#define GPIO_INT_POS_5 GPIO1_REG(0xA0) -#define GPIO_INT_POS_6 GPIO1_REG(0xA4) -#define GPIO_INT_POS_7 GPIO1_REG(0xA8) - -/* same pin map as above, interrupt enable */ -#define GPIO_INT_EN_0 GPIO1_REG(0xB0) -#define GPIO_INT_EN_1 GPIO2_REG(0x60) -#define GPIO_INT_EN_2 GPIO1_REG(0xB4) -#define GPIO_INT_EN_3 GPIO1_REG(0xB8) -#define GPIO_INT_EN_4 GPIO1_REG(0xBC) -#define GPIO_INT_EN_5 GPIO1_REG(0xC0) -#define GPIO_INT_EN_6 GPIO1_REG(0xC4) -#define GPIO_INT_EN_7 GPIO1_REG(0xC8) - -/* same pin map as above, write 1 to clear interrupt */ -#define GPIO_INT_CLEAR_0 GPIO1_REG(0xD0) -#define GPIO_INT_CLEAR_1 GPIO2_REG(0x68) -#define GPIO_INT_CLEAR_2 GPIO1_REG(0xD4) -#define GPIO_INT_CLEAR_3 GPIO1_REG(0xD8) -#define GPIO_INT_CLEAR_4 GPIO1_REG(0xDC) -#define GPIO_INT_CLEAR_5 GPIO1_REG(0xE0) -#define GPIO_INT_CLEAR_6 GPIO1_REG(0xE4) -#define GPIO_INT_CLEAR_7 GPIO1_REG(0xE8) - -/* same pin map as above, 1=interrupt pending */ -#define GPIO_INT_STATUS_0 GPIO1_REG(0xF0) -#define GPIO_INT_STATUS_1 GPIO2_REG(0x70) -#define GPIO_INT_STATUS_2 GPIO1_REG(0xF4) -#define GPIO_INT_STATUS_3 GPIO1_REG(0xF8) -#define GPIO_INT_STATUS_4 GPIO1_REG(0xFC) -#define GPIO_INT_STATUS_5 GPIO1_REG(0x100) -#define GPIO_INT_STATUS_6 GPIO1_REG(0x103) -#define GPIO_INT_STATUS_7 GPIO1_REG(0x108) - -#endif diff --git a/lk/platform/qsd8k/include/platform/iomap.h b/lk/platform/qsd8k/include/platform/iomap.h deleted file mode 100644 index eadcf6a..0000000 --- a/lk/platform/qsd8k/include/platform/iomap.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef _PLATFORM_MSM7K_IOMAP_H_ -#define _PLATFORM_MSM7K_IOMAP_H_ - -#define MSM_UART1_BASE 0xA9A00000 -#define MSM_UART2_BASE 0xA9B00000 -#define MSM_UART3_BASE 0xA9C00000 - -#define MSM_VIC_BASE 0xAC000000 -#define MSM_GPT_BASE 0xAC100000 -#define MSM_CSR_BASE 0xAC100000 - -#if defined(PLATFORM_QSD8K) -#define MSM_SHARED_BASE 0x00100000 -#else -#define MSM_SHARED_BASE 0x01F00000 -#endif -#endif diff --git a/lk/platform/qsd8k/include/platform/irqs.h b/lk/platform/qsd8k/include/platform/irqs.h deleted file mode 100644 index 3548218..0000000 --- a/lk/platform/qsd8k/include/platform/irqs.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef _PLATFORM_MSM7K_IRQS_H_ -#define _PLATFORM_MSM7K_IRQS_H_ - -#define INT_A9_M2A_0 0 -#define INT_A9_M2A_1 1 -#define INT_A9_M2A_2 2 -#define INT_A9_M2A_3 3 -#define INT_A9_M2A_4 4 -#define INT_A9_M2A_5 5 -#define INT_A9_M2A_6 6 -#define INT_GP_TIMER_EXP 7 -#define INT_DEBUG_TIMER_EXP 8 -#define INT_SIRC_0 9 -#define INT_SDC3_0 10 -#define INT_SDC3_1 11 -#define INT_SDC4_0 12 -#define INT_SDC4_1 13 -#define INT_AD6_EXT_VFR 14 -#define INT_USB_OTG 15 -#define INT_MDDI_PRI 16 -#define INT_MDDI_EXT 17 -#define INT_MDDI_CLIENT 18 -#define INT_MDP 19 -#define INT_GRAPHICS 20 -#define INT_ADM_AARM 21 -#define INT_ADSP_A11 22 -#define INT_ADSP_A9_A11 23 -#define INT_SDC1_0 24 -#define INT_SDC1_1 25 -#define INT_SDC2_0 26 -#define INT_SDC2_1 27 -#define INT_KEYSENSE 28 -#define INT_TCHSCRN_SSBI 29 -#define INT_TCHSCRN1 30 -#define INT_TCHSCRN2 31 - -#define INT_TCSR_MPRPH_SC1 (32 + 0) -#define INT_USB_FS2 (32 + 1) -#define INT_PWB_I2C (32 + 2) -#define INT_SOFTRESET (32 + 3) -#define INT_NAND_WR_ER_DONE (32 + 4) -#define INT_NAND_OP_DONE (32 + 5) -#define INT_TCSR_MPRPH_SC2 (32 + 6) -#define INT_OP_PEN (32 + 7) -#define INT_AD_HSSD (32 + 8) -#define INT_ARM11_PM (32 + 9) -#define INT_SDMA_NON_SECURE (32 + 10) -#define INT_TSIF_IRQ (32 + 11) -#define INT_UART1DM_IRQ (32 + 12) -#define INT_UART1DM_RX (32 + 13) -#define INT_SDMA_SECURE (32 + 14) -#define INT_SI2S_SLAVE (32 + 15) -#define INT_SC_I2CPU (32 + 16) -#define INT_SC_DBG_RDTRFULL (32 + 17) -#define INT_SC_DBG_WDTRFULL (32 + 18) -#define INT_SCPLL_CTL_DONE (32 + 19) -#define INT_UART2DM_IRQ (32 + 20) -#define INT_UART2DM_RX (32 + 21) -#define INT_VDC_MEC (32 + 22) -#define INT_VDC_DB (32 + 23) -#define INT_VDC_AXI (32 + 24) -#define INT_VFE (32 + 25) -#define INT_USB_HS (32 + 26) -#define INT_AUDIO_OUT0 (32 + 27) -#define INT_AUDIO_OUT1 (32 + 28) -#define INT_CRYPTO (32 + 29) -#define INT_AD6M_IDLE (32 + 30) -#define INT_SIRC_1 (32 + 31) - -/* secondary interrupt controller */ - -#define INT_UART1_IRQ (64 + 0) -#define INT_UART2_IRQ (64 + 1) -#define INT_UART3_IRQ (64 + 2) -#define INT_UART1_RX (64 + 3) -#define INT_UART2_RX (64 + 4) -#define INT_UART3_RX (64 + 5) -#define INT_SPI_INPUT (64 + 6) -#define INT_SPI_OUTPUT (64 + 7) -#define INT_SPI_ERROR (64 + 8) -#define INT_GPIO1_SHADOW (64 + 9) -#define INT_GPIO2_SHADOW (64 + 10) -#define INT_GPIO1_SECURE (64 + 11) -#define INT_GPIO2_SECURE (64 + 12) -#define INT_SC_AVS_SVIC (64 + 13) -#define INT_SC_AVS_REQ_UP (64 + 14) -#define INT_SC_AVS_REQ_DOWN (64 + 15) -#define INT_PBUS_ERR (64 + 16) -#define INT_AXI (64 + 17) -#define INT_SMI (64 + 18) -#define INT_EBI (64 + 19) -#define INT_IMEM (64 + 20) -#define INT_SC_TEMP_SENSOR (64 + 21) -#define INT_TV_ENC (64 + 22) - -#define MSM_IRQ_BIT(irq) (1 << ((irq) & 31)) - -#define NR_IRQS 64 - -#endif diff --git a/lk/platform/qsd8k/interrupts.c b/lk/platform/qsd8k/interrupts.c deleted file mode 100644 index 9071677..0000000 --- a/lk/platform/qsd8k/interrupts.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include - -#include -#include - -#define VIC_REG(off) (MSM_VIC_BASE + (off)) - -#define VIC_INT_SELECT0 VIC_REG(0x0000) /* 1: FIQ, 0: IRQ */ -#define VIC_INT_SELECT1 VIC_REG(0x0004) /* 1: FIQ, 0: IRQ */ -#define VIC_INT_EN0 VIC_REG(0x0010) -#define VIC_INT_EN1 VIC_REG(0x0014) -#define VIC_INT_ENCLEAR0 VIC_REG(0x0020) -#define VIC_INT_ENCLEAR1 VIC_REG(0x0024) -#define VIC_INT_ENSET0 VIC_REG(0x0030) -#define VIC_INT_ENSET1 VIC_REG(0x0034) -#define VIC_INT_TYPE0 VIC_REG(0x0040) /* 1: EDGE, 0: LEVEL */ -#define VIC_INT_TYPE1 VIC_REG(0x0044) /* 1: EDGE, 0: LEVEL */ -#define VIC_INT_POLARITY0 VIC_REG(0x0050) /* 1: NEG, 0: POS */ -#define VIC_INT_POLARITY1 VIC_REG(0x0054) /* 1: NEG, 0: POS */ -#define VIC_NO_PEND_VAL VIC_REG(0x0060) -#define VIC_INT_MASTEREN VIC_REG(0x0068) /* 1: IRQ, 2: FIQ */ -#define VIC_CONFIG VIC_REG(0x006C) /* 1: USE ARM1136 VIC */ -#define VIC_SECURITY0 VIC_REG(0x0070) -#define VIC_SECURITY1 VIC_REG(0x0074) -#define VIC_IRQ_STATUS0 VIC_REG(0x0080) -#define VIC_IRQ_STATUS1 VIC_REG(0x0084) -#define VIC_FIQ_STATUS0 VIC_REG(0x0090) -#define VIC_FIQ_STATUS1 VIC_REG(0x0094) -#define VIC_RAW_STATUS0 VIC_REG(0x00A0) -#define VIC_RAW_STATUS1 VIC_REG(0x00A4) -#define VIC_INT_CLEAR0 VIC_REG(0x00B0) -#define VIC_INT_CLEAR1 VIC_REG(0x00B4) -#define VIC_SOFTINT0 VIC_REG(0x00C0) -#define VIC_SOFTINT1 VIC_REG(0x00C4) -#define VIC_IRQ_VEC_RD VIC_REG(0x00D0) /* pending int # */ -#define VIC_IRQ_VEC_PEND_RD VIC_REG(0x00D4) /* pending vector addr */ -#define VIC_IRQ_VEC_WR VIC_REG(0x00D8) -#define VIC_FIQ_VEC_RD VIC_REG(0x00DC) /* pending int # */ -#define VIC_FIQ_VEC_PEND_RD VIC_REG(0x00E0) /* pending vector addr */ -#define VIC_FIQ_VEC_WR VIC_REG(0x00E4) -#define VIC_IRQ_IN_SERVICE VIC_REG(0x00E8) -#define VIC_IRQ_IN_STACK VIC_REG(0x00EC) -#define VIC_FIQ_IN_SERVICE VIC_REG(0x00F0) -#define VIC_FIQ_IN_STACK VIC_REG(0x00F4) -#define VIC_TEST_BUS_SEL VIC_REG(0x00F8) - -#define SIRC_REG(off) (MSM_SIRC_BASE + (off)) - -#define SIRC_INT_SELECT SIRC_REG(0x0000) /* 0: IRQ0 1: IRQ1 */ -#define SIRC_INT_ENABLE SIRC_REG(0x0004) -#define SIRC_INT_ENCLEAR SIRC_REG(0x0008) -#define SIRC_INT_ENSET SIRC_REG(0x000C) -#define SIRC_INT_TYPE SIRC_REG(0x0010) /* 1: EDGE, 0: LEVEL */ -#define SIRC_INT_POLARITY SIRC_REG(0x0014) /* 1: NEG, 0: POS */ -#define SIRC_SECURITY SIRC_REG(0x0018) /* 0: SEC, 1: NSEC */ -#define SIRC_IRQ0_STATUS SIRC_REG(0x001C) -#define SIRC_IRQ1_STATUS SIRC_REG(0x0020) -#define SIRC_RAW_STATUS SIRC_REG(0x0024) - -struct ihandler { - int_handler func; - void *arg; -}; - -static struct ihandler handler[NR_IRQS]; - -void platform_init_interrupts(void) -{ - writel(0xffffffff, VIC_INT_CLEAR0); - writel(0xffffffff, VIC_INT_CLEAR1); - writel(0, VIC_INT_SELECT0); - writel(0, VIC_INT_SELECT1); - writel(0xffffffff, VIC_INT_TYPE0); - writel(0xffffffff, VIC_INT_TYPE1); - writel(0, VIC_CONFIG); - writel(1, VIC_INT_MASTEREN); -} - -enum handler_return platform_irq(struct arm_iframe *frame) -{ - unsigned num; - enum handler_return ret; - num = readl(VIC_IRQ_VEC_RD); - num = readl(VIC_IRQ_VEC_PEND_RD); - if (num > NR_IRQS) - return 0; - writel(1 << (num & 31), (num > 31) ? VIC_INT_CLEAR1 : VIC_INT_CLEAR0); - ret = handler[num].func(handler[num].arg); - writel(0, VIC_IRQ_VEC_WR); - return ret; -} - -void platform_fiq(struct arm_iframe *frame) -{ - PANIC_UNIMPLEMENTED; -} - -status_t mask_interrupt(unsigned int vector) -{ - unsigned reg = (vector > 31) ? VIC_INT_ENCLEAR1 : VIC_INT_ENCLEAR0; - unsigned bit = 1 << (vector & 31); - writel(bit, reg); - return 0; -} - -status_t unmask_interrupt(unsigned int vector) -{ - unsigned reg = (vector > 31) ? VIC_INT_ENSET1 : VIC_INT_ENSET0; - unsigned bit = 1 << (vector & 31); - writel(bit, reg); - return 0; -} - -void register_int_handler(unsigned int vector, int_handler func, void *arg) -{ - if (vector >= NR_IRQS) - return; - - enter_critical_section(); - handler[vector].func = func; - handler[vector].arg = arg; - exit_critical_section(); -} - diff --git a/lk/platform/qsd8k/panel.c b/lk/platform/qsd8k/panel.c deleted file mode 100644 index a5e7752..0000000 --- a/lk/platform/qsd8k/panel.c +++ /dev/null @@ -1,657 +0,0 @@ -/* Copyright 2007, Google Inc. */ - -#include -#include -#include -#include - -#define MDDI_CLIENT_CORE_BASE 0x108000 -#define LCD_CONTROL_BLOCK_BASE 0x110000 -#define SPI_BLOCK_BASE 0x120000 -#define I2C_BLOCK_BASE 0x130000 -#define PWM_BLOCK_BASE 0x140000 -#define GPIO_BLOCK_BASE 0x150000 -#define SYSTEM_BLOCK1_BASE 0x160000 -#define SYSTEM_BLOCK2_BASE 0x170000 - - -#define MDDICAP0 (MDDI_CLIENT_CORE_BASE|0x00) -#define MDDICAP1 (MDDI_CLIENT_CORE_BASE|0x04) -#define MDDICAP2 (MDDI_CLIENT_CORE_BASE|0x08) -#define MDDICAP3 (MDDI_CLIENT_CORE_BASE|0x0C) -#define MDCAPCHG (MDDI_CLIENT_CORE_BASE|0x10) -#define MDCRCERC (MDDI_CLIENT_CORE_BASE|0x14) -#define TTBUSSEL (MDDI_CLIENT_CORE_BASE|0x18) -#define DPSET0 (MDDI_CLIENT_CORE_BASE|0x1C) -#define DPSET1 (MDDI_CLIENT_CORE_BASE|0x20) -#define DPSUS (MDDI_CLIENT_CORE_BASE|0x24) -#define DPRUN (MDDI_CLIENT_CORE_BASE|0x28) -#define SYSCKENA (MDDI_CLIENT_CORE_BASE|0x2C) -#define TESTMODE (MDDI_CLIENT_CORE_BASE|0x30) -#define FIFOMONI (MDDI_CLIENT_CORE_BASE|0x34) -#define INTMONI (MDDI_CLIENT_CORE_BASE|0x38) -#define MDIOBIST (MDDI_CLIENT_CORE_BASE|0x3C) -#define MDIOPSET (MDDI_CLIENT_CORE_BASE|0x40) -#define BITMAP0 (MDDI_CLIENT_CORE_BASE|0x44) -#define BITMAP1 (MDDI_CLIENT_CORE_BASE|0x48) -#define BITMAP2 (MDDI_CLIENT_CORE_BASE|0x4C) -#define BITMAP3 (MDDI_CLIENT_CORE_BASE|0x50) -#define BITMAP4 (MDDI_CLIENT_CORE_BASE|0x54) - - -#define SRST (LCD_CONTROL_BLOCK_BASE|0x00) -#define PORT_ENB (LCD_CONTROL_BLOCK_BASE|0x04) -#define START (LCD_CONTROL_BLOCK_BASE|0x08) -#define PORT (LCD_CONTROL_BLOCK_BASE|0x0C) -#define CMN (LCD_CONTROL_BLOCK_BASE|0x10) -#define GAMMA (LCD_CONTROL_BLOCK_BASE|0x14) -#define INTFLG (LCD_CONTROL_BLOCK_BASE|0x18) -#define INTMSK (LCD_CONTROL_BLOCK_BASE|0x1C) -#define MPLFBUF (LCD_CONTROL_BLOCK_BASE|0x20) -#define HDE_LEFT (LCD_CONTROL_BLOCK_BASE|0x24) -#define VDE_TOP (LCD_CONTROL_BLOCK_BASE|0x28) - -#define PXL (LCD_CONTROL_BLOCK_BASE|0x30) -#define HCYCLE (LCD_CONTROL_BLOCK_BASE|0x34) -#define HSW (LCD_CONTROL_BLOCK_BASE|0x38) -#define HDE_START (LCD_CONTROL_BLOCK_BASE|0x3C) -#define HDE_SIZE (LCD_CONTROL_BLOCK_BASE|0x40) -#define VCYCLE (LCD_CONTROL_BLOCK_BASE|0x44) -#define VSW (LCD_CONTROL_BLOCK_BASE|0x48) -#define VDE_START (LCD_CONTROL_BLOCK_BASE|0x4C) -#define VDE_SIZE (LCD_CONTROL_BLOCK_BASE|0x50) -#define WAKEUP (LCD_CONTROL_BLOCK_BASE|0x54) -#define WSYN_DLY (LCD_CONTROL_BLOCK_BASE|0x58) -#define REGENB (LCD_CONTROL_BLOCK_BASE|0x5C) -#define VSYNIF (LCD_CONTROL_BLOCK_BASE|0x60) -#define WRSTB (LCD_CONTROL_BLOCK_BASE|0x64) -#define RDSTB (LCD_CONTROL_BLOCK_BASE|0x68) -#define ASY_DATA (LCD_CONTROL_BLOCK_BASE|0x6C) -#define ASY_DATB (LCD_CONTROL_BLOCK_BASE|0x70) -#define ASY_DATC (LCD_CONTROL_BLOCK_BASE|0x74) -#define ASY_DATD (LCD_CONTROL_BLOCK_BASE|0x78) -#define ASY_DATE (LCD_CONTROL_BLOCK_BASE|0x7C) -#define ASY_DATF (LCD_CONTROL_BLOCK_BASE|0x80) -#define ASY_DATG (LCD_CONTROL_BLOCK_BASE|0x84) -#define ASY_DATH (LCD_CONTROL_BLOCK_BASE|0x88) -#define ASY_CMDSET (LCD_CONTROL_BLOCK_BASE|0x8C) - -#define MONI (LCD_CONTROL_BLOCK_BASE|0xB0) - -#define Current (LCD_CONTROL_BLOCK_BASE|0xC0) -#define LCD (LCD_CONTROL_BLOCK_BASE|0xC4) -#define COMMAND (LCD_CONTROL_BLOCK_BASE|0xC8) - - -#define SSICTL (SPI_BLOCK_BASE|0x00) -#define SSITIME (SPI_BLOCK_BASE|0x04) -#define SSITX (SPI_BLOCK_BASE|0x08) -#define SSIRX (SPI_BLOCK_BASE|0x0C) -#define SSIINTC (SPI_BLOCK_BASE|0x10) -#define SSIINTS (SPI_BLOCK_BASE|0x14) -#define SSIDBG1 (SPI_BLOCK_BASE|0x18) -#define SSIDBG2 (SPI_BLOCK_BASE|0x1C) -#define SSIID (SPI_BLOCK_BASE|0x20) - - -#define I2CSETUP (I2C_BLOCK_BASE|0x00) -#define I2CCTRL (I2C_BLOCK_BASE|0x04) - - -#define TIMER0LOAD (PWM_BLOCK_BASE|0x00) -#define TIMER0VALUE (PWM_BLOCK_BASE|0x04) -#define TIMER0CONTROL (PWM_BLOCK_BASE|0x08) -#define TIMER0INTCLR (PWM_BLOCK_BASE|0x0C) -#define TIMER0RIS (PWM_BLOCK_BASE|0x10) -#define TIMER0MIS (PWM_BLOCK_BASE|0x14) -#define TIMER0BGLOAD (PWM_BLOCK_BASE|0x18) -#define PWM0OFF (PWM_BLOCK_BASE|0x1C) -#define TIMER1LOAD (PWM_BLOCK_BASE|0x20) -#define TIMER1VALUE (PWM_BLOCK_BASE|0x24) -#define TIMER1CONTROL (PWM_BLOCK_BASE|0x28) -#define TIMER1INTCLR (PWM_BLOCK_BASE|0x2C) -#define TIMER1RIS (PWM_BLOCK_BASE|0x30) -#define TIMER1MIS (PWM_BLOCK_BASE|0x34) -#define TIMER1BGLOAD (PWM_BLOCK_BASE|0x38) -#define PWM1OFF (PWM_BLOCK_BASE|0x3C) -#define TIMERITCR (PWM_BLOCK_BASE|0x60) -#define TIMERITOP (PWM_BLOCK_BASE|0x64) -#define PWMCR (PWM_BLOCK_BASE|0x68) -#define PWMID (PWM_BLOCK_BASE|0x6C) -#define PWMMON (PWM_BLOCK_BASE|0x70) - - -#define GPIODATA (GPIO_BLOCK_BASE|0x00) -#define GPIODIR (GPIO_BLOCK_BASE|0x04) -#define GPIOIS (GPIO_BLOCK_BASE|0x08) -#define GPIOIBE (GPIO_BLOCK_BASE|0x0C) -#define GPIOIEV (GPIO_BLOCK_BASE|0x10) -#define GPIOIE (GPIO_BLOCK_BASE|0x14) -#define GPIORIS (GPIO_BLOCK_BASE|0x18) -#define GPIOMIS (GPIO_BLOCK_BASE|0x1C) -#define GPIOIC (GPIO_BLOCK_BASE|0x20) -#define GPIOOMS (GPIO_BLOCK_BASE|0x24) -#define GPIOPC (GPIO_BLOCK_BASE|0x28) - -#define GPIOID (GPIO_BLOCK_BASE|0x30) - - -#define WKREQ (SYSTEM_BLOCK1_BASE|0x00) -#define CLKENB (SYSTEM_BLOCK1_BASE|0x04) -#define DRAMPWR (SYSTEM_BLOCK1_BASE|0x08) -#define CNT_DIS (SYSTEM_BLOCK1_BASE|0x10) -#define INTMASK (SYSTEM_BLOCK1_BASE|0x0C) -#define GPIOSEL (SYSTEM_BLOCK2_BASE|0x00) - -struct init_table { - unsigned int reg; - unsigned int val; -}; - -static struct init_table toshiba_480x800_init_table[] = { - { DPSET0, 0x4BEC0066 }, // # MDC.DPSET0 # Setup DPLL parameters - { DPSET1, 0x00000113 }, // # MDC.DPSET1 - { DPSUS, 0x00000000 }, // # MDC.DPSUS # Set DPLL oscillation enable - { DPRUN, 0x00000001 }, // # MDC.DPRUN # Release reset signal for DPLL - { 0, 15 }, // wait_ms(15); - { SYSCKENA, 0x00000001 }, // # MDC.SYSCKENA # Enable system clock output - { CLKENB, 0x000000E9 }, // # SYS.CLKENB # Enable clocks for each module (without DCLK , i2cCLK) - - { GPIO_BLOCK_BASE, 0x03FF0000 }, // # GPI .GPIODATA # GPIO2(RESET_LCD_N) set to 0 , GPIO3(eDRAM_Power) set to 0 - { GPIODIR, 0x0000024D }, // # GPI .GPIODIR # Select direction of GPIO port (0,2,3,6,9 output) - { SYSTEM_BLOCK2_BASE, 0x00000173 }, // # SYS.GPIOSEL # GPIO port multiplexing control - { GPIOPC, 0x03C300C0 }, // # GPI .GPIOPC # GPIO2,3 PD cut - { SYSTEM_BLOCK1_BASE, 0x00000000 }, // # SYS.WKREQ # Wake-up request event is VSYNC alignment - { GPIOIS, 0x00000000 }, // # GPI .GPIOIS # Set interrupt sense of GPIO - { GPIOIEV, 0x00000001 }, // # GPI .GPIOIEV # Set interrupt event of GPIO - { GPIOIC, 0x000003FF }, // # GPI .GPIOIC # GPIO interrupt clear - { GPIO_BLOCK_BASE, 0x00040004 }, // # GPI .GPIODATA # Release LCDD reset - { GPIO_BLOCK_BASE, 0x00080008 }, // # GPI .GPIODATA # eDRAM VD supply - { DRAMPWR, 0x00000001 }, // # SYS.DRAMPWR # eDRAM power up - { CLKENB, 0x0000A0EB }, // # enable eDRAM clock - - { PWMCR, 0x00000000 }, // # PWM.PWMCR # PWM output enable - { 0, 1 }, // wait_ms(1); - { SPI_BLOCK_BASE, 0x00060399}, // # SPI .SSICTL # SPI operation mode setting - { SSITIME, 0x00000100 }, // # SPI .SSITIME # SPI serial interface timing setting - { CNT_DIS, 0x00000100 }, // # SPI .SSITIME # SPI serial interface timing setting - { SPI_BLOCK_BASE, 0x0006039B }, // # SPI .SSICTL # Set SPI active mode - - { SSITX, 0x00000000 }, // # SPI.SSITX # Release from Deep Stanby mode - { 0, 2 }, // wait_ms(2); - { SSITX, 0x00000000 }, // # SPI.SSITX - { 0, 2 }, // wait_ms(2); - { SSITX, 0x00000000 }, // # SPI.SSITX - { 0, 2 }, // wait_ms(2); - - { SSITX, 0x000800BA }, // # SPI.SSITX *NOTE 1 # Command setting of SPI block - { SSITX, 0x00000111 }, // # Display mode setup(1) : Normaly Black - { SSITX, 0x00080036 }, // # Command setting of SPI block - { SSITX, 0x00000100 }, // # Memory access control - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x0008003A }, // # Command setting of SPI block - { SSITX, 0x00000160 }, // # Display mode setup(2) - { SSITX, 0x000800B1 }, // # Command setting of SPI block - { SSITX, 0x0000015D }, // # RGB Interface data format - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800B2 }, // # Command setting of SPI block - { SSITX, 0x00000133 }, // # Drivnig method - { SSITX, 0x000800B3 }, // # Command setting of SPI block - { SSITX, 0x00000122 }, // # Booster operation setup - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800B4 }, // # Command setting of SPI block - { SSITX, 0x00000102 }, // # OP-amp capability/System clock freq. division setup - { SSITX, 0x000800B5 }, // # Command setting of SPI block - { SSITX, 0x0000011E }, // # VCS Voltage adjustment (1C->1F for Rev 2) - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800B6 }, // # Command setting of SPI block - { SSITX, 0x00000127 }, // # VCOM Voltage adjustment - { SSITX, 0x000800B7 }, // # Command setting of SPI block - { SSITX, 0x00000103 }, // # Configure an external display signal - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800B9 }, // # Command setting of SPI block - { SSITX, 0x00000124 }, // # DCCK/DCEV timing setup - { SSITX, 0x000800BD }, // # Command setting of SPI block - { SSITX, 0x000001A1 }, // # ASW signal control - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800BB }, // # Command setting of SPI block - { SSITX, 0x00000100 }, // # Dummy display (white/black) count setup for QUAD Data operation - { SSITX, 0x000800BF }, // # Command setting of SPI block - { SSITX, 0x00000101 }, // # Dummy display (white/black) count setup for QUAD Data operation - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800BE }, // # Command setting of SPI block - { SSITX, 0x00000100 }, // # wait_ms(-out FR count setup (A) - { SSITX, 0x000800C0 }, // # Command setting of SPI block - { SSITX, 0x00000111 }, // # wait_ms(-out FR count setup (A) - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C1 }, // # Command setting of SPI block - { SSITX, 0x00000111 }, // # wait_ms(-out FR count setup (B) - { SSITX, 0x000800C2 }, // # Command setting of SPI block - { SSITX, 0x00000111 }, // # wait_ms(-out FR count setup (C) - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C3 }, // # Command setting of SPI block - { SSITX, 0x00080132 }, // # wait_ms(-in line clock count setup (D) - { SSITX, 0x00000132 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C4 }, // # Command setting of SPI block - { SSITX, 0x00080132 }, // # Seep-in line clock count setup (E) - { SSITX, 0x00000132 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C5 }, // # Command setting of SPI block - { SSITX, 0x00080132 }, // # wait_ms(-in line clock count setup (F) - { SSITX, 0x00000132 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C6 }, // # Command setting of SPI block - { SSITX, 0x00080132 }, // # wait_ms(-in line clock setup (G) - { SSITX, 0x00000132 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C7 }, // # Command setting of SPI block - { SSITX, 0x00080164 }, // # Gamma 1 fine tuning (1) - { SSITX, 0x00000145 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C8 }, // # Command setting of SPI block - { SSITX, 0x00000144 }, // # Gamma 1 fine tuning (2) - { SSITX, 0x000800C9 }, // # Command setting of SPI block - { SSITX, 0x00000152 }, // # Gamma 1 inclination adjustment - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800CA }, // # Command setting of SPI block - { SSITX, 0x00000100 }, // # Gamma 1 blue offset adjustment - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800EC }, // # Command setting of SPI block - { SSITX, 0x00080101 }, // # Total number of horizontal clock cycles (1) [PCLK Sync. VGA setting] - { SSITX, 0x000001FC }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800CF }, // # Command setting of SPI block - { SSITX, 0x00000101 }, // # Blanking period control (1) [PCLK Sync. Table1 for VGA] - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D0 }, // # Command setting of SPI block - { SSITX, 0x00080110 }, // # Blanking period control (2) [PCLK Sync. Table1 for VGA] - { SSITX, 0x00000104 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D1 }, // # Command setting of SPI block - { SSITX, 0x00000101 }, // # CKV timing control on/off [PCLK Sync. Table1 for VGA] - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D2 }, // # Command setting of SPI block - { SSITX, 0x00080100 }, // # CKV1,2 timing control [PCLK Sync. Table1 for VGA] - { SSITX, 0x00000128 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D3 }, // # Command setting of SPI block - { SSITX, 0x00080100 }, // # OEV timing control [PCLK Sync. Table1 for VGA] - { SSITX, 0x00000128 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D4 }, // # Command setting of SPI block - { SSITX, 0x00080126 }, // # ASW timing control (1) [PCLK Sync. Table1 for VGA] - { SSITX, 0x000001A4 }, // - { 0, 1 }, // wait_ms(1); // # Wait SPI fifo empty - { SSITX, 0x000800D5 }, // # Command setting of SPI block - { SSITX, 0x00000120 }, // # ASW timing control (2) [PCLK Sync. Table1 for VGA] - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800EF }, // # Command setting of SPI block - { SSITX, 0x00080132 }, // # Total number of horizontal clock cycles (2) [PCLK Sync. Table1 for QVGA ] - { SSITX, 0x00000100 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - - { BITMAP0, 0x032001E0 }, // MDC.BITMAP0 ); // Setup of PITCH size to Frame buffer1 - { BITMAP1, 0x032001E0 }, // MDC.BITMAP1 ); // Setup of PITCH size to Frame buffer1 - { BITMAP2, 0x014000F0 }, // MDC.BITMAP3 ); // Setup of PITCH size to Frame buffer2 - { BITMAP3, 0x014000F0 }, // MDC.BITMAP4 ); // Setup of PITCH size to Frame buffer3 - { BITMAP4, 0x014000F0 }, // MDC.BITMAP5 ); // Setup of PITCH size to Frame buffer4 - { CLKENB, 0x0000A1EB }, // SYS.CLKENB ); // DCLK supply - { PORT_ENB, 0x00000001 }, // LCD.PORT_ENB ); // Synchronous port enable - { PORT, 0x00000004 }, // LCD.PORT ); // Polarity of DE is set to high active - { PXL, 0x00000002 }, // LCD.PXL ); // ACTMODE 2 set (1st frame black data output) - { MPLFBUF, 0x00000000 }, // LCD.MPLFBUF ); // Select the reading buffer - { HCYCLE, 0x000000FD }, // LCD.HCYCLE ); // Setup to VGA size - { HSW, 0x00000003 }, // LCD.HSW - { HDE_START, 0x00000007 }, // LCD.HDE_START - { HDE_SIZE, 0x000000EF }, // LCD.HDE_SIZE - { VCYCLE, 0x00000325 }, // LCD.VCYCLE - { VSW, 0x00000001 }, // LCD.VSW - { VDE_START, 0x00000003 }, // LCD.VDE_START - { VDE_SIZE, 0x0000031F }, // LCD.VDE_SIZE - - { START, 0x00000001 }, // LCD.START ); // LCDC - Pixel data transfer start - - { 0, 10 }, // wait_ms( 10 ); - { SSITX, 0x000800BC }, // SPI.SSITX ); // Command setting of SPI block - { SSITX, 0x00000180 }, // Display data setup - { SSITX, 0x0008003B }, // Command setting of SPI block - { SSITX, 0x00000100 }, // Quad Data configuration - VGA - { 0, 1 }, // wait_ms( 1 ); // Wait SPI fifo empty - { SSITX, 0x000800B0 }, // Command setting of SPI block - { SSITX, 0x00000116 }, // Power supply ON/OFF control - { 0, 1 }, // wait_ms( 1 ); // Wait SPI fifo empty - { SSITX, 0x000800B8 }, // Command setting of SPI block - { SSITX, 0x000801FF }, // Output control - { SSITX, 0x000001F5 }, - { 0, 1 }, // wait_ms( 1); // Wait SPI fifo empty - { SSITX, 0x00000011 }, // wait_ms(-out (Command only) - { SSITX, 0x00000029 }, // Display on (Command only) - - //{ SYSTEM_BLOCK1_BASE, 0x00000002 }, // # wakeREQ -> GPIO - - { 0, 0 } -}; - -static struct init_table toshiba_480x640_init_table[] = { - { DPSET0, 0x4BEC0066 }, // # MDC.DPSET0 # Setup DPLL parameters - { DPSET1, 0x00000113 }, // # MDC.DPSET1 - { DPSUS, 0x00000000 }, // # MDC.DPSUS # Set DPLL oscillation enable - { DPRUN, 0x00000001 }, // # MDC.DPRUN # Release reset signal for DPLL - { 0, 14 }, // wait_ms(14); - { SYSCKENA, 0x00000001 }, // # MDC.SYSCKENA # Enable system clock output - { CLKENB, 0x000000EF }, // # SYS.CLKENB # Enable clocks for each module (without DCLK , i2cCLK) - { GPIO_BLOCK_BASE, 0x03FF0000 }, // # GPI .GPIODATA # GPIO2(RESET_LCD_N) set to 0 , GPIO3(eDRAM_Power) set to 0 - { GPIODIR, 0x0000024D }, // # GPI .GPIODIR # Select direction of GPIO port (0,2,3,6,9 output) - { SYSTEM_BLOCK2_BASE, 0x00000173 }, // # SYS.GPIOSEL # GPIO port multiplexing control - { GPIOPC, 0x03C300C0 }, // # GPI .GPIOPC # GPIO2,3 PD cut - { SYSTEM_BLOCK1_BASE, 0x00000000 }, // # SYS.WKREQ # Wake-up request event is VSYNC alignment - { GPIOIS, 0x00000000 }, // # GPI .GPIOIS # Set interrupt sense of GPIO - { GPIOIEV, 0x00000001 }, // # GPI .GPIOIEV # Set interrupt event of GPIO - { GPIOIC, 0x000003FF }, // # GPI .GPIOIC # GPIO interrupt clear - { GPIO_BLOCK_BASE, 0x00060006 }, // # GPI .GPIODATA # Release LCDD reset - { GPIO_BLOCK_BASE, 0x00080008 }, // # GPI .GPIODATA # eDRAM VD supply - { GPIO_BLOCK_BASE, 0x02000200 }, // # GPI .GPIODATA # TEST LED ON - { DRAMPWR, 0x00000001 }, // # SYS.DRAMPWR # eDRAM power up - { TIMER0CONTROL, 0x00000060 }, // # PWM.Timer0Control # PWM0 output stop - { PWM_BLOCK_BASE, 0x00001388 }, // # PWM.Timer0Load # PWM0 10kHz , Duty 99 (BackLight OFF) - //{PWM0OFF, 0x00000001 }, // # PWM.PWM0OFF -#if 0 - { PWM0OFF, 0x00001387 }, // SURF 100% backlight - { PWM0OFF, 0x00000000 }, // FFA 100% backlight -#endif - { PWM0OFF, 0x000009C3 }, // 50% BL - { TIMER1CONTROL, 0x00000060 }, // # PWM.Timer1Control # PWM1 output stop - { TIMER1LOAD, 0x00001388 }, // # PWM.Timer1Load # PWM1 10kHz , Duty 99 (BackLight OFF) - //{PWM1OFF, 0x00000001 }, // # PWM.PWM1OFF - { PWM1OFF, 0x00001387 }, - { TIMER0CONTROL, 0x000000E0 }, // # PWM.Timer0Control # PWM0 output start - { TIMER1CONTROL, 0x000000E0 }, // # PWM.Timer1Control # PWM1 output start - { PWMCR, 0x00000003 }, // # PWM.PWMCR # PWM output enable - { 0, 1 }, // wait_ms(1); - { SPI_BLOCK_BASE, 0x00000799 }, // # SPI .SSICTL # SPI operation mode setting - { SSITIME, 0x00000100 }, // # SPI .SSITIME # SPI serial interface timing setting - { SPI_BLOCK_BASE, 0x0000079b }, // # SPI .SSICTL # Set SPI active mode - - { SSITX, 0x00000000 }, // # SPI.SSITX # Release from Deep Stanby mode - { 0, 1 }, // wait_ms(1); - { SSITX, 0x00000000 }, // # SPI.SSITX - { 0, 1 }, // wait_ms(1); - { SSITX, 0x00000000 }, // # SPI.SSITX - { 0, 1 }, // wait_ms(1); - { SSITX, 0x000800BA }, // # SPI.SSITX *NOTE 1 # Command setting of SPI block - { SSITX, 0x00000111 }, // # Display mode setup(1) : Normaly Black - { SSITX, 0x00080036 }, // # Command setting of SPI block - { SSITX, 0x00000100 }, // # Memory access control - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800BB }, // # Command setting of SPI block - { SSITX, 0x00000100 }, // # Display mode setup(2) - { SSITX, 0x0008003A }, // # Command setting of SPI block - { SSITX, 0x00000160 }, // # RGB Interface data format - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800BF }, // # Command setting of SPI block - { SSITX, 0x00000100 }, // # Drivnig method - { SSITX, 0x000800B1 }, // # Command setting of SPI block - { SSITX, 0x0000015D }, // # Booster operation setup - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800B2 }, // # Command setting of SPI block - { SSITX, 0x00000133 }, // # Booster mode setup - { SSITX, 0x000800B3 }, // # Command setting of SPI block - { SSITX, 0x00000122 }, // # Booster frequencies setup - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800B4 }, // # Command setting of SPI block - { SSITX, 0x00000102 }, // # OP-amp capability/System clock freq. division setup - { SSITX, 0x000800B5 }, // # Command setting of SPI block - { SSITX, 0x0000011F }, // # VCS Voltage adjustment (1C->1F for Rev 2) - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800B6 }, // # Command setting of SPI block - { SSITX, 0x00000128 }, // # VCOM Voltage adjustment - { SSITX, 0x000800B7 }, // # Command setting of SPI block - { SSITX, 0x00000103 }, // # Configure an external display signal - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800B9 }, // # Command setting of SPI block - { SSITX, 0x00000120 }, // # DCCK/DCEV timing setup - { SSITX, 0x000800BD }, // # Command setting of SPI block - { SSITX, 0x00000102 }, // # ASW signal control - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800BE }, // # Command setting of SPI block - { SSITX, 0x00000100 }, // # Dummy display (white/black) count setup for QUAD Data operation - { SSITX, 0x000800C0 }, // # Command setting of SPI block - { SSITX, 0x00000111 }, // # wait_ms(-out FR count setup (A) - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C1 }, // # Command setting of SPI block - { SSITX, 0x00000111 }, // # wait_ms(-out FR count setup (B) - { SSITX, 0x000800C2 }, // # Command setting of SPI block - { SSITX, 0x00000111 }, // # wait_ms(-out FR count setup (C) - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C3 }, // # Command setting of SPI block - { SSITX, 0x0008010A }, // # wait_ms(-in line clock count setup (D) - { SSITX, 0x0000010A }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C4 }, // # Command setting of SPI block - { SSITX, 0x00080160 }, // # Seep-in line clock count setup (E) - { SSITX, 0x00000160 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C5 }, // # Command setting of SPI block - { SSITX, 0x00080160 }, // # wait_ms(-in line clock count setup (F) - { SSITX, 0x00000160 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C6 }, // # Command setting of SPI block - { SSITX, 0x00080160 }, // # wait_ms(-in line clock setup (G) - { SSITX, 0x00000160 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C7 }, // # Command setting of SPI block - { SSITX, 0x00080133 }, // # Gamma 1 fine tuning (1) - { SSITX, 0x00000143 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800C8 }, // # Command setting of SPI block - { SSITX, 0x00000144 }, // # Gamma 1 fine tuning (2) - { SSITX, 0x000800C9 }, // # Command setting of SPI block - { SSITX, 0x00000133 }, // # Gamma 1 inclination adjustment - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800CA }, // # Command setting of SPI block - { SSITX, 0x00000100 }, // # Gamma 1 blue offset adjustment - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800EC }, // # Command setting of SPI block - { SSITX, 0x00080102 }, // # Total number of horizontal clock cycles (1) [PCLK Sync. VGA setting] - { SSITX, 0x00000118 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800CF }, // # Command setting of SPI block - { SSITX, 0x00000101 }, // # Blanking period control (1) [PCLK Sync. Table1 for VGA] - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D0 }, // # Command setting of SPI block - { SSITX, 0x00080110 }, // # Blanking period control (2) [PCLK Sync. Table1 for VGA] - { SSITX, 0x00000104 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D1 }, // # Command setting of SPI block - { SSITX, 0x00000101 }, // # CKV timing control on/off [PCLK Sync. Table1 for VGA] - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D2 }, // # Command setting of SPI block - { SSITX, 0x00080100 }, // # CKV1,2 timing control [PCLK Sync. Table1 for VGA] - { SSITX, 0x0000013A }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D3 }, // # Command setting of SPI block - { SSITX, 0x00080100 }, // # OEV timing control [PCLK Sync. Table1 for VGA] - { SSITX, 0x0000013A }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D4 }, // # Command setting of SPI block - { SSITX, 0x00080124 }, // # ASW timing control (1) [PCLK Sync. Table1 for VGA] - { SSITX, 0x0000016E }, // - { 0, 1 }, // wait_ms(1); // # Wait SPI fifo empty - { SSITX, 0x000800D5 }, // # Command setting of SPI block - { SSITX, 0x00000124 }, // # ASW timing control (2) [PCLK Sync. Table1 for VGA] - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800ED }, // # Command setting of SPI block - { SSITX, 0x00080101 }, // # Total number of horizontal clock cycles (2) [PCLK Sync. Table1 for QVGA ] - { SSITX, 0x0000010A }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D6 }, // # Command setting of SPI block - { SSITX, 0x00000101 }, // # Blanking period control (1) [PCLK Sync. Table2 for QVGA] - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D7 }, // # Command setting of SPI block - { SSITX, 0x00080110 }, // # Blanking period control (2) [PCLK Sync. Table2 for QVGA] - { SSITX, 0x0000010A }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D8 }, // # Command setting of SPI block - { SSITX, 0x00000101 }, // # CKV timing control on/off [PCLK Sync. Table2 for QVGA] - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800D9 }, // # Command setting of SPI block - { SSITX, 0x00080100 }, // # CKV1,2 timing control [PCLK Sync. Table2 for QVGA] - { SSITX, 0x00000114 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800DE }, // # Command setting of SPI block - { SSITX, 0x00080100 }, // # OEV timing control [PCLK Sync. Table2 for QVGA] - { SSITX, 0x00000114 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800DF }, // # Command setting of SPI block - { SSITX, 0x00080112 }, // # ASW timing control (1) [PCLK Sync. Table2 for QVGA] - { SSITX, 0x0000013F }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800E0 }, // # Command setting of SPI block - { SSITX, 0x0000010B }, // # ASW timing control (2) [PCLK Sync. Table2 for QVGA] - { SSITX, 0x000800E2 }, // # Command setting of SPI block - { SSITX, 0x00000101 }, // # Built-in oscillator frequency division setup [Frequency division ratio : 2 (60Hq) - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800E3 }, // # Command setting of SPI block - { SSITX, 0x00000136 }, // # Built-in oscillator clock count setup - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800E4 }, // # Command setting of SPI block - { SSITX, 0x00080100 }, // # CKV timing control for using build-in osc - { SSITX, 0x00000103 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800E5 }, // # Command setting of SPI block - { SSITX, 0x00080102 }, // # OEV timing control for using build-in osc - { SSITX, 0x00000104 }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800E6 }, // # Command setting of SPI block - { SSITX, 0x00000103 }, // # DCEV timing control for using build-in osc - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800E7 }, // # Command setting of SPI block - { SSITX, 0x00080104 }, // # ASW timing setup for using build-in osc(1) - { SSITX, 0x0000010A }, // - { 0, 2 }, // wait_ms(2); // # Wait SPI fifo empty - { SSITX, 0x000800E8 }, // # Command setting of SPI block - { SSITX, 0x00000104 }, // # ASW timing setup for using build-in osc(2) - - - { CLKENB, 0x000001EF }, // # SYS.CLKENB # DCLK enable - { START, 0x00000000 }, // # LCD.START # LCDC wait_ms( mode - { WRSTB, 0x0000003F }, // # LCD.WRSTB # write_client_reg( strobe - { RDSTB, 0x00000432 }, // # LCD.RDSTB # Read strobe - { PORT_ENB, 0x00000002 }, // # LCD.PORT_ENB # Asynchronous port enable - { VSYNIF, 0x00000000 }, // # LCD.VSYNCIF # VSYNC I/F mode set - { ASY_DATA, 0x80000000 }, // # LCD.ASY_DATx # Index setting of SUB LCDD - { ASY_DATB, 0x00000001 }, // # Oscillator start - { ASY_CMDSET, 0x00000005 }, // # LCD.ASY_CMDSET # Direct command transfer enable - { ASY_CMDSET, 0x00000004 }, // # LCD.ASY_CMDSET # Direct command transfer disable - { 0, 10 }, // wait_ms(10); - { ASY_DATA, 0x80000000 }, // # LCD.ASY_DATx # DUMMY write_client_reg(@*NOTE2 - { ASY_DATB, 0x80000000 }, // - { ASY_DATC, 0x80000000 }, // - { ASY_DATD, 0x80000000 }, // - { ASY_CMDSET, 0x00000009 }, // # LCD.ASY_CMDSET - { ASY_CMDSET, 0x00000008 }, // # LCD.ASY_CMDSET - { ASY_DATA, 0x80000007 }, // # LCD.ASY_DATx # Index setting of SUB LCDD - { ASY_DATB, 0x00004005 }, // # LCD driver control - { ASY_CMDSET, 0x00000005 }, // # LCD.ASY_CMDSET # Direct command transfer enable - { ASY_CMDSET, 0x00000004 }, // # LCD.ASY_CMDSET # Direct command transfer disable - { 0, 20 }, // wait_ms(20); - { ASY_DATA, 0x80000059 }, // # LCD.ASY_DATx # Index setting of SUB LCDD - { ASY_DATB, 0x00000000 }, // # LTPS I/F control - { ASY_CMDSET, 0x00000005 }, // # LCD.ASY_CMDSET # Direct command transfer enable - { ASY_CMDSET, 0x00000004 }, // # LCD.ASY_CMDSET # Direct command transfer disable - - { VSYNIF, 0x00000001 }, // # LCD.VSYNCIF # VSYNC I/F mode OFF - { PORT_ENB, 0x00000001 }, // # LCD.PORT_ENB # SYNC I/F output select - - /******************************/ - - { VSYNIF, 0x00000001 }, // VSYNC I/F mode OFF - { PORT_ENB, 0x00000001 }, // SYNC I/F mode ON - - { BITMAP1, 0x01E000F0 }, // MDC.BITMAP2 ); // Setup of PITCH size to Frame buffer1 - { BITMAP2, 0x01E000F0 }, // MDC.BITMAP3 ); // Setup of PITCH size to Frame buffer2 - { BITMAP3, 0x01E000F0 }, // MDC.BITMAP4 ); // Setup of PITCH size to Frame buffer3 - { BITMAP4, 0x00DC00B0 }, // MDC.BITMAP5 ); // Setup of PITCH size to Frame buffer4 - { CLKENB, 0x000001EF }, // SYS.CLKENB ); // DCLK supply - { PORT_ENB, 0x00000001 }, // LCD.PORT_ENB ); // Synchronous port enable - { PORT, 0x00000004 }, // LCD.PORT ); // Polarity of DE is set to high active - { PXL, 0x00000002 }, // LCD.PXL ); // ACTMODE 2 set (1st frame black data output) - { MPLFBUF, 0x00000000 }, // LCD.MPLFBUF ); // Select the reading buffer - { HCYCLE, 0x0000010b }, // LCD.HCYCLE ); // Setup to VGA size - { HSW, 0x00000003 }, // LCD.HSW - { HDE_START, 0x00000007 }, // LCD.HDE_START - { HDE_SIZE, 0x000000EF }, // LCD.HDE_SIZE - { VCYCLE, 0x00000285 }, // LCD.VCYCLE - { VSW, 0x00000001 }, // LCD.VSW - { VDE_START, 0x00000003 }, // LCD.VDE_START - { VDE_SIZE, 0x0000027F }, // LCD.VDE_SIZE - - { START, 0x00000001 }, // LCD.START ); // LCDC - Pixel data transfer start - - { 0, 10 }, // wait_ms( 10 ); - { SSITX, 0x000800BC }, // SPI.SSITX ); // Command setting of SPI block - { SSITX, 0x00000180 }, // Display data setup - { SSITX, 0x0008003B }, // Command setting of SPI block - { SSITX, 0x00000100 }, // Quad Data configuration - VGA - { 0, 1 }, // wait_ms( 1 ); // Wait SPI fifo empty - { SSITX, 0x000800B0 }, // Command setting of SPI block - { SSITX, 0x00000116 }, // Power supply ON/OFF control - { 0, 1 }, // wait_ms( 1 ); // Wait SPI fifo empty - { SSITX, 0x000800B8 }, // Command setting of SPI block - { SSITX, 0x000801FF }, // Output control - { SSITX, 0x000001F5 }, - { 0, 1 }, // wait_ms( 1); // Wait SPI fifo empty - { SSITX, 0x00000011 }, // wait_ms(-out (Command only) - { SSITX, 0x00000029 }, // Display on (Command only) - - { SYSTEM_BLOCK1_BASE, 0x00000002 }, // # wakeREQ -> GPIO - - { 0, 0 } -}; - -static void _panel_init(struct init_table *init_table) -{ - unsigned n; - - dprintf(INFO, "panel_init()\n"); - - n = 0; - while (init_table[n].reg != 0 || init_table[n].val != 0) { - if (init_table[n].reg != 0) - mddi_remote_write(init_table[n].val, init_table[n].reg); - else - mdelay(init_table[n].val); - n++; - } - - dprintf(INFO, "panel_init() done\n"); -} - -void panel_init(struct mddi_client_caps *client_caps) -{ - switch(client_caps->manufacturer_name) { - case 0xd263: // Toshiba - dprintf(INFO, "Found Toshiba panel\n"); - _panel_init(toshiba_480x800_init_table); - break; - case 0x4474: //?? - if (client_caps->product_code == 0xc065) - dprintf(INFO, "Found WVGA panel\n"); - break; - } -} - -void panel_poweron(void) -{ - gpio_set(88, 0); - gpio_config(88, GPIO_OUTPUT); - udelay(10); - gpio_set(88, 1); - mdelay(10); - - //mdelay(1000); // uncomment for second stage boot -} - -void panel_backlight(int on) -{} diff --git a/lk/platform/qsd8k/platform.c b/lk/platform/qsd8k/platform.c deleted file mode 100644 index 46ffa37..0000000 --- a/lk/platform/qsd8k/platform.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google, Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include -#include -#include -#include - -static struct fbcon_config *fb_config; - -void platform_init_interrupts(void); -void platform_init_timer(); - -void uart3_clock_init(void); -void uart_init(void); - -struct fbcon_config *lcdc_init(void); - -void platform_early_init(void) -{ - //uart3_clock_init(); - //uart_init(); - - platform_init_interrupts(); - platform_init_timer(); -} - -void platform_init(void) -{ - dprintf(INFO, "platform_init()\n"); -#if (!ENABLE_NANDWRITE) - //cedesmith: this will hang - //acpu_clock_init(); -#endif -} - -void display_init(void) -{ - struct fbcon_config *fb_cfg; - -#if DISPLAY_TYPE_MDDI - fb_config = mddi_init(); - ASSERT(fb_config); - fbcon_setup(fb_config); -#endif - -#if DISPLAY_TYPE_LCDC - fb_config = lcdc_init(); - ASSERT(fb_config); - fbcon_setup(fb_config); -#endif - -} - diff --git a/lk/platform/qsd8k/rules.mk b/lk/platform/qsd8k/rules.mk deleted file mode 100644 index 73344c4..0000000 --- a/lk/platform/qsd8k/rules.mk +++ /dev/null @@ -1,25 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -ARCH := arm -ARM_CPU := cortex-a8 -#arm1136j-s -CPU := generic - -#DEFINES += WITH_CPU_EARLY_INIT=1 WITH_CPU_WARM_BOOT=1 MEMBASE=0 -#DEFINES += WITH_CPU_EARLY_INIT=1 - -INCLUDES += -I$(LOCAL_DIR)/include - -DEVS += fbcon -MODULES += dev/fbcon - -OBJS += \ - $(LOCAL_DIR)/arch_init.o \ - $(LOCAL_DIR)/interrupts.o \ - $(LOCAL_DIR)/gpio.o \ - $(LOCAL_DIR)/acpuclock.o - -LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld - -include platform/msm_shared/rules.mk - diff --git a/lk/platform/rules.mk b/lk/platform/rules.mk deleted file mode 100644 index c1acc50..0000000 --- a/lk/platform/rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -# shared platform code -OBJS += \ - $(LOCAL_DIR)/debug.o \ - $(LOCAL_DIR)/init.o - diff --git a/lk/project/htcleo.mk b/lk/project/htcleo.mk deleted file mode 100644 index f5b6bec..0000000 --- a/lk/project/htcleo.mk +++ /dev/null @@ -1,11 +0,0 @@ -# top level project rules for the qsd8250_surf project -# -LOCAL_DIR := $(GET_LOCAL_DIR) - -TARGET := htcleo - -MODULES += app/aboot - -#DEFINES += WITH_DEBUG_DCC=1 -#DEFINES += WITH_DEBUG_UART=1 -DEFINES += WITH_DEBUG_FBCON=1 diff --git a/lk/target/htcleo/atags.c b/lk/target/htcleo/atags.c deleted file mode 100644 index cd98bb6..0000000 --- a/lk/target/htcleo/atags.c +++ /dev/null @@ -1,21 +0,0 @@ -unsigned* target_atag_mem(unsigned* ptr) -{ - -#if 0 - //MEM TAG - *ptr++ = 4; - *ptr++ = 0x54410002; - //*ptr++ = 0x1e400000; //mem size from haret - //*ptr++ = 0x1E7C0000; //mem size from kernel config - *ptr++ = 0x1CFC0000; //mem size from kernel config with bravo dsp - *ptr++ = 0x11800000; //mem base -#endif - - //add atag to notify nand boot - *ptr++ = 4; - *ptr++ = 0x4C47414D; // NAND atag (MAGL :)) - *ptr++ = 0x004b4c63; // cLK signature - *ptr++ = 13; // cLK version number - - return ptr; -} diff --git a/lk/target/htcleo/htcleo_boot.c b/lk/target/htcleo/htcleo_boot.c deleted file mode 100644 index 031316b..0000000 --- a/lk/target/htcleo/htcleo_boot.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include -#include -#include - -// cedesmith: we need to stop interrupts or kernel will receive dex interrupt to early and crash -#define VIC_REG(off) (MSM_VIC_BASE + (off)) -#define VIC_INT_EN0 VIC_REG(0x0010) -#define VIC_INT_EN1 VIC_REG(0x0014) -#define VIC_INT_CLEAR0 VIC_REG(0x00B0) -#define VIC_INT_CLEAR1 VIC_REG(0x00B4) -#define VIC_INT_MASTEREN VIC_REG(0x0068) /* 1: IRQ, 2: FIQ */ - -void htcleo_disable_interrupts(void) -{ - //clear current pending interrupts - writel(0xffffffff, VIC_INT_CLEAR0); - writel(0xffffffff, VIC_INT_CLEAR1); - - //disable all - writel(0, VIC_INT_EN0); - writel(0, VIC_INT_EN1); - //disable interrupts - writel(0, VIC_INT_MASTEREN); -} - -void htcleo_boot_s(void* kernel,unsigned machtype,void* tags); -void htcleo_boot(void* kernel,unsigned machtype,void* tags) -{ - htcleo_disable_interrupts(); - htcleo_boot_s(kernel, machtype, tags); -} diff --git a/lk/target/htcleo/htcleo_boot_s.S b/lk/target/htcleo/htcleo_boot_s.S deleted file mode 100644 index d08ccda..0000000 --- a/lk/target/htcleo/htcleo_boot_s.S +++ /dev/null @@ -1,86 +0,0 @@ -.text -.code 32 - -.globl htcleo_boot_s -htcleo_boot_s: - // save registers - MOV r9, r0 - - //cedesmith: - // cotulla's code so kernel will not crash. aux control register - // found more info here: http://www.spinics.net/lists/linux-arm-msm/msg00492.html - // it looks it is Martijn Stolk's code - MRC p15, 0, r0, c1, c0, 1 - BIC r0, r0, #0x40 //; (1<<6) IBE (0 = executes the CP15 Invalidate All and Invalidate by MVA instructions as a NOP instruction, reset value) - BIC r0, r0, #0x200000 //; (1<<21) undocumented bit - MCR p15, 0, r0, c1, c0, 1 - - //; Disable VFP - MOV R0, #0 - FMXR FPEXC, r0 - - //; ICIALL to invalidate entire I-Cache - MCR p15, 0, r0, c7, c5, 0 //; ICIALLU - - // disable dcache and i cache - MRC p15, 0, r0, c1, c0, 0 - BIC r0, r0, #(1<<0) // disable mmu ( already disabled ) - BIC r0, r0, #(1<<2) // disable data cache - BIC r0, r0, #(1<<12) // disable instruction cache - MCR p15, 0, r0, c1, c0, 0 - ISB - - //; DCIALL to invalidate L2 cache bank (needs to be run 4 times, once per bank) - //; This must be done early in code (prior to enabling the caches) - MOV r0, #0x2 - MCR p15, 0, r0, c9, c0, 6 //; DCIALL bank D ([15:14] == 2'b00) - ORR r0, r0, #0x00004000 - MCR p15, 0, r0, c9, c0, 6 //; DCIALL bank C ([15:14] == 2'b01) - ADD r0, r0, #0x00004000 - MCR p15, 0, r0, c9, c0, 6 //; DCIALL bank B ([15:14] == 2'b10) - ADD r0, r0, #0x00004000 - MCR p15, 0, r0, c9, c0, 6 //; DCIALL bank A ([15:14] == 2'b11) - //; DCIALL to invalidate entire D-Cache - MOV r0, #0 - MCR p15, 0, r0, c9, c0, 6 //; DCIALL r0 - DSB - ISB - - //; Invalidate the UTLB - MOV r0, #0 - MCR p15, 0, r0, c8, c7, 0 //; UTLBIALL - ISB - - - //flashlight to see we get here - //ldr r4, =0xa9000864 @ bank6_in (phys) - //ldr r5, =0xa9000814 @ bank6_out (phys) - //orr r6, r4, #0x200000 @ 22nd bit for flash - //str r6, [r5, #0] @ store in out (enables bright for 500ms, limited by hardware) - - MOV R0, #0 - BLX R9 - -.ltorg - -.global htcleo_flash -htcleo_flash: - ldr r4, =0xa9000864 - ldr r5, =0xa9000814 - orr r6, r4, #0x200000 - str r6, [r5, #0] - bx lr -.ltorg - - -// code to put at 0, get opcode from debug.lst -.global pc_reset_vector -.global pc_reset_vector_end -pc_reset_vector: - mov r0, #0x11800000 - ldr pc, [r0, #4] - //mov pc, #MEMBASE - #ldr pc, #MEMBASE - BX LR -pc_reset_vector_end: -.ltorg diff --git a/lk/target/htcleo/include/target/display.h b/lk/target/htcleo/include/target/display.h deleted file mode 100644 index f5f02b9..0000000 --- a/lk/target/htcleo/include/target/display.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Code Aurora Forum, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef _TARGET_QSD8250_SURF_DISPLAY_H -#define _TARGET_QSD8250_SURF_DISPLAY_H - -#define TARGET_XRES 480 -#define TARGET_YRES 800 - -#define LCDC_FB_WIDTH 480 -#define LCDC_FB_HEIGHT 800 - -#define LCDC_HSYNC_PULSE_WIDTH_DCLK 2 -#define LCDC_HSYNC_BACK_PORCH_DCLK 30 -#define LCDC_HSYNC_FRONT_PORCH_DCLK 2 -#define LCDC_HSYNC_SKEW_DCLK 0 - -#define LCDC_VSYNC_PULSE_WIDTH_LINES 2 -#define LCDC_VSYNC_BACK_PORCH_LINES 5 -#define LCDC_VSYNC_FRONT_PORCH_LINES 2 - -#endif diff --git a/lk/target/htcleo/init.c b/lk/target/htcleo/init.c deleted file mode 100644 index a0ea61d..0000000 --- a/lk/target/htcleo/init.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * author: cedesmith - * license: GPL - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "version.h" - -#define LINUX_MACHTYPE 2524 -#define HTCLEO_FLASH_OFFSET 0x219 - -static struct ptable flash_ptable; - -// align data on a 512 boundary so will not be interrupted in nbh -static struct ptentry board_part_list[MAX_PTABLE_PARTS] __attribute__ ((aligned (512))) = { - { - .name = "PTABLE-MB", // PTABLE-BLK or PTABLE-MB for length in MB or BLOCKS - }, - { - .name = "misc", - .length = 1 /* In MB */, - }, - { - .name = "recovery", - .length = 5 /* In MB */, - }, - { - .name = "boot", - .length = 5 /* In MB */, - }, - { - .name = "system", - .length = SYSTEM_PARTITION_SIZE /* In MB */, - }, - { - .length = CACHE_PARTITION_SIZE /* In MB */, - .name = "cache", - }, - { - .name = "userdata", - }, -}; - - - -static unsigned num_parts = sizeof(board_part_list)/sizeof(struct ptentry); -//#define part_empty(p) (p->name[0]==0 && p->start==0 && p->length==0 && p->flags==0 && p->type==0 && p->perm==0) -#define IS_PART_EMPTY(p) (p->name[0]==0) - -extern unsigned load_address; -extern unsigned boot_into_recovery; - -void keypad_init(void); -void display_init(void); -void display_lk_version(); -void htcleo_ptable_dump(struct ptable *ptable); -void cmd_dmesg(const char *arg, void *data, unsigned sz); -void reboot(unsigned reboot_reason); -void target_display_init(); -unsigned get_boot_reason(void); -void cmd_oem_register(); -void target_init(void) -{ - struct flash_info *flash_info; - unsigned start_block; - unsigned blocks_per_plen = 1; //blocks per partition length - unsigned nand_num_blocks; - - keys_init(); - keypad_init(); - - uint16_t keys[] = {KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_SOFT1, KEY_SEND, KEY_CLEAR, KEY_BACK, KEY_HOME}; - for(unsigned i=0; i< sizeof(keys)/sizeof(uint16_t); i++) - if (keys_get_state(keys[i]) != 0) - { - display_init(); - display_lk_version(); - //dprintf(ALWAYS,"key %d pressed\n", i); - break; - } - dprintf(INFO, "htcleo_init\n"); - - if(get_boot_reason()==2) // booting for offmode charging, start recovery so kernel will charge phone - { - boot_into_recovery = 1; - //dprintf(INFO, "reboot needed... \n"); - //reboot(0); - } - dprintf(ALWAYS, "load address %x\n", load_address); - - dprintf(INFO, "flash init\n"); - flash_init(); - flash_info = flash_get_info(); - ASSERT(flash_info); - ASSERT(flash_info->num_blocks); - nand_num_blocks = flash_info->num_blocks; - - ptable_init(&flash_ptable); - - if( strcmp(board_part_list[0].name,"PTABLE-BLK")==0 ) blocks_per_plen =1 ; - else if( strcmp(board_part_list[0].name,"PTABLE-MB")==0 ) blocks_per_plen = (1024*1024)/flash_info->block_size; - else panic("Invalid partition table\n"); - - start_block = HTCLEO_FLASH_OFFSET; - for (unsigned i = 1; i < num_parts; i++) - { - struct ptentry *ptn = &board_part_list[i]; - if( IS_PART_EMPTY(ptn) ) break; - int len = ((ptn->length) * blocks_per_plen); - - if( ptn->start == 0 ) ptn->start = start_block; - else if( ptn->start < start_block) panic("Partition %s start %x < %x\n", ptn->name, ptn->start, start_block); - - if(ptn->length == 0) - { - unsigned length_for_prt = 0; - if( istart; - } - else - { - for (unsigned j = i+1; j < num_parts; j++) - { - struct ptentry *temp_ptn = &board_part_list[j]; - if( IS_PART_EMPTY(temp_ptn) ) break; - if( temp_ptn->length==0 ) panic("partition %s and %s have variable length\n", ptn->name, temp_ptn->name); - length_for_prt += ((temp_ptn->length) * blocks_per_plen); - } - } - len = (nand_num_blocks - 1 - 186 - 4) - (ptn->start + length_for_prt); - ASSERT(len >= 0); - } - - start_block = ptn->start + len; - ptable_add(&flash_ptable, ptn->name, ptn->start, len, ptn->flags, TYPE_APPS_PARTITION, PERM_WRITEABLE); - } - - htcleo_ptable_dump(&flash_ptable); - flash_set_ptable(&flash_ptable); -} -void display_lk_version() -{ - char *version = "cedesmith's LK (CLK) v"; - strcat(version,cLK_version); - strcat(version,"\n"); - _dputs(version); -} -struct fbcon_config* fbcon_display(void); -void htcleo_fastboot_init() -{ - // off charge and recovery boot failed, reboot to normal mode - if(get_boot_reason()==2) reboot(0); - - // display not initialized - if(fbcon_display()==NULL) - { - display_init(); - display_lk_version(); - htcleo_ptable_dump(&flash_ptable); - } - - cmd_oem_register(); -} -void target_early_init(void) -{ - //cedesmith: write reset vector while we can as MPU kicks in after flash_init(); - writel(0xe3a00546, 0); //mov r0, #0x11800000 - writel(0xe590f004, 4); //ldr r15, [r0, #4] -} -unsigned board_machtype(void) -{ - return LINUX_MACHTYPE; -} - -void reboot_device(unsigned reboot_reason) -{ - writel(reboot_reason, 0x2FFB0000); - writel(reboot_reason^0x004b4c63, 0x2FFB0004); //XOR with cLK signature - reboot(reboot_reason); -} - -unsigned boot_reason = 0xFFFFFFFF; -unsigned android_reboot_reason = 0; -unsigned check_reboot_mode(void); -unsigned get_boot_reason(void) -{ - if(boot_reason==0xFFFFFFFF) - { - boot_reason = readl(MSM_SHARED_BASE+0xef244); - dprintf(INFO, "boot reason %x\n", boot_reason); - if(boot_reason!=2) - { - if(readl(0x2FFB0000)==(readl(0x2FFB0004)^0x004b4c63)) - { - android_reboot_reason = readl(0x2FFB0000); - dprintf(INFO, "android reboot reason %x\n", android_reboot_reason); - writel(0, 0x2FFB0000); - } - } - } - return boot_reason; -} -unsigned check_reboot_mode(void) -{ - get_boot_reason(); - return android_reboot_reason; -} - -unsigned target_pause_for_battery_charge(void) -{ - if (get_boot_reason() == 2) return 1; - return 0; -} - -int target_is_emmc_boot(void) -{ - return 0; -} - -void htcleo_ptable_dump(struct ptable *ptable) -{ - struct ptentry *ptn; - int i; - - for (i = 0; i < ptable->count; ++i) { - ptn = &ptable->parts[i]; - dprintf(INFO, "ptn %d name='%s' start=%08x len=%08x end=%08x \n",i, ptn->name, ptn->start, ptn->length, ptn->start+ptn->length); - } -} - -//cedesmith: current version of qsd8k platform missing display_shutdown so add it -void lcdc_shutdown(void); -void display_shutdown(void) -{ - lcdc_shutdown(); -} diff --git a/lk/target/htcleo/keypad.c b/lk/target/htcleo/keypad.c deleted file mode 100644 index 97a5c13..0000000 --- a/lk/target/htcleo/keypad.c +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include - -#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0])) - -static unsigned int htcleo_row_gpios[] = { 33, 32, 31 }; -static unsigned int htcleo_col_gpios[] = { 42, 41, 40 }; - -#define KEYMAP_INDEX(row, col) ((row)*ARRAY_SIZE(htcleo_col_gpios) + (col)) - -static const unsigned short htcleo_keymap[ARRAY_SIZE(htcleo_col_gpios) * ARRAY_SIZE(htcleo_row_gpios)] = { - [KEYMAP_INDEX(0, 0)] = KEY_VOLUMEUP, // Volume Up - [KEYMAP_INDEX(0, 1)] = KEY_VOLUMEDOWN, // Volume Down - [KEYMAP_INDEX(1, 0)] = KEY_SOFT1, // Windows Button - [KEYMAP_INDEX(1, 1)] = KEY_SEND, // Dial Button - [KEYMAP_INDEX(1, 2)] = KEY_CLEAR, // Hangup Button - [KEYMAP_INDEX(2, 0)] = KEY_BACK, // Back Button - [KEYMAP_INDEX(2, 1)] = KEY_HOME, // Home Button -}; - -static struct gpio_keypad_info htcleo_keypad_info = { - .keymap = htcleo_keymap, - .output_gpios = htcleo_row_gpios, - .input_gpios = htcleo_col_gpios, - .noutputs = ARRAY_SIZE(htcleo_row_gpios), - .ninputs = ARRAY_SIZE(htcleo_col_gpios), - .settle_time = 40 /* msec */, - .poll_time = 20 /* msec */, - .flags = GPIOKPF_DRIVE_INACTIVE, -}; - -void keypad_init(void) -{ - gpio_keypad_init(&htcleo_keypad_info); -} diff --git a/lk/target/htcleo/nand.c b/lk/target/htcleo/nand.c deleted file mode 100644 index 15b529a..0000000 --- a/lk/target/htcleo/nand.c +++ /dev/null @@ -1,1090 +0,0 @@ - /* - * Copyright (c) 2008, Google Inc. - * All rights reserved. - * Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "dmov.h" - -#define VERBOSE 0 -#define VERIFY_WRITE 0 - -#define NUM_PROTECTED_BLOCKS 0x212 - -static void *flash_spare; -static void *flash_data; - - -typedef struct dmov_ch dmov_ch; -struct dmov_ch -{ - volatile unsigned cmd; - volatile unsigned result; - volatile unsigned status; - volatile unsigned config; -}; - -static void dmov_prep_ch(dmov_ch *ch, unsigned id) -{ - ch->cmd = DMOV_CMD_PTR(id); - ch->result = DMOV_RSLT(id); - ch->status = DMOV_STATUS(id); - ch->config = DMOV_CONFIG(id); -} - -#define SRC_CRCI_NAND_CMD CMD_SRC_CRCI(DMOV_NAND_CRCI_CMD) -#define DST_CRCI_NAND_CMD CMD_DST_CRCI(DMOV_NAND_CRCI_CMD) -#define SRC_CRCI_NAND_DATA CMD_SRC_CRCI(DMOV_NAND_CRCI_DATA) -#define DST_CRCI_NAND_DATA CMD_DST_CRCI(DMOV_NAND_CRCI_DATA) - -#define NAND_CFG0_RAW 0xA80420C0 -#define NAND_CFG1_RAW 0x5045D - -static unsigned CFG0, CFG1; - -#define CFG1_WIDE_FLASH (1U << 1) - -#define paddr(n) ((unsigned) (n)) - -static int dmov_exec_cmdptr(unsigned id, unsigned *ptr) -{ - dmov_ch ch; - unsigned n; - - dmov_prep_ch(&ch, id); - - writel(DMOV_CMD_PTR_LIST | DMOV_CMD_ADDR(paddr(ptr)), ch.cmd); - - while(!(readl(ch.status) & DMOV_STATUS_RSLT_VALID)) ; - - n = readl(ch.status); - while(DMOV_STATUS_RSLT_COUNT(n)) { - n = readl(ch.result); - if(n != 0x80000002) { - dprintf(CRITICAL, "ERROR: result: %x\n", n); - dprintf(CRITICAL, "ERROR: flush: %x %x %x %x\n", - readl(DMOV_FLUSH0(DMOV_NAND_CHAN)), - readl(DMOV_FLUSH1(DMOV_NAND_CHAN)), - readl(DMOV_FLUSH2(DMOV_NAND_CHAN)), - readl(DMOV_FLUSH3(DMOV_NAND_CHAN))); - return -1; - } - n = readl(ch.status); - } - return 0; -} - -static struct flash_info flash_info; -static unsigned flash_pagesize = 0; - -struct flash_identification { - unsigned flash_id; - unsigned mask; - unsigned density; - unsigned widebus; - unsigned pagesize; - unsigned blksize; - unsigned oobsize; -}; - -static struct flash_identification supported_flash[] = -{ - /* Flash ID ID Mask Density(MB) Wid Pgsz Blksz oobsz Manuf */ - {0x00000000, 0xFFFFFFFF, 0, 0, 0, 0, 0}, /*ONFI*/ - {0x1500aaec, 0xFF00FFFF, (256<<20), 0, 2048, (2048<<6), 64}, /*Sams*/ - {0x5500baec, 0xFF00FFFF, (256<<20), 1, 2048, (2048<<6), 64}, /*Sams*/ - {0x1500aa98, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64}, /*Tosh*/ - {0x5500ba98, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64}, /*Tosh*/ - {0xd580b12c, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64}, /*Micr*/ - {0x5590bc2c, 0xFFFFFFFF, (512<<20), 1, 2048, (2048<<6), 64}, /*Micr*/ - {0x1580aa2c, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64}, /*Micr*/ - {0x1590aa2c, 0xFFFFFFFF, (256<<20), 0, 2048, (2048<<6), 64}, /*Micr*/ - {0x1590ac2c, 0xFFFFFFFF, (512<<20), 0, 2048, (2048<<6), 64}, /*Micr*/ - {0x5580baad, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64}, /*Hynx*/ - {0x5510baad, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64}, /*Hynx*/ - {0x6600bcec, 0xFF00FFFF, (512<<20), 1, 4096, (4096<<6), 128}, /*Sams*/ - - /*added from kernel nand */ - {0x0000aaec, 0x0000FFFF, (256<<20), 1, 2048, (2048<<6), 64}, /*Samsung 2Gbit*/ - {0x0000acec, 0x0000FFFF, (512<<20), 1, 2048, (2048<<6), 64}, /*Samsung 4Gbit*/ - {0x0000bcec, 0x0000FFFF, (512<<20), 1, 2048, (2048<<6), 64}, /*Samsung 4Gbit*/ - {0x6601b3ec, 0xFFFFFFFF, (1024<<20),1, 4096, (4096<<6), 128}, /*Samsung 8Gbit 4Kpage*/ - {0x0000b3ec, 0x0000FFFF, (1024<<20),1, 2048, (2048<<6), 64}, /*Samsung 8Gbit*/ - {0x0000ba2c, 0x0000FFFF, (256<<20), 1, 2048, (2048<<6), 64}, /*Micron 2Gbit*/ - {0x0000bc2c, 0x0000FFFF, (512<<20), 1, 2048, (2048<<6), 64}, /*Micron 4Gbit*/ - {0x0000b32c, 0x0000FFFF, (1024<<20),1, 2048, (2048<<6), 64}, /*Micron 8Gbit*/ - {0x0000baad, 0x0000FFFF, (256<<20), 1, 2048, (2048<<6), 64}, /*Hynix 2Gbit*/ - {0x0000bcad, 0x0000FFFF, (512<<20), 1, 2048, (2048<<6), 64}, /*Hynix 4Gbit*/ - {0x0000b3ad, 0x0000FFFF, (1024<<20),1, 2048, (2048<<6), 64}, /*Hynix 8Gbit*/ - - /* Note: Width flag is 0 for 8 bit Flash and 1 for 16 bit flash */ - /* Note: The First row will be filled at runtime during ONFI probe */ - -}; -static void set_nand_configuration(char type) -{ - ASSERT(type==TYPE_APPS_PARTITION); -} - -static void flash_nand_read_id(dmov_s *cmdlist, unsigned *ptrlist) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - unsigned *data = ptrlist + 4; - - data[0] = 0 | 4; - data[1] = NAND_CMD_FETCH_ID; - data[2] = 1; - data[3] = 0; - data[4] = 0; - data[5] = 0; - data[6] = 0; - data[7] = 0xAAD40000; /* Default value for CFG0 for reading device id */ - - /* Read NAND device id */ - cmd[0].cmd = 0 | CMD_OCB; - cmd[0].src = paddr(&data[7]); - cmd[0].dst = NAND_DEV0_CFG0; - cmd[0].len = 4; - - cmd[1].cmd = 0; - cmd[1].src = NAND_SFLASHC_BURST_CFG; - cmd[1].dst = paddr(&data[5]); - cmd[1].len = 4; - - cmd[2].cmd = 0; - cmd[2].src = paddr(&data[6]); - cmd[2].dst = NAND_SFLASHC_BURST_CFG; - cmd[2].len = 4; - - cmd[3].cmd = 0; - cmd[3].src = paddr(&data[0]); - cmd[3].dst = NAND_FLASH_CHIP_SELECT; - cmd[3].len = 4; - - cmd[4].cmd = DST_CRCI_NAND_CMD; - cmd[4].src = paddr(&data[1]); - cmd[4].dst = NAND_FLASH_CMD; - cmd[4].len = 4; - - cmd[5].cmd = 0; - cmd[5].src = paddr(&data[2]); - cmd[5].dst = NAND_EXEC_CMD; - cmd[5].len = 4; - - cmd[6].cmd = SRC_CRCI_NAND_DATA; - cmd[6].src = NAND_FLASH_STATUS; - cmd[6].dst = paddr(&data[3]); - cmd[6].len = 4; - - cmd[7].cmd = 0; - cmd[7].src = NAND_READ_ID; - cmd[7].dst = paddr(&data[4]); - cmd[7].len = 4; - - cmd[8].cmd = CMD_OCU | CMD_LC; - cmd[8].src = paddr(&data[5]); - cmd[8].dst = NAND_SFLASHC_BURST_CFG; - cmd[8].len = 4; - - ptr[0] = (paddr(cmd) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "status: %x\n", data[3]); -#endif - - flash_info.id = data[4]; - flash_info.vendor = data[4] & 0xff; - flash_info.device = (data[4] >> 8) & 0xff; - return; -} - -static int flash_nand_block_isbad(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - unsigned *data = ptrlist + 4; - char buf[4]; - unsigned cwperpage; - - if (page < (NUM_PROTECTED_BLOCKS<<6)) - { - //protected blocks are always good - return 0; - } - - cwperpage = (flash_pagesize >> 9); - - /* Check first page of this block */ - if(page & 63) - page = page - (page & 63); - - /* Check bad block marker */ - data[0] = NAND_CMD_PAGE_READ; /* command */ - - /* addr0 */ - if (CFG1 & CFG1_WIDE_FLASH) - data[1] = (page << 16) | ((528*(cwperpage-1)) >> 1); - else - data[1] = (page << 16) | (528*(cwperpage-1)); - - data[2] = (page >> 16) & 0xff; /* addr1 */ - data[3] = 0 | 4; /* chipsel */ - data[4] = NAND_CFG0_RAW & ~(7U << 6); /* cfg0 */ - data[5] = NAND_CFG1_RAW | (CFG1 & CFG1_WIDE_FLASH); /* cfg1 */ - data[6] = 1; - data[7] = CLEAN_DATA_32; /* flash status */ - data[8] = CLEAN_DATA_32; /* buf status */ - - cmd[0].cmd = DST_CRCI_NAND_CMD | CMD_OCB; - cmd[0].src = paddr(&data[0]); - cmd[0].dst = NAND_FLASH_CMD; - cmd[0].len = 16; - - cmd[1].cmd = 0; - cmd[1].src = paddr(&data[4]); - cmd[1].dst = NAND_DEV0_CFG0; - cmd[1].len = 8; - - cmd[2].cmd = 0; - cmd[2].src = paddr(&data[6]); - cmd[2].dst = NAND_EXEC_CMD; - cmd[2].len = 4; - - cmd[3].cmd = SRC_CRCI_NAND_DATA; - cmd[3].src = NAND_FLASH_STATUS; - cmd[3].dst = paddr(&data[7]); - cmd[3].len = 8; - - cmd[4].cmd = CMD_OCU | CMD_LC; - cmd[4].src = NAND_FLASH_BUFFER + (flash_pagesize - (528*(cwperpage-1))); - cmd[4].dst = paddr(&buf); - cmd[4].len = 4; - - ptr[0] = (paddr(cmd) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "status: %x\n", data[7]); -#endif - - /* we fail if there was an operation error, a mpu error, or the - ** erase success bit was not set. - */ - if(data[7] & 0x110) return -1; - - /* Check for bad block marker byte */ - if (CFG1 & CFG1_WIDE_FLASH) { - if (buf[0] != 0xFF || buf[1] != 0xFF) - return 1; - } else { - if (buf[0] != 0xFF) - return 1; - } - - return 0; -} - - - -static int flash_nand_erase_block(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - unsigned *data = ptrlist + 4; - int isbad = 0; - - if (page < (NUM_PROTECTED_BLOCKS<<6)) - { - dprintf(INFO, "protected block not errased: %x\n", (page>>6)); - return -1; - } - /* only allow erasing on block boundaries */ - if(page & 63) return -1; - - /* Check for bad block and erase only if block is not marked bad */ - isbad = flash_nand_block_isbad(cmdlist, ptrlist, page); - - if (isbad) { - dprintf(INFO, "skipping @ %d (bad block)\n", page >> 6); - return -1; - } - - /* Erase block */ - data[0] = NAND_CMD_BLOCK_ERASE; - data[1] = page; - data[2] = 0; - data[3] = 0 | 4; - data[4] = 1; - data[5] = 0xeeeeeeee; - data[6] = CFG0 & (~(7 << 6)); /* CW_PER_PAGE = 0 */ - data[7] = CFG1; - data[8] = 0x00000020; - data[9] = 0x000000C0; - - cmd[0].cmd = DST_CRCI_NAND_CMD | CMD_OCB; - cmd[0].src = paddr(&data[0]); - cmd[0].dst = NAND_FLASH_CMD; - cmd[0].len = 16; - - cmd[1].cmd = 0; - cmd[1].src = paddr(&data[6]); - cmd[1].dst = NAND_DEV0_CFG0; - cmd[1].len = 8; - - cmd[2].cmd = 0; - cmd[2].src = paddr(&data[4]); - cmd[2].dst = NAND_EXEC_CMD; - cmd[2].len = 4; - - cmd[3].cmd = SRC_CRCI_NAND_DATA; - cmd[3].src = NAND_FLASH_STATUS; - cmd[3].dst = paddr(&data[5]); - cmd[3].len = 4; - - cmd[4].cmd = 0; - cmd[4].src = paddr(&data[8]); - cmd[4].dst = NAND_FLASH_STATUS; - cmd[4].len = 4; - - cmd[5].cmd = CMD_OCU | CMD_LC; - cmd[5].src = paddr(&data[9]); - cmd[5].dst = NAND_READ_STATUS; - cmd[5].len = 4; - - ptr[0] = (paddr(cmd) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "status: %x\n", data[5]); -#endif - - /* we fail if there was an operation error, a mpu error, or the - ** erase success bit was not set. - */ - if(data[5] & 0x110) return -1; - if(!(data[5] & 0x80)) return -1; - - return 0; -} - - -struct data_flash_io { - unsigned cmd; - unsigned addr0; - unsigned addr1; - unsigned chipsel; - unsigned cfg0; - unsigned cfg1; - unsigned exec; - unsigned ecc_cfg; - unsigned ecc_cfg_save; - unsigned clrfstatus; - unsigned clrrstatus; - struct { - unsigned flash_status; - unsigned buffer_status; - } result[8]; -}; - -static int _flash_nand_read_page(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page, void *_addr, void *_spareaddr) -{ - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - struct data_flash_io *data = (void*) (ptrlist + 4); - unsigned addr = (unsigned) _addr; - unsigned spareaddr = (unsigned) _spareaddr; - unsigned n; - int isbad = 0; - unsigned cwperpage; - unsigned cwdatasize; - unsigned cwoobsize; - cwperpage = (flash_pagesize >> 9); - cwdatasize = flash_pagesize/cwperpage; - cwoobsize = /*oobavail*/ 16 / cwperpage; //spare size - ecc size (64 - 4*10) - - /* Check for bad block and read only from a good block */ - isbad = flash_nand_block_isbad(cmdlist, ptrlist, page); - if (isbad) - { - dprintf(INFO, "bad block %x:\n",page); - return -2; - } - - data->cmd = NAND_CMD_PAGE_READ_ALL; - data->addr0 = page << 16; - data->addr1 = (page >> 16) & 0xff; - data->chipsel = 0 | 4; /* flash0 + undoc bit */ - - /* GO bit for the EXEC register */ - data->exec = 1; - - data->cfg0 = (CFG0 & ~(7U << 6)) | ((cwperpage-1) << 6); - data->cfg1 = CFG1; - - data->ecc_cfg = 0x1FF; - - /* save existing ecc config */ - cmd->cmd = CMD_OCB; - cmd->src = NAND_EBI2_ECC_BUF_CFG; - cmd->dst = paddr(&data->ecc_cfg_save); - cmd->len = 4; - cmd++; - - for(n = 0; n < cwperpage; n++) { - /* write CMD / ADDR0 / ADDR1 / CHIPSEL regs in a burst */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->cmd); - cmd->dst = NAND_FLASH_CMD; - cmd->len = ((n == 0) ? 16 : 4); - cmd++; - - if (n == 0) { - /* block on cmd ready, set configuration */ - cmd->cmd = 0; - cmd->src = paddr(&data->cfg0); - cmd->dst = NAND_DEV0_CFG0; - cmd->len = 8; - cmd++; - - /* set our ecc config */ - cmd->cmd = 0; - cmd->src = paddr(&data->ecc_cfg); - cmd->dst = NAND_EBI2_ECC_BUF_CFG; - cmd->len = 4; - cmd++; - } - /* kick the execute register */ - cmd->cmd = 0; - cmd->src = paddr(&data->exec); - cmd->dst = NAND_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* block on data ready, then read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_FLASH_STATUS; - cmd->dst = paddr(&data->result[n]); - cmd->len = 8; - cmd++; - - /* read data block */ - cmd->cmd = 0; - cmd->src = NAND_FLASH_BUFFER; - cmd->dst = addr + n * cwdatasize; - cmd->len = cwdatasize; - cmd++; - - /* read extra data */ - cmd->cmd = 0; - cmd->src = NAND_FLASH_BUFFER + cwdatasize + 10; // adter data and 10 bytes of ECC - cmd->dst = spareaddr + n*cwoobsize; - cmd->len = cwoobsize; - cmd++; - } - - /* restore saved ecc config */ - cmd->cmd = CMD_OCU | CMD_LC; - cmd->src = paddr(&data->ecc_cfg_save); - cmd->dst = NAND_EBI2_ECC_BUF_CFG; - cmd->len = 4; - - ptr[0] = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - int result = dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - if(result!=0) - { - dprintf(INFO, "read page failed %x (block %x)\n",page, page>>6); - return -1; - } - -#if VERBOSE - dprintf(INFO, "read page %d: status: %x %x %x %x\n", - page, data[5], data[6], data[7], data[8]); - for(n = 0; n < 4; n++) { - ptr = (unsigned*)(addr + 512 * n); - dprintf(INFO, "data%d: %x %x %x %x\n", n, ptr[0], ptr[1], ptr[2], ptr[3]); - ptr = (unsigned*)(spareaddr + 16 * n); - dprintf(INFO, "spare data%d %x %x %x %x\n", n, ptr[0], ptr[1], ptr[2], ptr[3]); - } -#endif - - /* if any of the writes failed (0x10), or there was a - ** protection violation (0x100), we lose - */ - for(n = 0; n < cwperpage; n++) { - if (data->result[n].flash_status & 0x110) { - return -1; - } - } - - return 0; -} - -static int _flash_nand_write_page(dmov_s *cmdlist, unsigned *ptrlist, unsigned page, - const void *_addr, const void *_spareaddr, unsigned raw_mode) -{ - if (page < (NUM_PROTECTED_BLOCKS<<6)) - { - dprintf(INFO, "write disabled block %x is protected\n", (page>>6)); - return -1; - } - - dmov_s *cmd = cmdlist; - unsigned *ptr = ptrlist; - struct data_flash_io *data = (void*) (ptrlist + 4); - unsigned addr = (unsigned) _addr; - unsigned spareaddr = (unsigned) _spareaddr; - unsigned n; - unsigned cwperpage; - unsigned cwdatasize; - unsigned cwoobsize; - cwperpage = (flash_pagesize >> 9); - cwdatasize = flash_pagesize/cwperpage; - cwoobsize = /*oobavail*/ 16 / cwperpage; //spare size - ecc size (64 - 4*10) - - data->cmd = NAND_CMD_PRG_PAGE_ALL; - data->addr0 = page << 16; - data->addr1 = (page >> 16) & 0xff; - data->chipsel = 0 | 4; /* flash0 + undoc bit */ - data->clrfstatus = 0x00000020; - data->clrrstatus = 0x000000C0; - - if (!raw_mode){ - data->cfg0 = CFG0; - data->cfg1 = CFG1; - }else{ - data->cfg0 = (NAND_CFG0_RAW & ~(7 << 6)) |((cwperpage-1) << 6); - data->cfg1 = NAND_CFG1_RAW | (CFG1 & CFG1_WIDE_FLASH); - } - - /* GO bit for the EXEC register */ - data->exec = 1; - - data->ecc_cfg = 0x1FF; - - /* save existing ecc config */ - cmd->cmd = CMD_OCB; - cmd->src = NAND_EBI2_ECC_BUF_CFG; - cmd->dst = paddr(&data->ecc_cfg_save); - cmd->len = 4; - cmd++; - - for(n = 0; n < cwperpage; n++) { - /* write CMD / ADDR0 / ADDR1 / CHIPSEL regs in a burst */ - cmd->cmd = DST_CRCI_NAND_CMD; - cmd->src = paddr(&data->cmd); - cmd->dst = NAND_FLASH_CMD; - cmd->len = ((n == 0) ? 16 : 4); - cmd++; - - if (n == 0) { - /* set configuration */ - cmd->cmd = 0; - cmd->src = paddr(&data->cfg0); - cmd->dst = NAND_DEV0_CFG0; - cmd->len = 8; - cmd++; - - /* set our ecc config */ - cmd->cmd = 0; - cmd->src = paddr(&data->ecc_cfg); - cmd->dst = NAND_EBI2_ECC_BUF_CFG; - cmd->len = 4; - cmd++; - } - - /* write data block */ - cmd->cmd = 0; - cmd->dst = NAND_FLASH_BUFFER; - if (!raw_mode){ - cmd->src = addr + n * cwdatasize; - cmd->len = cwdatasize; - }else{ - cmd->src = addr; - cmd->len = 528; - } - cmd++; - - if ((!raw_mode)) { - /* write extra data */ - cmd->cmd = 0; - cmd->src = spareaddr+n*cwoobsize; - cmd->dst = NAND_FLASH_BUFFER + cwdatasize; - cmd->len = cwoobsize; - cmd++; - } - - /* kick the execute register */ - cmd->cmd = 0; - cmd->src = paddr(&data->exec); - cmd->dst = NAND_EXEC_CMD; - cmd->len = 4; - cmd++; - - /* block on data ready, then read the status register */ - cmd->cmd = SRC_CRCI_NAND_DATA; - cmd->src = NAND_FLASH_STATUS; - cmd->dst = paddr(&data->result[n]); - cmd->len = 8; - cmd++; - - cmd->cmd = 0; - cmd->src = paddr(&data->clrfstatus); - cmd->dst = NAND_FLASH_STATUS; - cmd->len = 4; - cmd++; - - cmd->cmd = 0; - cmd->src = paddr(&data->clrrstatus); - cmd->dst = NAND_READ_STATUS; - cmd->len = 4; - cmd++; - } - - /* restore saved ecc config */ - cmd->cmd = CMD_OCU | CMD_LC; - cmd->src = paddr(&data->ecc_cfg_save); - cmd->dst = NAND_EBI2_ECC_BUF_CFG; - cmd->len = 4; - - ptr[0] = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptr); - -#if VERBOSE - dprintf(INFO, "write page %d: status: %x %x %x %x\n", - page, data[5], data[6], data[7], data[8]); -#endif - - /* if any of the writes failed (0x10), or there was a - ** protection violation (0x100), or the program success - ** bit (0x80) is unset, we lose - */ - for(n = 0; n < cwperpage; n++) { - if(data->result[n].flash_status & 0x110) return -1; - if(!(data->result[n].flash_status & 0x80)) return -1; - } - -#if VERIFY_WRITE - n = _flash_read_page(cmdlist, ptrlist, page, flash_data, - flash_data + 2048); - if (n != 0) - return -1; - if (memcmp(flash_data, _addr, 2048) || - memcmp(flash_data + 2048, _spareaddr, 16)) { - dprintf(CRITICAL, "verify error @ page %d\n", page); - return -1; - } -#endif - return 0; -} - - -char empty_buf[528]; -static int flash_nand_mark_badblock(dmov_s *cmdlist, unsigned *ptrlist, unsigned page) -{ - if (page < (NUM_PROTECTED_BLOCKS<<6)) - { - dprintf(INFO, "protected block %x cannot be marked bad: \n", (page>>6)); - return -1; - } - memset(empty_buf,0,528); - /* Going to first page of the block */ - if(page & 63) - page = page - (page & 63); - return _flash_nand_write_page(cmdlist, ptrlist, page, empty_buf, 0, 1); -} - -unsigned nand_cfg0; -unsigned nand_cfg1; - -static int flash_nand_read_config(dmov_s *cmdlist, unsigned *ptrlist) -{ - static unsigned CFG0_TMP, CFG1_TMP; - cmdlist[0].cmd = CMD_OCB; - cmdlist[0].src = NAND_DEV0_CFG0; - cmdlist[0].dst = paddr(&CFG0_TMP); - cmdlist[0].len = 4; - - cmdlist[1].cmd = CMD_OCU | CMD_LC; - cmdlist[1].src = NAND_DEV0_CFG1; - cmdlist[1].dst = paddr(&CFG1_TMP); - cmdlist[1].len = 4; - - *ptrlist = (paddr(cmdlist) >> 3) | CMD_PTR_LP; - - dmov_exec_cmdptr(DMOV_NAND_CHAN, ptrlist); - - if((CFG0_TMP == 0) || (CFG1_TMP == 0)) { - return -1; - } - - CFG0 = CFG0_TMP; - CFG1 = CFG1_TMP; - if (flash_info.type == FLASH_16BIT_NAND_DEVICE) { - nand_cfg1 |= CFG1_WIDE_FLASH; - } - dprintf(INFO, "nandcfg: %x %x (initial)\n", CFG0_TMP, CFG1_TMP); - - CFG0 = (((flash_pagesize >> 9) - 1) << 6) /* 4/8 cw/pg for 2/4k */ - | (512 << 9) /* 516 user data bytes */ - | (10 << 19) /* 10 parity bytes */ - | (4 << 23) /* spare size */ - | (5 << 27) /* 5 address cycles */ - | (1 << 30) /* Do not read status before data */ - | (1 << 31); /* Send read cmd */ - - CFG1 = CFG1 -#if 0 - | (7 << 2) /* 8 recovery cycles */ - | (0 << 5) /* Allow CS deassertion */ - | (2 << 17) /* 6 cycle tWB/tRB */ -#endif - | ((flash_pagesize - (528 * ((flash_pagesize >> 9) - 1)) + 1) << 6) /* Bad block marker location */ - | (nand_cfg1 & CFG1_WIDE_FLASH); /* preserve wide flash flag */ - CFG1 = CFG1 - & ~(1 << 0) /* Enable ecc */ - & ~(1 << 16); /* Bad block in user data area */ - dprintf(INFO, "nandcfg: %x %x (used)\n", CFG0, CFG1); - - return 0; -} - -static int flash_mark_badblock(dmov_s *cmdlist, unsigned *ptrlist, unsigned page) -{ - return flash_nand_mark_badblock(cmdlist, ptrlist, page); -} - - -/* Wrapper functions */ -static void flash_read_id(dmov_s *cmdlist, unsigned *ptrlist) -{ - int dev_found = 0; - unsigned index; - - // Try to read id - flash_nand_read_id(cmdlist, ptrlist); - // Check if we support the device - for (index=1; - index < (sizeof(supported_flash)/sizeof(struct flash_identification)); - index++) - { - if ((flash_info.id & supported_flash[index].mask) == - (supported_flash[index].flash_id & - (supported_flash[index].mask))) { - dev_found = 1; - break; - } - } - - if(dev_found) { - if (supported_flash[index].widebus) - flash_info.type = FLASH_16BIT_NAND_DEVICE; - else - flash_info.type = FLASH_8BIT_NAND_DEVICE; - - flash_info.page_size = supported_flash[index].pagesize; - flash_pagesize = flash_info.page_size; - flash_info.block_size = supported_flash[index].blksize; - flash_info.spare_size = supported_flash[index].oobsize; - if (flash_info.block_size && flash_info.page_size) - { - flash_info.num_blocks = supported_flash[index].density; - flash_info.num_blocks /= (flash_info.block_size); - } - else - { - flash_info.num_blocks = 0; - } - ASSERT(flash_info.num_blocks); - //return; - } - - // Assume 8 bit nand device for backward compatability - if (dev_found == 0) { - dprintf(INFO, "Device not supported. Assuming 8 bit NAND device\n"); - flash_info.type = FLASH_8BIT_NAND_DEVICE; - } - dprintf(INFO, "nandid: 0x%x maker=0x%02x device=0x%02x page_size=%d\n", - flash_info.id, flash_info.vendor, flash_info.device, - flash_info.page_size); - dprintf(INFO, " spare_size=%d block_size=%d num_blocks=%d\n", - flash_info.spare_size, flash_info.block_size, - flash_info.num_blocks); -} - -static int flash_erase_block(dmov_s *cmdlist, unsigned *ptrlist, unsigned page) -{ - return flash_nand_erase_block(cmdlist, ptrlist, page); -} - -static int _flash_read_page(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page, void *_addr, void *_spareaddr) -{ - return _flash_nand_read_page(cmdlist, ptrlist, page, _addr, _spareaddr); -} - -static int _flash_block_isbad(dmov_s *cmdlist, unsigned *ptrlist, unsigned page) -{ - return flash_nand_block_isbad(cmdlist, ptrlist, page); -} - -static int _flash_write_page(dmov_s *cmdlist, unsigned *ptrlist, - unsigned page, const void *_addr, - const void *_spareaddr) -{ - return _flash_nand_write_page(cmdlist, ptrlist, page, _addr, _spareaddr, 0); -} - -static unsigned *flash_ptrlist; -static dmov_s *flash_cmdlist; - -static struct ptable *flash_ptable = NULL; - -void flash_init(void) -{ - ASSERT(flash_ptable == NULL); - - flash_ptrlist = memalign(32, 1024); - flash_cmdlist = memalign(32, 1024); - flash_data = memalign(32, 4096 + 128); - flash_spare = memalign(32, 128); - - flash_read_id(flash_cmdlist, flash_ptrlist); - if((FLASH_8BIT_NAND_DEVICE == flash_info.type) - ||(FLASH_16BIT_NAND_DEVICE == flash_info.type)) { - if(flash_nand_read_config(flash_cmdlist, flash_ptrlist)) { - dprintf(CRITICAL, "ERROR: could not read CFG0/CFG1 state\n"); - ASSERT(0); - } - } -} - -struct ptable *flash_get_ptable(void) -{ - return flash_ptable; -} - -void flash_set_ptable(struct ptable *new_ptable) -{ - ASSERT(flash_ptable == NULL && new_ptable != NULL); - flash_ptable = new_ptable; -} - -struct flash_info *flash_get_info(void) -{ - return &flash_info; -} - -int flash_erase(struct ptentry *ptn) -{ - unsigned block = ptn->start; - unsigned count = ptn->length; - - set_nand_configuration(ptn->type); - while(count-- > 0) { - if(flash_erase_block(flash_cmdlist, flash_ptrlist, block * 64)) { - dprintf(INFO, "cannot erase @ %d (bad block?)\n", block); - } - block++; - } - return 0; -} - -int flash_read_ext(struct ptentry *ptn, unsigned extra_per_page, - unsigned offset, void *data, unsigned bytes) -{ - unsigned page = (ptn->start * 64) + (offset / flash_pagesize); - unsigned lastpage = (ptn->start + ptn->length) * 64; - unsigned count = (bytes + flash_pagesize - 1 + extra_per_page) / (flash_pagesize + extra_per_page); - unsigned *spare = (unsigned*) flash_spare; - unsigned errors = 0; - unsigned char *image = data; - unsigned current_block = (page - (page & 63)) >> 6; - unsigned start_block = ptn->start; - int result = 0; - int isbad = 0; - int start_block_count = 0; - - dprintf(INFO, "flash read: %s %x %x\n", ptn->name, offset, bytes); - ASSERT(ptn->type == TYPE_APPS_PARTITION); - set_nand_configuration(TYPE_APPS_PARTITION); - - if(offset & (flash_pagesize - 1)) - return -1; - -// Adjust page offset based on number of bad blocks from start to current page - if (start_block < current_block) - { - start_block_count = (current_block - start_block); - while (start_block_count && (start_block < (ptn->start + ptn->length))) { - isbad = _flash_block_isbad(flash_cmdlist, flash_ptrlist, start_block*64); - if (isbad) - page += 64; - else - start_block_count--; - start_block++; - } - } - - while((page < lastpage) && !start_block_count) { - if(count == 0) { - dprintf(INFO, "flash_read_image: success (%d errors)\n", errors); - return 0; - } - - result = _flash_read_page(flash_cmdlist, flash_ptrlist, page, image, spare); - - if (result == -1) { - // bad page, go to next page - page++; - errors++; - continue; - } - else if (result == -2) { - // bad block, go to next block same offset - page += 64; - errors++; - continue; - } - - page++; - image += flash_pagesize; - memcpy(image, spare, extra_per_page); - image += extra_per_page; - count -= 1; - } - - /* could not find enough valid pages before we hit the end */ - dprintf(INFO, "flash_read_image: failed (%d errors)\n", errors); - return 0xffffffff; -} - -int flash_write(struct ptentry *ptn, unsigned extra_per_page, const void *data, - unsigned bytes) -{ - unsigned page = ptn->start * 64; - unsigned lastpage = (ptn->start + ptn->length) * 64; - unsigned *spare = (unsigned*) flash_spare; - const unsigned char *image = data; - unsigned wsize = flash_pagesize + extra_per_page; - unsigned n; - int r; - - if (ptn->type == TYPE_MODEM_PARTITION) - { - dprintf(CRITICAL, "flash_write_image: model partition not supported\n"); - return -1; - } - - set_nand_configuration(ptn->type); - for(n = 0; n < 16; n++) spare[n] = 0xffffffff; - - while(bytes > 0) { - if(bytes < wsize) { - dprintf(CRITICAL, "flash_write_image: image undersized (%d < %d)\n", bytes, wsize); - return -1; - } - if(page >= lastpage) { - dprintf(CRITICAL, "flash_write_image: out of space\n"); - return -1; - } - - if((page & 63) == 0) { - if(flash_erase_block(flash_cmdlist, flash_ptrlist, page)) { - dprintf(INFO, "flash_write_image: bad block @ %d\n", page >> 6); - page += 64; - continue; - } - } - - if(extra_per_page) { - r = _flash_write_page(flash_cmdlist, flash_ptrlist, page, image, image + flash_pagesize); - } else { - r = _flash_write_page(flash_cmdlist, flash_ptrlist, page, image, spare); - } - if(r) { - dprintf(INFO, "flash_write_image: write failure @ page %d (src %d)\n", page, image - (const unsigned char *)data); - image -= (page & 63) * wsize; - bytes += (page & 63) * wsize; - page &= ~63; - if(flash_erase_block(flash_cmdlist, flash_ptrlist, page)) { - dprintf(INFO, "flash_write_image: erase failure @ page %d\n", page); - } - if (ptn->type != TYPE_MODEM_PARTITION) { - flash_mark_badblock(flash_cmdlist, flash_ptrlist, page); - } - dprintf(INFO, "flash_write_image: restart write @ page %d (src %d)\n", page, image - (const unsigned char *)data); - page += 64; - continue; - } - page++; - image += wsize; - bytes -= wsize; - } - - /* erase any remaining pages in the partition */ - page = (page + 63) & (~63); - while(page < lastpage){ - if(flash_erase_block(flash_cmdlist, flash_ptrlist, page)) { - dprintf(INFO, "flash_write_image: bad block @ %d\n", page >> 6); - } - page += 64; - } - - dprintf(INFO, "flash_write_image: success\n"); - return 0; -} - -#if 0 -static int flash_read_page(unsigned page, void *data, void *extra) -{ - return _flash_read_page(flash_cmdlist, flash_ptrlist, - page, data, extra); -} -#endif - -unsigned flash_page_size(void) -{ - return flash_pagesize; -} - diff --git a/lk/target/htcleo/oem_cmd.c b/lk/target/htcleo/oem_cmd.c deleted file mode 100644 index 7c2371b..0000000 --- a/lk/target/htcleo/oem_cmd.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * License: GPL - * Author: cedesmith - */ -#include -#include -#include -#include - -void fastboot_okay(const char *info); -void fastboot_fail(const char *reason); -int fastboot_write(void *buf, unsigned len); -void fastboot_register(const char *prefix, void (*handle)(const char *arg, void *data, unsigned sz)); - -static char charVal(char c) -{ - c&=0xf; - if(c<=9) return '0'+c; - return 'A'+(c-10); -} - -static void send_mem(char* start, int len) -{ - char response[64]; - while(len>0) - { - int slen = len > 29 ? 29 : len; - memcpy(response, "INFO", 4); - response[4]=slen; - - for(int i=0; i>4); - response[5+i*2+1]= charVal(start[i]); - } - response[5+slen*2+1]=0; - fastboot_write(response, 5+slen*2); - - start+=slen; - len-=slen; - } -} - -static void cmd_oem_smesg() -{ - send_mem((char*)0x1fe00018, MIN(0x200000, readl(0x1fe00000))); - fastboot_okay(""); -} - -static void cmd_oem_dmesg() -{ - if(*((unsigned*)0x2FFC0000) == 0x43474244 /* DBGC */ ) //see ram_console_buffer in kernel ram_console.c - { - send_mem((char*)0x2FFC000C, *((unsigned*)0x2FFC0008)); - } - fastboot_okay(""); -} - -static int str2u(const char *x) -{ - while(*x==' ')x++; - - unsigned base=10; - int sign=1; - unsigned n = 0; - - if(strstr(x,"-")==x) { sign=-1; x++;}; - if(strstr(x,"0x")==x) {base=16; x+=2;} - - while(*x) { - char d=0; - switch(*x) { - case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': - d = *x - '0'; - break; - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - d = (*x - 'a' + 10); - break; - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - d = (*x - 'A' + 10); - break; - default: - return sign*n; - } - if(d>=base) return sign*n; - n*=base;n+=d; - x++; - } - - return sign*n; -} -static void cmd_oem_dumpmem(const char *arg) -{ - char *sStart = strtok((char*)arg, " "); - char *sLen = strtok(NULL, " "); - if(sStart==NULL || sLen==NULL) - { - fastboot_fail("usage:oem dump start len"); - return; - } - - send_mem((char*)str2u(sStart), str2u(sLen)); - fastboot_okay(""); -} -static void cmd_oem_set(const char *arg) -{ - char type=*arg; arg++; - char *sAddr = strtok((char*) arg, " "); - char *sVal = strtok(NULL, "\0"); - if(sAddr==NULL || sVal==NULL) - { - fastboot_fail("usage:oem set[s,c,w] address value"); - return; - } - char buff[64]; - switch(type) - { - case 's': - memcpy((void*)str2u(sAddr), sVal, strlen(sVal)); - send_mem((char*)str2u(sAddr), strlen(sVal)); - break; - case 'c': - *((char*)str2u(sAddr)) = (char)str2u(sVal); - sprintf(buff, "%x", *((char*)str2u(sAddr))); - send_mem(buff, strlen(buff)); - break; - case 'w': - default: - *((int*)str2u(sAddr)) = str2u(sVal); - sprintf(buff, "%x", *((int*)str2u(sAddr))); - send_mem(buff, strlen(buff)); - } - fastboot_okay(""); -} - -static void cmd_oem(const char *arg, void *data, unsigned sz) -{ - while(*arg==' ') arg++; - if(memcmp(arg, "dmesg", 5)==0) cmd_oem_dmesg(); - if(memcmp(arg, "smesg", 5)==0) cmd_oem_smesg(); - if(memcmp(arg, "pwf ", 4)==0) cmd_oem_dumpmem(arg+4); - if(memcmp(arg, "set", 3)==0) cmd_oem_set(arg+3); -} - -void cmd_oem_register() -{ - fastboot_register("oem", cmd_oem); -} diff --git a/lk/target/htcleo/platform.c b/lk/target/htcleo/platform.c deleted file mode 100644 index 82321d5..0000000 --- a/lk/target/htcleo/platform.c +++ /dev/null @@ -1,39 +0,0 @@ - -#include -#include -#include "target/display.h" -#include - -void platform_init_interrupts(void); -void platform_init_timer(); -void platform_early_init(void) -{ - platform_init_interrupts(); - platform_init_timer(); -} - -void platform_init(void) -{ - dprintf(INFO, "platform_init()\n"); -} - -#define FB_FORMAT_RGB565 0 -#define LCDC_FB_BPP 16 -#define MSM_MDP_BASE1 0xAA200000 - -static struct fbcon_config fb_cfg = { - .height = LCDC_FB_HEIGHT, - .width = LCDC_FB_WIDTH, - .stride = LCDC_FB_WIDTH, - .format = FB_FORMAT_RGB565, - .bpp = LCDC_FB_BPP, - .update_start = NULL, - .update_done = NULL, -}; -void display_init(void) -{ - fb_cfg.base = (unsigned*)readl( MSM_MDP_BASE1 + 0x90008); - fbcon_setup(&fb_cfg); - fbcon_clear(); -} - diff --git a/lk/target/htcleo/rules.mk b/lk/target/htcleo/rules.mk deleted file mode 100644 index 5002b69..0000000 --- a/lk/target/htcleo/rules.mk +++ /dev/null @@ -1,65 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -INCLUDES += -I$(LOCAL_DIR)/include -I$(LK_TOP_DIR)/platform/msm_shared - -PLATFORM := qsd8k - -#define system partition size (in MB), if not defined my custom (from magldr) layout is used. see init.c -DEFINES += SYSTEM_PARTITION_SIZE=90 -#DEFINES += SYSTEM_PARTITION_SIZE=90 -DEFINES += CACHE_PARTITION_SIZE=5 - -#cedesmith note: MEMBASE requires edit in platform/qsd8k/rules.mk -# maximum partition size will be about 340mb ( MEMBASE-SCRATCH_ADDR) -MEMBASE := 0x28000000 -MEMSIZE := 0x00100000 -DEFINES += WSPL_VADDR=0x80000000 - -BASE_ADDR := 0x11800000 -TAGS_ADDR := "(BASE_ADDR+0x00000100)" -KERNEL_ADDR := "(BASE_ADDR+0x00008000)" -RAMDISK_ADDR := "(BASE_ADDR+0x00a00000)" -SCRATCH_ADDR := "(BASE_ADDR+0x01400000)" - -#BASE_ADDR + 0x04000000 -#MEMBASE := 0x15800000 -#SCRATCH_ADDR := 0x16800000 -#SCRATCH_ADDR := "(MEMBASE+0x02000000)" -#MEMBASE := SCRATCH_ADDR+0x19000000 - -KEYS_USE_GPIO_KEYPAD := 1 - -#DEFINES += ENABLE_BATTERY_CHARGING=1 -#DEFINES += DISPLAY_SPLASH_SCREEN=1 -DEFINES += DISPLAY_TYPE_LCDC=1 - -CFLAGS += -mlittle-endian -mfpu=neon -LDFLAGS += -EL - -MODULES += \ - dev/keys \ - lib/ptable - - - -DEFINES += \ - MEMBASE=$(MEMBASE)\ - MEMSIZE=$(MEMSIZE) \ - BASE_ADDR=$(BASE_ADDR) \ - TAGS_ADDR=$(TAGS_ADDR) \ - KERNEL_ADDR=$(KERNEL_ADDR) \ - RAMDISK_ADDR=$(RAMDISK_ADDR) \ - SCRATCH_ADDR=$(SCRATCH_ADDR) - -OBJS += \ - $(LOCAL_DIR)/init.o \ - $(LOCAL_DIR)/nand.o \ - $(LOCAL_DIR)/keypad.o \ - $(LOCAL_DIR)/atags.o - -OBJS += \ - $(LOCAL_DIR)/htcleo_boot.o \ - $(LOCAL_DIR)/htcleo_boot_s.o\ - $(LOCAL_DIR)/platform.o \ - $(LOCAL_DIR)/oem_cmd.o - diff --git a/lk/target/htcleo/tools/makefile b/lk/target/htcleo/tools/makefile deleted file mode 100644 index 91fb9d2..0000000 --- a/lk/target/htcleo/tools/makefile +++ /dev/null @@ -1 +0,0 @@ -APPSBOOTHEADER: diff --git a/lk/target/init.c b/lk/target/init.c deleted file mode 100644 index a65a6ec..0000000 --- a/lk/target/init.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2008 Travis Geiselbrecht - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files - * (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#include -#include -#include -#include - -/* - * default implementations of these routines, if the target code - * chooses not to implement. - */ - -__WEAK void target_early_init(void) -{ -} - -__WEAK void target_init(void) -{ -} - -__WEAK void *target_get_scratch_address(void) -{ - return (void *)(SCRATCH_ADDR); -} - -__WEAK int target_is_emmc_boot(void) -{ -#if _EMMC_BOOT - return 1; -#else - return 0; -#endif -} - -__WEAK unsigned check_reboot_mode(void) -{ - return 0; -} - -__WEAK void reboot_device(unsigned reboot_reason) -{ -} - -__WEAK void target_battery_charging_enable - (unsigned enable, unsigned disconnect) -{ -} - -__WEAK unsigned target_pause_for_battery_charge(void) -{ - return 0; -} diff --git a/lk/target/rules.mk b/lk/target/rules.mk deleted file mode 100644 index 8f1d297..0000000 --- a/lk/target/rules.mk +++ /dev/null @@ -1,6 +0,0 @@ -LOCAL_DIR := $(GET_LOCAL_DIR) - -OBJS += \ - $(LOCAL_DIR)/init.o - - diff --git a/nbgen.c b/nbgen.c deleted file mode 100644 index 866808f..0000000 --- a/nbgen.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - * nbgen.c - * - * Created on: Mar 22, 2011 - * Author: cedesmith - */ - -#include -#include -#include -#include -#include -#include - - -struct NbgPart -{ - char* fileName; - int start; - int end; -}; -struct NbgData -{ - char header[2*0x800]; - int noParts; - struct NbgPart parts[16]; -}; -struct NbgData data; - -struct PartEntry { - uint8_t BootInd; - uint8_t FirstHead; - uint8_t FirstSector; - uint8_t FirstTrack; - uint8_t FileSystem; - uint8_t LastHead; - uint8_t LastSector; - uint8_t LastTrack; - uint32_t StartSector; - uint32_t TotalSectors; -}; - -//#define blocks(x)((x)/0x20000+((x)%0x20000!=0?1:0)) -void save(char* file, int nb); -int blocks(size_t bytes); -void PartSetCHS(struct PartEntry* part); - -int main(int argc, char* argv[]) -{ - printf("nbgen v1.0 by cedesmith\n"); - if(argc<2){ - fprintf(stderr, " Usage: os.nb|os.payload\n", argv[0]); - return 1; - } - - struct stat st; - if(stat("lk.bin", &st)!=0){ - fprintf(stderr, "lk.bin not found\n", argv[1]); - return 3; - } - data.parts[0].fileName="lk.bin"; - data.parts[0].start=2; - data.parts[0].end=blocks(st.st_size+0x800*2)*64; - data.noParts++; - - //make file header - memset(data.header, 0, 0x800); //fill 1st sector with 00 - data.header[0]=0xE9; //fill signature bytes - data.header[1]=0xFD; - data.header[2]=0xFF; - data.header[512-2]=0x55; - data.header[512-1]=0xAA; - //write partition - struct PartEntry* part = (struct PartEntry*)(data.header+0x1BE); - part->BootInd=0; - part->FileSystem=0x23; - part->StartSector=data.parts[0].start; - part->TotalSectors=data.parts[0].end-data.parts[0].start; - PartSetCHS(part); - - - //write MSFLASH50 - memset(data.header+0x800, 0xFF, 0x800); //fill 2nd sector with FF - memset(data.header+0x800, 00, 0x64); - strncpy(data.header+0x800, "MSFLSH50", sizeof("MSFLSH50")-1); //MSFLSH50 signature - - //save - int nb=0; - if(strcasecmp(strrchr(argv[1], '.'), ".nb")==0) nb=1; - save(argv[1], nb); - return 0; -} -void PartSetCHS(struct PartEntry* part) -{ - uint32_t first=part->StartSector, last=part->StartSector+part->TotalSectors-1; - part->FirstHead=(uint8_t)(first%0x40 & 0xFF); - part->FirstTrack=(uint8_t)(first/0x40 & 0xFF); - part->FirstSector=(uint8_t)(((((first/0x40)>>8)<<6) & 0xFF)+1); - part->LastHead=(uint8_t) (last%0x40 & 0xFF); - part->LastTrack=(uint8_t)(last/0x40 & 0xFF); - part->LastSector=(uint8_t)(((((last/40)>>8)<<6) & 0xFF)+1); -} - -int blocks(size_t bytes) -{ - // 1 physical nand block = 64 sectors = 0x20000 bytes - return bytes/0x20000+(bytes%0x20000!=0 ? 1 : 0); -} -void writetag(uint32_t no, uint32_t tag, FILE* out) -{ - fwrite(&no, sizeof(no), 1, out); - fwrite(&tag, sizeof(tag), 1, out); -} -void save(char* file, int nb) -{ - FILE* out=fopen(file, "w"); - if(out==NULL){ - fprintf(stderr, "failed to open %s\n", file); - exit(20); - } - uint32_t sectorNo=0x0, tag=0xFFFBFFFD; - - // write file header block - fwrite(data.header, 1, 0x800, out); - if(nb) writetag(sectorNo, tag, out); - sectorNo++; - - //write MSFLASH50 block - fwrite(data.header+0x800, 1, 0x800, out); - if(nb) writetag(sectorNo, tag, out); - sectorNo++; - - char sector[0x800]; - for(int i=0; istart; is++){ - fwrite(sector, 0x800, 1, out); - if(nb) writetag(0xFFFFFFFF, 0xFFFFFFFF, out); - sectorNo++; - } - - //write part from file - printf("writing %s\n", part->fileName); - FILE* in=fopen(part->fileName, "r"); - if(in==NULL){ - fprintf(stderr, "Failed to open %s\n", part->fileName); - exit(21); - } - while(!feof(in)){ - int readed=0; - memset(sector, 0xFF, 0x800); - while(!feof(in) && readed<0x800) readed+=fread(sector+readed, 1, 0x800-readed, in); - fwrite(sector, 0x800, 1, out); - if(nb){ - tag=0xFFFFFFFF; - for(int ib=0; ib<0x800; ib++) - if(sector[ib]!=0xFF) - tag=(i==0?0xFFFBFFFD:0xFFFBFFFF); - if(tag!=0xFFFFFFFF) writetag(sectorNo, tag, out); - else writetag(0xFFFFFFFF, 0xFFFFFFFF, out); - } - sectorNo++; - } - fclose(in); - - //printf("write empty sectors from %d to %d\n", sectorNo, part->end); - //write empty sectors at the end - memset(sector, 0xFF, 0x800); - for(int is=sectorNo; isend; is++){ - fwrite(sector, 0x800, 1, out); - if(nb) writetag(0xFFFFFFFF, 0xFFFFFFFF, out); - sectorNo++; - } - } //for(int i=0; i -#include - -unsigned char hexVal(char c) -{ - switch(c) - { - case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': - return c-'0'; - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - return c - 'a' + 10; - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - return c - 'A' + 10; - } - return 0; -} -int main() { - char buff[0x40000]; - - while(!feof(stdin) && fgetc(stdin)!='\n' ); - - while(!feof(stdin)) - { - size_t len = fread(buff, 1, 5, stdin); - int hLen = -1; - if(strncmp(buff, "INFO", 4)==0) hLen = buff[4]; - if(strncmp(buff, "(boot", 5)==0) - { - len += fread(buff+5, 1, 9, stdin); - if(strncmp(buff, "(bootloader) ", 13)==0) hLen = buff[13]; - } - if(hLen!=-1) - { - for(;hLen>0;hLen--) fputc(hexVal(fgetc(stdin))<<4 | hexVal(fgetc(stdin)), stdout); - fgetc(stdin);// read \n appended by fastboot - continue; - } - fwrite(buff, 1, len, stdout); - break; - } - - while(!feof(stdin)) - { - size_t len = fread(buff, 1, sizeof(buff), stdin); - fwrite(buff, 1, len, stdout); - } -} diff --git a/patches/cwm_off_charge_v2.patch b/patches/cwm_off_charge_v2.patch deleted file mode 100644 index 3cbf3bf..0000000 --- a/patches/cwm_off_charge_v2.patch +++ /dev/null @@ -1,124 +0,0 @@ -diff --git a/extendedcommands.c b/extendedcommands.c -index 30b2f3e..3ec3436 100644 ---- a/extendedcommands.c -+++ b/extendedcommands.c -@@ -19,6 +19,7 @@ - - #include - #include -+#include - - #include "bootloader.h" - #include "common.h" -@@ -1158,22 +1159,95 @@ int volume_main(int argc, char **argv) { - return 0; - } - -+static int write_file(char* path, void* data, int data_size) -+{ -+ int fd; -+ fd = open(path, O_WRONLY); -+ if (fd >= 0) { -+ int written = write(fd, data, data_size); -+ close(fd); -+ return written; -+ } -+ return -1; -+} -+ -+static int read_file(char* path, void* data, int data_size) -+{ -+ int fd; -+ fd = open(path, O_RDONLY); -+ if(fd >= 0){ -+ int readed = read(fd, data, data_size); -+ close(fd); -+ return readed; -+ } -+ return -1; -+} -+ -+static void* battery_thread(void *cookie) -+{ -+ char status[40]; -+ int state=-1; -+ int dischargeCount=0; -+ -+ while(1){ -+ memset(status, 0, sizeof(status)); -+ read_file("/sys/class/power_supply/battery/status", status, sizeof(status)-1); -+ if(strstr(status, "Full")!=NULL && state!=1){ -+ state=1; -+ write_file("/sys/class/leds/amber/brightness", "0\n", sizeof("0\n")-1); -+ write_file("/sys/class/leds/green/brightness", "1\n", sizeof("1\n")-1); -+ }else if(strstr(status, "Charging")!=NULL && state!=2){ -+ state=2; -+ write_file("/sys/class/leds/amber/brightness", "1\n", sizeof("1\n")-1); -+ write_file("/sys/class/leds/green/brightness", "0\n", sizeof("0\n")-1); -+ }else if(strstr(status, "Discharging")!=NULL){ -+ state=3; -+ if(dischargeCount==0){ //blink every 2 seconds -+ read_file("/sys/class/leds/amber/brightness", status, sizeof(status)-1); -+ if(status[0]=='0') write_file("/sys/class/leds/amber/brightness", "1\n", sizeof("1\n")-1); -+ else write_file("/sys/class/leds/amber/brightness", "0\n", sizeof("0\n")-1); -+ } -+ read_file("/sys/class/power_supply/battery/over_vchg", status, sizeof(status)-1); -+ dischargeCount=(dischargeCount+1)%4; -+ }else if(strstr(status,"Not charging")!=NULL && state!=4){ -+ state=4; -+ write_file("/sys/class/leds/amber/brightness", "0\n", sizeof("0\n")-1); -+ write_file("/sys/class/leds/green/brightness", "0\n", sizeof("0\n")-1); -+ sync(); -+ reboot(RB_POWER_OFF); -+ for(;;); -+ } -+ usleep(500000); //wait half a second -+ } -+ return NULL; -+} -+ - void handle_chargemode() { -- const char* filename = "/proc/cmdline"; -- struct stat file_info; -- if (0 != stat(filename, &file_info)) -- return; - -- int file_len = file_info.st_size; -- char* file_data = (char*)malloc(file_len + 1); -- FILE *file = fopen(filename, "rb"); -- if (file == NULL) -- return; -- fread(file_data, file_len, 1, file); -- // supposedly not necessary, but let's be safe. -- file_data[file_len] = '\0'; -- fclose(file); -- -- if (strstr(file_data, "androidboot.mode=offmode_charging") != NULL) -- reboot(RB_POWER_OFF); -+ // old code to read /proc/cmdline was broken because file size is always 0 so file_data was always empty string -+ char cmdline[1024]; -+ memset(cmdline, 0, sizeof(cmdline)); -+ if(read_file("/proc/cmdline", cmdline, sizeof(cmdline)-1) < 0) return; -+ -+ if (strstr(cmdline, "androidboot.mode=offmode_charging") != NULL) -+ { -+ write_file("/sys/class/leds/lcd-backlight/brightness", "0\n", sizeof("0\n")-1); -+ write_file("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor", "powersave\n", sizeof("powersave\n")-1); -+ write_file("/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq", "245000\n", sizeof("245000\n")-1); -+ write_file("/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed", "245000\n", sizeof("245000\n")-1); -+ -+ pthread_t t; -+ pthread_create(&t, NULL, battery_thread, NULL); -+ -+ // let recovery kernel charge the battery, reboot on any key press so Android will start as user would expect -+ ev_init(); -+ struct input_event ev; -+ do { -+ ev_get(&ev, 0); -+ if(ev.type==EV_KEY) write_file("/sys/class/leds/lcd-backlight/brightness", "0\n", sizeof("0\n")-1); -+ } while (!(ev.type==EV_KEY && ev.code==KEY_END)); -+ -+ reboot(RB_AUTOBOOT); -+ for(;;); -+ } - } diff --git a/patches/kernel_clk_power_collapse.patch b/patches/kernel_clk_power_collapse.patch deleted file mode 100644 index 23a4881..0000000 --- a/patches/kernel_clk_power_collapse.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/arch/arm/mach-msm/board-htcleo.c b/arch/arm/mach-msm/board-htcleo.c -index e13205b..ee7680e 100644 ---- a/arch/arm/mach-msm/board-htcleo.c -+++ b/arch/arm/mach-msm/board-htcleo.c -@@ -87,6 +87,7 @@ static int __init parse_tag_nand_boot(const struct tag *tag) - { - struct tag_magldr_entry *mentry = (struct tag_magldr_entry *)(&tag->u); - nand_boot = !(unsigned int)mentry->fNoNandBoot; -+ if(*((unsigned*)&tag->u)==0x004b4c63) nand_boot = 2; // cLK signature - pr_info("Nand Boot: %d\n", nand_boot); - return 0; - } -diff --git a/arch/arm/mach-msm/pm.c b/arch/arm/mach-msm/pm.c -index 8766174..56ccb2a 100644 ---- a/arch/arm/mach-msm/pm.c -+++ b/arch/arm/mach-msm/pm.c -@@ -892,6 +892,15 @@ static int __init msm_pm_init(void) - register_reboot_notifier(&msm_reboot_notifier); - msm_pm_reset_vector = ioremap(0x0, PAGE_SIZE); - -+#if defined(CONFIG_MACH_HTCLEO) -+ // if cLK is bootloader 0x0 is protected and not writtable but cLK changed reset vecotr to jump at address stored at 0x11800004 -+ if(htcleo_is_nand_boot()==2){ -+ pr_info("msm_pm: 0x00000000: %x\n", msm_pm_reset_vector[0]); -+ pr_info("msm_pm: 0x00000004: %x\n", msm_pm_reset_vector[1]); -+ msm_pm_reset_vector = ioremap(0x11800000, PAGE_SIZE); -+ } -+#endif -+ - if (msm_pm_reset_vector == NULL) { - printk(KERN_ERR "msm_pm_init: failed to map reset vector\n"); - return -ENODEV; diff --git a/patches/kernel_off_mode_charging_panel_init_crash.patch b/patches/kernel_off_mode_charging_panel_init_crash.patch deleted file mode 100644 index f3f0077..0000000 --- a/patches/kernel_off_mode_charging_panel_init_crash.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff --git a/arch/arm/mach-msm/board-htcleo-panel.c b/arch/arm/mach-msm/board-htcleo-panel.c -index a7a701d..1b98611 100644 ---- a/arch/arm/mach-msm/board-htcleo-panel.c -+++ b/arch/arm/mach-msm/board-htcleo-panel.c -@@ -861,9 +861,17 @@ static void detect_panel_type(void) - } - else - { -- printk(" UNKNOWN, stop system now\n"); - htcleo_panel_type = PANELTYPE_UNKNOWN; -- BUG(); -+ extern int board_mfg_mode(void); -+ if(board_mfg_mode()==5) -+ { -+ printk(" offmode charging, panel is off\n"); -+ } -+ else -+ { -+ printk(" UNKNOWN, stop system now\n"); -+ BUG(); -+ } - } - } - -diff --git a/arch/arm/mach-msm/devices_htc.c b/arch/arm/mach-msm/devices_htc.c -index e5f65e7..6839c0d 100644 ---- a/arch/arm/mach-msm/devices_htc.c -+++ b/arch/arm/mach-msm/devices_htc.c -@@ -457,6 +457,10 @@ int __init board_mfg_mode_init(char *s) - mfg_mode = 2; - else if (!strcmp(s, "charge")) - mfg_mode = 3; -+ else if (!strcmp(s, "power_test")) -+ mfg_mode = 4; -+ else if (!strcmp(s, "offmode_charging")) -+ mfg_mode = 5; - - return 1; - } diff --git a/patches/kernel_reboot_reason.patch b/patches/kernel_reboot_reason.patch deleted file mode 100644 index bba4455..0000000 --- a/patches/kernel_reboot_reason.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff --git a/arch/arm/mach-msm/pm.c b/arch/arm/mach-msm/pm.c -index 56ccb2a..f3b17f2 100644 ---- a/arch/arm/mach-msm/pm.c -+++ b/arch/arm/mach-msm/pm.c -@@ -714,10 +714,28 @@ void msm_pm_flush_console(void) - release_console_sem(); - } - -+#if defined(CONFIG_MACH_HTCLEO) -+static void htcleo_save_reset_reason() -+{ -+ /* save restart_reason to be accesible in bootloader @ ramconsole - 0x1000*/ -+ uint32_t *bootloader_reset_reason = ioremap(0x2FFB0000, PAGE_SIZE); -+ if(bootloader_reset_reason!=NULL) -+ { -+ printk(KERN_INFO "msm_restart saving reason %x @ 0x2FFB0000 \n", restart_reason); -+ bootloader_reset_reason[0]=restart_reason; -+ bootloader_reset_reason[1]=restart_reason^0x004b4c63; //XOR with cLK signature so we know is not trash -+ } -+} -+#endif -+ - static void msm_pm_restart(char str) - { - msm_pm_flush_console(); - -+#if defined(CONFIG_MACH_HTCLEO) -+ htcleo_save_reset_reason(); -+#endif -+ - /* always reboot device through proc comm */ - if (restart_reason == 0x6f656d99) - msm_proc_comm(PCOM_RESET_CHIP_IMM, &restart_reason, 0);

xz-@UP|{0-q5j_iHYCRhqB=g0}q0 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